🎨 优化批量上传文章接口

This commit is contained in:
2025-10-14 01:23:04 +08:00
parent 99779e6415
commit 562413c145

View File

@@ -297,19 +297,49 @@ func (s ArticleService) BulkUpload(p request.BulkUpload) (err error) {
var articles []article.Article
var failedFiles []string
// 1. 批量获取所有讲师名
teacherNameMap := make(map[string]struct{})
fileTeacherMap := make(map[string]string) // 文件->讲师名
for _, a := range p.Files {
teacher := user.User{}
if dbErr := global.GVA_DB.Model(&teacher).Where("nick_name = ?", getTeacherName(a)).First(&teacher).Error; dbErr != nil {
global.GVA_LOG.Error("获取讲师信息失败", zap.Error(dbErr))
name := getTeacherName(a)
teacherNameMap[name] = struct{}{}
fileTeacherMap[a] = name
}
var teacherNames []string
for name := range teacherNameMap {
teacherNames = append(teacherNames, name)
}
// 2. 一次性查出所有讲师
var teachers []user.User
if len(teacherNames) > 0 {
dbErr := global.GVA_DB.Model(&user.User{}).Where("nick_name IN ?", teacherNames).Find(&teachers).Error
if dbErr != nil {
global.GVA_LOG.Error("批量获取讲师信息失败", zap.Error(dbErr))
return dbErr
}
}
teacherMap := make(map[string]user.User)
for _, t := range teachers {
teacherMap[t.NickName] = t
}
// 3. 组装文章
for _, a := range p.Files {
teacherName := fileTeacherMap[a]
teacher, ok := teacherMap[teacherName]
if !ok {
global.GVA_LOG.Error("获取讲师信息失败", zap.String("teacherName", teacherName))
failedFiles = append(failedFiles, a)
continue
}
content := "<p><img src=" + a + " alt=\"" + a + "\" data-href=\"\" style=\"width: 100%;height: auto;\"/></p>"
// 将 p.PublishTime转为time.time类型
loc, _ := time.LoadLocation("Asia/Shanghai")
publishTime, _ := time.ParseInLocation("2006-01-02 15:04:05", p.PublishTime, loc)
var publishTime time.Time
if p.PublishTime != "" {
publishTime, _ = time.ParseInLocation("2006-01-02 15:04:05", p.PublishTime, loc)
}
status := 2
if p.PublishTime == "" {
status = 1 // 如果没有设置发布时间,默认立即发布
@@ -330,8 +360,15 @@ func (s ArticleService) BulkUpload(p request.BulkUpload) (err error) {
})
}
if len(articles) > 0 {
if dbErr := global.GVA_DB.Create(&articles).Error; dbErr != nil {
// 4. 分批插入
batchSize := 100
for i := 0; i < len(articles); i += batchSize {
end := i + batchSize
if end > len(articles) {
end = len(articles)
}
batch := articles[i:end]
if dbErr := global.GVA_DB.Create(&batch).Error; dbErr != nil {
global.GVA_LOG.Error("批量上传文章失败", zap.Error(dbErr))
return dbErr
}