From 700cbb19a285e639bb05404503efa3da9988c083 Mon Sep 17 00:00:00 2001
From: longz <longzhaoz@qq.com>
Date: 星期二, 21 七月 2026 22:53:55 +0800
Subject: [PATCH] 分账可开关

---
 ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TChargingOrderServiceImpl.java |   70 ++++++++++++++++++++++++++++++++---
 1 files changed, 64 insertions(+), 6 deletions(-)

diff --git a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TChargingOrderServiceImpl.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TChargingOrderServiceImpl.java
index b0d733f..621e638 100644
--- a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TChargingOrderServiceImpl.java
+++ b/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

--
Gitblit v1.7.1