zoujiajian 1 год назад
Родитель
Сommit
771e42c455

+ 3 - 0
netflix-dao/src/main/java/com/cyksj/mapper/mini/MiniPopularizeUserMapper.java

@@ -17,4 +17,7 @@ public interface MiniPopularizeUserMapper extends BaseMapper<MiniPopularizeUser>
 
 	@Update("update mini_popularize_user set num = num - #{num} where user_id = #{userId} and num = #{userNum} and num > 0")
 	int decLumaNum(@Param("userId") Long userId, @Param("num") Integer num, @Param("userNum") Integer userNum);
+
+	@Update("update mini_popularize_user set num = num + #{addNum} where user_id = #{userId} and num = #{oriNum}")
+	int incrNumSync(@Param("userId") long userId, @Param("oriNum") Integer oriNum, @Param("addNum") Integer addNum);
 }

+ 2 - 0
netflix-dao/src/main/java/com/cyksj/model/entity/MiniPopularizeUser.java

@@ -15,4 +15,6 @@ public class MiniPopularizeUser extends BaseEntity{
 	private Long userId;
 
 	private Integer num;
+
+	private Boolean closeTc;
 }

+ 2 - 0
netflix-service/src/main/java/com/cyksj/service/mini/MiniPopularizeCommonService.java

@@ -15,4 +15,6 @@ public interface MiniPopularizeCommonService {
 	void saveImgRecord(MiniPopularizeUserConversationChat record);
 
 	void recordChatEndOfAnswer(String conversationId, String content, MiniPopularizeUserConversationChat.Role role);
+
+	void incrGptTimes(long userId, Integer oriNum, Integer addNum);
 }

+ 4 - 0
netflix-service/src/main/java/com/cyksj/service/mini/MiniPopularizeFrontService.java

@@ -17,4 +17,8 @@ public interface MiniPopularizeFrontService {
 	MiniPopularizeUser getUser(long userId);
 
 	String getImgResultById(long userId, Long imageId);
+
+	void incrGptTimes(long userId);
+
+	void closeTc(long userId);
 }

+ 14 - 0
netflix-service/src/main/java/com/cyksj/service/mini/impl/MiniPopularizeCommonServiceImpl.java

@@ -2,6 +2,7 @@ package com.cyksj.service.mini.impl;
 
 import com.cyksj.mapper.mini.MiniPopularizeUserConversationChatMapper;
 import com.cyksj.mapper.mini.MiniPopularizeUserMapper;
+import com.cyksj.model.entity.MiniPopularizeUser;
 import com.cyksj.model.entity.MiniPopularizeUserConversationChat;
 import com.cyksj.redis.RedisService;
 import com.cyksj.service.mini.MiniPopularizeCommonService;
@@ -50,4 +51,17 @@ public class MiniPopularizeCommonServiceImpl implements MiniPopularizeCommonServ
 				.role(role).build();
 		conversationChatMapper.insert(chat);
 	}
+
+	@Override
+	public void incrGptTimes(long userId, Integer oriNum, Integer addNum) {
+		int i = miniPopularizeUserMapper.incrNumSync(userId, oriNum, addNum);
+		while (i == 0) {
+			MiniPopularizeUser user = miniPopularizeUserMapper.selectById(userId);
+			if (user == null) {
+				break;
+			}
+			oriNum = user.getNum();
+			i = miniPopularizeUserMapper.incrNumSync(userId, oriNum, addNum);
+		}
+	}
 }

+ 26 - 1
netflix-service/src/main/java/com/cyksj/service/mini/impl/MiniPopularizeFrontServiceImpl.java

@@ -30,6 +30,7 @@ import org.springframework.transaction.annotation.Transactional;
 
 import java.io.IOException;
 import java.util.List;
+import java.util.Optional;
 import java.util.concurrent.TimeUnit;
 import java.util.concurrent.atomic.AtomicBoolean;
 
@@ -122,7 +123,7 @@ public class MiniPopularizeFrontServiceImpl implements MiniPopularizeFrontServic
 	@Override
 	public MiniPopularizeUser getUser(long userId) {
 		MiniPopularizeUser user = miniPopularizeUserMapper.selectOne(Wrappers.lambdaQuery(MiniPopularizeUser.class)
-				.eq(MiniPopularizeUser::getUserId, userId).last("limit 1").select(MiniPopularizeUser::getNum));
+				.eq(MiniPopularizeUser::getUserId, userId).last("limit 1").select(MiniPopularizeUser::getNum, MiniPopularizeUser::getCloseTc));
 		return user;
 	}
 
@@ -138,6 +139,30 @@ public class MiniPopularizeFrontServiceImpl implements MiniPopularizeFrontServic
 		return null;
 	}
 
+	@Override
+	public void incrGptTimes(long userId) {
+		MiniPopularizeUser user = miniPopularizeUserMapper.selectById(userId);
+		if (user == null) {
+			throw BusinessRuntimeException.getInstance("系统错误,用户不存在");
+		}
+		Integer oriNum = user.getNum();
+		Integer addNum = 3;
+		miniPopularizeCommonService.incrGptTimes(userId, oriNum, addNum);
+	}
+
+	@Override
+	public void closeTc(long userId) {
+		Optional.ofNullable(miniPopularizeUserMapper.selectOne(Wrappers.lambdaQuery(MiniPopularizeUser.class)
+						.eq(MiniPopularizeUser::getUserId, userId)
+						.last("limit 1")))
+				.ifPresent(user -> {
+					if (!user.getCloseTc()) {
+						user.setCloseTc(true);
+						miniPopularizeUserMapper.updateById(user);
+					}
+				});
+	}
+
 	private String checkUser(MiniPopularizeUserConversation conversation, String conversationId, AtomicBoolean recoverNum) {
 		if (conversationId != null) {
 			MiniPopularizeUserConversationChat miniPopularizeUserConversationChat = conversationChatMapper.selectOne(Wrappers.lambdaQuery(MiniPopularizeUserConversationChat.class)

+ 6 - 2
netflix-service/src/main/java/com/cyksj/service/mini/impl/MiniServiceImpl.java

@@ -91,11 +91,11 @@ public class MiniServiceImpl implements MiniService {
 		if (user.getId() == null) {
 			user.setNickname(String.format("银河小程序用户%s", RandomUtil.randomString(5)));
 			userMapper.insert(user);
-			//推广小程序用户 新注册发送GPT画图使用额度
-			sendGptMirrorImageNumIfPopularizeMini(user.getId(), appId);
 		} else {
 			userMapper.updateById(user);
 		}
+		//推广小程序用户 新注册发送GPT画图使用额度
+		sendGptMirrorImageNumIfPopularizeMini(user.getId(), appId);
 		return user;
 	}
 
@@ -224,6 +224,10 @@ public class MiniServiceImpl implements MiniService {
 
 	private void sendGptMirrorImageNumIfPopularizeMini(Long userId, String appId) {
 		if (StrUtil.equals(tgMiniConfig.getAppId(), appId)) {
+			Integer selectCount = miniPopularizeUserMapper.selectCount(Wrappers.lambdaQuery(MiniPopularizeUser.class).eq(MiniPopularizeUser::getUserId, userId));
+			if (selectCount > 0) {
+				return;
+			}
 			MiniPopularizeUser user = new MiniPopularizeUser();
 			user.setUserId(userId);
 			user.setNum(5);

+ 22 - 1
netflix-web/src/main/java/com/cyksj/web/controller/mini/PopularizeMiniController.java

@@ -82,7 +82,7 @@ public class PopularizeMiniController {
 	}
 
 	/**
-	 * 个人次数
+	 * 推广小程序用户信息
 	 */
 	@GetMapping("/get/user")
 	public Result<MiniPopularizeUser> getUser() {
@@ -100,4 +100,25 @@ public class PopularizeMiniController {
 		String img = miniPopularizeFrontService.getImgResultById(userId, imageId);
 		return GatewayResponse.SUCCESS.newBuilder().toResult(img);
 	}
+
+	/**
+	 * 看广告增加画图次数
+	 */
+	@PostMapping("/incr/times")
+	public Result<String> incrGptTimes() {
+		long userId = StpUserUtil.getLoginIdAsLong();
+		miniPopularizeFrontService.incrGptTimes(userId);
+		return GatewayResponse.SUCCESS.newBuilder().toResult();
+	}
+
+	/**
+	 * 关闭新用户弹窗
+	 * @return
+	 */
+	@PutMapping("/close/tc")
+	public Result<String> closeTc() {
+		long userId = StpUserUtil.getLoginIdAsLong();
+		miniPopularizeFrontService.closeTc(userId);
+		return GatewayResponse.SUCCESS.newBuilder().toResult();
+	}
 }