226 lines
9.2 KiB
Java
226 lines
9.2 KiB
Java
package com.ruoyi.schedule.scheduleTask;
|
||
|
||
import cn.hutool.core.bean.BeanUtil;
|
||
import cn.hutool.core.lang.UUID;
|
||
import com.ruoyi.api.domain.wcs2wms.exception.TaskExceptionReceive;
|
||
import com.ruoyi.api.domain.wcs2wms.exception.TaskExceptionRequest;
|
||
import com.ruoyi.api.service.IApiService;
|
||
import com.ruoyi.bas.cargospace.domain.BasCargoSpace;
|
||
import com.ruoyi.bas.cargospace.service.IBasCargoSpaceService;
|
||
import com.ruoyi.common.core.domain.AjaxResult;
|
||
import com.ruoyi.job.domain.MydoJob;
|
||
import com.ruoyi.job.service.IJobCallBackService;
|
||
import com.ruoyi.job.service.IMydoJobService;
|
||
import com.ruoyi.queue.ddj.domain.DdjDeviceExecutionQueue;
|
||
import com.ruoyi.queue.ddj.service.IDdjDeviceExecutionQueueService;
|
||
import lombok.extern.slf4j.Slf4j;
|
||
import org.springframework.beans.factory.annotation.Autowired;
|
||
import org.springframework.scheduling.annotation.Scheduled;
|
||
import org.springframework.stereotype.Component;
|
||
|
||
import java.util.List;
|
||
|
||
import static com.ruoyi.common.TaskExceptionType.TASK_EXCEPTION_STOCKIN_OCCUPIED;
|
||
import static com.ruoyi.common.TaskStatusCode.*;
|
||
import static com.ruoyi.common.WmsTaskTypeCode.WMS_TASK_TYPE_EXCEPTION;
|
||
|
||
/**
|
||
* 处理wcs执行作业的定时任务类
|
||
*/
|
||
@Component
|
||
@Slf4j
|
||
public class TaskHandler {
|
||
|
||
@Autowired
|
||
private IMydoJobService mydoJobService;
|
||
@Autowired
|
||
private IJobCallBackService jobCallBackService;
|
||
@Autowired
|
||
private IBasCargoSpaceService basCargoSpaceService;
|
||
@Autowired
|
||
private IApiService apiService;
|
||
@Autowired
|
||
private IDdjDeviceExecutionQueueService ddjDeviceExecutionQueueService;
|
||
|
||
|
||
private static final int DEFAULTTIMEINTERVAL = 2000;
|
||
|
||
|
||
/**
|
||
* 处理未正常移除的【堆垛机执行完成】或【出库到位】的遗留任务
|
||
*/
|
||
// @Scheduled(fixedDelay = 3000)
|
||
public void mydoJobHandler() {
|
||
//查询所有标记为【已完成】的任务
|
||
List<MydoJob> jobs = mydoJobService.selectMydoJobList(
|
||
new MydoJob().builder().executionPhase(TASK_EP_FINISH).build()
|
||
);
|
||
if (!jobs.isEmpty()) {
|
||
for (MydoJob job : jobs) {
|
||
mydoJobService.taskFinish(Long.valueOf(job.getTaskNo()));
|
||
}
|
||
}
|
||
}
|
||
|
||
|
||
/**
|
||
* 【手动作废】 - 查询并处理标记为已经作废的任务
|
||
*/
|
||
//@Scheduled(fixedDelay = 3000)
|
||
public void cancelMydoJob(){
|
||
List<MydoJob> jobs = mydoJobService.selectInOrOutMydoJobList(
|
||
new MydoJob().builder().status(TASK_STATUS_INVALID).build()
|
||
);
|
||
|
||
if (!jobs.isEmpty()) {
|
||
for (MydoJob job : jobs) {
|
||
mydoJobService.ManuelTaskFinish(job.getTaskNo());
|
||
}
|
||
}
|
||
}
|
||
|
||
|
||
/**
|
||
* 【手动完成】 - 查询并处理标记为已经手动完成的任务
|
||
*/
|
||
//@Scheduled(fixedDelay = 3000)
|
||
public void finishMydoJob(){
|
||
List<MydoJob> jobs = mydoJobService.selectInOrOutMydoJobList(
|
||
new MydoJob().builder().status(TASK_STATUS_FINISH_MANUAL).build()
|
||
);
|
||
|
||
if (!jobs.isEmpty()) {
|
||
for (MydoJob job : jobs) {
|
||
mydoJobService.ManuelTaskFinish(job.getTaskNo());
|
||
}
|
||
}
|
||
}
|
||
|
||
|
||
/**
|
||
* 定时扫描未回传或回传异常的任务记录
|
||
*/
|
||
@Scheduled(fixedDelay = 3000)
|
||
public void jobCallBack() {
|
||
jobCallBackService.jobCallBack();
|
||
}
|
||
|
||
|
||
/**
|
||
* 【入库异常-请求重分】 - 【放货有货】处理方法
|
||
*/
|
||
@Scheduled(fixedDelay = DEFAULTTIMEINTERVAL)
|
||
public void stockinExceptionHandler() {
|
||
List<MydoJob> jobs = mydoJobService.selectInOrOutMydoJobList(
|
||
new MydoJob().builder().executionPhase(TASK_EXCEPTION_PUT).build()
|
||
);
|
||
|
||
String oldCargo = jobs.get(0).getCargoSpaceId();
|
||
if (!jobs.isEmpty()) {
|
||
for (MydoJob job : jobs) {
|
||
//上报异常 - 向wms请求重分接口
|
||
TaskExceptionRequest taskExceptionRequest = new TaskExceptionRequest();
|
||
taskExceptionRequest.setTaskClass(job.getInOrOut().substring(0, 1));
|
||
taskExceptionRequest.setType(String.valueOf(TASK_EXCEPTION_STOCKIN_OCCUPIED));
|
||
taskExceptionRequest.setTaskCode(job.getWmsTaskNo());
|
||
taskExceptionRequest.setTaskTypeCode(WMS_TASK_TYPE_EXCEPTION);//wms自定义文本
|
||
taskExceptionRequest.setReqCode(UUID.randomUUID().toString().replace("-", ""));
|
||
taskExceptionRequest.setAdverseCauses("当前位置已有货物,盘点后重新分配货位");
|
||
|
||
AjaxResult ajaxResult = apiService.reAssign(taskExceptionRequest);
|
||
if (ajaxResult.isSuccess()){
|
||
//获取返回的任务号和新分配的货位
|
||
TaskExceptionReceive mydoJobReAssign = BeanUtil.toBean(ajaxResult.get("data"), TaskExceptionReceive.class);
|
||
|
||
MydoJob wmsJob = new MydoJob();
|
||
wmsJob.setWmsTaskNo(mydoJobReAssign.getTaskCode());
|
||
if (mydoJobService.selectMydoJobList(wmsJob).size() == 0) {
|
||
log.warn("【响应异常】该任务不存在,任务号:{}", mydoJobReAssign.getTaskCode());
|
||
return;
|
||
}
|
||
|
||
//更新任务参数
|
||
job = mydoJobService.selectMydoJobByTaskNo(Long.valueOf(job.getTaskNo()));
|
||
job.setCargoSpaceId(mydoJobReAssign.getSiteCode());
|
||
job.setExecutionPhase(TASK_EXCEPTION_PUT_REASSIGN);
|
||
job.setFaultFlag("2");
|
||
mydoJobService.updateMydoJob(job);
|
||
log.info("【入库异常】请求wms重分货位成功,异常货位:{},新货位:{},任务号:{}", oldCargo, mydoJobReAssign.getSiteCode(), job.getTaskNo());
|
||
}else{
|
||
log.info("【入库异常】请求wms重分货位异常,异常上报请求失败,请咨询操作管理员,异常货位:{},当前任务号:{}", oldCargo, job.getTaskNo());
|
||
}
|
||
}
|
||
}
|
||
|
||
|
||
|
||
}
|
||
|
||
|
||
/**
|
||
* 【出库异常】 - 【取货无货】处理方法
|
||
*/
|
||
@Scheduled(fixedDelay = DEFAULTTIMEINTERVAL)
|
||
public void stockoutExceptionHandler() {
|
||
List<MydoJob> jobs = mydoJobService.selectInOrOutMydoJobList(
|
||
new MydoJob().builder().executionPhase(TASK_EXCEPTION_PICK).build()
|
||
);
|
||
|
||
if (!jobs.isEmpty()) {
|
||
for (MydoJob job : jobs) {
|
||
//向wms返回异常信息
|
||
TaskExceptionRequest taskExceptionRequest = new TaskExceptionRequest();
|
||
taskExceptionRequest.setTaskClass(job.getInOrOut().substring(0, 1));
|
||
taskExceptionRequest.setType(String.valueOf(TASK_EXCEPTION_STOCKIN_OCCUPIED));
|
||
taskExceptionRequest.setTaskCode(String.valueOf(job.getWmsTaskNo()));
|
||
taskExceptionRequest.setTaskTypeCode(WMS_TASK_TYPE_EXCEPTION);//todo 不知道填什么
|
||
taskExceptionRequest.setReqCode(UUID.randomUUID().toString().replace("-", ""));
|
||
taskExceptionRequest.setAdverseCauses("取货位置空,盘点后作废该任务");
|
||
|
||
AjaxResult ajaxResult = apiService.reMaterial(taskExceptionRequest);
|
||
|
||
if (ajaxResult.isSuccess()){
|
||
mydoJobService.InvalidMydoJob(Long.valueOf(job.getTaskNo()), Integer.valueOf(job.getRoadwayId()));
|
||
//清空/重置【取货无货】的出库异常货位库存信息
|
||
basCargoSpaceService.resetCargoSpaceByStockoutException(job.getCargoSpaceId());
|
||
|
||
log.info("【出库异常】堆垛机取货时目标位置无货,当前任务已作废,异常货位:{},任务号:{}", job.getCargoSpaceId(), job.getRoadwayId());
|
||
}else{
|
||
log.info("【出库异常】堆垛机取货时目标位置无货,异常上报请求失败,请咨询操作管理员,异常货位:{},任务号:{}", job.getCargoSpaceId(), job.getRoadwayId());
|
||
}
|
||
|
||
}
|
||
}
|
||
|
||
|
||
}
|
||
|
||
|
||
/**
|
||
* 【入库异常-重分完成】 - 堆垛机重新下发
|
||
*/
|
||
@Scheduled(fixedDelay = DEFAULTTIMEINTERVAL)
|
||
public void sendTaskForStacker(){
|
||
List<MydoJob> jobs = mydoJobService.selectInOrOutMydoJobList(
|
||
new MydoJob().builder().executionPhase(TASK_EXCEPTION_PUT_REASSIGN).build()
|
||
);
|
||
|
||
if (!jobs.isEmpty()) {
|
||
for (MydoJob job : jobs) {
|
||
//获取重分的货位重新向堆垛机下发任务
|
||
BasCargoSpace basCargoSpace = basCargoSpaceService.selectBasCargoSpaceByWmsCargoSpaceId(job.getCargoSpaceId());
|
||
DdjDeviceExecutionQueue ddjDeviceExecutionQueue =
|
||
ddjDeviceExecutionQueueService.selectDdjDeviceExecutionQueueByRwh(Long.valueOf(job.getTaskNo()), Integer.valueOf(job.getRoadwayId()));
|
||
ddjDeviceExecutionQueue.setMbph(basCargoSpace.getThePlatoon());
|
||
ddjDeviceExecutionQueue.setMblh(basCargoSpace.getTheColumn());
|
||
ddjDeviceExecutionQueue.setMbch(basCargoSpace.getTheFloor());
|
||
ddjDeviceExecutionQueue.setDdjxf("0");
|
||
ddjDeviceExecutionQueueService.updateDdjDeviceExecutionQueue(ddjDeviceExecutionQueue);
|
||
}
|
||
|
||
}
|
||
}
|
||
|
||
|
||
}
|