|
|
@@ -14,6 +14,8 @@ import com.cyksj.common.exception.BusinessRuntimeException;
|
|
|
import com.cyksj.common.util.Jsons;
|
|
|
import com.cyksj.common.util.StringUtil;
|
|
|
import com.cyksj.mapper.*;
|
|
|
+import com.cyksj.mapper.claudecode.ClaudeCodeUserResetRecordMapper;
|
|
|
+import com.cyksj.mapper.claudecode.ClaudeCodeUserCreditCardRecordMapper;
|
|
|
import com.cyksj.model.entity.*;
|
|
|
import com.cyksj.model.manage.views.GroupsRelationView;
|
|
|
import com.cyksj.model.request.ClaudeCodeApiKeysReq;
|
|
|
@@ -68,6 +70,10 @@ public class ClaudeCodeServiceImpl implements ClaudeCodeService {
|
|
|
|
|
|
private final OrderDonMapper orderDonMapper;
|
|
|
|
|
|
+ private final ClaudeCodeUserResetRecordMapper claudeCodeUserResetRecordMapper;
|
|
|
+
|
|
|
+ private final ClaudeCodeUserCreditCardRecordMapper claudeCodeUserCreditCardRecordMapper;
|
|
|
+
|
|
|
private final static String CLAUDE_CODE_API_PREFIX = "https://relay01.yhlxj.com/";
|
|
|
|
|
|
public static final String CLAUDE_CODE_API_ADMIN_KEY = "claudecodeyhlxjclaude";
|
|
|
@@ -561,7 +567,6 @@ public class ClaudeCodeServiceImpl implements ClaudeCodeService {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
-
|
|
|
/**
|
|
|
* claude code Post请求
|
|
|
*/
|
|
|
@@ -651,4 +656,106 @@ public class ClaudeCodeServiceImpl implements ClaudeCodeService {
|
|
|
return build;
|
|
|
}
|
|
|
|
|
|
+ @Override
|
|
|
+ public void resetUserCodePoints(Long userId, Integer resetType, Long operatorId, String operatorName, String resetReason) {
|
|
|
+ ClaudeCodeUser claudeCodeUser = claudeCodeUserMapper.selectOne(
|
|
|
+ Wrappers.<ClaudeCodeUser>lambdaQuery().eq(ClaudeCodeUser::getUserId, userId)
|
|
|
+ );
|
|
|
+
|
|
|
+ if (claudeCodeUser == null) {
|
|
|
+ throw new BusinessRuntimeException("用户不存在或未开通Claude Code服务");
|
|
|
+ }
|
|
|
+
|
|
|
+ Integer beforeCodePoints = claudeCodeUser.getCodePoints();
|
|
|
+ Integer afterCodePoints = claudeCodeUser.getOriCodePoints();
|
|
|
+
|
|
|
+ claudeCodeUser.setCodePoints(afterCodePoints);
|
|
|
+ claudeCodeUserMapper.updateById(claudeCodeUser);
|
|
|
+
|
|
|
+ ClaudeCodeUserResetRecord resetRecord = new ClaudeCodeUserResetRecord();
|
|
|
+ resetRecord.setUserId(userId);
|
|
|
+ resetRecord.setBeforeCodePoints(beforeCodePoints);
|
|
|
+ resetRecord.setAfterCodePoints(afterCodePoints);
|
|
|
+ resetRecord.setResetType(resetType);
|
|
|
+ resetRecord.setOperatorId(operatorId);
|
|
|
+ resetRecord.setOperatorName(operatorName);
|
|
|
+ resetRecord.setResetReason(resetReason);
|
|
|
+
|
|
|
+ claudeCodeUserResetRecordMapper.insert(resetRecord);
|
|
|
+
|
|
|
+ log.info("用户{}的积分已重置,操作人:{}", userId, operatorName);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void useCreditCard(Long userId, Integer addCodePoints, Integer cardType, String cardNumber, Long operatorId, String operatorName, String useReason) {
|
|
|
+ ClaudeCodeUser claudeCodeUser = claudeCodeUserMapper.selectOne(
|
|
|
+ Wrappers.<ClaudeCodeUser>lambdaQuery().eq(ClaudeCodeUser::getUserId, userId)
|
|
|
+ );
|
|
|
+
|
|
|
+ if (claudeCodeUser == null) {
|
|
|
+ throw new BusinessRuntimeException("用户不存在或未开通Claude Code服务");
|
|
|
+ }
|
|
|
+
|
|
|
+ Integer beforeCodePoints = claudeCodeUser.getCodePoints();
|
|
|
+ Integer afterCodePoints = beforeCodePoints + addCodePoints;
|
|
|
+
|
|
|
+ claudeCodeUser.setCodePoints(afterCodePoints);
|
|
|
+ claudeCodeUserMapper.updateById(claudeCodeUser);
|
|
|
+
|
|
|
+ ClaudeCodeUserCreditCardRecord creditCardRecord = new ClaudeCodeUserCreditCardRecord();
|
|
|
+ creditCardRecord.setUserId(userId);
|
|
|
+ creditCardRecord.setBeforeCodePoints(beforeCodePoints);
|
|
|
+ creditCardRecord.setAddCodePoints(addCodePoints);
|
|
|
+ creditCardRecord.setAfterCodePoints(afterCodePoints);
|
|
|
+ creditCardRecord.setCardType(cardType);
|
|
|
+ creditCardRecord.setCardNumber(cardNumber);
|
|
|
+ creditCardRecord.setOperatorId(operatorId);
|
|
|
+ creditCardRecord.setOperatorName(operatorName);
|
|
|
+ creditCardRecord.setUseReason(useReason);
|
|
|
+
|
|
|
+ claudeCodeUserCreditCardRecordMapper.insert(creditCardRecord);
|
|
|
+
|
|
|
+ log.info("用户{}使用积分卡增加{}积分,操作人:{}", userId, addCodePoints, operatorName);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public boolean useResetCount(Long userId) {
|
|
|
+ List<Long> userIdList = userBindRelationService.getRelationUserIdList(userId, null);
|
|
|
+
|
|
|
+ ClaudeCodeUser claudeCodeUser = claudeCodeUserMapper.selectOne(
|
|
|
+ Wrappers.lambdaQuery(ClaudeCodeUser.class)
|
|
|
+ .in(ClaudeCodeUser::getUserId, userIdList)
|
|
|
+ .last("limit 1")
|
|
|
+ );
|
|
|
+
|
|
|
+ if (claudeCodeUser == null) {
|
|
|
+ throw new BusinessRuntimeException("用户未开通Claude Code服务");
|
|
|
+ }
|
|
|
+
|
|
|
+ Integer currentResetCount = claudeCodeUser.getResetCount();
|
|
|
+ if (currentResetCount == null || currentResetCount <= 0) {
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+
|
|
|
+ try {
|
|
|
+ claudeCodeUser.setResetCount(currentResetCount - 1);
|
|
|
+ int updateResult = claudeCodeUserMapper.update(claudeCodeUser,
|
|
|
+ Wrappers.lambdaUpdate(ClaudeCodeUser.class)
|
|
|
+ .eq(ClaudeCodeUser::getId, claudeCodeUser.getId())
|
|
|
+ .eq(ClaudeCodeUser::getResetCount, currentResetCount)
|
|
|
+ );
|
|
|
+
|
|
|
+ if (updateResult > 0) {
|
|
|
+ log.info("用户{}成功使用重置次数,剩余次数:{}", userId, currentResetCount - 1);
|
|
|
+ return true;
|
|
|
+ } else {
|
|
|
+ log.warn("用户{}使用重置次数失败,可能是并发操作", userId);
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ } catch (Exception e) {
|
|
|
+ log.error("用户{}使用重置次数异常", userId, e);
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
}
|