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/util/task/TaskUtil.java | 87 +++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 87 insertions(+), 0 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 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() { -- Gitblit v1.7.1