|
@ -1,6 +1,8 @@ |
|
|
package org.nl.wms.sch.task_manage.task.tasks.connector; |
|
|
package org.nl.wms.sch.task_manage.task.tasks.connector; |
|
|
|
|
|
|
|
|
|
|
|
import cn.hutool.core.date.DateUtil; |
|
|
import cn.hutool.core.util.ObjectUtil; |
|
|
import cn.hutool.core.util.ObjectUtil; |
|
|
|
|
|
import cn.hutool.core.util.StrUtil; |
|
|
import com.alibaba.fastjson.JSONObject; |
|
|
import com.alibaba.fastjson.JSONObject; |
|
|
import com.baomidou.mybatisplus.core.toolkit.Wrappers; |
|
|
import com.baomidou.mybatisplus.core.toolkit.Wrappers; |
|
|
import lombok.extern.slf4j.Slf4j; |
|
|
import lombok.extern.slf4j.Slf4j; |
|
@ -19,6 +21,7 @@ import org.nl.wms.sch.task_manage.AbstractTask; |
|
|
import org.nl.wms.sch.task_manage.GeneralDefinition; |
|
|
import org.nl.wms.sch.task_manage.GeneralDefinition; |
|
|
import org.nl.wms.sch.task_manage.enums.NoticeTypeEnum; |
|
|
import org.nl.wms.sch.task_manage.enums.NoticeTypeEnum; |
|
|
import org.nl.wms.sch.task_manage.enums.TaskFinishedTypeEnum; |
|
|
import org.nl.wms.sch.task_manage.enums.TaskFinishedTypeEnum; |
|
|
|
|
|
import org.nl.wms.sch.task_manage.task.TaskFactory; |
|
|
import org.nl.wms.sch.task_manage.task.core.TaskStatus; |
|
|
import org.nl.wms.sch.task_manage.task.core.TaskStatus; |
|
|
import org.nl.wms.sch.task_manage.task.core.TaskType; |
|
|
import org.nl.wms.sch.task_manage.task.core.TaskType; |
|
|
import org.nl.wms.util.PointUtils; |
|
|
import org.nl.wms.util.PointUtils; |
|
@ -40,25 +43,22 @@ public class CNTTask extends AbstractTask { |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private static final String TASK_CONFIG_CODE = "CNTTask"; |
|
|
private static final String TASK_CONFIG_CODE = "CNTTask"; |
|
|
|
|
|
private static final String[] EMPTY_POINT = {"13-01-01","13-01-03"}; |
|
|
@Autowired |
|
|
@Autowired |
|
|
private ISchBasePointService pointService; |
|
|
private ISchBasePointService pointService; |
|
|
@Autowired |
|
|
@Autowired |
|
|
private ISchBaseTaskService taskService; |
|
|
private ISchBaseTaskService taskService; |
|
|
@Autowired |
|
|
@Autowired |
|
|
private ISchBaseTaskconfigService taskConfigService; |
|
|
|
|
|
@Autowired |
|
|
|
|
|
private ISysNoticeService noticeService; |
|
|
private ISysNoticeService noticeService; |
|
|
@Autowired |
|
|
@Autowired |
|
|
private ISchBasePointService schBasePointService; |
|
|
private ISchBasePointService schBasePointService; |
|
|
@Autowired |
|
|
@Autowired |
|
|
private ISchBaseVehiclematerialgroupService schBaseVehiclematerialgroupService; |
|
|
private TaskFactory taskFactory; |
|
|
|
|
|
|
|
|
@Override |
|
|
@Override |
|
|
protected void create() throws BadRequestException { |
|
|
protected void create() throws BadRequestException { |
|
|
// 获取任务
|
|
|
// 获取任务
|
|
|
List<SchBaseTask> tasks = taskService.findTasksByTaskStatus(TASK_CONFIG_CODE, TaskStatus.APPLY); |
|
|
List<SchBaseTask> tasks = taskService.findTasksByTaskStatus(TASK_CONFIG_CODE, TaskStatus.APPLY); |
|
|
// 配置信息
|
|
|
|
|
|
// 定义按数字后缀排序的比较器
|
|
|
|
|
|
Comparator<SchBaseTask> numericSuffixComparator = (s1, s2) -> { |
|
|
Comparator<SchBaseTask> numericSuffixComparator = (s1, s2) -> { |
|
|
Integer suffix1 = getNumericSuffix(s1.getPoint_code1()); |
|
|
Integer suffix1 = getNumericSuffix(s1.getPoint_code1()); |
|
|
Integer suffix2 = getNumericSuffix(s2.getPoint_code1()); |
|
|
Integer suffix2 = getNumericSuffix(s2.getPoint_code1()); |
|
@ -66,9 +66,8 @@ public class CNTTask extends AbstractTask { |
|
|
}; |
|
|
}; |
|
|
tasks = tasks.stream().sorted(numericSuffixComparator).collect(Collectors.toList()); |
|
|
tasks = tasks.stream().sorted(numericSuffixComparator).collect(Collectors.toList()); |
|
|
for (SchBaseTask task : tasks) { |
|
|
for (SchBaseTask task : tasks) { |
|
|
// 找起点
|
|
|
SchBasePoint schBasePoint = precedencePoint(); |
|
|
SchBasePoint schBasePoint = null; |
|
|
if (ObjectUtil.isEmpty(schBasePoint) && TaskType.CARRY_TASK.getValue().equals(task.getTask_type())) { |
|
|
if (TaskType.CARRY_TASK.getValue().equals(task.getTask_type())) { |
|
|
|
|
|
schBasePoint = schBasePointService.selectByRegionCode(RegionEnum.LAG_ROBOT_BEANDING_CELL.getRegion_code(), task.getVehicle_code(), "1"); |
|
|
schBasePoint = schBasePointService.selectByRegionCode(RegionEnum.LAG_ROBOT_BEANDING_CELL.getRegion_code(), task.getVehicle_code(), "1"); |
|
|
} |
|
|
} |
|
|
if (ObjectUtil.isEmpty(schBasePoint)) { |
|
|
if (ObjectUtil.isEmpty(schBasePoint)) { |
|
@ -79,43 +78,62 @@ public class CNTTask extends AbstractTask { |
|
|
NoticeTypeEnum.WARN.getCode()); |
|
|
NoticeTypeEnum.WARN.getCode()); |
|
|
continue; |
|
|
continue; |
|
|
} |
|
|
} |
|
|
|
|
|
updateTaskStatus(task, schBasePoint); |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
// 设置终点并修改创建成功状态
|
|
|
/** |
|
|
task.setPoint_code2(schBasePoint.getPoint_code()); |
|
|
* 修改任务状态 |
|
|
task.setVehicle_type(schBasePoint.getCan_vehicle_type()); |
|
|
* @param task |
|
|
task.setRemark(""); |
|
|
* @param schBasePoint |
|
|
task.setTask_status(TaskStatus.CREATED.getCode()); |
|
|
*/ |
|
|
if (task.getPoint_code1().endsWith("1") || task.getPoint_code1().endsWith("3") || task.getPoint_code1().endsWith("5")) { |
|
|
private void updateTaskStatus(SchBaseTask task, SchBasePoint schBasePoint) { |
|
|
task.setAcs_trace_id("4"); |
|
|
task.setPoint_code2(schBasePoint.getPoint_code()); |
|
|
} else { |
|
|
task.setVehicle_type(schBasePoint.getCan_vehicle_type()); |
|
|
if(task.getPoint_code1().endsWith("2")){ |
|
|
task.setRemark(""); |
|
|
String replace = task.getPoint_code1().replace("2", "1"); |
|
|
task.setTask_status(TaskStatus.CREATED.getCode()); |
|
|
SchBaseTask schBaseTask = taskService.getOne(Wrappers.lambdaQuery(SchBaseTask.class) |
|
|
if (task.getPoint_code1().endsWith("1") || task.getPoint_code1().endsWith("3") || task.getPoint_code1().endsWith("5")) { |
|
|
.eq(SchBaseTask::getPoint_code1, replace) |
|
|
task.setAcs_trace_id("4"); |
|
|
.le(SchBaseTask::getTask_status,TaskStatus.EXECUTING.getCode())); |
|
|
} else { |
|
|
if(ObjectUtil.isNotEmpty(schBaseTask)){ |
|
|
if(task.getPoint_code1().endsWith("2")){ |
|
|
task.setTask_status(TaskStatus.TIMEOUT.getCode()); |
|
|
updateTaskStop("2","1", task); |
|
|
} |
|
|
} else if(task.getPoint_code1().endsWith("4")){ |
|
|
} else if(task.getPoint_code1().endsWith("4")){ |
|
|
updateTaskStop("4","3", task); |
|
|
String replace = task.getPoint_code1().replace("4", "3"); |
|
|
} else if(task.getPoint_code1().endsWith("6")){ |
|
|
SchBaseTask schBaseTask = taskService.getOne(Wrappers.lambdaQuery(SchBaseTask.class) |
|
|
updateTaskStop("6","5", task); |
|
|
.eq(SchBaseTask::getPoint_code1, replace) |
|
|
|
|
|
.le(SchBaseTask::getTask_status,TaskStatus.EXECUTING.getCode())); |
|
|
|
|
|
if(ObjectUtil.isNotEmpty(schBaseTask)){ |
|
|
|
|
|
task.setTask_status(TaskStatus.TIMEOUT.getCode()); |
|
|
|
|
|
} |
|
|
|
|
|
} else if(task.getPoint_code1().endsWith("6")){ |
|
|
|
|
|
String replace = task.getPoint_code1().replace("6", "5"); |
|
|
|
|
|
SchBaseTask schBaseTask = taskService.getOne(Wrappers.lambdaQuery(SchBaseTask.class) |
|
|
|
|
|
.eq(SchBaseTask::getPoint_code1, replace) |
|
|
|
|
|
.le(SchBaseTask::getTask_status,TaskStatus.EXECUTING.getCode())); |
|
|
|
|
|
if(ObjectUtil.isNotEmpty(schBaseTask)){ |
|
|
|
|
|
task.setTask_status(TaskStatus.TIMEOUT.getCode()); |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
} |
|
|
TaskUtils.setUpdateByAcs(task); |
|
|
} |
|
|
taskService.updateById(task); |
|
|
TaskUtils.setUpdateByAcs(task); |
|
|
|
|
|
taskService.updateById(task); |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
|
* 优先分配点位 |
|
|
|
|
|
*/ |
|
|
|
|
|
private SchBasePoint precedencePoint() { |
|
|
|
|
|
for (int i = 0; i < EMPTY_POINT.length; i++) { |
|
|
|
|
|
SchBasePoint schBasePoint = schBasePointService.selectByPointCode(EMPTY_POINT[i]); |
|
|
|
|
|
if(ObjectUtil.isNotEmpty(schBasePoint) && schBasePoint.getPoint_status().equals(GoodsEnum.OUT_OF_STOCK.getValue()) |
|
|
|
|
|
&& !schBasePoint.getIs_lock()){ |
|
|
|
|
|
PointUtils.setUpdateByAcs(schBasePoint); |
|
|
|
|
|
schBasePoint.setIs_lock(true); |
|
|
|
|
|
schBasePointService.updateById(schBasePoint); |
|
|
|
|
|
return schBasePoint; |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
return null; |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
|
* 将任务设置为暂停 |
|
|
|
|
|
*/ |
|
|
|
|
|
public void updateTaskStop(String pointCode,String lastPointCode,SchBaseTask task){ |
|
|
|
|
|
String replace = task.getPoint_code1().replace(pointCode, lastPointCode); |
|
|
|
|
|
SchBaseTask schBaseTask = taskService.getOne(Wrappers.lambdaQuery(SchBaseTask.class) |
|
|
|
|
|
.eq(SchBaseTask::getPoint_code1, replace) |
|
|
|
|
|
.le(SchBaseTask::getTask_status,TaskStatus.EXECUTING.getCode())); |
|
|
|
|
|
if(ObjectUtil.isNotEmpty(schBaseTask)){ |
|
|
|
|
|
task.setTask_status(TaskStatus.TIMEOUT.getCode()); |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
@ -146,37 +164,74 @@ public class CNTTask extends AbstractTask { |
|
|
//TODO:取消任务的时候将int_task_code的清除
|
|
|
//TODO:取消任务的时候将int_task_code的清除
|
|
|
SchBaseTask taskObj = taskService.getByCode(task_code); |
|
|
SchBaseTask taskObj = taskService.getByCode(task_code); |
|
|
SchBasePoint schBasePoint = schBasePointService.selectByPointCode(taskObj.getPoint_code1()); |
|
|
SchBasePoint schBasePoint = schBasePointService.selectByPointCode(taskObj.getPoint_code1()); |
|
|
if (ObjectUtil.isNotEmpty(schBasePoint)) { |
|
|
updateCancelPoint(schBasePoint); |
|
|
schBasePoint.setIs_lock(false); |
|
|
|
|
|
PointUtils.setUpdateByAcs(schBasePoint); |
|
|
|
|
|
schBasePointService.updateById(schBasePoint); |
|
|
|
|
|
} |
|
|
|
|
|
SchBasePoint schBasePoint1 = schBasePointService.selectByPointCode(taskObj.getPoint_code2()); |
|
|
SchBasePoint schBasePoint1 = schBasePointService.selectByPointCode(taskObj.getPoint_code2()); |
|
|
if (ObjectUtil.isNotEmpty(schBasePoint1)) { |
|
|
updateCancelPoint(schBasePoint1); |
|
|
schBasePoint1.setIs_lock(false); |
|
|
|
|
|
PointUtils.setUpdateByAcs(schBasePoint1); |
|
|
|
|
|
schBasePointService.updateById(schBasePoint1); |
|
|
|
|
|
} |
|
|
|
|
|
if (ObjectUtil.isEmpty(taskObj)) { |
|
|
if (ObjectUtil.isEmpty(taskObj)) { |
|
|
throw new BadRequestException("该任务不存在"); |
|
|
throw new BadRequestException("该任务不存在"); |
|
|
} |
|
|
} |
|
|
this.cancelTask(taskObj, TaskFinishedTypeEnum.MANUAL_CONNECTOR); |
|
|
this.cancelTask(taskObj, TaskFinishedTypeEnum.MANUAL_CONNECTOR); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
private void updateCancelPoint(SchBasePoint schBasePoint) { |
|
|
|
|
|
if (ObjectUtil.isNotEmpty(schBasePoint)) { |
|
|
|
|
|
schBasePoint.setIs_lock(false); |
|
|
|
|
|
PointUtils.setUpdateByAcs(schBasePoint); |
|
|
|
|
|
schBasePointService.updateById(schBasePoint); |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
@Override |
|
|
@Override |
|
|
protected void feedbackTaskState(JSONObject param, SchBaseTask schBaseTask, BaseResponse result) { |
|
|
protected void feedbackTaskState(JSONObject param, SchBaseTask schBaseTask, BaseResponse result) { |
|
|
|
|
|
|
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
public void finishTask(SchBaseTask taskObj, TaskFinishedTypeEnum taskFinishedType) { |
|
|
public void finishTask(SchBaseTask taskObj, TaskFinishedTypeEnum taskFinishedType) { |
|
|
// 获取参数
|
|
|
//修改点位状态
|
|
|
|
|
|
updatePointStatus(taskObj); |
|
|
|
|
|
//生成移库任务
|
|
|
|
|
|
moveTheLibraryTask(taskObj); |
|
|
|
|
|
taskObj.setTask_status(TaskStatus.FINISHED.getCode()); |
|
|
|
|
|
taskObj.setRemark(GeneralDefinition.TASK_FINISH); |
|
|
|
|
|
taskObj.setFinished_type(taskFinishedType.getCode()); |
|
|
|
|
|
TaskUtils.setUpdateByType(taskObj, taskFinishedType); |
|
|
|
|
|
taskService.updateById(taskObj); |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
|
* 生成移库任务 |
|
|
|
|
|
* @param taskObj |
|
|
|
|
|
*/ |
|
|
|
|
|
private void moveTheLibraryTask(SchBaseTask taskObj) { |
|
|
|
|
|
AbstractTask connectorTask = taskFactory.getTask("CNTTask"); |
|
|
|
|
|
for (int i = 0; i < EMPTY_POINT.length; i++) { |
|
|
|
|
|
String pointName = EMPTY_POINT[i]; |
|
|
|
|
|
if(StrUtil.equals(pointName, taskObj.getPoint_code2())){ |
|
|
|
|
|
JSONObject param = new JSONObject(); |
|
|
|
|
|
param.put("device_code", pointName); |
|
|
|
|
|
param.put("config_code", "CNTTask"); |
|
|
|
|
|
param.put("create_mode", GeneralDefinition.AUTO_CREATION); |
|
|
|
|
|
param.put("vehicle_code", taskObj.getVehicle_code()); |
|
|
|
|
|
param.put("task_type", "1"); |
|
|
|
|
|
connectorTask.apply(param); |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
|
* 修改点位状态 |
|
|
|
|
|
* @param taskObj |
|
|
|
|
|
*/ |
|
|
|
|
|
private void updatePointStatus(SchBaseTask taskObj) { |
|
|
String startPoint = taskObj.getPoint_code1(); |
|
|
String startPoint = taskObj.getPoint_code1(); |
|
|
SchBasePoint schBasePoint = pointService.selectByPointCode(startPoint); |
|
|
SchBasePoint schBasePoint = pointService.selectByPointCode(startPoint); |
|
|
// 起点清空
|
|
|
|
|
|
if (ObjectUtil.isNotEmpty(schBasePoint)) { |
|
|
if (ObjectUtil.isNotEmpty(schBasePoint)) { |
|
|
schBasePoint.setIs_lock(false); |
|
|
schBasePointService.update(Wrappers.lambdaUpdate(SchBasePoint.class) |
|
|
PointUtils.setUpdateByAcs(schBasePoint); |
|
|
.eq(SchBasePoint::getPoint_code, startPoint) |
|
|
schBasePointService.updateById(schBasePoint); |
|
|
.set(SchBasePoint::getIs_lock, false) |
|
|
|
|
|
.set(SchBasePoint::getVehicle_code,null) |
|
|
|
|
|
.set(SchBasePoint::getPoint_status, GoodsEnum.OUT_OF_STOCK.getValue()) |
|
|
|
|
|
.set(SchBasePoint::getUpdate_time, DateUtil.now())); |
|
|
} |
|
|
} |
|
|
String endPoint = taskObj.getPoint_code2(); |
|
|
String endPoint = taskObj.getPoint_code2(); |
|
|
SchBasePoint schBasePoint2 = pointService.selectByPointCode(endPoint); |
|
|
SchBasePoint schBasePoint2 = pointService.selectByPointCode(endPoint); |
|
@ -187,16 +242,9 @@ public class CNTTask extends AbstractTask { |
|
|
PointUtils.setUpdateByAcs(schBasePoint2); |
|
|
PointUtils.setUpdateByAcs(schBasePoint2); |
|
|
schBasePointService.updateById(schBasePoint2); |
|
|
schBasePointService.updateById(schBasePoint2); |
|
|
} |
|
|
} |
|
|
// 任务完成
|
|
|
|
|
|
taskObj.setTask_status(TaskStatus.FINISHED.getCode()); |
|
|
|
|
|
taskObj.setRemark(GeneralDefinition.TASK_FINISH); |
|
|
|
|
|
taskObj.setFinished_type(taskFinishedType.getCode()); |
|
|
|
|
|
TaskUtils.setUpdateByType(taskObj, taskFinishedType); |
|
|
|
|
|
taskService.updateById(taskObj); |
|
|
|
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
public void cancelTask(SchBaseTask taskObj, TaskFinishedTypeEnum taskFinishedType) { |
|
|
public void cancelTask(SchBaseTask taskObj, TaskFinishedTypeEnum taskFinishedType) { |
|
|
|
|
|
|
|
|
taskObj.setRemark(GeneralDefinition.TASK_CANCEL); |
|
|
taskObj.setRemark(GeneralDefinition.TASK_CANCEL); |
|
|
taskObj.setTask_status(TaskStatus.CANCELED.getCode()); |
|
|
taskObj.setTask_status(TaskStatus.CANCELED.getCode()); |
|
|
taskObj.setFinished_type(taskFinishedType.getCode()); |
|
|
taskObj.setFinished_type(taskFinishedType.getCode()); |
|
|