Procházet zdrojové kódy

Merge branch 'codex_deduct' into pre

zoujiajian před 3 měsíci
rodič
revize
aed9aec856
17 změnil soubory, kde provedl 147 přidání a 54 odebrání
  1. 2 0
      netflix-dao/src/main/java/com/cyksj/model/entity/CodexDeductRecord.java
  2. 6 0
      netflix-dao/src/main/java/com/cyksj/model/response/CodexDeductResp.java
  3. 15 1
      netflix-service/src/main/java/com/cyksj/server/recharge/impl/GptProxyRechargeServiceImpl.java
  4. 1 1
      netflix-service/src/main/java/com/cyksj/service/codex/CodexService.java
  5. 28 11
      netflix-service/src/main/java/com/cyksj/service/codex/impl/CodexServiceImpl.java
  6. 13 10
      netflix-service/src/main/java/com/cyksj/service/mange/gpt/impl/GptRechargeServiceImpl.java
  7. 23 17
      netflix-service/src/main/java/com/cyksj/service/order/impl/OrderDonServiceImpl.java
  8. 5 2
      netflix-service/src/main/java/com/cyksj/service/recharge/impl/AfDianRechargeServiceImpl.java
  9. 7 1
      netflix-service/src/main/java/com/cyksj/service/recharge/impl/CdkRechargeServiceImpl.java
  10. 5 2
      netflix-service/src/main/java/com/cyksj/service/recharge/impl/ChongAfDianRechargeServiceImpl.java
  11. 7 1
      netflix-service/src/main/java/com/cyksj/service/recharge/impl/GoAfDianRechargeServiceImpl.java
  12. 7 1
      netflix-service/src/main/java/com/cyksj/service/recharge/impl/GuofenzaixianRechargeServiceImpl.java
  13. 7 1
      netflix-service/src/main/java/com/cyksj/service/recharge/impl/HiBoyRechargeServiceImpl.java
  14. 7 1
      netflix-service/src/main/java/com/cyksj/service/recharge/impl/PlusAfDianRechargeServiceImpl.java
  15. 4 1
      netflix-service/src/main/java/com/cyksj/service/recharge/impl/SancRechargeServiceImpl.java
  16. 7 1
      netflix-service/src/main/java/com/cyksj/service/recharge/impl/YearAfDianRechargeServiceImpl.java
  17. 3 3
      netflix-web/src/main/java/com/cyksj/web/controller/codex/CodexController.java

+ 2 - 0
netflix-dao/src/main/java/com/cyksj/model/entity/CodexDeductRecord.java

@@ -25,4 +25,6 @@ public class CodexDeductRecord extends BaseEntity{
 	 * 抵扣状态 默认false
 	 */
 	private Boolean status;
+
+    private Integer extendsDays;
 }

+ 6 - 0
netflix-dao/src/main/java/com/cyksj/model/response/CodexDeductResp.java

@@ -20,4 +20,10 @@ public class CodexDeductResp {
 	 * 是否可抵扣
 	 */
 	private Boolean isDeduct = Boolean.TRUE;
+
+
+    /**
+     * 超出部分可延长天数
+     */
+    private Integer extendsDays;
 }

+ 15 - 1
netflix-service/src/main/java/com/cyksj/server/recharge/impl/GptProxyRechargeServiceImpl.java

@@ -79,6 +79,8 @@ public class GptProxyRechargeServiceImpl implements GptProxyRechargeService {
 
     private final GuofenzaixianRechargeService guofenzaixianRechargeService;
 
+    private final GptUserRechargeNumRecordMapper gptUserRechargeNumRecordMapper;
+
 	private static final GlobalThreadPoolTaskExecutor TASK_EXECUTOR = GlobalThreadPoolTaskExecutor.getInstance();
 
 	private HttpRequest createBaseRequest(String url) {
@@ -257,6 +259,9 @@ public class GptProxyRechargeServiceImpl implements GptProxyRechargeService {
 		if (relation == null) {
 			throw BusinessRuntimeException.getInstance("车票不存在");
 		}
+        if (relation.getRechargeStatus() != null && relation.getRechargeStatus() == GroupsRelation.RechargeStatus.recharge_error) {
+            throw BusinessRuntimeException.getInstance("充值失败,清联系客服");
+        }
 		String userAccount = relation.getAccount();
 		GroupsTrips groupsTrips = groupsMapper.selectById(relation.getGroupsId());
 		GoodsDonSku sku = skuMapper.selectById(groupsTrips.getSkuId());
@@ -269,7 +274,16 @@ public class GptProxyRechargeServiceImpl implements GptProxyRechargeService {
 		if (rechargeRemainNum == null || rechargeRemainNum <= 0) {
 			throw BusinessRuntimeException.getInstance("剩余可代充次数为0");
 		}
-		if (relation.getRechargeStatus() == GroupsRelation.RechargeStatus.recharging) {
+        //近一个小时成功
+        Integer successHour = gptUserRechargeNumRecordMapper.selectCount(Wrappers.lambdaQuery(GptUserRechargeNumRecord.class)
+                .eq(GptUserRechargeNumRecord::getRelationId, relationId)
+                .in(GptUserRechargeNumRecord::getUserId, userIdList)
+                .gt(GptUserRechargeNumRecord::getCreatedTime, DateUtil.offsetHour(DateTime.now(), -1)));
+        if (successHour > 0) {
+            throw BusinessRuntimeException.getInstance("近一个小时只可充值一次");
+        }
+
+        if (relation.getRechargeStatus() == GroupsRelation.RechargeStatus.recharging) {
 			throw BusinessRuntimeException.getInstance("确认充值中");
 		}
 		if (relation.getRechargeStatus() == GroupsRelation.RechargeStatus.recharge_error) {

+ 1 - 1
netflix-service/src/main/java/com/cyksj/service/codex/CodexService.java

@@ -61,7 +61,7 @@ public interface CodexService {
 
     ClaudeCodeResp createOrUpdateCodexUserPackageApi(Long userId, String planName, Integer openaiDailyLimit, Integer openaiQuota, Date expiryTime) throws Exception;
 
-    CodexDeductResp getDeductMoney(Long userId, Long relationId);
+    CodexDeductResp getDeductMoney(Long userId, Long relationId, Long upgradeSkuId);
 
     OrderDon deductSubmitOrder(CodexUpgradePayReq payReq) throws Exception;
 

+ 28 - 11
netflix-service/src/main/java/com/cyksj/service/codex/impl/CodexServiceImpl.java

@@ -158,7 +158,7 @@ public class CodexServiceImpl implements CodexService {
 	}
 
 	@Override
-	public CodexDeductResp getDeductMoney(Long userId, Long relationId) {
+    public CodexDeductResp getDeductMoney(Long userId, Long relationId, Long upgradeSkuId) {
 		List<Long> userIdList = userBindRelationService.getRelationUserIdList(userId, null);
 		CodexDeductResp codexDeductResp = new CodexDeductResp();
 		List<Long> sendCodexSkuIds = skuMapper.selectList(Wrappers.lambdaQuery(GoodsDonSku.class).eq(GoodsDonSku::getGoodsId, Constant.CLAUDE_CODE_GOODS_ID).eq(GoodsDonSku::getIsCodex, Boolean.TRUE)).stream().map(GoodsDonSku::getId).collect(Collectors.toList());
@@ -174,6 +174,11 @@ public class CodexServiceImpl implements CodexService {
 				return codexDeductResp;
 			}
 		}
+        GoodsDonSku upgradeSku = skuMapper.selectById(upgradeSkuId);
+        if (upgradeSku.getGoodsId() != Constant.CLAUDE_CODE_GOODS_ID) {
+            codexDeductResp.setDeductMoney(BigDecimal.ZERO);
+            return codexDeductResp;
+        }
 		MapBuilder builder = MapUtils.builder();
 		if (relationId != null) {
 			builder.field(GroupsRelationMirrorView::getId, relationId);
@@ -183,16 +188,14 @@ public class CodexServiceImpl implements CodexService {
 				.field(GroupsRelationMirrorView::getUserId, userIdList).op(Operator.InList)
 				.field(GroupsRelationMirrorView::getExpiryTime, DateTime.now()).op(Operator.GreaterThan)
 				.build());
-		BigDecimal deductMoney;
 		if (groupsRelationMirrorView == null || groupsRelationMirrorView.getExpiryTime().before(DateTime.now())) {
-			deductMoney = BigDecimal.ZERO;
-		} else {
+            codexDeductResp.setDeductMoney(BigDecimal.ZERO);
+        } else {
 			relationId = groupsRelationMirrorView.getId();
 			CodexUser codexUser = codexUserMapper.selectOne(Wrappers.lambdaQuery(CodexUser.class).eq(CodexUser::getRelationId, relationId).last("limit 1"));
 			Assert.notNull(codexUser, "系统异常,请联系客服");
-			deductMoney = getFinalDeductMoney(relationId, groupsRelationMirrorView.getSkuId(), codexUser.getRenewSkuId(), codexUser.getRenewOrderId(), codexUser.getRenewExpiryTime(), groupsRelationMirrorView.getStartTime(), groupsRelationMirrorView.getExpiryTime(), DateTime.now(), userIdList);
+            codexDeductResp = getFinalDeductMoney(relationId, groupsRelationMirrorView.getSkuId(), codexUser.getRenewSkuId(), codexUser.getRenewOrderId(), codexUser.getRenewExpiryTime(), groupsRelationMirrorView.getStartTime(), groupsRelationMirrorView.getExpiryTime(), DateTime.now(), userIdList, upgradeSku);
 		}
-		codexDeductResp.setDeductMoney(deductMoney);
 		return codexDeductResp;
 	}
 
@@ -202,13 +205,14 @@ public class CodexServiceImpl implements CodexService {
 		Long userId = payReq.getUserId();
 		//codex 车票id
 		Long relationId = payReq.getRelationId();
-		CodexDeductResp codexDeductResp = getDeductMoney(userId, relationId);
+        CodexDeductResp codexDeductResp = getDeductMoney(userId, relationId, payReq.getSkuId());
 		if (!codexDeductResp.getIsDeduct()) {
 			throw BusinessRuntimeException.getInstance("你存在claude code 无法抵扣");
 		}
 		//抵扣金额
 		BigDecimal deductMoney = codexDeductResp.getDeductMoney();
-		Long skuId = payReq.getSkuId();
+        Integer extendsDays = codexDeductResp.getExtendsDays();
+        Long skuId = payReq.getSkuId();
 
 		GoodsDonSku sku = skuMapper.selectById(skuId);
 		if (sku == null || sku.getGoodsId() != Constant.CLAUDE_CODE_GOODS_ID || !sku.getIsCodex()) {
@@ -279,6 +283,7 @@ public class CodexServiceImpl implements CodexService {
 			codexDeductRecord.setCcRelationId(ccRelationId);
 			codexDeductRecord.setOrderId(orderDon.getId());
 			codexDeductRecord.setRelationId(relationId);
+            codexDeductRecord.setExtendsDays(extendsDays);
 			codexDeductRecordMapper.insert(codexDeductRecord);
 		} finally {
 			if (redisService.hasKey(cacheKye)) {
@@ -472,7 +477,7 @@ public class CodexServiceImpl implements CodexService {
 		return relation;
 	}
 
-	public BigDecimal getFinalDeductMoney(Long relationId, Long relationSkuId, Long renewSkuId, Long renewOrderId, Date renewExpiryTime, Date relationStartTime, Date relationExpiryTime, DateTime now, List<Long> userIdList) {
+    public CodexDeductResp getFinalDeductMoney(Long relationId, Long relationSkuId, Long renewSkuId, Long renewOrderId, Date renewExpiryTime, Date relationStartTime, Date relationExpiryTime, DateTime now, List<Long> userIdList, GoodsDonSku upgradeSku) {
 		BigDecimal deductMoney = BigDecimal.ZERO;
 		//一个月当30天算单价 往上取整
 		//续费规格
@@ -563,13 +568,25 @@ public class CodexServiceImpl implements CodexService {
 
 			}
 		}
-		if (relationExpiryTime.after(now)) {
+        CodexDeductResp codexDeductResp = new CodexDeductResp();
+        if (relationExpiryTime.after(now)) {
 			//该车票抵扣金额
 			BigDecimal deductMoneyFromTicket = getDeductMoneyFromTicket(relationId, userIdList, relationSkuId, now, relationStartTime, relationExpiryTime);
 			deductMoney = deductMoney.add(deductMoneyFromTicket);
 		}
+        //超出可抵扣的金额 直接返回
+        if (deductMoney.compareTo(upgradeSku.getPrice()) >= 0) {
+            BigDecimal overMoney = deductMoney.subtract(upgradeSku.getPrice());
+            //超过抵扣金额可换延长会员多少天
+            //每天单价
+            BigDecimal daySingle = upgradeSku.getPrice().divide(BigDecimal.valueOf(upgradeSku.getMonths())).divide(BigDecimal.valueOf(30), 0, RoundingMode.DOWN);
+            //超出部分可换取多少天 低于每天单价为0天
+            BigDecimal extendsDays = overMoney.divide(daySingle, 0, RoundingMode.UP);
+            codexDeductResp.setExtendsDays(extendsDays.intValue());
+        }
 		log.info("codex车票id:{}最终到期时间为:{}车票可返回 抵扣金额:{}", relationId, DateUtil.format(relationExpiryTime, "yyyy-MM-dd HH:mm:ss"), deductMoney);
-		return deductMoney;
+        codexDeductResp.setDeductMoney(deductMoney);
+		return codexDeductResp;
 	}
 
 	private Retryer<ClaudeCodeResp> getApiRetryer(int wait, int stop) {

+ 13 - 10
netflix-service/src/main/java/com/cyksj/service/mange/gpt/impl/GptRechargeServiceImpl.java

@@ -584,16 +584,19 @@ public class GptRechargeServiceImpl implements GptRechargeService {
 				if (rechargeStatus == GroupsRelation.RechargeStatus.recharge_error) {
 					rechargeErrorInfo = result;
 				}
-				relationMapper.update(null, Wrappers.lambdaUpdate(GroupsRelation.class)
-						.set(rechargeStatus == GroupsRelation.RechargeStatus.recharge_error, GroupsRelation::getRechargeRemainNum, rechargeRemainNum + 1)
-						.set(GroupsRelation::getRechargeStatus, rechargeStatus)
-						.set(expiryTime != null, GroupsRelation::getStartTime, startTime)
-						.set(expiryTime != null, GroupsRelation::getExpiryTime, expiryTime)
-						.set(StrUtil.isNotEmpty(rechargeErrorInfo), GroupsRelation::getRechargeErrorInfo, rechargeErrorInfo)
-						.eq(GroupsRelation::getId, relation.getId())
-						.le(GroupsRelation::getRechargeRemainNum, relation.getRechargeNum())
-						.eq(GroupsRelation::getRechargeStatus, GroupsRelation.RechargeStatus.recharging));
-				//记录代充记录
+                int update = relationMapper.update(null, Wrappers.lambdaUpdate(GroupsRelation.class)
+                        .set(rechargeStatus == GroupsRelation.RechargeStatus.recharge_error, GroupsRelation::getRechargeRemainNum, rechargeRemainNum + 1)
+                        .set(GroupsRelation::getRechargeStatus, rechargeStatus)
+                        .set(expiryTime != null, GroupsRelation::getStartTime, startTime)
+                        .set(expiryTime != null, GroupsRelation::getExpiryTime, expiryTime)
+                        .set(StrUtil.isNotEmpty(rechargeErrorInfo), GroupsRelation::getRechargeErrorInfo, rechargeErrorInfo)
+                        .eq(GroupsRelation::getId, relation.getId())
+                        .le(GroupsRelation::getRechargeRemainNum, relation.getRechargeNum())
+                        .eq(GroupsRelation::getRechargeStatus, GroupsRelation.RechargeStatus.recharging));
+                if (update == 0) {
+                    return;
+                }
+                //记录代充记录
 				if (rechargeStatus == GroupsRelation.RechargeStatus.complete) {
 					String remark = "自动代充";
 					if (StrUtil.isNotBlank(relation.getOperator())) {

+ 23 - 17
netflix-service/src/main/java/com/cyksj/service/order/impl/OrderDonServiceImpl.java

@@ -3197,23 +3197,6 @@ public class OrderDonServiceImpl extends ServiceImpl<OrderDonMapper, OrderDon> i
 			return;
 		}
 
-		//codex 抵扣
-		CodexDeductRecord codexDeductRecord = codexDeductRecordMapper.selectOne(Wrappers.lambdaQuery(CodexDeductRecord.class).eq(CodexDeductRecord::getOrderId, orderDon.getId()).last("limit 1"));
-		if (codexDeductRecord != null) {
-			//codex 抵扣车票id
-			Long relationId = codexDeductRecord.getRelationId();
-			//清除codex 抵扣的车票
-			groupRelationClearService.clearTicket(groupsRelationMapper.selectById(relationId), UserTicketClearedRecord.Source.codex_deduct);
-			//是否需要清除cc 无赠送codex
-			Long ccRelationId = codexDeductRecord.getCcRelationId();
-			if (ccRelationId != null) {
-				//清除codex 抵扣的车票
-				groupRelationClearService.clearTicket(groupsRelationMapper.selectById(ccRelationId), UserTicketClearedRecord.Source.codex_deduct);
-			}
-			codexDeductRecord.setStatus(Boolean.TRUE);
-			codexDeductRecordMapper.updateById(codexDeductRecord);
-		}
-
 		if (orderDon.getIsNoLogin() != null && orderDon.getIsNoLogin()) {
 			orderDon.setStatus(OrderDon.Status.hasPayment);
 		}
@@ -3480,6 +3463,29 @@ public class OrderDonServiceImpl extends ServiceImpl<OrderDonMapper, OrderDon> i
 			}
 		}
 
+        //codex 抵扣
+        CodexDeductRecord codexDeductRecord = codexDeductRecordMapper.selectOne(Wrappers.lambdaQuery(CodexDeductRecord.class).eq(CodexDeductRecord::getOrderId, orderDon.getId()).last("limit 1"));
+        if (codexDeductRecord != null) {
+            //codex 抵扣车票id
+            Long relationId = codexDeductRecord.getRelationId();
+            //清除codex 抵扣的车票
+            groupRelationClearService.clearTicket(groupsRelationMapper.selectById(relationId), UserTicketClearedRecord.Source.codex_deduct);
+            //是否需要清除cc 无赠送codex
+            Long ccRelationId = codexDeductRecord.getCcRelationId();
+            if (ccRelationId != null) {
+                //清除codex 抵扣的车票
+                groupRelationClearService.clearTicket(groupsRelationMapper.selectById(ccRelationId), UserTicketClearedRecord.Source.codex_deduct);
+            }
+            codexDeductRecord.setStatus(Boolean.TRUE);
+            //延长
+            if (codexDeductRecord.getExtendsDays() != null && codexDeductRecord.getExtendsDays() > 0) {
+                GroupsRelation newRelation = groupsRelationMapper.selectById(orderDon.getRelationId());
+                newRelation.setExpiryTime(DateUtil.offsetDay(newRelation.getExpiryTime(), codexDeductRecord.getExtendsDays()));
+                groupsRelationMapper.updateById(newRelation);
+            }
+            codexDeductRecordMapper.updateById(codexDeductRecord);
+        }
+
 		if (orderDon.getOrderType() == 1 && sku.getIsDown()) {
 			try {
 				GroupsRelation relation = groupsRelationMapper.selectById(orderDon.getRelationId());

+ 5 - 2
netflix-service/src/main/java/com/cyksj/service/recharge/impl/AfDianRechargeServiceImpl.java

@@ -312,8 +312,11 @@ public class AfDianRechargeServiceImpl implements AfDianRechargeService {
 			if (rechargeStatus == GroupsRelation.RechargeStatus.recharge_error) {
 				rechargeErrorInfo = result;
 			}
-			relationMapper.update(null, Wrappers.lambdaUpdate(GroupsRelation.class).set(rechargeStatus == GroupsRelation.RechargeStatus.recharge_error, GroupsRelation::getRechargeRemainNum, rechargeRemainNum + 1).set(GroupsRelation::getRechargeStatus, rechargeStatus).set(expiryTime != null, GroupsRelation::getStartTime, startTime).set(expiryTime != null, GroupsRelation::getExpiryTime, expiryTime).set(StrUtil.isNotEmpty(rechargeErrorInfo), GroupsRelation::getRechargeErrorInfo, rechargeErrorInfo).eq(GroupsRelation::getId, relation.getId()).le(GroupsRelation::getRechargeRemainNum, relation.getRechargeNum()).eq(GroupsRelation::getRechargeStatus, GroupsRelation.RechargeStatus.recharging));
-			//记录代充记录
+            int update = relationMapper.update(null, Wrappers.lambdaUpdate(GroupsRelation.class).set(rechargeStatus == GroupsRelation.RechargeStatus.recharge_error, GroupsRelation::getRechargeRemainNum, rechargeRemainNum + 1).set(GroupsRelation::getRechargeStatus, rechargeStatus).set(expiryTime != null, GroupsRelation::getStartTime, startTime).set(expiryTime != null, GroupsRelation::getExpiryTime, expiryTime).set(StrUtil.isNotEmpty(rechargeErrorInfo), GroupsRelation::getRechargeErrorInfo, rechargeErrorInfo).eq(GroupsRelation::getId, relation.getId()).le(GroupsRelation::getRechargeRemainNum, relation.getRechargeNum()).eq(GroupsRelation::getRechargeStatus, GroupsRelation.RechargeStatus.recharging));
+            if (update == 0) {
+                return;
+            }
+            //记录代充记录
 			if (rechargeStatus == GroupsRelation.RechargeStatus.complete) {
 				String remark = "自动代充";
 				if (StrUtil.isNotBlank(relation.getOperator())) {

+ 7 - 1
netflix-service/src/main/java/com/cyksj/service/recharge/impl/CdkRechargeServiceImpl.java

@@ -190,6 +190,9 @@ public class CdkRechargeServiceImpl implements CdkRechargeService {
      * 更新代充状态
      */
     private void resetGroupsRelationRechargeStatus(GroupsRelation relation, Boolean taskStatus, String result) {
+        //重新获取一遍
+        relation = relationMapper.selectById(relation.getId());
+
         GroupsRelation.RechargeStatus rechargeStatus;
         if (taskStatus) {
             rechargeStatus = GroupsRelation.RechargeStatus.complete;
@@ -230,7 +233,10 @@ public class CdkRechargeServiceImpl implements CdkRechargeService {
             if (rechargeStatus == GroupsRelation.RechargeStatus.recharge_error) {
                 rechargeErrorInfo = result;
             }
-            relationMapper.update(null, Wrappers.lambdaUpdate(GroupsRelation.class).set(rechargeStatus == GroupsRelation.RechargeStatus.recharge_error, GroupsRelation::getRechargeRemainNum, rechargeRemainNum + rechargeNum).set(GroupsRelation::getRechargeStatus, rechargeStatus).set(expiryTime != null, GroupsRelation::getStartTime, startTime).set(expiryTime != null, GroupsRelation::getExpiryTime, expiryTime).set(StrUtil.isNotEmpty(rechargeErrorInfo), GroupsRelation::getRechargeErrorInfo, rechargeErrorInfo).eq(GroupsRelation::getId, relation.getId()).le(GroupsRelation::getRechargeRemainNum, relation.getRechargeNum()).eq(GroupsRelation::getRechargeStatus, GroupsRelation.RechargeStatus.recharging));
+            int update = relationMapper.update(null, Wrappers.lambdaUpdate(GroupsRelation.class).set(rechargeStatus == GroupsRelation.RechargeStatus.recharge_error, GroupsRelation::getRechargeRemainNum, rechargeRemainNum + rechargeNum).set(GroupsRelation::getRechargeStatus, rechargeStatus).set(expiryTime != null, GroupsRelation::getStartTime, startTime).set(expiryTime != null, GroupsRelation::getExpiryTime, expiryTime).set(StrUtil.isNotEmpty(rechargeErrorInfo), GroupsRelation::getRechargeErrorInfo, rechargeErrorInfo).eq(GroupsRelation::getId, relation.getId()).le(GroupsRelation::getRechargeRemainNum, relation.getRechargeNum()).eq(GroupsRelation::getRechargeStatus, GroupsRelation.RechargeStatus.recharging));
+            if (update == 0) {
+                return;
+            }
             //记录代充记录
             if (rechargeStatus == GroupsRelation.RechargeStatus.complete) {
                 String remark = "自动代充";

+ 5 - 2
netflix-service/src/main/java/com/cyksj/service/recharge/impl/ChongAfDianRechargeServiceImpl.java

@@ -261,8 +261,11 @@ public class ChongAfDianRechargeServiceImpl implements ChongAfDianRechargeServic
 			if (rechargeStatus == GroupsRelation.RechargeStatus.recharge_error) {
 				rechargeErrorInfo = result;
 			}
-			relationMapper.update(null, Wrappers.lambdaUpdate(GroupsRelation.class).set(rechargeStatus == GroupsRelation.RechargeStatus.recharge_error, GroupsRelation::getRechargeRemainNum, rechargeRemainNum + 1).set(GroupsRelation::getRechargeStatus, rechargeStatus).set(expiryTime != null, GroupsRelation::getStartTime, startTime).set(expiryTime != null, GroupsRelation::getExpiryTime, expiryTime).set(StrUtil.isNotEmpty(rechargeErrorInfo), GroupsRelation::getRechargeErrorInfo, rechargeErrorInfo).eq(GroupsRelation::getId, relation.getId()).le(GroupsRelation::getRechargeRemainNum, relation.getRechargeNum()).eq(GroupsRelation::getRechargeStatus, GroupsRelation.RechargeStatus.recharging));
-			//记录代充记录
+            int update = relationMapper.update(null, Wrappers.lambdaUpdate(GroupsRelation.class).set(rechargeStatus == GroupsRelation.RechargeStatus.recharge_error, GroupsRelation::getRechargeRemainNum, rechargeRemainNum + 1).set(GroupsRelation::getRechargeStatus, rechargeStatus).set(expiryTime != null, GroupsRelation::getStartTime, startTime).set(expiryTime != null, GroupsRelation::getExpiryTime, expiryTime).set(StrUtil.isNotEmpty(rechargeErrorInfo), GroupsRelation::getRechargeErrorInfo, rechargeErrorInfo).eq(GroupsRelation::getId, relation.getId()).le(GroupsRelation::getRechargeRemainNum, relation.getRechargeNum()).eq(GroupsRelation::getRechargeStatus, GroupsRelation.RechargeStatus.recharging));
+            if (update == 0) {
+                return;
+            }
+            //记录代充记录
 			if (rechargeStatus == GroupsRelation.RechargeStatus.complete) {
 				String remark = "自动代充";
 				if (StrUtil.isNotBlank(relation.getOperator())) {

+ 7 - 1
netflix-service/src/main/java/com/cyksj/service/recharge/impl/GoAfDianRechargeServiceImpl.java

@@ -136,6 +136,9 @@ public class GoAfDianRechargeServiceImpl implements GoAfDianRechargeService {
      * 更新代充状态
      */
     private void resetGroupsRelationRechargeStatus(GroupsRelation relation, Boolean taskStatus, String result) {
+        //重新获取一遍
+        relation = relationMapper.selectById(relation.getId());
+
         GroupsRelation.RechargeStatus rechargeStatus;
         if (taskStatus) {
             rechargeStatus = GroupsRelation.RechargeStatus.complete;
@@ -176,7 +179,10 @@ public class GoAfDianRechargeServiceImpl implements GoAfDianRechargeService {
             if (rechargeStatus == GroupsRelation.RechargeStatus.recharge_error) {
                 rechargeErrorInfo = result;
             }
-            relationMapper.update(null, Wrappers.lambdaUpdate(GroupsRelation.class).set(rechargeStatus == GroupsRelation.RechargeStatus.recharge_error, GroupsRelation::getRechargeRemainNum, rechargeRemainNum + rechargeNum).set(GroupsRelation::getRechargeStatus, rechargeStatus).set(expiryTime != null, GroupsRelation::getStartTime, startTime).set(expiryTime != null, GroupsRelation::getExpiryTime, expiryTime).set(StrUtil.isNotEmpty(rechargeErrorInfo), GroupsRelation::getRechargeErrorInfo, rechargeErrorInfo).eq(GroupsRelation::getId, relation.getId()).le(GroupsRelation::getRechargeRemainNum, relation.getRechargeNum()).eq(GroupsRelation::getRechargeStatus, GroupsRelation.RechargeStatus.recharging));
+            int update = relationMapper.update(null, Wrappers.lambdaUpdate(GroupsRelation.class).set(rechargeStatus == GroupsRelation.RechargeStatus.recharge_error, GroupsRelation::getRechargeRemainNum, rechargeRemainNum + rechargeNum).set(GroupsRelation::getRechargeStatus, rechargeStatus).set(expiryTime != null, GroupsRelation::getStartTime, startTime).set(expiryTime != null, GroupsRelation::getExpiryTime, expiryTime).set(StrUtil.isNotEmpty(rechargeErrorInfo), GroupsRelation::getRechargeErrorInfo, rechargeErrorInfo).eq(GroupsRelation::getId, relation.getId()).le(GroupsRelation::getRechargeRemainNum, relation.getRechargeNum()).eq(GroupsRelation::getRechargeStatus, GroupsRelation.RechargeStatus.recharging));
+            if (update == 0) {
+                return;
+            }
             //记录代充记录
             if (rechargeStatus == GroupsRelation.RechargeStatus.complete) {
                 String remark = "自动代充";

+ 7 - 1
netflix-service/src/main/java/com/cyksj/service/recharge/impl/GuofenzaixianRechargeServiceImpl.java

@@ -189,6 +189,9 @@ public class GuofenzaixianRechargeServiceImpl implements GuofenzaixianRechargeSe
      * 更新代充状态
      */
     private void resetGroupsRelationRechargeStatus(GroupsRelation relation, Boolean taskStatus, String result) {
+        //重新获取一遍
+        relation = relationMapper.selectById(relation.getId());
+
         GroupsRelation.RechargeStatus rechargeStatus;
         if (taskStatus) {
             rechargeStatus = GroupsRelation.RechargeStatus.complete;
@@ -229,7 +232,10 @@ public class GuofenzaixianRechargeServiceImpl implements GuofenzaixianRechargeSe
             if (rechargeStatus == GroupsRelation.RechargeStatus.recharge_error) {
                 rechargeErrorInfo = result;
             }
-            relationMapper.update(null, Wrappers.lambdaUpdate(GroupsRelation.class).set(rechargeStatus == GroupsRelation.RechargeStatus.recharge_error, GroupsRelation::getRechargeRemainNum, rechargeRemainNum + rechargeNum).set(GroupsRelation::getRechargeStatus, rechargeStatus).set(expiryTime != null, GroupsRelation::getStartTime, startTime).set(expiryTime != null, GroupsRelation::getExpiryTime, expiryTime).set(StrUtil.isNotEmpty(rechargeErrorInfo), GroupsRelation::getRechargeErrorInfo, rechargeErrorInfo).eq(GroupsRelation::getId, relation.getId()).le(GroupsRelation::getRechargeRemainNum, relation.getRechargeNum()).eq(GroupsRelation::getRechargeStatus, GroupsRelation.RechargeStatus.recharging));
+            int update = relationMapper.update(null, Wrappers.lambdaUpdate(GroupsRelation.class).set(rechargeStatus == GroupsRelation.RechargeStatus.recharge_error, GroupsRelation::getRechargeRemainNum, rechargeRemainNum + rechargeNum).set(GroupsRelation::getRechargeStatus, rechargeStatus).set(expiryTime != null, GroupsRelation::getStartTime, startTime).set(expiryTime != null, GroupsRelation::getExpiryTime, expiryTime).set(StrUtil.isNotEmpty(rechargeErrorInfo), GroupsRelation::getRechargeErrorInfo, rechargeErrorInfo).eq(GroupsRelation::getId, relation.getId()).le(GroupsRelation::getRechargeRemainNum, relation.getRechargeNum()).eq(GroupsRelation::getRechargeStatus, GroupsRelation.RechargeStatus.recharging));
+            if (update == 0) {
+                return;
+            }
             //记录代充记录
             if (rechargeStatus == GroupsRelation.RechargeStatus.complete) {
                 String remark = "自动代充";

+ 7 - 1
netflix-service/src/main/java/com/cyksj/service/recharge/impl/HiBoyRechargeServiceImpl.java

@@ -171,6 +171,9 @@ public class HiBoyRechargeServiceImpl implements HiBoyRechargeService {
      * 更新代充状态
      */
     private void resetGroupsRelationRechargeStatus(GroupsRelation relation, Boolean taskStatus, String result) {
+        //重新获取一遍
+        relation = relationMapper.selectById(relation.getId());
+
         GroupsRelation.RechargeStatus rechargeStatus;
         if (taskStatus) {
             rechargeStatus = GroupsRelation.RechargeStatus.complete;
@@ -211,7 +214,10 @@ public class HiBoyRechargeServiceImpl implements HiBoyRechargeService {
             if (rechargeStatus == GroupsRelation.RechargeStatus.recharge_error) {
                 rechargeErrorInfo = result;
             }
-            relationMapper.update(null, Wrappers.lambdaUpdate(GroupsRelation.class).set(rechargeStatus == GroupsRelation.RechargeStatus.recharge_error, GroupsRelation::getRechargeRemainNum, rechargeRemainNum + rechargeNum).set(GroupsRelation::getRechargeStatus, rechargeStatus).set(expiryTime != null, GroupsRelation::getStartTime, startTime).set(expiryTime != null, GroupsRelation::getExpiryTime, expiryTime).set(StrUtil.isNotEmpty(rechargeErrorInfo), GroupsRelation::getRechargeErrorInfo, rechargeErrorInfo).eq(GroupsRelation::getId, relation.getId()).le(GroupsRelation::getRechargeRemainNum, relation.getRechargeNum()).eq(GroupsRelation::getRechargeStatus, GroupsRelation.RechargeStatus.recharging));
+            int update = relationMapper.update(null, Wrappers.lambdaUpdate(GroupsRelation.class).set(rechargeStatus == GroupsRelation.RechargeStatus.recharge_error, GroupsRelation::getRechargeRemainNum, rechargeRemainNum + rechargeNum).set(GroupsRelation::getRechargeStatus, rechargeStatus).set(expiryTime != null, GroupsRelation::getStartTime, startTime).set(expiryTime != null, GroupsRelation::getExpiryTime, expiryTime).set(StrUtil.isNotEmpty(rechargeErrorInfo), GroupsRelation::getRechargeErrorInfo, rechargeErrorInfo).eq(GroupsRelation::getId, relation.getId()).le(GroupsRelation::getRechargeRemainNum, relation.getRechargeNum()).eq(GroupsRelation::getRechargeStatus, GroupsRelation.RechargeStatus.recharging));
+            if (update == 0) {
+                return;
+            }
             //记录代充记录
             if (rechargeStatus == GroupsRelation.RechargeStatus.complete) {
                 String remark = "自动代充";

+ 7 - 1
netflix-service/src/main/java/com/cyksj/service/recharge/impl/PlusAfDianRechargeServiceImpl.java

@@ -170,6 +170,9 @@ public class PlusAfDianRechargeServiceImpl implements PlusAfDianRechargeService
      * 更新代充状态
      */
     private void resetGroupsRelationRechargeStatus(GroupsRelation relation, Boolean taskStatus, String result) {
+        //重新获取一遍
+        relation = relationMapper.selectById(relation.getId());
+
         GroupsRelation.RechargeStatus rechargeStatus;
         if (taskStatus) {
             rechargeStatus = GroupsRelation.RechargeStatus.complete;
@@ -210,7 +213,10 @@ public class PlusAfDianRechargeServiceImpl implements PlusAfDianRechargeService
             if (rechargeStatus == GroupsRelation.RechargeStatus.recharge_error) {
                 rechargeErrorInfo = result;
             }
-            relationMapper.update(null, Wrappers.lambdaUpdate(GroupsRelation.class).set(rechargeStatus == GroupsRelation.RechargeStatus.recharge_error, GroupsRelation::getRechargeRemainNum, rechargeRemainNum + rechargeNum).set(GroupsRelation::getRechargeStatus, rechargeStatus).set(expiryTime != null, GroupsRelation::getStartTime, startTime).set(expiryTime != null, GroupsRelation::getExpiryTime, expiryTime).set(StrUtil.isNotEmpty(rechargeErrorInfo), GroupsRelation::getRechargeErrorInfo, rechargeErrorInfo).eq(GroupsRelation::getId, relation.getId()).le(GroupsRelation::getRechargeRemainNum, relation.getRechargeNum()).eq(GroupsRelation::getRechargeStatus, GroupsRelation.RechargeStatus.recharging));
+            int update = relationMapper.update(null, Wrappers.lambdaUpdate(GroupsRelation.class).set(rechargeStatus == GroupsRelation.RechargeStatus.recharge_error, GroupsRelation::getRechargeRemainNum, rechargeRemainNum + rechargeNum).set(GroupsRelation::getRechargeStatus, rechargeStatus).set(expiryTime != null, GroupsRelation::getStartTime, startTime).set(expiryTime != null, GroupsRelation::getExpiryTime, expiryTime).set(StrUtil.isNotEmpty(rechargeErrorInfo), GroupsRelation::getRechargeErrorInfo, rechargeErrorInfo).eq(GroupsRelation::getId, relation.getId()).le(GroupsRelation::getRechargeRemainNum, relation.getRechargeNum()).eq(GroupsRelation::getRechargeStatus, GroupsRelation.RechargeStatus.recharging));
+            if (update == 0) {
+                return;
+            }
             //记录代充记录
             if (rechargeStatus == GroupsRelation.RechargeStatus.complete) {
                 String remark = "自动代充";

+ 4 - 1
netflix-service/src/main/java/com/cyksj/service/recharge/impl/SancRechargeServiceImpl.java

@@ -219,7 +219,10 @@ public class SancRechargeServiceImpl implements SancRechargeService {
             if (rechargeStatus == GroupsRelation.RechargeStatus.recharge_error) {
                 rechargeErrorInfo = result;
             }
-            relationMapper.update(null, Wrappers.lambdaUpdate(GroupsRelation.class).set(rechargeStatus == GroupsRelation.RechargeStatus.recharge_error, GroupsRelation::getRechargeRemainNum, rechargeRemainNum + 1).set(GroupsRelation::getRechargeStatus, rechargeStatus).set(expiryTime != null, GroupsRelation::getStartTime, startTime).set(expiryTime != null, GroupsRelation::getExpiryTime, expiryTime).set(StrUtil.isNotEmpty(rechargeErrorInfo), GroupsRelation::getRechargeErrorInfo, rechargeErrorInfo).eq(GroupsRelation::getId, relation.getId()).le(GroupsRelation::getRechargeRemainNum, relation.getRechargeNum()).eq(GroupsRelation::getRechargeStatus, GroupsRelation.RechargeStatus.recharging));
+            int update = relationMapper.update(null, Wrappers.lambdaUpdate(GroupsRelation.class).set(rechargeStatus == GroupsRelation.RechargeStatus.recharge_error, GroupsRelation::getRechargeRemainNum, rechargeRemainNum + 1).set(GroupsRelation::getRechargeStatus, rechargeStatus).set(expiryTime != null, GroupsRelation::getStartTime, startTime).set(expiryTime != null, GroupsRelation::getExpiryTime, expiryTime).set(StrUtil.isNotEmpty(rechargeErrorInfo), GroupsRelation::getRechargeErrorInfo, rechargeErrorInfo).eq(GroupsRelation::getId, relation.getId()).le(GroupsRelation::getRechargeRemainNum, relation.getRechargeNum()).eq(GroupsRelation::getRechargeStatus, GroupsRelation.RechargeStatus.recharging));
+            if (update == 0) {
+                return;
+            }
             //记录代充记录
             if (rechargeStatus == GroupsRelation.RechargeStatus.complete) {
                 String remark = "自动代充";

+ 7 - 1
netflix-service/src/main/java/com/cyksj/service/recharge/impl/YearAfDianRechargeServiceImpl.java

@@ -184,6 +184,9 @@ public class YearAfDianRechargeServiceImpl implements YearAfDianRechargeService
      * 更新代充状态
      */
     private void resetGroupsRelationRechargeStatus(GroupsRelation relation, Boolean taskStatus, String result) {
+        //重新获取一遍
+        relation = relationMapper.selectById(relation.getId());
+
         GroupsRelation.RechargeStatus rechargeStatus;
         if (taskStatus) {
             rechargeStatus = GroupsRelation.RechargeStatus.complete;
@@ -224,7 +227,10 @@ public class YearAfDianRechargeServiceImpl implements YearAfDianRechargeService
             if (rechargeStatus == GroupsRelation.RechargeStatus.recharge_error) {
                 rechargeErrorInfo = result;
             }
-            relationMapper.update(null, Wrappers.lambdaUpdate(GroupsRelation.class).set(rechargeStatus == GroupsRelation.RechargeStatus.recharge_error, GroupsRelation::getRechargeRemainNum, rechargeRemainNum + rechargeNum).set(GroupsRelation::getRechargeStatus, rechargeStatus).set(expiryTime != null, GroupsRelation::getStartTime, startTime).set(expiryTime != null, GroupsRelation::getExpiryTime, expiryTime).set(StrUtil.isNotEmpty(rechargeErrorInfo), GroupsRelation::getRechargeErrorInfo, rechargeErrorInfo).eq(GroupsRelation::getId, relation.getId()).le(GroupsRelation::getRechargeRemainNum, relation.getRechargeNum()).eq(GroupsRelation::getRechargeStatus, GroupsRelation.RechargeStatus.recharging));
+            int update = relationMapper.update(null, Wrappers.lambdaUpdate(GroupsRelation.class).set(rechargeStatus == GroupsRelation.RechargeStatus.recharge_error, GroupsRelation::getRechargeRemainNum, rechargeRemainNum + rechargeNum).set(GroupsRelation::getRechargeStatus, rechargeStatus).set(expiryTime != null, GroupsRelation::getStartTime, startTime).set(expiryTime != null, GroupsRelation::getExpiryTime, expiryTime).set(StrUtil.isNotEmpty(rechargeErrorInfo), GroupsRelation::getRechargeErrorInfo, rechargeErrorInfo).eq(GroupsRelation::getId, relation.getId()).le(GroupsRelation::getRechargeRemainNum, relation.getRechargeNum()).eq(GroupsRelation::getRechargeStatus, GroupsRelation.RechargeStatus.recharging));
+            if (update == 0) {
+                return;
+            }
             //记录代充记录
             if (rechargeStatus == GroupsRelation.RechargeStatus.complete) {
                 String remark = "自动代充";

+ 3 - 3
netflix-web/src/main/java/com/cyksj/web/controller/codex/CodexController.java

@@ -160,10 +160,10 @@ public class CodexController {
     /**
      * 抵扣车票金额
      */
-    @GetMapping("/get/deduct/money")
-    public Result<CodexDeductResp> getDeductMoney() {
+    @GetMapping("/get/deduct/money/{relationId}/{upgradeSkuId}")
+    public Result<CodexDeductResp> getDeductMoney(@PathVariable Long relationId, @PathVariable Long upgradeSkuId) {
         long userId = StpUserUtil.getLoginIdAsLong();
-        CodexDeductResp codexDeductResp = codexService.getDeductMoney(userId, null);
+        CodexDeductResp codexDeductResp = codexService.getDeductMoney(userId, relationId, upgradeSkuId);
         return GatewayResponse.SUCCESS.newBuilder().toResult(codexDeductResp);
     }