Эх сурвалжийг харах

Merge branch 'mj' into dev

# Conflicts:
#	netflix-dao/src/main/java/com/cyksj/model/views/RefundUpdradeOrderDonView.java
#	netflix-service/src/main/java/com/cyksj/service/mange/impl/CmsOrderDonServiceImpl.java
#	netflix-service/src/main/java/com/cyksj/service/midjourney/impl/MidjourneyServiceImpl.java
#	netflix-web/src/main/java/com/cyksj/web/controller/goods/GoodsDonController.java
#	netflix-web/src/main/java/com/cyksj/web/controller/mirror/MidjourneyController.java
#	netflix-web/src/main/java/com/cyksj/web/controller/mirror/MirrorController.java
#	netflix-web/src/main/resources/application-dev.yml
#	netflix-web/src/main/resources/application-prd.yml
#	netflix-web/src/main/resources/application-pre.yml
zwhui 2 жил өмнө
parent
commit
2d29a74ad8

+ 5 - 1
netflix-dao/src/main/java/com/cyksj/model/views/RefundUpdradeOrderDonView.java

@@ -17,7 +17,8 @@ import java.util.Date;
  */
 @Getter
 @Setter
-@SearchBean(tables = "refund_upgrade_order_don rd left join order_don o on o.id = rd.order_id")
+@SearchBean(tables = "refund_upgrade_order_don rd left join upgrade_order_don o on o.id = rd.order_id " +
+		"left join upgrade_package up on up.id = o.package_id left join goods_don_sku s on s.id = up.sku_id")
 public class RefundUpdradeOrderDonView {
 	@DbField("rd.id")
 	private Long id;
@@ -37,6 +38,9 @@ public class RefundUpdradeOrderDonView {
 	@DbField("rd.user_id")
 	private Long userId;
 
+	@DbField("s.spec_val")
+	private String specVal;
+
 	@DbIgnore
 	private String nickname;
 

+ 16 - 15
netflix-service/src/main/java/com/cyksj/service/mange/impl/CmsOrderDonServiceImpl.java

@@ -392,6 +392,22 @@ public class CmsOrderDonServiceImpl extends ServiceImpl<OrderDonMapper,OrderDon>
         //修改订单状态
         orderDon.setStatus(UpgradeOrderDon.Status.refund);
         upgradeOrderDonMapper.updateById(orderDon);
+        //扣除套餐次数
+        if (upgradePackage.getGoodsId() == 26) {
+            MidjourneyUser midjourneyUser = midjourneyUserMapper.selectOne(Wrappers.lambdaQuery(MidjourneyUser.class).eq(MidjourneyUser::getRelationId, orderDon.getRelationId()));
+            if (midjourneyUser != null) {
+                int update = midjourneyUserMapper.update(null, Wrappers.lambdaUpdate(MidjourneyUser.class)
+                        .set(MidjourneyUser::getMjFastNum, midjourneyUser.getMjFastNum() < upgradePackage.getNum() ? 0 : midjourneyUser.getMjFastNum() - upgradePackage.getNum())
+                        .eq(MidjourneyUser::getId, midjourneyUser.getId()));
+                if (update == 0) {
+                    log.info("midjourneyUser 套餐包增值失败 id:{},orderId:{}", midjourneyUser.getId(), orderDon.getId());
+                }
+                Long decr = redisService.decr(RedisService.key.MIDJOURNEY_FAST_LIMIT.getName() + midjourneyUser.getId(), upgradePackage.getNum().longValue());
+                if (decr < 0) {
+                    redisService.set(RedisService.key.MIDJOURNEY_FAST_LIMIT.getName() + midjourneyUser.getId(), 0L);
+                }
+            }
+        }
     }
 
     /**
@@ -417,21 +433,6 @@ public class CmsOrderDonServiceImpl extends ServiceImpl<OrderDonMapper,OrderDon>
                     userBenefitsService.addUserBalance(orderDon.getUserId(), orderDon.getRefundBalance(), UserBalanceSourceRecord.Source.refund, 0L, orderDon.getId(), upgradePackage.getName() + UserBalanceSourceRecord.Source.refund.getDesc(), true);
                 }
             }
-            if (upgradePackage.getGoodsId() == 26) {
-                MidjourneyUser midjourneyUser = midjourneyUserMapper.selectOne(Wrappers.lambdaQuery(MidjourneyUser.class).eq(MidjourneyUser::getRelationId, orderDon.getRelationId()));
-                if (midjourneyUser != null) {
-                    int update = midjourneyUserMapper.update(null, Wrappers.lambdaUpdate(MidjourneyUser.class)
-                            .set(MidjourneyUser::getMjFastNum, midjourneyUser.getMjFastNum() < upgradePackage.getNum() ? 0 : midjourneyUser.getMjFastNum() - upgradePackage.getNum())
-                            .eq(MidjourneyUser::getId, midjourneyUser.getId()));
-                    if (update == 0) {
-                        log.info("midjourneyUser 套餐包增值失败 id:{},orderId:{}", midjourneyUser.getId(), orderDon.getId());
-                    }
-                    Long decr = redisService.decr(RedisService.key.MIDJOURNEY_FAST_LIMIT.getName() + midjourneyUser.getId(), upgradePackage.getNum().longValue());
-                    if (decr < 0) {
-                        redisService.set(RedisService.key.MIDJOURNEY_FAST_LIMIT.getName() + midjourneyUser.getId(), 0L);
-                    }
-                }
-            }
         });
     }
     /**

+ 65 - 4
netflix-service/src/main/java/com/cyksj/service/midjourney/impl/MidjourneyServiceImpl.java

@@ -15,6 +15,10 @@ import com.cyksj.common.util.Jsons;
 import com.cyksj.mapper.MidjourneyUserConversationMapper;
 import com.cyksj.model.dto.BlendDimensions;
 import com.cyksj.model.dto.MessageButton;
+import com.cyksj.model.entity.MidjourneyUser;
+import com.cyksj.model.entity.MidjourneyUserConversation;
+import com.cyksj.model.response.SubmitResult;
+import com.cyksj.redis.RedisService;
 import com.cyksj.model.entity.MidjourneyAccount;
 import com.cyksj.model.entity.MidjourneyUser;
 import com.cyksj.model.entity.MidjourneyUserConversation;
@@ -31,6 +35,8 @@ import java.io.IOException;
 import java.nio.file.Files;
 import java.nio.file.Path;
 import java.util.*;
+import java.util.concurrent.atomic.AtomicBoolean;
+import java.util.stream.Collectors;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 
@@ -52,6 +58,8 @@ public class MidjourneyServiceImpl implements MidjourneyService {
 
     private static final List<String> status = List.of("MODAL","CANCEL","FAILURE");
 
+    private final RedisService redisService;
+
     private static final GlobalThreadPoolTaskExecutor TASK_EXECUTOR = GlobalThreadPoolTaskExecutor.getInstance();
 
 
@@ -96,7 +104,12 @@ public class MidjourneyServiceImpl implements MidjourneyService {
             param.put("dimensions", dimensions);
         }
         SubmitResult result = submit(user.getMode(),"blend", param);
-        return saveConversation(user.getId(), user.getMode(), Long.parseLong(result.getResult()),result.getProperties(),"BLEND", StringUtils.EMPTY);
+        String finalPrompt = "%s --ar %s --style raw --s 250";
+        List<String> picList = uploadBase64Pic(base64Array);
+        String pics = picList.stream().map(pic -> "<" + pic + ">").collect(Collectors.joining(" "));
+        Map<String, Object> properties = result.getProperties();
+        properties.put("finalPrompt", String.format(finalPrompt, pics,dimensions.getValue()));
+        return saveConversation(user.getId(), user.getMode(), Long.parseLong(result.getResult()),properties,"BLEND", StringUtils.EMPTY);
     }
 
     @Override
@@ -121,7 +134,19 @@ public class MidjourneyServiceImpl implements MidjourneyService {
         return saveConversation(user.getId(), user.getMode(), Long.parseLong(result.getResult()),result.getProperties(),"SHORTEN", StringUtils.EMPTY);
     }
 
-
+    /**
+     * 恢复次数
+     */
+    public void recoverUserLimit(Long id,Integer mode,Integer num){
+        if (mode == 1){
+            redisService.incr(RedisService.key.MIDJOURNEY_FAST_LIMIT.getName() + id, 1L);
+        }
+        if (mode == 2){
+            if (num != null) {
+                redisService.incr(RedisService.key.MIDJOURNEY_RELAX_LIMIT.getName() + id, 1L);
+            }
+        }
+    }
     @Override
     public MidjourneyUserConversation submitAction(MidjourneyUser user, Long taskId, String customId) throws Exception {
         MidjourneyUserConversation conversation = conversationMapper.selectOne(Wrappers.lambdaQuery(MidjourneyUserConversation.class).eq(MidjourneyUserConversation::getTaskId, taskId).last("limit 1"));
@@ -131,13 +156,22 @@ public class MidjourneyServiceImpl implements MidjourneyService {
         if (!user.getMode().equals(conversation.getMode())) {
             throw BusinessRuntimeException.getInstance("当前出图模式与关联任务出图模式不符");
         }
+        AtomicBoolean flag = new AtomicBoolean(false);
         if (StringUtils.isNotBlank(conversation.getButtons())){
-            Jsons.parseList(conversation.getButtons(), MessageButton.class).forEach(button -> {
+            List<MessageButton> messageButtons = Jsons.parseList(conversation.getButtons(), MessageButton.class);
+            messageButtons.forEach(button -> {
                 if (button.getCustomId().equals(customId)) {
                     log.info("action customId:{}", customId);
                     button.setStyle(3);
+                    if (button.getLabel().contains("Vary") || button.getCustomId().contains("::pan_")
+                            || button.getEmoji().equals("🔄") || button.getCustomId().contains("PromptAnalyzer:")
+                            || button.getCustomId().contains("PicReader::") || button.getCustomId().contains("::variation::")
+                            || button.getCustomId().contains("::CustomZoom::")) {
+                        flag.set(true);
+                    }
                 }
             });
+            conversation.setButtons(Jsons.toJson(messageButtons));
         }
         conversation.setBookmark(customId.contains("BOOKMARK"));
         conversationMapper.updateById(conversation);
@@ -147,6 +181,10 @@ public class MidjourneyServiceImpl implements MidjourneyService {
         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);
+        if (flag.get()) {
+            // 以上操作有弹窗确认,恢复次数
+            recoverUserLimit(user.getId(), user.getMode(),user.getMjRelaxNum());
+        }
         return saveConversation(user.getId(), user.getMode(), Long.parseLong(result.getResult()),result.getProperties(),"ACTION", StringUtils.EMPTY);
     }
 
@@ -161,7 +199,14 @@ public class MidjourneyServiceImpl implements MidjourneyService {
         SubmitResult submitResult = Jsons.parseObject(body, SubmitResult.class);
         int code = submitResult.getCode();
         if (code != 1 && code != 21 && code != 22) {
-            throw BusinessRuntimeException.getInstance("action:" + action + " error message:" + submitResult.getDescription());
+            if (code == 3) {
+                throw BusinessRuntimeException.getInstance("账号不存在");
+            }
+            if (code == 24) {
+                throw BusinessRuntimeException.getInstance("prompt包含敏感词");
+            }
+            log.error("action:" + action + " error message:" + submitResult.getDescription());
+            throw BusinessRuntimeException.getInstance("队列已满,请稍后尝试");
         }
         return submitResult;
     }
@@ -235,6 +280,22 @@ 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");
     }
+
+    private static List<String> uploadBase64Pic(List<String> base64Array) throws IOException {
+        List<String> list = new ArrayList<>();
+        for (String base64 : base64Array) {
+            byte[] body = Base64.getDecoder().decode(base64);
+            Path tempFile = Files.createTempFile(UUID.randomUUID().toString(), ".jpg");
+            try (FileImageOutputStream imageOutput = new FileImageOutputStream(tempFile.toFile())) {
+                imageOutput.write(body, 0, body.length);
+            }
+            Map<String, Object> paramMap = new HashMap<>();
+            paramMap.put("file", tempFile.toFile());
+            JSONObject result = JSONUtil.parseObj(HttpUtil.post("https://files.liuliangbang.vip/pic/ups", paramMap));
+            list.add(result.getJSONObject("value").getJSONArray("saved").getJSONObject(0).getJSONObject("info").getStr("cdnUrl"));
+        }
+        return list;
+    }
     public JSONArray listByIds(Integer mode,List<Long> ids) throws Exception {
         Map<String, Object> param = MapUtil.builder(new HashMap<String, Object>()).put("ids", ids).build();
         String body = HttpRequest.post((mode == 1 ? FAST_HOST : RELAX_HOST) + "/mj/task/list-by-condition").header("Authorization", FAST_TOKEN).body(Jsons.toJson(param)).execute().body();

+ 130 - 41
netflix-web/src/main/java/com/cyksj/web/controller/mirror/MidjourneyController.java

@@ -1,5 +1,6 @@
 package com.cyksj.web.controller.mirror;
 
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.cyksj.common.exception.BusinessRuntimeException;
 import com.cyksj.dto.Result;
@@ -49,6 +50,10 @@ public class MidjourneyController {
         if (midjourneyUser == null){
             midjourneyUser = midjourneyUserMapper.selectOne(Wrappers.lambdaQuery(MidjourneyUser.class)
                     .eq(MidjourneyUser::getUserToken, userToken).last("limit 1"));
+            if (midjourneyUser == null){
+                throw new BusinessRuntimeException("账号不存在,请重新登录");
+            }
+            redisService.set(RedisService.key.MIDJOURNEY_USER.getName() + userToken, midjourneyUser, RedisService.key.MIDJOURNEY_USER.getTimeout());
             Object fastNum = redisService.get(RedisService.key.MIDJOURNEY_FAST_LIMIT.getName() + midjourneyUser.getId());
             if (fastNum == null){
                 redisService.set(RedisService.key.MIDJOURNEY_FAST_LIMIT.getName() + midjourneyUser.getId(), midjourneyUser.getMjFastNum(), RedisService.key.MIDJOURNEY_FAST_LIMIT.getTimeout());
@@ -82,39 +87,63 @@ public class MidjourneyController {
     /**
      * 检查用户次数
      */
-    public void checkUserLimit(MidjourneyUser user){
-        boolean flag = true;
-        Long fastNum = null;
-        Long relaxNum = null;
+    public Long checkUserLimit(MidjourneyUser user){
+        Long num = 0L;
+        if (user.getExpireTime().before(new Date())){
+            throw BusinessRuntimeException.getInstance("账号已过期");
+        }
        if (user.getMode() == 1){
-           if (user.getExpireTime().before(new Date())){
-               flag = false;
-           }
-           fastNum = redisService.decr(RedisService.key.MIDJOURNEY_FAST_LIMIT.getName() + user.getId(), 1L);
-           if (fastNum < 0) {
+           num = redisService.decr(RedisService.key.MIDJOURNEY_FAST_LIMIT.getName() + user.getId(), 1L);
+           if (num < 0) {
                user.setMode(2);
-               fastNum = redisService.incr(RedisService.key.MIDJOURNEY_FAST_LIMIT.getName() + user.getId(), 1L);
+               redisService.incr(RedisService.key.MIDJOURNEY_FAST_LIMIT.getName() + user.getId(), 1L);
            }
        }
        if (user.getMode() == 2){
            Object relax = redisService.get(RedisService.key.MIDJOURNEY_RELAX_LIMIT.getName() + user.getId());
            if (relax != null){
-               relaxNum = Long.parseLong(relax.toString());
-               if (relaxNum > 0){
-                   relaxNum = redisService.decr(RedisService.key.MIDJOURNEY_RELAX_LIMIT.getName() + user.getId(), 1L);
-               }else {
-                   flag = false;
+               num = redisService.decr(RedisService.key.MIDJOURNEY_RELAX_LIMIT.getName() + user.getId(), 1L);
+               if (num < 0){
+                   redisService.incr(RedisService.key.MIDJOURNEY_RELAX_LIMIT.getName() + user.getId(), 1L);
                }
+           }else {
+               num = null;
            }
        }
-       if (!flag){
-           throw BusinessRuntimeException.getInstance("可用次数不足");
-       }else {
-           midjourneyUserMapper.update(null, Wrappers.lambdaUpdate(MidjourneyUser.class)
-                   .eq(MidjourneyUser::getId, user.getId()).set(MidjourneyUser::getMode, user.getMode())
-                   .set(fastNum != null,MidjourneyUser::getMjFastNum, fastNum)
-                   .set(relaxNum != null,MidjourneyUser::getMjRelaxNum, relaxNum));
-       }
+       return num;
+    }
+
+    /**
+     * 恢复次数
+     */
+    public void recoverUserLimit(Long id,Integer mode,Long num){
+        if (mode == 1){
+            redisService.incr(RedisService.key.MIDJOURNEY_FAST_LIMIT.getName() + id, 1L);
+        }
+        if (mode == 2){
+            if (num != null){
+                redisService.incr(RedisService.key.MIDJOURNEY_RELAX_LIMIT.getName() + id, 1L);
+            }
+        }
+    }
+
+    /**
+     * 同步数据库
+     */
+    public void syncUser(Long id,Integer mode,Long num){
+        log.info("同步次数 id:{},mode:{},num:{}",id,mode,num);
+        if (num == null){
+            return;
+        }
+        LambdaUpdateWrapper<MidjourneyUser> wrapper = Wrappers.lambdaUpdate(MidjourneyUser.class)
+                .eq(MidjourneyUser::getId, id);
+        if (mode == 1){
+            wrapper.set(MidjourneyUser::getMjFastNum, num);
+        }
+        if (mode == 2){
+            wrapper.set(MidjourneyUser::getMjRelaxNum, num);
+        }
+        midjourneyUserMapper.update(null, wrapper);
     }
 
 
@@ -132,11 +161,21 @@ public class MidjourneyController {
      * 提交Imagine任务
      */
     @PostMapping("/submit/imagine")
-    public Result<MidjourneyUserConversation> submitImagine(@RequestBody SubmitImagineDTO submitImagineDTO)throws Exception{
+    public Result<MidjourneyUserConversation> submitImagine(@RequestBody SubmitImagineDTO submitImagineDTO) {
         log.info("提交Imagine任务,提示:{},base64数组长度:{}",submitImagineDTO.getPrompt(),submitImagineDTO.getBase64Array());
         MidjourneyUser user = getUser();
-        MidjourneyUserConversation conversation = midjourneyService.submitImagine(user, submitImagineDTO.getPrompt(), submitImagineDTO.getBase64Array());
-        checkUserLimit(user);
+        Long num = checkUserLimit(user);
+        if (num != null && num < 0){
+            throw BusinessRuntimeException.getInstance("次数已用完");
+        }
+        MidjourneyUserConversation conversation;
+        try {
+            conversation = midjourneyService.submitImagine(user, submitImagineDTO.getPrompt(), submitImagineDTO.getBase64Array());
+        } catch (Exception e) {
+            recoverUserLimit(user.getId(), user.getMode(),num);
+            throw BusinessRuntimeException.getInstance(e.getMessage());
+        }
+        syncUser(user.getId(), user.getMode(), num);
         return GatewayResponse.SUCCESS.newBuilder().toResult(conversation);
     }
 
@@ -144,11 +183,21 @@ public class MidjourneyController {
      * 提交Describe任务
      */
     @PostMapping("/submit/describe")
-    public Result<MidjourneyUserConversation> submitDescribe(@RequestBody SubmitDescribeDTO submitDescribeDTO)throws Exception{
+    public Result<MidjourneyUserConversation> submitDescribe(@RequestBody SubmitDescribeDTO submitDescribeDTO) {
         log.info("提交Describe任务");
         MidjourneyUser user = getUser();
-        MidjourneyUserConversation conversation = midjourneyService.submitDescribe(user, submitDescribeDTO.getBase64());
-        checkUserLimit(user);
+        Long num = checkUserLimit(user);
+        if (num != null && num < 0){
+            throw BusinessRuntimeException.getInstance("次数已用完");
+        }
+        MidjourneyUserConversation conversation;
+        try {
+            conversation = midjourneyService.submitDescribe(user, submitDescribeDTO.getBase64());
+        } catch (Exception e) {
+            recoverUserLimit(user.getId(), user.getMode(),num);
+            throw BusinessRuntimeException.getInstance(e.getMessage());
+        }
+        syncUser(user.getId(), user.getMode(), num);
         return GatewayResponse.SUCCESS.newBuilder().toResult(conversation);
     }
 
@@ -156,11 +205,21 @@ public class MidjourneyController {
      * 提交Blend任务
      */
     @PostMapping("/submit/blend")
-    public Result<MidjourneyUserConversation> submitBlend(@RequestBody SubmitBlendDTO submitBlendDTO) throws Exception{
+    public Result<MidjourneyUserConversation> submitBlend(@RequestBody SubmitBlendDTO submitBlendDTO) {
         log.info("提交Blend任务 dimensions:{},base64数组长度:{}", submitBlendDTO.getDimensions(), submitBlendDTO.getBase64Array().size());
         MidjourneyUser user = getUser();
-        MidjourneyUserConversation conversation = midjourneyService.submitBlend(user, submitBlendDTO.getDimensions(), submitBlendDTO.getBase64Array());
-        checkUserLimit(user);
+        Long num = checkUserLimit(user);
+        if (num != null && num < 0){
+            throw BusinessRuntimeException.getInstance("次数已用完");
+        }
+        MidjourneyUserConversation conversation;
+        try {
+            conversation = midjourneyService.submitBlend(user, submitBlendDTO.getDimensions(), submitBlendDTO.getBase64Array());
+        } catch (Exception e) {
+            recoverUserLimit(user.getId(), user.getMode(),num);
+            throw BusinessRuntimeException.getInstance(e.getMessage());
+        }
+        syncUser(user.getId(), user.getMode(), num);
         return GatewayResponse.SUCCESS.newBuilder().toResult(conversation);
     }
 
@@ -168,11 +227,21 @@ public class MidjourneyController {
      * 提交Modal任务
      */
     @PostMapping("/submit/modal")
-    public Result<MidjourneyUserConversation> submitModal(@RequestBody SubmitModalDTO submitModalDTO) throws Exception{
+    public Result<MidjourneyUserConversation> submitModal(@RequestBody SubmitModalDTO submitModalDTO) {
         log.info("提交Modal任务,taskId:{},提示:{},base64数组长度:{}",submitModalDTO.getTaskId(),submitModalDTO.getPrompt(),submitModalDTO.getMaskBase64());
         MidjourneyUser user = getUser();
-        MidjourneyUserConversation conversation = midjourneyService.submitModal(user, submitModalDTO.getTaskId(), submitModalDTO.getPrompt(), submitModalDTO.getMaskBase64());
-        checkUserLimit(user);
+        Long num = checkUserLimit(user);
+        if (num != null && num < 0){
+            throw BusinessRuntimeException.getInstance("次数已用完");
+        }
+        MidjourneyUserConversation conversation;
+        try {
+            conversation = midjourneyService.submitModal(user, submitModalDTO.getTaskId(), submitModalDTO.getPrompt(), submitModalDTO.getMaskBase64());
+        } catch (Exception e) {
+            recoverUserLimit(user.getId(), user.getMode(),num);
+            throw BusinessRuntimeException.getInstance(e.getMessage());
+        }
+        syncUser(user.getId(), user.getMode(), num);
         return GatewayResponse.SUCCESS.newBuilder().toResult(conversation);
     }
 
@@ -180,11 +249,21 @@ public class MidjourneyController {
      * 提交Shorten任务
      */
     @PostMapping("/submit/shorten")
-    public Result<MidjourneyUserConversation> submitShorten(@RequestBody SubmitShortenDTO submitShortenDTO) throws Exception {
+    public Result<MidjourneyUserConversation> submitShorten(@RequestBody SubmitShortenDTO submitShortenDTO) {
         log.info("提交Shorten任务 提示词:{}",submitShortenDTO.getPrompt());
         MidjourneyUser user = getUser();
-        MidjourneyUserConversation conversation = midjourneyService.submitShorten(user, submitShortenDTO.getPrompt());
-        checkUserLimit(user);
+        Long num = checkUserLimit(user);
+        if (num != null && num < 0){
+            throw BusinessRuntimeException.getInstance("次数已用完");
+        }
+        MidjourneyUserConversation conversation;
+        try {
+            conversation = midjourneyService.submitShorten(user, submitShortenDTO.getPrompt());
+        } catch (Exception e) {
+            recoverUserLimit(user.getId(), user.getMode(),num);
+            throw BusinessRuntimeException.getInstance(e.getMessage());
+        }
+        syncUser(user.getId(), user.getMode(), num);
         return GatewayResponse.SUCCESS.newBuilder().toResult(conversation);
     }
 
@@ -192,11 +271,21 @@ public class MidjourneyController {
      * 执行动作
      */
     @PostMapping("/submit/action")
-    public Result<MidjourneyUserConversation> action(@RequestBody SubmitActionDTO actionDTO) throws Exception {
+    public Result<MidjourneyUserConversation> action(@RequestBody SubmitActionDTO actionDTO) {
         log.info("任务id:{},执行动作:{}",actionDTO.getTaskId(),actionDTO.getCustomId());
         MidjourneyUser user = getUser();
-        MidjourneyUserConversation conversation = midjourneyService.submitAction(user, actionDTO.getTaskId(), actionDTO.getCustomId());
-        checkUserLimit(user);
+        Long num = checkUserLimit(user);
+        if (num != null && num < 0){
+            throw BusinessRuntimeException.getInstance("次数已用完");
+        }
+        MidjourneyUserConversation conversation;
+        try {
+            conversation = midjourneyService.submitAction(user, actionDTO.getTaskId(), actionDTO.getCustomId());
+        } catch (Exception e) {
+            recoverUserLimit(user.getId(), user.getMode(),num);
+            throw BusinessRuntimeException.getInstance(e.getMessage());
+        }
+        syncUser(user.getId(), user.getMode(), num);
         return GatewayResponse.SUCCESS.newBuilder().toResult(conversation);
     }
 

+ 10 - 4
netflix-web/src/main/java/com/cyksj/web/controller/mirror/MirrorController.java

@@ -2,6 +2,7 @@ package com.cyksj.web.controller.mirror;
 
 import cn.hutool.core.date.DateUtil;
 import cn.hutool.json.JSONObject;
+import com.cyksj.common.EnvCommonService;
 import com.cyksj.common.exception.BusinessRuntimeException;
 import com.cyksj.common.task.GlobalThreadPoolTaskExecutor;
 import com.cyksj.common.util.IoKit;
@@ -64,9 +65,14 @@ public class MirrorController {
 
     private final MidjourneyAccountService midjourneyAccountService;
 
+    private final EnvCommonService envCommonService;
+
     @Value("${midjourney.url}")
     private String midjourneyHost;
 
+    @Value("${midjourney.drawUrl}")
+    private String midjourneyDrawUrl;
+
 
     /**
      * GPT车票跳转登录
@@ -310,18 +316,18 @@ public class MirrorController {
      * @param relationId 车票id
      */
     @GetMapping("/midjourneyMirror/{relationId}")
-    public void midjourneyMirror(@PathVariable Long relationId,HttpServletResponse response) throws IOException {
+    public Result<String> midjourneyMirror(@PathVariable Long relationId) {
         Long userId = StpUserUtil.getLoginIdAsLong();
         MidjourneyUser midjourneyUser = midjourneyAccountService.getMidjourneyUserToken(userId, relationId);
-        response.sendRedirect( midjourneyHost + "/8081/api/applets/mirror/midjourneyMirrorWithToken/" + midjourneyUser.getUserToken());
+        return GatewayResponse.SUCCESS.newBuilder().toResult(midjourneyHost + (envCommonService.isPreEnv() ? "/8082":"/8081") +"/api/applets/mirror/midjourneyMirrorWithToken/" + midjourneyUser.getUserToken());
     }
 
     @GetMapping("/midjourneyMirrorWithToken/{userToken}")
-    public void midjourneyMirrorWithToken(@PathVariable String userToken,HttpServletResponse response) throws IOException {
+    public void midjourneyMirrorWithToken(@PathVariable String userToken) throws IOException {
         Cookie cookie = new Cookie("userToken", userToken);
         cookie.setMaxAge(31536000);
         cookie.setPath("/");
         response.addCookie(cookie);
-        response.sendRedirect(midjourneyHost + "/draw/web/");
+        response.sendRedirect(midjourneyDrawUrl);
     }
 }

Файлын зөрүү хэтэрхий том тул дарагдсан байна
+ 0 - 0
netflix-web/src/main/resources/application-dev.yml


Файлын зөрүү хэтэрхий том тул дарагдсан байна
+ 0 - 0
netflix-web/src/main/resources/application-prd.yml


+ 2 - 1
netflix-web/src/main/resources/application-pre.yml

@@ -196,4 +196,5 @@ smsVerify:
   shoppingApikey: 72d4ff765b6c962f35c9a4125100680d
 
 midjourney:
-  url: https://nf.video
+  url: https://nf.video
+  drawUrl: https://nf.video/drawTest/web/

Энэ ялгаанд хэт олон файл өөрчлөгдсөн тул зарим файлыг харуулаагүй болно