فهرست منبع

Merge branch 'grok_inner' into pre

zoujiajian 2 ماه پیش
والد
کامیت
6320d7d5cb

+ 11 - 0
netflix-dao/src/main/java/com/cyksj/mapper/GrokSessionMapper.java

@@ -0,0 +1,11 @@
+package com.cyksj.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.cyksj.model.entity.GrokSession;
+
+/**
+ * @author chan
+ * @date 2026/6/5
+ */
+public interface GrokSessionMapper extends BaseMapper<GrokSession> {
+}

+ 35 - 0
netflix-dao/src/main/java/com/cyksj/model/entity/GrokSession.java

@@ -0,0 +1,35 @@
+package com.cyksj.model.entity;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.cyksj.model.BaseEntity;
+import lombok.Data;
+
+/**
+ * Grok SSO session.
+ */
+@Data
+@TableName("grok_session")
+public class GrokSession extends BaseEntity {
+
+    private String email;
+
+    private String password;
+
+    @TableField("carID")
+    private String carId;
+
+    private String sso;
+
+    private Integer count;
+
+    private Integer status;
+
+    private String type;
+
+    private String remark;
+
+    private Long sort;
+
+    private Double score;
+}

+ 59 - 0
netflix-dao/src/main/java/com/cyksj/model/views/GrokCarInfoView.java

@@ -0,0 +1,59 @@
+package com.cyksj.model.views;
+
+import com.ejlchina.searcher.bean.DbField;
+import com.ejlchina.searcher.bean.DbIgnore;
+import com.ejlchina.searcher.bean.SearchBean;
+import lombok.Data;
+
+import java.util.Objects;
+
+/**
+ * Grok car info view.
+ */
+@Data
+@SearchBean(
+        tables = "grok_session gs",
+        where = "gs.status is true"
+)
+public class GrokCarInfoView {
+
+    @DbField("gs.carID")
+    private String carId;
+
+    @DbIgnore
+    private String carName;
+
+    @DbIgnore
+    private String status;
+
+    @DbField("gs.score")
+    private Double score;
+
+    @DbField("gs.status")
+    private Boolean csStatus;
+
+    @DbField("gs.count")
+    private Integer use;
+
+    @DbField("gs.type")
+    private String type;
+
+    @DbField("gs.sort")
+    private Long sort;
+
+    @DbField("gs.remark")
+    private String remark;
+
+    @Override
+    public boolean equals(Object o) {
+        if (this == o) return true;
+        if (o == null || getClass() != o.getClass()) return false;
+        GrokCarInfoView that = (GrokCarInfoView) o;
+        return Objects.equals(carId, that.carId);
+    }
+
+    @Override
+    public int hashCode() {
+        return Objects.hash(carId);
+    }
+}

+ 5 - 0
netflix-service/src/main/java/com/cyksj/service/grok/GrokService.java

@@ -1,9 +1,12 @@
 package com.cyksj.service.grok;
 
 import com.cyksj.model.entity.GrokUser;
+import com.cyksj.model.views.GrokCarInfoView;
 import com.cyksj.model.views.GrokUserView;
+import com.ejlchina.searcher.SearchResult;
 
 import java.time.LocalDateTime;
+import java.util.Map;
 
 /**
  * @author chan
@@ -19,4 +22,6 @@ public interface GrokService {
     Long getConversationCount(String userToken, Long limitTime);
 
     String getCarLoginUrl(String domain, Long userId, Long relationId);
+
+    SearchResult<GrokCarInfoView> getCarInfoList(Map<String, String[]> parameterMap, Integer limit);
 }

+ 34 - 0
netflix-service/src/main/java/com/cyksj/service/grok/impl/GrokServiceImpl.java

@@ -12,10 +12,15 @@ import com.cyksj.common.exception.BusinessRuntimeException;
 import com.cyksj.common.util.StringUtil;
 import com.cyksj.mapper.*;
 import com.cyksj.model.entity.*;
+import com.cyksj.model.views.GrokCarInfoView;
 import com.cyksj.model.views.GrokUserView;
 import com.cyksj.service.grok.GrokService;
 import com.cyksj.service.sys.SysConfigService;
 import com.cyksj.service.user.UserBindRelationService;
+import com.ejlchina.searcher.BeanSearcher;
+import com.ejlchina.searcher.SearchResult;
+import com.ejlchina.searcher.util.MapBuilder;
+import com.ejlchina.searcher.util.MapUtils;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.dao.DuplicateKeyException;
@@ -24,7 +29,9 @@ import org.springframework.stereotype.Service;
 import java.math.BigDecimal;
 import java.math.RoundingMode;
 import java.time.LocalDateTime;
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
 import java.util.Optional;
 
 /**
@@ -50,6 +57,8 @@ public class GrokServiceImpl implements GrokService {
 
     private final SysConfigService sysConfigService;
 
+    private final BeanSearcher beanSearcher;
+
     @Override
     public GrokUserView getUserInfo(long userId, Long relationId) {
         GrokUser grokUser = checkCarAccount(userId, relationId);
@@ -131,6 +140,31 @@ public class GrokServiceImpl implements GrokService {
         }
     }
 
+    @Override
+    public SearchResult<GrokCarInfoView> getCarInfoList(Map<String, String[]> parameterMap, Integer limit) {
+        Map<String, String[]> params = new HashMap<>(parameterMap);
+        if (params.containsKey("status")) {
+            params.put("csStatus", params.remove("status"));
+        }
+        MapBuilder builder = MapUtils.flatBuilder(params)
+                .orderBy(GrokCarInfoView::getSort).asc()
+                .orderBy(GrokCarInfoView::getScore).asc();
+        if (!params.containsKey("limit")) {
+            builder.limit(0, limit);
+        }
+        SearchResult<GrokCarInfoView> carInfoList = beanSearcher.search(GrokCarInfoView.class, builder.build());
+        carInfoList.getDataList().forEach(this::buildGrokCarInfoView);
+        return carInfoList;
+    }
+
+    private void buildGrokCarInfoView(GrokCarInfoView view) {
+        view.setCarName(view.getCarId());
+        view.setStatus("空闲");
+        Double score = Optional.ofNullable(view.getScore()).orElse(0D);
+        view.setStatus(score >= 100 ? "繁忙" : "空闲");
+        view.setScore(Math.min(BigDecimal.valueOf(score).multiply(BigDecimal.valueOf(0.5)).setScale(0, RoundingMode.DOWN).doubleValue(), 200));
+    }
+
     /**
      * 获取车位信息
      *

+ 16 - 0
netflix-web/src/main/java/com/cyksj/web/controller/mirror/MirrorController.java

@@ -636,6 +636,22 @@ public class MirrorController {
         return GatewayResponse.SUCCESS.newBuilder().toResult(url);
     }
 
+    /**
+     * Grok car list.
+     */
+    @GetMapping("/grok/cars")
+    public Result<SearchResult<GrokCarInfoView>> grokCarInfoList(Long relationId, @RequestParam(defaultValue = "11") Integer limit) {
+        Long userId = StpUserUtil.getUserIdAfterLogin();
+        if (relationId != null) {
+            GrokUser grokUser = grokService.checkCarAccount(userId, relationId);
+            if (grokUser == null) {
+                throw BusinessRuntimeException.getInstance("您还未购买车票");
+            }
+        }
+        SearchResult<GrokCarInfoView> carInfoList = grokService.getCarInfoList(request.getParameterMap(), limit);
+        return GatewayResponse.SUCCESS.newBuilder().toResult(carInfoList);
+    }
+
 
     //------------------------ Gemini -------------------------------