| | |
| | | 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; |
| | |
| | | import java.time.Duration; |
| | | import java.time.LocalDateTime; |
| | | import java.time.format.DateTimeFormatter; |
| | | import java.util.Date; |
| | | import java.util.List; |
| | | |
| | | /** |
| | |
| | | |
| | | @Resource |
| | | private IDeviceOrderService iDeviceOrderService; |
| | | @Resource |
| | | private DeviceOrderMapper deviceOrderMapper; |
| | | @Resource |
| | | private IDeviceOrderTimeService iDeviceOrderTimeService; |
| | | |
| | |
| | | System.out.println("重写toString方法"); |
| | | } |
| | | |
| | | /** |
| | | * 定时查找设备安装单/维修单是否超时 |
| | | * |
| | | * @throws Exception |
| | | */ |
| | | public void computeDeviceOrderTimeout() throws Exception { |
| | | //查询设备订单表的全部数据 //假设30秒一次 |
| | | List<DeviceOrder> deviceOrderList = iDeviceOrderService.selectDeviceOrderAll(); |
| | |
| | | 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; |
| | |
| | | //拿到当前时间的年月日时分秒去减——接单时间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; |
| | | } |
| | | } |
| | | } |