Prechádzať zdrojové kódy

fix 降级还原claude code套餐时间;兑换码续费升级

zoujiajian 1 rok pred
rodič
commit
55521d991f

+ 0 - 7
netflix-dao/src/main/java/com/cyksj/model/entity/ClaudeCodeUserRenewExpiryRecord.java

@@ -3,8 +3,6 @@ package com.cyksj.model.entity;
 import lombok.Getter;
 import lombok.Setter;
 
-import java.util.Date;
-
 /**
  * 项目名: yhlxj11111111
  * 文件名: ClaudeCodeUserRenewExpiryRecord
@@ -22,11 +20,6 @@ public class ClaudeCodeUserRenewExpiryRecord extends BaseEntity{
 
 	private Long orderId;
 
-	/**
-	 * 过期时间
-	 */
-	private Date expiryTime;
-
 	/**
 	 * 是否失效 默认false
 	 */

+ 24 - 32
netflix-service/src/main/java/com/cyksj/service/claude/impl/ClaudeCodeServiceImpl.java

@@ -94,19 +94,25 @@ public class ClaudeCodeServiceImpl implements ClaudeCodeService {
 		Boolean isUpgrade = false;
 		Date renewExpiryTime = null;
 		//若是续费升级 记录此时续费升级的过期时间
-		if (thisRelationCodePoints != null && thisRelationCodePoints <= codePoints && !ObjectUtil.equal(thisCodeOriSkuId, skuId)) {
-			if (sku.getDays() != null) {
-				renewExpiryTime = DateUtil.offsetDay(DateTime.now(), sku.getDays());
-			} else {
-				renewExpiryTime = DateUtil.offsetMonth(DateTime.now(), sku.getMonths());
+		if (!ObjectUtil.equal(thisCodeOriSkuId, skuId)) {
+			//非车票原规格id 续费升级记录
+			saveClaudeCodeRenewExpiryRecord(orderId, relationUserId, relationId, skuId);
+			//是否需要修改当前claude code user 套餐等级
+			if (thisRelationCodePoints != null && thisRelationCodePoints <= codePoints) {
+				if (sku.getDays() != null) {
+					renewExpiryTime = DateUtil.offsetDay(DateTime.now(), sku.getDays());
+				} else {
+					renewExpiryTime = DateUtil.offsetMonth(DateTime.now(), sku.getMonths());
+				}
+				isUpgrade = true;
 			}
-			isUpgrade = true;
-			saveClaudeCodeRenewExpiryRecord(orderId, relationUserId, relationId, renewExpiryTime, skuId);
 		}
 		generateOrUpdateClaudeCodeUser(relationUserId, relationId, codePoints, codeCreditRecovery, expiryTime, isUpgrade, orderId, skuId, renewExpiryTime, sku.getSpecVal());
 		try {
+			//获取最新的claude code user
+			claudeCodeUser = claudeCodeUserMapper.selectOne(Wrappers.lambdaQuery(ClaudeCodeUser.class).eq(ClaudeCodeUser::getRelationId, relationId).last("limit 1"));
 			//生成claude code或更新用户套餐
-			ClaudeCodeResp codeUserPackage = createOrUpdateClaudeCodeUserPackage(relation.getUserId(), sku.getSpecVal(), codePoints, codeCreditRecovery, expiryTime);
+			ClaudeCodeResp codeUserPackage = createOrUpdateClaudeCodeUserPackage(relation.getUserId(), claudeCodeUser.getPlanName(), claudeCodeUser.getCodePoints(), claudeCodeUser.getCodeCreditRecovery(), claudeCodeUser.getExpiryTime());
 			if (!Constant.SUCCESS.equals(codeUserPackage.getMessage())) {
 				//重试更新code userInfo数据
 				setClaudeCodeUserRetryUpdateInfo(relationId);
@@ -132,13 +138,18 @@ public class ClaudeCodeServiceImpl implements ClaudeCodeService {
 			claudeCodeUser.setRenewOrderId(orderId);
 			claudeCodeUser.setRenewSkuId(renewSkuId);
 			claudeCodeUser.setRenewExpiryTime(renewExpiryTime);
+			claudeCodeUser.setPlanName(planName);
+			claudeCodeUser.setCodePoints(codePoints);
+			claudeCodeUser.setCodeCreditRecovery(codeCreditRecovery);
 		}
 		claudeCodeUser.setUserId(relationUserId);
-		claudeCodeUser.setPlanName(planName);
 		claudeCodeUser.setRelationId(relationId);
 		claudeCodeUser.setExpiryTime(expiryTime);
-		claudeCodeUser.setCodePoints(codePoints);
-		claudeCodeUser.setCodeCreditRecovery(codeCreditRecovery);
+		if (claudeCodeUser.getId() == null) {
+			claudeCodeUser.setPlanName(planName);
+			claudeCodeUser.setCodePoints(codePoints);
+			claudeCodeUser.setCodeCreditRecovery(codeCreditRecovery);
+		}
 		if (claudeCodeUser.getId() == null) {
 			try {
 				claudeCodeUserMapper.insert(claudeCodeUser);
@@ -390,25 +401,7 @@ public class ClaudeCodeServiceImpl implements ClaudeCodeService {
 
 	@Override
 	public void handleClaudeCodeUserPackageSku(GroupsRelation relation, GoodsDonSku sku, Long orderId) {
-		Long groupsId = relation.getGroupsId();
-		GroupsTrips groupsTrips = groupsMapper.selectById(groupsId);
-		GoodsDonSku oriRelationSku = skuMapper.selectById(groupsTrips.getSkuId());
-		Integer oriRelationSkuCodePoints = oriRelationSku.getCodePoints();
-		Integer presentCodePoints = sku.getCodePoints();
-		Long oriRelationSkuId = oriRelationSku.getId();
-		Long toUseSkuId = sku.getId();
-		//若是续费升级 记录此时续费升级的过期时间
-		Boolean isUpgrade = false;
-		Date renewExpiryTime = null;
-		if (oriRelationSkuCodePoints <= presentCodePoints && !ObjectUtil.equal(oriRelationSkuId, toUseSkuId)) {
-			if (sku.getDays() != null) {
-				renewExpiryTime = DateUtil.offsetDay(DateTime.now(), sku.getDays());
-			} else {
-				renewExpiryTime = DateUtil.offsetMonth(DateTime.now(), sku.getMonths());
-			}
-			isUpgrade = true;
-			saveClaudeCodeRenewExpiryRecord(orderId, relation.getUserId(), relation.getId(), renewExpiryTime, sku.getId());
-		}
+		generateOrUpdateClaudeCodeUserInfo(orderId, relation.getId(), relation.getUserId(), sku, 2);
 	}
 
 	/**
@@ -510,13 +503,12 @@ public class ClaudeCodeServiceImpl implements ClaudeCodeService {
 	/**
 	 * 记录claude code 续费升级的过期时间
 	 */
-	private void saveClaudeCodeRenewExpiryRecord(Long orderId, Long relationUserId, Long relationId, Date expiryTime, Long skuId) {
+	private void saveClaudeCodeRenewExpiryRecord(Long orderId, Long relationUserId, Long relationId, Long skuId) {
 		ClaudeCodeUserRenewExpiryRecord renewExpiryRecord = new ClaudeCodeUserRenewExpiryRecord();
 		renewExpiryRecord.setOrderId(orderId);
 		renewExpiryRecord.setUserId(relationUserId);
 		renewExpiryRecord.setRelationId(relationId);
 		renewExpiryRecord.setRenewSkuId(skuId);
-		renewExpiryRecord.setExpiryTime(expiryTime);
 		claudeCodeUserRenewExpiryRecordMapper.insert(renewExpiryRecord);
 	}
 

+ 2 - 0
netflix-service/src/main/java/com/cyksj/service/exchange/impl/ExchangeCodeServiceImpl.java

@@ -393,6 +393,8 @@ public class ExchangeCodeServiceImpl extends ServiceImpl<ExchangeCodeMapper, Exc
 
 			if (relation.getIsClaudeCodeUpgrade() != null && relation.getIsClaudeCodeUpgrade()) {
 				//claude code 是否升级
+				orderDon.setOrderType(2);
+				orderDonMapper.updateById(orderDon);
 				claudeCodeService.handleClaudeCodeUserPackageSku(relation, sku, orderDon.getId());
 			}
 		}

+ 1 - 1
netflix-service/src/main/java/com/cyksj/service/mange/impl/CmsOrderDonServiceImpl.java

@@ -1088,7 +1088,7 @@ public class CmsOrderDonServiceImpl extends ServiceImpl<OrderDonMapper,OrderDon>
             giftCardUserRecordMapper.updateById(giftCardUserRecord);
         }
         //校验续费升级规格
-        checkMirrorRenewSku(orderDon);
+//        checkMirrorRenewSku(orderDon);
     }
 
     /**

+ 41 - 12
netflix-service/src/main/java/com/cyksj/service/mange/impl/MirrorUserCleatServiceImpl.java

@@ -1,5 +1,6 @@
 package com.cyksj.service.mange.impl;
 
+import cn.hutool.core.date.DateTime;
 import cn.hutool.core.date.DateUtil;
 import cn.hutool.core.util.ObjectUtil;
 import cn.hutool.core.util.StrUtil;
@@ -63,6 +64,8 @@ public class MirrorUserCleatServiceImpl implements MirrorUserCleatService {
 
 	private final ClaudeCodeService claudeCodeService;
 
+	private final OrderDonMapper orderDonMapper;
+
 	/**
 	 * 删除镜像User
 	 */
@@ -136,6 +139,12 @@ public class MirrorUserCleatServiceImpl implements MirrorUserCleatService {
 		List<Long> userIdList = userBindRelationService.getRelationUserIdList(orderDon.getUserId(), null);
 		//claude code user
 		if (goodsId == Constant.CLAUDE_CODE_GOODS_ID) {
+			ClaudeCodeUserRenewExpiryRecord renewExpiryRecord = claudeCodeUserRenewExpiryRecordMapper.selectOne(Wrappers.lambdaQuery(ClaudeCodeUserRenewExpiryRecord.class).eq(ClaudeCodeUserRenewExpiryRecord::getOrderId, orderId).eq(ClaudeCodeUserRenewExpiryRecord::getIsValid, Boolean.FALSE).last("limit 1"));
+			if (renewExpiryRecord != null) {
+				//将续费有效置为过期
+				renewExpiryRecord.setIsValid(true);
+				claudeCodeUserRenewExpiryRecordMapper.updateById(renewExpiryRecord);
+			}
 			ClaudeCodeUser claudeCodeUser = claudeCodeUserMapper.selectOne(Wrappers.lambdaQuery(ClaudeCodeUser.class)
 					.eq(ClaudeCodeUser::getRelationId, orderDon.getRelationId())
 					.last("limit 1"));
@@ -149,29 +158,41 @@ public class MirrorUserCleatServiceImpl implements MirrorUserCleatService {
 			GroupsRelation relation = groupsRelationMapper.selectById(orderDon.getRelationId());
 			GroupsTrips groupsTrips = groupsMapper.selectById(relation.getGroupsId());
 			GoodsDonSku finalSku = skuMapper.selectById(groupsTrips.getSkuId());
-			ClaudeCodeUserRenewExpiryRecord renewExpiryRecord = claudeCodeUserRenewExpiryRecordMapper.selectOne(Wrappers.lambdaQuery(ClaudeCodeUserRenewExpiryRecord.class).eq(ClaudeCodeUserRenewExpiryRecord::getOrderId, orderId).eq(ClaudeCodeUserRenewExpiryRecord::getIsValid, Boolean.FALSE).last("limit 1"));
 			Date renewExpiryTime = null;
 			Integer oriCodePoints = claudeCodeUser.getCodePoints();
 			claudeCodeUser.setOriCodePoints(oriCodePoints);
+			//当前续费订单id
+			Long presentUserCodePackageOrderId = claudeCodeUser.getRenewOrderId();
 			claudeCodeUser.setRenewSkuId(null);
 			claudeCodeUser.setRenewOrderId(null);
 			if (renewExpiryRecord != null) {
+				//当前续费
+				OrderDon presentRenewOrderDon = orderDonMapper.selectById(presentUserCodePackageOrderId);
 				//是否存在其他续费升级
 				ClaudeCodeUserRenewExpiryRecord otherRenewRecord = claudeCodeUserRenewExpiryRecordMapper.getOtherRenewSku(orderDon.getId(), relation.getId(), userIdList);
 				GoodsDonSku otherRenewSku = null;
 				if (otherRenewRecord != null) {
 					otherRenewSku = skuMapper.selectById(otherRenewRecord.getRenewSkuId());
-					renewExpiryTime = otherRenewRecord.getExpiryTime();
 				}
 				//续费升级
 				if (otherRenewSku != null) {
 					finalSku = otherRenewSku;
+					if (otherRenewSku.getDays() != null && otherRenewSku.getDays() > 0) {
+						renewExpiryTime = DateUtil.offsetDay(DateTime.now(), otherRenewSku.getDays());
+					} else {
+						renewExpiryTime = DateUtil.offsetMonth(DateTime.now(), otherRenewSku.getMonths());
+					}
+					//相差多少天
+					Long betDay = DateUtil.betweenDay(otherRenewRecord.getCreatedTime(), presentRenewOrderDon.getCreatedTime(), false);
+					renewExpiryTime = DateUtil.offsetDay(renewExpiryTime, -betDay.intValue());
+
 					claudeCodeUser.setRenewOrderId(otherRenewRecord.getOrderId());
 					claudeCodeUser.setRenewSkuId(otherRenewRecord.getRenewSkuId());
 				}
-				//将续费有效置为过期
-				renewExpiryRecord.setIsValid(true);
-				claudeCodeUserRenewExpiryRecordMapper.updateById(renewExpiryRecord);
+			}
+			//非当前套餐续费订单id 不修改claudeCode
+			if (!ObjectUtil.equal(presentUserCodePackageOrderId, orderId)) {
+				return;
 			}
 			//还原镜像user
 			claudeCodeUser.setCodePoints(finalSku.getCodePoints());
@@ -192,6 +213,9 @@ public class MirrorUserCleatServiceImpl implements MirrorUserCleatService {
 		if (orderDonRenewRecord == null) {
 			return;
 		}
+		//将续费有效置为过期
+		orderDonRenewRecord.setIsValid(true);
+		orderDonRenewRecordMapper.updateById(orderDonRenewRecord);
 		//Claude pro
 		if (orderDon.getGoodsId() == 75) {
 			ClaudeUser claudeUser = claudeUserMapper.selectOne(Wrappers.lambdaQuery(ClaudeUser.class)
@@ -214,6 +238,8 @@ public class MirrorUserCleatServiceImpl implements MirrorUserCleatService {
 				otherRenewSku = skuMapper.selectById(otherRenewOrderDon.getSkuId());
 			}
 			Date renewExpiryTime = null;
+			//当前续费订单id
+			Long presentUserCodePackageOrderId = claudeUser.getRenewOrderId();
 			claudeUser.setRenewSkuId(null);
 			claudeUser.setRenewOrderId(null);
 			//续费升级
@@ -231,15 +257,16 @@ public class MirrorUserCleatServiceImpl implements MirrorUserCleatService {
 				claudeUser.setRenewOrderId(otherRenewOrderDon.getId());
 				claudeUser.setRenewSkuId(otherRenewOrderDon.getSkuId());
 			}
+			//非当前套餐续费订单id 不修改user
+			if (!ObjectUtil.equal(presentUserCodePackageOrderId, orderId)) {
+				return;
+			}
 			//还原镜像user
 			claudeUser.setLimitTime(finalSku.getGptLimitTime());
 			claudeUser.setLimitNum(finalSku.getGptLimitNum());
 			claudeUser.setRenewExpiryTime(renewExpiryTime);
 			claudeUserMapper.updateById(claudeUser);
 			log.info("还原镜像claude user套餐成功");
-			//将续费有效置为过期
-			orderDonRenewRecord.setIsValid(true);
-			orderDonRenewRecordMapper.updateById(orderDonRenewRecord);
 			return;
 		}
 
@@ -277,6 +304,8 @@ public class MirrorUserCleatServiceImpl implements MirrorUserCleatService {
 				log.info("GPT续费升级订单退款,relation_id:{}存在套餐升级", orderDon.getUserId());
 				finalSku = upgradeOrderDonSku;
 			}
+			//当前续费订单id
+			Long presentUserCodePackageOrderId = chatgptUser.getRenewOrderId();
 			chatgptUser.setRenewSkuId(null);
 			chatgptUser.setRenewOrderId(null);
 			//续费升级
@@ -301,6 +330,10 @@ public class MirrorUserCleatServiceImpl implements MirrorUserCleatService {
 				chatgptUser.setRenewOrderId(otherRenewOrderDon.getId());
 				chatgptUser.setRenewSkuId(otherRenewOrderDon.getSkuId());
 			}
+			//非当前套餐续费订单id 不修改user
+			if (!ObjectUtil.equal(presentUserCodePackageOrderId, orderId)) {
+				return;
+			}
 			//还原镜像user
 			chatgptUser.setLimitTime(finalSku.getGptLimitTime());
 			chatgptUser.setLimitNum(finalSku.getGptLimitNum());
@@ -312,10 +345,6 @@ public class MirrorUserCleatServiceImpl implements MirrorUserCleatService {
 			chatgptUserMapper.updateById(chatgptUser);
 			log.info("还原镜像gptuser套餐成功");
 
-			//将续费有效置为过期
-			orderDonRenewRecord.setIsValid(true);
-			orderDonRenewRecordMapper.updateById(orderDonRenewRecord);
-
 			if (orderDon.getOrderType() == 2) {
 				//退款续费 套餐升级订单
 				handleGptMirrorRenewOrderRefund(orderDon, sku);