Jelajahi Sumber

fix 修改慢速账号使用方式

zwhui 2 tahun lalu
induk
melakukan
8f84bd0030

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

@@ -842,6 +842,8 @@ public class RedisService {
         MIDJOURNEY_CONVERSATION("midjourney:conversation:", "midjourney conversation", 60 * 60 * 2L),
         MIDJOURNEY_ACCOUNT("midjourney:account:", "midjourney account", 60 * 60 * 48L),
         MIDJOURNEY_QUERY("midjourney:query:", "midjourney query", 60 * 60 * 2L),
+        MIDJOURNEY_RELAX_CONVERSATION("midjourney:relax:conversation:", "midjourney relax conversation", 60 * 60 * 2L),
+        MIDJOURNEY_ACCOUNT_USED("midjourney:account:used:", "midjourney account used", 60 * 60 * 48L),
         ;
 
         private String name;

+ 11 - 4
netflix-service/src/main/java/com/cyksj/service/midjourney/impl/MidJourneyAccountServiceImpl.java

@@ -63,7 +63,11 @@ public class MidJourneyAccountServiceImpl extends ServiceImpl<MidjourneyAccountM
         Long instanceId = getAccount(midjourneyAccount.getId());
         midjourneyAccount.setInstanceId(instanceId);
         baseMapper.updateById(midjourneyAccount);
-        redisService.hset(RedisService.key.MIDJOURNEY_ACCOUNT.getName(),midjourneyAccount.getInstanceId().toString(),0);
+        String key = RedisService.key.MIDJOURNEY_ACCOUNT.getName();
+        Map<Object, Object> accountsUsage = redisService.hmget(key);
+        if (MapUtil.isNotEmpty(accountsUsage)) {
+            redisService.hset(key,midjourneyAccount.getInstanceId().toString(),accountsUsage.values().toArray()[0]);
+        }
     }
 
     @Override
@@ -100,11 +104,14 @@ public class MidJourneyAccountServiceImpl extends ServiceImpl<MidjourneyAccountM
         midjourneyAccount.setStatus(!midjourneyAccount.getStatus());
         baseMapper.updateById(midjourneyAccount);
         updAccount(midjourneyAccount);
-
+        String key = RedisService.key.MIDJOURNEY_ACCOUNT.getName();
         if (!midjourneyAccount.getStatus()) {
-            redisService.hdel(RedisService.key.MIDJOURNEY_ACCOUNT.getName(),midjourneyAccount.getInstanceId());
+            redisService.hdel(key,midjourneyAccount.getInstanceId());
         }else {
-            redisService.hset(RedisService.key.MIDJOURNEY_ACCOUNT.getName(),midjourneyAccount.getInstanceId().toString(),0);
+            Map<Object, Object> accountsUsage = redisService.hmget(key);
+            if (MapUtil.isNotEmpty(accountsUsage)) {
+                redisService.hset(key,midjourneyAccount.getInstanceId().toString(),accountsUsage.values().toArray()[0]);
+            }
         }
     }
 

+ 25 - 29
netflix-service/src/main/java/com/cyksj/service/midjourney/impl/MidjourneyServiceImpl.java

@@ -178,24 +178,24 @@ public class MidjourneyServiceImpl implements MidjourneyService {
         }
         return num;
     }
-    /**
-     * 同步数据库
-     */
-    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);
-    }
+//    /**
+//     * 同步数据库
+//     */
+//    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);
+//    }
 
     @Override
     public SubmitResult submitAction(MidjourneyUser user, Long taskId, String customId, Long num, String botType) throws Exception {
@@ -230,11 +230,11 @@ public class MidjourneyServiceImpl implements MidjourneyService {
         if (result.getCode() == 21) {
             // 以上操作有弹窗确认,恢复次数
             recoverUserLimit(user.getId(), user.getMode(),num);
-            if (user.getMode() == 2){
-                redisService.hdecr(RedisService.key.MIDJOURNEY_ACCOUNT.getName() , String.valueOf(conversation.getInstanceId()), 1.0);
-            }
         }else {
-            syncUser(user.getId(), user.getMode(),num);
+            //syncUser(user.getId(), user.getMode(),num);
+            if (!customId.contains("upsample") && user.getMode() == 2) {
+                redisService.hincr(RedisService.key.MIDJOURNEY_ACCOUNT.getName(), result.getInstanceId().toString(), 1.0);
+            }
         }
         saveConversation(user.getId(), user.getMode(), result,"ACTION", StringUtils.EMPTY, botType);
         return result;
@@ -284,7 +284,6 @@ public class MidjourneyServiceImpl implements MidjourneyService {
         // 增加使用次数
         if (StringUtils.isNotBlank(accountWithMinUsage) && mode == 2) {
             submitResult.setInstanceId(Long.valueOf(accountWithMinUsage));
-            redisService.hincr(RedisService.key.MIDJOURNEY_ACCOUNT.getName(), accountWithMinUsage, 1.0);
         }
         return submitResult;
     }
@@ -296,9 +295,9 @@ public class MidjourneyServiceImpl implements MidjourneyService {
             Map<Object, Object> accountsUsage = redisService.hmget(key);
 
             if (accountsUsage == null || accountsUsage.isEmpty()) {
-                Map<Object, Object> map = midjourneyAccountService.list(Wrappers.lambdaQuery(MidjourneyAccount.class).eq(MidjourneyAccount::getStatus,Boolean.TRUE)).stream().collect(Collectors.toMap(k -> k.getInstanceId().toString(), v -> 0));
+                accountsUsage = midjourneyAccountService.list(Wrappers.lambdaQuery(MidjourneyAccount.class).eq(MidjourneyAccount::getStatus,Boolean.TRUE)).stream().collect(Collectors.toMap(k -> k.getInstanceId().toString(), v -> 0));
                 // 保存所有账号ID和使用次数
-                redisService.hmset(key, map);
+                redisService.hmset(key, accountsUsage);
             }
 
             // 找到使用次数最少的账号ID
@@ -380,14 +379,11 @@ public class MidjourneyServiceImpl implements MidjourneyService {
             MidjourneyUserConversation dbConversation = conversationMapper.selectOne(Wrappers.lambdaQuery(MidjourneyUserConversation.class).eq(MidjourneyUserConversation::getTaskId, conversation.getTaskId())
                     .eq(MidjourneyUserConversation::getUserId, userId).orderByDesc(MidjourneyUserConversation::getId).last("limit 1"));
             if (dbConversation != null) {
-                if ("SUCCESS".equals(dbConversation.getStatus())) {
+                if ("SUCCESS".equals(dbConversation.getStatus()) || "FAILURE".equals(dbConversation.getStatus()) || "MODAL".equals(dbConversation.getStatus())) {
                     return;
                 }
                 conversation.setId(dbConversation.getId());
                 conversationMapper.updateById(conversation);
-                if (dbConversation.getMode() == 2){
-                    redisService.hdecr(RedisService.key.MIDJOURNEY_ACCOUNT.getName() , dbConversation.getInstanceId().toString(), 1.0);
-                }
                 TASK_EXECUTOR.execute(() -> {
                     try {
                         String imageUrl = conversation.getImageUrl();