From c5748d673bc50bb1fc9131c0a79326624a143aa8 Mon Sep 17 00:00:00 2001 From: cjy Date: Mon, 2 Mar 2026 15:35:06 +0800 Subject: [PATCH] =?UTF-8?q?fix=EF=BC=9A=20=E4=BF=AE=E6=94=B9=E7=94=9F?= =?UTF-8?q?=E6=88=90=E7=AB=9E=E5=93=81=E6=8A=A5=E5=91=8A=E7=9A=84=E8=AF=B7?= =?UTF-8?q?=E6=B1=82=E5=8F=82=E6=95=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pkg/service/cast/report.go | 33 ++++++++++++------------------ pkg/service/taskbench/taskBench.go | 4 ++-- 2 files changed, 15 insertions(+), 22 deletions(-) diff --git a/pkg/service/cast/report.go b/pkg/service/cast/report.go index 9530ae3f..bc47ef58 100644 --- a/pkg/service/cast/report.go +++ b/pkg/service/cast/report.go @@ -2,7 +2,6 @@ package cast import ( "context" - "encoding/json" "errors" "fmt" "fonchain-fiee/api/accountFiee" @@ -35,8 +34,8 @@ import ( // CreateCompetitiveReportReqEx 扩展的竞品报告请求(包含AI生成的JSON数据) type CreateCompetitiveReportReqEx struct { - *cast.CreateCompetitiveReportReq // 嵌入原有请求 - ReportData string `json:"reportData"` // AI生成的竞品报告JSON数据 + *cast.CreateCompetitiveReportReq // 嵌入原有请求 + ReportData utils.CompetitorReportData `json:"reportData"` // AI生成的竞品报告数据 } // CreateCompetitiveReport 创建竞品报告 @@ -58,7 +57,7 @@ func CreateCompetitiveReport(ctx *gin.Context) { return } -func CreateCompetitiveReportCore(ctx *gin.Context, req *cast.CreateCompetitiveReportReq, reportData string) (*cast.CreateCompetitiveReportResp, error) { +func CreateCompetitiveReportCore(ctx *gin.Context, req *cast.CreateCompetitiveReportReq, reportData utils.CompetitorReportData) (*cast.CreateCompetitiveReportResp, error) { loginInfo := login.GetUserInfoFromC(ctx) lockKey := fmt.Sprintf("lock_create_competitive_report_%d", loginInfo.ID) reply := cache.RedisClient.SetNX(lockKey, time.Now().Format("2006-01-02 15:04:05"), time.Second*5) @@ -113,7 +112,9 @@ func CreateCompetitiveReportCore(ctx *gin.Context, req *cast.CreateCompetitiveRe req.BundleOrderUuid = resp1.OrderUUID // 验证:报告内容、AI生成的JSON数据和图片不能同时为空 - if req.ReportContent == "" && reportData == "" && req.ImageUrl == "" { + // 检查 reportData 是否有数据 + hasReportData := reportData.OverallSummary != "" || reportData.HighlightAnalysis.Summary != "" + if req.ReportContent == "" && !hasReportData && req.ImageUrl == "" { return nil, errors.New("报告内容、AI数据和图片不能同时为空") } @@ -127,29 +128,21 @@ func CreateCompetitiveReportCore(ctx *gin.Context, req *cast.CreateCompetitiveRe } // 判断使用哪种方式生成PDF - if reportData != "" { + // 检查 reportData 是否有数据(通过判断 OverallSummary 是否为空) + if reportData.OverallSummary != "" || reportData.HighlightAnalysis.Summary != "" { // 使用 GenerateCompetitorReportPDF 生成PDF - // 解析 JSON 数据 - var competitorReportData utils.CompetitorReportData - zap.L().Info("reportData内容", zap.String("reportData", reportData)) + zap.L().Info("reportData内容", zap.Any("reportData", reportData)) - // 处理双重编码问题:替换中文引号为英文引号 - processedReportData := strings.ReplaceAll(reportData, "”", "\"") - processedReportData = strings.ReplaceAll(processedReportData, "“", "\"") - - if err := json.Unmarshal([]byte(processedReportData), &competitorReportData); err != nil { - zap.L().Error("解析竞品报告数据失败", zap.String("reportData", processedReportData), zap.Error(err)) - // 尝试打印更详细的错误信息 - zap.L().Error("详细错误", zap.Error(err)) - return nil, errors.New("竞品报告数据格式错误") - } - zap.L().Info("解析成功", zap.Any("competitorReportData", competitorReportData)) + // 直接使用传入的结构体数据 + competitorReportData := reportData // 如果有图片URL,设置到reportData中 if req.ImageUrl != "" { competitorReportData.ImageURL = req.ImageUrl } + zap.L().Info("解析成功", zap.Any("competitorReportData", competitorReportData)) + today := time.Now().Format("20060102") timestamp := time.Now().UnixMicro() pdfFileName := fmt.Sprintf("%s%s老师的竞品报告%d.pdf", today, req.ArtistName, timestamp) diff --git a/pkg/service/taskbench/taskBench.go b/pkg/service/taskbench/taskBench.go index 527dfbe3..0f10771e 100644 --- a/pkg/service/taskbench/taskBench.go +++ b/pkg/service/taskbench/taskBench.go @@ -383,8 +383,8 @@ type CreateWorkAnalysisWithTaskUUIDReq struct { type CreateCompetitiveReportWithTaskUUIDReq struct { *cast.CreateCompetitiveReportReq - AssignRecordsUUID string `json:"assignRecordsUUID"` - ReportData string `json:"reportData"` // AI生成的竞品报告JSON数据 + AssignRecordsUUID string `json:"assignRecordsUUID"` + ReportData utils.CompetitorReportData `json:"reportData"` // AI生成的竞品报告数据 } func UpdateWorkImageWithTaskUUID(ctx *gin.Context) {