定时任务测试优化
This commit is contained in:
@@ -4,6 +4,8 @@ import org.mybatis.spring.annotation.MapperScan;
|
|||||||
import org.springframework.boot.SpringApplication;
|
import org.springframework.boot.SpringApplication;
|
||||||
import org.springframework.boot.autoconfigure.SpringBootApplication;
|
import org.springframework.boot.autoconfigure.SpringBootApplication;
|
||||||
import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
|
import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
|
||||||
|
import org.springframework.scheduling.annotation.EnableAsync;
|
||||||
|
import org.springframework.scheduling.annotation.EnableScheduling;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 启动程序
|
* 启动程序
|
||||||
@@ -12,6 +14,8 @@ import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
|
|||||||
*/
|
*/
|
||||||
@MapperScan("com.**.mapper")
|
@MapperScan("com.**.mapper")
|
||||||
@SpringBootApplication(exclude = { DataSourceAutoConfiguration.class })
|
@SpringBootApplication(exclude = { DataSourceAutoConfiguration.class })
|
||||||
|
@EnableScheduling
|
||||||
|
@EnableAsync
|
||||||
public class RuoYiApplication
|
public class RuoYiApplication
|
||||||
{
|
{
|
||||||
public static void main(String[] args)
|
public static void main(String[] args)
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ package com.ruoyi.common;
|
|||||||
public class TaskStatusCode {
|
public class TaskStatusCode {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 任务状态-待请求下发
|
* 任务状态-待执行
|
||||||
*/
|
*/
|
||||||
public static final String TASK_READY = "0";
|
public static final String TASK_READY = "0";
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
package com.ruoyi.device.agv.domain.queryTaskStatus;
|
package com.ruoyi.device.agv.domain.queryTaskStatus;
|
||||||
|
|
||||||
|
import com.ruoyi.common.utils.uuid.UUID;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
@@ -14,7 +15,7 @@ public class QueryTaskStatusRequest {
|
|||||||
/**
|
/**
|
||||||
* 请求编号,每个请求都要一个唯一编号,同一个请求重复提交,使用同一编号。
|
* 请求编号,每个请求都要一个唯一编号,同一个请求重复提交,使用同一编号。
|
||||||
*/
|
*/
|
||||||
private String reqCode;
|
private String reqCode = UUID.randomUUID().toString();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 请求时间戳,格式: "yyyy-MM-dd HH:mm:ss"
|
* 请求时间戳,格式: "yyyy-MM-dd HH:mm:ss"
|
||||||
|
|||||||
@@ -52,9 +52,9 @@ public class Execution {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 获取所有wcs任务
|
* 获取所有wcs任务并请求下发
|
||||||
*/
|
*/
|
||||||
public void getAllTask(){
|
public void executeTask(){
|
||||||
|
|
||||||
//查询实时任务表获取所有【待执行】任务
|
//查询实时任务表获取所有【待执行】任务
|
||||||
LambdaQueryWrapper<WcsTask> queryWrapper = new LambdaQueryWrapper<>();
|
LambdaQueryWrapper<WcsTask> queryWrapper = new LambdaQueryWrapper<>();
|
||||||
|
|||||||
@@ -12,6 +12,7 @@ import com.ruoyi.schedule.plc.domain.ConvPTLInRead;
|
|||||||
import com.ruoyi.schedule.plc.domain.ConvPTLOutRead;
|
import com.ruoyi.schedule.plc.domain.ConvPTLOutRead;
|
||||||
import com.ruoyi.schedule.task.domain.WcsTask;
|
import com.ruoyi.schedule.task.domain.WcsTask;
|
||||||
import com.ruoyi.schedule.task.service.IWcsTaskService;
|
import com.ruoyi.schedule.task.service.IWcsTaskService;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.stereotype.Component;
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
@@ -22,6 +23,7 @@ import java.util.List;
|
|||||||
* 获取任务生成AGV指令
|
* 获取任务生成AGV指令
|
||||||
*/
|
*/
|
||||||
@Component
|
@Component
|
||||||
|
@Slf4j
|
||||||
public class Generation {
|
public class Generation {
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
@@ -30,29 +32,63 @@ public class Generation {
|
|||||||
@Autowired
|
@Autowired
|
||||||
Execution execution;
|
Execution execution;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
IWcsTaskService iWcsTaskService;
|
IWcsTaskService iWcsTaskService;
|
||||||
|
|
||||||
//获取PTL拣选工位入口状态
|
public void generateTask() {
|
||||||
public List<ConvPTLInRead> getConvPTLInRead() {
|
|
||||||
|
|
||||||
|
//=========================CTU入库(PTL拣选出口到位)=========================
|
||||||
|
List<ConvPTLOutRead> convPTLOutReads=conv.getConvPTLOut();
|
||||||
|
|
||||||
|
//轮询输送机状态
|
||||||
|
for (int i = 0; i < convPTLOutReads.size(); i++) {
|
||||||
|
|
||||||
|
//PTL出口输送机到位
|
||||||
|
//条码不为空 && 存在任务号 && 设备占用(非空闲)
|
||||||
|
if (StringUtils.isBlank(convPTLOutReads.get(i).getPalletId()) &&
|
||||||
|
StringUtils.isBlank(convPTLOutReads.get(i).getTaskId()) &&
|
||||||
|
convPTLOutReads.get(i).getFree() == 0) {
|
||||||
|
|
||||||
|
|
||||||
|
//todo 请求wms获取调度任务 或 wms推送调度任务(请求wcs接口)
|
||||||
|
//todo 有无其他任务字段校验
|
||||||
|
|
||||||
|
// HttpResponse response = HttpRequest.get(Constant.BASEURL + "/job/inmydoJob/getTaskCount").execute();
|
||||||
|
// Integer count = JSON.parseObject(response.body(), Integer.class);
|
||||||
|
//
|
||||||
|
// WcsTask task = new WcsTask();
|
||||||
|
//
|
||||||
|
// iWcsTaskService.insertWcsTask(task);
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//=========================CTU出库(PTL拣选入口空)=========================
|
||||||
List<ConvPTLInRead> convPTLInReads=conv.getConvPTLIn();
|
List<ConvPTLInRead> convPTLInReads=conv.getConvPTLIn();
|
||||||
|
|
||||||
for (int i = 0; i < convPTLInReads.size(); i++) {
|
for (int i = 0; i < convPTLInReads.size(); i++) {
|
||||||
|
|
||||||
|
//PTL入口输送机空位
|
||||||
//设备空闲 && 输送机任务号空
|
//设备空闲 && 输送机任务号空
|
||||||
if (convPTLInReads.get(i).getFree() == 1 && StringUtils.isBlank(convPTLInReads.get(i).getTaskId())){
|
if (convPTLInReads.get(i).getFree() == 1 && StringUtils.isBlank(convPTLInReads.get(i).getTaskId())){
|
||||||
|
//todo 请求wms获取调度任务 或 wms推送调度任务(请求wcs接口)
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
return convPTLInReads;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
//=========================获取PTL拣选工位出口状态---【CTU入库】=========================
|
//=========================获取PTL拣选工位出口状态---【CTU入库】=========================
|
||||||
// @Scheduled(cron = "*/2 * * * * *")
|
|
||||||
public List<ConvPTLOutRead> getConvPTLOutRead() {
|
public List<ConvPTLOutRead> getConvPTLOutRead() {
|
||||||
|
|
||||||
List<ConvPTLOutRead> convPTLOutReads = conv.getConvPTLOut();
|
List<ConvPTLOutRead> convPTLOutReads = conv.getConvPTLOut();
|
||||||
@@ -72,22 +108,6 @@ public class Generation {
|
|||||||
|
|
||||||
iWcsTaskService.insertWcsTask(task);
|
iWcsTaskService.insertWcsTask(task);
|
||||||
|
|
||||||
//存在当前托盘条码的任务
|
|
||||||
if (count > 0){
|
|
||||||
//生成请求数据
|
|
||||||
GenAgvSchedulingTaskRequest request = new GenAgvSchedulingTaskRequest();
|
|
||||||
|
|
||||||
request.setTaskTyp("F12");
|
|
||||||
|
|
||||||
//添加路径测试
|
|
||||||
List<PositionCodeData> path = new ArrayList<PositionCodeData>(2);
|
|
||||||
path.add(new PositionCodeData("G1001","05"));
|
|
||||||
path.add(new PositionCodeData("010101","05"));
|
|
||||||
|
|
||||||
request.setPositionCodePath(path);
|
|
||||||
|
|
||||||
execution.sendCommand(request);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -6,11 +6,14 @@ import com.alibaba.fastjson2.JSON;
|
|||||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||||
import com.ruoyi.common.Constant;
|
import com.ruoyi.common.Constant;
|
||||||
import com.ruoyi.common.TaskStatusCode;
|
import com.ruoyi.common.TaskStatusCode;
|
||||||
|
import com.ruoyi.device.agv.domain.queryTaskStatus.QueryTaskStatusRequest;
|
||||||
|
import com.ruoyi.device.agv.domain.queryTaskStatus.QueryTaskStatusResponse;
|
||||||
import com.ruoyi.device.agv.domain.queryTaskStatus.TaskStatusData;
|
import com.ruoyi.device.agv.domain.queryTaskStatus.TaskStatusData;
|
||||||
import com.ruoyi.schedule.task.domain.WcsTask;
|
import com.ruoyi.schedule.task.domain.WcsTask;
|
||||||
import com.ruoyi.schedule.task.mapper.WcsTaskMapper;
|
import com.ruoyi.schedule.task.mapper.WcsTaskMapper;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.scheduling.annotation.Scheduled;
|
||||||
import org.springframework.stereotype.Component;
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
import java.time.LocalDateTime;
|
import java.time.LocalDateTime;
|
||||||
@@ -26,18 +29,26 @@ public class StatusUpdate {
|
|||||||
@Autowired
|
@Autowired
|
||||||
WcsTaskMapper wcsTaskMapper;
|
WcsTaskMapper wcsTaskMapper;
|
||||||
|
|
||||||
|
|
||||||
public void statusUpdate() {
|
public void statusUpdate() {
|
||||||
|
|
||||||
//查询实时任务表获取所有【下发成功】任务
|
//查询实时任务表获取所有【下发成功】任务
|
||||||
LambdaQueryWrapper<WcsTask> queryWrapper = new LambdaQueryWrapper<>();
|
LambdaQueryWrapper<WcsTask> queryWrapper = new LambdaQueryWrapper<>();
|
||||||
queryWrapper.eq(WcsTask::getTaskStatus, TaskStatusCode.TASK_SEND_SUCCESS);
|
queryWrapper.ne(WcsTask::getTaskStatus, TaskStatusCode.TASK_READY);
|
||||||
List<WcsTask> tasks = wcsTaskMapper.selectList(queryWrapper);
|
List<WcsTask> tasks = wcsTaskMapper.selectList(queryWrapper);
|
||||||
|
|
||||||
|
if (tasks.size() == 0 || tasks == null) return;
|
||||||
|
|
||||||
//wcs本地任务轮询
|
//wcs本地任务轮询
|
||||||
for (int i = 0; i < tasks.size(); i++) {
|
for (int i = 0; i < tasks.size(); i++) {
|
||||||
//查询【设备任务状态】接口是否有该任务号已
|
//查询【设备任务状态】接口是否已有该任务号
|
||||||
HttpResponse response = HttpRequest.post(Constant.BASEURL + "/queryTaskStatus").execute();
|
HttpResponse response = HttpRequest.post(Constant.BASEURL + "/queryTaskStatus")
|
||||||
List<TaskStatusData> deviceTasks = JSON.parseArray(response.body(), TaskStatusData.class);
|
.body(JSON.toJSONString(new QueryTaskStatusRequest()))
|
||||||
|
.execute();
|
||||||
|
QueryTaskStatusResponse queryTaskStatusResponse = JSON.parseObject(response.body(), QueryTaskStatusResponse.class);
|
||||||
|
List<TaskStatusData> deviceTasks = queryTaskStatusResponse.getData();
|
||||||
|
|
||||||
|
if (deviceTasks.size() == 0 || deviceTasks == null) return;
|
||||||
|
|
||||||
//接口查询的AGV/CTU设备任务轮询
|
//接口查询的AGV/CTU设备任务轮询
|
||||||
for (int j = 0; j < deviceTasks.size(); j++) {
|
for (int j = 0; j < deviceTasks.size(); j++) {
|
||||||
@@ -76,7 +87,7 @@ public class StatusUpdate {
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case "10"://【任务状态】更新为被中断
|
case "10"://【任务状态】更新为被中断
|
||||||
if (tasks.get(j).getTaskStatus() != TaskStatusCode.TASK_FINISH) {
|
if (tasks.get(j).getTaskStatus() != TaskStatusCode.TASK_INTERUPTED) {
|
||||||
tasks.get(j).setTaskStatus(TaskStatusCode.TASK_INTERUPTED);
|
tasks.get(j).setTaskStatus(TaskStatusCode.TASK_INTERUPTED);
|
||||||
wcsTaskMapper.updateWcsTask(tasks.get(j));
|
wcsTaskMapper.updateWcsTask(tasks.get(j));
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -17,7 +17,7 @@ import java.util.List;
|
|||||||
|
|
||||||
@Component
|
@Component
|
||||||
@Slf4j
|
@Slf4j
|
||||||
public class Finish {
|
public class TaskFinish {
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
WcsTaskMapper wcsTaskMapper;
|
WcsTaskMapper wcsTaskMapper;
|
||||||
@@ -41,6 +41,8 @@ public class Finish {
|
|||||||
for (int i = 0; i < tasks.size(); i++) {
|
for (int i = 0; i < tasks.size(); i++) {
|
||||||
|
|
||||||
//todo 任务完成/取消请求wms
|
//todo 任务完成/取消请求wms
|
||||||
|
//todo 任务完成/取消请求wms
|
||||||
|
//todo 任务完成/取消请求wms
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -0,0 +1,51 @@
|
|||||||
|
package com.ruoyi.schedule.scheduleTask;
|
||||||
|
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.scheduling.annotation.Async;
|
||||||
|
import org.springframework.scheduling.annotation.EnableAsync;
|
||||||
|
import org.springframework.scheduling.annotation.Scheduled;
|
||||||
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
|
@Slf4j
|
||||||
|
@Component
|
||||||
|
public class Timer {
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
Generation generation;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
Execution execution;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
StatusUpdate statusUpdate;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
TaskFinish taskFinish;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
TaskHandler taskHandler;
|
||||||
|
|
||||||
|
@Async
|
||||||
|
@Scheduled(cron = "*/2 * * * * *")
|
||||||
|
public void timerTask() {
|
||||||
|
|
||||||
|
try {
|
||||||
|
execution.executeTask();
|
||||||
|
Thread.sleep(200);
|
||||||
|
|
||||||
|
statusUpdate.statusUpdate();
|
||||||
|
Thread.sleep(200);
|
||||||
|
|
||||||
|
taskFinish.taskFinish();
|
||||||
|
Thread.sleep(200);
|
||||||
|
|
||||||
|
// generation.
|
||||||
|
|
||||||
|
} catch (Exception e) {
|
||||||
|
log.error("【调度任务异常】" + e.getMessage());
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user