From fc555f5d9d49f9922a6f5688d4db7c2679f3252c Mon Sep 17 00:00:00 2001
From: 无关风月 <443237572@qq.com>
Date: 星期四, 17 七月 2025 18:53:47 +0800
Subject: [PATCH] 政务云数据上传bug修改
---
ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/util/task/TaskUtil.java | 284 ++++++++++++++++++++++++++++++++++++++++++--------------
1 files changed, 210 insertions(+), 74 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 97a7ab7..c9c2c85 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,14 +1,34 @@
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.ChargingMessageClient;
+import com.ruoyi.integration.api.feignClient.UploadRealTimeMonitoringDataClient;
+import com.ruoyi.integration.api.model.TransactionRecord;
+import com.ruoyi.integration.api.model.UploadRealTimeMonitoringData;
+import com.ruoyi.integration.api.vo.ChargingOrderVo;
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;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
@@ -27,104 +47,220 @@
* @author zhibing.pu
* @date 2023/7/11 8:39
*/
+@Slf4j
@Component
-public class TaskUtil {
+public class TaskUtil implements ApplicationListener<WebServerInitializedEvent> {
@Resource
private TChargingBillService chargingBillService;
@Resource
private SiteClient siteClient;
+ @Resource
+ private TChargingOrderService chargingOrderService;
+
+ @Resource
+ private TChargingOrderRefundService chargingOrderRefundService;
+
+ @Resource
+ private UploadRealTimeMonitoringDataService uploadRealTimeMonitoringDataService;
+
+ @Resource
+ private TransactionRecordService transactionRecordService;
+
+ @Resource
+ private ChargingMessageClient chargingMessageClient;
+
+ private Integer port = null;
- public static void main(String[] args) {
- LocalDate firstDayOfLastMonth = LocalDate.now().minusMonths(1).
- withDayOfMonth(2);
- String string = firstDayOfLastMonth.toString();
- // 将-替换为空字符串
- string = string.replace("-", "");
- System.err.println(string);
+
+ //十分钟循环执行的定时任务
+ @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));
+ }
+ }
+ }
}
- // 每月2号凌晨12点执行的定时任务
-// @Scheduled(cron = "0 0 0 2 * ?")
- // 每天凌晨12点执行的定时任务
+
-
-// @Scheduled(cron = "0 0 12 * * ?")
- @Scheduled(cron = "0 0 12 2 * ?")
- // 每30秒执行一次的定时任务
- @Scheduled(cron = "0/30 * * * * ?")
+ @Scheduled(cron = "0 0 0 2 * ?")
public void taskMonth() {
- try {
- System.err.println("执行定时任务生成账单");
- // 获取上个月的开始和结束日期
- LocalDate firstDayOfLastMonth = LocalDate.now().minusMonths(1).
- withDayOfMonth(2);
- String string = firstDayOfLastMonth.toString();
- // 将-替换为空字符串
- string = string.replace("-", "");
- // 生成一次全站订单
- TChargingBill tChargingBill = new TChargingBill();
- // 订单生成规则JSD+20231201(账单所属月份)+1131304205(随机10位数)+001(当月账单序号,每月重置)
- Random random = new Random();
- String randomDigits = random.ints(10, 0, 10) // 生成10个随机数字,范围在0-9
- .mapToObj(String::valueOf)
- .collect(Collectors.joining()); // 将其连接成一个字符串
- tChargingBill.setCode("JSD"+string+randomDigits );
- tChargingBill.setType(1);
- tChargingBill.setSiteId(0);
- tChargingBill.setBillTime(LocalDateTime.now());
- tChargingBill.setStatus(1);
- tChargingBill.setOrderState(2);
- chargingBillService.save(tChargingBill);
- // 每月二号给每个站点生成上月账单
- List<Integer> collect = siteClient.getSiteAll().getData().stream().map(Site::getId).collect(Collectors.toList());
- List<TChargingBill> tChargingBills = new ArrayList<>();
- for (int i = 0; i < collect.size(); i++) {
+ if(null != port && port == 5400){
+ try {
+ // 获取上个月的开始和结束日期
+ LocalDate firstDayOfLastMonth = LocalDate.now().minusMonths(1).
+ withDayOfMonth(2);
+ String string = firstDayOfLastMonth.toString();
+ // 将-替换为空字符串
+ string = string.replace("-", "");
+ // 生成一次全站订单
+ TChargingBill tChargingBill = new TChargingBill();
+ // 订单生成规则JSD+20231201(账单所属月份)+1131304205(随机10位数)+001(当月账单序号,每月重置)
+ Random random = new Random();
+ String randomDigits = random.ints(10, 0, 10) // 生成10个随机数字,范围在0-9
+ .mapToObj(String::valueOf)
+ .collect(Collectors.joining()); // 将其连接成一个字符串
+ tChargingBill.setCode("JSD"+string+randomDigits );
+ tChargingBill.setType(1);
+ tChargingBill.setSiteId(0);
+ tChargingBill.setBillTime(LocalDateTime.now());
+ tChargingBill.setStatus(1);
+ tChargingBill.setOrderState(2);
+ tChargingBill.setBillType(1);
+ System.err.println("定时任务生成充电算帐单:全站");
+ chargingBillService.save(tChargingBill);
+ // 生成一次全站订单
TChargingBill tChargingBill1 = new TChargingBill();
+ // 订单生成规则JSD+20231201(账单所属月份)+1131304205(随机10位数)+001(当月账单序号,每月重置)
Random random1 = new Random();
String randomDigits1 = random1.ints(10, 0, 10) // 生成10个随机数字,范围在0-9
.mapToObj(String::valueOf)
.collect(Collectors.joining()); // 将其连接成一个字符串
- tChargingBill1.setCode("JSD"+string+randomDigits1+(i+1) );
- tChargingBill1.setType(2);
- tChargingBill1.setSiteId(collect.get(i));
+ tChargingBill1.setCode("JSD"+string+randomDigits1 );
+ tChargingBill1.setType(1);
+ tChargingBill1.setSiteId(0);
tChargingBill1.setBillTime(LocalDateTime.now());
tChargingBill1.setStatus(1);
tChargingBill1.setOrderState(2);
- tChargingBills.add(tChargingBill1);
+ tChargingBill1.setBillType(2);
+ System.err.println("定时任务生成账户结算帐单:全站");
+ chargingBillService.save(tChargingBill1);
+ System.err.println("定时任务生成各个站点结算帐单");
+ List<Integer> collect = siteClient.getSiteAll().getData().stream().map(Site::getId).collect(Collectors.toList());
+ // 充电算帐单
+ List<TChargingBill> tChargingBills = new ArrayList<>();
+ // 账户结算账单
+ List<TChargingBill> tChargingBills1 = new ArrayList<>();
+ for (int i = 0; i < collect.size(); i++) {
+ TChargingBill tChargingBill2 = new TChargingBill();
+ Random random2 = new Random();
+ String randomDigits2 = random2.ints(10, 0, 10) // 生成10个随机数字,范围在0-9
+ .mapToObj(String::valueOf)
+ .collect(Collectors.joining()); // 将其连接成一个字符串
+ tChargingBill2.setCode("JSD"+string+randomDigits2+(i+1) );
+ tChargingBill2.setType(2);
+ List<TChargingOrder> list = chargingOrderService.lambdaQuery()
+ .eq(TChargingOrder::getSiteId, collect.get(i)).list();
+ if (list.isEmpty()){
+ continue;
+ }
+ tChargingBill2.setSiteId(collect.get(i));
+ tChargingBill2.setBillTime(LocalDateTime.now());
+ tChargingBill2.setBillType(1);
+ tChargingBill2.setStatus(1);
+ tChargingBill2.setOrderState(2);
+ tChargingBills.add(tChargingBill2);
+ TChargingBill tChargingBill3 = new TChargingBill();
+ Random random3 = new Random();
+ String randomDigits3 = random3.ints(10, 0, 10) // 生成10个随机数字,范围在0-9
+ .mapToObj(String::valueOf)
+ .collect(Collectors.joining()); // 将其连接成一个字符串
+ tChargingBill3.setCode("JSD"+string+randomDigits3+(i+1) );
+ tChargingBill3.setType(2);
+ tChargingBill3.setSiteId(collect.get(i));
+ tChargingBill3.setBillTime(LocalDateTime.now());
+ tChargingBill3.setBillType(2);
+ tChargingBill3.setStatus(1);
+ tChargingBill3.setOrderState(2);
+ tChargingBills1.add(tChargingBill3);
+ }
+ System.err.println("列表"+tChargingBills);
+ if (!tChargingBills.isEmpty())chargingBillService.saveBatch(tChargingBills);
+ if (!tChargingBills1.isEmpty())chargingBillService.saveBatch(tChargingBills1);
+
+ } catch (Exception e) {
+ e.printStackTrace();
}
- System.err.println("列表"+tChargingBills);
- if (!tChargingBills.isEmpty())chargingBillService.saveBatch(tChargingBills);
-
- } catch (Exception e) {
- e.printStackTrace();
}
}
+
// 每个月最后一天23点执行的定时任务
- @Scheduled(cron = "0 0 23 L * ?")
+ @Scheduled(cron = "0 0 23 * * ?")
public void taskLastDay() {
- try {
- // 获取上个月的开始和结束日期
- LocalDate firstDayOfLastMonth = LocalDate.now().minusMonths(1).
- withDayOfMonth(1);
- LocalDate lastDayOfLastMonth = LocalDate.now().minusMonths(1).
- withDayOfMonth(firstDayOfLastMonth.lengthOfMonth());
- // 将 LocalDate 转换为 LocalDateTime,并设定时间为一天的开始
- LocalDateTime startDateTime = firstDayOfLastMonth.atStartOfDay();
- LocalDateTime endDateTime = lastDayOfLastMonth.atTime(23, 59, 59); // 设定到最后一秒
- // 构建查询条件
- LambdaQueryWrapper<TChargingBill> queryWrapper = new LambdaQueryWrapper<>();
- queryWrapper.ge(TChargingBill::getBillTime,
- Date.from(startDateTime.atZone(ZoneId.systemDefault()).toInstant()))
- .le(TChargingBill::getBillTime,
- Date.from(endDateTime.atZone(ZoneId.systemDefault()).toInstant())); // 使用 le 包括最后一天的记录
- List<TChargingBill> list = chargingBillService.list(queryWrapper);
- for (TChargingBill tChargingBill : list) {
- tChargingBill.setStatus(2);
+ if(null != port && port == 5400){
+ try {
+ // 获取上个月的开始和结束日期
+ LocalDate firstDayOfLastMonth = LocalDate.now().minusMonths(1).
+ withDayOfMonth(1);
+ LocalDate lastDayOfLastMonth = LocalDate.now().minusMonths(1).
+ withDayOfMonth(firstDayOfLastMonth.lengthOfMonth());
+ // 将 LocalDate 转换为 LocalDateTime,并设定时间为一天的开始
+ LocalDateTime startDateTime = firstDayOfLastMonth.atStartOfDay();
+ LocalDateTime endDateTime = lastDayOfLastMonth.atTime(23, 59, 59); // 设定到最后一秒
+ // 构建查询条件
+ LambdaQueryWrapper<TChargingBill> queryWrapper = new LambdaQueryWrapper<>();
+ queryWrapper.ge(TChargingBill::getBillTime,
+ Date.from(startDateTime.atZone(ZoneId.systemDefault()).toInstant()))
+ .le(TChargingBill::getBillTime,
+ Date.from(endDateTime.atZone(ZoneId.systemDefault()).toInstant())); // 使用 le 包括最后一天的记录
+ List<TChargingBill> list = chargingBillService.list(queryWrapper);
+ for (TChargingBill tChargingBill : list) {
+ tChargingBill.setStatus(2);
+ }
+ chargingBillService.updateBatchById(list);
+ } catch (Exception e) {
+ e.printStackTrace();
}
- chargingBillService.updateBatchById(list);
- } catch (Exception e) {
- e.printStackTrace();
}
}
-
+
+ @Override
+ public void onApplicationEvent(WebServerInitializedEvent event) {
+ port = event.getWebServer().getPort();
+ System.out.println("端口号:" + port);
+ }
}
--
Gitblit v1.7.1