wangmengzhao
2023-12-13 d8228730095cdcaccb40dd2dc290fc44779e340a
wumei-smart-master/springboot/wumei-iot/src/main/java/com/ruoyi/iot/task/DeviceOrderTask.java
@@ -3,6 +3,7 @@
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 org.springframework.stereotype.Component;
@@ -12,7 +13,6 @@
import java.time.Duration;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.Date;
import java.util.List;
/**
@@ -27,6 +27,8 @@
    @Resource
    private IDeviceOrderService iDeviceOrderService;
    @Resource
    private DeviceOrderMapper deviceOrderMapper;
    @Resource
    private IDeviceOrderTimeService iDeviceOrderTimeService;
@@ -46,6 +48,11 @@
        System.out.println("重写toString方法");
    }
    /**
     * 定时查找设备安装单/维修单是否超时
     *
     * @throws Exception
     */
    public void computeDeviceOrderTimeout() throws Exception {
        //查询设备订单表的全部数据   //假设30秒一次
        List<DeviceOrder> deviceOrderList = iDeviceOrderService.selectDeviceOrderAll();
@@ -59,17 +66,40 @@
            int finishTimeout = 0;
            //遍历deviceOrderList集合取出每一条数据的receive_time,如果receive_time不为空,计算receive_time接单时间和assgin_time派单时间之间相差多少分钟
            for (DeviceOrderTime deviceOrderTimes : deviceOrderTimeList) {
                if (deviceOrders.getReceiveTime() != null && deviceOrders.getAssginTime() != null) {
                if (deviceOrders.getAssginTime() != null) {
                    //拿到设备订单表里面订单的创建者的id
                    int createUser_Id = deviceOrders.getCreateUserId().intValue();
                    //拿到设备订单超时时间表的userid
                    Integer userId = deviceOrderTimes.getUserId();
                    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) {
                        receiveTimeout = deviceOrderTimes.getReceiveTimeout();  //600
                    if (createUser_Id == userId && deviceOrderTimes.getOrderType() == 1 && deviceOrderType.equals(deviceOrderTimes.getOrderType())) {
                        //当前时间——派单时间如果大于deviceorderTime表中的receive_timeout就是订单已经超时了
                        receiveTimeout = deviceOrderTimes.getReceiveTimeout();
                        finishTimeout = deviceOrderTimes.getFinishTimeout();
                        break;
                    }
                    if (createUser_Id == userId && deviceOrderTimes.getOrderType() == 2) {
                    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;
@@ -79,28 +109,29 @@
            //拿到当前时间的年月日时分秒去减——接单时间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);
            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 receive_timeMinutes = durationA.toMinutes();
            if (receive_timeMinutes > receiveTimeout) {
                deviceOrders.setReceiveTimeoutFlag(true);
            long assginTimeMinutes = Math.abs(durationA.toMinutes());
            if (assginTimeMinutes > finishTimeout) {
                deviceOrders.setId(deviceOrders.getId());
                deviceOrders.setReceiveTimeoutFlag(1);
                int rows = deviceOrderMapper.updateDeviceOrder(deviceOrders);
            }
            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);
            String formatC = targetFormatA.format(deviceOrders.getReceiveTime());
            LocalDateTime startDateTimeC = LocalDateTime.parse(formatA);
            LocalDateTime endDateTimeD = LocalDateTime.parse(formatC);
            Duration durationB = Duration.between(startDateTimeC, endDateTimeD);
            long finish_timeMinutes = durationB.toMinutes();
            if (receive_timeMinutes > finishTimeout) {
                deviceOrders.setFinishTimeoutFlag(true);
                break;
            long receiveTimeMinutes = Math.abs(durationB.toMinutes());
            if (receiveTimeMinutes > receiveTimeout) {
                deviceOrders.setId(deviceOrders.getId());
                deviceOrders.setFinishTimeoutFlag(1);
                int rows = deviceOrderMapper.updateDeviceOrder(deviceOrders);
            }
            break;
        }
    }
}