liweidong
liweidong-hj 1 month ago
parent 83cf142786
commit d4fc949106
  1. 152
      blade-service/blade-desk/src/main/java/org/springblade/desk/logistics/service/impl/TaskExecuteRecordServiceImpl.java

@ -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;
}
}
/**

Loading…
Cancel
Save