zoujiajian пре 1 година
родитељ
комит
5c1497f4c5

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

@@ -54,4 +54,9 @@ public interface ClaudeCodeService {
 	Boolean checkClaudeCodeUser(Long userId);
 
 	void updateClaudeCodeUserPackageInfo(ClaudeCodeUser claudeCodeUser);
+
+	/**
+	 * 删除用户claude code 套餐
+	 */
+	Boolean delUserPackages(Long userId);
 }

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

@@ -275,10 +275,18 @@ public class ClaudeCodeServiceImpl implements ClaudeCodeService {
 				.field(GroupsRelationView::getGoodsId, Constant.CLAUDE_CODE_GOODS_ID)
 				.field(GroupsRelationView::getExpiryTime, DateTime.now()).op(Operator.GreaterThan)
 				.build());
+		ClaudeCodeUser claudeCodeUser = claudeCodeUserMapper.selectOne(Wrappers.lambdaQuery(ClaudeCodeUser.class).in(ClaudeCodeUser::getUserId, userIdList).last("limit 1"));
+		//车票不存在
 		if (groupsRelationView == null) {
+			//套餐是否存在
+			if (claudeCodeUser != null) {
+				//清除用户套餐
+				if (delUserPackages(claudeCodeUser.getUserId())) {
+					claudeCodeUserMapper.deleteById(claudeCodeUser.getId());
+				}
+			}
 			return null;
 		}
-		ClaudeCodeUser claudeCodeUser = claudeCodeUserMapper.selectOne(Wrappers.lambdaQuery(ClaudeCodeUser.class).in(ClaudeCodeUser::getUserId, userIdList).last("limit 1"));
 		//是否需要重试更新 cladueCode userInfo信息
 		if (claudeCodeUser.getIsRetry()) {
 			try {
@@ -351,6 +359,23 @@ public class ClaudeCodeServiceImpl implements ClaudeCodeService {
 		}
 	}
 
+	@Override
+	public Boolean delUserPackages(Long userId) {
+		String url = String.format(CLAUDE_CODE_API_PREFIX + "api/users/%s/plan", userId);
+		try {
+			String responseBody = executeClaudeCodeDeletedApi(url);
+			ClaudeCodeResp claudeCodeResp = Jsons.parseObject(responseBody, ClaudeCodeResp.class);
+			if (!Constant.SUCCESS.equals(claudeCodeResp.getMessage())) {
+				log.error("删除用户:{} claude code套餐失败:{}", userId, claudeCodeResp.getMessage());
+				return Boolean.FALSE;
+			}
+			return Boolean.TRUE;
+		} catch (Exception e) {
+			log.error("删除用户:{} claude code套餐报错:{}", userId, StringUtil.getErrorText(e));
+		}
+		return Boolean.FALSE;
+	}
+
 	/**
 	 * 获取claude code用户id
 	 */
@@ -415,6 +440,26 @@ public class ClaudeCodeServiceImpl implements ClaudeCodeService {
 		}
 	}
 
+	/**
+	 * claude code DELETE请求
+	 */
+	public String executeClaudeCodeDeletedApi(String url) {
+		Retryer<String> build = getApiRetryer(1, 3);
+		try {
+			return build.call(() -> {
+				try {
+					HttpResponse execute = HttpUtil.createRequest(Method.DELETE, url).header("X-Admin-Key", CLAUDE_CODE_API_ADMIN_KEY).setConnectionTimeout(CONNECT_MILLISECONDS).execute();
+					return execute.body();
+				} catch (HttpException e) {
+					return null;
+				}
+			});
+		} catch (ExecutionException | RetryException e) {
+			log.info("重试调用claude code DELETE请求url->{}失败,msg->{}", url, StringUtil.getErrorText(e));
+			throw BusinessRuntimeException.getInstance("接口请求失败");
+		}
+	}
+
 	/**
 	 * 记录claude code 续费升级的过期时间
 	 */

+ 5 - 2
netflix-service/src/main/java/com/cyksj/service/relation/impl/GroupRelationClearServiceImpl.java

@@ -138,8 +138,11 @@ public class GroupRelationClearServiceImpl implements GroupRelationClearService
 				if (groupsRelation.getGoodsId() != null && groupsRelation.getGoodsId() == Constant.CLAUDE_CODE_GOODS_ID) {
 					//用户失效 车票用户id
 					claudeCodeService.invalidateUserCache(groupsRelation.getUserId());
-					//清除claude code user
-					claudeCodeUserMapper.delete(Wrappers.lambdaQuery(ClaudeCodeUser.class).eq(ClaudeCodeUser::getRelationId, relationId));
+					//删除用户套餐
+					if (claudeCodeService.delUserPackages(groupsRelation.getUserId())) {
+						//清除claude code user
+						claudeCodeUserMapper.delete(Wrappers.lambdaQuery(ClaudeCodeUser.class).eq(ClaudeCodeUser::getRelationId, relationId));
+					}
 				}
 			}
 		}