xuhy
2024-05-28 5470d21a35286abe41fafc25a7deaabefd7c55da
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
162
163
164
165
166
167
168
169
package com.stylefeng.guns.modular.system.util;
 
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.stylefeng.guns.modular.system.dao.DriverWorkMapper;
import com.stylefeng.guns.modular.system.model.Driver;
import com.stylefeng.guns.modular.system.model.DriverWork;
import com.stylefeng.guns.modular.system.model.TSysFaceDistinguish;
import com.stylefeng.guns.modular.system.service.IDriverService;
import com.stylefeng.guns.modular.system.service.IOrderService;
import com.stylefeng.guns.modular.system.service.ITSysFaceDistinguishService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
 
import javax.annotation.Resource;
import java.util.*;
 
 
/**
 * 定时任务工具类
 */
@Component
public class TaskUtil {
 
    @Autowired
    private IDriverService driverService;
 
    @Autowired
    private IOrderService orderService;
 
    @Autowired
    private JGPushUtil jgPushUtil;
    @Resource
    private DriverWorkMapper driverWorkMapper;
 
    @Autowired
    private ITSysFaceDistinguishService faceDistinguishService;
 
    @Autowired
    private PushUtil pushUtil;
 
 
 
    public Set<Integer> driverIds = new HashSet<>();//存储需要提醒司机预约单的司机id
 
 
    //每隔一分钟去检测司机人脸
    @Scheduled(fixedRate = 1000 * 60)
    public void driverFace(){
        //拿到后台配置的人脸识别配置
        TSysFaceDistinguish tSysFaceDistinguish = faceDistinguishService.selectOne(null);
        //如果是关闭就结束
        if (tSysFaceDistinguish.getIsOpen()==2){
            return;
        }
        System.err.println("================正在进行人脸识别任务");
        //获取上线司机的ids
        List<DriverWork> driverIds = driverWorkMapper.selectList(new EntityWrapper<DriverWork>().eq("state", 1));
        //判断司机是否有正在进行中的订单,获取闲置司机id
        List<Integer> drivers = new ArrayList<>();
        for (DriverWork driverWork : driverIds) {
            try {
                List<Map<String, Object>> list = orderService.queryOrderList(1, 1, 10, driverWork.getDriverId());
                if(list.isEmpty()){
                    drivers.add(driverWork.getDriverId());
                }
            }catch (Exception e){
                e.printStackTrace();
            }
        }
       //从后台获取人脸识别的配置,比对最后一次打卡时间后进行socket推送
        List<Integer> pullDrivers = new ArrayList<>();
 
        List<Driver> todrivers = driverService.selectBatchIds(drivers);
        Date now = new Date();
        for (Driver todriver : todrivers) {
            if (todriver.getLastFacialTime()==null){
                pullDrivers.add(todriver.getId());
                continue;
            }
            Date lastFacialTime = todriver.getLastFacialTime();
            // 创建一个Calendar实例并设置为给定的日期
            Calendar calendar = Calendar.getInstance();
            calendar.setTime(lastFacialTime);
 
            // 增加2分钟
            calendar.add(Calendar.MINUTE, 2);
            Date updatedDate = calendar.getTime();
            int compareResult = now.compareTo(updatedDate);
            if (compareResult >= 0) {
                pullDrivers.add(todriver.getId());
            }
        }
 
        if (!pullDrivers.isEmpty()){
            for (Integer pullDriver : pullDrivers) {
                pushUtil.pushFaceTime(2,pullDriver);
            }
        }
 
 
    }
 
 
    /**
     * 每隔一分钟去处理的定时任务
     */
    @Scheduled(fixedRate = 1000 * 60)
    public void taskMinute(){
        try {
            //修改满足活动条件的数据(在线时长,订单量)
            driverService.taskMinute();
            //处于预约单
            orderService.reservationOrder();
            //处理车载端断电后的自动下班
            driverService.taskOffWork();
            //处理结束订单后30分钟解绑小号功能
//            orderService.taskMidAxbUnBindSend();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
 
 
 
    /**
     * 每隔五分钟去处理的定时任务
     */
    @Scheduled(fixedRate = 1000 * 60 * 5)
    public void taskFiveMinute(){
        try {
            for (Integer id: driverIds){
                jgPushUtil.push(1, "您的预约订单出行时间就要到了,请尽快前往预约地点接乘客", "DRIVER" + id);
            }
            this.driverIds.clear();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
 
 
 
    /**
     * 每天的凌晨执行的任务
     */
    @Scheduled(cron = "0 0 0 * * *")
    public void taskDay(){
        try {
            //生成当天的司机活动
            driverService.addTodayActivity();
        }catch (Exception e){
            e.printStackTrace();
        }
    }
 
 
//
//    /**
//     * 每月第一天的1点执行的任务
//     */
//    @Scheduled(cron = "0 0 1 1 * *")
//    public void taskMonth(){
//        try {
//
//        }catch (Exception e){
//            e.printStackTrace();
//        }
//    }
}