fix: 固定使用模板生成报告

This commit is contained in:
cjy 2026-03-03 10:09:32 +08:00
parent 7cc03c02fa
commit 51f82425c5

View File

@ -34,8 +34,8 @@ import (
// CreateCompetitiveReportReqEx 扩展的竞品报告请求包含AI生成的JSON数据 // CreateCompetitiveReportReqEx 扩展的竞品报告请求包含AI生成的JSON数据
type CreateCompetitiveReportReqEx struct { type CreateCompetitiveReportReqEx struct {
*cast.CreateCompetitiveReportReq // 嵌入原有请求 *cast.CreateCompetitiveReportReq // 嵌入原有请求
ReportData utils.CompetitorReportData `json:"reportData,json_data"` // AI生成的竞品报告数据支持 reportData 和 json_data 两种字段名) ReportData utils.CompetitorReportData `json:"reportData,json_data"` // AI生成的竞品报告数据支持 reportData 和 json_data 两种字段名)
} }
// CreateCompetitiveReport 创建竞品报告 // CreateCompetitiveReport 创建竞品报告
@ -111,11 +111,10 @@ func CreateCompetitiveReportCore(ctx *gin.Context, req *cast.CreateCompetitiveRe
} }
req.BundleOrderUuid = resp1.OrderUUID req.BundleOrderUuid = resp1.OrderUUID
// 验证报告内容、AI生成的JSON数据和图片不能同时为空 // 验证:必须传入 json_data使用模板方式生成PDF
// 检查 reportData 是否有数据
hasReportData := reportData.OverallSummary != "" || reportData.HighlightAnalysis.Summary != "" hasReportData := reportData.OverallSummary != "" || reportData.HighlightAnalysis.Summary != ""
if req.ReportContent == "" && !hasReportData && req.ImageUrl == "" { if !hasReportData {
return nil, errors.New("报告内容、AI数据和图片不能同时为空") return nil, errors.New("请传入json_data参数")
} }
if req.ImageUrl != "" { if req.ImageUrl != "" {
@ -127,21 +126,18 @@ func CreateCompetitiveReportCore(ctx *gin.Context, req *cast.CreateCompetitiveRe
req.ImageUrl = newImageUrl req.ImageUrl = newImageUrl
} }
// 判断使用哪种方式生成PDF // 使用模板方式生成PDF
// 检查 reportData 是否有数据(通过判断 OverallSummary 是否为空) zap.L().Info("reportData内容", zap.Any("reportData", reportData))
if reportData.OverallSummary != "" || reportData.HighlightAnalysis.Summary != "" {
// 使用 GenerateCompetitorReportPDF 生成PDF
zap.L().Info("reportData内容", zap.Any("reportData", reportData))
// 直接使用传入的结构体数据 // 直接使用传入的结构体数据
competitorReportData := reportData competitorReportData := reportData
// 如果有图片URL设置到reportData中 // 如果有图片URL设置到reportData中
if req.ImageUrl != "" { if req.ImageUrl != "" {
competitorReportData.ImageURL = req.ImageUrl competitorReportData.ImageURL = req.ImageUrl
} }
zap.L().Info("解析成功", zap.Any("competitorReportData", competitorReportData)) zap.L().Info("解析成功", zap.Any("competitorReportData", competitorReportData))
today := time.Now().Format("20060102") today := time.Now().Format("20060102")
timestamp := time.Now().UnixMicro() timestamp := time.Now().UnixMicro()
@ -173,50 +169,12 @@ func CreateCompetitiveReportCore(ctx *gin.Context, req *cast.CreateCompetitiveRe
} }
}() }()
pdfUrl, uploadErr := upload.PutBos(pdfFilePath, upload.PdfType, true) pdfUrl, uploadErr := upload.PutBos(pdfFilePath, upload.PdfType, true)
if uploadErr != nil { if uploadErr != nil {
zap.L().Error("上传PDF失败: %v", zap.Error(uploadErr)) zap.L().Error("上传PDF失败: %v", zap.Error(uploadErr))
return nil, errors.New("上传PDF失败") return nil, errors.New("上传PDF失败")
}
req.PdfUrl = pdfUrl
} else if req.ReportContent != "" {
// 使用原有的 GeneratePDF 生成PDF
today := time.Now().Format("20060102")
timestamp := time.Now().UnixMicro()
pdfFileName := fmt.Sprintf("%s%s老师的竞品报告%d.pdf", today, req.ArtistName, timestamp)
pdfFilePath := "./runtime/report_pdf/" + pdfFileName
_, err = utils.CheckDirPath("./runtime/report_pdf/", true)
if err != nil {
return nil, fmt.Errorf("创建PDF目录失败: %v", err)
}
fontPath := "./data/simfang.ttf"
err = utils.GeneratePDF(req.ReportContent, req.ImageUrl, pdfFilePath, fontPath)
if err != nil {
zap.L().Error("生成PDF失败", zap.Error(err))
return nil, errors.New("生成PDF失败")
}
defer func() {
if _, err := os.Stat(pdfFilePath); err == nil {
if err := os.Remove(pdfFilePath); err != nil {
zap.L().Warn("删除临时PDF文件失败", zap.String("path", pdfFilePath), zap.Error(err))
} else {
zap.L().Info("删除临时PDF文件成功", zap.String("path", pdfFilePath))
}
}
}()
pdfUrl, uploadErr := upload.PutBos(pdfFilePath, upload.PdfType, true)
if uploadErr != nil {
zap.L().Error("上传PDF失败: %v", zap.Error(uploadErr))
return nil, errors.New("上传PDF失败")
}
req.PdfUrl = pdfUrl
} else {
req.PdfUrl = req.ImageUrl
} }
req.PdfUrl = pdfUrl
resp, err := service.CastProvider.CreateCompetitiveReport(newCtx, req) resp, err := service.CastProvider.CreateCompetitiveReport(newCtx, req)
if err != nil { if err != nil {