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