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 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.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方法"); } /** * 定时查找设备安装单/维修单是否超时 * * @throws Exception */ public void computeDeviceOrderTimeout() throws Exception { //查询设备订单表的全部数据 //假设30秒一次 List deviceOrderList = iDeviceOrderService.selectDeviceOrderAll(); //查询设备订单超时时间表的全部数据 List 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())) { //当前时间——派单时间如果大于deviceorderTime表中的receive_timeout就是订单已经超时了 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 assginTimeMinutes = Math.abs(durationA.toMinutes()); if (assginTimeMinutes > 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; } } }