|
|
@@ -12,14 +12,8 @@ import com.cyksj.common.constant.Constant;
|
|
|
import com.cyksj.common.exception.BusinessRuntimeException;
|
|
|
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;
|
|
|
-import com.cyksj.model.entity.GoodsDonSku;
|
|
|
-import com.cyksj.model.entity.GroupsRelation;
|
|
|
+import com.cyksj.mapper.*;
|
|
|
+import com.cyksj.model.entity.*;
|
|
|
import com.cyksj.model.manage.views.GroupsRelationView;
|
|
|
import com.cyksj.model.request.ClaudeCodeApiKeysReq;
|
|
|
import com.cyksj.model.request.ClaudeCodeApiKeysStatusReq;
|
|
|
@@ -66,6 +60,8 @@ public class ClaudeCodeServiceImpl implements ClaudeCodeService {
|
|
|
|
|
|
private final GoodsDonSkuMapper skuMapper;
|
|
|
|
|
|
+ private final GroupsMapper groupsMapper;
|
|
|
+
|
|
|
private final static String CLAUDE_CODE_API_PREFIX = "https://relay01.yhlxj.com/";
|
|
|
|
|
|
public static final String CLAUDE_CODE_API_ADMIN_KEY = "claudecodeyhlxjclaude";
|
|
|
@@ -74,41 +70,50 @@ public class ClaudeCodeServiceImpl implements ClaudeCodeService {
|
|
|
public void generateOrUpdateClaudeCodeUserInfo(Long orderId, Long relationId, Long userId, GoodsDonSku sku, Integer orderType) {
|
|
|
List<Long> userIdList = userBindRelationService.getRelationUserIdList(userId, null);
|
|
|
GroupsRelation relation = relationMapper.selectOne(Wrappers.lambdaQuery(GroupsRelation.class).eq(GroupsRelation::getId, relationId).in(GroupsRelation::getUserId, userIdList));
|
|
|
+ GroupsTrips groupsTrips = groupsMapper.selectById(relation.getGroupsId());
|
|
|
+ GoodsDonSku relationSku = skuMapper.selectById(groupsTrips.getSkuId());
|
|
|
+ Long thisCodeOriSkuId = relationSku.getId();
|
|
|
Long relationUserId = relation.getUserId();
|
|
|
- Integer relationCodePoints = relation.getCodePoints();
|
|
|
- Long relationCodeSkuId = relation.getCodeSkuId();
|
|
|
+ //此时车票的套餐规格积分
|
|
|
+ Integer thisRelationCodePoints = null;
|
|
|
+ ClaudeCodeUser claudeCodeUser = claudeCodeUserMapper.selectOne(Wrappers.lambdaQuery(ClaudeCodeUser.class).eq(ClaudeCodeUser::getRelationId, relationId).last("limit 1"));
|
|
|
+ if (claudeCodeUser != null) {
|
|
|
+ thisRelationCodePoints = claudeCodeUser.getCodePoints();
|
|
|
+ }
|
|
|
Date expiryTime = relation.getExpiryTime();
|
|
|
Integer codePoints = sku.getCodePoints();
|
|
|
Integer codeCreditRecovery = sku.getCodeCreditRecovery();
|
|
|
Long skuId = sku.getId();
|
|
|
- //生成claude code用户套餐
|
|
|
try {
|
|
|
Boolean isUpgrade = false;
|
|
|
Date renewExpiryTime = null;
|
|
|
//若是续费升级 记录此时续费升级的过期时间
|
|
|
- if (relationCodePoints != null && relationCodePoints <= codePoints && !ObjectUtil.equal(relationCodeSkuId, skuId)) {
|
|
|
+ if (thisRelationCodePoints != null && thisRelationCodePoints <= codePoints && !ObjectUtil.equal(thisCodeOriSkuId, skuId)) {
|
|
|
saveClaudeCodeRenewExpiryRecord(orderId, relationUserId, relationId, expiryTime, skuId);
|
|
|
if (sku.getDays() != null) {
|
|
|
renewExpiryTime = DateUtil.offsetDay(DateTime.now(), sku.getDays());
|
|
|
- }else {
|
|
|
+ } else {
|
|
|
renewExpiryTime = DateUtil.offsetMonth(DateTime.now(), sku.getMonths());
|
|
|
}
|
|
|
isUpgrade = true;
|
|
|
}
|
|
|
+ relationMapper.updateById(relation);
|
|
|
+ //清缓存
|
|
|
+ if (orderType == 2) {
|
|
|
+ invalidateUserCache(relationUserId);
|
|
|
+ }
|
|
|
+ generateOrUpdateClaudeCodeUser(relationUserId, relationId, codePoints, codeCreditRecovery, expiryTime, isUpgrade, skuId, renewExpiryTime);
|
|
|
+ //生成claude code或更新用户套餐
|
|
|
ClaudeCodeResp codeUserPackage = createOrUpdateClaudeCodeUserPackage(relation.getUserId(), sku.getSpecVal(), codePoints, codeCreditRecovery, expiryTime);
|
|
|
- if (codeUserPackage.getSuccess()) {
|
|
|
- //设置车位的套餐
|
|
|
- relation.setCodePoints(codePoints);
|
|
|
- relation.setCodeCreditRecovery(codeCreditRecovery);
|
|
|
- relation.setCodeSkuId(skuId);
|
|
|
- relationMapper.updateById(relation);
|
|
|
- if (orderType == 2) {
|
|
|
- invalidateUserCache(relationUserId);
|
|
|
- }
|
|
|
- generateOrUpdateClaudeCodeUser(relationUserId, relationId, codePoints, codeCreditRecovery, expiryTime, isUpgrade, skuId, renewExpiryTime);
|
|
|
+ if (!codeUserPackage.getSuccess()) {
|
|
|
+ log.info("更新 claude code 用户:{}套餐数据失败", userId);
|
|
|
+ //重试更新code userInfo数据
|
|
|
+ setClaudeCodeUserRetryUpdateInfo(relationId);
|
|
|
}
|
|
|
} catch (Exception e) {
|
|
|
log.error("生成或更新claude code用户:{}套餐skuId:{} 失败,error_info:{}", userId, skuId, StringUtil.getErrorText(e));
|
|
|
+ //重试更新code userInfo数据
|
|
|
+ setClaudeCodeUserRetryUpdateInfo(relationId);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
@@ -349,6 +354,18 @@ public class ClaudeCodeServiceImpl implements ClaudeCodeService {
|
|
|
specVal = renewSku.getSpecVal();
|
|
|
}
|
|
|
}
|
|
|
+ //是否需要重试更新 cladueCode userInfo信息
|
|
|
+ if (claudeCodeUser.getIsRetry()) {
|
|
|
+ try {
|
|
|
+ ClaudeCodeResp codeUserPackage = createOrUpdateClaudeCodeUserPackage(claudeCodeUser.getUserId(), specVal, claudeCodeUser.getCodePoints(), claudeCodeUser.getCodeCreditRecovery(), claudeCodeUser.getExpiryTime());
|
|
|
+ if (codeUserPackage.getSuccess()) {
|
|
|
+ claudeCodeUser.setIsRetry(Boolean.FALSE);
|
|
|
+ claudeCodeUserMapper.updateById(claudeCodeUser);
|
|
|
+ }
|
|
|
+ } catch (Exception e) {
|
|
|
+
|
|
|
+ }
|
|
|
+ }
|
|
|
return ClaudeCodeUserInfoView.builder()
|
|
|
.planName(specVal)
|
|
|
.relationId(claudeCodeUser.getRelationId())
|
|
|
@@ -454,4 +471,15 @@ public class ClaudeCodeServiceImpl implements ClaudeCodeService {
|
|
|
claudeCodeUserRenewExpiryRecordMapper.insert(renewExpiryRecord);
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * claude code用户信息重试更新信息
|
|
|
+ */
|
|
|
+ public void setClaudeCodeUserRetryUpdateInfo(Long relationId) {
|
|
|
+ ClaudeCodeUser claudeCodeUser = claudeCodeUserMapper.selectOne(Wrappers.lambdaQuery(ClaudeCodeUser.class).eq(ClaudeCodeUser::getRelationId, relationId).last("limit 1"));
|
|
|
+ if (claudeCodeUser != null) {
|
|
|
+ claudeCodeUser.setIsRetry(Boolean.TRUE);
|
|
|
+ claudeCodeUserMapper.updateById(claudeCodeUser);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
}
|