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.api.model.TChargingOrder;
|
import com.ruoyi.order.service.TChargingBillService;
|
import com.ruoyi.order.service.TChargingOrderService;
|
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;
|
@Resource
|
private TChargingOrderService chargingOrderService;
|
|
|
|
@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 );
|
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();
|
}
|
}
|
|
// 每个月最后一天凌晨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);
|
}
|
chargingBillService.updateBatchById(list);
|
} catch (Exception e) {
|
e.printStackTrace();
|
}
|
}
|
|
}
|