瀏覽代碼

fix: 微信支付回调——EN_PLUS充电中同步余额失败不再回滚充值事务,局部捕获仅记日志待补偿,避免用户充值后余额被整体回滚

skyline 3 周之前
父節點
當前提交
e9c3d3ebf7
共有 1 個文件被更改,包括 11 次插入 和 6 次删除
  1. 11 6
      service/src/main/java/com/kym/service/wechat/impl/WxPayServiceImpl.java

+ 11 - 6
service/src/main/java/com/kym/service/wechat/impl/WxPayServiceImpl.java

@@ -351,12 +351,17 @@ public class WxPayServiceImpl implements WxPayService {
                     LOGGER.info("微信支付回调{}:业务处理结束", notifyRes[2]);
 
                     // 如果存在进行中的订单,则向en+更新用户余额(朗新不支持此操作)
-                    var chargingOrder = chargeOrderService.getChargingOrderByUserId(walletDetail.getUserId());
-                    if (chargingOrder != null && "EN_PLUS".equals(PlatformCache.INSTANCE.getPlatformNameByConnectorId(chargingOrder.getConnectorId()))) {
-                        var account = accountService.getAccountByUserId(walletDetail.getUserId());
-                        // TODO: 2023-11-30 快充这里考虑过充的金额要提高
-                        var res = platformApiService.updateBalanceByQueryEquipChargeStatus(PlatformCache.INSTANCE.getPlatformNameByConnectorId(chargingOrder.getConnectorId()), chargingOrder.getStartChargeSeq(), account.getBalance() - 50);
-                        LOGGER.info("用户:{}充电过程中充值,已更新EN_PLUS充电金额,en+返回数据:{}", account.getUserId(), res);
+                    // 平台同步为附加操作,失败时不能回滚充值事务,仅记录日志待补偿
+                    try {
+                        var chargingOrder = chargeOrderService.getChargingOrderByUserId(walletDetail.getUserId());
+                        if (chargingOrder != null && "EN_PLUS".equals(PlatformCache.INSTANCE.getPlatformNameByConnectorId(chargingOrder.getConnectorId()))) {
+                            var account = accountService.getAccountByUserId(walletDetail.getUserId());
+                            // TODO: 2023-11-30 快充这里考虑过充的金额要提高
+                            var res = platformApiService.updateBalanceByQueryEquipChargeStatus(PlatformCache.INSTANCE.getPlatformNameByConnectorId(chargingOrder.getConnectorId()), chargingOrder.getStartChargeSeq(), account.getBalance() - 50);
+                            LOGGER.info("用户:{}充电过程中充值,已更新EN_PLUS充电金额,en+返回数据:{}", account.getUserId(), res);
+                        }
+                    } catch (Exception e) {
+                        LOGGER.error("微信支付回调{}:充值成功,但同步EN_PLUS平台余额失败,用户:{}", notifyRes[2], walletDetail.getUserId(), e);
                     }
                     return ResponseEntity.status(HttpStatus.OK).build();