zoujiajian 1 rok pred
rodič
commit
13e698a90e

+ 5 - 0
netflix-common/src/main/java/com/cyksj/common/constant/Constant.java

@@ -534,4 +534,9 @@ public interface Constant {
 	 * 提现黑名单
 	 */
 	String APPLY_MONEY_BLACK = "apply_money_black";
+
+	/**
+	 * 数字3
+	 */
+	Integer Three = 3;
 }

+ 34 - 0
netflix-common/src/main/java/com/cyksj/common/util/SignatureUtils.java

@@ -0,0 +1,34 @@
+package com.cyksj.common.util;
+
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.StringUtils;
+
+import java.util.Arrays;
+import java.util.Map;
+
+@Slf4j
+public class SignatureUtils {
+	// 生成HMAC-SHA256签名
+	public static String generateSignature(Map<String, String> map, String secret) throws Exception {
+		// 将map的key按ASCii升序排列
+		String[] keys = map.keySet().toArray(new String[0]);
+		Arrays.sort(keys);
+
+		// 将参数有序排列
+		StringBuilder str = new StringBuilder();
+		for (int i = 0; i < keys.length; i++) {
+			if (StringUtils.equals(keys[i], "sign")) {
+				continue;
+			}
+			if (StringUtils.isBlank(map.get(keys[i]))) {
+				continue;
+			}
+			str.append(keys[i]).append("=").append(map.get(keys[i])).append("&");
+		}
+		str.append("key=").append(secret);
+		log.info("签名验证, 排列好的有序字符串: {}", str.toString());
+
+		String sign = Codec.DoDigest.custom().setAlgorithm(Codec.DoDigest.Algorithm.MD5).setStringData(str.toString()).toHexString().toUpperCase();
+		return sign;
+	}
+}

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

@@ -0,0 +1,13 @@
+package com.cyksj.mapper.mini;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.cyksj.model.entity.MiniPopularizeUserIncrTimesRecord;
+
+/**
+ * 项目名: yhlxj2
+ * 文件名: MiniPopularizeUserIncrTimesRecordMapper
+ * 创建者: JavaZou
+ * 创建时间:2025/4/18 11:43
+ */
+public interface MiniPopularizeUserIncrTimesRecordMapper extends BaseMapper<MiniPopularizeUserIncrTimesRecord> {
+}

+ 20 - 0
netflix-dao/src/main/java/com/cyksj/model/entity/MiniPopularizeUserIncrTimesRecord.java

@@ -0,0 +1,20 @@
+package com.cyksj.model.entity;
+
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * 项目名: yhlxj2
+ * 文件名: MiniPopularizeUserIncrTimesRecord
+ * 创建者: JavaZou
+ * 创建时间:2025/4/18 11:42
+ */
+@Getter
+@Setter
+public class MiniPopularizeUserIncrTimesRecord extends BaseEntity{
+	private Long userId;
+
+	private String sign;
+
+	private Integer num;
+}

+ 20 - 0
netflix-dao/src/main/java/com/cyksj/model/request/MiniPopularizeIncrTimesReq.java

@@ -0,0 +1,20 @@
+package com.cyksj.model.request;
+
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * 项目名: yhlxj2
+ * 文件名: MiniPopularizeIncrTimesReq
+ * 创建者: JavaZou
+ * 创建时间:2025/4/18 11:38
+ */
+@Getter
+@Setter
+public class MiniPopularizeIncrTimesReq {
+	private Long timestamp;
+
+	private Long userId;
+
+	private String sign;
+}

+ 2 - 1
netflix-service/src/main/java/com/cyksj/service/mini/MiniPopularizeFrontService.java

@@ -2,6 +2,7 @@ package com.cyksj.service.mini;
 
 import com.cyksj.model.entity.MiniPopularizeUser;
 import com.cyksj.model.request.MiniAiPicturesReq;
+import com.cyksj.model.request.MiniPopularizeIncrTimesReq;
 import com.cyksj.model.response.MiniPopularizeResp;
 
 import java.io.IOException;
@@ -19,7 +20,7 @@ public interface MiniPopularizeFrontService {
 
 	String getImgResultById(long userId, Long imageId);
 
-	void incrGptTimes(long userId);
+	void incrGptTimes(MiniPopularizeIncrTimesReq req) throws Exception;
 
 	void closeTc(long userId);
 }

+ 33 - 4
netflix-service/src/main/java/com/cyksj/service/mini/impl/MiniPopularizeFrontServiceImpl.java

@@ -1,17 +1,21 @@
 package com.cyksj.service.mini.impl;
 
 import cn.hutool.core.util.RandomUtil;
+import cn.hutool.core.util.StrUtil;
 import cn.hutool.http.ContentType;
 import cn.hutool.http.Header;
 import cn.hutool.json.JSONArray;
 import cn.hutool.json.JSONObject;
 import cn.hutool.json.JSONUtil;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.cyksj.common.constant.Constant;
 import com.cyksj.common.exception.BusinessRuntimeException;
+import com.cyksj.common.util.SignatureUtils;
 import com.cyksj.common.util.StringUtil;
 import com.cyksj.mapper.mini.*;
 import com.cyksj.model.entity.*;
 import com.cyksj.model.request.MiniAiPicturesReq;
+import com.cyksj.model.request.MiniPopularizeIncrTimesReq;
 import com.cyksj.model.response.MiniPopularizeResp;
 import com.cyksj.redis.RedisService;
 import com.cyksj.server.listener.ConsoleStreamListener;
@@ -31,6 +35,7 @@ import org.springframework.transaction.annotation.Transactional;
 
 import java.io.IOException;
 import java.util.List;
+import java.util.Map;
 import java.util.Optional;
 import java.util.concurrent.TimeUnit;
 import java.util.concurrent.atomic.AtomicBoolean;
@@ -49,6 +54,8 @@ public class MiniPopularizeFrontServiceImpl implements MiniPopularizeFrontServic
 
 	public static final String GPT_DRAW_TOKEN = "sk-3x6qkSeXJJoYkaIkhlv7mm0DWGizFc7V7sapmtoMoYI0Nd5Z";
 
+	public static final String SIGN_SECRET = "6mR7XvKbPeShVmYq3t5w9z$C&FH@McQ";
+
 	private final MiniPopularizeUserConversationMapper conversationMapper;
 
 	private final MiniPopularizeUserMapper miniPopularizeUserMapper;
@@ -63,6 +70,8 @@ public class MiniPopularizeFrontServiceImpl implements MiniPopularizeFrontServic
 
 	private final MiniPopularizeConfigUseRecordMapper miniPopularizeConfigUseRecordMapper;
 
+	private final MiniPopularizeUserIncrTimesRecordMapper miniPopularizeUserIncrTimesRecordMapper;
+
 	/**
 	 * 连接超时
 	 */
@@ -146,14 +155,34 @@ public class MiniPopularizeFrontServiceImpl implements MiniPopularizeFrontServic
 	}
 
 	@Override
-	public void incrGptTimes(long userId) {
+	@Transactional(rollbackFor = Throwable.class)
+	public void incrGptTimes(MiniPopularizeIncrTimesReq req) throws Exception {
+		Long userId = req.getUserId();
 		MiniPopularizeUser user = miniPopularizeUserMapper.selectById(userId);
 		if (user == null) {
 			throw BusinessRuntimeException.getInstance("系统错误,用户不存在");
 		}
-		Integer oriNum = user.getNum();
-		Integer addNum = 3;
-		miniPopularizeCommonService.incrGptTimes(userId, oriNum, addNum);
+		String sign = req.getSign();
+		if (StrUtil.isEmpty(sign)) {
+			throw BusinessRuntimeException.getInstance("系统错误");
+		}
+		Long timestamp = req.getTimestamp();
+		String bsign = SignatureUtils.generateSignature(Map.of("timestamp", timestamp.toString()), SIGN_SECRET);
+		if (!StrUtil.equals(bsign, sign)) {
+			throw BusinessRuntimeException.getInstance("系统错误");
+		}
+		Integer addNum = Constant.Three;
+		MiniPopularizeUserIncrTimesRecord miniPopularizeUserIncrTimesRecord = new MiniPopularizeUserIncrTimesRecord();
+		miniPopularizeUserIncrTimesRecord.setUserId(userId);
+		miniPopularizeUserIncrTimesRecord.setSign(sign);
+		miniPopularizeUserIncrTimesRecord.setNum(addNum);
+		try {
+			miniPopularizeUserIncrTimesRecordMapper.insert(miniPopularizeUserIncrTimesRecord);
+			Integer oriNum = user.getNum();
+			miniPopularizeCommonService.incrGptTimes(userId, oriNum, addNum);
+		} catch (Exception e) {
+
+		}
 	}
 
 	@Override

+ 4 - 2
netflix-web/src/main/java/com/cyksj/web/controller/mini/PopularizeMiniController.java

@@ -5,6 +5,7 @@ import com.cyksj.enums.GatewayResponse;
 import com.cyksj.model.entity.MiniPopularizeUser;
 import com.cyksj.model.entity.MiniPopularizeUserConversationChat;
 import com.cyksj.model.request.MiniAiPicturesReq;
+import com.cyksj.model.request.MiniPopularizeIncrTimesReq;
 import com.cyksj.model.response.MiniPopularizeResp;
 import com.cyksj.model.views.MiniPopularizeConfigFrontView;
 import com.cyksj.model.views.MiniPopularizeUserConversationImgRecordsView;
@@ -106,9 +107,10 @@ public class PopularizeMiniController {
 	 * 看广告增加画图次数
 	 */
 	@PostMapping("/incr/times")
-	public Result<String> incrGptTimes() {
+	public Result<String> incrGptTimes(@RequestBody MiniPopularizeIncrTimesReq reqs) throws Exception {
 		long userId = StpUserUtil.getLoginIdAsLong();
-		miniPopularizeFrontService.incrGptTimes(userId);
+		reqs.setUserId(userId);
+		miniPopularizeFrontService.incrGptTimes(reqs);
 		return GatewayResponse.SUCCESS.newBuilder().toResult();
 	}