Pu Zhibing
7 天以前 41d7465a87e2a52740936a5969c5b182e5eb09b3
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
package com.supersavedriving.driver.modular.system.util;
 
 
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.supersavedriving.driver.modular.system.model.Order;
import com.supersavedriving.driver.modular.system.service.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import org.springframework.util.StringUtils;
 
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Set;
import java.util.stream.Collectors;
 
 
/**
 * 定时任务工具类
 */
@Component
public class TaskUtil {
 
    @Autowired
    private IDriverService driverService;
 
    @Autowired
    private IAccountChangeDetailService accountChangeDetailService;
 
    @Autowired
    private IOrderService orderService;
 
    @Autowired
    private IYouTuiDriverService youTuiDriverService;
 
    @Autowired
    private RedisUtil redisUtil;
 
    @Autowired
    private IDriverWorkService driverWorkService;
 
    // 每秒执行一次的定时任务 接单大厅取消订单
    @Scheduled(fixedRate = 1000)
    public void taskSecond(){
        // 查询所有待接单订单
        List<Order> list = new ArrayList<>();
        List<Order> orders = orderService.selectList(new EntityWrapper<Order>()
                .eq("hallOrder", 1)
                        .eq("state",101)
                .isNotNull("endTime"));
        for (Order order : orders) {
            if (order.getEndTime().before(new Date())){
                // 已取消
                order.setState(301);
                list.add(order);
            }
        }
        // 批量取消订单
        System.err.println("取消数量:"+list.size());
        System.err.println("取消订单ids:"+list.stream().map(Order::getId).collect(Collectors.toList()));
        if (!list.isEmpty()){
            orderService.updateBatchById(list);
        }
    }
    /**
     * 5秒推送
     */
    @Scheduled(fixedRate = 1000 * 5)
    public void task5Seconds(){
        try {
            Set<String> orderServices = redisUtil.getSetAllValue("orderService");
            for (String s : orderServices) {
                orderService.pushOrderInfo(Long.valueOf(s));//开始推送订单数据
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
 
 
    @Scheduled(fixedRate = 1000 * 5)
    public void task5SecondsCheck(){
        try {
            Set<String> orderServices = redisUtil.getSetAllValue("orderService_check");
            for (String s : orderServices) {
                orderService.pushCheckOrderInfo(Long.valueOf(s));//开始推送订单数据
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
 
 
 
    /**
     * 每隔一分钟去处理的定时任务
     */
    @Scheduled(fixedRate = 1000 * 60)
    public void taskMinute(){
        try {
            driverWorkService.taskDriverOffWork();
            youTuiDriverService.editState();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
 
 
    /**
     * 每天的凌晨执行的任务
     */
    @Scheduled(cron = "0 0 0 * * *")
    public void taskDay(){
        try {
            orderService.completeCollection();
//            accountChangeDetailService.deductionInsurance();
        }catch (Exception e){
            e.printStackTrace();
        }
    }
 
 
 
    /**
     * 每月1日凌晨执行的任务
     */
    @Scheduled(cron = "0 0 0 1 * *")
    public void taskMonth1(){
        try {
            driverService.emptyIntegral();
        }catch (Exception e){
            e.printStackTrace();
        }
    }
 
 
    /**
     * 每月16日凌晨执行的任务
     */
    @Scheduled(cron = "0 0 0 16 * *")
    public void taskMonth16(){
        try {
            driverService.emptyIntegral();
        }catch (Exception e){
            e.printStackTrace();
        }
    }
}