From df22fbc272a1a8debe24ae037470a7c3fcb06571 Mon Sep 17 00:00:00 2001
From: puzhibing <393733352@qq.com>
Date: 星期五, 17 七月 2026 18:21:11 +0800
Subject: [PATCH] 增加退款前的数据校验,防止重复退款
---
ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/util/task/TaskUtil.java | 54 ++++++++++++++++++++++++++++++++++++++----------------
1 files changed, 38 insertions(+), 16 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 eb4fb70..348e439 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
@@ -272,6 +272,9 @@
List<TChargingOrder> upStatusChargingOrder = chargingOrderService.findUpStatusChargingOrder();
log.info("定时任务执行,查询需要手动修改状态的订单数量:{}", upStatusChargingOrder.size());
for (TChargingOrder order : upStatusChargingOrder) {
+ if(!order.getCode().contains("CD")){
+ continue;
+ }
Integer status = null;
if(2 == order.getStatus()){
status = -1;
@@ -295,6 +298,9 @@
List<TChargingOrder> failedStartupOrder = chargingOrderService.findFailedStartupOrder();
log.info("定时任务执行,查询到启动失败的订单数量:{}", failedStartupOrder.size());
for (TChargingOrder order : failedStartupOrder) {
+ if(!order.getCode().contains("CD")){
+ continue;
+ }
log.info("定时任务执行,查询到启动失败的订单:{}", order.getCode());
//查询是否有充电信息
List<UploadRealTimeMonitoringData> dataByOrderCode = uploadRealTimeMonitoringDataService.getDataByOrderCode(order.getCode());
@@ -352,6 +358,9 @@
List<TChargingOrder> stoppedOrder = chargingOrderService.findStoppedOrder();
log.info("定时任务执行,查询到停止中的订单数量:{}", stoppedOrder.size());
for (TChargingOrder order : stoppedOrder) {
+ if(!order.getCode().contains("CD")){
+ continue;
+ }
log.info("定时任务执行,查询到停止中的订单:{}", order.getCode());
TransactionRecord one = transactionRecordService.findOne(order.getCode());
if(null != one){
@@ -396,6 +405,9 @@
List<TChargingOrder> chargingOrder = chargingOrderService.findChargingOrder();
log.info("定时任务执行,查询到充电中的订单数量:{}", chargingOrder.size());
for (TChargingOrder order : chargingOrder) {
+ if(!order.getCode().contains("CD")){
+ continue;
+ }
log.info("定时任务执行,查询到充电中的订单:{}", order.getCode());
TransactionRecord one = transactionRecordService.findOne(order.getCode());
if(null != one && StringUtils.isNotEmpty(one.getResult())){
@@ -444,6 +456,9 @@
List<TChargingOrder> endChargingOrder = chargingOrderService.findEndChargingOrder();
log.info("定时任务执行,查询到已结束未退款的订单数量:{}", endChargingOrder.size());
for (TChargingOrder order : endChargingOrder) {
+ if(!order.getCode().contains("CD")){
+ continue;
+ }
Integer status = null;
if(-1 == order.getStatus()){
status = 2;
@@ -879,10 +894,10 @@
.eq(TChargingOrder::getAppUserId, order.getAppUserId()));
//构建退款明细
+ String refundCode = "CDF" + order.getCode().substring(2);
TChargingOrderRefund chargingOrderRefund = new TChargingOrderRefund();
chargingOrderRefund.setChargingOrderId(order.getId());
- SimpleDateFormat sdfaa = new SimpleDateFormat("yyyyMMddHHmmssSSS");
- chargingOrderRefund.setRefundCode("CDF" + sdfaa.format(new Date()) + (Double.valueOf(Math.random() * 1000).intValue()));
+ chargingOrderRefund.setRefundCode(refundCode);
chargingOrderRefund.setRefundAmount(refundAmount);
chargingOrderRefund.setRefundStatus(1);
chargingOrderRefund.setPayType(rechargePaymentType);
@@ -908,21 +923,28 @@
.eq(TChargingOrder::getId, order.getId())
.eq(TChargingOrder::getAppUserId, order.getAppUserId()));
} else if (1 == rechargePaymentType) {
- WxPaymentRefundModel model = new WxPaymentRefundModel();
- model.setOut_trade_no(order.getCode());
- model.setOut_refund_no(chargingOrderRefund.getRefundCode());
- model.setReason("充电完成退款");
- model.setNotify_url("/payment/wx/refund/notify");
- WxPaymentRefundModel.RefundAmount amount = new WxPaymentRefundModel.RefundAmount();
- amount.setRefund(thirdRefundAmount.multiply(new BigDecimal(100)).intValue());
- amount.setTotal(getRefundableThirdPayAmount(order).multiply(new BigDecimal(100)).intValue());
- amount.setCurrency("CNY");
- model.setAmount(amount);
- R<Map<String, Object>> result = wxPaymentClient.refundOrderR(model);
- if (200 == result.getCode()) {
+ Map<String, Object> objectMap = wxPaymentClient.queryRefund(refundCode).getData();
+ Map<String, Object> amount1 = null;
+ if(null != objectMap && null != objectMap.get("refund_id")){
+ amount1 = (Map<String, Object>) objectMap.get("amount");
+ }else{
+ WxPaymentRefundModel model = new WxPaymentRefundModel();
+ model.setOut_trade_no(order.getCode());
+ model.setOut_refund_no(chargingOrderRefund.getRefundCode());
+ model.setReason("充电完成退款");
+ model.setNotify_url("/payment/wx/refund/notify");
+ WxPaymentRefundModel.RefundAmount amount = new WxPaymentRefundModel.RefundAmount();
+ amount.setRefund(thirdRefundAmount.multiply(new BigDecimal(100)).intValue());
+ amount.setTotal(getRefundableThirdPayAmount(order).multiply(new BigDecimal(100)).intValue());
+ amount.setCurrency("CNY");
+ model.setAmount(amount);
+ R<Map<String, Object>> result = wxPaymentClient.refundOrderR(model);
+ if (200 == result.getCode()) {
+ amount1 = (Map<String, Object>) result.getData().get("amount");
+ }
+ }
+ if (null != amount1) {
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));
chargingOrderRefund.setRefundFee(refund_fee);
--
Gitblit v1.7.1