zoujiajian před 1 rokem
rodič
revize
d750904be9

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

@@ -0,0 +1,27 @@
+package com.cyksj.model.views;
+
+import lombok.Getter;
+import lombok.Setter;
+
+import java.util.List;
+
+/**
+ * 项目名: yhlxj11111111
+ * 文件名: ClaudeCodePackageView
+ * 创建者: JavaZou
+ * 创建时间:2025/8/12 10:44
+ */
+@Getter
+@Setter
+public class ClaudeCodePackageView {
+
+	/**
+	 * claude code规格
+	 */
+	private List<GoodsDonSkuView> skus;
+
+	/**
+	 * 升级套餐
+	 */
+	private List<RenewUpgradePackageFrontView> upgrades;
+}

+ 12 - 0
netflix-dao/src/main/java/com/cyksj/model/views/RenewUpgradePackageFrontView.java

@@ -90,5 +90,17 @@ public class RenewUpgradePackageFrontView {
 
 
 		@DbField("sku.price")
 		@DbField("sku.price")
 		private BigDecimal price;
 		private BigDecimal price;
+
+		/**
+		 * claude code积分上限
+		 */
+		@DbField("sku.code_points")
+		private Integer codePoints;
+
+		/**
+		 * claude code每小时恢复积分
+		 */
+		@DbField("sku.code_credit_recovery")
+		private Integer codeCreditRecovery;
 	}
 	}
 }
 }

+ 53 - 6
netflix-web/src/main/java/com/cyksj/web/controller/claude/ClaudeCodeController.java

@@ -1,20 +1,22 @@
 package com.cyksj.web.controller.claude;
 package com.cyksj.web.controller.claude;
 
 
+import cn.hutool.core.collection.CollUtil;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.cyksj.common.constant.Constant;
 import com.cyksj.common.constant.Constant;
 import com.cyksj.common.exception.BusinessRuntimeException;
 import com.cyksj.common.exception.BusinessRuntimeException;
+import com.cyksj.common.util.Jsons;
 import com.cyksj.dto.Result;
 import com.cyksj.dto.Result;
 import com.cyksj.enums.GatewayResponse;
 import com.cyksj.enums.GatewayResponse;
-import com.cyksj.model.entity.Announcement;
-import com.cyksj.model.entity.OAuthClient;
-import com.cyksj.model.entity.OAuthToken;
-import com.cyksj.model.entity.RelayServer;
+import com.cyksj.mapper.ClaudeCodeUserMapper;
+import com.cyksj.mapper.GroupsMapper;
+import com.cyksj.mapper.GroupsRelationMapper;
+import com.cyksj.model.entity.*;
 import com.cyksj.model.manage.views.OrderDonView;
 import com.cyksj.model.manage.views.OrderDonView;
 import com.cyksj.model.request.ClaudeCodeApiKeysReq;
 import com.cyksj.model.request.ClaudeCodeApiKeysReq;
 import com.cyksj.model.request.ClaudeCodeDelReq;
 import com.cyksj.model.request.ClaudeCodeDelReq;
 import com.cyksj.model.response.ClaudeCodePointsHistoryResp;
 import com.cyksj.model.response.ClaudeCodePointsHistoryResp;
 import com.cyksj.model.response.claudecode.ClaudeCodeResp;
 import com.cyksj.model.response.claudecode.ClaudeCodeResp;
-import com.cyksj.model.views.ClaudeCodeUserApiKeysView;
-import com.cyksj.model.views.ClaudeCodeUserInfoView;
+import com.cyksj.model.views.*;
 import com.cyksj.service.claude.AnnouncementService;
 import com.cyksj.service.claude.AnnouncementService;
 import com.cyksj.service.claude.ClaudeCodeService;
 import com.cyksj.service.claude.ClaudeCodeService;
 import com.cyksj.service.claude.OAuthClaudeCodeService;
 import com.cyksj.service.claude.OAuthClaudeCodeService;
@@ -35,6 +37,7 @@ import javax.servlet.http.HttpServletResponse;
 import java.io.IOException;
 import java.io.IOException;
 import java.net.URLEncoder;
 import java.net.URLEncoder;
 import java.nio.charset.StandardCharsets;
 import java.nio.charset.StandardCharsets;
+import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.HashMap;
 import java.util.List;
 import java.util.List;
 import java.util.Map;
 import java.util.Map;
@@ -66,6 +69,12 @@ public class ClaudeCodeController {
 
 
 	private final RelayService relayService;
 	private final RelayService relayService;
 
 
+	private final ClaudeCodeUserMapper claudeCodeUserMapper;
+
+	private final GroupsRelationMapper relationMapper;
+
+	private final GroupsMapper groupsMapper;
+
 	/**
 	/**
 	 * 用户创建API KEY
 	 * 用户创建API KEY
 	 */
 	 */
@@ -178,6 +187,44 @@ public class ClaudeCodeController {
 		return resp;
 		return resp;
 	}
 	}
 
 
+	/**
+	 * claude code可选套餐
+	 */
+	@GetMapping("/get/packages")
+	public Result<ClaudeCodePackageView> getClaudeCodePackages() {
+		long userId = StpUserUtil.getLoginIdAsLong();
+		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) return GatewayResponse.SUCCESS.newBuilder().toResult();
+		Integer userCodePoints = user.getCodePoints();
+		GroupsRelation relation = relationMapper.selectById(user.getRelationId());
+		GroupsTrips groupsTrips = groupsMapper.selectById(relation.getGroupsId());
+		Long skuId = groupsTrips.getSkuId();
+		ClaudeCodePackageView claudeCodePackageView = new ClaudeCodePackageView();
+		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);
+				List<RenewUpgradePackageFrontView.RenewSkuView> renewSkuViews = new ArrayList<>();
+				if (CollUtil.isNotEmpty(upgradeSkuIds)) {
+					renewSkuViews = beanSearcher.searchAll(RenewUpgradePackageFrontView.RenewSkuView.class, MapUtils.builder()
+							//高套餐
+							.field(RenewUpgradePackageFrontView.RenewSkuView::getCodePoints, userCodePoints).op(Operator.GreaterEqual)
+							.field(RenewUpgradePackageFrontView.RenewSkuView::getSkuId, upgradeSkuIds).op(Operator.InList)
+							.build());
+				}
+				renew.setRenewSkus(renewSkuViews);
+			} catch (Exception e) {
+			}
+		});
+		List<GoodsDonSkuView> goodsDonSkuViews = beanSearcher.searchAll(GoodsDonSkuView.class, MapUtils.builder().field(GoodsDonSkuView::getGoodsId, Constant.CLAUDE_CODE_GOODS_ID).field(GoodsDonSkuView::getGoodsDonSkuStatus, Boolean.TRUE).build());
+		claudeCodePackageView.setSkus(goodsDonSkuViews);
+		claudeCodePackageView.setUpgrades(renewUpgradePackageFrontViews);
+		return GatewayResponse.SUCCESS.newBuilder().toResult(claudeCodePackageView);
+	}
+
 	//================================================Claude Code OAuth接口============================================================
 	//================================================Claude Code OAuth接口============================================================