From 1a86159e349fc79def8f2d7f26d68fc3a64bb284 Mon Sep 17 00:00:00 2001 From: gongbaoxiong <751575283@qq.com> Date: Sat, 29 Jun 2024 09:21:25 +0800 Subject: [PATCH] =?UTF-8?q?add:=E5=A2=9E=E5=8A=A0=E8=87=AA=E5=8A=A8?= =?UTF-8?q?=E6=89=A7=E8=A1=8C=E7=AD=89=E5=BE=85=E7=9A=84=E6=A1=81=E6=9E=B6?= =?UTF-8?q?=E4=BB=BB=E5=8A=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../impl/BstIvtPackageinfoivtServiceImpl.java | 96 +++++++++++--- .../sch/tasks/first_floor_area/DjqTask.java | 5 +- .../first_floor_area/DjqToKzjhcwTask.java | 4 +- .../sch/tasks/first_floor_area/GzqTask.java | 8 +- .../first_floor_area/GzqToKzjhcwTask.java | 2 + .../sch/tasks/first_floor_area/MzhcwTask.java | 2 + .../first_floor_area/SendDjqKzjTask.java | 4 +- .../first_floor_area/SendGzqKzjTask.java | 4 +- .../tasks/first_floor_area/SsxDjwTask.java | 12 +- .../sch/tasks/first_floor_area/ZxDjwTask.java | 2 + .../sch/tasks/first_floor_area/ZxqTask.java | 2 + .../auto/AutoExecuteWaitTask.java | 119 ++++++++++++++++++ .../auto/AutoSendVehicleToDjq.java | 6 +- .../auto/AutoSendVehicleToKzj.java | 22 +++- 14 files changed, 251 insertions(+), 37 deletions(-) create mode 100644 lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/auto/AutoExecuteWaitTask.java diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/point/service/impl/BstIvtPackageinfoivtServiceImpl.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/point/service/impl/BstIvtPackageinfoivtServiceImpl.java index d37128fff..cc13cd586 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/point/service/impl/BstIvtPackageinfoivtServiceImpl.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/point/service/impl/BstIvtPackageinfoivtServiceImpl.java @@ -56,10 +56,10 @@ public class BstIvtPackageinfoivtServiceImpl extends ServiceImpl getBstIvtPackageinfoivts(String ivtType, String ivtStatus, String sortType) { LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper() .eq(BstIvtPackageinfoivt::getIs_used, PackageInfoIvtEnum.IS_USED.code("启用")) - .eq(BstIvtPackageinfoivt::getPoint_status, ivtType) - .eq(BstIvtPackageinfoivt::getIvt_status, ivtStatus); + .eq(BstIvtPackageinfoivt::getPoint_status, ivtType); + if (StringUtils.isNotEmpty(ivtStatus)) { + queryWrapper.eq(BstIvtPackageinfoivt::getIvt_status, ivtStatus); + } if (PackageInfoIvtEnum.SORT_TYPE.code("升序").equals(sortType)) { queryWrapper.orderByAsc(BstIvtPackageinfoivt::getSort_seq); } else if (PackageInfoIvtEnum.SORT_TYPE.code("降序").equals(sortType)) { @@ -239,6 +241,7 @@ public class BstIvtPackageinfoivtServiceImpl extends ServiceImpl() @@ -247,7 +250,51 @@ public class BstIvtPackageinfoivtServiceImpl extends ServiceImpl空载具缓存位)")) || + baseTask.getTask_type().equals(PackageInfoIvtEnum.TASK_TYPE.code("补空(待检区->空载具缓存位)")) + ) { + //是否有执行中的行架任务,有就分配行架搬运起点 + List taskList = taskService.list(new LambdaQueryWrapper() + .eq(SchBaseTask::getTask_status, TaskStatusEnum.EXECUTING.getCode()) + .and( + r -> r.eq(SchBaseTask::getTask_type, PackageInfoIvtEnum.TASK_TYPE.code("输送线四个点任务")) + .or() + .eq(SchBaseTask::getTask_type, PackageInfoIvtEnum.TASK_TYPE.code("放空(空载具缓存位->输送线)") + ))); + if (CollectionUtils.isNotEmpty(taskList)) { + if (taskList.get(0).getTask_type().equals(PackageInfoIvtEnum.TASK_TYPE.code("输送线四个点任务"))) { + newPoint.setPoint_code(taskList.get(0).getPoint_code3()); + } else { + newPoint.setPoint_code(taskList.get(0).getPoint_code1()); + } + } else { + //newPoint = getBstIvtPackageinfoivt(actionType, taskPointType, baseTask); + newPoint = checkIvtSBlock(); + } + } else { + newPoint = getBstIvtPackageinfoivt(actionType, taskPointType, baseTask); + } + if (StringUtils.isNotBlank(newPoint.getPoint_code())) { + //更新任务起点或终点 + if (PackageInfoIvtEnum.TASK_ACTION_TYPE.code("取货分配").equals(actionType)) { + baseTask.setPoint_code1(newPoint.getPoint_code()); + if (StringUtils.isNotBlank(newPoint.getContainer_name())) { + //更新子卷号 + baseTask.setVehicle_code(newPoint.getContainer_name()); + } + } else if (PackageInfoIvtEnum.TASK_ACTION_TYPE.code("放货分配").equals(actionType)) { + baseTask.setPoint_code2(newPoint.getPoint_code()); + } + taskService.updateById(baseTask); + return newPoint.getPoint_code(); + } else { + throw new BadRequestException("点位外层有载具阻挡或暂无点位资源!"); + } + } + private BstIvtPackageinfoivt getBstIvtPackageinfoivt(String actionType, String taskPointType, SchBaseTask baseTask) { + BstIvtPackageinfoivt newPoint; //1取货任务2放货任务 LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); if (PackageInfoIvtEnum.TASK_ACTION_TYPE.code("取货分配").equals(actionType)) { @@ -264,23 +311,34 @@ public class BstIvtPackageinfoivtServiceImpl extends ServiceImpl kzjIvtList = packageinfoivtService.checkEndPointTask(PackageInfoIvtEnum.POINT_STATUS.code("空载具缓存位"), null, PackageInfoIvtEnum.TASK_POINT_TYPE.code("放货任务"), PackageInfoIvtEnum.SORT_TYPE.code("降序"), ""); + if (CollectionUtils.isEmpty(kzjIvtList)) { + return newPoint; } + boolean hasEmptyVehicle = true; + Optional emptyList = kzjIvtList.stream() + .filter(n -> n.getIvt_status().equals(PackageInfoIvtEnum.IVT_STATUS.code("空"))) + .findFirst(); + //判断点位外层是否有空载具 + if (emptyList.isPresent()) { + BigDecimal sortSeq = emptyList.get().getSort_seq(); + hasEmptyVehicle = kzjIvtList.stream() + .anyMatch(r -> r.getSort_seq().compareTo(sortSeq) < 0 && + r.getIvt_status().equals(PackageInfoIvtEnum.IVT_STATUS.code("空载具"))); + } + if (hasEmptyVehicle) { + return newPoint; + } + return emptyList.get(); } diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/DjqTask.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/DjqTask.java index 9f19034cd..8b52b24a0 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/DjqTask.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/DjqTask.java @@ -139,7 +139,7 @@ public class DjqTask extends AbstractAcsTask { throw new BadRequestException("任务已执行不能取消"); } //任务被标记为取消 - schBaseTask.setTask_status(TaskStatusEnum.CANCEL.getCode()); + schBaseTask.setIs_delete(IOSEnum.IS_NOTANDYES.code("是")); } schBaseTask.setUpdate_time(DateUtil.now()); schBaseTask.setUpdate_optid(SecurityUtils.getCurrentUserId()); @@ -199,7 +199,7 @@ public class DjqTask extends AbstractAcsTask { public void sendDjqToZxq(SchBaseTask schBaseTask) { //装箱区有空位 - List bstIvtPackageinfoivtList = packageinfoivtService.checkEndPointTask(PackageInfoIvtEnum.POINT_STATUS.code("装箱区"), PackageInfoIvtEnum.IVT_STATUS.code("空"),PackageInfoIvtEnum.TASK_POINT_TYPE.code("取货任务"), "",""); + List bstIvtPackageinfoivtList = packageinfoivtService.checkEndPointTask(PackageInfoIvtEnum.POINT_STATUS.code("装箱区"), PackageInfoIvtEnum.IVT_STATUS.code("空"), PackageInfoIvtEnum.TASK_POINT_TYPE.code("取货任务"), "", ""); if (CollectionUtils.isNotEmpty(bstIvtPackageinfoivtList)) { Map> ivtList = bstIvtPackageinfoivtList.stream() .collect(Collectors.groupingBy( @@ -232,6 +232,7 @@ public class DjqTask extends AbstractAcsTask { throw new BadRequestException("满轴缓存位 -> 待检区取消接口任务号为空!"); } schBaseTask.setTask_status(TaskStatusEnum.CANCEL.getCode()); + schBaseTask.setIs_delete(IOSEnum.IS_NOTANDYES.code("是")); schBaseTask.setUpdate_time(DateUtil.now()); schBaseTask.setUpdate_optid(SecurityUtils.getCurrentUserId()); schBaseTask.setUpdate_optname(SecurityUtils.getCurrentNickName()); diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/DjqToKzjhcwTask.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/DjqToKzjhcwTask.java index 0d5625916..9148f4bd0 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/DjqToKzjhcwTask.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/DjqToKzjhcwTask.java @@ -132,6 +132,7 @@ public class DjqToKzjhcwTask extends AbstractAcsTask { } //任务被标记为取消 schBaseTask.setTask_status(TaskStatusEnum.CANCEL.getCode()); + schBaseTask.setIs_delete(IOSEnum.IS_NOTANDYES.code("是")); } schBaseTask.setUpdate_time(DateUtil.now()); schBaseTask.setUpdate_optid(SecurityUtils.getCurrentUserId()); @@ -210,6 +211,7 @@ public class DjqToKzjhcwTask extends AbstractAcsTask { throw new BadRequestException("待检区->空载具缓存位取消接口任务号为空!"); } schBaseTask.setTask_status(TaskStatusEnum.CANCEL.getCode()); + schBaseTask.setIs_delete(IOSEnum.IS_NOTANDYES.code("是")); schBaseTask.setUpdate_time(DateUtil.now()); schBaseTask.setUpdate_optid(SecurityUtils.getCurrentUserId()); schBaseTask.setUpdate_optname(SecurityUtils.getCurrentNickName()); @@ -294,4 +296,4 @@ public class DjqToKzjhcwTask extends AbstractAcsTask { // this.createTask(toKzjHcwTask); // } // } - } +} diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/GzqTask.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/GzqTask.java index 7e2097f9e..b06477809 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/GzqTask.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/GzqTask.java @@ -1,4 +1,5 @@ package org.nl.b_lms.sch.tasks.first_floor_area; + import cn.hutool.core.date.DateUtil; import cn.hutool.core.lang.Assert; import cn.hutool.core.util.BooleanUtil; @@ -26,6 +27,7 @@ import org.nl.wms.sch.manage.TaskStatusEnum; import org.springframework.beans.BeanUtils; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; + import javax.annotation.Resource; import java.util.ArrayList; import java.util.List; @@ -83,7 +85,7 @@ public class GzqTask extends AbstractAcsTask { @Override @Transactional(rollbackFor = Exception.class) public void updateTaskStatus(JSONObject taskObj, String status) { - SchBaseTask schBaseTask = taskService.getOne(new LambdaUpdateWrapper().eq( SchBaseTask::getTask_id, taskObj.getString("task_id")), false); + SchBaseTask schBaseTask = taskService.getOne(new LambdaUpdateWrapper().eq(SchBaseTask::getTask_id, taskObj.getString("task_id")), false); if (schBaseTask == null) { throw new BadRequestException("满轴缓存位 -> 管制区完成接口任务号为空!"); } @@ -125,6 +127,7 @@ public class GzqTask extends AbstractAcsTask { } //任务被标记为取消 schBaseTask.setTask_status(TaskStatusEnum.CANCEL.getCode()); + schBaseTask.setIs_delete(IOSEnum.IS_NOTANDYES.code("是")); } schBaseTask.setUpdate_time(DateUtil.now()); schBaseTask.setUpdate_optid(SecurityUtils.getCurrentUserId()); @@ -194,8 +197,6 @@ public class GzqTask extends AbstractAcsTask { } - - @Override public void cancel(String taskId) { SchBaseTask schBaseTask = taskService.getOne(new LambdaUpdateWrapper() @@ -204,6 +205,7 @@ public class GzqTask extends AbstractAcsTask { throw new BadRequestException("满轴缓存位 -> 管制区取消接口任务号为空!"); } schBaseTask.setTask_status(TaskStatusEnum.CANCEL.getCode()); + schBaseTask.setIs_delete(IOSEnum.IS_NOTANDYES.code("是")); schBaseTask.setUpdate_time(DateUtil.now()); schBaseTask.setUpdate_optid(SecurityUtils.getCurrentUserId()); schBaseTask.setUpdate_optname(SecurityUtils.getCurrentNickName()); diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/GzqToKzjhcwTask.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/GzqToKzjhcwTask.java index 6d1d6db3e..d759f3d77 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/GzqToKzjhcwTask.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/GzqToKzjhcwTask.java @@ -132,6 +132,7 @@ public class GzqToKzjhcwTask extends AbstractAcsTask { } //任务被标记为取消 schBaseTask.setTask_status(TaskStatusEnum.CANCEL.getCode()); + schBaseTask.setIs_delete(IOSEnum.IS_NOTANDYES.code("是")); } schBaseTask.setUpdate_time(DateUtil.now()); schBaseTask.setUpdate_optid(SecurityUtils.getCurrentUserId()); @@ -210,6 +211,7 @@ public class GzqToKzjhcwTask extends AbstractAcsTask { throw new BadRequestException("管制区->空载具缓存位取消接口任务号为空!"); } schBaseTask.setTask_status(TaskStatusEnum.CANCEL.getCode()); + schBaseTask.setIs_delete(IOSEnum.IS_NOTANDYES.code("是")); schBaseTask.setUpdate_time(DateUtil.now()); schBaseTask.setUpdate_optid(SecurityUtils.getCurrentUserId()); schBaseTask.setUpdate_optname(SecurityUtils.getCurrentNickName()); diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/MzhcwTask.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/MzhcwTask.java index f92fcf7e6..6e8be3d7a 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/MzhcwTask.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/MzhcwTask.java @@ -158,6 +158,7 @@ public class MzhcwTask extends AbstractAcsTask { } // 更新任务表删除字段 schBaseTask.setTask_status(TaskStatusEnum.CANCEL.getCode()); + schBaseTask.setIs_delete(IOSEnum.IS_NOTANDYES.code("是")); } schBaseTask.setUpdate_time(DateUtil.now()); schBaseTask.setUpdate_optid(SecurityUtils.getCurrentUserId()); @@ -360,6 +361,7 @@ public class MzhcwTask extends AbstractAcsTask { throw new BadRequestException("输送线点位 -> 满轴缓存位取消接口任务号为空!"); } schBaseTask.setTask_status(TaskStatusEnum.CANCEL.getCode()); + schBaseTask.setIs_delete(IOSEnum.IS_NOTANDYES.code("是")); schBaseTask.setUpdate_time(DateUtil.now()); schBaseTask.setUpdate_optid(SecurityUtils.getCurrentUserId()); schBaseTask.setUpdate_optname(SecurityUtils.getCurrentNickName()); diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/SendDjqKzjTask.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/SendDjqKzjTask.java index 4935afadb..ca82aa828 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/SendDjqKzjTask.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/SendDjqKzjTask.java @@ -102,6 +102,7 @@ public class SendDjqKzjTask extends AbstractAcsTask { } //任务被标记为取消 schBaseTask.setTask_status(TaskStatusEnum.CANCEL.getCode()); + schBaseTask.setIs_delete(IOSEnum.IS_NOTANDYES.code("是")); } schBaseTask.setUpdate_time(DateUtil.now()); schBaseTask.setUpdate_optid(SecurityUtils.getCurrentUserId()); @@ -132,7 +133,7 @@ public class SendDjqKzjTask extends AbstractAcsTask { boolean isSend = !StrUtil.isNotBlank(form.getString("is_send")) || BooleanUtil.toBoolean(form.getString("is_send")); SchBaseTaskVO schBaseTaskVo = SchBaseTaskVO.builder() .task_type(taskType) - .vehicle_code(vehicleCode) + .vehicle_code(vehicleCode) .vehicle_code2(form.getString("vehicle_code2")) .point_code1(pointCode1) .point_code2(pointCode2) @@ -180,6 +181,7 @@ public class SendDjqKzjTask extends AbstractAcsTask { throw new BadRequestException("装箱区->待检区送空载具取消接口任务号为空!"); } schBaseTask.setTask_status(TaskStatusEnum.CANCEL.getCode()); + schBaseTask.setIs_delete(IOSEnum.IS_NOTANDYES.code("是")); schBaseTask.setUpdate_time(DateUtil.now()); schBaseTask.setUpdate_optid(SecurityUtils.getCurrentUserId()); schBaseTask.setUpdate_optname(SecurityUtils.getCurrentNickName()); diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/SendGzqKzjTask.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/SendGzqKzjTask.java index 7278fd2e4..6760a885c 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/SendGzqKzjTask.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/SendGzqKzjTask.java @@ -102,6 +102,7 @@ public class SendGzqKzjTask extends AbstractAcsTask { } //任务被标记为取消 schBaseTask.setTask_status(TaskStatusEnum.CANCEL.getCode()); + schBaseTask.setIs_delete(IOSEnum.IS_NOTANDYES.code("是")); } schBaseTask.setUpdate_time(DateUtil.now()); schBaseTask.setUpdate_optid(SecurityUtils.getCurrentUserId()); @@ -132,7 +133,7 @@ public class SendGzqKzjTask extends AbstractAcsTask { boolean isSend = !StrUtil.isNotBlank(form.getString("is_send")) || BooleanUtil.toBoolean(form.getString("is_send")); SchBaseTaskVO schBaseTaskVo = SchBaseTaskVO.builder() .task_type(taskType) - .vehicle_code(vehicleCode) + .vehicle_code(vehicleCode) .vehicle_code2(form.getString("vehicle_code2")) .point_code1(pointCode1) .point_code2(pointCode2) @@ -180,6 +181,7 @@ public class SendGzqKzjTask extends AbstractAcsTask { throw new BadRequestException("装箱区->管制区送空载具取消接口任务号为空!"); } schBaseTask.setTask_status(TaskStatusEnum.CANCEL.getCode()); + schBaseTask.setIs_delete(IOSEnum.IS_NOTANDYES.code("是")); schBaseTask.setUpdate_time(DateUtil.now()); schBaseTask.setUpdate_optid(SecurityUtils.getCurrentUserId()); schBaseTask.setUpdate_optname(SecurityUtils.getCurrentNickName()); diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/SsxDjwTask.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/SsxDjwTask.java index 085e9cf44..1919b7243 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/SsxDjwTask.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/SsxDjwTask.java @@ -1,4 +1,5 @@ package org.nl.b_lms.sch.tasks.first_floor_area; + import cn.hutool.core.date.DateUtil; import cn.hutool.core.lang.Assert; import cn.hutool.core.util.BooleanUtil; @@ -24,6 +25,7 @@ import org.nl.wms.sch.manage.TaskStatusEnum; import org.springframework.beans.BeanUtils; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; + import javax.annotation.Resource; import java.util.ArrayList; import java.util.List; @@ -49,9 +51,6 @@ public class SsxDjwTask extends AbstractAcsTask { private IbstIvtPackageinfoivtService packageinfoivtService; - - - @Override public List addTask() { ArrayList resultList = new ArrayList<>(); @@ -83,7 +82,7 @@ public class SsxDjwTask extends AbstractAcsTask { @Override @Transactional(rollbackFor = Exception.class) public void updateTaskStatus(JSONObject taskObj, String status) { - SchBaseTask schBaseTask = taskService.getOne(new LambdaUpdateWrapper().eq( SchBaseTask::getTask_id, taskObj.getString("task_id")), false); + SchBaseTask schBaseTask = taskService.getOne(new LambdaUpdateWrapper().eq(SchBaseTask::getTask_id, taskObj.getString("task_id")), false); if (schBaseTask == null) { throw new BadRequestException("空载具缓存位 -> 输送线完成接口任务号为空!"); } @@ -120,7 +119,9 @@ public class SsxDjwTask extends AbstractAcsTask { } //任务被标记为取消 schBaseTask.setTask_status(TaskStatusEnum.CANCEL.getCode()); + schBaseTask.setIs_delete(IOSEnum.IS_NOTANDYES.code("是")); schBaseTask.setTask_status(TaskStatusEnum.CANCEL.getCode()); + schBaseTask.setIs_delete(IOSEnum.IS_NOTANDYES.code("是")); } schBaseTask.setUpdate_time(DateUtil.now()); schBaseTask.setUpdate_optid(SecurityUtils.getCurrentUserId()); @@ -192,11 +193,12 @@ public class SsxDjwTask extends AbstractAcsTask { @Override public void cancel(String taskId) { SchBaseTask schBaseTask = taskService.getOne(new LambdaUpdateWrapper() - .eq(SchBaseTask::getTask_id, taskId), false) ; + .eq(SchBaseTask::getTask_id, taskId), false); if (schBaseTask == null) { throw new BadRequestException("空载具缓存位 -> 输送线取消接口任务号为空!"); } schBaseTask.setTask_status(TaskStatusEnum.CANCEL.getCode()); + schBaseTask.setIs_delete(IOSEnum.IS_NOTANDYES.code("是")); schBaseTask.setUpdate_time(DateUtil.now()); schBaseTask.setUpdate_optid(SecurityUtils.getCurrentUserId()); schBaseTask.setUpdate_optname(SecurityUtils.getCurrentNickName()); diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/ZxDjwTask.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/ZxDjwTask.java index 7fbd68e39..13f4c9b17 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/ZxDjwTask.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/ZxDjwTask.java @@ -151,6 +151,7 @@ public class ZxDjwTask extends AbstractAcsTask { } //任务被标记为取消 schBaseTask.setTask_status(TaskStatusEnum.CANCEL.getCode()); + schBaseTask.setIs_delete(IOSEnum.IS_NOTANDYES.code("是")); schBaseTask.setRemark("任务被强制取消,不执行任何逻辑!"); } schBaseTask.setUpdate_time(DateUtil.now()); @@ -231,6 +232,7 @@ public class ZxDjwTask extends AbstractAcsTask { throw new BadRequestException("装箱区 -> 装箱对接位取消接口任务号为空!"); } schBaseTask.setTask_status(TaskStatusEnum.CANCEL.getCode()); + schBaseTask.setIs_delete(IOSEnum.IS_NOTANDYES.code("是")); schBaseTask.setUpdate_time(DateUtil.now()); schBaseTask.setUpdate_optid(SecurityUtils.getCurrentUserId()); schBaseTask.setUpdate_optname(SecurityUtils.getCurrentNickName()); diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/ZxqTask.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/ZxqTask.java index 69095c5a3..f790ee32c 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/ZxqTask.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/ZxqTask.java @@ -144,6 +144,7 @@ public class ZxqTask extends AbstractAcsTask { } //任务被标记为取消 schBaseTask.setTask_status(TaskStatusEnum.CANCEL.getCode()); + schBaseTask.setIs_delete(IOSEnum.IS_NOTANDYES.code("是")); } schBaseTask.setUpdate_time(DateUtil.now()); schBaseTask.setUpdate_optid(SecurityUtils.getCurrentUserId()); @@ -303,6 +304,7 @@ public class ZxqTask extends AbstractAcsTask { throw new BadRequestException("待检区 -> 装箱区取消接口任务号为空!"); } schBaseTask.setTask_status(TaskStatusEnum.CANCEL.getCode()); + schBaseTask.setIs_delete(IOSEnum.IS_NOTANDYES.code("是")); schBaseTask.setUpdate_time(DateUtil.now()); schBaseTask.setUpdate_optid(SecurityUtils.getCurrentUserId()); schBaseTask.setUpdate_optname(SecurityUtils.getCurrentNickName()); diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/auto/AutoExecuteWaitTask.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/auto/AutoExecuteWaitTask.java new file mode 100644 index 000000000..8b4ee434d --- /dev/null +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/auto/AutoExecuteWaitTask.java @@ -0,0 +1,119 @@ +package org.nl.b_lms.sch.tasks.first_floor_area.auto; + +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; +import lombok.RequiredArgsConstructor; +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.task.dao.SchBaseTask; +import org.nl.b_lms.sch.task.service.IschBaseTaskService; +import org.nl.b_lms.sch.tasks.first_floor_area.DjqTask; +import org.nl.b_lms.sch.tasks.first_floor_area.MzhcwTask; +import org.nl.b_lms.sch.tasks.first_floor_area.SsxDjwTask; +import org.nl.b_lms.storage_manage.ios.enums.IOSEnum; +import org.nl.common.enums.PackageInfoIvtEnum; +import org.nl.modules.common.exception.BadRequestException; +import org.nl.wms.sch.manage.TaskStatusEnum; +import org.springframework.stereotype.Component; + +import javax.annotation.Resource; +import java.time.LocalDate; +import java.time.format.DateTimeFormatter; +import java.util.Comparator; +import java.util.List; +import java.util.stream.Collectors; + + +@Slf4j +@Component +@RequiredArgsConstructor +public class AutoExecuteWaitTask { + + @Resource + private MzhcwTask mzhcwTask; + + @Resource + private SsxDjwTask ssxDjwTask; + @Resource + private IschBaseTaskService taskService; + @Resource + private IbstIvtPackageinfoivtService packageinfoivtService; + + //自动执行等待的桁架任务 + public void run() { + this.executeWaitTask(); + } + + + /** + * 放满与取空桁架任务 + */ + void executeWaitTask() { + List taskList = taskService.list( + new LambdaQueryWrapper() + .or(r -> r.eq(SchBaseTask::getTask_status, TaskStatusEnum.SURE_END.getCode()) + .and(w -> w.eq(SchBaseTask::getTask_type, PackageInfoIvtEnum.TASK_TYPE.code("放空(空载具缓存位->输送线)")))) + .or(r -> r.eq(SchBaseTask::getTask_status, TaskStatusEnum.SURE_START.getCode()) + .and(w -> w.eq(SchBaseTask::getTask_type, PackageInfoIvtEnum.TASK_TYPE.code("输送线->满轴缓存位")))) + ); + for (SchBaseTask task : taskList) { + if (task != null) { + String taskType = task.getTask_type(); + if (PackageInfoIvtEnum.TASK_TYPE.code("放空(空载具缓存位->输送线)").equals(taskType)) { + List kzjPointList = packageinfoivtService + .list(new LambdaUpdateWrapper() + .eq(BstIvtPackageinfoivt::getIs_used, PackageInfoIvtEnum.IS_USED.code("启用") + ).eq(BstIvtPackageinfoivt::getPoint_status, PackageInfoIvtEnum.POINT_STATUS.code("空载具缓存位")) + .eq(BstIvtPackageinfoivt::getIvt_status, PackageInfoIvtEnum.IVT_STATUS.code("空载具")) + .orderByAsc(BstIvtPackageinfoivt::getSort_seq)); + if (CollectionUtils.isEmpty(kzjPointList)) { + return; + } + List existTaskList = getExistTasks(taskType, task.getVehicle_code()); + if (existTaskList.size() > 1) { + throw new BadRequestException("存在多个子卷号相同的任务!"); + } + task.setPoint_code1(kzjPointList.get(0).getPoint_code()); + task.setTask_status(TaskStatusEnum.START_AND_POINT.getCode()); + taskService.updateById(task); + ssxDjwTask.immediateNotifyAcs(null); + } else if (PackageInfoIvtEnum.TASK_TYPE.code("输送线->满轴缓存位").equals(taskType)) { + List mzPointList = packageinfoivtService + .list(new LambdaUpdateWrapper() + .eq(BstIvtPackageinfoivt::getIs_used, PackageInfoIvtEnum.IS_USED.code("启用") + ).eq(BstIvtPackageinfoivt::getPoint_status, PackageInfoIvtEnum.POINT_STATUS.code("满轴缓存位")) + .eq(BstIvtPackageinfoivt::getIvt_status, PackageInfoIvtEnum.IVT_STATUS.code("空")) + .orderByDesc(BstIvtPackageinfoivt::getSort_seq)); + if (CollectionUtils.isEmpty(mzPointList)) { + return; + } + //校验相同是否存在相同子卷号任务 + List existTaskList = getExistTasks(taskType, task.getVehicle_code()); + //如果有就不创建,没有就创建 + if (existTaskList.size() > 1) { + throw new BadRequestException("存在多个子卷号相同的任务!"); + } + task.setPoint_code2(mzPointList.get(0).getPoint_code()); + task.setTask_status(TaskStatusEnum.START_AND_POINT.getCode()); + taskService.updateById(task); + mzhcwTask.immediateNotifyAcs(null); + } + } + } + } + + //校验相同子卷号的任务 + private List getExistTasks(String taskType, String containerName) { + String startTime = LocalDate.now().atStartOfDay().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")); + return taskService.list(new LambdaQueryWrapper() + .eq(SchBaseTask::getTask_type, taskType) + .eq(SchBaseTask::getVehicle_code, containerName) + .gt(SchBaseTask::getCreate_time, startTime) + .eq(SchBaseTask::getIs_delete, IOSEnum.IS_NOTANDYES.code("否")) + + ); + } +} diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/auto/AutoSendVehicleToDjq.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/auto/AutoSendVehicleToDjq.java index c9e66425d..e015994d1 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/auto/AutoSendVehicleToDjq.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/auto/AutoSendVehicleToDjq.java @@ -42,19 +42,19 @@ public class AutoSendVehicleToDjq { //存在装箱区有空载具的点位 String pointCode2 = null; JSONObject task = new JSONObject(); - List zxqIvtList = packageinfoivtService.checkEndPointTask(PackageInfoIvtEnum.POINT_STATUS.code("装箱区"), PackageInfoIvtEnum.IVT_STATUS.code("空载具"), PackageInfoIvtEnum.TASK_POINT_TYPE.code("取货任务取货分配"), "", ""); + List zxqIvtList = packageinfoivtService.checkEndPointTask(PackageInfoIvtEnum.POINT_STATUS.code("装箱区"), PackageInfoIvtEnum.IVT_STATUS.code("空载具"), PackageInfoIvtEnum.TASK_POINT_TYPE.code("取货任务"), "", ""); if (CollectionUtils.isEmpty(zxqIvtList)) { return; } //待检区有空位且过滤未完成任务 - List djqPackageinfoivtList = packageinfoivtService.checkEndPointTask(PackageInfoIvtEnum.POINT_STATUS.code("待检区"), PackageInfoIvtEnum.IVT_STATUS.code("空"), PackageInfoIvtEnum.TASK_POINT_TYPE.code("放货任务放货分配"), PackageInfoIvtEnum.SORT_TYPE.code("降序"), ""); + List djqPackageinfoivtList = packageinfoivtService.checkEndPointTask(PackageInfoIvtEnum.POINT_STATUS.code("待检区"), PackageInfoIvtEnum.IVT_STATUS.code("空"), PackageInfoIvtEnum.TASK_POINT_TYPE.code("放货任务"), PackageInfoIvtEnum.SORT_TYPE.code("降序"), ""); if (CollectionUtils.isNotEmpty(djqPackageinfoivtList)) { pointCode2 = djqPackageinfoivtList.get(0).getPoint_code(); task.put("vehicle_code2", PackageInfoIvtEnum.AGV_ACTION_TYPE.code("普通任务")); task.put("task_type", PackageInfoIvtEnum.TASK_TYPE.code("补空(装箱区->待检区)")); } else { //管制区有空位 - List gzqList = packageinfoivtService.checkEndPointTask(PackageInfoIvtEnum.POINT_STATUS.code("管制区"), PackageInfoIvtEnum.IVT_STATUS.code("空"), PackageInfoIvtEnum.TASK_POINT_TYPE.code("放货任务放货分配"), PackageInfoIvtEnum.SORT_TYPE.code("升序"), ""); + List gzqList = packageinfoivtService.checkEndPointTask(PackageInfoIvtEnum.POINT_STATUS.code("管制区"), PackageInfoIvtEnum.IVT_STATUS.code("空"), PackageInfoIvtEnum.TASK_POINT_TYPE.code("放货任务"), PackageInfoIvtEnum.SORT_TYPE.code("升序"), ""); if (CollectionUtils.isNotEmpty(gzqList)) { pointCode2 = gzqList.get(0).getPoint_code(); task.put("vehicle_code2", PackageInfoIvtEnum.AGV_ACTION_TYPE.code("普通任务")); diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/auto/AutoSendVehicleToKzj.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/auto/AutoSendVehicleToKzj.java index 7fef83cd6..7bb4474f3 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/auto/AutoSendVehicleToKzj.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/auto/AutoSendVehicleToKzj.java @@ -12,7 +12,11 @@ import org.nl.common.enums.PackageInfoIvtEnum; import org.springframework.stereotype.Component; import javax.annotation.Resource; +import java.math.BigDecimal; +import java.util.ArrayList; +import java.util.Arrays; import java.util.List; +import java.util.Optional; import java.util.stream.Collectors; @@ -72,10 +76,24 @@ public class AutoSendVehicleToKzj { //存在空载具缓存位无空载具的点位 String pointCode1 = null; JSONObject task = new JSONObject(); - List kzjIvtList = packageinfoivtService.checkEndPointTask(PackageInfoIvtEnum.POINT_STATUS.code("空载具缓存位"), PackageInfoIvtEnum.IVT_STATUS.code("空"), PackageInfoIvtEnum.TASK_POINT_TYPE.code("放货分配"), "", ""); + List kzjIvtList = packageinfoivtService.checkEndPointTask(PackageInfoIvtEnum.POINT_STATUS.code("空载具缓存位"), null, PackageInfoIvtEnum.TASK_POINT_TYPE.code("放货分配"), PackageInfoIvtEnum.SORT_TYPE.code("降序"), ""); if (CollectionUtils.isEmpty(kzjIvtList)) { return; } + boolean hasEmptyVehicle = true; + Optional emptyList = kzjIvtList.stream() + .filter(n -> n.getIvt_status().equals(PackageInfoIvtEnum.IVT_STATUS.code("空"))) + .findFirst(); + //判断点位外层是否有空载具 + if (emptyList.isPresent()) { + BigDecimal sortSeq = emptyList.get().getSort_seq(); + hasEmptyVehicle = kzjIvtList.stream() + .anyMatch(r -> r.getSort_seq().compareTo(sortSeq) < 0 && + r.getIvt_status().equals(PackageInfoIvtEnum.IVT_STATUS.code("空载具"))); + } + if (hasEmptyVehicle) { + return; + } //待检区有空载具且过滤未完成任务 List djqPackageinfoivtList = packageinfoivtService.checkEndPointTask(PackageInfoIvtEnum.POINT_STATUS.code("待检区"), PackageInfoIvtEnum.IVT_STATUS.code("空载具"), PackageInfoIvtEnum.TASK_POINT_TYPE.code("取货任务"), PackageInfoIvtEnum.SORT_TYPE.code("升序"), ""); if (CollectionUtils.isNotEmpty(djqPackageinfoivtList)) { @@ -95,7 +113,7 @@ public class AutoSendVehicleToKzj { if (pointCode1 != null) { task.put("point_code1", pointCode1); //送空二次分配,目标点分配等待点 - task.put("point_code4", kzjIvtList.get(0).getPoint_code()); + task.put("point_code4", emptyList.get().getPoint_code()); task.put("point_code2", packageinfoivtService.getWaitPoint(kzjIvtList.get(0).getBlock(), kzjIvtList.get(0).getWait_point_type())); if (task.getString("task_type").equals(PackageInfoIvtEnum.TASK_TYPE.code("补空(待检区->空载具缓存位)"))) { djqToKzjhcwTask.createTask(task);