From 8022eca1f85fd9b9afe74964fbd2513033a69f6d Mon Sep 17 00:00:00 2001 From: cjy Date: Mon, 2 Mar 2026 16:47:55 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E7=AB=9E=E5=93=81=E6=8A=A5=E5=91=8A?= =?UTF-8?q?=E6=89=B9=E9=87=8F=E5=AF=BC=E5=85=A5=E7=9A=84=E6=97=B6=E5=80=99?= =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E5=88=B0=E6=AD=A3=E6=96=87?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pkg/service/cast/report.go | 5 +++ pkg/utils/pdf.go | 65 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 70 insertions(+) diff --git a/pkg/service/cast/report.go b/pkg/service/cast/report.go index e9ce8357..5f42ef29 100644 --- a/pkg/service/cast/report.go +++ b/pkg/service/cast/report.go @@ -577,6 +577,11 @@ func ImportCompetitiveReportBatch(ctx *gin.Context) { // 将上传后的PDF链接设置到请求中 temp.PdfUrl = pdfUrl + // 生成竞品报告正文 + // 判断是否为视频:如果有图片URL则为图片,否则根据配乐亮点和完播率是否有值来判断 + isVideo := competitorReportData.HighlightAnalysis.Points.Music != "" || competitorReportData.DataPerformance.Completion != "" + temp.ReportContent = utils.ConvertCompetitorReportToText(competitorReportData, isVideo) + // 清理临时PDF文件 if _, err := os.Stat(pdfFilePath); err == nil { if err := os.Remove(pdfFilePath); err != nil { diff --git a/pkg/utils/pdf.go b/pkg/utils/pdf.go index 47618d12..5afb9675 100644 --- a/pkg/utils/pdf.go +++ b/pkg/utils/pdf.go @@ -9,6 +9,7 @@ import ( "net/url" "os" "path/filepath" + "strings" "unicode" "github.com/phpdave11/gofpdf" @@ -497,3 +498,67 @@ func wrapText(text string, maxLen int) []string { return lines } + +// ConvertCompetitorReportToText 将竞品报告数据转换为文本格式 +// 参数: +// - data: 竞品报告数据 +// - isVideo: 是否为视频(视频需要包含完播率和配乐亮点) +// +// 返回: 转换后的文本内容 +func ConvertCompetitorReportToText(data CompetitorReportData, isVideo bool) string { + var sb strings.Builder + + // 一、亮点表现分析 + sb.WriteString("一、亮点表现分析\n") + sb.WriteString(data.HighlightAnalysis.Summary) + sb.WriteString("\n\n") + + sb.WriteString("1. 标题亮点:") + sb.WriteString(data.HighlightAnalysis.Points.Theme) + sb.WriteString("\n") + + sb.WriteString("2. 题材亮点:") + sb.WriteString(data.HighlightAnalysis.Points.Narrative) + sb.WriteString("\n") + + sb.WriteString("3. 内容亮点:") + sb.WriteString(data.HighlightAnalysis.Points.Content) + sb.WriteString("\n") + + sb.WriteString("4. 文案亮点:") + sb.WriteString(data.HighlightAnalysis.Points.Copywriting) + sb.WriteString("\n") + + sb.WriteString("5. 数据亮点:") + sb.WriteString(data.HighlightAnalysis.Points.Data) + sb.WriteString("\n") + + if isVideo && data.HighlightAnalysis.Points.Music != "" { + sb.WriteString("6. 配乐亮点:") + sb.WriteString(data.HighlightAnalysis.Points.Music) + sb.WriteString("\n") + } + + // 二、数据表现分析 + sb.WriteString("\n二、数据表现分析\n") + sb.WriteString("1. 浏览量表现:") + sb.WriteString(data.DataPerformance.Views) + sb.WriteString("\n") + + if isVideo && data.DataPerformance.Completion != "" { + sb.WriteString("2. 完播率表现:") + sb.WriteString(data.DataPerformance.Completion) + sb.WriteString("\n") + sb.WriteString("3. 点赞/分享/评论表现:") + } else { + sb.WriteString("2. 点赞/分享/评论表现:") + } + sb.WriteString(data.DataPerformance.Engagement) + sb.WriteString("\n") + + // 三、整体总结及可优化建议 + sb.WriteString("\n三、整体总结及可优化建议\n") + sb.WriteString(data.OverallSummary) + + return sb.String() +}