瀏覽代碼

跳转gpt操作日志;记录用户触发车队使用次数;用户限制次数记录

zoujiajian 2 年之前
父節點
當前提交
97f6c6f480

+ 13 - 0
netflix-dao/src/main/java/com/cyksj/mapper/ChatgptUserCarUsedRecordMapper.java

@@ -0,0 +1,13 @@
+package com.cyksj.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.cyksj.model.entity.ChatgptUserCarUsedRecord;
+
+/**
+ * 项目名: yhlxj2
+ * 文件名: ChatgptUserCarUsedRecordMapper
+ * 创建者: JavaZou
+ * 创建时间:2024/4/19 17:55
+ */
+public interface ChatgptUserCarUsedRecordMapper extends BaseMapper<ChatgptUserCarUsedRecord> {
+}

+ 40 - 0
netflix-dao/src/main/java/com/cyksj/model/entity/ChatgptUserCarUsedRecord.java

@@ -0,0 +1,40 @@
+package com.cyksj.model.entity;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * 项目名: yhlxj2
+ * 文件名: ChatgptUserCarUsedRecord
+ * 创建者: JavaZou
+ * 创建时间:2024/4/19 17:54
+ */
+@TableName("chatgpt_user_car_used_record")
+@Getter
+@Setter
+public class ChatgptUserCarUsedRecord extends BaseEntity{
+
+	private String carId;
+
+	@TableField("userToken")
+	private String userToken;
+
+	/**
+	 * gpt3.5使用次数
+	 */
+	private Integer gpt;
+
+
+	/**
+	 * gpt4s使用次数
+	 */
+	private Integer gptFour;
+
+	/**
+	 * true用户次数限制
+	 */
+	private Boolean isUserLimit;
+
+}

+ 31 - 0
netflix-service/src/main/java/com/cyksj/service/chatgpt/impl/ChatGptAccountServiceImpl.java

@@ -92,6 +92,8 @@ public class ChatGptAccountServiceImpl implements ChatGptAccountService {
 
     private final ChatgptUserTokenPrepareMapper chatgptUserTokenPrepareMapper;
 
+    private final ChatgptUserCarUsedRecordMapper chatgptUserCarUsedRecordMapper;
+
     @Override
     public String addAccount(Account account) {
         if (isAccountExists(account)) {
@@ -211,6 +213,7 @@ public class ChatGptAccountServiceImpl implements ChatGptAccountService {
         GroupsRelation groupsRelation = getGroupsRelation(userId, relationId);
         GroupsTrips groupsTrips = getGroupsTrips(groupsRelation);
         GoodsDonSku goodsDonSku = skuMapper.selectById(groupsTrips.getSkuId());
+        log.info("用户:{},所在车次:{},座位id:{},在{}获取跳转GPT镜像的登录url", userId, groupsTrips.getId(), relationId, DateTime.now());
 
         if (goodsDonSku != null && goodsDonSku.getIsMirror()) {
             ChatgptUser chatgptUser = getChatgptUser(userId, relationId, groupsRelation, groupsTrips, goodsDonSku);
@@ -491,6 +494,11 @@ public class ChatGptAccountServiceImpl implements ChatGptAccountService {
                 conversationLimitResponse.setNextAvailableTime(nextAvailableTime);
             }
             conversationLimitResponse.setLimited(true);
+            //用户次数使用限制
+            ChatgptUserCarUsedRecord chatgptUserCarUsedRecord = new ChatgptUserCarUsedRecord();
+            chatgptUserCarUsedRecord.setUserToken(userToken);
+            chatgptUserCarUsedRecord.setIsUserLimit(true);
+            chatgptUserCarUsedRecordMapper.insert(chatgptUserCarUsedRecord);
             return conversationLimitResponse;
         } else {
             // 如果未超过限制,记录当前请求的时间戳
@@ -807,6 +815,29 @@ public class ChatGptAccountServiceImpl implements ChatGptAccountService {
             }
         }
         redisService.set("chatgpt:clears_in:" + carId, expTime, expTime);
+
+        try {
+            //记录用户触发限制
+            ChatgptUserCarUsedRecord chatgptUserCarUsedRecord = new ChatgptUserCarUsedRecord();
+            chatgptUserCarUsedRecord.setUserToken(userToken);
+            chatgptUserCarUsedRecord.setCarId(carId);
+
+            String highCarChatKey = RedisService.key.CHATGPT_CAR_HIGH_CHAT.getName() + carId;
+            String lowCarChatKey = RedisService.key.CHATGPT_CAR_LOW_CHAT.getName() + carId;
+
+            Long highCarChatNum = redisService.zCard(highCarChatKey);
+            if (highCarChatNum != null) {
+                chatgptUserCarUsedRecord.setGptFour(Integer.parseInt(highCarChatNum.toString()));
+            }
+            Long lowCarChatNum = redisService.zCard(lowCarChatKey);
+            if (lowCarChatNum != null) {
+                chatgptUserCarUsedRecord.setGpt(Integer.parseInt(lowCarChatNum.toString()));
+            }
+            chatgptUserCarUsedRecordMapper.insert(chatgptUserCarUsedRecord);
+            log.info("记录userToken:{}访问对应镜像车队carId:{}操作成功", userToken, carId);
+        } catch (Exception e) {
+            log.info("记录userToken:{}访问对应镜像车队carId:{}操作失败e:{}", userToken, carId, StringUtil.getErrorText(e));
+        }
     }
 
     @PostConstruct

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

@@ -75,6 +75,7 @@ public class MirrorController {
     @RequestMapping("/gpt/oauth")
     public Result<String> gptOauth(@RequestParam("usertoken") String userToken, @RequestParam("carid") String carId) {
         try {
+            log.info("用户通过userToken:{}访问镜像车队carId:{}", userToken, carId);
             ChatgptUser user = chatGptAccountService.findByUserTokenAndExpireTimeAfter(userToken, LocalDateTime.now());
             if (user == null) {
                 return GatewayResponse.SUCCESS.newBuilder().setMsg("用户不存在或已过期").setCode(0).toResult();
@@ -82,6 +83,7 @@ public class MirrorController {
 
             ChatgptSession session = chatGptAccountService.checkSession(carId);
             if (session.getIsCar()) {
+                log.info("用户:{}通过userToken:{}访问镜像车队carId:{}成功", user.getName(), userToken, carId);
                 return GatewayResponse.SUCCESS.newBuilder().setMsg("登陆成功").setCode(1).toResult();
             }
         } catch (Exception e) {

文件差異過大導致無法顯示
+ 0 - 0
netflix-web/src/main/resources/application-dev.yml


文件差異過大導致無法顯示
+ 0 - 0
netflix-web/src/main/resources/application-prd.yml


+ 4 - 0
netflix-web/src/main/resources/application-pre.yml

@@ -92,8 +92,12 @@ sa-token:
   timeout: 2592000
   # token临时有效期 (指定时间内无操作就视为token过期) 单位: 秒
   activity-timeout: -1
+  # 是否允许同一账号多地同时登录 (为 true 时允许一起登录, 为 false 时新登录挤掉旧登录)
+  is-concurrent: true
   # 在多人登录同一账号时,是否共用一个token (为true时所有登录共用一个token, 为false时每次登录新建一个token)
   is-share: false
+  # 同一账号最大登录数量
+  maxLoginCount: 3
   # token风格
   token-style: uuid
 

部分文件因文件數量過多而無法顯示