From 1bcd0f4c1a1a232ddf599627f8f0220c93ea450f Mon Sep 17 00:00:00 2001 From: RockYang Date: Fri, 26 Jan 2024 14:50:36 +0800 Subject: [PATCH] feat: add err_msg field for mj and sd jobs --- CHANGELOG.md | 7 +++++++ api/service/mj/plus/service.go | 8 ++++++-- api/service/mj/pool.go | 5 ++++- api/service/mj/service.go | 7 +++++-- api/service/sd/service.go | 12 +++++++++--- api/store/model/mj_job.go | 5 +++-- api/store/model/sd_job.go | 3 ++- api/store/vo/mj_job.go | 1 + api/store/vo/sd_job.go | 1 + database/update-v3.2.7.sql | 4 ++++ web/src/views/ImageMj.vue | 10 ++++++---- web/src/views/ImageSd.vue | 3 ++- 12 files changed, 50 insertions(+), 16 deletions(-) create mode 100644 database/update-v3.2.7.sql diff --git a/CHANGELOG.md b/CHANGELOG.md index 311cff1a..cd8d9ad8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,4 +1,11 @@ # 更新日志 +## v3.2.7 +* 功能重构:采用 Vant 重构移动页面,新增 MidJourney 功能 +* 功能优化:优化 PC 端 MidJourney 页面布局,新增融图和换脸功能 +* Bug修复:修复 issue [ + 管理界面操作用户存在的两个问题](https://github.com/yangjian102621/chatgpt-plus/issues/117#issuecomment-1909201532) +* 功能优化:在对话和聊天记录表中新增冗余字段 model,存储对话模型 + ## v3.2.6 * 功能优化:恢复关闭注册系统配置项,管理员可以在后台关闭用户注册,只允许内部添加账号 * 功能优化:兼用旧版本微信收款消息解析 diff --git a/api/service/mj/plus/service.go b/api/service/mj/plus/service.go index 3b0d03c4..ff761366 100644 --- a/api/service/mj/plus/service.go +++ b/api/service/mj/plus/service.go @@ -86,9 +86,13 @@ func (s *Service) Run() { } if err != nil || (res.Code != 1 && res.Code != 22) { - logger.Error("绘画任务执行失败:", err, res.Description) + errMsg := err.Error() + res.Description + logger.Error("绘画任务执行失败:", errMsg) // update the task progress - s.db.Model(&model.MidJourneyJob{Id: uint(task.Id)}).UpdateColumn("progress", -1) + s.db.Model(&model.MidJourneyJob{Id: uint(task.Id)}).UpdateColumns(map[string]interface{}{ + "progress": -1, + "err_msg": errMsg, + }) // 任务失败,通知前端 s.notifyQueue.RPush(task.UserId) // restore img_call quota diff --git a/api/service/mj/pool.go b/api/service/mj/pool.go index 2e406407..9d2cc9d0 100644 --- a/api/service/mj/pool.go +++ b/api/service/mj/pool.go @@ -217,7 +217,10 @@ func (p *ServicePool) SyncTaskProgress() { } // 任务失败了 if task.FailReason != "" { - p.db.Model(&model.MidJourneyJob{Id: v.Id}).UpdateColumn("progress", -1) + p.db.Model(&model.MidJourneyJob{Id: v.Id}).UpdateColumns(map[string]interface{}{ + "progress": -1, + "err_msg": task.FailReason, + }) continue } if len(task.Buttons) > 0 { diff --git a/api/service/mj/service.go b/api/service/mj/service.go index 23b8a04d..f0bfc47d 100644 --- a/api/service/mj/service.go +++ b/api/service/mj/service.go @@ -82,9 +82,12 @@ func (s *Service) Run() { } if err != nil { - logger.Error("绘画任务执行失败:", err) + logger.Error("绘画任务执行失败:", err.Error()) // update the task progress - s.db.Model(&model.MidJourneyJob{Id: uint(task.Id)}).UpdateColumn("progress", -1) + s.db.Model(&model.MidJourneyJob{Id: uint(task.Id)}).UpdateColumns(map[string]interface{}{ + "progress": -1, + "err_msg": err.Error(), + }) s.notifyQueue.RPush(task.UserId) // restore img_call quota if task.Type.String() != types.TaskUpscale.String() { diff --git a/api/service/sd/service.go b/api/service/sd/service.go index c090583f..73d3b6ea 100644 --- a/api/service/sd/service.go +++ b/api/service/sd/service.go @@ -68,9 +68,12 @@ func (s *Service) Run() { logger.Infof("%s handle a new Stable-Diffusion task: %+v", s.name, task) err = s.Txt2Img(task) if err != nil { - logger.Error("绘画任务执行失败:", err) + logger.Error("绘画任务执行失败:", err.Error()) // update the task progress - s.db.Model(&model.SdJob{Id: uint(task.Id)}).UpdateColumn("progress", -1) + s.db.Model(&model.SdJob{Id: uint(task.Id)}).UpdateColumns(map[string]interface{}{ + "progress": -1, + "err_msg": err.Error(), + }) // restore img_call quota s.db.Model(&model.User{}).Where("id = ?", task.UserId).UpdateColumn("img_calls", gorm.Expr("img_calls + ?", 1)) // release task num @@ -300,7 +303,10 @@ func (s *Service) callback(data CBReq) { } else { // 任务失败 logger.Error("任务执行失败:", data.Message) // update the task progress - s.db.Model(&model.SdJob{Id: uint(data.JobId)}).UpdateColumn("progress", -1) + s.db.Model(&model.SdJob{Id: uint(data.JobId)}).UpdateColumns(map[string]interface{}{ + "progress": -1, + "err_msg": data.Message, + }) // restore img_calls s.db.Model(&model.User{}).Where("id = ? AND img_calls > 0", data.UserId).UpdateColumn("img_calls", gorm.Expr("img_calls + ?", 1)) } diff --git a/api/store/model/mj_job.go b/api/store/model/mj_job.go index 33b055d8..1b1494a9 100644 --- a/api/store/model/mj_job.go +++ b/api/store/model/mj_job.go @@ -15,8 +15,9 @@ type MidJourneyJob struct { Hash string // message hash Progress int Prompt string - UseProxy bool // 是否使用反代加载图片 - Publish bool //是否发布图片到画廊 + UseProxy bool // 是否使用反代加载图片 + Publish bool //是否发布图片到画廊 + ErrMsg string // 报错信息 CreatedAt time.Time } diff --git a/api/store/model/sd_job.go b/api/store/model/sd_job.go index 26132190..ce860753 100644 --- a/api/store/model/sd_job.go +++ b/api/store/model/sd_job.go @@ -11,7 +11,8 @@ type SdJob struct { Progress int Prompt string Params string - Publish bool //是否发布图片到画廊 + Publish bool //是否发布图片到画廊 + ErrMsg string // 报错信息 CreatedAt time.Time } diff --git a/api/store/vo/mj_job.go b/api/store/vo/mj_job.go index 5ec37b0d..165af827 100644 --- a/api/store/vo/mj_job.go +++ b/api/store/vo/mj_job.go @@ -17,5 +17,6 @@ type MidJourneyJob struct { Prompt string `json:"prompt"` UseProxy bool `json:"use_proxy"` Publish bool `json:"publish"` + ErrMsg string `json:"err_msg"` CreatedAt time.Time `json:"created_at"` } diff --git a/api/store/vo/sd_job.go b/api/store/vo/sd_job.go index dfed014b..57df9739 100644 --- a/api/store/vo/sd_job.go +++ b/api/store/vo/sd_job.go @@ -15,5 +15,6 @@ type SdJob struct { Progress int `json:"progress"` Prompt string `json:"prompt"` Publish bool `json:"publish"` + ErrMsg string `json:"err_msg"` CreatedAt time.Time `json:"created_at"` } diff --git a/database/update-v3.2.7.sql b/database/update-v3.2.7.sql new file mode 100644 index 00000000..1339fa0f --- /dev/null +++ b/database/update-v3.2.7.sql @@ -0,0 +1,4 @@ +ALTER TABLE `chatgpt_mj_jobs` ADD `err_msg` VARCHAR(255) DEFAULT NULL COMMENT '错误信息' AFTER `publish`; +ALTER TABLE `chatgpt_sd_jobs` ADD `err_msg` VARCHAR(255) DEFAULT NULL COMMENT '错误信息' AFTER `publish`; + +ALTER TABLE `chatgpt_chat_items` ADD `model` VARCHAR(30) NULL COMMENT '模型名称' AFTER `model_id`; \ No newline at end of file diff --git a/web/src/views/ImageMj.vue b/web/src/views/ImageMj.vue index 72fb31e4..58e94c87 100644 --- a/web/src/views/ImageMj.vue +++ b/web/src/views/ImageMj.vue @@ -397,7 +397,7 @@
-
+
  • U1
  • @@ -690,7 +690,8 @@ const fetchRunningJobs = (userId) => { if (jobs[i].progress === -1) { ElNotification({ title: '任务执行失败', - message: "任务ID:" + jobs[i]['task_id'], + dangerouslyUseHTMLString: true, + message: `任务ID:${jobs[i]['task_id']}
    原因:${jobs[i]['err_msg']}`, type: 'error', }) imgCalls.value += 1 @@ -712,9 +713,10 @@ const fetchFinishJobs = (userId) => { if (jobs[i]['use_proxy']) { jobs[i]['thumb_url'] = jobs[i]['img_url'] + '?x-oss-process=image/quality,q_60&format=webp' } else { - if (jobs[i].type === 'upscale') { + if (jobs[i].type === 'upscale' || jobs[i].type === 'swapFace') { jobs[i]['thumb_url'] = jobs[i]['img_url'] + '?imageView2/1/w/480/h/600/q/75' } else { + jobs[i]['can_opt'] = true jobs[i]['thumb_url'] = jobs[i]['img_url'] + '?imageView2/1/w/480/h/480/q/75' } } diff --git a/web/src/views/ImageSd.vue b/web/src/views/ImageSd.vue index d1f8d50a..6f2f1b74 100644 --- a/web/src/views/ImageSd.vue +++ b/web/src/views/ImageSd.vue @@ -600,7 +600,8 @@ onMounted(() => { if (jobs[i].progress === -1) { ElNotification({ title: '任务执行失败', - message: "任务ID:" + jobs[i]['task_id'], + dangerouslyUseHTMLString: true, + message: `任务ID:${jobs[i]['task_id']}
    原因:${jobs[i]['err_msg']}`, type: 'error', }) imgCalls.value += 1