|
|
|
|
@ -275,48 +275,104 @@ public class TaskExecuteRecordServiceImpl extends BaseServiceImpl<TaskExecuteRe |
|
|
|
|
return insert > 0; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@Override |
|
|
|
|
public boolean containerToCtu(String taskCode) { |
|
|
|
|
log.info("开始执行containerToCtu,taskCode:{}", taskCode); |
|
|
|
|
|
|
|
|
|
try { |
|
|
|
|
// 1. 查询任务执行记录
|
|
|
|
|
TaskExecuteRecord taskExecuteRecord = taskExecuteRecordMapper.selectByTaskCode(taskCode); |
|
|
|
|
if(null == taskExecuteRecord){ |
|
|
|
|
log.error("未根据taskCode查询到有效数据,请求参数:{}", taskCode); |
|
|
|
|
return false; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// 2. 查询任务
|
|
|
|
|
Task task = taskService.getById(taskExecuteRecord.getTaskId()); |
|
|
|
|
if(null == task){ |
|
|
|
|
log.error("查询不到Task数据,请求参数:{}", taskExecuteRecord.getTaskId()); |
|
|
|
|
return false; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// 3. 检查是否需要送到库位
|
|
|
|
|
if(null == task.getLocationId()){ |
|
|
|
|
//证明不需要送到库位
|
|
|
|
|
//更新task状态 根据taskCode查询
|
|
|
|
|
log.info("任务{}不需要送到库位,直接完成", taskCode); |
|
|
|
|
|
|
|
|
|
// 直接更新任务状态为完成
|
|
|
|
|
task.setTaskStatus(Task.STATUS_FINISHED); |
|
|
|
|
boolean taskUpdate = taskService.updateById(task); |
|
|
|
|
if(!taskUpdate){ |
|
|
|
|
log.error("Task状态修改失败"); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if(taskUpdate){ |
|
|
|
|
log.info("Task状态修改成功,taskCode:{}", taskCode); |
|
|
|
|
return true; |
|
|
|
|
} else { |
|
|
|
|
log.error("Task状态修改失败,taskCode:{}", taskCode); |
|
|
|
|
return false; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// 4. 查询目标库位信息
|
|
|
|
|
Location location = locationService.getById(task.getLocationId()); |
|
|
|
|
if(null == location){ |
|
|
|
|
log.error("根据locationId未查询到位置信息,locationId:{}", task.getLocationId()); |
|
|
|
|
return false; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
AgvSchedulingTaskVO ctuSchedulingTask = genCtuSchedulingTask |
|
|
|
|
(AgvConstant.CTU_TASK_TYP, AgvConstant.CTU_CTNR_TYP, task.getBoxBarcode(), taskExecuteRecord.getEndPos(), location.getLocationCode(), AgvConstant.EQUIPMENT_TYPE_CTU); |
|
|
|
|
// 5. 校验必要参数
|
|
|
|
|
if(StringUtils.isEmpty(task.getBoxBarcode())){ |
|
|
|
|
log.error("任务箱码为空,taskCode:{}", taskCode); |
|
|
|
|
return false; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if(null != ctuSchedulingTask){ |
|
|
|
|
if(StringUtils.isEmpty(taskExecuteRecord.getEndPos())){ |
|
|
|
|
log.error("任务执行记录的终点位置为空,taskCode:{}", taskCode); |
|
|
|
|
return false; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// 6. 生成CTU调度任务
|
|
|
|
|
AgvSchedulingTaskVO ctuSchedulingTask = genCtuSchedulingTask( |
|
|
|
|
AgvConstant.CTU_TASK_TYP, |
|
|
|
|
AgvConstant.CTU_CTNR_TYP, |
|
|
|
|
task.getBoxBarcode(), |
|
|
|
|
taskExecuteRecord.getEndPos(), |
|
|
|
|
location.getLocationCode(), |
|
|
|
|
AgvConstant.EQUIPMENT_TYPE_CTU |
|
|
|
|
); |
|
|
|
|
|
|
|
|
|
if(null == ctuSchedulingTask){ |
|
|
|
|
log.error("生成CTU调度任务失败,taskCode:{}", taskCode); |
|
|
|
|
return false; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// 7. 添加入库记录
|
|
|
|
|
boolean record = inboundRecord(ctuSchedulingTask, task); |
|
|
|
|
if(!record){ |
|
|
|
|
log.error("添加入库记录失败,taskCode:{}", taskCode); |
|
|
|
|
return false; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// 8. 所有操作成功后,更新任务状态
|
|
|
|
|
task.setTaskStatus(Task.STATUS_FINISHED); |
|
|
|
|
boolean taskUpdate = taskService.updateById(task); |
|
|
|
|
|
|
|
|
|
if(!taskUpdate){ |
|
|
|
|
log.error("Task状态修改失败"); |
|
|
|
|
} |
|
|
|
|
// 添加任务
|
|
|
|
|
boolean record = inboundRecord(ctuSchedulingTask, task); |
|
|
|
|
log.error("Task状态修改失败,但CTU调度已成功,taskCode:{}", taskCode); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
log.info("CTU调度成功,taskCode:{},from:{},to:{}", |
|
|
|
|
taskCode, taskExecuteRecord.getEndPos(), location.getLocationCode()); |
|
|
|
|
|
|
|
|
|
return true; |
|
|
|
|
|
|
|
|
|
} catch (Exception e) { |
|
|
|
|
log.error("containerToCtu执行异常,taskCode:{}", taskCode, e); |
|
|
|
|
return false; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@Override |
|
|
|
|
public AgvSchedulingTaskVO genCtuSchedulingTask(String taskTyp, String ctnrTyp, String ctnrCode, |
|
|
|
|
String startPos, String endPos, String type) { |
|
|
|
|
@ -391,50 +447,94 @@ public class TaskExecuteRecordServiceImpl extends BaseServiceImpl<TaskExecuteRe |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@Override |
|
|
|
|
public boolean containerToAgv(String taskCode) { |
|
|
|
|
log.info("开始执行containerToAgv,taskCode:{}", taskCode); |
|
|
|
|
|
|
|
|
|
// 1. 查询任务执行记录
|
|
|
|
|
TaskExecuteRecord taskExecuteRecord = taskExecuteRecordMapper.selectByTaskCode(taskCode); |
|
|
|
|
if(null == taskExecuteRecord){ |
|
|
|
|
if (null == taskExecuteRecord) { |
|
|
|
|
log.error("未根据taskCode查询到有效数据,请求参数:{}", taskCode); |
|
|
|
|
return false; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// // 2. 校验任务状态
|
|
|
|
|
// if (!"WAITING".equals(taskExecuteRecord.getStatus())) {
|
|
|
|
|
// log.error("任务状态不正确,期望状态:WAITING,当前状态:{},taskCode:{}",
|
|
|
|
|
// taskExecuteRecord.getStatus(), taskCode);
|
|
|
|
|
// return false;
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
|
|
// 3. 查询任务
|
|
|
|
|
Task task = taskService.getById(taskExecuteRecord.getTaskId()); |
|
|
|
|
if(null == task){ |
|
|
|
|
if (null == task) { |
|
|
|
|
log.error("查询不到Task数据,请求参数:{}", taskExecuteRecord.getTaskId()); |
|
|
|
|
return false; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// 4. 获取并校验终点位置(梳齿架)
|
|
|
|
|
String endPos = taskExecuteRecord.getEndPos(); |
|
|
|
|
if (StringUtils.isEmpty(endPos)) { |
|
|
|
|
log.error("任务执行记录的终点位置为空,taskCode:{}", taskCode); |
|
|
|
|
return false; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// 5. 查询位置信息
|
|
|
|
|
Location location = locationService.selectByLocationCode(endPos, 1); |
|
|
|
|
if (null == location) { |
|
|
|
|
log.error("根据终点位置未查询到位置信息,endPos:{}", endPos); |
|
|
|
|
return false; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
Location location = locationService.selectByLocationCode(endPos,1); |
|
|
|
|
if(null != location){ |
|
|
|
|
//拿到站点
|
|
|
|
|
|
|
|
|
|
// 7. 查询站点信息
|
|
|
|
|
Long stationId = task.getStationId(); |
|
|
|
|
if(null == stationId){ |
|
|
|
|
if (null == stationId) { |
|
|
|
|
log.error("查询不到Task的站点数据,请求参数:{}", taskCode); |
|
|
|
|
return false; |
|
|
|
|
} |
|
|
|
|
Station station = stationService.getById(task.getStationId()); |
|
|
|
|
if(null == station){ |
|
|
|
|
log.error("查询不到站点数据,请求参数:{}", task.getStationId()); |
|
|
|
|
|
|
|
|
|
Station station = stationService.getById(stationId); |
|
|
|
|
if (null == station) { |
|
|
|
|
log.error("查询不到站点数据,请求参数:{}", stationId); |
|
|
|
|
return false; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
//调用agv小车
|
|
|
|
|
// 调用AGV
|
|
|
|
|
String taskType = agvTaskTypeUtil.getTaskTypeByPositions(location.getLocationCode(),station.getStationCode()); |
|
|
|
|
|
|
|
|
|
// 9. 调用AGV
|
|
|
|
|
try { |
|
|
|
|
String taskType = agvTaskTypeUtil.getTaskTypeByPositions( |
|
|
|
|
location.getLocationCode(), |
|
|
|
|
station.getStationCode() |
|
|
|
|
); |
|
|
|
|
|
|
|
|
|
boolean agvResult = genAgvSchedulingTask( |
|
|
|
|
taskType, location.getLocationCode(),station.getStationCode() , EQUIPMENT_TYPE_AGV, task |
|
|
|
|
taskType, |
|
|
|
|
location.getLocationCode(), |
|
|
|
|
station.getStationCode(), |
|
|
|
|
EQUIPMENT_TYPE_AGV, |
|
|
|
|
task |
|
|
|
|
); |
|
|
|
|
|
|
|
|
|
return agvResult; |
|
|
|
|
if (agvResult) { |
|
|
|
|
log.info("AGV调度成功,taskCode:{},from:{},to:{}", |
|
|
|
|
taskCode, location.getLocationCode(), station.getStationCode()); |
|
|
|
|
|
|
|
|
|
// 10. 可选:更新任务状态
|
|
|
|
|
// taskExecuteRecord.setStatus("AGV_DISPATCHED");
|
|
|
|
|
// taskExecuteRecordMapper.updateById(taskExecuteRecord);
|
|
|
|
|
} else { |
|
|
|
|
log.error("AGV调度失败,taskCode:{}", taskCode); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
return agvResult; |
|
|
|
|
|
|
|
|
|
} catch (Exception e) { |
|
|
|
|
log.error("调用AGV时发生异常,taskCode:{}", taskCode, e); |
|
|
|
|
return false; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
|