From df3ab7ae2e3f33d9bd910c9e02b09e9497bcfe54 Mon Sep 17 00:00:00 2001
From: liujie <1793218484@qq.com>
Date: 星期二, 28 四月 2026 18:25:19 +0800
Subject: [PATCH] p0功能 小程序
---
ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/util/task/TaskUtil.java | 84 +++++++++++++++++++++++++++++++++---------
1 files changed, 66 insertions(+), 18 deletions(-)
diff --git a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/util/task/TaskUtil.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/util/task/TaskUtil.java
index f6e065d..85d8976 100644
--- a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/util/task/TaskUtil.java
+++ b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/util/task/TaskUtil.java
@@ -32,8 +32,11 @@
import com.ruoyi.other.api.domain.TCoupon;
import com.ruoyi.other.api.domain.TIntegralRule;
import com.ruoyi.other.api.domain.TVip;
+import com.ruoyi.other.api.dto.ExchangeCodeConsumeDTO;
import com.ruoyi.other.api.feignClient.IntegralRuleClient;
+import com.ruoyi.other.api.feignClient.OtherClient;
import com.ruoyi.other.api.feignClient.VipClient;
+import com.ruoyi.other.api.vo.ExchangeCodeConsumeResultVO;
import com.ruoyi.payment.api.feignClient.AliPaymentClient;
import com.ruoyi.payment.api.feignClient.H5AliPaymentClient;
import com.ruoyi.payment.api.feignClient.WxPaymentClient;
@@ -128,6 +131,9 @@
private AppUserIntegralChangeClient appUserIntegralChangeClient;
@Resource
+ private OtherClient otherClient;
+
+ @Resource
private WxPaymentClient wxPaymentClient;
@Resource
@@ -144,6 +150,31 @@
@Resource
private RedissonClient redissonClient;
+
+
+ private boolean isBalancePayMode(Integer payMethod) {
+ return payMethod != null && (payMethod == 1 || payMethod == 2);
+ }
+
+ private BigDecimal money(BigDecimal amount) {
+ return amount == null ? BigDecimal.ZERO.setScale(2, RoundingMode.HALF_UP) : amount.setScale(2, RoundingMode.HALF_UP);
+ }
+
+ private void recordBalanceRefund(TChargingOrder order, BigDecimal refundAmount, String refundNo) {
+ if (order == null || order.getAppUserId() == null || order.getId() == null
+ || refundAmount == null || refundAmount.compareTo(BigDecimal.ZERO) <= 0) {
+ return;
+ }
+ ExchangeCodeConsumeDTO refundDTO = new ExchangeCodeConsumeDTO();
+ refundDTO.setUserId(order.getAppUserId());
+ refundDTO.setOrderId(order.getId());
+ refundDTO.setAmount(refundAmount);
+ refundDTO.setRefundNo(refundNo);
+ R<ExchangeCodeConsumeResultVO> result = otherClient.refundExchangeCodeBalance(refundDTO);
+ if (result == null || result.getCode() != 200) {
+ throw new RuntimeException("??????????");
+ }
+ }
@Scheduled(fixedRate = 1000 * 60)
public void taskOneMinutes() {
@@ -650,11 +681,19 @@
//用户推荐奖励
chargingOrderService.referralReward(order);
- //开始构建退款费用
+ //????????
refundAmount = refundAmount.setScale(2, RoundingMode.HALF_EVEN);
if (refundAmount.compareTo(BigDecimal.ZERO) > 0) {
Integer rechargePaymentType = order.getRechargePaymentType();
- //构建退款明细
+ BigDecimal thirdRefundAmount = refundAmount.min(money(order.getThirdPayAmount())).setScale(2, RoundingMode.HALF_UP);
+ BigDecimal balanceRefundAmount = refundAmount.subtract(thirdRefundAmount).min(money(order.getBalancePayAmount())).setScale(2, RoundingMode.HALF_UP);
+ refundAmount = thirdRefundAmount.add(balanceRefundAmount).setScale(2, RoundingMode.HALF_UP);
+ order.setThirdRefundAmount(thirdRefundAmount);
+ order.setBalanceRefundAmount(balanceRefundAmount);
+ order.setRefundAmount(refundAmount);
+ order.setRefundStatus(refundAmount.compareTo(BigDecimal.ZERO) > 0 ? 1 : 2);
+ chargingOrderService.updateById(order);
+ //??????
TChargingOrderRefund chargingOrderRefund = new TChargingOrderRefund();
chargingOrderRefund.setChargingOrderId(order.getId());
SimpleDateFormat sdfaa = new SimpleDateFormat("yyyyMMddHHmmssSSS");
@@ -662,29 +701,28 @@
chargingOrderRefund.setRefundAmount(refundAmount);
chargingOrderRefund.setRefundStatus(1);
chargingOrderRefund.setPayType(rechargePaymentType);
- chargingOrderRefund.setRefundStatus(1);
chargingOrderRefund.setCode(order.getCode());
- chargingOrderRefund.setRefundTitle("充电完成退款");
- chargingOrderRefund.setRefundContent("充电完成退款");
- chargingOrderRefund.setRefundReason("充电完成退款");
- chargingOrderRefund.setRefundRemark("实际充电消费金额:" + order.getPaymentAmount());
+ chargingOrderRefund.setRefundTitle("??????");
+ chargingOrderRefund.setRefundContent("??????");
+ chargingOrderRefund.setRefundReason("??????");
+ chargingOrderRefund.setRefundRemark("?????????" + order.getPaymentAmount());
chargingOrderRefund.setRefundTotalAmount(refundAmount);
chargingOrderRefund.setPayAmount(rechargeAmount);
- if (1 == rechargePaymentType) {
+ if (thirdRefundAmount.compareTo(BigDecimal.ZERO) > 0 && 1 == rechargePaymentType) {
WxPaymentRefundModel model = new WxPaymentRefundModel();
model.setOut_trade_no(order.getCode());
model.setOut_refund_no(chargingOrderRefund.getRefundCode());
- model.setReason("充电完成退款");
+ model.setReason("??????");
model.setNotify_url("/payment/wx/refund/notify");
WxPaymentRefundModel.RefundAmount amount = new WxPaymentRefundModel.RefundAmount();
- amount.setRefund(refundAmount.multiply(new BigDecimal(100)).intValue());
- amount.setTotal(rechargeAmount.multiply(new BigDecimal(100)).intValue());
+ amount.setRefund(thirdRefundAmount.multiply(new BigDecimal(100)).intValue());
+ amount.setTotal((isBalancePayMode(order.getPayMethod()) ? money(order.getThirdPayAmount()) : rechargeAmount).multiply(new BigDecimal(100)).intValue());
amount.setCurrency("CNY");
model.setAmount(amount);
R<Map<String, Object>> result = wxPaymentClient.refundOrderR(model);
if (200 == result.getCode()) {
chargingOrderRefundService.save(chargingOrderRefund);
- //手续费
+ //???
Map<String, Object> amount1 = (Map<String, Object>) result.getData().get("amount");
Object refund_fee1 = amount1.get("refund_fee");
BigDecimal refund_fee = new BigDecimal(null == refund_fee1 ? "0" : refund_fee1.toString()).divide(new BigDecimal(100));
@@ -692,30 +730,40 @@
chargingOrderRefundService.updateById(chargingOrderRefund);
}
}
- if (2 == rechargePaymentType) {
+ if (thirdRefundAmount.compareTo(BigDecimal.ZERO) > 0 && 2 == rechargePaymentType) {
RefundReq dto = new RefundReq();
dto.setOutTradeNo(order.getCode());
dto.setOutRequestNo(chargingOrderRefund.getRefundCode());
- dto.setRefundAmount(refundAmount.toString());
- dto.setRefundReason("充电完成退款");
+ dto.setRefundAmount(thirdRefundAmount.toString());
+ dto.setRefundReason("??????");
RefundResp resp = aliPaymentClient.refund(dto).getData();
if (null != resp) {
chargingOrderRefundService.save(chargingOrderRefund);
chargingOrderService.chargingOrderStartupFailureWxRefund(chargingOrderRefund.getRefundCode(), resp.getTradeNo(), "SUCCESS", null);
}
}
- if (3 == rechargePaymentType) {
+ if (thirdRefundAmount.compareTo(BigDecimal.ZERO) > 0 && 3 == rechargePaymentType) {
RefundReq dto = new RefundReq();
dto.setOutTradeNo(order.getRechargeSerialNumber());
dto.setOutRequestNo(chargingOrderRefund.getRefundCode());
- dto.setRefundAmount(refundAmount.toString());
- dto.setRefundReason("充电完成退款");
+ dto.setRefundAmount(thirdRefundAmount.toString());
+ dto.setRefundReason("??????");
RefundResp resp = h5AliPaymentClient.refund(dto).getData();
if (null != resp && "10000".equals(resp.getCode())) {
chargingOrderRefundService.save(chargingOrderRefund);
chargingOrderService.chargingOrderStartupFailureWxRefund(chargingOrderRefund.getRefundCode(), resp.getTradeNo(), "SUCCESS", null);
}
}
+ if (thirdRefundAmount.compareTo(BigDecimal.ZERO) == 0 && balanceRefundAmount.compareTo(BigDecimal.ZERO) > 0) {
+ chargingOrderRefund.setRefundStatus(2);
+ chargingOrderRefund.setRefundSerialNumber("BALANCE");
+ chargingOrderRefund.setRefundTime(LocalDateTime.now());
+ chargingOrderRefundService.save(chargingOrderRefund);
+ recordBalanceRefund(order, balanceRefundAmount, chargingOrderRefund.getRefundCode());
+ order.setRefundStatus(2);
+ order.setRefundTime(LocalDateTime.now());
+ chargingOrderService.updateById(order);
+ }
}
}
--
Gitblit v1.7.1