zoujiajian 1 year ago
parent
commit
f285fb7193

+ 75 - 0
netflix-dao/src/main/java/com/cyksj/model/views/ClaudeCodeUserPackageView.java

@@ -0,0 +1,75 @@
+package com.cyksj.model.views;
+
+import lombok.Getter;
+import lombok.Setter;
+
+import java.util.Date;
+
+/**
+ * 项目名: yhlxj11111111
+ * 文件名: ClaudeCodeUserPackageView
+ * 创建者: JavaZou
+ * 创建时间:2025/8/8 15:19
+ */
+@Getter
+@Setter
+public class ClaudeCodeUserPackageView {
+	/**
+	 * 用户ID
+	 */
+	private Long userId;
+
+	/**
+	 * 可用积分
+	 */
+	private Integer availableCredits;
+
+	/**
+	 * 积分上限
+	 */
+	private Integer creditLimit;
+
+	/**
+	 * 每日恢复积分
+	 */
+	private Integer creditRecovery;
+
+	/**
+	 * 结束日期
+	 */
+	private Date endDate;
+	/**
+	 * 最后恢复时间
+	 */
+	private Date lastRecoveryAt;
+
+	/**
+	 * 下次恢复时间
+	 */
+	private Date nextRecoveryAt;
+
+	/**
+	 * 套餐名称
+	 */
+	private String planName;
+
+	/**
+	 * 是否启用恢复
+	 */
+	private Boolean recoveryEnabled;
+
+	/**
+	 * 开始日期
+	 */
+	private Date start_date;
+
+	/**
+	 * 状态
+	 */
+	private String status;
+
+	/**
+	 * 已使用积分
+	 */
+	private Integer usedCredits;
+}

+ 70 - 0
netflix-dao/src/main/java/com/cyksj/model/views/ClaudeCodeUserPointsDetailView.java

@@ -0,0 +1,70 @@
+package com.cyksj.model.views;
+
+import lombok.Getter;
+import lombok.Setter;
+
+import java.util.Date;
+import java.util.List;
+
+/**
+ * 项目名: yhlxj11111111
+ * 文件名: ClaudeCodeUserPointsDetailView
+ * 创建者: JavaZou
+ * 创建时间:2025/8/8 15:25
+ */
+@Getter
+@Setter
+public class ClaudeCodeUserPointsDetailView {
+	private Integer total;
+
+	private Integer page;
+
+	private Integer limit;
+
+	private List<Record> records;
+
+	@Getter
+	@Setter
+	public static class Record {
+
+		/**
+		 * 记录ID
+		 */
+		private Long id;
+
+		/**
+		 * 变动金额
+		 */
+		private Integer amount;
+
+		/**
+		 * 变动后余额
+		 */
+		private Integer balanceAfter;
+
+		/**
+		 * 创建时间
+		 */
+		private Date created_at;
+
+		/**
+		 * 描述
+		 */
+		private String description;
+
+		/**
+		 * 关联ID
+		 */
+		private String referenceId;
+
+		/**
+		 * 关联类型
+		 */
+		private String referenceType;
+
+		/**
+		 * 类型
+		 */
+		private String type;
+	}
+}

+ 7 - 1
netflix-service/src/main/java/com/cyksj/service/claude/ClaudeCodeService.java

@@ -4,6 +4,7 @@ import com.cyksj.model.entity.GoodsDonSku;
 import com.cyksj.model.request.ClaudeCodeApiKeysReq;
 import com.cyksj.model.request.ClaudeCodeApiKeysStatusReq;
 import com.cyksj.model.views.ClaudeCodeUserApiKeysView;
+import com.cyksj.model.views.ClaudeCodeUserPackageView;
 
 import java.util.List;
 
@@ -38,5 +39,10 @@ public interface ClaudeCodeService {
 	/**
 	 * 用户api keys列表
 	 */
-	List<ClaudeCodeUserApiKeysView> getUserApiKeys(long userId);
+	List<ClaudeCodeUserApiKeysView> getUserApiKeys(long userId) throws Exception;
+
+	/**
+	 * 用户套餐信息
+	 */
+	ClaudeCodeUserPackageView getUserPackage(long userId) throws Exception;
 }

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

@@ -13,6 +13,7 @@ import com.cyksj.model.request.ClaudeCodeApiKeysReq;
 import com.cyksj.model.request.ClaudeCodeApiKeysStatusReq;
 import com.cyksj.model.response.claudecode.ClaudeCodeResp;
 import com.cyksj.model.views.ClaudeCodeUserApiKeysView;
+import com.cyksj.model.views.ClaudeCodeUserPackageView;
 import com.cyksj.service.claude.ClaudeCodeService;
 import com.cyksj.service.user.UserBindRelationService;
 import lombok.RequiredArgsConstructor;
@@ -83,10 +84,26 @@ public class ClaudeCodeServiceImpl implements ClaudeCodeService {
 	}
 
 	@Override
-	public List<ClaudeCodeUserApiKeysView> getUserApiKeys(long userId) {
+	public List<ClaudeCodeUserApiKeysView> getUserApiKeys(long userId) throws Exception {
+		String url = String.format(CLAUDE_CODE_API_PREFIX + "api/users/%s/keys", userId);
+		String responseBody = executeClaudeCodeGetApi(url);
+		ClaudeCodeResp claudeCodeResp = Jsons.parseObject(responseBody, ClaudeCodeResp.class);
+		if (claudeCodeResp.getSuccess()) {
+			return Jsons.parseList(claudeCodeResp.getData(), ClaudeCodeUserApiKeysView.class);
+		}
 		return null;
 	}
 
+	@Override
+	public ClaudeCodeUserPackageView getUserPackage(long userId) throws Exception {
+		String url = String.format(CLAUDE_CODE_API_PREFIX + "api/users/%s/plan", userId);
+		String responseBody = executeClaudeCodeGetApi(url);
+		ClaudeCodeResp claudeCodeResp = Jsons.parseObject(responseBody, ClaudeCodeResp.class);
+		if (claudeCodeResp.getSuccess()) {
+			return Jsons.parseObject(responseBody, ClaudeCodeUserPackageView.class);
+		}
+		return null;
+	}
 
 	public void createOrUpdateClaudeCodeUserPackage(Long userId, String planName, Integer codePoints, Integer codeCreditRecovery, Date expiryTime) throws Exception {
 		Map<String, Object> parmas = new HashMap<>();
@@ -115,6 +132,19 @@ public class ClaudeCodeServiceImpl implements ClaudeCodeService {
 	}
 
 
+	/**
+	 * claude code GET请求
+	 */
+	public String executeClaudeCodeGetApi(String url) {
+		HttpResponse execute = HttpUtil.createGet(url)
+				.header("X-Admin-Key", CLAUDE_CODE_API_ADMIN_KEY)
+				.setConnectionTimeout(3000)
+				.setReadTimeout(3000)
+				.execute();
+		return execute.body();
+	}
+
+
 	/**
 	 * claude code Post请求
 	 */

+ 4 - 3
netflix-web/src/main/java/com/cyksj/web/controller/claude/ClaudeCodeController.java

@@ -4,6 +4,7 @@ import com.cyksj.dto.Result;
 import com.cyksj.enums.GatewayResponse;
 import com.cyksj.model.request.ClaudeCodeApiKeysReq;
 import com.cyksj.model.request.ClaudeCodeApiKeysStatusReq;
+import com.cyksj.model.views.ClaudeCodeUserPackageView;
 import com.cyksj.service.claude.ClaudeCodeService;
 import com.cyksj.web.util.StpUserUtil;
 import lombok.RequiredArgsConstructor;
@@ -75,7 +76,7 @@ public class ClaudeCodeController {
 	@GetMapping("/get/user/package")
 	public Result<String> getUserPackage() {
 		long userId = StpUserUtil.getLoginIdAsLong();
-		claudeCodeService.getUserPackage(userId);
+		ClaudeCodeUserPackageView claudeCodeUserPackageView = claudeCodeService.getUserPackage(userId);
 		return GatewayResponse.SUCCESS.newBuilder().toResult();
 	}
 
@@ -83,9 +84,9 @@ public class ClaudeCodeController {
 	 * 用户积分明细
 	 */
 	@GetMapping("/get/user/points/detail")
-	public Result<String> getUserPointsDetail() {
+	public Result<String> getUserPointsDetail(@RequestParam(defaultValue = "0") Integer page, @RequestParam(defaultValue = "10") Integer limit, String type) {
 		long userId = StpUserUtil.getLoginIdAsLong();
-		claudeCodeService.getUserPointsDetail(userId);
+		claudeCodeService.getUserPointsDetail(userId, page, limit);
 		return GatewayResponse.SUCCESS.newBuilder().toResult();
 	}