Bläddra i källkod

cc、codex加量包

zoujiajian 7 månader sedan
förälder
incheckning
6e10ea1425

+ 1 - 1
netflix-dao/src/main/java/com/cyksj/model/excel/ExcelMonthOrderData.java

@@ -3,7 +3,7 @@ package com.cyksj.model.excel;
 import com.alibaba.excel.annotation.ExcelProperty;
 import lombok.Getter;
 import lombok.Setter;
-import lombok.experimental.Accessors;
+import lombok.experimental.Aessors;
 
 import java.math.BigDecimal;
 

+ 5 - 0
netflix-dao/src/main/java/com/cyksj/model/views/ClaudeCodePackageView.java

@@ -24,4 +24,9 @@ public class ClaudeCodePackageView {
 	 * 升级套餐
 	 */
 	private List<RenewUpgradePackageFrontView> upgrades;
+
+	/**
+	 * 加量包套餐
+	 */
+	private List<UpgradePackageView> extraPack;
 }

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

@@ -133,4 +133,6 @@ public interface ClaudeCodeService {
 	ClaudeCodeDeductDto getDeductMoney(Long relationId, Long relationSkuId, Long renewSkuId, Long renewOrderId, Date renewExpiryTime, Date relationStartTime, Date relationExpiryTime, DateTime now, List<Long> userIdList, GoodsDonSku upgradeSku);
 
 	ClaudeCodeDeductDto getDeductSkuMoney(Long userId, Long relationId, Long upgradeSkuId);
+
+	void adjClaudeCodeUserPoints(Long userId, Integer points, String type, String description) throws Exception;
 }

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

@@ -1182,7 +1182,8 @@ public class ClaudeCodeServiceImpl implements ClaudeCodeService {
 		return claudeCodeDeductDto;
 	}
 
-	private void adjClaudeCodeUserPoints(Long userId, Integer points, String type, String description) throws Exception {
+	@Override
+	public void adjClaudeCodeUserPoints(Long userId, Integer points, String type, String description) throws Exception {
 		String apiKeyUrl = String.format(Constant.CLAUDE_CODE_API_PREFIX + "api/claude/users/%s/limit", userId);
 		Map<String, Object> parmas = new HashMap<>();
 		parmas.put("amount", points);
@@ -1190,7 +1191,7 @@ public class ClaudeCodeServiceImpl implements ClaudeCodeService {
 		parmas.put("description", description);
 		ClaudeCodeResp claudeCodeResp = executeClaudeCodePostApi(apiKeyUrl, Jsons.toJson(parmas));
 		if (!Constant.SUCCESS.equals(claudeCodeResp.getMessage())) {
-			throw BusinessRuntimeException.getInstance("使用补充卡失败");
+			throw BusinessRuntimeException.getInstance("调整用户:{}额度:{}失败", userId, points);
 		}
 	}
 

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

@@ -238,6 +238,10 @@ public class CmsOrderDonServiceImpl extends ServiceImpl<OrderDonMapper,OrderDon>
 
     private final AccountNetflixFrozenTicketReceivedRecordMapper receivedRecordMapper;
 
+    private final ClaudeCodeUserMapper claudeCodeUserMapper;
+
+    private final CodexUserMapper codexUserMapper;
+
     private static final GlobalThreadPoolTaskExecutor TASK_POOL = GlobalThreadPoolTaskExecutor.getInstance();
 
     @Override
@@ -580,6 +584,39 @@ public class CmsOrderDonServiceImpl extends ServiceImpl<OrderDonMapper,OrderDon>
                 }
             }
         }
+
+        //扣除cc套餐的次数
+        if (upgradePackage.getGoodsId() == Constant.CLAUDE_CODE_GOODS_ID) {
+            ClaudeCodeUser claudeCodeUser = claudeCodeUserMapper.selectOne(Wrappers.lambdaQuery(ClaudeCodeUser.class).eq(ClaudeCodeUser::getRelationId, orderDon.getRelationId()));
+            if (claudeCodeUser != null) {
+                int update = claudeCodeUserMapper.update(null, Wrappers.lambdaUpdate(ClaudeCodeUser.class)
+                        .set(ClaudeCodeUser::getClaudePermanentBalance, claudeCodeUser.getClaudePermanentBalance() < upgradePackage.getNum() ? claudeCodeUser.getClaudePermanentBalance() : claudeCodeUser.getClaudePermanentBalance() - upgradePackage.getNum())
+                        .eq(ClaudeCodeUser::getId, claudeCodeUser.getId()));
+                if (update == 0) {
+                    log.info("cc user 套餐包增值失败 id:{},orderId:{}", claudeCodeUser.getId(), orderDon.getId());
+                }else {
+                    try {
+                        claudeCodeService.adjClaudeCodeUserPoints(claudeCodeUser.getUserId(), -upgradePackage.getNum(), "adjustment", "加量包退款");
+                    } catch (Exception e) {
+
+                    }
+                }
+            }
+        }
+
+        //扣除codex套餐的次数
+        if (upgradePackage.getGoodsId() == Constant.CODEX_GOODS_ID) {
+            CodexUser codexUser = codexUserMapper.selectOne(Wrappers.lambdaQuery(CodexUser.class).eq(CodexUser::getRelationId, orderDon.getRelationId()));
+            if (codexUser != null) {
+                int update = codexUserMapper.update(null, Wrappers.lambdaUpdate(CodexUser.class)
+                        .set(CodexUser::getOpenaiPermanentBalance, codexUser.getOpenaiPermanentBalance() < upgradePackage.getNum() ? codexUser.getOpenaiPermanentBalance() : codexUser.getOpenaiPermanentBalance() - upgradePackage.getNum())
+                        .eq(CodexUser::getId, codexUser.getId()));
+                if (update == 0) {
+                    log.info("codex user 套餐包增值失败 id:{},orderId:{}", codexUser.getId(), orderDon.getId());
+                }
+                //TODO
+            }
+        }
     }
 
     /**

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

@@ -4570,6 +4570,38 @@ public class OrderDonServiceImpl extends ServiceImpl<OrderDonMapper, OrderDon> i
 			}
 		}
 
+		//cc
+		if (upgradePackage.getGoodsId() == Constant.CLAUDE_CODE_GOODS_ID) {
+			ClaudeCodeUser claudeCodeUser = claudeCodeUserMapper.selectOne(Wrappers.lambdaQuery(ClaudeCodeUser.class).eq(ClaudeCodeUser::getRelationId, orderDon.getRelationId()));
+			if (claudeCodeUser != null) {
+				int update = claudeCodeUserMapper.update(null, Wrappers.lambdaUpdate(ClaudeCodeUser.class)
+						.set(ClaudeCodeUser::getClaudePermanentBalance, claudeCodeUser.getClaudePermanentBalance() + upgradePackage.getNum())
+						.eq(ClaudeCodeUser::getId, claudeCodeUser.getId()));
+				if (update == 0) {
+					log.info("cc user 套餐包增值失败 id:{},orderId:{}", claudeCodeUser.getId(), orderDon.getId());
+				}else {
+					try {
+						claudeCodeService.adjClaudeCodeUserPoints(claudeCodeUser.getUserId(), upgradePackage.getNum(), "adjustment", "加量包");
+					} catch (Exception e) {
+
+					}
+				}
+			}
+		}
+
+		//codex
+		if (upgradePackage.getGoodsId() == Constant.CODEX_GOODS_ID) {
+			CodexUser codexUser = codexUserMapper.selectOne(Wrappers.lambdaQuery(CodexUser.class).eq(CodexUser::getRelationId, orderDon.getRelationId()));
+			if (codexUser != null) {
+				int update = codexUserMapper.update(null, Wrappers.lambdaUpdate(CodexUser.class)
+						.set(CodexUser::getOpenaiPermanentBalance, codexUser.getOpenaiPermanentBalance() + upgradePackage.getNum())
+						.eq(CodexUser::getId, codexUser.getId()));
+				if (update == 0) {
+					log.info("codex user 套餐包增值失败 id:{},orderId:{}", codexUser.getId(), orderDon.getId());
+				}
+			}
+		}
+
 		//银河币返回
 		returnUpgradeGalaxyCoin(orderDon);
 		//查看该订单是否有关闭的余额

+ 45 - 29
netflix-web/src/main/java/com/cyksj/web/controller/claude/ClaudeCodeController.java

@@ -6,7 +6,6 @@ import cn.hutool.core.util.StrUtil;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.cyksj.common.constant.Constant;
 import com.cyksj.common.exception.BusinessRuntimeException;
-import com.cyksj.common.util.Jsons;
 import com.cyksj.dto.Result;
 import com.cyksj.dto.UserSharedDto;
 import com.cyksj.enums.GatewayResponse;
@@ -43,7 +42,6 @@ import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.*;
 
 import javax.servlet.http.HttpServletRequest;
-import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
@@ -199,45 +197,63 @@ public class ClaudeCodeController {
 	public Result<ClaudeCodePackageView> getClaudeCodePackages(String dsCode) {
 		Long userId = StpUserUtil.getUserIdAfterLogin();
 		ClaudeCodePackageView claudeCodePackageView = new ClaudeCodePackageView();
+//		if (userId != null) {
+//			List<Long> userIdList = userBindRelationService.getRelationUserIdList(userId, null);
+//			ClaudeCodeUser user = claudeCodeUserMapper.selectOne(Wrappers.lambdaQuery(ClaudeCodeUser.class)
+//					.in(ClaudeCodeUser::getUserId, userIdList)
+//					.last("limit 1"));
+//			if (user != null) {
+//				Integer claudeDailyLimit = user.getClaudeDailyLimit();
+//				GroupsRelation relation = relationMapper.selectById(user.getRelationId());
+//				GroupsTrips groupsTrips = groupsMapper.selectById(relation.getGroupsId());
+//				Long skuId = groupsTrips.getSkuId();
+//				if (user.getRenewSkuId() != null && user.getRenewSkuId() > 0) {
+//					skuId = user.getRenewSkuId();
+//				}
+//				List<RenewUpgradePackageFrontView> renewUpgradePackageFrontViews = beanSearcher.searchAll(RenewUpgradePackageFrontView.class, MapUtils.builder().field(RenewUpgradePackageFrontView::getSkuId, skuId).build());
+//				renewUpgradePackageFrontViews.forEach(renew -> {
+//					try {
+//						List<Long> upgradeSkuIds = Jsons.parseList(renew.getUpgradeSkuIds(), Long.class);
+//						if (user.getRenewSkuId() != null) {
+//							upgradeSkuIds.remove(user.getRenewSkuId());
+//						}
+//						List<RenewUpgradePackageFrontView.RenewSkuView> renewSkuViews = new ArrayList<>();
+//						if (CollUtil.isNotEmpty(upgradeSkuIds)) {
+//							renewSkuViews = beanSearcher.searchAll(RenewUpgradePackageFrontView.RenewSkuView.class, MapUtils.builder()
+//									//高套餐
+//									.field(RenewUpgradePackageFrontView.RenewSkuView::getClaudeDailyLimit, claudeDailyLimit).op(Operator.GreaterThan)
+//									.field(RenewUpgradePackageFrontView.RenewSkuView::getSkuId, upgradeSkuIds).op(Operator.InList)
+//									.build());
+//						}
+//						renew.setRenewSkus(renewSkuViews);
+//					} catch (Exception e) {
+//					}
+//				});
+//				claudeCodePackageView.setUpgrades(renewUpgradePackageFrontViews);
+//			}
+//		}
+		List<GoodsDonSkuView> goodsDonSkuViews = beanSearcher.searchAll(GoodsDonSkuView.class, MapUtils.builder().field(GoodsDonSkuView::getGoodsId, Constant.CLAUDE_CODE_GOODS_ID).field(GoodsDonSkuView::getGoodsDonStatus, Boolean.TRUE).field(GoodsDonSkuView::getGoodsDonSkuStatus, Boolean.TRUE).field(GoodsDonSkuView::getUserOwns).op(Operator.IsNull).build());
+		//渠道推广
+		setClaudeCodeSkuCouponInfo(dsCode, userId, goodsDonSkuViews);
+		claudeCodePackageView.setSkus(goodsDonSkuViews);
+
 		if (userId != null) {
 			List<Long> userIdList = userBindRelationService.getRelationUserIdList(userId, null);
 			ClaudeCodeUser user = claudeCodeUserMapper.selectOne(Wrappers.lambdaQuery(ClaudeCodeUser.class)
 					.in(ClaudeCodeUser::getUserId, userIdList)
 					.last("limit 1"));
 			if (user != null) {
-				Integer claudeDailyLimit = user.getClaudeDailyLimit();
 				GroupsRelation relation = relationMapper.selectById(user.getRelationId());
 				GroupsTrips groupsTrips = groupsMapper.selectById(relation.getGroupsId());
 				Long skuId = groupsTrips.getSkuId();
-				if (user.getRenewSkuId() != null && user.getRenewSkuId() > 0) {
-					skuId = user.getRenewSkuId();
+				Map<String, Object> build = MapUtils.flatBuilder(request.getParameterMap()).build();
+				if (skuId != null) {
+					build.put("sku", String.format(" and JSON_CONTAINS(up.sku_ids,'\"%s\"')", skuId));
 				}
-				List<RenewUpgradePackageFrontView> renewUpgradePackageFrontViews = beanSearcher.searchAll(RenewUpgradePackageFrontView.class, MapUtils.builder().field(RenewUpgradePackageFrontView::getSkuId, skuId).build());
-				renewUpgradePackageFrontViews.forEach(renew -> {
-					try {
-						List<Long> upgradeSkuIds = Jsons.parseList(renew.getUpgradeSkuIds(), Long.class);
-						if (user.getRenewSkuId() != null) {
-							upgradeSkuIds.remove(user.getRenewSkuId());
-						}
-						List<RenewUpgradePackageFrontView.RenewSkuView> renewSkuViews = new ArrayList<>();
-						if (CollUtil.isNotEmpty(upgradeSkuIds)) {
-							renewSkuViews = beanSearcher.searchAll(RenewUpgradePackageFrontView.RenewSkuView.class, MapUtils.builder()
-									//高套餐
-									.field(RenewUpgradePackageFrontView.RenewSkuView::getClaudeDailyLimit, claudeDailyLimit).op(Operator.GreaterThan)
-									.field(RenewUpgradePackageFrontView.RenewSkuView::getSkuId, upgradeSkuIds).op(Operator.InList)
-									.build());
-						}
-						renew.setRenewSkus(renewSkuViews);
-					} catch (Exception e) {
-					}
-				});
-				claudeCodePackageView.setUpgrades(renewUpgradePackageFrontViews);
+				List<UpgradePackageView> upgradePackageViews = beanSearcher.searchAll(UpgradePackageView.class, build);
+				claudeCodePackageView.setExtraPack(upgradePackageViews);
 			}
 		}
-		List<GoodsDonSkuView> goodsDonSkuViews = beanSearcher.searchAll(GoodsDonSkuView.class, MapUtils.builder().field(GoodsDonSkuView::getGoodsId, Constant.CLAUDE_CODE_GOODS_ID).field(GoodsDonSkuView::getGoodsDonStatus, Boolean.TRUE).field(GoodsDonSkuView::getGoodsDonSkuStatus, Boolean.TRUE).field(GoodsDonSkuView::getUserOwns).op(Operator.IsNull).build());
-		//渠道推广
-		setClaudeCodeSkuCouponInfo(dsCode, userId, goodsDonSkuViews);
-		claudeCodePackageView.setSkus(goodsDonSkuViews);
 		return GatewayResponse.SUCCESS.newBuilder().toResult(claudeCodePackageView);
 	}