Răsfoiți Sursa

fix mj car 任务数

zwhui 2 ani în urmă
părinte
comite
57cbc5ad01

+ 7 - 0
netflix-dao/src/main/java/com/cyksj/model/views/MidjouneyCarInfoView.java

@@ -1,5 +1,6 @@
 package com.cyksj.model.views;
 
+import com.baomidou.mybatisplus.annotation.TableField;
 import com.ejlchina.searcher.bean.DbField;
 import com.ejlchina.searcher.bean.SearchBean;
 import lombok.Data;
@@ -46,6 +47,12 @@ public class MidjouneyCarInfoView {
     @DbField("mj.fastTime")
     private Long fastTime;
 
+    /**
+     * 任务数
+     */
+    @TableField(exist = false)
+    private Long taskNum;
+
     /**
      * 得分
      */

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

@@ -842,6 +842,7 @@ public class RedisService {
         MIDJOURNEY_ACCOUNT("midjourney:account:", "midjourney account", 60 * 60 * 48L),
         APPLY_MONEY_DAY_LIMIT_KEY("apply_money_day_limit_key:%s:%s:%s", "每日提现次数限制", 60 * 60 * 24L),
         NETFLIX_SET_LIMIT_TIME("netflix_set_limit_time", "奈飞设置限制", 30l),
+        MIDJOURNEY_CAR_TASK("midjourney:car:task","midjourney car 任务数", 48 * 60 * 60L),
         ;
 
         private String name;

+ 32 - 2
netflix-web/src/main/java/com/cyksj/web/controller/mirror/MidjourneyController.java

@@ -13,6 +13,7 @@ import com.cyksj.model.views.ChatGptUserConversationRecordHistoryView;
 import com.cyksj.model.views.MidjouneyCarInfoView;
 import com.cyksj.model.views.MidjourneyUserConversationRecordHistoryView;
 import com.cyksj.model.views.MidjourneyUserView;
+import com.cyksj.redis.RedisService;
 import com.cyksj.service.midjourney.MidjourneyService;
 import com.cyksj.service.user.UserBindRelationService;
 import com.cyksj.web.util.StpUserUtil;
@@ -28,6 +29,7 @@ import org.springframework.web.bind.annotation.*;
 import javax.servlet.http.HttpServletRequest;
 import java.math.BigDecimal;
 import java.math.RoundingMode;
+import java.util.Comparator;
 import java.util.List;
 
 /** server/镜像服务/mj绘画
@@ -51,6 +53,8 @@ public class MidjourneyController {
 
     private final UserBindRelationService userBindRelationService;
 
+    private final RedisService redisService;
+
 
     //-------------------------alpha -----------------------
 
@@ -61,7 +65,7 @@ public class MidjourneyController {
      * @return
      */
     @GetMapping("/mj/cars")
-    public Result<SearchResult<MidjouneyCarInfoView>> getCarInfoList(Long relationId, @RequestParam(defaultValue = "true") Boolean isPlus) {
+    public Result<SearchResult<MidjouneyCarInfoView>> getCarInfoList(Long relationId,Boolean taskNumAsc) {
         long userId = StpUserUtil.getLoginIdAsLong();
         //查看用户是否存在车票
         MidjourneyUser midjourneyUser = midjourneyService.getUser(userId, relationId);
@@ -69,10 +73,36 @@ public class MidjourneyController {
             throw BusinessRuntimeException.getInstance("您还未购买车票");
         }
         SearchResult<MidjouneyCarInfoView> carInfoList = beanSearcher.search(MidjouneyCarInfoView.class,MapUtils.flatBuilder(request.getParameterMap()).build());
-
+        carInfoList.getDataList().forEach(midjouneyCarInfoView -> {
+            midjouneyCarInfoView.setTaskNum(getCarConversationCount(midjouneyCarInfoView.getCarId(), 5L));
+        });
+        if(taskNumAsc){
+            carInfoList.getDataList().sort(Comparator.comparing(MidjouneyCarInfoView::getTaskNum));
+        }else {
+            carInfoList.getDataList().sort(Comparator.comparing(MidjouneyCarInfoView::getTaskNum).reversed());
+        }
         return GatewayResponse.SUCCESS.newBuilder().toResult(carInfoList);
     }
+    /**
+     * 获取指定车队ID在滑动窗口内的提问次数
+     *
+     * @param carId 车队ID
+     * @return 滑动窗口内的请求次数
+     */
+    private Long getCarConversationCount(String carId, Long limitTime) {
+        // 定义键名
+        String key = RedisService.key.MIDJOURNEY_CAR_TASK.getName() + carId;
+        long timestamp = System.currentTimeMillis();
+
+        long windowStartMillis = timestamp - (limitTime * 60 * 1000);
 
+        // 清除时间窗口之前的请求记录(可选,根据需要决定是否在此处清理过期记录)
+        redisService.zRemoveRangeByScore(key, 0, windowStartMillis);
+
+        // 获取当前窗口内的请求次数
+        Long currentSize = redisService.zCard(key);
+        return currentSize != null ? currentSize : 0L;
+    }
     /**
      * 获取mj车票信息
      */