diff --git a/pkg/service/cast/report.go b/pkg/service/cast/report.go index 241cbabc..491b7405 100644 --- a/pkg/service/cast/report.go +++ b/pkg/service/cast/report.go @@ -143,9 +143,8 @@ func CreateCompetitiveReportCore(ctx *gin.Context, req *cast.CreateCompetitiveRe 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) + // 生成PDF文件名,使用报告标题命名 + pdfFileName := generateReportFileName(req.Title, req.ArtistName) + ".pdf" pdfFilePath := "./runtime/report_pdf/" + pdfFileName _, err = utils.CheckDirPath("./runtime/report_pdf/", true) @@ -501,10 +500,8 @@ func ImportCompetitiveReportBatch(ctx *gin.Context) { } // 生成PDF并上传 - // 生成临时PDF文件路径 - today := time.Now().Format("20060102") - timestamp := time.Now().UnixMicro() - pdfFileName := fmt.Sprintf("%s%s老师的竞品报告%d.pdf", today, temp.ArtistName, timestamp) + // 生成临时PDF文件路径,使用报告标题命名 + pdfFileName := generateReportFileName(temp.Title, temp.ArtistName) + ".pdf" pdfFilePath := "./runtime/report_pdf/" + pdfFileName // 确保目录存在 @@ -1317,6 +1314,36 @@ func checkAndReuploadImageForReport(imageUrl string) (string, error) { return compressUrl, nil } +// generateReportFileName 生成竞品报告PDF文件名 +// 如果有标题则使用标题,否则使用默认格式(日期+老师+时间戳) +func generateReportFileName(title, artistName string) string { + // 如果有标题,使用标题命名 + if title != "" { + // 替换标题中的特殊字符为合法字符 + fileName := strings.NewReplacer( + "/", "", + "\\", "", + ":", "", + "*", "", + "?", "", + "\"", "", + "<", "", + ">", "", + "|", "", + " ", "_", + ).Replace(title) + // 限制文件名长度,避免过长 + if len(fileName) > 100 { + fileName = fileName[:100] + } + return fileName + } + // 没有标题时使用默认格式 + today := time.Now().Format("20060102") + timestamp := time.Now().UnixMicro() + return fmt.Sprintf("%s%s老师的竞品报告%d", today, artistName, timestamp) +} + // truncateCompetitorReportData 截断竞品报告数据中超长的字段 // 字段长度要求参考 AI 生成竞品报告的限制 func truncateCompetitorReportData(data utils.CompetitorReportData) utils.CompetitorReportData {