zwhui 2 년 전
부모
커밋
652c980bd5

+ 11 - 4
netflix-dao/src/main/java/com/cyksj/model/dto/SubmitActionDTO.java

@@ -2,17 +2,24 @@ package com.cyksj.model.dto;
 
 import lombok.Data;
 
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+
 /**
  * @author zwhui
  * @date 2024/4/24 10:56
  */
 @Data
 public class SubmitActionDTO {
-
-    private Long taskId;
-
     /**
-     * 动作标识,示例值(MJ::JOB::upsample::2::3dbbd469-36af-4a0f-8f02-df6c579e7011)
+     * 任务对应按钮的customId
      */
+    @NotBlank(message = "customId参数不能为空")
     private String customId;
+
+    /**
+     * 执行Imagine任务生成的ID
+     */
+    @NotNull(message = "任务ID不能为空")
+    private Long taskId;
 }

+ 2 - 0
netflix-dao/src/main/java/com/cyksj/model/dto/SubmitBlendDTO.java

@@ -2,6 +2,7 @@ package com.cyksj.model.dto;
 
 import lombok.Data;
 
+import javax.validation.constraints.NotBlank;
 import java.util.List;
 
 /**
@@ -14,6 +15,7 @@ public class SubmitBlendDTO {
 	/**
 	 * base64
 	 */
+	@NotBlank(message = "请上传至少一张图片")
 	private List<String> base64Array;
 
 	/**

+ 3 - 0
netflix-dao/src/main/java/com/cyksj/model/dto/SubmitDescribeDTO.java

@@ -2,6 +2,8 @@ package com.cyksj.model.dto;
 
 import lombok.Data;
 
+import javax.validation.constraints.NotBlank;
+
 /**
  * @author zwhui
  * @date 2024/4/23 13:49
@@ -12,5 +14,6 @@ public class SubmitDescribeDTO {
 	/**
 	 * base64
 	 */
+	@NotBlank(message = "请上传图片")
 	private String base64;
 }

+ 2 - 0
netflix-dao/src/main/java/com/cyksj/model/dto/SubmitImagineDTO.java

@@ -2,6 +2,7 @@ package com.cyksj.model.dto;
 
 import lombok.Data;
 
+import javax.validation.constraints.NotBlank;
 import java.util.List;
 
 /**
@@ -14,6 +15,7 @@ public class SubmitImagineDTO {
     /**
      * 提示词
      */
+    @NotBlank(message = "提示词不能为空")
     private String prompt;
 
     /**

+ 3 - 0
netflix-dao/src/main/java/com/cyksj/model/dto/SubmitModalDTO.java

@@ -2,6 +2,8 @@ package com.cyksj.model.dto;
 
 import lombok.Data;
 
+import javax.validation.constraints.NotNull;
+
 /**
  * @author zwhui
  * @date 2024/4/23 18:04
@@ -22,6 +24,7 @@ public class SubmitModalDTO {
     /**
      * 任务id
      */
+    @NotNull(message = "任务ID不能为空")
     private Long taskId;
 
 }

+ 3 - 0
netflix-dao/src/main/java/com/cyksj/model/dto/SubmitShortenDTO.java

@@ -2,6 +2,8 @@ package com.cyksj.model.dto;
 
 import lombok.Data;
 
+import javax.validation.constraints.NotBlank;
+
 /**
  * @author zwhui
  * @date 2024/4/23 18:07
@@ -12,5 +14,6 @@ public class SubmitShortenDTO {
     /**
      * 提示词
      */
+    @NotBlank(message = "提示词不能为空")
     private String prompt;
 }

+ 29 - 0
netflix-dao/src/main/java/com/cyksj/model/response/SubmitResult.java

@@ -0,0 +1,29 @@
+package com.cyksj.model.response;
+
+import lombok.Data;
+
+import java.util.HashMap;
+import java.util.Map;
+
+@Data
+public class SubmitResult {
+    /**
+     * 状态码: 1(提交成功), 22(排队中), other(错误)
+     */
+    private int code;
+
+    /**
+     * 描述
+     */
+    private String description;
+
+    /**
+     * 任务ID
+     */
+    private String result;
+
+    /**
+     * 扩展字段
+     */
+    private Map<String, Object> properties = new HashMap<>();
+}

+ 7 - 7
netflix-service/src/main/java/com/cyksj/service/midjourney/MidjourneyService.java

@@ -11,19 +11,19 @@ import java.util.List;
  * @date 2024/4/23 15:44
  */
 public interface MidjourneyService {
-    MidjourneyUserConversation submitImagine(MidjourneyUser user, String prompt, List<String> base64Array);
+    MidjourneyUserConversation submitImagine(MidjourneyUser user, String prompt, List<String> base64Array) throws Exception;
 
-    MidjourneyUserConversation submitDescribe(MidjourneyUser user, String base64);
+    MidjourneyUserConversation submitDescribe(MidjourneyUser user, String base64) throws Exception;
 
-    MidjourneyUserConversation submitBlend(MidjourneyUser user, BlendDimensions dimensions, List<String> base64Array);
+    MidjourneyUserConversation submitBlend(MidjourneyUser user, BlendDimensions dimensions, List<String> base64Array) throws Exception;
 
-    MidjourneyUserConversation submitModal(MidjourneyUser user, Long taskId, String prompt, String maskBase64);
+    MidjourneyUserConversation submitModal(MidjourneyUser user, Long taskId, String prompt, String maskBase64) throws Exception;
 
-    MidjourneyUserConversation submitShorten(MidjourneyUser user, String prompt);
+    MidjourneyUserConversation submitShorten(MidjourneyUser user, String prompt) throws Exception;
 
-    List<MidjourneyUserConversation> listConversationByIds(List<Long> ids);
+    List<MidjourneyUserConversation> listConversationByIds(MidjourneyUser user, List<Long> ids);
 
-    MidjourneyUserConversation submitAction(MidjourneyUser user, Long taskId, String customId);
+    MidjourneyUserConversation submitAction(MidjourneyUser user, Long taskId, String customId) throws Exception;
 
     MidjourneyUserConversation cancelConversation(MidjourneyUser user, Long id);
 }

+ 72 - 104
netflix-service/src/main/java/com/cyksj/service/midjourney/impl/MidjourneyServiceImpl.java

@@ -3,6 +3,7 @@ package com.cyksj.service.midjourney.impl;
 import cn.hutool.core.bean.BeanUtil;
 import cn.hutool.core.collection.CollectionUtil;
 import cn.hutool.core.map.MapUtil;
+import cn.hutool.http.HttpRequest;
 import cn.hutool.http.HttpUtil;
 import cn.hutool.json.JSONArray;
 import cn.hutool.json.JSONObject;
@@ -10,11 +11,13 @@ import cn.hutool.json.JSONUtil;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.cyksj.common.exception.BusinessRuntimeException;
 import com.cyksj.common.task.GlobalThreadPoolTaskExecutor;
+import com.cyksj.common.util.Jsons;
 import com.cyksj.mapper.MidjourneyUserConversationMapper;
 import com.cyksj.model.dto.BlendDimensions;
 import com.cyksj.model.entity.MidjourneyAccount;
 import com.cyksj.model.entity.MidjourneyUser;
 import com.cyksj.model.entity.MidjourneyUserConversation;
+import com.cyksj.model.response.SubmitResult;
 import com.cyksj.service.midjourney.MidjourneyService;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
@@ -37,7 +40,9 @@ import java.util.regex.Pattern;
 @Slf4j
 @RequiredArgsConstructor
 public class MidjourneyServiceImpl implements MidjourneyService {
-    private static final String HOST = "http://43.154.230.104:8080";
+    private static final String RELAX_HOST = "http://43.154.230.104:8080";
+    private static final String FAST_HOST = "https://aigc.api4midjourney.com/api";
+    private static final String FAST_TOKEN = "14a6b469-7cb2-4b99-9238-676c7c5cffef";
 
     private final MidjourneyUserConversationMapper conversationMapper;
 
@@ -47,146 +52,107 @@ public class MidjourneyServiceImpl implements MidjourneyService {
 
 
     @Override
-    public MidjourneyUserConversation submitImagine(MidjourneyUser user, String prompt, List<String> base64Array) {
-        JSONObject imagine = imagine(user.getId(), prompt, base64Array);
-        JSONObject properties = imagine.getJSONObject("properties");
-        return saveConversation(user.getId(), imagine.getLong("result"), properties,"IMAGINE", prompt);
+    public MidjourneyUserConversation submitImagine(MidjourneyUser user, String prompt, List<String> base64Array) throws Exception {
+        Map<String, Object> imagineParam = MapUtil.builder(new HashMap<String,Object>())
+                .put("prompt", prompt).put("state", user.getId()).build();
+        if (CollectionUtil.isNotEmpty(base64Array)) {
+            imagineParam.put("base64Array", base64Array);
+        }
+        SubmitResult result = submit(user.getMode(),"imagine", imagineParam);
+        return saveConversation(user.getId(), Long.parseLong(result.getResult()),result.getProperties(),"IMAGINE", StringUtils.EMPTY);
     }
 
-    public MidjourneyUserConversation saveConversation(Long userId,Long taskId,JSONObject properties, String action,String prompt) {
+    public MidjourneyUserConversation saveConversation(Long userId,Long taskId,Map<String,Object> properties, String action,String prompt) {
         MidjourneyUserConversation conversation = new MidjourneyUserConversation()
                 .setUserId(userId).setTaskId(taskId).setAction(action).setPrompt(prompt)
                 .setMode(1).setStartTime(System.currentTimeMillis()).setProgress("0%")
-                .setStatus("IN_PROGRESS").setChannelId(properties.getLong("discordChannelId"))
-                .setInstanceId(properties.getLong("discordInstanceId")).setTaskId(taskId);
+                .setStatus("IN_PROGRESS").setChannelId(Long.parseLong(properties.get("discordChannelId").toString()))
+                .setInstanceId(Long.parseLong(properties.get("discordInstanceId").toString())).setTaskId(taskId);
         conversationMapper.insert(conversation);
         return conversation;
     }
 
-    private JSONObject imagine(Long userId,String prompt, List<String> base64Array) {
-        Map<String, Object> imagineParam = MapUtil.builder(new HashMap<String,Object>())
-                .put("prompt", prompt).put("state", userId).build();
-        if (CollectionUtil.isNotEmpty(base64Array)) {
-            imagineParam.put("base64Array", base64Array);
-        }
-        String body = HttpUtil.post(HOST + "/mj/submit/imagine", imagineParam);
-        log.info("imagine body:{}", body);
-        JSONObject jsonObject = JSONUtil.parseObj(body);
-        if (jsonObject.getInt("code") != 1) {
-            throw BusinessRuntimeException.getInstance("imagine error message:" + jsonObject.getStr("description"));
-        }
-        return jsonObject;
-    }
-
 
     @Override
-    public MidjourneyUserConversation submitDescribe(MidjourneyUser user, String base64) {
-        JSONObject describe = describe(user.getId(), base64);
-        JSONObject properties = describe.getJSONObject("properties");
-        return saveConversation(user.getId(), describe.getLong("result"), properties,"DESCRIBE", StringUtils.EMPTY);
+    public MidjourneyUserConversation submitDescribe(MidjourneyUser user, 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", param);
+        return saveConversation(user.getId(), Long.parseLong(result.getResult()),result.getProperties(),"DESCRIBE", StringUtils.EMPTY);
     }
 
-    private JSONObject describe(Long userId,String base64) {
-        Map<String, Object> param = MapUtil.builder(new HashMap<String,Object>()).put("state", userId).put("base64", base64).build();
-        String body = HttpUtil.post(HOST + "/mj/submit/describe", param);
-        log.info("describe body:{}", body);
-        JSONObject jsonObject = JSONUtil.parseObj(body);
-        if (jsonObject.getInt("code") != 1) {
-            throw BusinessRuntimeException.getInstance("describe error message:" + jsonObject.getStr("description"));
-        }
-        return jsonObject;
-    }
-
-
-
     @Override
-    public MidjourneyUserConversation submitBlend(MidjourneyUser user, BlendDimensions dimensions, List<String> base64Array) {
-        JSONObject blend = blend(user.getId(), dimensions, base64Array);
-        JSONObject properties = blend.getJSONObject("properties");
-        return saveConversation(user.getId(), blend.getLong("result"), properties,"BLEND", StringUtils.EMPTY);
-    }
-
-    private JSONObject blend(Long userId,BlendDimensions dimensions, List<String> base64Array) {
+    public MidjourneyUserConversation submitBlend(MidjourneyUser user, BlendDimensions dimensions, List<String> base64Array) throws Exception {
         Map<String, Object> param = MapUtil.builder(new HashMap<String,Object>())
-                .put("base64Array", base64Array).put("state", userId).build();
+                .put("base64Array", base64Array).put("state", user.getId()).build();
         if (dimensions != null) {
             param.put("dimensions", dimensions);
         }
-        String body = HttpUtil.post(HOST + "/mj/submit/blend", param);
-        log.info("blend body:{}", body);
-        JSONObject jsonObject = JSONUtil.parseObj(body);
-        if (jsonObject.getInt("code") != 1) {
-            throw BusinessRuntimeException.getInstance("blend error message:" + jsonObject.getStr("description"));
-        }
-        return jsonObject;
-    }
-    @Override
-    public MidjourneyUserConversation submitModal(MidjourneyUser user, Long taskId, String prompt, String maskBase64) {
-        JSONObject modal = modal(user.getId(),taskId, prompt, maskBase64);
-        JSONObject properties = modal.getJSONObject("properties");
-        return saveConversation(user.getId(), modal.getLong("result"), properties,"MODAL", prompt);
+        SubmitResult result = submit(user.getMode(),"blend", param);
+        return saveConversation(user.getId(), Long.parseLong(result.getResult()),result.getProperties(),"BLEND", StringUtils.EMPTY);
     }
 
-    private JSONObject modal(Long userId,Long taskId,String prompt, String maskBase64) {
+    @Override
+    public MidjourneyUserConversation submitModal(MidjourneyUser user, Long taskId, String prompt, String maskBase64) throws Exception {
         Map<String, Object> param = MapUtil.builder(new HashMap<String,Object>())
-                .put("taskId", taskId).put("state", userId).build();
+                .put("taskId", taskId).put("state", user.getId()).build();
         if (StringUtils.isNotBlank(prompt)) {
             param.put("prompt", prompt);
         }
         if (StringUtils.isNotBlank(maskBase64)) {
             param.put("maskBase64", maskBase64);
         }
-        String body = HttpUtil.post(HOST + "/mj/submit/modal", param);
-        log.info("shorten body:{}", body);
-        JSONObject jsonObject = JSONUtil.parseObj(body);
-        if (jsonObject.getInt("code") != 1) {
-            throw BusinessRuntimeException.getInstance("shorten error message:" + jsonObject.getStr("description"));
-        }
-        return jsonObject;
+        SubmitResult result = submit(user.getMode(),"modal", param);
+        return saveConversation(user.getId(), Long.parseLong(result.getResult()),result.getProperties(),"MODAL", StringUtils.EMPTY);
     }
 
     @Override
-    public MidjourneyUserConversation submitShorten(MidjourneyUser user, String prompt) {
-        JSONObject shorten = shorten(user.getId(), prompt);
-        JSONObject properties = shorten.getJSONObject("properties");
-        return saveConversation(user.getId(), shorten.getLong("result"), properties,"SHORTEN", prompt);
-    }
-
-    private JSONObject shorten(Long userId,String prompt) {
+    public MidjourneyUserConversation submitShorten(MidjourneyUser user, String prompt) throws Exception {
         Map<String, Object> param = MapUtil.builder(new HashMap<String,Object>())
-                .put("prompt", prompt).put("state", userId).build();
-        String body = HttpUtil.post(HOST + "/mj/submit/shorten", param);
-        log.info("shorten body:{}", body);
-        JSONObject jsonObject = JSONUtil.parseObj(body);
-        if (jsonObject.getInt("code") != 1) {
-            throw BusinessRuntimeException.getInstance("shorten error message:" + jsonObject.getStr("description"));
-        }
-        return jsonObject;
+                .put("prompt", prompt).put("state", user.getId()).build();
+        SubmitResult result = submit(user.getMode(),"shorten", param);
+        return saveConversation(user.getId(), Long.parseLong(result.getResult()),result.getProperties(),"SHORTEN", StringUtils.EMPTY);
     }
 
 
     @Override
-    public MidjourneyUserConversation submitAction(MidjourneyUser user, Long taskId, String customId) {
-        JSONObject action = action(user.getId(), taskId, customId);
-        JSONObject properties = action.getJSONObject("properties");
-        return saveConversation(user.getId(), action.getLong("result"), properties,"ACTION", StringUtils.EMPTY);
+    public MidjourneyUserConversation submitAction(MidjourneyUser user, Long taskId, String customId) throws Exception {
+        Map<String, Object> param = MapUtil.builder(new HashMap<String,Object>())
+                .put("taskId", taskId).put("state", user.getId()).put("customId", customId).build();
+        SubmitResult result = submit(user.getMode(),"action", param);
+        return saveConversation(user.getId(), Long.parseLong(result.getResult()),result.getProperties(),"ACTION", StringUtils.EMPTY);
     }
 
-    public JSONObject action(Long userId, Long taskId, String customId) {
-        Map<String, Object> param = MapUtil.builder(new HashMap<String,Object>())
-                .put("taskId", taskId).put("state", userId).put("customId", customId).build();
-        String body = HttpUtil.post(HOST + "/mj/submit/action", param);
+
+    public SubmitResult submit(Integer mode,String action, Map<String, Object> param) throws Exception {
+        String body = HttpRequest.post(mode == 1 ? FAST_HOST : RELAX_HOST + getActionUrl(action)).form(param).header("Authorization", FAST_TOKEN).execute().body();
         log.info("action body:{}", body);
-        JSONObject jsonObject = JSONUtil.parseObj(body);
-        if (jsonObject.getInt("code") != 1) {
-            throw BusinessRuntimeException.getInstance("action error message:" + jsonObject.getStr("description"));
+        SubmitResult submitResult = Jsons.parseObject(body, SubmitResult.class);
+        if (submitResult.getCode() != 1) {
+            throw BusinessRuntimeException.getInstance("action:" + action + " error message:" + submitResult.getDescription());
+        }
+        return submitResult;
+    }
+    private String getActionUrl(String action) {
+         switch (action) {
+            case "imagine":
+                return "/mj/submit/imagine";
+            case "action":
+                return "/mj/submit/action";
+            case "describe":
+                return "/mj/submit/describe";
+            case "blend":
+                return"/mj/submit/blend";
+            case "modal":
+                return "/mj/submit/modal";
+            case "shorten":
+                return "/mj/submit/shorten";
+            default:  throw new IllegalArgumentException("Unknown action: " + action);
         }
-        return jsonObject;
     }
     @Override
-    public List<MidjourneyUserConversation> listConversationByIds(List<Long> ids) {
+    public List<MidjourneyUserConversation> listConversationByIds(MidjourneyUser user, List<Long> ids) {
         List<MidjourneyUserConversation> list = new ArrayList<>();
-        listByIds(ids).forEach(json -> {
+        listByIds(user.getMode(),ids).forEach(json -> {
             JSONObject jsons = JSONUtil.parseObj(json);
             MidjourneyUserConversation conversation = JSONUtil.toBean(jsons, MidjourneyUserConversation.class);
             conversation.setUserId(jsons.getLong("state"));
@@ -231,9 +197,9 @@ public class MidjourneyServiceImpl implements MidjourneyService {
         JSONObject result = JSONUtil.parseObj(HttpUtil.post("https://files.liuliangbang.vip/pic/ups", paramMap));
         return result.getJSONObject("value").getJSONArray("saved").getJSONObject(0).getJSONObject("info").getStr("cdnUrl");
     }
-    public JSONArray listByIds(List<Long> ids) {
+    public JSONArray listByIds(Integer mode,List<Long> ids) {
         Map<String, Object> param = MapUtil.builder(new HashMap<String, Object>()).put("ids", ids).build();
-        String body = HttpUtil.post(HOST + "/mj/task/list-by-ids", param);
+        String body = HttpRequest.post(mode == 1 ? FAST_HOST : RELAX_HOST + "/mj/task/list-by-condition").header("Authorization", FAST_TOKEN).form(param).execute().body();
         log.info("listByIds body:{}", body);
         return JSONUtil.parseArray(body);
     }
@@ -249,12 +215,14 @@ public class MidjourneyServiceImpl implements MidjourneyService {
         }
         conversation.setStatus("CANCEL");
         conversationMapper.updateById(conversation);
-        cancel(conversation.getTaskId());
+        TASK_EXECUTOR.execute(() -> {
+            cancel(user.getMode(),conversation.getTaskId());
+        });
         return conversation;
     }
 
-    public void cancel(Long taskId) {
-        String body = HttpUtil.post(HOST + "/mj/task/"+taskId+"/cancel",MapUtil.empty());
+    public void cancel(Integer mode,Long taskId) {
+        String body = HttpUtil.post(mode == 1 ? FAST_HOST : RELAX_HOST + "/mj/task/"+taskId+"/cancel",MapUtil.empty());
         log.info("cancel body:{}", body);
         JSONObject jsonObject = JSONUtil.parseObj(body);
         if (jsonObject.getInt("code") != 1) {

+ 29 - 11
netflix-web/src/main/java/com/cyksj/web/controller/mirror/MidjourneyController.java

@@ -1,6 +1,7 @@
 package com.cyksj.web.controller.mirror;
 
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.cyksj.common.exception.BusinessRuntimeException;
 import com.cyksj.dto.Result;
 import com.cyksj.model.dto.*;
 import com.cyksj.enums.GatewayResponse;
@@ -31,8 +32,6 @@ import java.util.List;
 @RequestMapping("/applets/midjourney")
 public class MidjourneyController {
 
-    private final MidjourneyAccountService midjourneyAccountService;
-
     private final MidjourneyUserMapper midjourneyUserMapper;
 
     private final HttpServletRequest request;
@@ -51,12 +50,30 @@ public class MidjourneyController {
      * 检查用户fast次数
      */
     public void checkUserFast(MidjourneyUser user){
+        boolean flag = true;
        if (user.getMode() == 1){
-           if (user.getMjFastNum() < 0 || user.getExpireTime().before(new Date())) {
+           if (user.getExpireTime().before(new Date())){
+               flag = false;
+           }
+           if (user.getMjFastNum() < 0) {
                user.setMode(2);
                midjourneyUserMapper.updateById(user);
+           }else {
+               midjourneyUserMapper.update(null,Wrappers.lambdaUpdate(MidjourneyUser.class).set(MidjourneyUser::getMjFastNum, user.getMjFastNum() - 1).eq(MidjourneyUser::getId,user.getId()));
+           }
+       }
+       if (user.getMode() == 2){
+           if (user.getMjRelaxNum() != null){
+               if (user.getMjRelaxNum() > 0) {
+                   midjourneyUserMapper.update(null, Wrappers.lambdaUpdate(MidjourneyUser.class).set(MidjourneyUser::getMjFastNum, user.getMjFastNum() - 1).eq(MidjourneyUser::getId, user.getId()));
+               }else {
+                   flag = false;
+               }
            }
        }
+       if (!flag){
+           throw BusinessRuntimeException.getInstance("可用次数不足");
+       }
     }
 
 
@@ -65,7 +82,7 @@ public class MidjourneyController {
      * 提交Imagine任务
      */
     @PostMapping("/submit/imagine")
-    public Result<MidjourneyUserConversation> submitImagine(SubmitImagineDTO submitImagineDTO){
+    public Result<MidjourneyUserConversation> submitImagine(SubmitImagineDTO submitImagineDTO)throws Exception{
         log.info("提交Imagine任务,提示:{},base64数组长度:{}",submitImagineDTO.getPrompt(),submitImagineDTO.getBase64Array().size());
         MidjourneyUser user = getUser();
         checkUserFast(user);
@@ -76,7 +93,7 @@ public class MidjourneyController {
      * 提交Describe任务
      */
     @PostMapping("/submit/describe")
-    public Result<MidjourneyUserConversation> submitDescribe(SubmitDescribeDTO submitDescribeDTO){
+    public Result<MidjourneyUserConversation> submitDescribe(SubmitDescribeDTO submitDescribeDTO)throws Exception{
         log.info("提交Describe任务");
         MidjourneyUser user = getUser();
         checkUserFast(user);
@@ -87,7 +104,7 @@ public class MidjourneyController {
      * 提交Blend任务
      */
     @PostMapping("/submit/blend")
-    public Result<MidjourneyUserConversation> submitBlend(SubmitBlendDTO submitBlendDTO) {
+    public Result<MidjourneyUserConversation> submitBlend(SubmitBlendDTO submitBlendDTO) throws Exception{
         log.info("提交Blend任务 dimensions:{},base64数组长度:{}", submitBlendDTO.getDimensions(), submitBlendDTO.getBase64Array().size());
         MidjourneyUser user = getUser();
         checkUserFast(user);
@@ -98,7 +115,7 @@ public class MidjourneyController {
      * 提交Modal任务
      */
     @PostMapping("/submit/modal")
-    public Result<MidjourneyUserConversation> submitModal(SubmitModalDTO submitModalDTO){
+    public Result<MidjourneyUserConversation> submitModal(SubmitModalDTO submitModalDTO) throws Exception{
         log.info("提交Modal任务,taskId:{},提示:{},base64数组长度:{}",submitModalDTO.getTaskId(),submitModalDTO.getPrompt(),submitModalDTO.getMaskBase64().length());
         MidjourneyUser user = getUser();
         checkUserFast(user);
@@ -109,7 +126,7 @@ public class MidjourneyController {
      * 提交Shorten任务
      */
     @PostMapping("/submit/shorten")
-    public Result<MidjourneyUserConversation> submitShorten(SubmitShortenDTO submitShortenDTO){
+    public Result<MidjourneyUserConversation> submitShorten(SubmitShortenDTO submitShortenDTO) throws Exception {
         log.info("提交Shorten任务 提示词:{}",submitShortenDTO.getPrompt());
         MidjourneyUser user = getUser();
         checkUserFast(user);
@@ -120,7 +137,7 @@ public class MidjourneyController {
      * 执行动作
      */
     @PostMapping("/submit/action")
-    public Result<MidjourneyUserConversation> action(SubmitActionDTO actionDTO){
+    public Result<MidjourneyUserConversation> action(SubmitActionDTO actionDTO) throws Exception {
         log.info("任务id:{},执行动作:{}",actionDTO.getTaskId(),actionDTO.getCustomId());
         MidjourneyUser user = getUser();
         checkUserFast(user);
@@ -145,8 +162,9 @@ public class MidjourneyController {
      */
     @GetMapping("/conversation/listByIds")
     public Result<List<MidjourneyUserConversation>> conversationListByIds(@RequestParam(value = "ids" ) List<Long> ids){
-        log.info("根据ids查询会话");
-        return GatewayResponse.SUCCESS.newBuilder().toResult(midjourneyService.listConversationByIds(ids));
+        MidjourneyUser user = getUser();
+        log.info("根据ids查询会话 userId:{}",user.getId());
+        return GatewayResponse.SUCCESS.newBuilder().toResult(midjourneyService.listConversationByIds(user,ids));
     }
 
     /**