zoujiajian hai 1 ano
pai
achega
14fd1ec84c

+ 9 - 0
netflix-dao/src/main/java/com/cyksj/model/manage/views/GroupsRelationView.java

@@ -35,6 +35,9 @@ public class GroupsRelationView {
     @DbField("sku.is_mirror")
     private Boolean isMirror;
 
+    @DbField("sku.spec_val")
+    private String specVal;
+
     @DbField("a.account")
     @JsonIgnore
     private String tripsAccount;
@@ -161,6 +164,12 @@ public class GroupsRelationView {
     @DbField("gr.code_sku_id")
     private Long codeSkuId;
 
+    /**
+     * claude code 续费升级过期时间
+     */
+    @DbField("gr.renew_expiry_time")
+    private Date codeRenewExpiryTime;
+
     @DbIgnore
     private Date updateExpiryTime;
 

+ 35 - 0
netflix-dao/src/main/java/com/cyksj/model/views/ClaudeCodeUserInfoView.java

@@ -1,8 +1,11 @@
 package com.cyksj.model.views;
 
+import lombok.Builder;
 import lombok.Getter;
 import lombok.Setter;
 
+import java.util.Date;
+
 /**
  * 项目名: yhlxj11111111
  * 文件名: ClaudeCodeUserInfoView
@@ -11,5 +14,37 @@ import lombok.Setter;
  */
 @Getter
 @Setter
+@Builder
 public class ClaudeCodeUserInfoView {
+	/**
+	 * 套餐名
+	 */
+	private String planName;
+
+	private Long relationId;
+
+	/**
+	 * claude code积分上限
+	 */
+	private Integer codePoints;
+
+	/**
+	 * claude code每小时恢复积分
+	 */
+	private Integer codeCreditRecovery;
+
+	/**
+	 * code 有效期
+	 */
+	private Date expiryTime;
+
+	/**
+	 * 续费升级skuId
+	 */
+	private Long renewSkuId;
+
+	/**
+	 * 续费升级过期时间
+	 */
+	private Date renewExpiryTime;
 }

+ 33 - 6
netflix-service/src/main/java/com/cyksj/service/claude/impl/ClaudeCodeServiceImpl.java

@@ -1,6 +1,7 @@
 package com.cyksj.service.claude.impl;
 
 import cn.hutool.core.date.DateTime;
+import cn.hutool.core.date.DateUtil;
 import cn.hutool.core.lang.Assert;
 import cn.hutool.core.util.ObjectUtil;
 import cn.hutool.http.HttpResponse;
@@ -13,6 +14,7 @@ import com.cyksj.common.util.Jsons;
 import com.cyksj.common.util.StringUtil;
 import com.cyksj.mapper.ClaudeCodeUserMapper;
 import com.cyksj.mapper.ClaudeCodeUserRenewExpiryRecordMapper;
+import com.cyksj.mapper.GoodsDonSkuMapper;
 import com.cyksj.mapper.GroupsRelationMapper;
 import com.cyksj.model.entity.ClaudeCodeUser;
 import com.cyksj.model.entity.ClaudeCodeUserRenewExpiryRecord;
@@ -27,7 +29,6 @@ import com.cyksj.model.response.claudecode.ClaudeCodeResp;
 import com.cyksj.model.views.ClaudeCodeUserApiKeysView;
 import com.cyksj.model.views.ClaudeCodeUserInfoView;
 import com.cyksj.model.views.ClaudeCodeUserPackageView;
-import com.cyksj.model.views.RenewalView;
 import com.cyksj.service.claude.ClaudeCodeService;
 import com.cyksj.service.user.UserBindRelationService;
 import com.ejlchina.searcher.BeanSearcher;
@@ -63,6 +64,8 @@ public class ClaudeCodeServiceImpl implements ClaudeCodeService {
 
 	private final ClaudeCodeUserMapper claudeCodeUserMapper;
 
+	private final GoodsDonSkuMapper skuMapper;
+
 	private final static String CLAUDE_CODE_API_PREFIX = "https://relay01.yhlxj.com/";
 
 	public static final String CLAUDE_CODE_API_ADMIN_KEY = "claudecodeyhlxjclaude";
@@ -81,9 +84,15 @@ public class ClaudeCodeServiceImpl implements ClaudeCodeService {
 		//生成claude code用户套餐
 		try {
 			Boolean isUpgrade = false;
+			Date renewExpiryTime = null;
 			//若是续费升级 记录此时续费升级的过期时间
 			if (relationCodePoints != null && relationCodePoints <= codePoints && !ObjectUtil.equal(relationCodeSkuId, skuId)) {
 				saveClaudeCodeRenewExpiryRecord(orderId, relationUserId, relationId, expiryTime, skuId);
+				if (sku.getDays() != null) {
+					renewExpiryTime = DateUtil.offsetDay(DateTime.now(), sku.getDays());
+				}else {
+					renewExpiryTime = DateUtil.offsetMonth(DateTime.now(), sku.getMonths());
+				}
 				isUpgrade = true;
 			}
 			ClaudeCodeResp codeUserPackage = createOrUpdateClaudeCodeUserPackage(relation.getUserId(), sku.getSpecVal(), codePoints, codeCreditRecovery, expiryTime);
@@ -96,14 +105,14 @@ public class ClaudeCodeServiceImpl implements ClaudeCodeService {
 				if (orderType == 2) {
 					invalidateUserCache(relationUserId);
 				}
-				generateOrUpdateClaudeCodeUser(relationUserId, relationId, codePoints, codeCreditRecovery, expiryTime, isUpgrade, skuId);
+				generateOrUpdateClaudeCodeUser(relationUserId, relationId, codePoints, codeCreditRecovery, expiryTime, isUpgrade, skuId, renewExpiryTime);
 			}
 		} catch (Exception e) {
 			log.error("生成或更新claude code用户:{}套餐skuId:{} 失败,error_info:{}", userId, skuId, StringUtil.getErrorText(e));
 		}
 	}
 
-	private void generateOrUpdateClaudeCodeUser(Long relationUserId, Long relationId, Integer codePoints, Integer codeCreditRecovery, Date expiryTime, Boolean isUpgrade, Long renewSkuId) {
+	private void generateOrUpdateClaudeCodeUser(Long relationUserId, Long relationId, Integer codePoints, Integer codeCreditRecovery, Date expiryTime, Boolean isUpgrade, Long renewSkuId, Date renewExpiryTime) {
 		ClaudeCodeUser claudeCodeUser = claudeCodeUserMapper.selectOne(Wrappers.lambdaQuery(ClaudeCodeUser.class).eq(ClaudeCodeUser::getRelationId, relationId).last("limit 1"));
 		if (claudeCodeUser == null) {
 			claudeCodeUser = new ClaudeCodeUser();
@@ -115,7 +124,7 @@ public class ClaudeCodeServiceImpl implements ClaudeCodeService {
 		}
 		if (isUpgrade) {
 			claudeCodeUser.setRenewSkuId(renewSkuId);
-			claudeCodeUser.setRenewExpiryTime(expiryTime);
+			claudeCodeUser.setRenewExpiryTime(renewExpiryTime);
 		}
 		if (claudeCodeUser.getId() == null) {
 			try {
@@ -307,6 +316,7 @@ public class ClaudeCodeServiceImpl implements ClaudeCodeService {
 		if (groupsRelationView == null) {
 			return null;
 		}
+		String specVal = groupsRelationView.getSpecVal();
 		ClaudeCodeUser claudeCodeUser = claudeCodeUserMapper.selectOne(Wrappers.lambdaQuery(ClaudeCodeUser.class).in(ClaudeCodeUser::getUserId, userIdList).last("limit 1"));
 		if (claudeCodeUser == null) {
 			if (groupsRelationView != null) {
@@ -326,11 +336,28 @@ public class ClaudeCodeServiceImpl implements ClaudeCodeService {
 			if (codePoints < relationViewCodePoints) {
 				claudeCodeUser.setCodePoints(relationViewCodePoints);
 				claudeCodeUser.setCodeCreditRecovery(groupsRelationView.getCodeCreditRecovery());
-				claudeCodeUser.setRenewExpiryTime(groupsRelationView.getExpiryTime());
-				claudeCodeUser.setRenewSkuId(groupsRelationView.getSkuId());
+				claudeCodeUser.setRenewSkuId(groupsRelationView.getCodeSkuId());
+				claudeCodeUser.setRenewExpiryTime(groupsRelationView.getCodeRenewExpiryTime());
+				//更新缓存
+				invalidateUserCache(claudeCodeUser.getRelationId());
 			}
 			claudeCodeUser.setExpiryTime(groupsRelationView.getExpiryTime());
 		}
+		if (claudeCodeUser.getRenewSkuId() != null) {
+			GoodsDonSku renewSku = skuMapper.selectById(claudeCodeUser.getRenewSkuId());
+			if (renewSku != null) {
+				specVal = renewSku.getSpecVal();
+			}
+		}
+		return ClaudeCodeUserInfoView.builder()
+				.planName(specVal)
+				.relationId(claudeCodeUser.getRelationId())
+				.codePoints(claudeCodeUser.getCodePoints())
+				.codeCreditRecovery(claudeCodeUser.getCodeCreditRecovery())
+				.expiryTime(claudeCodeUser.getExpiryTime())
+				.renewSkuId(claudeCodeUser.getRenewSkuId())
+				.renewExpiryTime(claudeCodeUser.getRenewExpiryTime())
+				.build();
 	}
 
 	public ClaudeCodeResp createOrUpdateClaudeCodeUserPackage(Long userId, String planName, Integer codePoints, Integer codeCreditRecovery, Date expiryTime) throws Exception {

+ 0 - 26
netflix-web/src/main/java/com/cyksj/web/controller/claude/ClaudeCodeController.java

@@ -1,19 +1,15 @@
 package com.cyksj.web.controller.claude;
 
-import cn.hutool.core.date.DateTime;
 import com.cyksj.common.constant.Constant;
 import com.cyksj.dto.Result;
 import com.cyksj.enums.GatewayResponse;
 import com.cyksj.model.manage.views.OrderDonView;
 import com.cyksj.model.request.ClaudeCodeApiKeysReq;
-import com.cyksj.model.request.ClaudeCodeApiKeysStatusReq;
 import com.cyksj.model.request.ClaudeCodeDelReq;
 import com.cyksj.model.response.ClaudeCodePointsHistoryResp;
 import com.cyksj.model.response.claudecode.ClaudeCodeResp;
 import com.cyksj.model.views.ClaudeCodeUserApiKeysView;
 import com.cyksj.model.views.ClaudeCodeUserInfoView;
-import com.cyksj.model.views.ClaudeCodeUserPackageView;
-import com.cyksj.model.views.RenewalView;
 import com.cyksj.service.claude.ClaudeCodeService;
 import com.cyksj.service.user.UserBindRelationService;
 import com.cyksj.web.util.StpUserUtil;
@@ -57,17 +53,6 @@ public class ClaudeCodeController {
 		return GatewayResponse.SUCCESS.newBuilder().toResult();
 	}
 
-	/**
-	 * 更新api key状态
-	 */
-//	@PutMapping("/update/apiKeys/status")
-	public Result<String> updateApiKeysStatus(@RequestBody @Validated ClaudeCodeApiKeysStatusReq req) throws Exception {
-		long userId = StpUserUtil.getLoginIdAsLong();
-		req.setUserId(userId);
-		claudeCodeService.updateApiKeysStatus(req);
-		return GatewayResponse.SUCCESS.newBuilder().toResult();
-	}
-
 	/**
 	 * 用户api keys列表
 	 */
@@ -91,17 +76,6 @@ public class ClaudeCodeController {
 
 	//================================================用户============================================================
 
-
-	/**
-	 * 查询用户套餐信息
-	 */
-	@GetMapping("/get/user/package")
-	public Result<ClaudeCodeUserPackageView> getUserPackage() throws Exception {
-		long userId = StpUserUtil.getLoginIdAsLong();
-		ClaudeCodeUserPackageView claudeCodeUserPackageView = claudeCodeService.getUserPackage(userId);
-		return GatewayResponse.SUCCESS.newBuilder().toResult(claudeCodeUserPackageView);
-	}
-
 	/**
 	 * 用户订阅车票信息
 	 */