From 51f82425c566e036dfef1a33ae201de0cce51755 Mon Sep 17 00:00:00 2001 From: cjy Date: Tue, 3 Mar 2026 10:09:32 +0800 Subject: [PATCH] =?UTF-8?q?fix=EF=BC=9A=20=E5=9B=BA=E5=AE=9A=E4=BD=BF?= =?UTF-8?q?=E7=94=A8=E6=A8=A1=E6=9D=BF=E7=94=9F=E6=88=90=E6=8A=A5=E5=91=8A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pkg/service/cast/report.go | 80 +++++++++----------------------------- 1 file changed, 19 insertions(+), 61 deletions(-) diff --git a/pkg/service/cast/report.go b/pkg/service/cast/report.go index c3147d37..fdea3c89 100644 --- a/pkg/service/cast/report.go +++ b/pkg/service/cast/report.go @@ -34,8 +34,8 @@ import ( // CreateCompetitiveReportReqEx 扩展的竞品报告请求(包含AI生成的JSON数据) type CreateCompetitiveReportReqEx struct { - *cast.CreateCompetitiveReportReq // 嵌入原有请求 - ReportData utils.CompetitorReportData `json:"reportData,json_data"` // AI生成的竞品报告数据(支持 reportData 和 json_data 两种字段名) + *cast.CreateCompetitiveReportReq // 嵌入原有请求 + ReportData utils.CompetitorReportData `json:"reportData,json_data"` // AI生成的竞品报告数据(支持 reportData 和 json_data 两种字段名) } // CreateCompetitiveReport 创建竞品报告 @@ -111,11 +111,10 @@ func CreateCompetitiveReportCore(ctx *gin.Context, req *cast.CreateCompetitiveRe } req.BundleOrderUuid = resp1.OrderUUID - // 验证:报告内容、AI生成的JSON数据和图片不能同时为空 - // 检查 reportData 是否有数据 + // 验证:必须传入 json_data(使用模板方式生成PDF) hasReportData := reportData.OverallSummary != "" || reportData.HighlightAnalysis.Summary != "" - if req.ReportContent == "" && !hasReportData && req.ImageUrl == "" { - return nil, errors.New("报告内容、AI数据和图片不能同时为空") + if !hasReportData { + return nil, errors.New("请传入json_data参数") } if req.ImageUrl != "" { @@ -127,21 +126,18 @@ func CreateCompetitiveReportCore(ctx *gin.Context, req *cast.CreateCompetitiveRe req.ImageUrl = newImageUrl } - // 判断使用哪种方式生成PDF - // 检查 reportData 是否有数据(通过判断 OverallSummary 是否为空) - if reportData.OverallSummary != "" || reportData.HighlightAnalysis.Summary != "" { - // 使用 GenerateCompetitorReportPDF 生成PDF - zap.L().Info("reportData内容", zap.Any("reportData", reportData)) + // 使用模板方式生成PDF + zap.L().Info("reportData内容", zap.Any("reportData", reportData)) - // 直接使用传入的结构体数据 - competitorReportData := reportData + // 直接使用传入的结构体数据 + competitorReportData := reportData - // 如果有图片URL,设置到reportData中 - if req.ImageUrl != "" { - competitorReportData.ImageURL = req.ImageUrl - } + // 如果有图片URL,设置到reportData中 + if 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") timestamp := time.Now().UnixMicro() @@ -173,50 +169,12 @@ func CreateCompetitiveReportCore(ctx *gin.Context, req *cast.CreateCompetitiveRe } }() - 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 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 + 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 resp, err := service.CastProvider.CreateCompetitiveReport(newCtx, req) if err != nil {