From 50dde470ec18f292e8e58547ef1c4a4cbd4138b2 Mon Sep 17 00:00:00 2001
From: Pu Zhibing <393733352@qq.com>
Date: 星期三, 24 九月 2025 15:08:54 +0800
Subject: [PATCH] 修改bug
---
ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TChargingOrderServiceImpl.java | 150 ++++++++++----------
ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TVipOrderController.java | 27 +++
ruoyi-service/ruoyi-order/src/main/resources/mapper/order/TChargingOrderMapper.xml | 127 +++++++++--------
ruoyi-service/ruoyi-payment/src/main/java/com/ruoyi/payment/controller/WxPayController.java | 11
ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/factory/OrderFallbackFactory.java | 4
ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/iotda/utils/listener/IotMessageListener.java | 44 +++++-
ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/feignClient/OrderClient.java | 14 ++
ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/iotda/utils/produce/IotMessageProduce.java | 9 -
8 files changed, 229 insertions(+), 157 deletions(-)
diff --git a/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/factory/OrderFallbackFactory.java b/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/factory/OrderFallbackFactory.java
index 33fa62f..5b82cf7 100644
--- a/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/factory/OrderFallbackFactory.java
+++ b/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/factory/OrderFallbackFactory.java
@@ -87,6 +87,10 @@
return R.fail("会员订单回调失败:" + cause.getMessage());
}
+ @Override
+ public void vipWxRefund(String out_refund_no, String refund_id, String tradeState, String success_time) {
+ log.error("会员订单微信退款回调失败:" + cause.getMessage());
+ }
@Override
public R<TActivityVO> activityStatistics(TActivityStatisticsQuery dto) {
diff --git a/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/feignClient/OrderClient.java b/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/feignClient/OrderClient.java
index 80bb36e..8c1ace6 100644
--- a/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/feignClient/OrderClient.java
+++ b/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/feignClient/OrderClient.java
@@ -71,6 +71,20 @@
/**
+ * 会员订单微信退款回调
+ * @param out_refund_no
+ * @param refund_id
+ * @param tradeState
+ * @param success_time
+ */
+ @PostMapping("/t-vip-order/vipWxRefund")
+ void vipWxRefund(@RequestParam("out_refund_no") String out_refund_no,
+ @RequestParam("refund_id") String refund_id,
+ @RequestParam("tradeState") String tradeState,
+ @RequestParam("success_time") String success_time);
+
+
+ /**
* 管理后台 活动费用统计
* @param
* @return
diff --git a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/iotda/utils/listener/IotMessageListener.java b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/iotda/utils/listener/IotMessageListener.java
index 1f7f61c..f696f2d 100644
--- a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/iotda/utils/listener/IotMessageListener.java
+++ b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/iotda/utils/listener/IotMessageListener.java
@@ -10,6 +10,8 @@
import com.ruoyi.common.core.domain.R;
import com.ruoyi.common.core.web.domain.AjaxResult;
import com.ruoyi.integration.api.model.*;
+import com.ruoyi.integration.drainage.TCECUtil;
+import com.ruoyi.integration.drainage.model.NotificationChargeOrderInfoResult;
import com.ruoyi.integration.iotda.constant.SendTagConstant;
import com.ruoyi.integration.iotda.enums.ServiceIdMenu;
import com.ruoyi.integration.iotda.model.*;
@@ -29,6 +31,8 @@
import java.io.IOException;
import java.math.BigDecimal;
import java.util.*;
+import java.util.concurrent.LinkedBlockingQueue;
+import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;
/**
@@ -54,7 +58,9 @@
@Resource
private ChargingMessageUtil chargingMessageUtil;
-
+
+ private final ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(100, 500, 0L, TimeUnit.MILLISECONDS, new LinkedBlockingQueue<Runnable>());
+
@@ -116,23 +122,43 @@
break;
case SendTagConstant.PING:
long PING = System.currentTimeMillis();
-
PingMessage pingMessage = JSON.parseObject(content.toJSONString(),PingMessage.class);
- //存储缓存中,5分钟有效
-// redisTemplate.opsForValue().set("ping:" + pingMessage.getCharging_pile_code() + pingMessage.getCharging_gun_code(), pingMessage, 5, TimeUnit.MINUTES);
-
+ String fullName = pingMessage.getCharging_pile_code() + pingMessage.getCharging_gun_code();
+ //主动丢弃一次心跳数据,用于降低调华为接口评率,防止被限流
+ boolean heartRate = redisTemplate.hasKey("HeartRate:" + fullName);
+ if(heartRate){
+ redisTemplate.delete("HeartRate:" + fullName);
+ break;
+ }
+ redisTemplate.opsForValue().set("HeartRate:" + fullName, System.currentTimeMillis());
// 响应硬件
Pong pong = new Pong();
pong.setCharging_pile_code(pingMessage.getCharging_pile_code());
pong.setCharging_gun_code(pingMessage.getCharging_gun_code());
pong.setCharging_gun_status(0);
iotMessageProduce.sendMessage(pong.getCharging_pile_code(), ServiceIdMenu.PONG.getKey(), messageUtil.pong(pong));
-
-
- Long time = (Long) redisTemplate.opsForHash().get("charging_gun_online", (pingMessage.getCharging_pile_code() + pingMessage.getCharging_gun_code()));
+
+ //缓解高并发调华为接口触发限流
+// threadPoolExecutor.execute(()->{
+// long longValue = Double.valueOf(Math.random() * 1000).longValue();
+// System.err.println("随机等待" + longValue + "毫秒:" + fullName);
+// try {
+// Thread.sleep(longValue);
+// } catch (InterruptedException e) {
+// throw new RuntimeException(e);
+// }
+//
+// // 响应硬件
+// Pong pong = new Pong();
+// pong.setCharging_pile_code(pingMessage.getCharging_pile_code());
+// pong.setCharging_gun_code(pingMessage.getCharging_gun_code());
+// pong.setCharging_gun_status(0);
+// iotMessageProduce.sendMessage(pong.getCharging_pile_code(), ServiceIdMenu.PONG.getKey(), messageUtil.pong(pong));
+// });
+
+ Long time = (Long) redisTemplate.opsForHash().get("charging_gun_online", fullName);
//小于1分钟才处理数据,防止频繁查询数据
if(null != time && (System.currentTimeMillis() - time) < 60000){
- log.warn("PING消息处理:{} 毫秒", System.currentTimeMillis() - PING);
break;
}
diff --git a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/iotda/utils/produce/IotMessageProduce.java b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/iotda/utils/produce/IotMessageProduce.java
index f4dd22c..4ca0ffb 100644
--- a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/iotda/utils/produce/IotMessageProduce.java
+++ b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/iotda/utils/produce/IotMessageProduce.java
@@ -2,19 +2,13 @@
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson2.JSONObject;
-import com.huaweicloud.sdk.core.exception.ConnectionException;
-import com.huaweicloud.sdk.core.exception.RequestTimeoutException;
-import com.huaweicloud.sdk.core.exception.ServiceResponseException;
-import com.huaweicloud.sdk.iotda.v5.IoTDAClient;
import com.huaweicloud.sdk.iotda.v5.model.CreateMessageRequest;
import com.huaweicloud.sdk.iotda.v5.model.CreateMessageResponse;
import com.huaweicloud.sdk.iotda.v5.model.DeviceMessageRequest;
import com.ruoyi.common.core.utils.uuid.UUID;
import com.ruoyi.integration.iotda.builder.IotBuilder;
-import com.ruoyi.integration.iotda.config.IotDAConfig;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Component;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RestController;
@@ -27,9 +21,6 @@
@Autowired
private IotBuilder iotBuilder;
-
- @Autowired
- private IotDAConfig config;
/**
diff --git a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TVipOrderController.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TVipOrderController.java
index 9d44070..96b1f7f 100644
--- a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TVipOrderController.java
+++ b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TVipOrderController.java
@@ -19,9 +19,11 @@
import com.ruoyi.order.api.model.TExchangeOrder;
import com.ruoyi.order.api.model.TShoppingOrder;
import com.ruoyi.order.api.model.TVipOrder;
+import com.ruoyi.order.api.model.TVipOrderRefund;
import com.ruoyi.order.api.query.ShoppingOrderQuery;
import com.ruoyi.order.api.query.VipShoppingOrderQuery;
import com.ruoyi.order.dto.TEnterpriseExport;
+import com.ruoyi.order.service.TVipOrderRefundService;
import com.ruoyi.order.service.TVipOrderService;
import com.ruoyi.other.api.domain.TEnterpriseUserApplication;
import com.ruoyi.other.api.feignClient.OtherClient;
@@ -39,6 +41,8 @@
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.net.URLEncoder;
+import java.time.LocalDateTime;
+import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
@@ -60,8 +64,10 @@
private TVipOrderService vipOrderService;
@Resource
private AppUserClient appUserClient;
- @Autowired
+ @Resource
private OtherClient otherClient;
+ @Resource
+ private TVipOrderRefundService vipOrderRefundService;
@@ -139,6 +145,25 @@
}
+
+ @PostMapping("/vipWxRefund")
+ public void vipWxRefund(@RequestParam("out_refund_no") String out_refund_no,
+ @RequestParam("refund_id") String refund_id,
+ @RequestParam("tradeState") String tradeState,
+ @RequestParam("success_time") String success_time){
+ if("SUCCESS".equals(tradeState)){
+ TVipOrderRefund vipOrderRefund = vipOrderRefundService.getOne(new LambdaUpdateWrapper<TVipOrderRefund>().eq(TVipOrderRefund::getRefundCode, out_refund_no));
+ vipOrderRefund.setRefundSerialNumber(refund_id);
+ vipOrderRefund.setRefundStatus(2);
+ vipOrderRefund.setRefundTime(LocalDateTime.parse(success_time, DateTimeFormatter.ofPattern("yyyy-MM-DDTHH:mm:ss+TIMEZONE")));
+ vipOrderRefundService.updateById(vipOrderRefund);
+ TVipOrder vipOrder = vipOrderService.getById(vipOrderRefund.getVipOrderId());
+ vipOrder.setRefundStatus(2);
+ vipOrderService.updateById(vipOrder);
+ }
+ }
+
+
@ApiOperation(tags = {"后台-申请表单-集团用户"},value = "导出")
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 88b4cf1..4297ea2 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
@@ -1532,6 +1532,7 @@
if (siteIds.isEmpty()) siteIds.add(-1);
dto.setSiteIds(siteIds);
List<ChargingOrderVO> list = this.baseMapper.chargingOrder(pageInfo, dto, startTime1, startTime2, endTime1, endTime2);
+
BigDecimal total = new BigDecimal("0");
long time = 0L;
BigDecimal electronicMoney = new BigDecimal("0");
@@ -2885,7 +2886,6 @@
tChargingOrder.setStatus(5);
}
-
TChargingOrderRefund chargingOrderRefund = new TChargingOrderRefund();
chargingOrderRefund.setChargingOrderId(tChargingOrder.getId());
chargingOrderRefund.setRefundAmount(payOrderQueryDto.getRefundAmount());
@@ -2894,7 +2894,7 @@
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.setRefundCode("CDF" + sdf.format(new Date()) + (Double.valueOf(Math.random() * 1000).intValue()));
chargingOrderRefund.setRefundTitle("后台退款");
chargingOrderRefund.setRefundContent("后台退款");
chargingOrderRefund.setRefundReason("后台退款");
@@ -2908,7 +2908,7 @@
model.setOut_refund_no(chargingOrderRefund.getRefundCode());
model.setTransaction_id(tChargingOrder.getRechargeSerialNumber());
model.setReason("取消订单");
- model.setNotify_url("/order/t-shopping-order/cancelShoppingOrderWxRefund");
+ model.setNotify_url("/payment/wx/refund/notify");
WxPaymentRefundModel.RefundAmount amount = new WxPaymentRefundModel.RefundAmount();
amount.setRefund(payOrderQueryDto.getRefundAmount().multiply(new BigDecimal(100)).intValue());
amount.setTotal(tChargingOrder.getRechargeAmount().multiply(new BigDecimal(100)).intValue());
@@ -2961,69 +2961,69 @@
}
}
if (payOrderQueryDto.getType() == 2) {
- TShoppingOrder tChargingOrder = shoppingOrderService.getById(payOrderQueryDto.getOrderId());
- if (tChargingOrder.getPaymentAmount().compareTo(payOrderQueryDto.getRefundAmount()) == -1) {
+ TShoppingOrder shoppingOrder = shoppingOrderService.getById(payOrderQueryDto.getOrderId());
+ if (shoppingOrder.getPaymentAmount().compareTo(payOrderQueryDto.getRefundAmount()) == -1) {
return R.fail("退款金额需小于支付金额");
}
- if ((tChargingOrder.getPaymentAmount().subtract(tChargingOrder.getRefundAmount()).compareTo(payOrderQueryDto.getRefundAmount())) == 0) {
- tChargingOrder.setStatus(5);
+ if ((shoppingOrder.getPaymentAmount().subtract(shoppingOrder.getRefundAmount()).compareTo(payOrderQueryDto.getRefundAmount())) == 0) {
+ shoppingOrder.setStatus(5);
}
- TShoppingOrderRefund chargingOrderRefund = new TShoppingOrderRefund();
- chargingOrderRefund.setShoppingOrderId(tChargingOrder.getId());
- chargingOrderRefund.setRefundAmount(payOrderQueryDto.getRefundAmount());
- chargingOrderRefund.setRefundStatus(1);
- chargingOrderRefund.setPayType(tChargingOrder.getPaymentType());
- chargingOrderRefund.setRefundTime(LocalDateTime.now());
- chargingOrderRefund.setCode(tChargingOrder.getCode());
+ TShoppingOrderRefund shoppingOrderRefund = new TShoppingOrderRefund();
+ shoppingOrderRefund.setShoppingOrderId(shoppingOrder.getId());
+ shoppingOrderRefund.setRefundAmount(payOrderQueryDto.getRefundAmount());
+ shoppingOrderRefund.setRefundStatus(1);
+ shoppingOrderRefund.setPayType(shoppingOrder.getPaymentType());
+ shoppingOrderRefund.setRefundTime(LocalDateTime.now());
+ shoppingOrderRefund.setCode(shoppingOrder.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());
+ shoppingOrderRefund.setRefundCode("GWF" + sdf.format(new Date()) + (Double.valueOf(Math.random() * 1000).intValue()));
+ shoppingOrderRefund.setRefundTitle("后台退款");
+ shoppingOrderRefund.setRefundContent("后台退款");
+ shoppingOrderRefund.setRefundReason("后台退款");
+ shoppingOrderRefund.setRefundRemark(payOrderQueryDto.getRemark());
+ shoppingOrderRefund.setRefundTotalAmount(shoppingOrder.getRefundAmount().add(payOrderQueryDto.getRefundAmount()));
+ shoppingOrderRefund.setPayAmount(shoppingOrder.getPaymentAmount());
- if (1 == tChargingOrder.getPaymentType()) {
+ if (1 == shoppingOrder.getPaymentType()) {
WxPaymentRefundModel model = new WxPaymentRefundModel();
- model.setOut_trade_no(tChargingOrder.getCode());
- model.setOut_refund_no(chargingOrderRefund.getRefundCode());
- model.setTransaction_id(tChargingOrder.getSerialNumber());
+ model.setOut_trade_no(shoppingOrder.getCode());
+ model.setOut_refund_no(shoppingOrderRefund.getRefundCode());
+ model.setTransaction_id(shoppingOrder.getSerialNumber());
model.setReason("取消订单");
- model.setNotify_url("/order/t-shopping-order/cancelShoppingOrderWxRefund");
+ model.setNotify_url("/payment/wx/refund/notify");
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.setTotal(shoppingOrder.getPaymentAmount().multiply(new BigDecimal(100)).intValue());
amount.setCurrency("CNY");
model.setAmount(amount);
R<Map<String, Object>> orderR = wxPaymentClient.refundOrderR(model);
if (200 == orderR.getCode()) {
- tChargingOrder.setRefundStatus(2);
- tChargingOrder.setRefundAmount((tChargingOrder.getRefundAmount() == null ? BigDecimal.valueOf(0) : tChargingOrder.getRefundAmount()).add(payOrderQueryDto.getRefundAmount()));
- shoppingOrderService.updateById(tChargingOrder);
- shoppingOrderRefundService.save(chargingOrderRefund);
+ shoppingOrder.setRefundStatus(2);
+ shoppingOrder.setRefundAmount((shoppingOrder.getRefundAmount() == null ? BigDecimal.valueOf(0) : shoppingOrder.getRefundAmount()).add(payOrderQueryDto.getRefundAmount()));
+ shoppingOrderService.updateById(shoppingOrder);
+ shoppingOrderRefundService.save(shoppingOrderRefund);
//手续费
Map<String, Object> amount1 = (Map<String, Object>) orderR.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);
- shoppingOrderRefundService.updateById(chargingOrderRefund);
+ shoppingOrderRefund.setRefundFee(refund_fee);
+ shoppingOrderRefundService.updateById(shoppingOrderRefund);
}
}
- if (2 == tChargingOrder.getPaymentType()) {
+ if (2 == shoppingOrder.getPaymentType()) {
RefundReq dto = new RefundReq();
- dto.setOutTradeNo(tChargingOrder.getCode());
- dto.setOutRequestNo(tChargingOrder.getCode());
+ dto.setOutTradeNo(shoppingOrder.getCode());
+ dto.setOutRequestNo(shoppingOrder.getCode());
dto.setRefundAmount(payOrderQueryDto.getRefundAmount().toString());
dto.setRefundReason("取消订单");
RefundResp resp = aliPaymentClient.refund(dto).getData();
if (null != resp) {
- tChargingOrder.setRefundStatus(2);
- tChargingOrder.setRefundAmount((tChargingOrder.getRefundAmount() == null ? BigDecimal.valueOf(0) : tChargingOrder.getRefundAmount()).add(payOrderQueryDto.getRefundAmount()));
- shoppingOrderService.updateById(tChargingOrder);
- shoppingOrderRefundService.save(chargingOrderRefund);
+ shoppingOrder.setRefundStatus(2);
+ shoppingOrder.setRefundAmount((shoppingOrder.getRefundAmount() == null ? BigDecimal.valueOf(0) : shoppingOrder.getRefundAmount()).add(payOrderQueryDto.getRefundAmount()));
+ shoppingOrderService.updateById(shoppingOrder);
+ shoppingOrderRefundService.save(shoppingOrderRefund);
}
}
// if(3 == tChargingOrder.getPaymentType()){
@@ -3044,65 +3044,65 @@
}
if (payOrderQueryDto.getType() == 3) {
- TVipOrder tChargingOrder = vipOrderService.getById(payOrderQueryDto.getOrderId());
- if (tChargingOrder.getPaymentAmount().compareTo(payOrderQueryDto.getRefundAmount()) == -1) {
+ TVipOrder vipOrder = vipOrderService.getById(payOrderQueryDto.getOrderId());
+ if (vipOrder.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());
+ TVipOrderRefund vipOrderRefund = new TVipOrderRefund();
+ vipOrderRefund.setVipOrderId(vipOrder.getId());
+ vipOrderRefund.setRefundAmount(payOrderQueryDto.getRefundAmount());
+ vipOrderRefund.setRefundStatus(1);
+ vipOrderRefund.setPayType(vipOrder.getPaymentType());
+ vipOrderRefund.setRefundTime(LocalDateTime.now());
+ vipOrderRefund.setCode(vipOrder.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());
+ vipOrderRefund.setRefundCode("HYF" + sdf.format(new Date()) + (Double.valueOf(Math.random() * 1000).intValue()));
+ vipOrderRefund.setRefundTitle("后台退款");
+ vipOrderRefund.setRefundContent("后台退款");
+ vipOrderRefund.setRefundReason("后台退款");
+ vipOrderRefund.setRefundRemark(payOrderQueryDto.getRemark());
+ vipOrderRefund.setRefundTotalAmount(vipOrder.getRefundAmount().add(payOrderQueryDto.getRefundAmount()));
+ vipOrderRefund.setPayAmount(vipOrder.getPaymentAmount());
- if (1 == tChargingOrder.getPaymentType()) {
+ if (1 == vipOrder.getPaymentType()) {
WxPaymentRefundModel model = new WxPaymentRefundModel();
- model.setOut_trade_no(tChargingOrder.getCode());
- model.setOut_refund_no(chargingOrderRefund.getRefundCode());
- model.setTransaction_id(tChargingOrder.getSerialNumber());
+ model.setOut_trade_no(vipOrder.getCode());
+ model.setOut_refund_no(vipOrderRefund.getRefundCode());
+ model.setTransaction_id(vipOrder.getSerialNumber());
model.setReason("取消订单");
- model.setNotify_url("/order/t-shopping-order/cancelShoppingOrderWxRefund");
+ model.setNotify_url("/payment/wx/refund/notify");
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.setTotal(vipOrder.getPaymentAmount().multiply(new BigDecimal(100)).intValue());
amount.setCurrency("CNY");
model.setAmount(amount);
R<Map<String, Object>> 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);
+ vipOrder.setRefundStatus(2);
+ vipOrder.setRefundAmount((vipOrder.getRefundAmount() == null ? BigDecimal.valueOf(0) : vipOrder.getRefundAmount()).add(payOrderQueryDto.getRefundAmount()));
+ vipOrderService.updateById(vipOrder);
+ vipOrderRefundService.save(vipOrderRefund);
//手续费
Map<String, Object> amount1 = (Map<String, Object>) orderR.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);
- vipOrderRefundService.updateById(chargingOrderRefund);
+ vipOrderRefund.setRefundFee(refund_fee);
+ vipOrderRefundService.updateById(vipOrderRefund);
}
}
- if (2 == tChargingOrder.getPaymentType()) {
+ if (2 == vipOrder.getPaymentType()) {
RefundReq dto = new RefundReq();
- dto.setOutTradeNo(tChargingOrder.getCode());
- dto.setOutRequestNo(tChargingOrder.getCode());
+ dto.setOutTradeNo(vipOrder.getCode());
+ dto.setOutRequestNo(vipOrder.getCode());
dto.setRefundAmount(payOrderQueryDto.getRefundAmount().toString());
dto.setRefundReason("取消订单");
RefundResp resp = aliPaymentClient.refund(dto).getData();
if (null != resp) {
- tChargingOrder.setRefundStatus(2);
- tChargingOrder.setRefundAmount((tChargingOrder.getRefundAmount() == null ? BigDecimal.valueOf(0) : tChargingOrder.getRefundAmount()).add(payOrderQueryDto.getRefundAmount()));
- vipOrderService.updateById(tChargingOrder);
- vipOrderRefundService.save(chargingOrderRefund);
+ vipOrder.setRefundStatus(2);
+ vipOrder.setRefundAmount((vipOrder.getRefundAmount() == null ? BigDecimal.valueOf(0) : vipOrder.getRefundAmount()).add(payOrderQueryDto.getRefundAmount()));
+ vipOrderService.updateById(vipOrder);
+ vipOrderRefundService.save(vipOrderRefund);
}
}
// if(3 == tChargingOrder.getPaymentType()){
diff --git a/ruoyi-service/ruoyi-order/src/main/resources/mapper/order/TChargingOrderMapper.xml b/ruoyi-service/ruoyi-order/src/main/resources/mapper/order/TChargingOrderMapper.xml
index 2ebb895..0e8f16d 100644
--- a/ruoyi-service/ruoyi-order/src/main/resources/mapper/order/TChargingOrderMapper.xml
+++ b/ruoyi-service/ruoyi-order/src/main/resources/mapper/order/TChargingOrderMapper.xml
@@ -990,7 +990,7 @@
ifnull(t2.refund_amount, 0) as refundAmount
from t_charging_order t1
left join t_charging_order_refund t2 on t1.id = t2.charging_order_id
- where t1.del_flag = 0 and t1.status = 5 and t1.recharge_payment_status = 2
+ where t1.del_flag = 0 and t1.recharge_payment_status = 2
<if test="null != req.code and req.code!=''">
and t1.code LIKE CONCAT('%',#{req.code},'%')
</if>
@@ -1739,66 +1739,77 @@
</foreach>
</if>
</select>
+
+
<select id="chargingOrderNolimit" resultType="map">
select
- sum(charging_capacity) as total,
- sum(charging_duration) as `time`,
- sum(electric_price) as electronicMoney,
- sum(income) as paymentMoney,
- sum(service_price) as serviceMoney
- from t_charging_order_summary_data
- where charging_order_id in (
- select t1.id
- from t_charging_order t1
- where 1=1
- <if test="null != req.code and req.code!=''">
- and t1.code LIKE CONCAT('%',#{req.code},'%')
- </if>
- <if test="null != req.userIds and req.userIds.size()>0">
- and t1.app_user_id in
- <foreach collection="req.userIds" item="item" index="index" separator="," open="(" close=")">
- #{item}
- </foreach>
- </if>
- <if test="null != req.siteIds and req.siteIds.size()>0">
- and t1.site_id in
- <foreach collection="req.siteIds" item="item" index="index" separator="," open="(" close=")">
- #{item}
- </foreach>
- </if>
- <if test="req.orderType != null ">
- and t1.order_type = #{req.orderType}
- </if>
- <if test="req.status != null ">
- and t1.status = #{req.status}
- </if>
- <if test="req.orderSource != null and req.orderSource == 1 ">
- and (t1.order_source = 0 or t1.order_source = 1 )
- </if>
- <if test="req.orderSource != null and req.orderSource == 2 ">
- and t1.tripartite_platform_name = 'KuaiDian'
- </if>
- <if test="req.orderSource != null and req.orderSource == 3 ">
- and t1.tripartite_platform_name = 'XinDianTu'
- </if>
- <if test="req.siteId != null ">
- and t1.site_id = #{req.siteId}
- </if>
- <if test="req.pileId != null ">
- and t1.charging_pile_id = #{req.pileId}
- </if>
- <if test="req.gunId != null ">
- and t1.charging_gun_id = #{req.gunId}
- </if>
- <if test="startTime1 != null and startTime1!=''">
- and (t1.pay_time between #{startTime1} and #{startTime2})
- </if>
- <if test="endTime1 != null and endTime1!=''">
- and (t1.end_time between #{endTime1} and #{endTime2})
- </if>
- and t1.del_flag = 0
- )
+ sum(aa.electricity) as total,
+ sum(aa.charging_time) as `time`,
+ sum(aa.charging_amount) as paymentMoney,
+ sum(aa.period_electric_price) as electronicMoney,
+ sum(aa.period_service_price) as serviceMoney
+ from (
+ select
+ ifnull(a.electricity, 0) as electricity,
+ UNIX_TIMESTAMP(ifnull(a.end_time, now())) - UNIX_TIMESTAMP(ifnull(a.start_time, now())) as charging_time,
+ ifnull(a.recharge_amount - b.refund_amount, 0) as charging_amount,
+ ifnull(c.period_electric_price, 0) as period_electric_price,
+ ifnull(c.period_service_price, 0) as period_service_price
+ from t_charging_order a
+ left join (select charging_order_id, sum(refund_amount) as refund_amount from t_charging_order_refund where refund_status = 2 group by charging_order_id) b on (a.id = b.charging_order_id)
+ left join (select charging_order_id, sum(period_electric_price) as period_electric_price, sum(period_service_price) as period_service_price from t_charging_order_accounting_strategy group by charging_order_id) c on (a.id = c.charging_order_id)
+ where a.del_flag = 0
+ <if test="null != req.code and req.code!=''">
+ and a.code LIKE CONCAT('%',#{req.code},'%')
+ </if>
+ <if test="null != req.userIds and req.userIds.size()>0">
+ and a.app_user_id in
+ <foreach collection="req.userIds" item="item" index="index" separator="," open="(" close=")">
+ #{item}
+ </foreach>
+ </if>
+ <if test="null != req.siteIds and req.siteIds.size()>0">
+ and a.site_id in
+ <foreach collection="req.siteIds" item="item" index="index" separator="," open="(" close=")">
+ #{item}
+ </foreach>
+ </if>
+ <if test="req.orderType != null ">
+ and a.order_type = #{req.orderType}
+ </if>
+ <if test="req.status != null ">
+ and a.status = #{req.status}
+ </if>
+ <if test="req.orderSource != null and req.orderSource == 1 ">
+ and (a.order_source = 0 or a.order_source = 1 )
+ </if>
+ <if test="req.orderSource != null and req.orderSource == 2 ">
+ and a.tripartite_platform_name = 'KuaiDian'
+ </if>
+ <if test="req.orderSource != null and req.orderSource == 3 ">
+ and a.tripartite_platform_name = 'XinDianTu'
+ </if>
+ <if test="req.siteId != null ">
+ and a.site_id = #{req.siteId}
+ </if>
+ <if test="req.pileId != null ">
+ and a.charging_pile_id = #{req.pileId}
+ </if>
+ <if test="req.gunId != null ">
+ and a.charging_gun_id = #{req.gunId}
+ </if>
+ <if test="startTime1 != null and startTime1!=''">
+ and (a.start_time between #{startTime1} and #{startTime2})
+ </if>
+ <if test="endTime1 != null and endTime1!=''">
+ and (a.end_time between #{endTime1} and #{endTime2})
+ </if>
+ ) as aa
</select>
+
+
+
+
<select id="countOrdersByDate" resultType="com.ruoyi.order.vo.OrderCountByDate">
SELECT DATE_FORMAT(create_time, '%m/%d') AS `date`, COUNT(*) AS `count`
FROM t_charging_order
diff --git a/ruoyi-service/ruoyi-payment/src/main/java/com/ruoyi/payment/controller/WxPayController.java b/ruoyi-service/ruoyi-payment/src/main/java/com/ruoyi/payment/controller/WxPayController.java
index 2ac473e..24be986 100644
--- a/ruoyi-service/ruoyi-payment/src/main/java/com/ruoyi/payment/controller/WxPayController.java
+++ b/ruoyi-service/ruoyi-payment/src/main/java/com/ruoyi/payment/controller/WxPayController.java
@@ -197,14 +197,15 @@
chargingOrderClient.chargingOrderStartupFailureWxRefund(out_refund_no, refund_id, tradeState, success_time);
System.err.println("----充电启动失败退款回调通知");
break;
- case "GDF":
- shoppingOrderClient.cancelShoppingOrderWxRefund(out_refund_no, refund_id, tradeState, success_time);
- System.err.println("----商城订单取消退款回调通知");
+ //会员订单
+ case "HYF":
+ orderClient.vipWxRefund(out_refund_no, refund_id, tradeState, success_time);
+ System.err.println("----会员订单消退款回调通知");
break;
- //充电订单
+ //购物订单
case "GWF":
chargingOrderClient.shoppingOrderWxRefund(out_refund_no, refund_id, tradeState, success_time);
- System.err.println("----管理后台取消购物订单退款回调通知");
+ System.err.println("----购物订单退款回调通知");
break;
}
--
Gitblit v1.7.1