From aa038eabe9bfe5a76d7c803395b794a588614a32 Mon Sep 17 00:00:00 2001
From: xuhy <3313886187@qq.com>
Date: 星期六, 26 十月 2024 15:32:14 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master'

---
 ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TChargingOrderServiceImpl.java |   69 ++++++++++++++++++++++++++++++++++
 1 files changed, 69 insertions(+), 0 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 923d807..9440d8d 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
@@ -2064,6 +2064,10 @@
 	private TShoppingOrderService shoppingOrderService;
 	@Resource
 	private TShoppingOrderRefundService shoppingOrderRefundService;
+	@Resource
+	private TVipOrderService vipOrderService;
+	@Resource
+	private TVipOrderRefundService vipOrderRefundService;
 	@Override
 	public R payRefund(PayOrderRefundDto payOrderQueryDto) {
 			if (payOrderQueryDto.getType()==1){
@@ -2199,6 +2203,71 @@
 
 			}
 
+		if (payOrderQueryDto.getType()==3){
+			TVipOrder tChargingOrder = vipOrderService.getById(payOrderQueryDto.getOrderId());
+			if (tChargingOrder.getPaymentAmount().compareTo(payOrderQueryDto.getRefundAmount())==-1){
+				return R.fail("退款金额需小于支付金额");
+			}
+			TVipOrderRefund chargingOrderRefund = new TVipOrderRefund();
+			chargingOrderRefund.setVipOrderId(tChargingOrder.getId());
+			chargingOrderRefund.setRefundAmount(payOrderQueryDto.getRefundAmount());
+			chargingOrderRefund.setRefundStatus(1);
+			chargingOrderRefund.setPayType(tChargingOrder.getPaymentType());
+			chargingOrderRefund.setRefundTime(LocalDateTime.now());
+			chargingOrderRefund.setCode(tChargingOrder.getCode());
+			SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmssSSS");
+			chargingOrderRefund.setRefundCode("GDF" + sdf.format(new Date()) + (Double.valueOf(Math.random() * 1000).intValue()));
+			chargingOrderRefund.setRefundTitle("后台退款");
+			chargingOrderRefund.setRefundContent("后台退款");
+			chargingOrderRefund.setRefundReason("后台退款");
+			chargingOrderRefund.setRefundRemark(payOrderQueryDto.getRemark());
+			chargingOrderRefund.setRefundTotalAmount(tChargingOrder.getRefundAmount().add(payOrderQueryDto.getRefundAmount()));
+			chargingOrderRefund.setPayAmount(tChargingOrder.getPaymentAmount());
+
+			if(1 == tChargingOrder.getPaymentType()){
+				WxPaymentRefundModel model = new WxPaymentRefundModel();
+				model.setOut_trade_no(tChargingOrder.getCode());
+				model.setOut_refund_no(chargingOrderRefund.getRefundCode());
+				model.setTransaction_id(tChargingOrder.getSerialNumber());
+				model.setReason("取消订单");
+				model.setNotify_url("/order/t-shopping-order/cancelShoppingOrderWxRefund");
+				WxPaymentRefundModel.RefundAmount amount = new WxPaymentRefundModel.RefundAmount();
+				amount.setRefund(payOrderQueryDto.getRefundAmount().multiply(new BigDecimal(100)).intValue());
+				amount.setTotal(tChargingOrder.getPaymentAmount().multiply(new BigDecimal(100)).intValue());
+				amount.setCurrency("CNY");
+				model.setAmount(amount);
+				R<String> orderR = wxPaymentClient.refundOrderR(model);
+				if(200 == orderR.getCode()){
+					tChargingOrder.setRefundStatus(2);
+					tChargingOrder.setRefundAmount((tChargingOrder.getRefundAmount()==null? BigDecimal.valueOf(0) :tChargingOrder.getRefundAmount()).add(payOrderQueryDto.getRefundAmount()));
+					vipOrderService.updateById(tChargingOrder);
+					vipOrderRefundService.save(chargingOrderRefund);
+				}
+			}
+
+			if(2 == tChargingOrder.getPaymentType()){
+				RefundReq dto = new RefundReq();
+				dto.setOutTradeNo(tChargingOrder.getCode());
+				dto.setOutRequestNo(tChargingOrder.getCode());
+				dto.setRefundAmount(payOrderQueryDto.getRefundAmount().toString());
+				dto.setRefundReason("取消订单");
+				RefundResp resp = aliPaymentClient.refund(dto).getData();
+				if(null != resp){
+					SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-DDTHH:mm:ss+TIMEZONE");
+
+					tChargingOrder.setRefundStatus(2);
+					tChargingOrder.setRefundAmount((tChargingOrder.getRefundAmount()==null? BigDecimal.valueOf(0) :tChargingOrder.getRefundAmount()).add(payOrderQueryDto.getRefundAmount()));
+
+
+					vipOrderService.updateById(tChargingOrder);
+
+					vipOrderRefundService.save(chargingOrderRefund);
+
+				}
+			}
+
+		}
+
 
 
 		return R.ok();

--
Gitblit v1.7.1