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 * ?")
|
// 每天凌晨12点执行的定时任务
|
|
|
@Scheduled(cron = "0 0 12 1 * ?")
|
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++) {
|
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+1) );
|
tChargingBill1.setType(2);
|
tChargingBill1.setSiteId(collect.get(i));
|
tChargingBill1.setBillTime(LocalDateTime.now());
|
tChargingBill1.setStatus(1);
|
tChargingBill1.setOrderState(2);
|
tChargingBills.add(tChargingBill1);
|
}
|
System.err.println("列表"+tChargingBills);
|
if (!tChargingBills.isEmpty())chargingBillService.saveBatch(tChargingBills);
|
|
} catch (Exception e) {
|
e.printStackTrace();
|
}
|
}
|
// 每个月最后一天23点执行的定时任务
|
@Scheduled(cron = "0 0 12 1 * ?")
|
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);
|
}
|
chargingBillService.updateBatchById(list);
|
} catch (Exception e) {
|
e.printStackTrace();
|
}
|
}
|
|
}
|