From 901843cdf54978385c52f34ff7aff9c7dec4b6ac Mon Sep 17 00:00:00 2001 From: Pu Zhibing <393733352@qq.com> Date: 星期四, 10 七月 2025 11:36:41 +0800 Subject: [PATCH] 修改定时任务时长 --- ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/util/task/TaskUtil.java | 319 ++++++++++++++++++++++++++++++++++------------------ 1 files changed, 207 insertions(+), 112 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 526144c..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,16 +1,32 @@ 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; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; @@ -29,8 +45,9 @@ * @author zhibing.pu * @date 2023/7/11 8:39 */ +@Slf4j @Component -public class TaskUtil { +public class TaskUtil implements ApplicationListener<WebServerInitializedEvent> { @Resource private TChargingBillService chargingBillService; @@ -38,129 +55,207 @@ private SiteClient siteClient; @Resource private TChargingOrderService chargingOrderService; + + @Resource + private TChargingOrderRefundService chargingOrderRefundService; + + @Resource + private UploadRealTimeMonitoringDataService uploadRealTimeMonitoringDataService; + + @Resource + private TransactionRecordService transactionRecordService; + + private Integer port = null; - // 每月2号凌晨12点执行的定时任务 -// @Scheduled(cron = "0 0 0 2 * ?") - // 每天凌晨12点执行的定时任务 - - -@Scheduled(cron = "0 0 0 * * ?") -//@Scheduled(fixedRate = 60000) - public void taskMonth() { - 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 ); - tChargingBill1.setType(1); - tChargingBill1.setSiteId(0); - tChargingBill1.setBillTime(LocalDateTime.now()); - tChargingBill1.setStatus(1); - tChargingBill1.setOrderState(2); - 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; + //十分钟循环执行的定时任务 + @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; + } + } } - 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 + } + //处理退款中的数据 + 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() { + 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()); // 将其连接成一个字符串 - 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); + 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 ); + tChargingBill1.setType(1); + tChargingBill1.setSiteId(0); + tChargingBill1.setBillTime(LocalDateTime.now()); + tChargingBill1.setStatus(1); + tChargingBill1.setOrderState(2); + 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); - if (!tChargingBills1.isEmpty())chargingBillService.saveBatch(tChargingBills1); - - } catch (Exception e) { - e.printStackTrace(); } } - // 每天晚上23:59:59执行的定时任务 + // 每个月最后一天23点执行的定时任务 @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