longz
2026-07-21 700cbb19a285e639bb05404503efa3da9988c083
ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TChargingOrderServiceImpl.java
@@ -88,6 +88,7 @@
import org.slf4j.LoggerFactory;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Service;
@@ -168,6 +169,8 @@
   private IcbcPaymentClient icbcPaymentClient;
   @Resource
   private TChargingOrderShareRecordMapper chargingOrderShareRecordMapper;
   @Value("${icbc.share.online-enabled:false}")
   private boolean icbcOnlineShareEnabled;
   @Resource
   private ChargingOrderSettlementExecutor chargingOrderSettlementExecutor;
   @Resource
@@ -3111,7 +3114,11 @@
   
   @Override
   public Map<String, Object> countAll(List<Integer> siteIds, Boolean partnerView) {
      return this.baseMapper.countAll(siteIds, partnerView);
      Map<String, Object> result = this.baseMapper.countAll(siteIds, partnerView);
      if (!Boolean.TRUE.equals(partnerView) && result != null) {
         result.put("commission_amount", this.baseMapper.sumSuccessfulShareAmount(siteIds));
      }
      return result;
   }
   /**
@@ -5237,7 +5244,7 @@
         shoppingOrderRefund.setRefundContent("后台退款");
         shoppingOrderRefund.setRefundReason("后台退款");
         shoppingOrderRefund.setRefundRemark(payOrderQueryDto.getRemark());
         shoppingOrderRefund.setRefundTotalAmount(shoppingOrder.getRefundAmount().add(payOrderQueryDto.getRefundAmount()));
         shoppingOrderRefund.setRefundTotalAmount(money(shoppingOrder.getRefundAmount()).add(payOrderQueryDto.getRefundAmount()));
         shoppingOrderRefund.setPayAmount(shoppingOrder.getPaymentAmount());
         if (1 == shoppingOrder.getPaymentType()) {
@@ -5281,6 +5288,29 @@
               shoppingOrderRefundService.save(shoppingOrderRefund);
            }
         }
         if (3 == shoppingOrder.getPaymentType()) {
            IcbcRefundReq refundReq = new IcbcRefundReq();
            refundReq.setOutTradeNo(shoppingOrder.getCode());
            refundReq.setOrderId(shoppingOrder.getSerialNumber());
            refundReq.setOutRefundNo(shoppingOrderRefund.getRefundCode());
            refundReq.setRefundAmount(payOrderQueryDto.getRefundAmount());
            refundReq.setTotalAmount(shoppingOrder.getPaymentAmount());
            refundReq.setReason("后台商城订单退款");
            R<IcbcRefundResp> refundResult = icbcPaymentClient.refund(refundReq);
            IcbcRefundResp refundResp = refundResult == null ? null : refundResult.getData();
            if (refundResult == null || refundResult.getCode() != 200 || refundResp == null || !"SUCCESS".equals(refundResp.getStatus())) {
               return R.fail(refundResult == null ? "工行退款服务无响应"
                     : firstNotBlank(refundResp == null ? null : refundResp.getRawResponse(), refundResult.getMsg(), "工行退款失败"));
            }
            shoppingOrder.setRefundStatus(2);
            shoppingOrder.setRefundAmount(money(shoppingOrder.getRefundAmount()).add(payOrderQueryDto.getRefundAmount()));
            shoppingOrder.setRefundSerialNumber(refundResp.getRefundId());
            shoppingOrder.setRefundTime(LocalDateTime.now());
            shoppingOrderService.updateById(shoppingOrder);
            shoppingOrderRefund.setRefundStatus(2);
            shoppingOrderRefund.setRefundSerialNumber(refundResp.getRefundId());
            shoppingOrderRefundService.save(shoppingOrderRefund);
         }
//            if(3 == tChargingOrder.getPaymentType()){
//               RefundReq dto = new RefundReq();
//               dto.setOutTradeNo(tChargingOrder.getCode());
@@ -5318,7 +5348,7 @@
         vipOrderRefund.setRefundContent("后台退款");
         vipOrderRefund.setRefundReason("后台退款");
         vipOrderRefund.setRefundRemark(payOrderQueryDto.getRemark());
         vipOrderRefund.setRefundTotalAmount(vipOrder.getRefundAmount().add(payOrderQueryDto.getRefundAmount()));
         vipOrderRefund.setRefundTotalAmount(money(vipOrder.getRefundAmount()).add(payOrderQueryDto.getRefundAmount()));
         vipOrderRefund.setPayAmount(vipOrder.getPaymentAmount());
         
         if (1 == vipOrder.getPaymentType()) {
@@ -5361,6 +5391,27 @@
               vipOrderService.updateById(vipOrder);
               vipOrderRefundService.save(vipOrderRefund);
            }
         }
         if (3 == vipOrder.getPaymentType()) {
            IcbcRefundReq refundReq = new IcbcRefundReq();
            refundReq.setOutTradeNo(vipOrder.getCode());
            refundReq.setOrderId(vipOrder.getSerialNumber());
            refundReq.setOutRefundNo(vipOrderRefund.getRefundCode());
            refundReq.setRefundAmount(payOrderQueryDto.getRefundAmount());
            refundReq.setTotalAmount(vipOrder.getPaymentAmount());
            refundReq.setReason("后台会员订单退款");
            R<IcbcRefundResp> refundResult = icbcPaymentClient.refund(refundReq);
            IcbcRefundResp refundResp = refundResult == null ? null : refundResult.getData();
            if (refundResult == null || refundResult.getCode() != 200 || refundResp == null || !"SUCCESS".equals(refundResp.getStatus())) {
               return R.fail(refundResult == null ? "工行退款服务无响应"
                     : firstNotBlank(refundResp == null ? null : refundResp.getRawResponse(), refundResult.getMsg(), "工行退款失败"));
            }
            vipOrder.setRefundStatus(2);
            vipOrder.setRefundAmount(money(vipOrder.getRefundAmount()).add(payOrderQueryDto.getRefundAmount()));
            vipOrderService.updateById(vipOrder);
            vipOrderRefund.setRefundStatus(2);
            vipOrderRefund.setRefundSerialNumber(refundResp.getRefundId());
            vipOrderRefundService.save(vipOrderRefund);
         }
//         if(3 == tChargingOrder.getPaymentType()){
//            RefundReq dto = new RefundReq();
@@ -7531,11 +7582,13 @@
         record.setSubMerId(partner.getIcbcSubMerId());
         record.setSubMerPrtclNo(partner.getIcbcSubMerPrtclNo());
      }
      boolean needOnlineShare = shouldProcessIcbcOnlineShare(payChannel, record.getShareAmount(), partner);
      boolean needOnlineShare = shouldProcessIcbcOnlineShare(icbcOnlineShareEnabled, payChannel, record.getShareAmount(), partner);
      record.setNeedOnlineShare(needOnlineShare);
      record.setOnlineShareStatus(needOnlineShare ? "INIT" : "RECORDED");
      if ("ICBC".equals(payChannel) && record.getShareAmount().compareTo(BigDecimal.ZERO) > 0 && !needOnlineShare) {
         record.setFailReason("未配置完整工行二级商户参数,仅记录本地分账");
         record.setFailReason(icbcOnlineShareEnabled
               ? "未配置完整工行二级商户参数,仅记录本地分账"
               : "工行线上分账已关闭,仅记录本地分账");
      }
      record.setRetryCount(0);
      record.setDelFlag(false);
@@ -7728,7 +7781,12 @@
   }
   static boolean shouldProcessIcbcOnlineShare(String payChannel, BigDecimal shareAmount, Partner partner) {
      return "ICBC".equals(payChannel)
      return shouldProcessIcbcOnlineShare(true, payChannel, shareAmount, partner);
   }
   static boolean shouldProcessIcbcOnlineShare(boolean onlineShareEnabled, String payChannel, BigDecimal shareAmount, Partner partner) {
      return onlineShareEnabled
            && "ICBC".equals(payChannel)
            && shareAmount != null
            && shareAmount.compareTo(BigDecimal.ZERO) > 0
            && partner != null