opt:优化一楼子卷下卷桁架任务放货动作
This commit is contained in:
@@ -230,12 +230,9 @@ public class BstIvtPackageinfoivtServiceImpl extends ServiceImpl<BstIvtPackagein
|
||||
pointCode = getNewPoint(taskCode, actionType);
|
||||
break;
|
||||
case "3":
|
||||
// 取货完成
|
||||
updatePointStatus(taskCode, actionType);
|
||||
break;
|
||||
case "4":
|
||||
// 放货完成,就是任务完成,不需要执行任何操作,但是取货任务的放货完成,需要改变updateTaskStatus:只更新终点库存;
|
||||
//updatePointStatus(taskCode, pointType);
|
||||
// 取货完成,放货完成
|
||||
updatePointStatus(taskCode, actionType);
|
||||
break;
|
||||
default:
|
||||
return null;
|
||||
@@ -486,11 +483,13 @@ public class BstIvtPackageinfoivtServiceImpl extends ServiceImpl<BstIvtPackagein
|
||||
* @param actionType 动作类型
|
||||
*/
|
||||
private void updatePointStatus(String taskCode, String actionType) {
|
||||
//执行中的任务
|
||||
SchBaseTask baseTask = taskService.getOne(new LambdaQueryWrapper<SchBaseTask>()
|
||||
.eq(SchBaseTask::getTask_code, taskCode)
|
||||
.eq(SchBaseTask::getIs_delete, IOSEnum.IS_SEND.code("否"))
|
||||
.eq(SchBaseTask::getTask_status, TaskStatusEnum.EXECUTING.getCode()));
|
||||
if (baseTask == null) {
|
||||
throw new BadRequestException("任务不存在!");
|
||||
throw new BadRequestException("该任务未执行或不存在!");
|
||||
}
|
||||
//取货任务
|
||||
if (actionType.equals(PackageInfoIvtEnum.TASK_ACTION_TYPE.code("取货完成"))) {
|
||||
@@ -507,6 +506,22 @@ public class BstIvtPackageinfoivtServiceImpl extends ServiceImpl<BstIvtPackagein
|
||||
.setSql("ivt_status = '0', container_name = null")
|
||||
.eq("point_code", baseTask.getPoint_code1()));
|
||||
}
|
||||
} else {
|
||||
List<BstIvtPackageinfoivt> ivtList = packageinfoivtService.list(new LambdaQueryWrapper<BstIvtPackageinfoivt>()
|
||||
.eq(BstIvtPackageinfoivt::getIs_used, PackageInfoIvtEnum.IS_USED.code("启用"))
|
||||
.eq(BstIvtPackageinfoivt::getPoint_code, baseTask.getPoint_code2()));
|
||||
if (CollectionUtils.isEmpty(ivtList)) {
|
||||
throw new BadRequestException("任务编号为:" + baseTask.getTask_code() + "取货完成的目标点位不存在!");
|
||||
}
|
||||
if (ivtList.get(0).getIvt_status().equals(PackageInfoIvtEnum.IVT_STATUS.code("空"))) {
|
||||
//增加点位库存
|
||||
bstIvtPackageinfoivtMapper.update(null, new UpdateWrapper<BstIvtPackageinfoivt>()
|
||||
.set("container_name", baseTask.getVehicle_code())
|
||||
.set("ivt_status", PackageInfoIvtEnum.IVT_STATUS.code("有子卷"))
|
||||
.eq("point_code", baseTask.getPoint_code2()));
|
||||
} else {
|
||||
throw new BadRequestException("该点位已有库存!");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -98,15 +98,15 @@ public class DjqTask extends AbstractAcsTask {
|
||||
}
|
||||
if (StrUtil.equals(status, TaskStatusEnum.FINISHED.getCode())) {
|
||||
log.info("任务编号为:" + schBaseTask.getTask_code() + "的任务完成接口在" + schBaseTask.getUpdate_time() + "被调用---------------------------------------------");
|
||||
//1.更改任务状态为完成
|
||||
schBaseTask.setTask_status(TaskStatusEnum.FINISHED.getCode());
|
||||
//2.改变起点点位状态,二次分配,取货完成就改起点库存
|
||||
//1.改变起点点位状态,二次分配,取货完成就改起点库存
|
||||
//packageinfoivtService.update(new UpdateWrapper<BstIvtPackageinfoivt>().set("ivt_status", PackageInfoIvtEnum.IVT_STATUS.code("空")).set("container_name", null).eq("point_code", schBaseTask.getPoint_code1()));
|
||||
//3更新库存记录
|
||||
//2.更新库存记录
|
||||
packageinfoivtService.update(new UpdateWrapper<BstIvtPackageinfoivt>().set("ivt_status", PackageInfoIvtEnum.IVT_STATUS.code("有子卷")).set("container_name", schBaseTask.getVehicle_code()).eq("point_code", schBaseTask.getPoint_code2()));
|
||||
//清除首次分配目标点位
|
||||
//3.更改任务状态为完成
|
||||
schBaseTask.setTask_status(TaskStatusEnum.FINISHED.getCode());
|
||||
//4.清除首次分配目标点位
|
||||
schBaseTask.setPoint_code3("");
|
||||
//4.判断是否存在确定起点的输送线->满轴缓存位任务,存在就下发任务
|
||||
//5.判断是否存在确定起点的输送线->满轴缓存位任务,存在就下发任务
|
||||
// List<SchBaseTask> taskList = taskService.list(new LambdaQueryWrapper<SchBaseTask>()
|
||||
// //确定起点未下发
|
||||
// .eq(SchBaseTask::getTask_status, TaskStatusEnum.SURE_START.getCode())
|
||||
|
||||
@@ -95,30 +95,30 @@ public class DjqToKzjhcwTask extends AbstractAcsTask {
|
||||
schBaseTask.setTask_status(TaskStatusEnum.EXECUTING.getCode());
|
||||
}
|
||||
if (StrUtil.equals(status, TaskStatusEnum.FINISHED.getCode())) {
|
||||
log.info("任务编号为:"+schBaseTask.getTask_code()+"的任务完成接口在"+schBaseTask.getUpdate_time()+"被调用---------------------------------------------");
|
||||
//1.更改任务状态为完成
|
||||
schBaseTask.setTask_status(TaskStatusEnum.FINISHED.getCode());
|
||||
//2.改变起点点位状态
|
||||
packageinfoivtService.update(new UpdateWrapper<BstIvtPackageinfoivt>().set("ivt_status", PackageInfoIvtEnum.IVT_STATUS.code("空")).set("container_name", null).eq("point_code", schBaseTask.getPoint_code1()));
|
||||
//清除首次分配目标点位
|
||||
schBaseTask.setPoint_code4("");
|
||||
//更新库存记录
|
||||
packageinfoivtService.update(new UpdateWrapper<BstIvtPackageinfoivt>().set("ivt_status", PackageInfoIvtEnum.IVT_STATUS.code("空载具")).eq("point_code", schBaseTask.getPoint_code2()));
|
||||
//3.待检区或管制区搬运空载具到空载具缓存位完毕,判断是否存在确定终点的空载具缓存位->输送线任务,存在就下发任务
|
||||
// List<SchBaseTask> taskList = taskService.list(new LambdaQueryWrapper<SchBaseTask>()
|
||||
// //确定终点未下发
|
||||
// .eq(SchBaseTask::getTask_status, TaskStatusEnum.SURE_END.getCode())
|
||||
// .eq(SchBaseTask::getPoint_code2, "NBJ1002")
|
||||
// .eq(SchBaseTask::getTask_type, PackageInfoIvtEnum.TASK_TYPE.code("放空(空载具缓存位->输送线)")).eq(SchBaseTask::getIs_delete, IOSEnum.IS_NOTANDYES.code("否"))
|
||||
// );
|
||||
// if (CollectionUtils.isNotEmpty(taskList)) {
|
||||
// SchBaseTask task = taskList.get(0);
|
||||
// task.setPoint_code1(schBaseTask.getPoint_code2());
|
||||
// task.setTask_status(TaskStatusEnum.START_AND_POINT.getCode());
|
||||
// taskService.update(task);
|
||||
// //任务下发
|
||||
// ssxDjwTask.immediateNotifyAcs(task.getTask_id().toString());
|
||||
// }
|
||||
log.info("任务编号为:" + schBaseTask.getTask_code() + "的任务完成接口在" + schBaseTask.getUpdate_time() + "被调用---------------------------------------------");
|
||||
//1.改变起点点位状态
|
||||
packageinfoivtService.update(new UpdateWrapper<BstIvtPackageinfoivt>().set("ivt_status", PackageInfoIvtEnum.IVT_STATUS.code("空")).set("container_name", null).eq("point_code", schBaseTask.getPoint_code1()));
|
||||
//2.更新库存记录
|
||||
packageinfoivtService.update(new UpdateWrapper<BstIvtPackageinfoivt>().set("ivt_status", PackageInfoIvtEnum.IVT_STATUS.code("空载具")).eq("point_code", schBaseTask.getPoint_code2()));
|
||||
//3.更改任务状态为完成
|
||||
schBaseTask.setTask_status(TaskStatusEnum.FINISHED.getCode());
|
||||
//4.清除首次分配目标点位
|
||||
schBaseTask.setPoint_code4("");
|
||||
//3.待检区或管制区搬运空载具到空载具缓存位完毕,判断是否存在确定终点的空载具缓存位->输送线任务,存在就下发任务
|
||||
// List<SchBaseTask> taskList = taskService.list(new LambdaQueryWrapper<SchBaseTask>()
|
||||
// //确定终点未下发
|
||||
// .eq(SchBaseTask::getTask_status, TaskStatusEnum.SURE_END.getCode())
|
||||
// .eq(SchBaseTask::getPoint_code2, "NBJ1002")
|
||||
// .eq(SchBaseTask::getTask_type, PackageInfoIvtEnum.TASK_TYPE.code("放空(空载具缓存位->输送线)")).eq(SchBaseTask::getIs_delete, IOSEnum.IS_NOTANDYES.code("否"))
|
||||
// );
|
||||
// if (CollectionUtils.isNotEmpty(taskList)) {
|
||||
// SchBaseTask task = taskList.get(0);
|
||||
// task.setPoint_code1(schBaseTask.getPoint_code2());
|
||||
// task.setTask_status(TaskStatusEnum.START_AND_POINT.getCode());
|
||||
// taskService.update(task);
|
||||
// //任务下发
|
||||
// ssxDjwTask.immediateNotifyAcs(task.getTask_id().toString());
|
||||
// }
|
||||
}
|
||||
// 取消
|
||||
if (status.equals(IOSEnum.IS_NOTANDYES.code("否"))) {
|
||||
|
||||
@@ -93,6 +93,8 @@ public class MzhcwTask extends AbstractAcsTask {
|
||||
.next_device_code(r.getPoint_code2())
|
||||
.start_device_code2(r.getPoint_code3())
|
||||
.next_device_code2(r.getPoint_code4())
|
||||
//四个点任务与两个点任务类型区分
|
||||
.agv_action_type(r.getVehicle_code2())
|
||||
.vehicle_code(r.getVehicle_code())
|
||||
.priority(r.getPriority())
|
||||
.remark(r.getRemark())
|
||||
|
||||
@@ -56,6 +56,7 @@ public class AutoExecuteWaitTask {
|
||||
*/
|
||||
@SneakyThrows
|
||||
public void executeWaitTask() {
|
||||
log.info(THIS_CLASS+"-放满与取空桁架定时任务开始执行扫描。");
|
||||
RLock lock = redissonClient.getLock(THIS_CLASS);
|
||||
boolean tryLock = lock.tryLock(0, TimeUnit.SECONDS);
|
||||
try {
|
||||
|
||||
@@ -44,6 +44,7 @@ public class AutoSendDjqToGzq {
|
||||
*/
|
||||
@SneakyThrows
|
||||
public void sendDjqToGzq() {
|
||||
log.info(THIS_CLASS+"-待检区->管制区定时任务开始执行扫描。");
|
||||
RLock lock = redissonClient.getLock(THIS_CLASS);
|
||||
boolean tryLock = lock.tryLock(0, TimeUnit.SECONDS);
|
||||
try {
|
||||
|
||||
@@ -44,6 +44,7 @@ public class AutoSendGzqToDjq {
|
||||
*/
|
||||
@SneakyThrows
|
||||
public void sendGzqToDjq() {
|
||||
log.info(THIS_CLASS+"-管制区->待检区定时任务开始执行扫描。");
|
||||
RLock lock = redissonClient.getLock(THIS_CLASS);
|
||||
boolean tryLock = lock.tryLock(0, TimeUnit.SECONDS);
|
||||
try {
|
||||
|
||||
@@ -62,12 +62,11 @@ public class AutoSendMzToDjq {
|
||||
|
||||
@SneakyThrows
|
||||
public void sendMzqToDjq2() {
|
||||
log.info(THIS_CLASS+"-满轴->待检区定时任务开始执行扫描。");
|
||||
RLock lock = redissonClient.getLock(THIS_CLASS);
|
||||
boolean tryLock = lock.tryLock(0, TimeUnit.SECONDS);
|
||||
try {
|
||||
if (tryLock) {
|
||||
String pointCode2 = null;
|
||||
JSONObject task = new JSONObject();
|
||||
//满轴有子卷且过滤未完成任务
|
||||
List<BstIvtPackageinfoivt> mzqPackageinfoivtList = packageinfoivtService.checkEndPointTask(PackageInfoIvtEnum.POINT_STATUS.code("满轴缓存位"), PackageInfoIvtEnum.IVT_STATUS.code("有子卷"), PackageInfoIvtEnum.TASK_POINT_TYPE.code("取货分配"), PackageInfoIvtEnum.SORT_TYPE.code("降序"), "");
|
||||
if (CollectionUtils.isEmpty(mzqPackageinfoivtList)) {
|
||||
@@ -78,6 +77,8 @@ public class AutoSendMzToDjq {
|
||||
if (CollectionUtils.isEmpty(djqPackageinfoivtList)) {
|
||||
return;
|
||||
}
|
||||
String pointCode2;
|
||||
JSONObject task = new JSONObject();
|
||||
pointCode2 = djqPackageinfoivtList.get(0).getPoint_code();
|
||||
task.put("vehicle_code2", PackageInfoIvtEnum.AGV_ACTION_TYPE.code("取货二次分配"));
|
||||
task.put("task_type", PackageInfoIvtEnum.TASK_TYPE.code("满轴缓存位->待检区"));
|
||||
|
||||
@@ -1,19 +1,22 @@
|
||||
package org.nl.b_lms.sch.tasks.first_floor_area.auto;
|
||||
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.SneakyThrows;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.apache.commons.collections4.CollectionUtils;
|
||||
import org.nl.b_lms.sch.point.dao.BstIvtPackageinfoivt;
|
||||
import org.nl.b_lms.sch.point.service.IbstIvtPackageinfoivtService;
|
||||
import org.nl.b_lms.sch.tasks.first_floor_area.ZxqTask;
|
||||
import org.nl.common.enums.PackageInfoIvtEnum;
|
||||
import org.redisson.api.RLock;
|
||||
import org.redisson.api.RedissonClient;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import java.util.LinkedHashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
|
||||
@@ -22,6 +25,9 @@ import java.util.stream.Collectors;
|
||||
@RequiredArgsConstructor
|
||||
public class AutoSendToZxq {
|
||||
|
||||
private final String THIS_CLASS = AutoSendToZxq.class.getName();
|
||||
@Resource
|
||||
private RedissonClient redissonClient;
|
||||
@Resource
|
||||
private IbstIvtPackageinfoivtService packageinfoivtService;
|
||||
@Resource
|
||||
@@ -41,22 +47,36 @@ public class AutoSendToZxq {
|
||||
/**
|
||||
* 二次分配任务
|
||||
*/
|
||||
@SneakyThrows
|
||||
public void sendDjqToZxq() {
|
||||
//装箱区有空位,去待检区消费合格品子卷
|
||||
List<BstIvtPackageinfoivt> bstIvtPackageinfoivtList = packageinfoivtService.checkEndPointTask(
|
||||
PackageInfoIvtEnum.POINT_STATUS.code("装箱区"),
|
||||
PackageInfoIvtEnum.IVT_STATUS.code("空"),
|
||||
PackageInfoIvtEnum.TASK_POINT_TYPE.code("放货任务"), "", "");
|
||||
if (CollectionUtils.isNotEmpty(bstIvtPackageinfoivtList)) {
|
||||
Map<String, List<String>> ivtList = bstIvtPackageinfoivtList.stream()
|
||||
.collect(Collectors.groupingBy(
|
||||
BstIvtPackageinfoivt::getBlock,
|
||||
LinkedHashMap::new,
|
||||
Collectors.mapping(BstIvtPackageinfoivt::getPoint_code, Collectors.toList())
|
||||
));
|
||||
//taskQueueManager.processTasks(ivtList);
|
||||
taskQueue.processTasks(ivtList);
|
||||
log.info(THIS_CLASS+"-待检区->装箱区定时任务开始执行扫描。");
|
||||
RLock lock = redissonClient.getLock(THIS_CLASS);
|
||||
boolean tryLock = lock.tryLock(0, TimeUnit.SECONDS);
|
||||
try {
|
||||
if (tryLock) {
|
||||
//装箱区有空位,去待检区消费合格品子卷
|
||||
List<BstIvtPackageinfoivt> bstIvtPackageinfoivtList = packageinfoivtService.checkEndPointTask(
|
||||
PackageInfoIvtEnum.POINT_STATUS.code("装箱区"),
|
||||
PackageInfoIvtEnum.IVT_STATUS.code("空"),
|
||||
PackageInfoIvtEnum.TASK_POINT_TYPE.code("放货任务"), "", "");
|
||||
if (CollectionUtils.isNotEmpty(bstIvtPackageinfoivtList)) {
|
||||
Map<String, List<String>> ivtList = bstIvtPackageinfoivtList.stream()
|
||||
.collect(Collectors.groupingBy(
|
||||
BstIvtPackageinfoivt::getBlock,
|
||||
LinkedHashMap::new,
|
||||
Collectors.mapping(BstIvtPackageinfoivt::getPoint_code, Collectors.toList())
|
||||
));
|
||||
//taskQueueManager.processTasks(ivtList);
|
||||
taskQueue.processTasks(ivtList);
|
||||
}
|
||||
} else {
|
||||
log.info("满轴->待检区agv自动搬运任务正在创建被锁住。");
|
||||
}
|
||||
} finally {
|
||||
if (tryLock) {
|
||||
lock.unlock();
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -43,6 +43,7 @@ public class AutoSendVehicleToDjq {
|
||||
|
||||
@SneakyThrows
|
||||
public void sendVehicleToDjqOrGzq1() {
|
||||
log.info(THIS_CLASS+"-装箱区->待检区或管制区补空任务开始执行扫描。");
|
||||
RLock lock = redissonClient.getLock(THIS_CLASS);
|
||||
boolean tryLock = lock.tryLock(0, TimeUnit.SECONDS);
|
||||
try {
|
||||
|
||||
@@ -80,17 +80,18 @@ public class AutoSendVehicleToKzj {
|
||||
*/
|
||||
@SneakyThrows
|
||||
public void toKzjHcw2() {
|
||||
log.info(THIS_CLASS+"-待检区或管制区->空载具缓存位补空任务开始执行扫描。");
|
||||
RLock lock = redissonClient.getLock(THIS_CLASS);
|
||||
boolean tryLock = lock.tryLock(0, TimeUnit.SECONDS);
|
||||
try {
|
||||
if (tryLock) {
|
||||
//存在空载具缓存位无空载具的点位
|
||||
String pointCode1 = null;
|
||||
JSONObject task = new JSONObject();
|
||||
List<BstIvtPackageinfoivt> kzjIvtList = packageinfoivtService.checkEndPointTask(PackageInfoIvtEnum.POINT_STATUS.code("空载具缓存位"), null, PackageInfoIvtEnum.TASK_POINT_TYPE.code("放货分配"), PackageInfoIvtEnum.SORT_TYPE.code("降序"), "");
|
||||
if (CollectionUtils.isEmpty(kzjIvtList)) {
|
||||
return;
|
||||
}
|
||||
String pointCode1 = null;
|
||||
JSONObject task = new JSONObject();
|
||||
boolean hasEmptyVehicle = true;
|
||||
Optional<BstIvtPackageinfoivt> emptyList = kzjIvtList.stream()
|
||||
.filter(n -> n.getIvt_status().equals(PackageInfoIvtEnum.IVT_STATUS.code("空")))
|
||||
|
||||
@@ -48,6 +48,7 @@ import static org.nl.wms.util.TaskUtil.getMaxNum;
|
||||
@Component
|
||||
@RequiredArgsConstructor
|
||||
public class AutoSendZxToDjw {
|
||||
private final String THIS_CLASS = AutoSendZxToDjw.class.getName();
|
||||
|
||||
private final RedissonClient redissonClient;
|
||||
@Resource
|
||||
@@ -112,6 +113,7 @@ public class AutoSendZxToDjw {
|
||||
}
|
||||
//获取与该木箱号匹配的子卷号
|
||||
String containerName = relationList.get(0).getContainer_name();
|
||||
log.info(THIS_CLASS+"-装箱区->装箱对接位任务开始执行扫描。");
|
||||
RLock lock = redissonClient.getLock(containerName);
|
||||
boolean tryLock = lock.tryLock(0, TimeUnit.SECONDS);
|
||||
try {
|
||||
|
||||
Reference in New Issue
Block a user