From db0a79da93edc2d8a425a95c9bc43bca78ad65d1 Mon Sep 17 00:00:00 2001 From: RockYang Date: Tue, 26 Sep 2023 09:30:18 +0800 Subject: [PATCH] fix: fixed bug for register error with parse args --- api/handler/mj_handler.go | 15 +++++++++++---- api/service/mj_service.go | 10 ++++------ api/store/model/mj_job.go | 1 + api/store/vo/mj_job.go | 1 + database/update-v3.1.4.sql | 2 ++ web/src/views/Register.vue | 1 + 6 files changed, 20 insertions(+), 10 deletions(-) create mode 100644 database/update-v3.1.4.sql diff --git a/api/handler/mj_handler.go b/api/handler/mj_handler.go index 97a8e966..22587f98 100644 --- a/api/handler/mj_handler.go +++ b/api/handler/mj_handler.go @@ -548,10 +548,17 @@ func (h *MidJourneyHandler) JobList(c *gin.Context) { if err != nil { continue } - if item.Progress < 100 && item.ImgURL != "" { // 正在运行中任务使用代理访问图片 - image, err := utils.DownloadImage(item.ImgURL, h.App.Config.ProxyURL) - if err == nil { - job.ImgURL = "data:image/png;base64," + base64.StdEncoding.EncodeToString(image) + if item.Progress < 100 { + // 30 分钟还没完成的任务直接删除 + if time.Now().Sub(item.CreatedAt) > time.Minute*30 { + h.db.Delete(&item) + continue + } + if item.ImgURL != "" { // 正在运行中任务使用代理访问图片 + image, err := utils.DownloadImage(item.ImgURL, h.App.Config.ProxyURL) + if err == nil { + job.ImgURL = "data:image/png;base64," + base64.StdEncoding.EncodeToString(image) + } } } jobs = append(jobs, job) diff --git a/api/service/mj_service.go b/api/service/mj_service.go index 7b46638a..16e38827 100644 --- a/api/service/mj_service.go +++ b/api/service/mj_service.go @@ -109,18 +109,16 @@ func (s *MjService) Run() { } if err != nil { logger.Error("绘画任务执行失败:", err) - if task.RetryCount > 5 { - // 取消并删除任务 - s.db.Where("id = ?", task.Id).Delete(&model.MidJourneyJob{}) - continue + if task.RetryCount <= 5 { + s.taskQueue.RPush(task) } task.RetryCount += 1 - s.taskQueue.RPush(task) - // TODO: 执行失败通知聊天客户端 time.Sleep(time.Second * 3) continue } + // 更新任务的执行状态 + s.db.Model(&model.MidJourneyJob{}).Where("id = ?", task.Id).UpdateColumn("started", true) // 锁定任务执行通道,直到任务超时(5分钟) s.redis.Set(ctx, MjRunningJobKey, utils.JsonEncode(task), time.Minute*5) } diff --git a/api/store/model/mj_job.go b/api/store/model/mj_job.go index 39848fb7..4076a419 100644 --- a/api/store/model/mj_job.go +++ b/api/store/model/mj_job.go @@ -12,6 +12,7 @@ type MidJourneyJob struct { Hash string // message hash Progress int Prompt string + Started bool CreatedAt time.Time } diff --git a/api/store/vo/mj_job.go b/api/store/vo/mj_job.go index 1cd47cd8..39a6444e 100644 --- a/api/store/vo/mj_job.go +++ b/api/store/vo/mj_job.go @@ -13,4 +13,5 @@ type MidJourneyJob struct { Progress int `json:"progress"` Prompt string `json:"prompt"` CreatedAt time.Time `json:"created_at"` + Started bool `json:"started"` } diff --git a/database/update-v3.1.4.sql b/database/update-v3.1.4.sql new file mode 100644 index 00000000..5ad368f5 --- /dev/null +++ b/database/update-v3.1.4.sql @@ -0,0 +1,2 @@ +ALTER TABLE `chatgpt_mj_jobs` ADD `started` TINYINT(1) NOT NULL DEFAULT '0' COMMENT '任务是否开始' AFTER `progress`; +UPDATE `chatgpt_mj_jobs` SET started = 1 \ No newline at end of file diff --git a/web/src/views/Register.vue b/web/src/views/Register.vue index c8f8d8b3..fce76a01 100644 --- a/web/src/views/Register.vue +++ b/web/src/views/Register.vue @@ -143,6 +143,7 @@ const register = function () { if (enableMsg.value && formData.value.code === '') { return ElMessage.error('请输入短信验证码'); } + formData.value.code = parseInt(formData.value.code) httpPost('/api/user/register', formData.value).then(() => { ElMessage.success({"message": "注册成功,即将跳转到登录页...", onClose: () => router.push("/login")}) }).catch((e) => {