From d8e4308b1b2a5b7bfb5c959afefd966c5c3b9874 Mon Sep 17 00:00:00 2001 From: RockYang Date: Wed, 3 Jan 2024 18:06:10 +0800 Subject: [PATCH] fix: add unique key for MidJourney task_id --- api/handler/mj_handler.go | 8 +- api/handler/test_handler.go | 29 ++++++- api/service/mj/service.go | 4 +- database/update-v3.2.4.sql | 3 + web/src/App.vue | 126 ++++++++++++++++-------------- web/src/views/ImageMj.vue | 1 - web/src/views/admin/SysConfig.vue | 2 +- 7 files changed, 103 insertions(+), 70 deletions(-) diff --git a/api/handler/mj_handler.go b/api/handler/mj_handler.go index 06f92b35..a9c8922b 100644 --- a/api/handler/mj_handler.go +++ b/api/handler/mj_handler.go @@ -179,7 +179,6 @@ func (h *MidJourneyHandler) Image(c *gin.Context) { } type reqVo struct { - TaskId string `json:"task_id"` Index int `json:"index"` ChannelId string `json:"channel_id"` MessageId string `json:"message_id"` @@ -206,11 +205,12 @@ func (h *MidJourneyHandler) Upscale(c *gin.Context) { idValue, _ := c.Get(types.LoginUserID) jobId := 0 userId := utils.IntValue(utils.InterfaceToString(idValue), 0) + taskId, _ := h.snowflake.Next(true) job := model.MidJourneyJob{ Type: types.TaskUpscale.String(), ReferenceId: data.MessageId, UserId: userId, - TaskId: data.TaskId, + TaskId: taskId, Progress: 0, Prompt: data.Prompt, CreatedAt: time.Now(), @@ -253,13 +253,13 @@ func (h *MidJourneyHandler) Variation(c *gin.Context) { idValue, _ := c.Get(types.LoginUserID) jobId := 0 userId := utils.IntValue(utils.InterfaceToString(idValue), 0) - + taskId, _ := h.snowflake.Next(true) job := model.MidJourneyJob{ Type: types.TaskVariation.String(), ChannelId: data.ChannelId, ReferenceId: data.MessageId, UserId: userId, - TaskId: data.TaskId, + TaskId: taskId, Progress: 0, Prompt: data.Prompt, CreatedAt: time.Now(), diff --git a/api/handler/test_handler.go b/api/handler/test_handler.go index e94f25af..58c30422 100644 --- a/api/handler/test_handler.go +++ b/api/handler/test_handler.go @@ -1,6 +1,7 @@ package handler import ( + "chatplus/service" "chatplus/store/model" "chatplus/utils" "chatplus/utils/resp" @@ -10,14 +11,19 @@ import ( ) type TestHandler struct { - db *gorm.DB + db *gorm.DB + snowflake *service.Snowflake } -func NewTestHandler(db *gorm.DB) *TestHandler { - return &TestHandler{db: db} +func NewTestHandler(db *gorm.DB, snowflake *service.Snowflake) *TestHandler { + return &TestHandler{db: db, snowflake: snowflake} } func (h *TestHandler) Test(c *gin.Context) { + h.initMjTaskId(c) +} + +func (h *TestHandler) initUserNickname(c *gin.Context) { var users []model.User tx := h.db.Find(&users) if tx.Error != nil { @@ -32,3 +38,20 @@ func (h *TestHandler) Test(c *gin.Context) { resp.SUCCESS(c) } + +func (h *TestHandler) initMjTaskId(c *gin.Context) { + var jobs []model.MidJourneyJob + tx := h.db.Find(&jobs) + if tx.Error != nil { + resp.ERROR(c, tx.Error.Error()) + return + } + + for _, job := range jobs { + id, _ := h.snowflake.Next(true) + job.TaskId = id + h.db.Updates(&job) + } + + resp.SUCCESS(c) +} diff --git a/api/service/mj/service.go b/api/service/mj/service.go index 04cd94d8..a9a0a49b 100644 --- a/api/service/mj/service.go +++ b/api/service/mj/service.go @@ -121,9 +121,11 @@ func (s *Service) Notify(data CBReq) { return } - tx := s.db.Where("task_id = ? AND progress < 100", split[0]).Session(&gorm.Session{}).Order("id ASC") + tx := s.db.Session(&gorm.Session{}).Order("id ASC") if data.ReferenceId != "" { tx = tx.Where("reference_id = ?", data.ReferenceId) + } else { + tx = tx.Where("task_id = ?", split[0]) } res = tx.First(&job) if res.Error != nil { diff --git a/database/update-v3.2.4.sql b/database/update-v3.2.4.sql index 87642d1a..243431d8 100644 --- a/database/update-v3.2.4.sql +++ b/database/update-v3.2.4.sql @@ -1,2 +1,5 @@ ALTER TABLE `chatgpt_users` ADD `nickname` VARCHAR(30) NOT NULL COMMENT '昵称' AFTER `mobile`; ALTER TABLE `chatgpt_rewards` ADD `exchange` VARCHAR(255) NOT NULL COMMENT '兑换详情(json)' AFTER `status`; +ALTER TABLE `chatgpt_api_keys` ADD `api_url` VARCHAR(255) NULL COMMENT 'API 地址' AFTER `last_used_at`, ADD `enabled` TINYINT(1) NULL COMMENT '是否启用' AFTER `api_url`; +ALTER TABLE `chatgpt_api_keys` DROP INDEX `value`; +ALTER TABLE `chatgpt_mj_jobs` ADD UNIQUE(`task_id`); \ No newline at end of file diff --git a/web/src/App.vue b/web/src/App.vue index 31c8beb7..c657dba7 100644 --- a/web/src/App.vue +++ b/web/src/App.vue @@ -6,7 +6,8 @@ +import zhCn from 'element-plus/es/locale/lang/zh-cn'; + diff --git a/web/src/views/ImageMj.vue b/web/src/views/ImageMj.vue index 0475fa7a..c021c17f 100644 --- a/web/src/views/ImageMj.vue +++ b/web/src/views/ImageMj.vue @@ -711,7 +711,6 @@ const variation = (index, item) => { const send = (url, index, item) => { httpPost(url, { index: index, - task_id: item.task_id, channel_id: item.channel_id, message_id: item.message_id, message_hash: item.hash, diff --git a/web/src/views/admin/SysConfig.vue b/web/src/views/admin/SysConfig.vue index ae69eacc..772d914c 100644 --- a/web/src/views/admin/SysConfig.vue +++ b/web/src/views/admin/SysConfig.vue @@ -109,7 +109,7 @@ - +