xuhy
2025-01-07 88ac2574d89aed7c28b9c0370b19b8bb2d0364eb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
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();
        }
    }
 
}