zwhui 2 лет назад
Родитель
Сommit
aa5a229f10

+ 0 - 1
midjourney/src/main/java/com/yhlxj/dao/model/dto/SubmitActionDTO.java

@@ -30,5 +30,4 @@ public class SubmitActionDTO {
      * NIJI_JOURNEY
      */
     private String botType = "MID_JOURNEY";
-    private Integer mode;
 }

+ 0 - 5
midjourney/src/main/java/com/yhlxj/dao/model/entity/MidjourneyUser.java

@@ -52,11 +52,6 @@ public class MidjourneyUser extends BaseEntity {
      */
     private Integer mjRelaxNum;
 
-    /**
-     * 当前模式 1:fast 2:relax
-     */
-    private Integer mode;
-
     /**
      * 车票类型 2试用
      */

+ 8 - 8
midjourney/src/main/java/com/yhlxj/service/midjourney/MidjourneyService.java

@@ -13,27 +13,27 @@ import java.util.List;
  * @date 2024/4/23 15:44
  */
 public interface MidjourneyService {
-    MidjourneyUserConversation submitImagine(MidjourneyUser user, String prompt, String botType, List<String> base64Array) throws Exception;
+    MidjourneyUserConversation submitImagine(MidjourneyUser user, Integer mode,String prompt, String botType, List<String> base64Array) throws Exception;
 
-    MidjourneyUserConversation submitDescribe(MidjourneyUser user, String botType, String base64) throws Exception;
+    MidjourneyUserConversation submitDescribe(MidjourneyUser user, Integer mode,String botType, String base64) throws Exception;
 
-    MidjourneyUserConversation submitBlend(MidjourneyUser user, BlendDimensions dimensions, String botType, List<String> base64Array) throws Exception;
+    MidjourneyUserConversation submitBlend(MidjourneyUser user, Integer mode,BlendDimensions dimensions, String botType, List<String> base64Array) throws Exception;
 
-    MidjourneyUserConversation submitModal(MidjourneyUser user, Long taskId, String prompt, String maskBase64) throws Exception;
+    MidjourneyUserConversation submitModal(MidjourneyUser user,Integer mode, Long taskId, String prompt, String maskBase64) throws Exception;
 
-    MidjourneyUserConversation submitShorten(MidjourneyUser user, String botType, String prompt) throws Exception;
+    MidjourneyUserConversation submitShorten(MidjourneyUser user, Integer mode,String botType, String prompt) throws Exception;
 
-    MidjourneyUserConversation submitSeed(MidjourneyUser user, Long taskId, String botType) throws Exception;
+    MidjourneyUserConversation submitSeed(MidjourneyUser user, Integer mode,Long taskId, String botType) throws Exception;
 
     List<MidjourneyUserConversation> listConversationByIds(Integer mode, List<Long> ids) throws Exception;
 
     MidjourneyUserConversation getConversationById(Long id);
 
-    Object submitAction(MidjourneyUser user, Long taskId, String customId, Long num, String botType) throws Exception;
+    Object submitAction(MidjourneyUser user,MidjourneyUserConversation conversation,Integer mode, Long taskId, String customId, Long num, String botType) throws Exception;
 
     MidjourneyUserConversation cancelConversation(MidjourneyUser user, Long id);
 
     void notifyHook(String conversation) throws Exception;
 
-    MidjourneyUser getUser(String userToken,Integer mode);
+    MidjourneyUser getUser(String userToken);
 }

+ 34 - 40
midjourney/src/main/java/com/yhlxj/service/midjourney/impl/MidjourneyServiceImpl.java

@@ -85,7 +85,7 @@ public class MidjourneyServiceImpl implements MidjourneyService {
     private final GroupsRelationMapper groupsRelationMapper;
 
     @Override
-    public MidjourneyUser getUser(String userToken,Integer mode) {
+    public MidjourneyUser getUser(String userToken) {
         MidjourneyUser midjourneyUser = midjourneyUserMapper.selectOne(Wrappers.lambdaQuery(MidjourneyUser.class)
                 .eq(MidjourneyUser::getUserToken, userToken).last("limit 1"));
         if (midjourneyUser == null){
@@ -101,14 +101,11 @@ public class MidjourneyServiceImpl implements MidjourneyService {
         Long relationId = midjourneyUser.getRelationId();
         GroupsRelation relation = groupsRelationMapper.selectById(relationId);
         midjourneyUser.setAqType(relation.getAqType());
-        if (mode != null) {
-            midjourneyUser.setMode(mode);
-        }
         return midjourneyUser;
     }
 
     @Override
-    public MidjourneyUserConversation submitImagine(MidjourneyUser user, String prompt, String botType, List<String> base64Array) throws Exception {
+    public MidjourneyUserConversation submitImagine(MidjourneyUser user, Integer mode,String prompt, String botType, List<String> base64Array) throws Exception {
         Map<String, Object> imagineParam = MapUtil.builder(new HashMap<String,Object>())
                 .put("prompt", prompt)
                 .put("state", user.getId())
@@ -116,11 +113,11 @@ public class MidjourneyServiceImpl implements MidjourneyService {
         if (CollectionUtil.isNotEmpty(base64Array)) {
             imagineParam.put("base64Array", base64Array);
         }
-        SubmitResult result = submit(user.getMode(),"imagine", null,imagineParam);
-        if (user.getMode() == 2) {
+        SubmitResult result = submit(mode,"imagine", null,imagineParam);
+        if (mode == 2) {
             redisService.hincr(RedisService.key.MIDJOURNEY_ACCOUNT.getName(), result.getInstanceId().toString(), 1.0);
         }
-        return saveConversation(user.getId(), user.getMode(),result,"IMAGINE", StringUtils.EMPTY, botType);
+        return saveConversation(user.getId(), mode,result,"IMAGINE", StringUtils.EMPTY, botType);
     }
 
     public MidjourneyUserConversation saveConversation(Long userId,Integer mode,SubmitResult result, String action,String prompt, String botType) throws Exception {
@@ -144,20 +141,20 @@ public class MidjourneyServiceImpl implements MidjourneyService {
 
 
     @Override
-    public MidjourneyUserConversation submitDescribe(MidjourneyUser user, String botType, String base64) throws Exception {
+    public MidjourneyUserConversation submitDescribe(MidjourneyUser user,Integer mode, String botType, String base64) throws Exception {
         Map<String, Object> param = MapUtil.builder(new HashMap<String,Object>())
                 .put("state", user.getId())
                 .put("base64", base64)
                 .build();
-        SubmitResult result = submit(user.getMode(),"describe", null, param);
-        if (user.getMode() == 2) {
+        SubmitResult result = submit(mode,"describe", null, param);
+        if (mode == 2) {
             redisService.hincr(RedisService.key.MIDJOURNEY_ACCOUNT.getName(), result.getInstanceId().toString(), 1.0);
         }
-        return saveConversation(user.getId(), user.getMode(),result,"DESCRIBE", StringUtils.EMPTY, botType);
+        return saveConversation(user.getId(), mode,result,"DESCRIBE", StringUtils.EMPTY, botType);
     }
 
     @Override
-    public MidjourneyUserConversation submitBlend(MidjourneyUser user, BlendDimensions dimensions, String botType, List<String> base64Array) throws Exception {
+    public MidjourneyUserConversation submitBlend(MidjourneyUser user, Integer mode,BlendDimensions dimensions, String botType, List<String> base64Array) throws Exception {
         Map<String, Object> param = MapUtil.builder(new HashMap<String,Object>())
                 .put("base64Array", base64Array)
                 .put("state", user.getId())
@@ -165,15 +162,15 @@ public class MidjourneyServiceImpl implements MidjourneyService {
         if (dimensions != null) {
             param.put("dimensions", dimensions);
         }
-        SubmitResult result = submit(user.getMode(),"blend", null, param);
-        if (user.getMode() == 2) {
+        SubmitResult result = submit(mode,"blend", null, param);
+        if (mode == 2) {
             redisService.hincr(RedisService.key.MIDJOURNEY_ACCOUNT.getName(), result.getInstanceId().toString(), 1.0);
         }
-        return saveConversation(user.getId(), user.getMode(),result,"BLEND", StringUtils.EMPTY, botType);
+        return saveConversation(user.getId(), mode,result,"BLEND", StringUtils.EMPTY, botType);
     }
 
     @Override
-    public MidjourneyUserConversation submitModal(MidjourneyUser user, Long taskId, String prompt, String maskBase64) throws Exception {
+    public MidjourneyUserConversation submitModal(MidjourneyUser user,Integer mode, Long taskId, String prompt, String maskBase64) throws Exception {
         Map<String, Object> param = MapUtil.builder(new HashMap<String,Object>())
                 .put("taskId", taskId)
                 .put("state", user.getId())
@@ -184,28 +181,28 @@ public class MidjourneyServiceImpl implements MidjourneyService {
         if (StringUtils.isNotBlank(maskBase64)) {
             param.put("maskBase64", maskBase64);
         }
-        SubmitResult result = submit(user.getMode(),"modal", null, param);
-        if (user.getMode() == 2) {
+        SubmitResult result = submit(mode,"modal", null, param);
+        if (mode == 2) {
             redisService.hincr(RedisService.key.MIDJOURNEY_ACCOUNT.getName(), result.getInstanceId().toString(), 1.0);
         }
-        return saveConversation(user.getId(),  user.getMode(),result,"MODAL", StringUtils.EMPTY, StringUtils.EMPTY);
+        return saveConversation(user.getId(),  mode,result,"MODAL", StringUtils.EMPTY, StringUtils.EMPTY);
     }
 
     @Override
-    public MidjourneyUserConversation submitShorten(MidjourneyUser user, String botType, String prompt) throws Exception {
+    public MidjourneyUserConversation submitShorten(MidjourneyUser user,Integer mode, String botType, String prompt) throws Exception {
         Map<String, Object> param = MapUtil.builder(new HashMap<String,Object>())
                 .put("prompt", prompt)
                 .put("state", user.getId())
                 .build();
-        SubmitResult result = submit(user.getMode(),"shorten", null, param);
-        if (user.getMode() == 2) {
+        SubmitResult result = submit(mode,"shorten", null, param);
+        if (mode == 2) {
             redisService.hincr(RedisService.key.MIDJOURNEY_ACCOUNT.getName(), result.getInstanceId().toString(), 1.0);
         }
-        return saveConversation(user.getId(), user.getMode(), result,"SHORTEN", StringUtils.EMPTY, botType);
+        return saveConversation(user.getId(), mode, result,"SHORTEN", StringUtils.EMPTY, botType);
     }
 
     @Override
-    public MidjourneyUserConversation submitSeed(MidjourneyUser user, Long taskId, String botType) throws Exception {
+    public MidjourneyUserConversation submitSeed(MidjourneyUser user, Integer mode,Long taskId, String botType) throws Exception {
         //SubmitResult result = seed(user.getMode(),"seed", taskId);
         //return saveConversation(user.getId(), user.getMode(), result,"SEED", StringUtils.EMPTY, botType);
         return null;
@@ -285,14 +282,7 @@ public class MidjourneyServiceImpl implements MidjourneyService {
 //    }
 
     @Override
-    public Object submitAction(MidjourneyUser user, Long taskId, String customId, Long num, String botType) throws Exception {
-        MidjourneyUserConversation conversation = conversationMapper.selectOne(Wrappers.lambdaQuery(MidjourneyUserConversation.class).eq(MidjourneyUserConversation::getTaskId, taskId).last("limit 1"));
-        if (conversation == null) {
-            throw BusinessRuntimeException.getInstance("关联任务不存在或已失效");
-        }
-        if (!user.getMode().equals(conversation.getMode())) {
-            throw BusinessRuntimeException.getInstance("当前出图模式与关联任务出图模式不符");
-        }
+    public Object submitAction(MidjourneyUser user,MidjourneyUserConversation conversation,Integer mode, Long taskId, String customId, Long num, String botType) throws Exception {
         AtomicBoolean modalFlag = new AtomicBoolean(false);
         if (StringUtils.isNotBlank(conversation.getButtons())){
             List<MessageButton> messageButtons = Jsons.parseList(conversation.getButtons(), MessageButton.class);
@@ -317,23 +307,23 @@ public class MidjourneyServiceImpl implements MidjourneyService {
                 .put("state", user.getId())
                 .put("customId", customId)
                 .build();
-        SubmitResult result = submit(user.getMode(),"action", conversation.getInstanceId(),param);
+        SubmitResult result = submit(mode,"action", conversation.getInstanceId(),param);
         if (result.getCode() == 21) {
-            if (user.getMode() == 2 && modalFlag.get()){
-                MidjourneyUserConversation modal = submitModal(user, Long.valueOf(result.getResult()), conversation.getPrompt(), null);
+            if (mode == 2 && modalFlag.get()){
+                MidjourneyUserConversation modal = submitModal(user, mode,Long.valueOf(result.getResult()), conversation.getPrompt(), null);
                 log.info("action-modal:{}", modal);
                 return modal;
             }else {
                 // 以上操作有弹窗确认,恢复次数
-                recoverUserLimit(user.getId(), user.getMode(),num);
+                recoverUserLimit(user.getId(), mode,num);
             }
         }else {
             //syncUser(user.getId(), user.getMode(),num);
-            if (!customId.contains("upsample") && user.getMode() == 2) {
+            if (!customId.contains("upsample") && mode == 2) {
                 redisService.hincr(RedisService.key.MIDJOURNEY_ACCOUNT.getName(), result.getInstanceId().toString(), 1.0);
             }
         }
-        saveConversation(user.getId(), user.getMode(), result,"ACTION", StringUtils.EMPTY, botType);
+        saveConversation(user.getId(), mode, result,"ACTION", StringUtils.EMPTY, botType);
         return result;
     }
 
@@ -348,6 +338,9 @@ public class MidjourneyServiceImpl implements MidjourneyService {
             url = RELAX_HOST;
             //慢速查询在使用次数最少的账号
             accountWithMinUsage = getAccountWithMinUsage(instanceId);
+            if (accountWithMinUsage == null) {
+                throw new Exception("没有可用的账号");
+            }
             param.put("accountFilter",MapUtil.builder(new HashMap<String,Object>())
                     .put("instanceId",accountWithMinUsage).build());
         }
@@ -366,6 +359,7 @@ public class MidjourneyServiceImpl implements MidjourneyService {
                         MidjourneyAccount account = midjourneyAccountService.getOne(Wrappers.lambdaQuery(MidjourneyAccount.class).eq(MidjourneyAccount::getInstanceId, finalAccountWithMinUsage).last("limit 1"));
                         midjourneyAccountService.updateStatus(account.getId());
                     });
+                    submit(mode, action, instanceId, param);
                 }
                 throw BusinessRuntimeException.getInstance("账号不存在");
             }
@@ -600,7 +594,7 @@ public class MidjourneyServiceImpl implements MidjourneyService {
         conversation.setStatus("CANCEL");
         conversationMapper.updateById(conversation);
         TASK_EXECUTOR.execute(() -> {
-            cancel(user.getMode(),conversation.getTaskId());
+            //cancel(user.getMode(),conversation.getTaskId());
         });
         return conversation;
     }

+ 53 - 43
midjourney/src/main/java/com/yhlxj/web/mirror/MidjourneyController.java

@@ -13,6 +13,7 @@ import com.ejlchina.searcher.util.MapBuilder;
 import com.ejlchina.searcher.util.MapUtils;
 import com.yhlxj.dao.mapper.GroupsRelationMapper;
 import com.yhlxj.dao.mapper.MidjourneyPaintingPlazaMapper;
+import com.yhlxj.dao.mapper.midjourney.MidjourneyUserConversationMapper;
 import com.yhlxj.dao.mapper.midjourney.MidjourneyUserMapper;
 import com.yhlxj.dao.model.dto.*;
 import com.yhlxj.dao.model.entity.GroupsRelation;
@@ -67,9 +68,11 @@ public class MidjourneyController {
 
     private final MidjourneyPaintingPlazaMapper midjourneyPaintingPlazaMapper;
 
-    public MidjourneyUser getUser(Integer mode){
+    private final MidjourneyUserConversationMapper conversationMapper;
+
+    public MidjourneyUser getUser(){
         String userToken = request.getHeader("user-token");
-       return midjourneyService.getUser(userToken,mode);
+       return midjourneyService.getUser(userToken);
     }
 
     @GetMapping("/midjourneyMirrorWithToken/{userToken}")
@@ -85,20 +88,17 @@ public class MidjourneyController {
     /**
      * 检查用户次数
      */
-    public Long checkUserLimit(MidjourneyUser user){
+    public Long checkUserLimit(MidjourneyUser user,Integer mode){
         Long num = 0L;
         if (user.getExpireTime().before(new Date())){
             throw BusinessRuntimeException.getInstance("账号已过期");
         }
-        if (user.getMode() == 1){
+        if (mode == 1){
 
             num = redisService.decr(RedisService.key.MIDJOURNEY_FAST_LIMIT.getName() + user.getId(), 1L);
 
             if (num < 0) {
-                user.setMode(2);
-                midjourneyUserMapper.update(null, Wrappers.lambdaUpdate(MidjourneyUser.class).eq(MidjourneyUser::getId, user.getId()).set(MidjourneyUser::getMode, user.getMode()));
                 redisService.incr(RedisService.key.MIDJOURNEY_FAST_LIMIT.getName() + user.getId(), 1L);
-
             }else {
                 int i = midjourneyUserMapper.decFastNum(user.getId(), 1, user.getMjFastNum());
                 if (i == 0) {
@@ -107,7 +107,7 @@ public class MidjourneyController {
                 }
             }
         }
-        if (user.getMode() == 2){
+        if (mode == 2){
             Object relax = redisService.get(RedisService.key.MIDJOURNEY_RELAX_LIMIT.getName() + user.getId());
 
             if (relax != null){
@@ -169,7 +169,7 @@ public class MidjourneyController {
      */
     @GetMapping("/whoami")
     public Result<MidjourneyUser> queryUser(){
-        MidjourneyUser user = getUser(null);
+        MidjourneyUser user = getUser();
         return GatewayResponse.SUCCESS.newBuilder().toResult(user);
     }
 
@@ -181,16 +181,17 @@ public class MidjourneyController {
     @NoSubmit
     public Result<MidjourneyUserConversation> submitImagine(@RequestBody SubmitImagineDTO submitImagineDTO) {
         log.info("提交Imagine任务,提示:{}",submitImagineDTO.getPrompt());
-        MidjourneyUser user = getUser(submitImagineDTO.getMode());
-        Long num = checkUserLimit(user);
+        MidjourneyUser user = getUser();
+        Integer mode = submitImagineDTO.getMode();
+        Long num = checkUserLimit(user, mode);
         if (num != null && num < 0){
             throw BusinessRuntimeException.getInstance("次数已用完");
         }
         MidjourneyUserConversation conversation;
         try {
-            conversation = midjourneyService.submitImagine(user, submitImagineDTO.getPrompt(), submitImagineDTO.getBotType(), submitImagineDTO.getBase64Array());
+            conversation = midjourneyService.submitImagine(user, mode, submitImagineDTO.getPrompt(), submitImagineDTO.getBotType(), submitImagineDTO.getBase64Array());
         } catch (Exception e) {
-            recoverUserLimit(user.getId(), user.getMode(),num);
+            recoverUserLimit(user.getId(), mode,num);
             throw BusinessRuntimeException.getInstance(e.getMessage());
         }
         //syncUser(user.getId(), user.getMode(), num);
@@ -204,16 +205,17 @@ public class MidjourneyController {
     @NoSubmit
     public Result<MidjourneyUserConversation> submitDescribe(@RequestBody SubmitDescribeDTO submitDescribeDTO) {
         log.info("提交Describe任务");
-        MidjourneyUser user = getUser(submitDescribeDTO.getMode());
-        Long num = checkUserLimit(user);
+        MidjourneyUser user = getUser();
+        Integer mode = submitDescribeDTO.getMode();
+        Long num = checkUserLimit(user,mode);
         if (num != null && num < 0){
             throw BusinessRuntimeException.getInstance("次数已用完");
         }
         MidjourneyUserConversation conversation;
         try {
-            conversation = midjourneyService.submitDescribe(user, submitDescribeDTO.getBotType(),submitDescribeDTO.getBase64());
+            conversation = midjourneyService.submitDescribe(user, mode,submitDescribeDTO.getBotType(),submitDescribeDTO.getBase64());
         } catch (Exception e) {
-            recoverUserLimit(user.getId(), user.getMode(),num);
+            recoverUserLimit(user.getId(), mode,num);
             throw BusinessRuntimeException.getInstance(e.getMessage());
         }
         //syncUser(user.getId(), user.getMode(), num);
@@ -227,16 +229,17 @@ public class MidjourneyController {
     @NoSubmit
     public Result<MidjourneyUserConversation> submitBlend(@RequestBody SubmitBlendDTO submitBlendDTO) {
         log.info("提交Blend任务 dimensions:{},base64数组长度:{}", submitBlendDTO.getDimensions(), submitBlendDTO.getBase64Array().size());
-        MidjourneyUser user = getUser(submitBlendDTO.getMode());
-        Long num = checkUserLimit(user);
+        Integer mode = submitBlendDTO.getMode();
+        MidjourneyUser user = getUser();
+        Long num = checkUserLimit(user,mode);
         if (num != null && num < 0){
             throw BusinessRuntimeException.getInstance("次数已用完");
         }
         MidjourneyUserConversation conversation;
         try {
-            conversation = midjourneyService.submitBlend(user, submitBlendDTO.getDimensions(), submitBlendDTO.getBotType(), submitBlendDTO.getBase64Array());
+            conversation = midjourneyService.submitBlend(user, mode,submitBlendDTO.getDimensions(), submitBlendDTO.getBotType(), submitBlendDTO.getBase64Array());
         } catch (Exception e) {
-            recoverUserLimit(user.getId(), user.getMode(),num);
+            recoverUserLimit(user.getId(), mode,num);
             throw BusinessRuntimeException.getInstance(e.getMessage());
         }
         //syncUser(user.getId(), user.getMode(), num);
@@ -250,16 +253,17 @@ public class MidjourneyController {
     @NoSubmit
     public Result<MidjourneyUserConversation> submitModal(@RequestBody SubmitModalDTO submitModalDTO) {
         log.info("提交Modal任务,taskId:{},提示:{}",submitModalDTO.getTaskId(),submitModalDTO.getPrompt());
-        MidjourneyUser user = getUser(submitModalDTO.getMode());
-        Long num = checkUserLimit(user);
+        Integer mode = submitModalDTO.getMode();
+        MidjourneyUser user = getUser();
+        Long num = checkUserLimit(user,mode);
         if (num != null && num < 0){
             throw BusinessRuntimeException.getInstance("次数已用完");
         }
         MidjourneyUserConversation conversation;
         try {
-            conversation = midjourneyService.submitModal(user, submitModalDTO.getTaskId(), submitModalDTO.getPrompt(), submitModalDTO.getMaskBase64());
+            conversation = midjourneyService.submitModal(user, mode, submitModalDTO.getTaskId(), submitModalDTO.getPrompt(), submitModalDTO.getMaskBase64());
         } catch (Exception e) {
-            recoverUserLimit(user.getId(), user.getMode(),num);
+            recoverUserLimit(user.getId(), mode,num);
             throw BusinessRuntimeException.getInstance(e.getMessage());
         }
         //syncUser(user.getId(), user.getMode(), num);
@@ -273,16 +277,17 @@ public class MidjourneyController {
     @NoSubmit
     public Result<MidjourneyUserConversation> submitShorten(@RequestBody SubmitShortenDTO submitShortenDTO) {
         log.info("提交Shorten任务 提示词:{}",submitShortenDTO.getPrompt());
-        MidjourneyUser user = getUser(submitShortenDTO.getMode());
-        Long num = checkUserLimit(user);
+        Integer mode = submitShortenDTO.getMode();
+        MidjourneyUser user = getUser();
+        Long num = checkUserLimit(user,mode);
         if (num != null && num < 0){
             throw BusinessRuntimeException.getInstance("次数已用完");
         }
         MidjourneyUserConversation conversation;
         try {
-            conversation = midjourneyService.submitShorten(user, submitShortenDTO.getBotType(), submitShortenDTO.getPrompt());
+            conversation = midjourneyService.submitShorten(user, mode, submitShortenDTO.getBotType(), submitShortenDTO.getPrompt());
         } catch (Exception e) {
-            recoverUserLimit(user.getId(), user.getMode(),num);
+            recoverUserLimit(user.getId(),mode,num);
             throw BusinessRuntimeException.getInstance(e.getMessage());
         }
         //syncUser(user.getId(), user.getMode(), num);
@@ -296,19 +301,24 @@ public class MidjourneyController {
     @NoSubmit
     public Result<Object> action(@RequestBody SubmitActionDTO actionDTO) {
         log.info("任务id:{},执行动作:{}",actionDTO.getTaskId(),actionDTO.getCustomId());
-        MidjourneyUser user = getUser(actionDTO.getMode());
+        MidjourneyUser user = getUser();
+        MidjourneyUserConversation midjourneyUserConversation = conversationMapper.selectOne(Wrappers.lambdaQuery(MidjourneyUserConversation.class).eq(MidjourneyUserConversation::getTaskId, actionDTO.getTaskId()).last("limit 1"));
+        if (midjourneyUserConversation == null) {
+            throw BusinessRuntimeException.getInstance("关联任务不存在或已失效");
+        }
+        Integer mode = midjourneyUserConversation.getMode();
         Long num = 0L;
         if (!actionDTO.getCustomId().contains("BOOKMARK")) {
-            num = checkUserLimit(user);
+            num = checkUserLimit(user,mode);
             if (num != null && num < 0) {
                 throw BusinessRuntimeException.getInstance("次数已用完");
             }
         }
         Object conversation;
         try {
-            conversation = midjourneyService.submitAction(user, actionDTO.getTaskId(), actionDTO.getCustomId(),num, actionDTO.getBotType());
+            conversation = midjourneyService.submitAction(user,midjourneyUserConversation,mode, actionDTO.getTaskId(), actionDTO.getCustomId(),num, actionDTO.getBotType());
         } catch (Exception e) {
-            recoverUserLimit(user.getId(), user.getMode(),num);
+            recoverUserLimit(user.getId(), mode,num);
             throw BusinessRuntimeException.getInstance(e.getMessage());
         }
         return GatewayResponse.SUCCESS.newBuilder().toResult(conversation);
@@ -320,17 +330,17 @@ public class MidjourneyController {
     @NoSubmit
     public Result<Object> seed(@RequestBody SubmitSeedDTO seedDTO) {
         log.info("任务id:{},执行动作:{}",seedDTO.getTaskId(), "seed");
-        MidjourneyUser user = getUser(seedDTO.getMode());
-
-        Long num = checkUserLimit(user);
+        MidjourneyUser user = getUser();
+        Integer mode = seedDTO.getMode();
+        Long num = checkUserLimit(user,mode);
         if (num != null && num < 0) {
             throw BusinessRuntimeException.getInstance("次数已用完");
         }
         Object conversation;
         try {
-            conversation = midjourneyService.submitSeed(user, seedDTO.getTaskId(), seedDTO.getBotType());
+            conversation = midjourneyService.submitSeed(user, mode, seedDTO.getTaskId(), seedDTO.getBotType());
         } catch (Exception e) {
-            recoverUserLimit(user.getId(), user.getMode(),num);
+            recoverUserLimit(user.getId(), mode,num);
             throw BusinessRuntimeException.getInstance(e.getMessage());
         }
         return GatewayResponse.SUCCESS.newBuilder().toResult(conversation);
@@ -342,7 +352,7 @@ public class MidjourneyController {
      */
     @GetMapping("/conversation/list")
     public Result<SearchResult<MidjourneyUserConversation>> conversationList(){
-        MidjourneyUser user = getUser(null);
+        MidjourneyUser user = getUser();
         log.info("查询会话列表 userId:{}",user.getId());
         MapBuilder builder = MapUtils.flatBuilder(request.getParameterMap());
         return GatewayResponse.SUCCESS.newBuilder().toResult(beanSearcher.search(MidjourneyUserConversation.class,
@@ -356,7 +366,7 @@ public class MidjourneyController {
      */
     @GetMapping("/conversation/listByIds")
     public Result<List<MidjourneyUserConversation>> conversationListByIds(Integer mode,@RequestParam(value = "ids" ) List<Long> ids) throws Exception {
-        MidjourneyUser user = getUser(mode);
+        MidjourneyUser user = getUser();
         log.info("根据ids查询会话 userId:{}",user.getId());
         return GatewayResponse.SUCCESS.newBuilder().toResult(midjourneyService.listConversationByIds(mode,ids));
     }
@@ -367,7 +377,7 @@ public class MidjourneyController {
     @PostMapping("/conversation/{id}/cancel")
     @NoSubmit
     public Result<MidjourneyUserConversation> conversationCancel(@PathVariable("id") Long id){
-        MidjourneyUser user = getUser(null);
+        MidjourneyUser user = getUser();
         log.info("取消任务 id:{}",id);
         return GatewayResponse.SUCCESS.newBuilder().toResult(midjourneyService.cancelConversation(user,id));
     }
@@ -383,7 +393,7 @@ public class MidjourneyController {
         if (midjourneyUser == null) {
             throw BusinessRuntimeException.getInstance("参数错误");
         }
-        midjourneyUser.setMode(mode);
+        //midjourneyUser.setMode(mode);
         midjourneyUserMapper.updateById(midjourneyUser);
         //redisService.del(RedisService.key.MIDJOURNEY_USER.getName() + midjourneyUser.getUserToken());
         return GatewayResponse.SUCCESS.newBuilder().toResult();
@@ -429,7 +439,7 @@ public class MidjourneyController {
      */
     @GetMapping("/get/painting/record")
     public Result<SearchResult<MidjourneyUserPaintingDayRecordView>> getPaintingRecord(String prompt, Boolean bookmark) {
-        MidjourneyUser user = getUser(null);
+        MidjourneyUser user = getUser();
         String condition = String.format(" and mc.user_id = %s", user.getId());
         if (StrUtil.isNotBlank(prompt)) {
             condition += String.format(" and mc.prompt like '%%%s%%'", prompt);