fix: 修改生成竞品报告文件名的逻辑

This commit is contained in:
cjy 2026-03-03 15:37:10 +08:00
parent 6f5c7f219c
commit e90d298f98

View File

@ -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 {