Преглед на файлове

claude code userInfo重试

zoujiajian преди 1 година
родител
ревизия
97581418bd

+ 5 - 0
netflix-dao/src/main/java/com/cyksj/model/entity/ClaudeCodeUser.java

@@ -48,4 +48,9 @@ public class ClaudeCodeUser extends BaseEntity{
 	 */
 	@TableField(updateStrategy = FieldStrategy.IGNORED)
 	private Date renewExpiryTime;
+
+	/**
+	 * 需要重试 默认false
+	 */
+	private Boolean isRetry;
 }

+ 0 - 19
netflix-dao/src/main/java/com/cyksj/model/entity/GroupsRelation.java

@@ -1,6 +1,5 @@
 package com.cyksj.model.entity;
 
-import com.baomidou.mybatisplus.annotation.FieldStrategy;
 import com.baomidou.mybatisplus.annotation.TableField;
 import com.ejlchina.searcher.bean.DbIgnore;
 import lombok.AllArgsConstructor;
@@ -160,24 +159,6 @@ public class GroupsRelation extends BaseEntity {
      */
     private Boolean isVip;
 
-    /**
-     * claude code积分上限
-     */
-    @TableField(updateStrategy = FieldStrategy.IGNORED)
-    private Integer codePoints;
-
-    /**
-     * claude code每小时恢复积分
-     */
-    @TableField(updateStrategy = FieldStrategy.IGNORED)
-    private Integer codeCreditRecovery;
-
-    /**
-     * claude code套餐skuId
-     */
-    @TableField(updateStrategy = FieldStrategy.IGNORED)
-    private Long codeSkuId;
-
 	@AllArgsConstructor
     @Getter
     public enum Status{

+ 51 - 23
netflix-service/src/main/java/com/cyksj/service/claude/impl/ClaudeCodeServiceImpl.java

@@ -12,14 +12,8 @@ import com.cyksj.common.constant.Constant;
 import com.cyksj.common.exception.BusinessRuntimeException;
 import com.cyksj.common.util.Jsons;
 import com.cyksj.common.util.StringUtil;
-import com.cyksj.mapper.ClaudeCodeUserMapper;
-import com.cyksj.mapper.ClaudeCodeUserRenewExpiryRecordMapper;
-import com.cyksj.mapper.GoodsDonSkuMapper;
-import com.cyksj.mapper.GroupsRelationMapper;
-import com.cyksj.model.entity.ClaudeCodeUser;
-import com.cyksj.model.entity.ClaudeCodeUserRenewExpiryRecord;
-import com.cyksj.model.entity.GoodsDonSku;
-import com.cyksj.model.entity.GroupsRelation;
+import com.cyksj.mapper.*;
+import com.cyksj.model.entity.*;
 import com.cyksj.model.manage.views.GroupsRelationView;
 import com.cyksj.model.request.ClaudeCodeApiKeysReq;
 import com.cyksj.model.request.ClaudeCodeApiKeysStatusReq;
@@ -66,6 +60,8 @@ public class ClaudeCodeServiceImpl implements ClaudeCodeService {
 
 	private final GoodsDonSkuMapper skuMapper;
 
+	private final GroupsMapper groupsMapper;
+
 	private final static String CLAUDE_CODE_API_PREFIX = "https://relay01.yhlxj.com/";
 
 	public static final String CLAUDE_CODE_API_ADMIN_KEY = "claudecodeyhlxjclaude";
@@ -74,41 +70,50 @@ public class ClaudeCodeServiceImpl implements ClaudeCodeService {
 	public void generateOrUpdateClaudeCodeUserInfo(Long orderId, Long relationId, Long userId, GoodsDonSku sku, Integer orderType) {
 		List<Long> userIdList = userBindRelationService.getRelationUserIdList(userId, null);
 		GroupsRelation relation = relationMapper.selectOne(Wrappers.lambdaQuery(GroupsRelation.class).eq(GroupsRelation::getId, relationId).in(GroupsRelation::getUserId, userIdList));
+		GroupsTrips groupsTrips = groupsMapper.selectById(relation.getGroupsId());
+		GoodsDonSku relationSku = skuMapper.selectById(groupsTrips.getSkuId());
+		Long thisCodeOriSkuId = relationSku.getId();
 		Long relationUserId = relation.getUserId();
-		Integer relationCodePoints = relation.getCodePoints();
-		Long relationCodeSkuId = relation.getCodeSkuId();
+		//此时车票的套餐规格积分
+		Integer thisRelationCodePoints = null;
+		ClaudeCodeUser claudeCodeUser = claudeCodeUserMapper.selectOne(Wrappers.lambdaQuery(ClaudeCodeUser.class).eq(ClaudeCodeUser::getRelationId, relationId).last("limit 1"));
+		if (claudeCodeUser != null) {
+			thisRelationCodePoints = claudeCodeUser.getCodePoints();
+		}
 		Date expiryTime = relation.getExpiryTime();
 		Integer codePoints = sku.getCodePoints();
 		Integer codeCreditRecovery = sku.getCodeCreditRecovery();
 		Long skuId = sku.getId();
-		//生成claude code用户套餐
 		try {
 			Boolean isUpgrade = false;
 			Date renewExpiryTime = null;
 			//若是续费升级 记录此时续费升级的过期时间
-			if (relationCodePoints != null && relationCodePoints <= codePoints && !ObjectUtil.equal(relationCodeSkuId, skuId)) {
+			if (thisRelationCodePoints != null && thisRelationCodePoints <= codePoints && !ObjectUtil.equal(thisCodeOriSkuId, skuId)) {
 				saveClaudeCodeRenewExpiryRecord(orderId, relationUserId, relationId, expiryTime, skuId);
 				if (sku.getDays() != null) {
 					renewExpiryTime = DateUtil.offsetDay(DateTime.now(), sku.getDays());
-				}else {
+				} else {
 					renewExpiryTime = DateUtil.offsetMonth(DateTime.now(), sku.getMonths());
 				}
 				isUpgrade = true;
 			}
+			relationMapper.updateById(relation);
+			//清缓存
+			if (orderType == 2) {
+				invalidateUserCache(relationUserId);
+			}
+			generateOrUpdateClaudeCodeUser(relationUserId, relationId, codePoints, codeCreditRecovery, expiryTime, isUpgrade, skuId, renewExpiryTime);
+			//生成claude code或更新用户套餐
 			ClaudeCodeResp codeUserPackage = createOrUpdateClaudeCodeUserPackage(relation.getUserId(), sku.getSpecVal(), codePoints, codeCreditRecovery, expiryTime);
-			if (codeUserPackage.getSuccess()) {
-				//设置车位的套餐
-				relation.setCodePoints(codePoints);
-				relation.setCodeCreditRecovery(codeCreditRecovery);
-				relation.setCodeSkuId(skuId);
-				relationMapper.updateById(relation);
-				if (orderType == 2) {
-					invalidateUserCache(relationUserId);
-				}
-				generateOrUpdateClaudeCodeUser(relationUserId, relationId, codePoints, codeCreditRecovery, expiryTime, isUpgrade, skuId, renewExpiryTime);
+			if (!codeUserPackage.getSuccess()) {
+				log.info("更新 claude code 用户:{}套餐数据失败", userId);
+				//重试更新code userInfo数据
+				setClaudeCodeUserRetryUpdateInfo(relationId);
 			}
 		} catch (Exception e) {
 			log.error("生成或更新claude code用户:{}套餐skuId:{} 失败,error_info:{}", userId, skuId, StringUtil.getErrorText(e));
+			//重试更新code userInfo数据
+			setClaudeCodeUserRetryUpdateInfo(relationId);
 		}
 	}
 
@@ -349,6 +354,18 @@ public class ClaudeCodeServiceImpl implements ClaudeCodeService {
 				specVal = renewSku.getSpecVal();
 			}
 		}
+		//是否需要重试更新 cladueCode userInfo信息
+		if (claudeCodeUser.getIsRetry()) {
+			try {
+				ClaudeCodeResp codeUserPackage = createOrUpdateClaudeCodeUserPackage(claudeCodeUser.getUserId(), specVal, claudeCodeUser.getCodePoints(), claudeCodeUser.getCodeCreditRecovery(), claudeCodeUser.getExpiryTime());
+				if (codeUserPackage.getSuccess()) {
+					claudeCodeUser.setIsRetry(Boolean.FALSE);
+					claudeCodeUserMapper.updateById(claudeCodeUser);
+				}
+			} catch (Exception e) {
+
+			}
+		}
 		return ClaudeCodeUserInfoView.builder()
 				.planName(specVal)
 				.relationId(claudeCodeUser.getRelationId())
@@ -454,4 +471,15 @@ public class ClaudeCodeServiceImpl implements ClaudeCodeService {
 		claudeCodeUserRenewExpiryRecordMapper.insert(renewExpiryRecord);
 	}
 
+	/**
+	 * claude code用户信息重试更新信息
+	 */
+	public void setClaudeCodeUserRetryUpdateInfo(Long relationId) {
+		ClaudeCodeUser claudeCodeUser = claudeCodeUserMapper.selectOne(Wrappers.lambdaQuery(ClaudeCodeUser.class).eq(ClaudeCodeUser::getRelationId, relationId).last("limit 1"));
+		if (claudeCodeUser != null) {
+			claudeCodeUser.setIsRetry(Boolean.TRUE);
+			claudeCodeUserMapper.updateById(claudeCodeUser);
+		}
+	}
+
 }

+ 9 - 5
netflix-service/src/main/java/com/cyksj/service/order/impl/OrderDonServiceImpl.java

@@ -383,6 +383,8 @@ public class OrderDonServiceImpl extends ServiceImpl<OrderDonMapper, OrderDon> i
 
 	private final ClaudeCodeService claudeCodeService;
 
+	private final ClaudeCodeUserMapper claudeCodeUserMapper;
+
 	private final List<String> noChekGoodsTemp = List.of("Apple One", "Youtube", "Spotify");
 
 	@Transactional(rollbackFor = Throwable.class)
@@ -1241,11 +1243,13 @@ public class OrderDonServiceImpl extends ServiceImpl<OrderDonMapper, OrderDon> i
 
 		//claude code续费 校验续费套餐等级
 		if (goodsDon.getId() == Constant.CLAUDE_CODE_GOODS_ID) {
-			Integer codePoints = relation.getCodePoints();
-			GoodsDonSku renewSku = goodsDonSkuMapper.selectById(renewSkuId);
-			//claude code积分上限
-			if (renewSku.getCodePoints() < codePoints) {
-				throw BusinessRuntimeException.getInstance("选择的续费套餐错误");
+			ClaudeCodeUser claudeCodeUser = claudeCodeUserMapper.selectOne(Wrappers.lambdaQuery(ClaudeCodeUser.class).eq(ClaudeCodeUser::getRelationId, relationId).last("limit 1"));
+			Long thisCodeRenewSkuId = claudeCodeUser.getRenewSkuId();
+			if (thisCodeRenewSkuId != null) {
+				//claude code积分上限
+				if (ObjectUtil.equal(thisCodeRenewSkuId, renewSkuId)) {
+					throw BusinessRuntimeException.getInstance("选择的续费套餐错误");
+				}
 			}
 		}