From a878aac2cc6d82a870056d8fd2bf7584fa4659ca Mon Sep 17 00:00:00 2001
From: Pu Zhibing <393733352@qq.com>
Date: 星期三, 09 七月 2025 19:09:26 +0800
Subject: [PATCH] 添加定时退款功能

---
 ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TChargingOrderServiceImpl.java           |   54 +++++++
 ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/TCECController.java              |   14 +
 ruoyi-service/ruoyi-order/src/test/java/com/ruoyi/order/RuoYiOrderApplicationTests.java                       |  119 ++--------------
 ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/TCECUtil.java                    |    1 
 ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/TChargingOrderService.java                    |   19 ++
 ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/mapper/TChargingOrderMapper.java                      |   22 +++
 ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/util/task/TaskUtil.java                               |   87 ++++++++++++
 ruoyi-service/ruoyi-order/src/main/resources/mapper/order/TChargingOrderMapper.xml                            |   52 +++++++
 ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/util/TCECCJianGuanontroller.java |   14 +
 ruoyi-service/ruoyi-order/pom.xml                                                                             |    9 +
 10 files changed, 274 insertions(+), 117 deletions(-)

diff --git a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/TCECController.java b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/TCECController.java
index 0988577..39ad475 100644
--- a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/TCECController.java
+++ b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/TCECController.java
@@ -1250,9 +1250,10 @@
 		if(data.size() > 0){
 			BigDecimal totalElectricity = data.stream().map(TChargingOrderAccountingStrategy::getPeriodElectricPrice).reduce(BigDecimal.ZERO, BigDecimal::add);
 			BigDecimal serviceCharge = data.stream().map(TChargingOrderAccountingStrategy::getPeriodServicePrice).reduce(BigDecimal.ZERO, BigDecimal::add);
+			BigDecimal totalMoney = totalElectricity.add(serviceCharge).setScale(4, RoundingMode.HALF_EVEN);
 			queryEquipChargeStatusResult.setElecMoney(totalElectricity);
 			queryEquipChargeStatusResult.setSeviceMoney(serviceCharge);
-			queryEquipChargeStatusResult.setTotalMoney(chargingOrder.getPaymentAmount());
+			queryEquipChargeStatusResult.setTotalMoney(totalMoney);
 		}else if(null != chargingOrder.getRechargeAmount() && null != chargingOrder.getResidualAmount()){
 			queryEquipChargeStatusResult.setElecMoney(chargingOrder.getRechargeAmount().subtract(chargingOrder.getResidualAmount()));
 			queryEquipChargeStatusResult.setSeviceMoney(BigDecimal.ZERO);
@@ -1505,11 +1506,12 @@
 		
 		List<TChargingOrderAccountingStrategy> data = chargingOrderAccountingStrategyClient.getChargingOrderAccountingStrategyByOrderId(chargingOrder.getId()).getData();
 		if(data.size() > 0){
-			BigDecimal totalElectricity = data.stream().map(TChargingOrderAccountingStrategy::getPeriodElectricPrice).reduce(BigDecimal.ZERO, BigDecimal::add);
-			BigDecimal serviceCharge = data.stream().map(TChargingOrderAccountingStrategy::getPeriodServicePrice).reduce(BigDecimal.ZERO, BigDecimal::add);
-			notificationChargeOrderInfo.setTotalElecMoney(totalElectricity.setScale(2, RoundingMode.HALF_EVEN));
-			notificationChargeOrderInfo.setTotalSeviceMoney(serviceCharge.setScale(2, RoundingMode.HALF_EVEN));
-			notificationChargeOrderInfo.setTotalMoney(chargingOrder.getPaymentAmount());
+			BigDecimal totalElectricity = data.stream().map(TChargingOrderAccountingStrategy::getPeriodElectricPrice).reduce(BigDecimal.ZERO, BigDecimal::add).setScale(4, RoundingMode.HALF_EVEN);
+			BigDecimal serviceCharge = data.stream().map(TChargingOrderAccountingStrategy::getPeriodServicePrice).reduce(BigDecimal.ZERO, BigDecimal::add).setScale(4, RoundingMode.HALF_EVEN);
+			BigDecimal totalMoney = totalElectricity.add(serviceCharge).setScale(4, RoundingMode.HALF_EVEN);
+			notificationChargeOrderInfo.setTotalElecMoney(totalElectricity);
+			notificationChargeOrderInfo.setTotalSeviceMoney(serviceCharge);
+			notificationChargeOrderInfo.setTotalMoney(totalMoney);
 		}else{
 			notificationChargeOrderInfo.setTotalElecMoney(chargingOrder.getRechargeAmount().subtract(chargingOrder.getResidualAmount()));
 			notificationChargeOrderInfo.setTotalSeviceMoney(BigDecimal.ZERO);
diff --git a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/TCECUtil.java b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/TCECUtil.java
index 2478762..6e2c1b1 100644
--- a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/TCECUtil.java
+++ b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/TCECUtil.java
@@ -227,6 +227,7 @@
 	 * @return
 	 */
 	public static NotificationChargeOrderInfoResult notificationChargeOrderInfo(Operator operator, NotificationChargeOrderInfo info){
+		System.out.println("推送充电订单信息:--->" + JSON.toJSONString(info));
 		HttpRequest post = HttpUtil.createPost(operator.getUrl() + InterfaceUrlEnum.NOTIFICATION_CHARGE_ORDER_INFO.getUrl());
 		buildBody(post, info, operator);
 		HttpResponse execute = post.execute();
diff --git a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/util/TCECCJianGuanontroller.java b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/util/TCECCJianGuanontroller.java
index ae2de5c..a7ce4cc 100644
--- a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/util/TCECCJianGuanontroller.java
+++ b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/util/TCECCJianGuanontroller.java
@@ -1193,9 +1193,10 @@
 		if(data.size() > 0){
 			BigDecimal totalElectricity = data.stream().map(TChargingOrderAccountingStrategy::getPeriodElectricPrice).reduce(BigDecimal.ZERO, BigDecimal::add);
 			BigDecimal serviceCharge = data.stream().map(TChargingOrderAccountingStrategy::getPeriodServicePrice).reduce(BigDecimal.ZERO, BigDecimal::add);
+			BigDecimal totalMoney = totalElectricity.add(serviceCharge).setScale(4, RoundingMode.HALF_EVEN);
 			queryEquipChargeStatusResult.setElecMoney(totalElectricity);
 			queryEquipChargeStatusResult.setSeviceMoney(serviceCharge);
-			queryEquipChargeStatusResult.setTotalMoney(chargingOrder.getPaymentAmount());
+			queryEquipChargeStatusResult.setTotalMoney(totalMoney);
 		}else{
 			queryEquipChargeStatusResult.setElecMoney(chargingOrder.getRechargeAmount().subtract(chargingOrder.getResidualAmount()));
 			queryEquipChargeStatusResult.setSeviceMoney(BigDecimal.ZERO);
@@ -1443,11 +1444,12 @@
 		
 		List<TChargingOrderAccountingStrategy> data = chargingOrderAccountingStrategyClient.getChargingOrderAccountingStrategyByOrderId(chargingOrder.getId()).getData();
 		if(data.size() > 0){
-			BigDecimal totalElectricity = data.stream().map(TChargingOrderAccountingStrategy::getPeriodElectricPrice).reduce(BigDecimal.ZERO, BigDecimal::add);
-			BigDecimal serviceCharge = data.stream().map(TChargingOrderAccountingStrategy::getPeriodServicePrice).reduce(BigDecimal.ZERO, BigDecimal::add);
-			notificationChargeOrderInfo.setTotalElecMoney(totalElectricity.setScale(2, RoundingMode.HALF_EVEN));
-			notificationChargeOrderInfo.setTotalSeviceMoney(serviceCharge.setScale(2, RoundingMode.HALF_EVEN));
-			notificationChargeOrderInfo.setTotalMoney(chargingOrder.getPaymentAmount());
+			BigDecimal totalElectricity = data.stream().map(TChargingOrderAccountingStrategy::getPeriodElectricPrice).reduce(BigDecimal.ZERO, BigDecimal::add).setScale(4, RoundingMode.HALF_EVEN);
+			BigDecimal serviceCharge = data.stream().map(TChargingOrderAccountingStrategy::getPeriodServicePrice).reduce(BigDecimal.ZERO, BigDecimal::add).setScale(4, RoundingMode.HALF_EVEN);
+			BigDecimal totalMoney = totalElectricity.add(serviceCharge).setScale(4, RoundingMode.HALF_EVEN);
+			notificationChargeOrderInfo.setTotalElecMoney(totalElectricity);
+			notificationChargeOrderInfo.setTotalSeviceMoney(serviceCharge);
+			notificationChargeOrderInfo.setTotalMoney(totalMoney);
 		}else{
 			notificationChargeOrderInfo.setTotalElecMoney(chargingOrder.getRechargeAmount().subtract(chargingOrder.getResidualAmount()));
 			notificationChargeOrderInfo.setTotalSeviceMoney(BigDecimal.ZERO);
diff --git a/ruoyi-service/ruoyi-order/pom.xml b/ruoyi-service/ruoyi-order/pom.xml
index 6df4555..2850f9b 100644
--- a/ruoyi-service/ruoyi-order/pom.xml
+++ b/ruoyi-service/ruoyi-order/pom.xml
@@ -166,6 +166,15 @@
                 </exclusion>
             </exclusions>
         </dependency>
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-data-redis</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.redisson</groupId>
+            <artifactId>redisson-spring-boot-starter</artifactId>
+            <version>3.16.8</version>
+        </dependency>
     </dependencies>
 
     <build>
diff --git a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/mapper/TChargingOrderMapper.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/mapper/TChargingOrderMapper.java
index f4a307a..3d07126 100644
--- a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/mapper/TChargingOrderMapper.java
+++ b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/mapper/TChargingOrderMapper.java
@@ -10,6 +10,7 @@
 import com.ruoyi.order.api.query.ChargingOrderQuery;
 import com.ruoyi.order.api.vo.ChargingOrderListVO;
 import com.ruoyi.order.api.vo.ChargingOrderVO;
+import com.ruoyi.order.api.vo.TChargingOrderVo;
 import com.ruoyi.order.dto.*;
 import com.ruoyi.order.vo.OrderCountByDate;
 import org.apache.ibatis.annotations.Mapper;
@@ -147,4 +148,25 @@
     List<OrderCountByDate> countOrdersByDate(@Param("startTime")LocalDateTime startTime, @Param("endTime")LocalDateTime endTime,@Param("gunIds")List<Integer> gunIds);
 
 	BigDecimal getSumDegreeBySiteIds(@Param("siteIds") List<Integer> siteIds);
+	
+	
+	/**
+	 * 获取启动失败且时间超过1小时的订单
+	 * @return
+	 */
+	List<TChargingOrder> findFailedStartupOrder();
+	
+	
+	/**
+	 * 获取停止中的数据
+	 * @return
+	 */
+	List<TChargingOrder> findStoppedOrder();
+	
+	
+	/**
+	 * 获取充电中的订单
+	 * @return
+	 */
+	List<TChargingOrder> findChargingOrder();
 }
diff --git a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/TChargingOrderService.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/TChargingOrderService.java
index 771d12c..4c467bc 100644
--- a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/TChargingOrderService.java
+++ b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/TChargingOrderService.java
@@ -330,4 +330,23 @@
     R<StatisticsOfBatteryVO> getStatisticsOfBattery();
 
 	BigDecimal getSumDegreeBySiteIds(List<Integer> siteIds);
+	
+	/**
+	 * 获取启动失败且时间超过1小时的订单
+	 * @return
+	 */
+	List<TChargingOrder> findFailedStartupOrder();
+	
+	
+	/**
+	 * 获取停止中的数据
+	 * @return
+	 */
+	List<TChargingOrder> findStoppedOrder();
+	
+	/**
+	 * 获取充电中的数据
+	 * @return
+	 */
+	List<TChargingOrder> findChargingOrder();
 }
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 35a250f..19cee63 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
@@ -51,6 +51,7 @@
 import com.ruoyi.order.service.TChargingOrderService;
 import com.ruoyi.order.service.TOrderEvaluateService;
 import com.ruoyi.order.service.*;
+import com.ruoyi.order.util.RedisLock;
 import com.ruoyi.order.util.mongodb.service.PlatformStartChargingReplyService;
 import com.ruoyi.order.util.mongodb.service.TransactionRecordService;
 import com.ruoyi.order.util.mongodb.service.UploadRealTimeMonitoringDataService;
@@ -71,10 +72,14 @@
 import com.ruoyi.system.api.domain.SysUser;
 import com.ruoyi.system.api.feignClient.SysUserClient;
 import io.seata.spring.annotation.GlobalTransactional;
+import org.redisson.Redisson;
+import org.redisson.api.RLock;
+import org.redisson.api.RedissonClient;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.redis.core.RedisTemplate;
 import org.springframework.stereotype.Service;
 import org.springframework.util.StringUtils;
 
@@ -221,6 +226,9 @@
 	private ITChargingOrderSummaryDataService chargingOrderSummaryDataService;
 	@Resource
 	private TOrderAppealService orderAppealService;
+	
+	@Autowired
+	private RedissonClient redissonClient;
 
 
 
@@ -2278,12 +2286,18 @@
 	 */
 	@Override
 	public R endChargeBillingCharge(TransactionRecordMessageVO vo) {
-		Boolean hasKey = redisService.hasKey("endOrder:" + vo.getTransaction_serial_number());
-		if(hasKey){
+		RLock lock = redissonClient.getLock("endOrder:" + vo.getTransaction_serial_number());
+		boolean tryLock = false;
+		try {
+			tryLock = lock.tryLock(100, TimeUnit.SECONDS);
+		} catch (InterruptedException e) {
+			e.printStackTrace();
+			lock.unlock();
 			return R.ok();
 		}
-		//添加1分钟的缓存
-		redisService.setCacheObject("endOrder:" + vo.getTransaction_serial_number(), vo.getTransaction_serial_number(), 1L, TimeUnit.MINUTES);
+		if(!tryLock){
+			return R.ok();
+		}
 		try {
 			TChargingOrder chargingOrder = this.getOne(new LambdaQueryWrapper<TChargingOrder>().eq(TChargingOrder::getCode, vo.getTransaction_serial_number()));
 			if(null == chargingOrder){
@@ -2763,7 +2777,7 @@
 		}catch (Exception e) {
 			e.printStackTrace();
 		}finally {
-			redisService.deleteObject("endOrder:" + vo.getTransaction_serial_number());
+			lock.unlock();
 		}
 		return R.ok();
 	}
@@ -4279,4 +4293,34 @@
 		return this.baseMapper.getSumDegreeBySiteIds(siteIds);
 
 	}
+	
+	
+	/**
+	 * 获取启动失败且时间超过1小时的订单
+	 * @return
+	 */
+	@Override
+	public List<TChargingOrder> findFailedStartupOrder() {
+		return this.baseMapper.findFailedStartupOrder();
+	}
+	
+	
+	/**
+	 * 获取停止中的数据
+	 * @return
+	 */
+	@Override
+	public List<TChargingOrder> findStoppedOrder() {
+		return this.baseMapper.findStoppedOrder();
+	}
+	
+	
+	/**
+	 * 获取充电中的数据
+	 * @return
+	 */
+	@Override
+	public List<TChargingOrder> findChargingOrder() {
+		return this.baseMapper.findChargingOrder();
+	}
 }
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 c4556d4..725396e 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
@@ -1,15 +1,29 @@
 package com.ruoyi.order.util.task;
 
+import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson2.util.UUIDUtils;
 import com.alibaba.nacos.common.utils.UuidUtils;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.ruoyi.chargingPile.api.feignClient.SiteClient;
 import com.ruoyi.chargingPile.api.model.Site;
+import com.ruoyi.common.core.domain.R;
+import com.ruoyi.common.core.utils.StringUtils;
+import com.ruoyi.integration.api.feignClient.UploadRealTimeMonitoringDataClient;
+import com.ruoyi.integration.api.model.TransactionRecord;
+import com.ruoyi.integration.api.model.UploadRealTimeMonitoringData;
 import com.ruoyi.order.api.model.TChargingBill;
 import com.ruoyi.order.api.model.TChargingOrder;
+import com.ruoyi.order.api.model.TChargingOrderRefund;
+import com.ruoyi.order.api.vo.TransactionRecordMessageVO;
 import com.ruoyi.order.service.TChargingBillService;
+import com.ruoyi.order.service.TChargingOrderRefundService;
 import com.ruoyi.order.service.TChargingOrderService;
+import com.ruoyi.order.util.mongodb.service.TransactionRecordService;
+import com.ruoyi.order.util.mongodb.service.UploadRealTimeMonitoringDataService;
+import lombok.extern.slf4j.Slf4j;
 import org.apache.logging.log4j.core.util.UuidUtil;
+import org.apache.poi.util.StringUtil;
+import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.boot.web.context.WebServerInitializedEvent;
 import org.springframework.context.ApplicationListener;
@@ -31,6 +45,7 @@
  * @author zhibing.pu
  * @date 2023/7/11 8:39
  */
+@Slf4j
 @Component
 public class TaskUtil implements ApplicationListener<WebServerInitializedEvent> {
 
@@ -41,9 +56,81 @@
     @Resource
     private TChargingOrderService chargingOrderService;
     
+    @Resource
+    private TChargingOrderRefundService chargingOrderRefundService;
+    
+    @Resource
+    private UploadRealTimeMonitoringDataService uploadRealTimeMonitoringDataService;
+    
+    @Resource
+    private TransactionRecordService transactionRecordService;
+    
     private Integer port = null;
 
 
+    //十分钟循环执行的定时任务
+    @Scheduled(fixedRate = 1000 * 60 * 10)
+    public void taskTenMinutes() {
+        if(null != port && port == 5400){
+            List<TChargingOrder> failedStartupOrder = chargingOrderService.findFailedStartupOrder();
+            log.info("定时任务执行,查询到启动失败的订单数量:{}", failedStartupOrder.size());
+            for (TChargingOrder order : failedStartupOrder) {
+                //查询是否有充电信息
+                List<UploadRealTimeMonitoringData> dataByOrderCode = uploadRealTimeMonitoringDataService.getDataByOrderCode(order.getCode());
+                log.info("充电实时数据:{}", JSON.toJSONString(dataByOrderCode));
+                //没有充电数据,则执行退款
+                if(null == dataByOrderCode || dataByOrderCode.isEmpty()){
+                    log.info("定时任务执行,查询到启动失败的订单,执行退款:{}", order.getCode());
+                    chargingOrderService.refund(order.getCode());
+                    int num = 0;
+                    while (true){
+                        TChargingOrderRefund one = chargingOrderRefundService.getOne(new LambdaQueryWrapper<TChargingOrderRefund>().eq(TChargingOrderRefund::getChargingOrderId, order.getId()));
+                        if(null != one && 2 == one.getRefundStatus()){
+                            order.setStatus(-1);
+                            chargingOrderService.updateById(order);
+                            break;
+                        }
+                        try {
+                            Thread.sleep(5000);
+                        } catch (InterruptedException e) {
+                            throw new RuntimeException(e);
+                        }
+                        num++;
+                        if(num > 10){
+                            break;
+                        }
+                    }
+                }
+            }
+            //处理退款中的数据
+            List<TChargingOrder> stoppedOrder = chargingOrderService.findStoppedOrder();
+            log.info("定时任务执行,查询到停止中的订单数量:{}", stoppedOrder.size());
+            for (TChargingOrder order : stoppedOrder) {
+                TransactionRecord one = transactionRecordService.findOne(order.getCode());
+                if(null != one){
+                    log.info("定时任务执行,查询到停止中的订单账单数据:{}", JSON.toJSONString(one));
+                    TransactionRecordMessageVO vo = new TransactionRecordMessageVO();
+                    BeanUtils.copyProperties(one, vo);
+                    R r = chargingOrderService.endChargeBillingCharge(vo);
+                    log.info("定时任务执行,停止中的订单处理结果:{}", JSON.toJSONString(r));
+                }
+            }
+            //处理状态为充电中,但硬件已完成的订单
+            List<TChargingOrder> chargingOrder = chargingOrderService.findChargingOrder();
+            log.info("定时任务执行,查询到充电中的订单数量:{}", chargingOrder.size());
+            for (TChargingOrder order : chargingOrder) {
+                TransactionRecord one = transactionRecordService.findOne(order.getCode());
+                if(null != one && StringUtils.isNotEmpty(one.getResult())){
+                    log.info("定时任务执行,查询到充电中的订单账单数据:{}", JSON.toJSONString(one));
+                    TransactionRecordMessageVO vo = new TransactionRecordMessageVO();
+                    BeanUtils.copyProperties(one, vo);
+                    R r = chargingOrderService.endChargeBillingCharge(vo);
+                    log.info("定时任务执行,充电中的订单处理结果:{}", JSON.toJSONString(r));
+                }
+            }
+        }
+    }
+    
 
     @Scheduled(cron = "0 0 0 2 * ?")
     public void taskMonth() {
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 733c089..5add4b3 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
@@ -1774,4 +1774,56 @@
         </foreach>
 
     </select>
+    
+    <select id="findFailedStartupOrder" resultType="com.ruoyi.order.api.model.TChargingOrder">
+        SELECT
+            *
+        FROM
+            t_charging_order
+        WHERE
+            `status` = 2
+          AND recharge_payment_status = 2
+          AND recharge_serial_number IS NOT NULL
+          AND NOW() >= ADDDATE( pay_time, INTERVAL 60 MINUTE )
+          AND del_flag = 0
+          AND order_source = 1
+          AND id NOT IN (
+            SELECT
+                charging_order_id
+            FROM
+                t_charging_order_refund)
+    </select>
+    
+    
+    <select id="findStoppedOrder" resultType="com.ruoyi.order.api.model.TChargingOrder">
+        SELECT
+            *
+        FROM
+            t_charging_order
+        WHERE
+            `status` = 4
+          AND NOW() >= ADDDATE(end_time, INTERVAL 10 MINUTE )
+          AND del_flag = 0
+          AND id NOT IN (
+            SELECT
+                charging_order_id
+            FROM
+                t_charging_order_refund)
+    </select>
+    
+    
+    <select id="findChargingOrder" resultType="com.ruoyi.order.api.model.TChargingOrder">
+        SELECT
+            *
+        FROM
+            t_charging_order
+        WHERE
+            `status` = 3
+          AND del_flag = 0
+          AND id NOT IN (
+            SELECT
+                charging_order_id
+            FROM
+                t_charging_order_refund)
+    </select>
 </mapper>
diff --git a/ruoyi-service/ruoyi-order/src/test/java/com/ruoyi/order/RuoYiOrderApplicationTests.java b/ruoyi-service/ruoyi-order/src/test/java/com/ruoyi/order/RuoYiOrderApplicationTests.java
index bd4e6cd..a4b8a64 100644
--- a/ruoyi-service/ruoyi-order/src/test/java/com/ruoyi/order/RuoYiOrderApplicationTests.java
+++ b/ruoyi-service/ruoyi-order/src/test/java/com/ruoyi/order/RuoYiOrderApplicationTests.java
@@ -8,6 +8,7 @@
 //import com.ruoyi.chargingPile.api.model.Site;
 //import com.ruoyi.chargingPile.api.model.TChargingGun;
 //import com.ruoyi.chargingPile.api.model.TChargingPile;
+//import com.ruoyi.common.core.domain.R;
 //import com.ruoyi.common.core.web.domain.AjaxResult;
 //import com.ruoyi.common.core.web.page.PageInfo;
 //import com.ruoyi.common.redis.service.RedisService;
@@ -34,119 +35,37 @@
 //import com.ruoyi.payment.api.feignClient.AliPaymentClient;
 //import com.ruoyi.payment.api.feignClient.WxPaymentClient;
 //import org.junit.jupiter.api.Test;
+//import org.redisson.api.RLock;
+//import org.redisson.api.RedissonClient;
+//import org.springframework.beans.factory.annotation.Autowired;
 //import org.springframework.boot.test.context.SpringBootTest;
 //
 //import javax.annotation.Resource;
 //import java.io.PrintWriter;
 //import java.math.BigDecimal;
 //import java.util.*;
+//import java.util.concurrent.TimeUnit;
 //
 //@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT, classes = RuoYiOrderApplication.class)
 //public class RuoYiOrderApplicationTests {
 //
-//	@Resource
-//	private TChargingOrderService chargingOrderService;
-//
-//	@Resource
-//	private ChargingGunClient chargingGunClient;
-//	@Resource
-//	private TSettlementConfirmMapper tSettlementConfirmMapper;
-//
-//	@Resource
-//	private SiteClient siteClient;
-//
-//	@Resource
-//	private AppUserCarClient appUserCarClient;
-//	@Resource
-//	private AppUserClient appUserClient;
-//
-//	@Resource
-//	private ChargingPileClient chargingPileClient;
-//
-//	@Resource
-//	private TChargingOrderAccountingStrategyService chargingOrderAccountingStrategyService;
-//
-//	@Resource
-//	private TokenService tokenService;
-//
-//	@Resource
-//	private WxPaymentClient wxPaymentClient;
-//
-//	@Resource
-//	private AliPaymentClient aliPaymentClient;
-//
-//	@Resource
-//	private AppCouponClient appCouponClient;
-//
-//	@Resource
-//	private AppUserVipDetailClient appUserVipDetailClient;
-//
-//	@Resource
-//	private RedisService redisService;
-//
-//	@Resource
-//	private UploadRealTimeMonitoringDataClient uploadRealTimeMonitoringDataClient;
-//
-//	@Resource
-//	private ChargingHandshakeClient chargingHandshakeClient;
-//
-//	@Resource
-//	private SendMessageClient sendMessageClient;
-//
-//	@Resource
-//	private TOrderEvaluateService orderEvaluateService;
-//
-//	@Resource
-//	private AccountingStrategyDetailClient accountingStrategyDetailClient;
-//
-//	@Resource
-//	private AccountingStrategyDetailOrderClient accountingStrategyDetailOrderClient;
-//
-//	@Resource
-//	private AccountingStrategyClient accountingStrategyClient;
-//
-//	@Resource
-//	private PlatformStartChargingReplyClient platformStartChargingReplyClient;
-//
-//	@Resource
-//	private TChargingOrderRefundService chargingOrderRefundService;
-//
-//	@Resource
-//	private PlatformStopChargingReplyClient platformStopChargingReplyClient;
-//
-//	@Resource
-//	private AccountingStrategyOrderService accountingStrategyOrderService;
-//
-//	@Resource
-//	private AccountingStrategyDetailOrderService accountingStrategyDetailOrderService;
-//
-//	@Resource
-//	private InviteUserClient inviteUserClient;
-//
-//	@Resource
-//	private AppUserIntegralChangeClient appUserIntegralChangeClient;
-//
-//	@Resource
-//	private IntegralRuleClient integralRuleClient;
-//
-//	@Resource
-//	private VipClient vipClient;
-//
-//	@Resource
-//	private UserTagClient userTagClient;
-//
-//	@Resource
-//	private AppUserTagClient appUserTagClient;
-//
-//	@Resource
-//	private SecurityDetectionClient securityDetectionClient;
+//	@Autowired
+//	private RedissonClient redissonClient;
 //
 //
 //	@Test
 //	public void test(){
-//		PayOrderQueryDto payOrderQueryDto = new PayOrderQueryDto();
-//		payOrderQueryDto.setPageCurr(1);
-//		payOrderQueryDto.setPageSize(10000999);
-//		PageInfo<PayOrderDto> data = chargingOrderService.payOrderQuery(payOrderQueryDto).getData();
+//		RLock lock = redissonClient.getLock("endOrder:1234565");
+//		boolean tryLock = false;
+//		try {
+//			tryLock = lock.tryLock(100, TimeUnit.SECONDS);
+//		} catch (InterruptedException e) {
+//			e.printStackTrace();
+//			lock.unlock();
+//		}
+//		if(!tryLock){
+//			System.out.println("获取锁失败");
+//		}
+//		System.out.println("获取锁成功");
 //	}
 //}

--
Gitblit v1.7.1