zoujiajian преди 11 месеца
родител
ревизия
73e7fe575d

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

@@ -18,6 +18,11 @@ public class ClaudeCodeUserResetRecord extends BaseEntity {
      * 用户ID
      */
     private Long userId;
+
+    /**
+     * 订单id
+     */
+    private Long orderId;
     
     /**
      * 重置前积分值

+ 3 - 2
netflix-service/src/main/java/com/cyksj/service/claude/ClaudeCodeService.java

@@ -144,7 +144,8 @@ public interface ClaudeCodeService {
 	void sendCreditCard(Long orderId, Long userId, Integer points, String cardNumber, String remark);
 
 	/**
-	 * 增加用户重置次数
+	 * 增加或修改用户重置次数
+	 * num为正增加 负扣除
 	 */
-	void addUserRestNum(Long orderId, Long userId, Integer num, String remark);
+	void adjUserRestNum(Long orderId, Long userId, Integer num, String remark);
 }

+ 8 - 1
netflix-service/src/main/java/com/cyksj/service/claude/impl/ClaudeCodeServiceImpl.java

@@ -949,7 +949,7 @@ public class ClaudeCodeServiceImpl implements ClaudeCodeService {
 	}
 
 	@Override
-	public void addUserRestNum(Long orderId, Long userId, Integer num, String remark) {
+	public void adjUserRestNum(Long orderId, Long userId, Integer num, String remark) {
 		List<Long> userIdList = userBindRelationService.getRelationUserIdList(userId, null);
 
 		// 获取用户Claude Code信息
@@ -964,6 +964,9 @@ public class ClaudeCodeServiceImpl implements ClaudeCodeService {
 		}
 		Integer resetCount = claudeCodeUser.getResetCount();
 		claudeCodeUser.setResetCount(resetCount + num);
+		if (claudeCodeUser.getResetCount() < 0) {
+			return;
+		}
 		int update = 0;
 		while (update == 0) {
 			update = claudeCodeUserMapper.update(claudeCodeUser, Wrappers.lambdaUpdate(ClaudeCodeUser.class).eq(ClaudeCodeUser::getUserId, claudeCodeUser.getUserId()).eq(ClaudeCodeUser::getResetCount, resetCount));
@@ -978,9 +981,13 @@ public class ClaudeCodeServiceImpl implements ClaudeCodeService {
 				}
 				resetCount = claudeCodeUser.getResetCount();
 				claudeCodeUser.setResetCount(resetCount + num);
+				if (claudeCodeUser.getResetCount() < 0) {
+					break;
+				}
 			}
 			//记录获取重置次数记录
 			ClaudeCodeUserResetRecord resetRecord = new ClaudeCodeUserResetRecord();
+			resetRecord.setOrderId(orderId);
 			resetRecord.setUserId(userId);
 			resetRecord.setResetReason(remark);
 			claudeCodeUserResetRecordMapper.insert(resetRecord);

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

@@ -28,6 +28,7 @@ import com.cyksj.mapper.*;
 import com.cyksj.mapper.channel.ShopConfigMapper;
 import com.cyksj.mapper.channel.UserPayEquipmentAvailableBenefitsMapper;
 import com.cyksj.mapper.channel.UserPayEquipmentReceiveBenefitsRecordMapper;
+import com.cyksj.mapper.claudecode.ClaudeCodeUserResetRecordMapper;
 import com.cyksj.mapper.manage.cms.CmsUserMapper;
 import com.cyksj.mapper.manage.distribute.DistributeWaitingSendPointsMapper;
 import com.cyksj.mapper.manage.distribute.UserDistributeBusinessOrderDonRecordMapper;
@@ -38,7 +39,6 @@ import com.cyksj.mapper.manage.distribute.sub.UserDistributeSubRewardsMapper;
 import com.cyksj.mapper.manage.distribute.sub.UserDistributeSubWaitingMapper;
 import com.cyksj.mapper.manage.sys.WorkOrderMapper;
 import com.cyksj.mapper.mirrorshop.UserMirrorShopDistributeWaitingSendPointsMapper;
-import com.cyksj.mapper.mirrorshop.UserMirrorShopMapper;
 import com.cyksj.mapper.shop.YhShopUserDistributeBusinessOrderDonRecordMapper;
 import com.cyksj.mapper.stock.GoodsSkuStockRelateMapper;
 import com.cyksj.model.entity.*;
@@ -51,6 +51,7 @@ import com.cyksj.model.request.OrderBalanceRefundReq;
 import com.cyksj.model.request.OrderRefundReq;
 import com.cyksj.redis.RedisService;
 import com.cyksj.service.chatgpt.GptUserRechargeRecordService;
+import com.cyksj.service.claude.ClaudeCodeService;
 import com.cyksj.service.coin.UserGalaxyCoinService;
 import com.cyksj.service.coupon.CouponFontService;
 import com.cyksj.service.distribute.equipment.EquipmentDistributeService;
@@ -204,16 +205,10 @@ public class CmsOrderDonServiceImpl extends ServiceImpl<OrderDonMapper,OrderDon>
 
     private final OrderDonRenewRecordMapper orderDonRenewRecordMapper;
 
-    private final OrderDonUpgradeRenewRecordMapper orderDonUpgradeRenewRecordMapper;
-
     private final LumaUserMapper lumaUserMapper;
 
-    private final UserBenefitsOrderRecordMapper userBenefitsOrderRecordMapper;
-
     private final UserBenefitsComboRelationRecordMapper userBenefitsComboRelationRecordMapper;
 
-    private final UserMirrorShopMapper userMirrorShopMapper;
-
     private final UserMirrorShopDistributeWaitingSendPointsMapper userMirrorShopDistributeWaitingSendPointsMapper;
 
     private final ClaudeUserMapper claudeUserMapper;
@@ -224,12 +219,14 @@ public class CmsOrderDonServiceImpl extends ServiceImpl<OrderDonMapper,OrderDon>
 
     private final NetflixUserChangeOtherTicketRecordMapper netflixUserChangeOtherTicketRecordMapper;
 
-    private final OrderDonGalaxyCoinRecordMapper orderDonGalaxyCoinRecordMapper;
-
     private final UserGalaxyCoinService userGalaxyCoinService;
 
     private final GptUserRechargeRecordService gptUserRechargeRecordService;
 
+    private final ClaudeCodeUserResetRecordMapper claudeCodeUserResetRecordMapper;
+
+    private final ClaudeCodeService claudeCodeService;
+
     private static final GlobalThreadPoolTaskExecutor TASK_POOL = GlobalThreadPoolTaskExecutor.getInstance();
 
     @Override
@@ -1312,6 +1309,21 @@ public class CmsOrderDonServiceImpl extends ServiceImpl<OrderDonMapper,OrderDon>
         if (orderDon.getGoodsId() == Constant.GPT_PLUS_GID && sku.getNum() == 1) {
             subRechargeNumOrder(orderDon.getUserId(), orderDon.getRelationId(), sku.getMonths(), operator);
         }
+
+        //claude code 退款
+        if (orderDon.getGoodsId() == Constant.CLAUDE_CODE_GOODS_ID) {
+            DistributeWaitingSendPoints distributeWaitingSendPoints = distributeWaitingSendPointsMapper.selectOne(Wrappers.lambdaQuery(DistributeWaitingSendPoints.class).eq(DistributeWaitingSendPoints::getOrderId, orderDon.getId()).last("limit 1"));
+            if (distributeWaitingSendPoints != null) {
+                if (distributeWaitingSendPoints.getSendStatus() == DistributeWaitingSendPoints.Status.close) {
+                    //是否是普通cc推广
+                    Long orderId = distributeWaitingSendPoints.getOrderId();
+                    ClaudeCodeUserResetRecord claudeCodeUserResetRecord = claudeCodeUserResetRecordMapper.selectOne(Wrappers.lambdaQuery(ClaudeCodeUserResetRecord.class).eq(ClaudeCodeUserResetRecord::getOrderId, orderId).last("limit 1"));
+                    if (claudeCodeUserResetRecord != null) {
+                        claudeCodeService.adjUserRestNum(orderDon.getId(), distributeWaitingSendPoints.getSharedId(), -1, "新用户订单退款");
+                    }
+                }
+            }
+        }
     }
 
     //处理下级渠道分销提成

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

@@ -2077,7 +2077,7 @@ public class OrderDonServiceImpl extends ServiceImpl<OrderDonMapper, OrderDon> i
 					if (userDistribute == null && Constant.CC_DISTRIBUTE_MARK.equals(userDistributeShared.getRemark()) && order.getGoodsId() == Constant.CLAUDE_CODE_GOODS_ID) {
 						//普通推广用户首单,给上级渠道发放 claude code 积分卡
 						try {
-							claudeCodeService.addUserRestNum(order.getId(), userDistributeShared.getSharedId(), 1, "新用户下单");
+							claudeCodeService.adjUserRestNum(order.getId(), userDistributeShared.getSharedId(), 1, "新用户下单");
 							log.info("用户{}邀请新用户{}首单,发放claude code积分卡成功", userDistributeShared.getSharedId(), order.getUserId());
 						} catch (Exception e) {
 							log.error("给用户{}发放claude code积分卡失败:{}", userDistributeShared.getSharedId(), e.getMessage());