zwhui 2 жил өмнө
parent
commit
1484bbc3de

+ 11 - 0
midjourney/src/main/java/com/yhlxj/dao/mapper/midjourney/MidjourneySessionMapper.java

@@ -0,0 +1,11 @@
+package com.yhlxj.dao.mapper.midjourney;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.yhlxj.dao.model.entity.MidjourneySession;
+
+/**
+ * @author chan
+ * @date 2024/3/19 10:43
+ */
+public interface MidjourneySessionMapper extends BaseMapper<MidjourneySession> {
+}

+ 11 - 0
midjourney/src/main/java/com/yhlxj/dao/mapper/midjourney/MidjourneyUserConversationRecordMapper.java

@@ -0,0 +1,11 @@
+package com.yhlxj.dao.mapper.midjourney;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.yhlxj.dao.model.entity.MidjourneyUserConversationRecord;
+
+/**
+ * @author chan
+ * @date 2024/4/2 18:12
+ */
+public interface MidjourneyUserConversationRecordMapper extends BaseMapper<MidjourneyUserConversationRecord> {
+}

+ 10 - 0
midjourney/src/main/java/com/yhlxj/dao/model/dto/AlphaSubmitRequestDTO.java

@@ -17,6 +17,7 @@ public class AlphaSubmitRequestDTO {
     private String roomId;
     private String channelId;
     private Metadata metadata;
+    private String eventType;
 
     // Getters and setters
 
@@ -92,6 +93,15 @@ public class AlphaSubmitRequestDTO {
         this.metadata = metadata;
     }
 
+
+    public String getEventType() {
+        return eventType;
+    }
+
+    public void setEventType(String eventType) {
+        this.eventType = eventType;
+    }
+
     public static class Flags {
         private String mode;
         private boolean isPrivate;

+ 81 - 0
midjourney/src/main/java/com/yhlxj/dao/model/entity/MidjourneySession.java

@@ -0,0 +1,81 @@
+package com.yhlxj.dao.model.entity;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.ejlchina.searcher.bean.SearchBean;
+import com.yhlxj.dao.model.BaseEntity;
+import lombok.Data;
+
+/**
+ * @author chan
+ * @date 2024/3/18 17:10
+ */
+@Data
+@TableName("midjourney_session")
+@SearchBean(tables = "midjourney_session")
+public class MidjourneySession extends BaseEntity {
+
+    /**
+     * 邮箱
+     */
+    private String email;
+
+    /**
+     * 密码
+     */
+    private String password;
+
+    /**
+     * 状态 1有效 1无效
+     */
+    private Integer status;
+
+    /**
+     * 是否为plus会员
+     */
+    @TableField("isPlus")
+    private Integer isPlus;
+
+    /**
+     * accountId
+     */
+    @TableField("accountId")
+    private Long accountId;
+
+    @TableField("isCar")
+    private Boolean isCar;
+
+    /**
+     * 车id
+     */
+    @TableField("carID")
+    private String carId;
+
+    /**
+     * 车名称
+     */
+    private String carName;
+
+    /**
+     * 官方session
+     */
+    @TableField("officialSession")
+    private String officialSession;
+
+    /**
+     * 备注
+     */
+    private String remark;
+
+    /**
+     * 排序
+     */
+    private Integer sort;
+
+    /**
+     * 快速时长
+     */
+    private Long fastTime;
+
+
+}

+ 55 - 0
midjourney/src/main/java/com/yhlxj/dao/model/entity/MidjourneyUserConversationRecord.java

@@ -0,0 +1,55 @@
+package com.yhlxj.dao.model.entity;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.ejlchina.searcher.bean.SearchBean;
+import com.yhlxj.dao.model.BaseEntity;
+import lombok.Data;
+
+/**
+ * @author chan
+ * @date 2024/3/18 17:10
+ */
+@Data
+@TableName("chatgpt_user_conversation_record")
+@SearchBean(tables = "chatgpt_user_conversation_record")
+public class MidjourneyUserConversationRecord extends BaseEntity {
+
+
+    /**
+     * 凭证
+     */
+    private String userToken;
+
+    /**
+     * 会话id
+     */
+    private String conversationId;
+
+    /**
+     * 指令
+     */
+    private String prompt;
+
+    /**
+     * 动作
+     */
+    private String action;
+
+    private String mode;
+
+    /**
+     * 车次id
+     */
+    private String carId;
+
+    /**
+     * 车次名称
+     */
+    private String carName;
+
+    /**
+     * 状态
+     */
+    private String status;
+
+}

+ 1 - 0
midjourney/src/main/java/com/yhlxj/redis/RedisService.java

@@ -756,6 +756,7 @@ public class RedisService {
         MIDJOURNEY_PROGRESS("midjourney:task:progress:","task progress 任务进度", 60 * 60 * 1L),
         MIDJOURNEY_USER_TIME("midjourney:user:time:", "midjourney user time", 60 * 60 * 24L),
         MIDJOURNEY_USER_SUBMIT("midjourney:user:submit:", "midjourney user submit", 30L),
+        MIDJOURNEY_CAR_TASK("midjourney:car:task","midjourney car 任务数", 48 * 60 * 60L),
         ;
 
         private String name;

+ 4 - 0
midjourney/src/main/java/com/yhlxj/service/midjourney/MidjourneyService.java

@@ -2,6 +2,7 @@ package com.yhlxj.service.midjourney;
 
 
 import com.yhlxj.dao.mapper.midjourney.MidjourneyUserConversationMapper;
+import com.yhlxj.dao.model.dto.AlphaSubmitRequestDTO;
 import com.yhlxj.dao.model.dto.BlendDimensions;
 import com.yhlxj.dao.model.dto.SubmitUploadDTO;
 import com.yhlxj.dao.model.entity.MidjourneyUser;
@@ -48,4 +49,7 @@ public interface MidjourneyService {
     void syncPicture();
 
     Long checkUserLimit(MidjourneyUser user,Integer mode);
+
+    void saveConversationRecord(String userToken, AlphaSubmitRequestDTO conversationRequest,String carid,String status);
+
 }

+ 59 - 8
midjourney/src/main/java/com/yhlxj/service/midjourney/impl/MidjourneyServiceImpl.java

@@ -11,6 +11,7 @@ import cn.hutool.http.HttpUtil;
 import cn.hutool.json.JSONArray;
 import cn.hutool.json.JSONObject;
 import cn.hutool.json.JSONUtil;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.cyksj.common.exception.BusinessRuntimeException;
@@ -20,14 +21,8 @@ import com.cyksj.common.util.Jsons;
 import com.cyksj.common.util.QueryWrapperUtils;
 import com.cyksj.common.util.StringUtil;
 import com.yhlxj.dao.mapper.GroupsRelationMapper;
-import com.yhlxj.dao.mapper.midjourney.MidjourneyApiChannelMapper;
-import com.yhlxj.dao.mapper.midjourney.MidjourneyUserConversationMapper;
-import com.yhlxj.dao.mapper.midjourney.MidjourneyUserMapper;
-import com.yhlxj.dao.mapper.midjourney.MidjourneyWhiteMapper;
-import com.yhlxj.dao.model.dto.BlendDimensions;
-import com.yhlxj.dao.model.dto.MessageButton;
-import com.yhlxj.dao.model.dto.MjVersionStatus;
-import com.yhlxj.dao.model.dto.SubmitUploadDTO;
+import com.yhlxj.dao.mapper.midjourney.*;
+import com.yhlxj.dao.model.dto.*;
 import com.yhlxj.dao.model.entity.*;
 import com.yhlxj.dao.model.enums.WsMessageTypeEnum;
 import com.yhlxj.dao.model.response.SubmitResult;
@@ -122,6 +117,10 @@ public class MidjourneyServiceImpl implements MidjourneyService {
 
     private final MidjourneyWhiteMapper midjourneyWhiteMapper;
 
+    private final MidjourneyUserConversationRecordMapper midjourneyUserConversationRecordMapper;
+
+    private final MidjourneySessionMapper midjourneySessionMapper;
+
     @Override
     public MidjourneyUser getUser(String userToken) {
         if(StringUtils.isBlank(userToken)){
@@ -1446,4 +1445,56 @@ public class MidjourneyServiceImpl implements MidjourneyService {
        }
     }
 
+
+
+    @Override
+    public void saveConversationRecord(String userToken, AlphaSubmitRequestDTO conversationRequest,String carid,String status) {
+        LambdaQueryWrapper<MidjourneySession> wrapper = Wrappers.lambdaQuery(MidjourneySession.class).eq(MidjourneySession::getCarId, carid);
+        MidjourneySession chatgptSession = midjourneySessionMapper.selectOne(wrapper);
+        MidjourneyUserConversationRecord midjourneyUserConversationRecord = midjourneyUserConversationRecordMapper.selectOne(Wrappers.lambdaQuery(MidjourneyUserConversationRecord.class).eq(MidjourneyUserConversationRecord::getConversationId, conversationRequest.getId()));
+        if (midjourneyUserConversationRecord == null) {
+            midjourneyUserConversationRecord = new MidjourneyUserConversationRecord();
+            midjourneyUserConversationRecord.setUserToken(userToken);
+            midjourneyUserConversationRecord.setCarId(chatgptSession.getCarId());
+            midjourneyUserConversationRecord.setCarName(chatgptSession.getCarName());
+            midjourneyUserConversationRecord.setConversationId(conversationRequest.getId());
+            midjourneyUserConversationRecord.setMode(conversationRequest.getFlags().getMode());
+            midjourneyUserConversationRecord.setAction(conversationRequest.getEventType());
+            midjourneyUserConversationRecord.setPrompt(conversationRequest.getPrompt());
+            midjourneyUserConversationRecord.setStatus(status);
+            midjourneyUserConversationRecordMapper.insert(midjourneyUserConversationRecord);
+        }else {
+            midjourneyUserConversationRecord.setStatus(status);
+            midjourneyUserConversationRecordMapper.updateById(midjourneyUserConversationRecord);
+            return;
+        }
+
+        if (StringUtils.isNotBlank(chatgptSession.getCarId())) {
+            updateExperienceAndScore(chatgptSession.getCarId(), System.currentTimeMillis());
+        }
+
+    }
+
+
+    // 更新体验并计算评分
+    public void updateExperienceAndScore(String carId, long timestamp) {
+        // 定义键名
+        String key = RedisService.key.MIDJOURNEY_CAR_TASK.getName() + carId;
+
+        // 更新体验数据
+        redisService.zAdd(key, timestamp, String.valueOf(timestamp));
+
+        // 清理旧数据
+        cleanupOldExperiencesAndRecalculateScore(carId, timestamp);
+    }
+
+    // 清理旧数据和重新计算评分
+    public void cleanupOldExperiencesAndRecalculateScore(String carId, long currentTimestamp) {
+        long time = currentTimestamp - (5 * 60 * 1000); // 3小时前的时间戳
+
+        // 清理高级体验旧数据
+        redisService.zRemoveRangeByScore(RedisService.key.MIDJOURNEY_CAR_TASK.getName() + carId, 0, time);
+    }
+
+
 }

+ 17 - 4
midjourney/src/main/java/com/yhlxj/web/mirror/AlphaMidjourneyController.java

@@ -1,5 +1,6 @@
 package com.yhlxj.web.mirror;
 
+import com.cyksj.common.task.GlobalThreadPoolTaskExecutor;
 import com.cyksj.dto.Result;
 import com.cyksj.enums.GatewayResponse;
 import com.yhlxj.dao.model.dto.AlphaSubmitRequestDTO;
@@ -9,6 +10,7 @@ import com.yhlxj.service.midjourney.MidjourneyService;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang3.StringUtils;
+import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RequestParam;
 import org.springframework.web.bind.annotation.RestController;
@@ -26,6 +28,8 @@ import javax.servlet.http.HttpServletResponse;
 @RequestMapping("/applets/alpha-midjourney")
 public class AlphaMidjourneyController {
 
+    private static final GlobalThreadPoolTaskExecutor TASK_EXECUTOR = GlobalThreadPoolTaskExecutor.getInstance();
+
     private final HttpServletRequest request;
 
     private final HttpServletResponse response;
@@ -40,7 +44,7 @@ public class AlphaMidjourneyController {
     private static final String MODE_TURBO = "turbo";
 
     @RequestMapping("/auditLimit")
-    public AlphaAuditLimitResponse auditLimit(AlphaSubmitRequestDTO submitRequestDTO) {
+    public AlphaAuditLimitResponse auditLimit(@RequestBody AlphaSubmitRequestDTO submitRequestDTO) {
         String userToken = getUserTokenFromRequest();
 
         if (userToken == null) {
@@ -72,6 +76,12 @@ public class AlphaMidjourneyController {
             return badRequestResponse("您已经没有次数啦。模式:" + mode);
         }
 
+        String carid = request.getHeader("Carid");
+        if(StringUtils.isNotBlank(carid)){
+            TASK_EXECUTOR.execute(() -> {
+                midjourneyService.saveConversationRecord(userToken, submitRequestDTO, carid,"IN_PROGRESS");
+            });
+        }
         return new AlphaAuditLimitResponse();
     }
 
@@ -88,7 +98,7 @@ public class AlphaMidjourneyController {
     }
 
     @RequestMapping("/notifyUrl")
-    public Result<String> notifyUrl() {
+    public Result<String> notifyUrl(@RequestBody AlphaSubmitRequestDTO submitRequestDTO) {
         log.info("提交成功 通知扣次数");
         String userToken = getUserTokenFromRequest();
         String carid = request.getHeader("Carid");
@@ -99,8 +109,11 @@ public class AlphaMidjourneyController {
         }
         log.info("token:{}, mode:{}", userToken, mode);
         MidjourneyUser user = midjourneyService.getUser(userToken);
-
-
+        if(StringUtils.isNotBlank(carid)){
+            TASK_EXECUTOR.execute(() -> {
+                midjourneyService.saveConversationRecord(userToken, submitRequestDTO, carid,"SUCCESS");
+            });
+        }
         midjourneyService.checkUserLimit(user, MODE_RELAX.equals(mode) ? 2 : 1);
         return GatewayResponse.SUCCESS.newBuilder().toResult();
     }