fix
longz
2026-05-30 6771fff413935485b5dce61769f133a44533d15c
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
package com.stylefeng.guns.modular.system.util;
 
import com.stylefeng.guns.modular.account.service.UserWithdrawalService;
import com.stylefeng.guns.modular.crossCity.server.ILineShiftDriverService;
import com.stylefeng.guns.modular.system.service.IDriverService;
import com.stylefeng.guns.modular.system.service.IOrderService;
import com.stylefeng.guns.modular.system.service.IUserMerchantCouponService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.web.context.WebServerInitializedEvent;
import org.springframework.boot.web.server.WebServer;
import org.springframework.context.ApplicationListener;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
 
import java.net.InetAddress;
import java.net.UnknownHostException;
import java.util.HashSet;
import java.util.Set;
 
 
/**
 * 定时任务工具类
 */
@Component
public class TaskUtil implements ApplicationListener<WebServerInitializedEvent> {
    
    @Autowired
    private IDriverService driverService;
    
    @Autowired
    private IOrderService orderService;
    
    @Autowired
    private JGPushUtil jgPushUtil;
    
    @Autowired
    private IUserMerchantCouponService userMerchantCouponService;
 
    @Autowired
    private UserWithdrawalService userWithdrawalService;
 
    @Autowired
    private ILineShiftDriverService lineShiftDriverService;
 
    public Set<Integer> driverIds = new HashSet<>();//存储需要提醒司机预约单的司机id
 
    private String ip = null;
 
 
 
 
 
    /**
     * 每隔一分钟去处理的定时任务
     */
    @Scheduled(fixedRate = 1000 * 60)
    public void taskMinute(){
        if(null != ip){
            try {
                //修改满足活动条件的数据(在线时长,订单量)
                driverService.taskMinute();
                //处于预约单
                orderService.reservationOrder();
                //处理车载端断电后的自动下班
                driverService.taskOffWork();
                //处理结束订单后30分钟解绑小号功能
                orderService.taskMidAxbUnBindSend();
                //修改过期的商家券
                userMerchantCouponService.updateExpired();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
 
    }
 
 
    /**
     * 每隔一分钟自动取消已超时且无有效订单的跨城司机排班
     */
    @Scheduled(fixedRate = 1000 * 60)
    public void autoCancelExpiredNoOrderShifts(){
        if(null != ip){
            try {
                lineShiftDriverService.autoCancelExpiredNoOrderShifts();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
 
    }
 
 
 
 
    /**
     * 每隔五分钟去处理的定时任务
     */
    @Scheduled(fixedRate = 1000 * 60 * 5)
    public void taskFiveMinute(){
        if(null != ip){
            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() {
        if(null != ip){
            try {
                //生成当天的司机活动
                driverService.addTodayActivity();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
 
    }
    
    
    @Override
    public void onApplicationEvent(WebServerInitializedEvent event) {
        // 获取环境对象
        WebServer webServer = event.getWebServer();
        // 获取端口号
        int port = webServer.getPort();
        // 打印端口号
        System.out.println("Spring Boot应用已启动,访问端口:" + port);
        InetAddress inetAddress = null;
        try {
            inetAddress = InetAddress.getLocalHost();
        } catch (UnknownHostException e) {
            throw new RuntimeException(e);
        }
        System.out.println("本机 IP 地址: " + inetAddress.getHostAddress());
        this.ip = inetAddress.getHostAddress();
    }
 
}