fix组合包文档
This commit is contained in:
@@ -15,6 +15,7 @@ import (
|
||||
"tyapi-server/internal/shared/pdf"
|
||||
|
||||
"github.com/gin-gonic/gin"
|
||||
"github.com/shopspring/decimal"
|
||||
"go.uber.org/zap"
|
||||
)
|
||||
|
||||
@@ -765,6 +766,60 @@ func (h *ProductHandler) DownloadProductDocumentation(c *gin.Context) {
|
||||
docVersion = "1.0"
|
||||
}
|
||||
|
||||
// 如果是组合包,获取子产品的文档信息
|
||||
var subProductDocs []*entities.ProductDocumentation
|
||||
if product.IsPackage && len(product.PackageItems) > 0 {
|
||||
h.logger.Info("检测到组合包,开始获取子产品文档",
|
||||
zap.String("product_id", productID),
|
||||
zap.Int("sub_product_count", len(product.PackageItems)),
|
||||
)
|
||||
|
||||
// 收集所有子产品的ID
|
||||
subProductIDs := make([]string, 0, len(product.PackageItems))
|
||||
for _, item := range product.PackageItems {
|
||||
subProductIDs = append(subProductIDs, item.ProductID)
|
||||
}
|
||||
|
||||
// 批量获取子产品的文档
|
||||
subDocs, err := h.documentationAppService.GetDocumentationsByProductIDs(c.Request.Context(), subProductIDs)
|
||||
if err != nil {
|
||||
h.logger.Warn("获取组合包子产品文档失败",
|
||||
zap.String("product_id", productID),
|
||||
zap.Error(err),
|
||||
)
|
||||
} else {
|
||||
// 转换为entity类型,并按PackageItems的顺序排序
|
||||
docMap := make(map[string]*entities.ProductDocumentation)
|
||||
for i := range subDocs {
|
||||
docMap[subDocs[i].ProductID] = &entities.ProductDocumentation{
|
||||
ID: subDocs[i].ID,
|
||||
ProductID: subDocs[i].ProductID,
|
||||
RequestURL: subDocs[i].RequestURL,
|
||||
RequestMethod: subDocs[i].RequestMethod,
|
||||
BasicInfo: subDocs[i].BasicInfo,
|
||||
RequestParams: subDocs[i].RequestParams,
|
||||
ResponseFields: subDocs[i].ResponseFields,
|
||||
ResponseExample: subDocs[i].ResponseExample,
|
||||
ErrorCodes: subDocs[i].ErrorCodes,
|
||||
Version: subDocs[i].Version,
|
||||
}
|
||||
}
|
||||
|
||||
// 按PackageItems的顺序构建子产品文档列表
|
||||
for _, item := range product.PackageItems {
|
||||
if subDoc, exists := docMap[item.ProductID]; exists {
|
||||
subProductDocs = append(subProductDocs, subDoc)
|
||||
}
|
||||
}
|
||||
|
||||
h.logger.Info("成功获取组合包子产品文档",
|
||||
zap.String("product_id", productID),
|
||||
zap.Int("total_sub_products", len(product.PackageItems)),
|
||||
zap.Int("docs_found", len(subProductDocs)),
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
// 尝试从缓存获取PDF
|
||||
var pdfBytes []byte
|
||||
var cacheHit bool
|
||||
@@ -829,18 +884,61 @@ func (h *ProductHandler) DownloadProductDocumentation(c *gin.Context) {
|
||||
}
|
||||
}()
|
||||
|
||||
// 构建Product实体(用于PDF生成)
|
||||
productEntity := &entities.Product{
|
||||
ID: product.ID,
|
||||
Name: product.Name,
|
||||
Code: product.Code,
|
||||
Description: product.Description,
|
||||
Content: product.Content,
|
||||
IsPackage: product.IsPackage,
|
||||
Price: decimal.NewFromFloat(product.Price),
|
||||
}
|
||||
|
||||
// 如果是组合包,添加子产品信息
|
||||
if product.IsPackage && len(product.PackageItems) > 0 {
|
||||
productEntity.PackageItems = make([]*entities.ProductPackageItem, len(product.PackageItems))
|
||||
for i, item := range product.PackageItems {
|
||||
productEntity.PackageItems[i] = &entities.ProductPackageItem{
|
||||
ID: item.ID,
|
||||
PackageID: product.ID,
|
||||
ProductID: item.ProductID,
|
||||
SortOrder: item.SortOrder,
|
||||
Product: &entities.Product{
|
||||
ID: item.ProductID,
|
||||
Code: item.ProductCode,
|
||||
Name: item.ProductName,
|
||||
},
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 直接调用PDF生成器(简化版本,不使用goroutine)
|
||||
h.logger.Info("开始调用PDF生成器")
|
||||
pdfBytes, genErr := h.pdfGenerator.GenerateProductPDF(
|
||||
c.Request.Context(),
|
||||
product.ID,
|
||||
product.Name,
|
||||
product.Code,
|
||||
product.Description,
|
||||
product.Content,
|
||||
product.Price,
|
||||
docEntity,
|
||||
h.logger.Info("开始调用PDF生成器",
|
||||
zap.Bool("is_package", product.IsPackage),
|
||||
zap.Int("sub_product_docs_count", len(subProductDocs)),
|
||||
)
|
||||
|
||||
// 使用重构后的生成器
|
||||
refactoredGen := pdf.NewPDFGeneratorRefactored(h.logger)
|
||||
var genErr error
|
||||
|
||||
if product.IsPackage && len(subProductDocs) > 0 {
|
||||
// 组合包:使用支持子产品文档的方法
|
||||
pdfBytes, genErr = refactoredGen.GenerateProductPDFWithSubProducts(
|
||||
c.Request.Context(),
|
||||
productEntity,
|
||||
docEntity,
|
||||
subProductDocs,
|
||||
)
|
||||
} else {
|
||||
// 普通产品:使用标准方法
|
||||
pdfBytes, genErr = refactoredGen.GenerateProductPDFFromEntity(
|
||||
c.Request.Context(),
|
||||
productEntity,
|
||||
docEntity,
|
||||
)
|
||||
}
|
||||
h.logger.Info("PDF生成器调用返回",
|
||||
zap.String("product_id", productID),
|
||||
zap.Bool("has_error", genErr != nil),
|
||||
|
||||
Reference in New Issue
Block a user