zwhui 2 år sedan
förälder
incheckning
11dc1635b6

+ 4 - 0
netflix-service/src/main/java/com/cyksj/redis/RedisService.java

@@ -825,6 +825,10 @@ public class RedisService {
         CHATGPT_CAR_SCORES("chatgpt:car:scores","chatGpt 车队分数", 48 * 60 * 60L),
         CHATGPT_CAR_HIGH_CHAT("chatgpt:car:high:chat:","chatGpt gpt4 对话次数", 48 * 60 * 60L),
         CHATGPT_CAR_LOW_CHAT("chatgpt:car:low:chat:","chatGpt 3.5 对话次数", 48 * 60 * 60L),
+        MIDJOURNEY_FAST_LIMIT("midjourney:fast:limit:", "midjourney fast次数", 60 * 60 * 48L),
+        MIDJOURNEY_RELAX_LIMIT("midjourney:relax:limit:", "midjourney relax次数", 60 * 60 * 48L),
+        MIDJOURNEY_EXPIRE_TIME("midjourney:expire:time:", "midjourney expire time", 60 * 60 * 48L),
+        MIDJOURNEY_USER("midjourney:user:", "midjourney user", 60 * 60 * 48L),
 
         ;
 

+ 4 - 0
netflix-service/src/main/java/com/cyksj/service/mange/impl/CmsOrderDonServiceImpl.java

@@ -426,6 +426,10 @@ public class CmsOrderDonServiceImpl extends ServiceImpl<OrderDonMapper,OrderDon>
                     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);
+                    }
                 }
             }
         });

+ 7 - 0
netflix-service/src/main/java/com/cyksj/service/midjourney/impl/MidJourneyAccountServiceImpl.java

@@ -13,6 +13,7 @@ import com.cyksj.common.util.Jsons;
 import com.cyksj.common.util.StringUtil;
 import com.cyksj.mapper.*;
 import com.cyksj.model.entity.*;
+import com.cyksj.redis.RedisService;
 import com.cyksj.service.midjourney.MidjourneyAccountService;
 import com.cyksj.service.user.UserBindRelationService;
 import lombok.RequiredArgsConstructor;
@@ -52,6 +53,8 @@ public class MidJourneyAccountServiceImpl extends ServiceImpl<MidjourneyAccountM
 
     private final MidjourneyUserMapper midjourneyUserMapper;
 
+    private final RedisService redisService;
+
     @Override
     @Transactional(rollbackFor = Throwable.class)
     public void addAccount(MidjourneyAccount midjourneyAccount) throws Exception {
@@ -229,6 +232,9 @@ public class MidJourneyAccountServiceImpl extends ServiceImpl<MidjourneyAccountM
         midjourneyUser.setMjFastNum(goodsDonSku.getMjFastNum());
         midjourneyUser.setMjRelaxNum(goodsDonSku.getMjRelaxNum());
         midjourneyUserMapper.insert(midjourneyUser);
+        redisService.set(RedisService.key.MIDJOURNEY_FAST_LIMIT.getName() + midjourneyUser.getId(), goodsDonSku.getMjFastNum(),RedisService.key.MIDJOURNEY_FAST_LIMIT.getTimeout());
+        redisService.set(RedisService.key.MIDJOURNEY_RELAX_LIMIT.getName() + midjourneyUser.getId(), goodsDonSku.getMjRelaxNum(),RedisService.key.MIDJOURNEY_RELAX_LIMIT.getTimeout());
+        redisService.set(RedisService.key.MIDJOURNEY_USER.getName() + midjourneyUser.getUserToken(), midjourneyUser,RedisService.key.MIDJOURNEY_USER.getTimeout());
         return midjourneyUser;
     }
 
@@ -237,6 +243,7 @@ public class MidJourneyAccountServiceImpl extends ServiceImpl<MidjourneyAccountM
         midjourneyUser.setImg(getWxImg(user.getHeadimgurl(), user));
         midjourneyUser.setExpireTime(groupsRelation.getExpiryTime());
         midjourneyUserMapper.updateById(midjourneyUser);
+        redisService.set(RedisService.key.MIDJOURNEY_USER.getName() + midjourneyUser.getUserToken(), midjourneyUser,RedisService.key.MIDJOURNEY_USER.getTimeout());
     }
 
     /**

+ 3 - 0
netflix-service/src/main/java/com/cyksj/service/midjourney/impl/MidjourneyServiceImpl.java

@@ -128,6 +128,9 @@ public class MidjourneyServiceImpl implements MidjourneyService {
 
 
     public SubmitResult submit(Integer mode,String action, Map<String, Object> param) throws Exception {
+        if (mode == 1) {
+            param.put("mode", "FAST");
+        }
         String url = (mode == 1 ? FAST_HOST : RELAX_HOST) + getActionUrl(action);
         String body = HttpRequest.post(url).body(Jsons.toJson(param)).header("Authorization", FAST_TOKEN).execute().body();
         log.info("action body:{}", body);

+ 6 - 0
netflix-service/src/main/java/com/cyksj/service/order/impl/OrderDonServiceImpl.java

@@ -3294,6 +3294,12 @@ public class OrderDonServiceImpl extends ServiceImpl<OrderDonMapper, OrderDon> i
 				if (update == 0) {
 					log.info("midjourneyUser 套餐包增值失败 id:{},orderId:{}", midjourneyUser.getId(), orderDon.getId());
 				}
+				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() + upgradePackage.getNum().longValue(), RedisService.key.MIDJOURNEY_FAST_LIMIT.getTimeout());
+				}else {
+					redisService.incr(RedisService.key.MIDJOURNEY_FAST_LIMIT.getName() + midjourneyUser.getId(), upgradePackage.getNum().longValue());
+				}
 			}
 		}
 	}

+ 42 - 17
netflix-web/src/main/java/com/cyksj/web/controller/mirror/MidjourneyController.java

@@ -8,6 +8,7 @@ import com.cyksj.enums.GatewayResponse;
 import com.cyksj.mapper.MidjourneyUserMapper;
 import com.cyksj.model.entity.MidjourneyUser;
 import com.cyksj.model.entity.MidjourneyUserConversation;
+import com.cyksj.redis.RedisService;
 import com.cyksj.service.midjourney.MidjourneyAccountService;
 import com.cyksj.service.midjourney.MidjourneyService;
 import com.ejlchina.searcher.BeanSearcher;
@@ -39,33 +40,52 @@ public class MidjourneyController {
     private final MidjourneyService midjourneyService;
 
     private final BeanSearcher beanSearcher;
+    
+    private final RedisService redisService;
 
     public MidjourneyUser getUser(){
-        return midjourneyUserMapper.selectOne(Wrappers.lambdaQuery(MidjourneyUser.class)
-                .eq(MidjourneyUser::getUserToken, request.getHeader("user-token")).last("limit 1"));
+        String userToken = request.getHeader("user-token");
+        MidjourneyUser midjourneyUser = (MidjourneyUser) redisService.get(RedisService.key.MIDJOURNEY_USER.getName() + userToken);
+        if (midjourneyUser == null){
+            midjourneyUser = midjourneyUserMapper.selectOne(Wrappers.lambdaQuery(MidjourneyUser.class)
+                    .eq(MidjourneyUser::getUserToken, userToken).last("limit 1"));
+        }
+        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());
+        }
+        Object relaxNum = redisService.get(RedisService.key.MIDJOURNEY_RELAX_LIMIT.getName() + midjourneyUser.getId());
+        if (relaxNum == null){
+            if (midjourneyUser.getMjRelaxNum() != null){
+                redisService.set(RedisService.key.MIDJOURNEY_RELAX_LIMIT.getName() + midjourneyUser.getId(), midjourneyUser.getMjRelaxNum(), RedisService.key.MIDJOURNEY_RELAX_LIMIT.getTimeout());
+            }
+        }
+        return midjourneyUser;
     }
 
 
     /**
-     * 检查用户fast次数
+     * 检查用户次数
      */
-    public void checkUserFast(MidjourneyUser user){
+    public void checkUserLimit(MidjourneyUser user){
         boolean flag = true;
+        Long fastNum = null;
+        Long relaxNum = null;
        if (user.getMode() == 1){
            if (user.getExpireTime().before(new Date())){
                flag = false;
            }
-           if (user.getMjFastNum() < 0) {
+           fastNum = redisService.decr(RedisService.key.MIDJOURNEY_FAST_LIMIT.getName() + user.getId(), 1L);
+           if (fastNum < 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()));
+               fastNum = redisService.incr(RedisService.key.MIDJOURNEY_FAST_LIMIT.getName() + user.getId(), 1L);
            }
        }
        if (user.getMode() == 2){
-           if (user.getMjRelaxNum() != null){
-               if (user.getMjRelaxNum() > 0) {
-                   midjourneyUserMapper.update(null, Wrappers.lambdaUpdate(MidjourneyUser.class).set(MidjourneyUser::getMjRelaxNum, user.getMjRelaxNum() - 1).eq(MidjourneyUser::getId, user.getId()));
+           relaxNum = (Long) redisService.get(RedisService.key.MIDJOURNEY_RELAX_LIMIT.getName() + user.getId());
+           if (relaxNum != null){
+               if (relaxNum > 0){
+                   relaxNum = redisService.decr(RedisService.key.MIDJOURNEY_RELAX_LIMIT.getName() + user.getId(), 1L);
                }else {
                    flag = false;
                }
@@ -73,6 +93,11 @@ public class MidjourneyController {
        }
        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, user.getMjFastNum())
+                   .set(relaxNum != null,MidjourneyUser::getMjRelaxNum, user.getMjRelaxNum()));
        }
     }
 
@@ -85,7 +110,7 @@ public class MidjourneyController {
     public Result<MidjourneyUserConversation> submitImagine(@RequestBody SubmitImagineDTO submitImagineDTO)throws Exception{
         log.info("提交Imagine任务,提示:{},base64数组长度:{}",submitImagineDTO.getPrompt(),submitImagineDTO.getBase64Array());
         MidjourneyUser user = getUser();
-        checkUserFast(user);
+        checkUserLimit(user);
         return GatewayResponse.SUCCESS.newBuilder().toResult(midjourneyService.submitImagine(user,submitImagineDTO.getPrompt(),submitImagineDTO.getBase64Array()));
     }
 
@@ -96,7 +121,7 @@ public class MidjourneyController {
     public Result<MidjourneyUserConversation> submitDescribe(@RequestBody SubmitDescribeDTO submitDescribeDTO)throws Exception{
         log.info("提交Describe任务");
         MidjourneyUser user = getUser();
-        checkUserFast(user);
+        checkUserLimit(user);
         return GatewayResponse.SUCCESS.newBuilder().toResult(midjourneyService.submitDescribe(user,submitDescribeDTO.getBase64()));
     }
 
@@ -107,7 +132,7 @@ public class MidjourneyController {
     public Result<MidjourneyUserConversation> submitBlend(@RequestBody SubmitBlendDTO submitBlendDTO) throws Exception{
         log.info("提交Blend任务 dimensions:{},base64数组长度:{}", submitBlendDTO.getDimensions(), submitBlendDTO.getBase64Array().size());
         MidjourneyUser user = getUser();
-        checkUserFast(user);
+        checkUserLimit(user);
         return GatewayResponse.SUCCESS.newBuilder().toResult(midjourneyService.submitBlend(user, submitBlendDTO.getDimensions(), submitBlendDTO.getBase64Array()));
     }
 
@@ -118,7 +143,7 @@ public class MidjourneyController {
     public Result<MidjourneyUserConversation> submitModal(@RequestBody SubmitModalDTO submitModalDTO) throws Exception{
         log.info("提交Modal任务,taskId:{},提示:{},base64数组长度:{}",submitModalDTO.getTaskId(),submitModalDTO.getPrompt(),submitModalDTO.getMaskBase64().length());
         MidjourneyUser user = getUser();
-        checkUserFast(user);
+        checkUserLimit(user);
         return GatewayResponse.SUCCESS.newBuilder().toResult(midjourneyService.submitModal(user,submitModalDTO.getTaskId(),submitModalDTO.getPrompt(),submitModalDTO.getMaskBase64()));
     }
 
@@ -129,7 +154,7 @@ public class MidjourneyController {
     public Result<MidjourneyUserConversation> submitShorten(@RequestBody SubmitShortenDTO submitShortenDTO) throws Exception {
         log.info("提交Shorten任务 提示词:{}",submitShortenDTO.getPrompt());
         MidjourneyUser user = getUser();
-        checkUserFast(user);
+        checkUserLimit(user);
         return GatewayResponse.SUCCESS.newBuilder().toResult(midjourneyService.submitShorten(user,submitShortenDTO.getPrompt()));
     }
 
@@ -140,7 +165,7 @@ public class MidjourneyController {
     public Result<MidjourneyUserConversation> action(@RequestBody SubmitActionDTO actionDTO) throws Exception {
         log.info("任务id:{},执行动作:{}",actionDTO.getTaskId(),actionDTO.getCustomId());
         MidjourneyUser user = getUser();
-        checkUserFast(user);
+        checkUserLimit(user);
         return GatewayResponse.SUCCESS.newBuilder().toResult(midjourneyService.submitAction(user,actionDTO.getTaskId(), actionDTO.getCustomId()));
     }