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
package com.ruoyi.iot.task;
 
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.iot.domain.DeviceOrder;
import com.ruoyi.iot.domain.DeviceOrderTime;
import com.ruoyi.iot.service.IDeviceOrderService;
import com.ruoyi.iot.service.IDeviceOrderTimeService;
import org.springframework.stereotype.Component;
 
import javax.annotation.Resource;
import java.text.SimpleDateFormat;
import java.time.Duration;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.Date;
import java.util.List;
 
/**
 * @author wmz
 * @version v1.0
 * @ClassName DeviceOrderTask
 * @description TODO
 * @createTime 2023/12/5 14:25
 */
@Component("deviceorderTask")
public class DeviceOrderTask {
 
    @Resource
    private IDeviceOrderService iDeviceOrderService;
    @Resource
    private IDeviceOrderTimeService iDeviceOrderTimeService;
 
    public void ryMultipleParams(String s, Boolean b, Long l, Double d, Integer i) {
        System.out.println(StringUtils.format("执行多参方法: 字符串类型{},布尔类型{},长整型{},浮点型{},整形{}", s, b, l, d, i));
    }
 
    public void ryParams(String params) {
        System.out.println("执行有参方法:" + params);
    }
 
    public void ryNoParams() {
        System.out.println("执行无参方法");
    }
 
    public void ryNoParamsA() {
        System.out.println("重写toString方法");
    }
 
    public void computeDeviceOrderTimeout() throws Exception {
        //查询设备订单表的全部数据   //假设30秒一次
        List<DeviceOrder> deviceOrderList = iDeviceOrderService.selectDeviceOrderAll();
        //查询设备订单超时时间表的全部数据
        List<DeviceOrderTime> deviceOrderTimeList = iDeviceOrderTimeService.selectDeviceOrderTimeAll();
        //
        for (DeviceOrder deviceOrders : deviceOrderList) {
            //接单的超时时间
            int receiveTimeout = 0;
            //完成的超时时间
            int finishTimeout = 0;
            //遍历deviceOrderList集合取出每一条数据的receive_time,如果receive_time不为空,计算receive_time接单时间和assgin_time派单时间之间相差多少分钟
            for (DeviceOrderTime deviceOrderTimes : deviceOrderTimeList) {
                if (deviceOrders.getReceiveTime() != null && deviceOrders.getAssginTime() != null) {
                    //拿到设备订单表里面订单的创建者的id
                    int createUser_Id = deviceOrders.getCreateUserId().intValue();
                    //拿到设备订单超时时间表的userid
                    Integer userId = deviceOrderTimes.getUserId();
                    //拿到两个receive_timeout一个是 order_type = 1的和order_type=2的,finish_timeout拿到两个
                    if (createUser_Id == userId && deviceOrderTimes.getOrderType() == 1) {
                        receiveTimeout = deviceOrderTimes.getReceiveTimeout();  //600
                        finishTimeout = deviceOrderTimes.getFinishTimeout();
                    }
                    if (createUser_Id == userId && deviceOrderTimes.getOrderType() == 2) {
                        receiveTimeout = deviceOrderTimes.getReceiveTimeout();
                        finishTimeout = deviceOrderTimes.getFinishTimeout();
                        break;
                    }
                }
            }
            //拿到当前时间的年月日时分秒去减——接单时间receive_time和派单时间assign_time 得到时间间隔分钟,
            //并判断得到的这个时间间隔大不大于receive_timeout和finish_timeout的值
            SimpleDateFormat targetFormatA = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss");
            String timeStrA = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss"));  //当前时间
            String formatA = targetFormatA.format(deviceOrders.getReceiveTime());  //接单时间
 
            LocalDateTime startDateTimeA = LocalDateTime.parse(timeStrA);
            LocalDateTime endDateTimeB = LocalDateTime.parse(formatA);
            Duration durationA = Duration.between(startDateTimeA, endDateTimeB);
            long receive_timeMinutes = durationA.toMinutes();
            if (receive_timeMinutes > receiveTimeout) {
                deviceOrders.setReceiveTimeoutFlag(true);
            }
            SimpleDateFormat targetFormatB = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss");
            String timeStrB = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss"));  //当前时间
            String formatB = targetFormatB.format(deviceOrders.getAssginTime());
 
            LocalDateTime startDateTimeC = LocalDateTime.parse(timeStrB);
            LocalDateTime endDateTimeD = LocalDateTime.parse(formatB);
            Duration durationB = Duration.between(startDateTimeC, endDateTimeD);
            long finish_timeMinutes = durationB.toMinutes();
            if (receive_timeMinutes > finishTimeout) {
                deviceOrders.setFinishTimeoutFlag(true);
                break;
            }
        }
    }
}