package com.ruoyi.order.util.task; 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.order.api.model.TChargingBill; import com.ruoyi.order.service.TChargingBillService; import org.apache.logging.log4j.core.util.UuidUtil; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; import javax.annotation.Resource; import java.time.LocalDate; import java.time.LocalDateTime; import java.time.ZoneId; import java.time.format.DateTimeFormatter; import java.util.ArrayList; import java.util.Date; import java.util.List; import java.util.Random; import java.util.stream.Collectors; /** * @author zhibing.pu * @date 2023/7/11 8:39 */ @Component public class TaskUtil { @Resource private TChargingBillService chargingBillService; @Resource private SiteClient siteClient; 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); } // 每月2号凌晨12点执行的定时任务 @Scheduled(cron = "0 0 0 2 * ?") 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+"001" ); tChargingBill.setType(1); tChargingBill.setBillTime(LocalDateTime.now()); tChargingBill.setStatus(1); tChargingBill.setOrderState(2); chargingBillService.save(tChargingBill); // 每月二号给每个站点生成上月账单 List collect = siteClient.getSiteAll().getData().stream().map(Site::getId).collect(Collectors.toList()); List tChargingBills = new ArrayList<>(); for (int i = 1; i <= collect.size(); i++) { TChargingBill tChargingBill1 = new TChargingBill(); 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 ); tChargingBill1.setType(2); tChargingBill1.setSiteId(collect.get(i)); tChargingBill1.setBillTime(LocalDateTime.now()); tChargingBill1.setStatus(1); tChargingBill1.setOrderState(2); tChargingBills.add(tChargingBill1); } if (!tChargingBills.isEmpty())chargingBillService.saveBatch(tChargingBills); } catch (Exception e) { e.printStackTrace(); } } // 每个月最后一天23点执行的定时任务 @Scheduled(cron = "0 0 23 L * ?") 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 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 list = chargingBillService.list(queryWrapper); for (TChargingBill tChargingBill : list) { tChargingBill.setStatus(2); } chargingBillService.updateBatchById(list); } catch (Exception e) { e.printStackTrace(); } } }