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 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.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; } } } }