wangmengzhao
2023-12-08 0f550cb81c4d663849a54e7f27b26c737dc47ec7
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
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.mapper.DeviceOrderMapper;
import com.ruoyi.iot.service.IDeviceOrderService;
import com.ruoyi.iot.service.IDeviceOrderTimeService;
import io.lettuce.core.ScriptOutputType;
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 DeviceOrderMapper deviceOrderMapper;
    @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.getAssginTime() != null) {
                    //拿到设备订单表里面订单的创建者的id
                    int createUser_Id = deviceOrders.getCreateUserId().intValue();
                    //拿到设备订单超时时间表的userid
                    Integer userId = deviceOrderTimes.getUserId();  //14
                    Integer orderType = deviceOrderTimes.getOrderType();
                    Integer deviceOrderType = Integer.valueOf(deviceOrders.getOrderType());
                    //拿到两个receive_timeout一个是 order_type = 1的和order_type=2的,finish_timeout拿到两个
                    if (createUser_Id == userId && deviceOrderTimes.getOrderType() == 1 && deviceOrderType.equals(deviceOrderTimes.getOrderType())) {
                        receiveTimeout = deviceOrderTimes.getReceiveTimeout();
                        finishTimeout = deviceOrderTimes.getFinishTimeout();
                        break;
                    }
                    if (createUser_Id == userId && deviceOrderTimes.getOrderType() == 2 && deviceOrderType.equals(deviceOrderTimes.getOrderType())) {
                        receiveTimeout = deviceOrderTimes.getReceiveTimeout();
                        finishTimeout = deviceOrderTimes.getFinishTimeout();
                        break;
                    }
                }
                if (deviceOrders.getReceiveTime() != null) {
                    //拿到设备订单表里面订单的创建者的id
                    int createUser_Id = deviceOrders.getCreateUserId().intValue();
                    //拿到设备订单超时时间表的userid
                    Integer userId = deviceOrderTimes.getUserId();  //14
                    Integer orderType = deviceOrderTimes.getOrderType();
                    Integer deviceOrderType = Integer.valueOf(deviceOrders.getOrderType());
                    //拿到两个receive_timeout一个是 order_type = 1的和order_type=2的,finish_timeout拿到两个
                    if (createUser_Id == userId && deviceOrderTimes.getOrderType() == 1 && deviceOrderType.equals(deviceOrderTimes.getOrderType())) {
                        receiveTimeout = deviceOrderTimes.getReceiveTimeout();
                        finishTimeout = deviceOrderTimes.getFinishTimeout();
                        break;
                    }
                    if (createUser_Id == userId && deviceOrderTimes.getOrderType() == 2 && deviceOrderType.equals(deviceOrderTimes.getOrderType())) {
                        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 formatA = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss"));  //当前时间
            String formatB = targetFormatA.format(deviceOrders.getAssginTime());  //接单时间
            LocalDateTime startDateTimeA = LocalDateTime.parse(formatA);
            LocalDateTime endDateTimeB = LocalDateTime.parse(formatB);
            Duration durationA = Duration.between(startDateTimeA, endDateTimeB);
            long finishTimeMinutes = Math.abs(durationA.toMinutes());
            if (finishTimeMinutes > finishTimeout) {
                deviceOrders.setId(deviceOrders.getId());
                deviceOrders.setReceiveTimeoutFlag(1);
                int rows = deviceOrderMapper.updateDeviceOrder(deviceOrders);
            }
 
            String formatC = targetFormatA.format(deviceOrders.getReceiveTime());
            LocalDateTime startDateTimeC = LocalDateTime.parse(formatA);
            LocalDateTime endDateTimeD = LocalDateTime.parse(formatC);
            Duration durationB = Duration.between(startDateTimeC, endDateTimeD);
            long receiveTimeMinutes = Math.abs(durationB.toMinutes());
            if (receiveTimeMinutes > receiveTimeout) {
                deviceOrders.setId(deviceOrders.getId());
                deviceOrders.setFinishTimeoutFlag(1);
                int rows = deviceOrderMapper.updateDeviceOrder(deviceOrders);
                break;
            }
        }
    }
}