🎨 优化批量上传文章接口
This commit is contained in:
@@ -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
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user