|
|
@@ -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)){
|
|
|
@@ -651,6 +650,7 @@ public class MidjourneyServiceImpl implements MidjourneyService {
|
|
|
/**
|
|
|
* 用户生图次数限制
|
|
|
*/
|
|
|
+ @Override
|
|
|
public void userSubmitLimit(MidjourneyUser user,String action,Object customId,Boolean again) {
|
|
|
if (again) {
|
|
|
return;
|
|
|
@@ -1446,4 +1446,62 @@ public class MidjourneyServiceImpl implements MidjourneyService {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void saveConversationRecord(String userToken, String json,String carid,String status) {
|
|
|
+ JSONArray success = JSONUtil.parseObj(json).getJSONArray("success");
|
|
|
+ if (success.isEmpty()) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ JSONObject jsons = success.getJSONObject(0);
|
|
|
+ LambdaQueryWrapper<MidjourneySession> wrapper = Wrappers.lambdaQuery(MidjourneySession.class).eq(MidjourneySession::getCarId, carid);
|
|
|
+ MidjourneySession midjourneySession = midjourneySessionMapper.selectOne(wrapper);
|
|
|
+ String jobId = jsons.getStr("job_id");
|
|
|
+ MidjourneyUserConversationRecord midjourneyUserConversationRecord = midjourneyUserConversationRecordMapper.selectOne(Wrappers.lambdaQuery(MidjourneyUserConversationRecord.class).eq(MidjourneyUserConversationRecord::getConversationId, jobId));
|
|
|
+ if (midjourneyUserConversationRecord == null) {
|
|
|
+ midjourneyUserConversationRecord = new MidjourneyUserConversationRecord();
|
|
|
+ midjourneyUserConversationRecord.setUserToken(userToken);
|
|
|
+ midjourneyUserConversationRecord.setCarId(midjourneySession.getCarId());
|
|
|
+ midjourneyUserConversationRecord.setCarName(midjourneySession.getCarName());
|
|
|
+ midjourneyUserConversationRecord.setConversationId(jobId);
|
|
|
+ midjourneyUserConversationRecord.setMode(JSONUtil.parseObj(jsons.getStr("flags")).getStr("mode"));
|
|
|
+ midjourneyUserConversationRecord.setAction(jsons.getStr("event_type"));
|
|
|
+ midjourneyUserConversationRecord.setPrompt(jsons.getStr("prompt"));
|
|
|
+ midjourneyUserConversationRecord.setStatus(status);
|
|
|
+ midjourneyUserConversationRecordMapper.insert(midjourneyUserConversationRecord);
|
|
|
+ }else {
|
|
|
+ midjourneyUserConversationRecord.setStatus(status);
|
|
|
+ midjourneyUserConversationRecordMapper.updateById(midjourneyUserConversationRecord);
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ if (StringUtils.isNotBlank(midjourneySession.getCarId())) {
|
|
|
+ updateExperienceAndScore(midjourneySession.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);
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
}
|