浏览代码

fix(charging): 启用定时任务并优化余额熔断逻辑

- 启用充电站信息同步定时任务,间隔15分钟执行
- 启用充电桩价格策略同步定时任务,间隔10分钟执行
- 修改剩余余额计算逻辑,去除安全阈值扣减
- 优化熔断条件,避免无消费时误触发
- 修正支付订单号参数,使用真实订单号替代固定值
SheepHy 3 周之前
父节点
当前提交
60991b4bba

+ 1 - 1
src/main/java/com/zsElectric/boot/business/service/WFTOrderService.java

@@ -872,7 +872,7 @@ public class WFTOrderService {
 
         SortedMap<String, String> params = new TreeMap<>();
 
-        params.put("out_trade_no", "ZSWL20250507000000551068");//商户订单号
+        params.put("out_trade_no", userOrderInfo.getOrderNo());//商户订单号
         params.put("out_refund_no", out_refund_no);//商户退款单号
         params.put("attach", reason);//退款原因
         params.put("total_fee", amount_fee(userOrderInfo.getOrderMoney()));//原订单金额

+ 2 - 2
src/main/java/com/zsElectric/boot/charging/quartz/ChargingJob.java

@@ -45,7 +45,7 @@ public class ChargingJob {
      * 同步充电站信息
      * 每5分钟执行一次,从第三方接口获取充电站信息并存储到数据库
      */
-//    @Scheduled(cron = "0 0/15 * * * ?")
+    @Scheduled(cron = "0 0/15 * * * ?")
     public void syncStationsInfo() {
         log.info("开始执行充电站信息同步定时任务");
         
@@ -82,7 +82,7 @@ public class ChargingJob {
      * 每10分钟执行一次,查询所有充电桩的价格策略并存储到数据库
      * cron表达式: 0 10 * * * ? 表示每10分钟执行
      */
-//    @Scheduled(cron = "0 */10 * * * ?")
+    @Scheduled(cron = "0 */10 * * * ?")
     public void syncEquipmentPricePolicy() {
         // 检查任务是否正在执行,防止并发
         if (isPricePolicySyncRunning) {

+ 6 - 5
src/main/java/com/zsElectric/boot/charging/service/impl/ChargingReceptionServiceImpl.java

@@ -722,14 +722,15 @@ public class ChargingReceptionServiceImpl implements ChargingReceptionService {
                     // 获取当前实时消费金额
                     BigDecimal realCost = chargeOrderInfo.getRealCost() != null ? chargeOrderInfo.getRealCost() : BigDecimal.ZERO;
                     
-                    // 剩余可用余额 = 账户余额 - 实时消费 - 安全阈值
-                    BigDecimal remainingBalance = balance.subtract(realCost).subtract(safetyThreshold);
+                    // 剩余余额 = 账户余额 - 实时消费
+                    BigDecimal remainingBalance = balance.subtract(realCost);
                     
-                    log.info("熔断检查 - startChargeSeq: {}, 用户余额: {}, 实时消费: {}, 安全阈值: {}, 剩余可用: {}",
+                    log.info("熔断检查 - startChargeSeq: {}, 用户余额: {}, 实时消费: {}, 安全阈值: {}, 剩余余额: {}",
                             chargeStatus.getStartChargeSeq(), balance, realCost, safetyThreshold, remainingBalance);
                     
-                    // 如果剩余可用余额小于0,触发熔断
-                    if (remainingBalance.compareTo(BigDecimal.ZERO) < 0) {
+                    // 熔断条件:剩余余额 < 安全阈值 且 已产生实际消费(实时消费 > 0)
+                    // 这样可以避免刚开始充电(消费为0)时因余额小于阈值而被误熔断
+                    if (remainingBalance.compareTo(safetyThreshold) < 0 && realCost.compareTo(BigDecimal.ZERO) > 0) {
                         log.warn("余额不足,触发熔断停止充电 - startChargeSeq: {}, 用户余额: {}, 实时消费: {}",
                                 chargeStatus.getStartChargeSeq(), balance, realCost);