From 78409838dc38cbde564f938bec563a3dbd27fd8f Mon Sep 17 00:00:00 2001 From: zhouz <> Date: Mon, 15 Sep 2025 17:18:46 +0800 Subject: [PATCH] =?UTF-8?q?fix:=E5=BE=85=E6=A3=80=E5=8C=BA=E5=88=B0?= =?UTF-8?q?=E7=AE=A1=E5=88=B6=E5=8C=BA=E4=BB=BB=E5=8A=A1=E4=B8=8B=E5=8F=91?= =?UTF-8?q?=E4=BC=98=E5=8C=96=E3=80=81=E5=87=BA=E5=85=A5=E7=83=98=E7=AE=B1?= =?UTF-8?q?=E5=8E=BB=E9=99=A4=E6=8F=92=E5=85=A5=E5=88=B0=E8=A1=A8=E5=86=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../auto/AutoSendDjqToGzq.java | 152 ++---------------- .../auto/AutoSendVehicleToKzj.java | 66 ++++++++ .../mps/service/impl/BakingServiceImpl.java | 4 +- .../wms/sch/manage/AutoIntoHotCacheTask.java | 4 +- 4 files changed, 82 insertions(+), 144 deletions(-) diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/auto/AutoSendDjqToGzq.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/auto/AutoSendDjqToGzq.java index 4638707fb..be472b8b3 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/auto/AutoSendDjqToGzq.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/auto/AutoSendDjqToGzq.java @@ -33,7 +33,7 @@ import java.util.stream.Collectors; @Slf4j @Component @RequiredArgsConstructor -public class AutoSendDjqToGzq extends Prun{ +public class AutoSendDjqToGzq extends Prun { private final String THIS_CLASS = AutoSendDjqToGzq.class.getName(); @Resource @@ -54,7 +54,7 @@ public class AutoSendDjqToGzq extends Prun{ public void run() { try { this.sendDjqToGzq(); - }catch (Exception ex){ + } catch (Exception ex) { log.error(ex.getMessage()); } } @@ -65,35 +65,29 @@ public class AutoSendDjqToGzq extends Prun{ */ @SneakyThrows public void sendDjqToGzq() { - log.info(THIS_CLASS+"-待检区->管制区定时任务开始执行扫描。"); + log.info(THIS_CLASS + "-待检区->管制区定时任务开始执行扫描。"); RLock lock = redissonClient.getLock(THIS_CLASS); boolean tryLock = lock.tryLock(0, TimeUnit.SECONDS); try { if (tryLock) { //待检区有管制品且过滤未完成任务 - List djqPackageinfoivtList = packageinfoivtService.checkEndPointTask(PackageInfoIvtEnum.POINT_STATUS.code("待检区"), PackageInfoIvtEnum.IVT_STATUS.code("管制品"), PackageInfoIvtEnum.TASK_POINT_TYPE.code("取货任务"), PackageInfoIvtEnum.SORT_TYPE.code("升序"), PackageInfoIvtEnum.TASK_TYPE.code("待检区->管制区")); - List djqPackageinfoivtList2 = packageinfoivtService.checkEndPointTask(PackageInfoIvtEnum.POINT_STATUS.code("装箱区"), PackageInfoIvtEnum.IVT_STATUS.code("管制品"), PackageInfoIvtEnum.TASK_POINT_TYPE.code("取货任务"), PackageInfoIvtEnum.SORT_TYPE.code("升序"), PackageInfoIvtEnum.TASK_TYPE.code("待检区->管制区")); + List djqPackageinfoivtList = packageinfoivtService.selectEmpPoints(PackageInfoIvtEnum.POINT_STATUS.code("待检区"), PackageInfoIvtEnum.IVT_STATUS.code("管制品")); + // List djqPackageinfoivtList2 = packageinfoivtService.checkEndPointTask(PackageInfoIvtEnum.POINT_STATUS.code("装箱区"), PackageInfoIvtEnum.IVT_STATUS.code("管制品"), PackageInfoIvtEnum.TASK_POINT_TYPE.code("取货任务"), PackageInfoIvtEnum.SORT_TYPE.code("升序"), PackageInfoIvtEnum.TASK_TYPE.code("待检区->管制区")); if (CollectionUtils.isEmpty(djqPackageinfoivtList)) { return; } - if (!CollectionUtils.isEmpty(djqPackageinfoivtList2)){ - djqPackageinfoivtList.addAll(djqPackageinfoivtList2); - } //管制区有空位且过滤未完成任务 - List gzqPackageinfoivtList = packageinfoivtService.checkEndPointTask(PackageInfoIvtEnum.POINT_STATUS.code("管制区"), PackageInfoIvtEnum.IVT_STATUS.code("空"), PackageInfoIvtEnum.TASK_POINT_TYPE.code("放货任务"), PackageInfoIvtEnum.SORT_TYPE.code("升序"), PackageInfoIvtEnum.TASK_TYPE.code("待检区->管制区")); - //todo 新增NG卷放置临时管制区135136,只取空不补空 - List ivtLists = - gzqPackageinfoivtList.stream() - .filter(r -> PackageInfoIvtEnum.POINT_STATUS.code("管制区").equals(r.getPoint_status())) - .collect(Collectors.toList()); - if (ObjectUtils.isEmpty(ivtLists)) { + List gzqPackageinfoivtList = packageinfoivtService.selectEmpPoints(PackageInfoIvtEnum.POINT_STATUS.code("管制区"), PackageInfoIvtEnum.IVT_STATUS.code("空")); + if (ObjectUtils.isEmpty(gzqPackageinfoivtList)) { log.info("待检区->管制区agv自动搬运任务暂无可用空位,子卷号为:" + djqPackageinfoivtList.get(0).getContainer_name()); throw new BadRequestException("待检区->管制区agv自动搬运任务暂无可用空位,子卷号为:" + djqPackageinfoivtList.get(0).getContainer_name()); } JSONObject task = new JSONObject(); - task.put("point_code2", ivtLists.get(0).getPoint_code()); + task.put("vehicle_code", djqPackageinfoivtList.get(0).getContainer_name()); + task.put("point_code1", djqPackageinfoivtList.get(0).getPoint_code()); + task.put("point_code2", gzqPackageinfoivtList.get(0).getPoint_code()); task.put("task_type", PackageInfoIvtEnum.TASK_TYPE.code("待检区->管制区")); - createTask(djqPackageinfoivtList, task); + gzqTask.createTask(task); } else { log.info("待检区->管制区任务正在创建被锁住。"); } @@ -104,128 +98,4 @@ public class AutoSendDjqToGzq extends Prun{ } } - - - - /** - * 创建任务 - */ - private void createTask(List djqPackageinfoivtList, JSONObject task) { - // 浅货位和深货位 - Map> ivtMap = djqPackageinfoivtList.stream() - .collect(Collectors.partitioningBy(r -> r.getDepth().equals(PackageInfoIvtEnum.DEPTH_TYPE.code("浅货位")))); - List shallowIvtList = ivtMap.get(true); - List deepIvtList = ivtMap.get(false); - if (ObjectUtils.isNotEmpty(shallowIvtList)) { - // 优先处理浅货位 - handleTaskForShallow(task, shallowIvtList.get(0)); - } else if (ObjectUtils.isNotEmpty(deepIvtList)) { - // 处理深货位 - handleTaskForDeep(task, deepIvtList.get(0)); - } - } - - /** - * 处理浅货位 - */ - private void handleTaskForShallow(JSONObject task, BstIvtPackageinfoivt shallowIvt) { - task.put("vehicle_code", shallowIvt.getContainer_name()); - task.put("point_code1", shallowIvt.getPoint_code()); - gzqTask.createTask(task); - } - - /** - * 处理深货位 - */ - private void handleTaskForDeep(JSONObject task, BstIvtPackageinfoivt deepIvt) { - String pointCode1 = deepIvt.getPoint_code(); - List groupIvtList = packageinfoivtService.list(new LambdaQueryWrapper() - .eq(BstIvtPackageinfoivt::getCol_num, deepIvt.getCol_num())) - .stream() - .filter(r -> r.getDepth().equals(PackageInfoIvtEnum.DEPTH_TYPE.code("浅货位"))) - .collect(Collectors.toList()); - if (ObjectUtils.isNotEmpty(groupIvtList)) { - BstIvtPackageinfoivt shallowIvt = groupIvtList.get(0); - //处理深货位对应浅货位的状态 - handleShallowIvtStatus(task, deepIvt, shallowIvt, pointCode1); - } - } - - - /** - * 处理深货位对应浅货位的状态 - */ - private void handleShallowIvtStatus(JSONObject task, BstIvtPackageinfoivt deepIvt, BstIvtPackageinfoivt shallowIvt, String pointCode1) { - Set pointCodes2 = Collections.singleton(shallowIvt.getPoint_code()); - //浅货位状态为空,查询该货位是否存在运行中的放货任务 - //如果不存在,则直接创建主任务 - //如果存在,则1.建立确定起点的主任务,2.运行中的放货任务完成后,再让下发执行主任务 - //浅货位状态不为空,查询该货位是否存在运行中的取货任务 - //如果不存在,1.创建主任务不下发;2.创建移库任务,绑定主任务关联关系task_group_id,等待移库任务完成后,再下发主任务 - //如果存在,不需要移库,绑定与主任务关联关系task_group_id,等待运行中的取货任务完成后,再让下发执行主任务 - List existTaskList = shallowIvt.getIvt_status().equals(PackageInfoIvtEnum.IVT_STATUS.code("空")) - ? bstIvtPackageinfoivtMapper.getTaskList(null, pointCodes2, null, null) - : bstIvtPackageinfoivtMapper.getTaskList(pointCodes2, null, null, null); - //创建搬运任务 - task.put("vehicle_code", deepIvt.getContainer_name()); - task.put("point_code1", pointCode1); - //不存在搬运任务 - if (ObjectUtils.isEmpty(existTaskList)) { - //浅库位状态为空 - if (shallowIvt.getIvt_status().equals(PackageInfoIvtEnum.IVT_STATUS.code("空"))) { - gzqTask.createTask(task); - } else { - createMainTask(task, deepIvt, shallowIvt, pointCode1, null); - } - //存在搬运任务 - } else { - //浅库位状态为空 - if (shallowIvt.getIvt_status().equals(PackageInfoIvtEnum.IVT_STATUS.code("空"))) { - createMainTask(task, deepIvt, shallowIvt, pointCode1, existTaskList.get(0)); - } else { - //浅库位状态不为空 - task.put("task_status", TaskStatusEnum.SURE_END.getCode()); - LambdaUpdateWrapper updateWrapper = new LambdaUpdateWrapper().eq(SchBaseTask::getTask_id, existTaskList.get(0).getTask_id()); - updateWrapper.set(SchBaseTask::getTask_group_id, gzqTask.createTask(task)); - taskService.update(null, updateWrapper); - } - } - } - - /** - * 创建搬运和移库任务 - */ - private void createMainTask(JSONObject task, BstIvtPackageinfoivt deepIvt, BstIvtPackageinfoivt shallowIvt, String pointCode1, SchBaseTask existTask) { - String taskId; - String shiftingTaskId; - task.put("vehicle_code", deepIvt.getContainer_name()); - task.put("point_code1", pointCode1); - task.put("task_status", TaskStatusEnum.SURE_END.getCode()); - taskId = gzqTask.createTask(task); - //获取移库任务目标点 - String pointCode4 = packageinfoivtService.getDjqShiftingPoint(shallowIvt,true); - JSONObject task1 = new JSONObject(); - if (existTask != null) { - task1.put("task_status", StringUtils.isBlank(pointCode4) ? TaskStatusEnum.SURE_START.getCode() : TaskStatusEnum.SURE_END.getCode()); - } else { - task1.put("task_status", StringUtils.isBlank(pointCode4) ? TaskStatusEnum.SURE_START.getCode() : TaskStatusEnum.START_AND_POINT.getCode()); - } - task1.put("vehicle_code2", PackageInfoIvtEnum.AGV_ACTION_TYPE.code("普通任务")); - task1.put("task_type", PackageInfoIvtEnum.TASK_TYPE.code("待检区移库任务")); - task1.put("vehicle_code", shallowIvt.getContainer_name()); - task1.put("point_code1", shallowIvt.getPoint_code()); - task1.put("point_code2", pointCode4); - task1.put("task_group_id", taskId); - task1.put("material_code", shallowIvt.getIvt_status()); - shiftingTaskId = shiftingTask.createTask(task1); - if (existTask != null) { - LambdaUpdateWrapper updateWrapper = new LambdaUpdateWrapper() - .eq(SchBaseTask::getTask_id, existTask.getTask_id()); - updateWrapper.set(SchBaseTask::getTask_group_id, shiftingTaskId); - taskService.update(null, updateWrapper); - } - } - - - } 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 46eec179c..406344abe 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 @@ -16,6 +16,7 @@ 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.DjqToKzjhcwTask; import org.nl.b_lms.sch.tasks.first_floor_area.GzqToKzjhcwTask; +import org.nl.b_lms.sch.tasks.first_floor_area.SendDjqKzjTask; import org.nl.b_lms.sch.tasks.first_floor_area.ShiftingTask; import org.nl.b_lms.storage_manage.ios.enums.IOSEnum; import org.nl.common.enums.PackageInfoIvtEnum; @@ -53,11 +54,14 @@ public class AutoSendVehicleToKzj extends Prun{ private ShiftingTask shiftingTask; @Resource private IschBaseTaskService taskService; + @Resource + private SendDjqKzjTask sendDjqKzjTask; //待检区或管制区->空载具缓存位补空 public void run() { try { this.toKzjHcw(); + this.sendVehicleToDjqOrGzq(IOSEnum.IS_NOTANDYES.code("否"), null); }catch (Exception ex){ log.error(ex.getMessage()); } @@ -82,6 +86,17 @@ public class AutoSendVehicleToKzj extends Prun{ if (existTask.size() <= 1) { List empPoints = this.packageinfoivtService.selectEmpPoints(PackageInfoIvtEnum.POINT_STATUS.code("空载具缓存位"), PackageInfoIvtEnum.IVT_STATUS.code("空")); List vehiclePoints = this.packageinfoivtService.selectEmpPoints(PackageInfoIvtEnum.POINT_STATUS.code("待检区"), PackageInfoIvtEnum.IVT_STATUS.code("空载具")); + //如果待检区没有可用的空载具 + if (CollectionUtils.isEmpty(vehiclePoints)){ + List taskList = taskService.list(new LambdaQueryWrapper() + .lt(SchBaseTask::getTask_status, TaskStatusEnum.FINISHED.getCode()) + .eq(SchBaseTask::getIs_delete, IOSEnum.IS_NOTANDYES.code("否")) + .eq(SchBaseTask::getTask_type, "010909")); + if (ObjectUtils.isEmpty(taskList)){ + vehiclePoints = packageinfoivtService + .selectEmpPoints(PackageInfoIvtEnum.POINT_STATUS.code("装箱区"), PackageInfoIvtEnum.IVT_STATUS.code("空载具")); + } + } if (!CollectionUtils.isEmpty(empPoints) && !CollectionUtils.isEmpty(vehiclePoints) && existTask.size() < empPoints.size()) { //增加空洞判断 //车 04 05 06 @@ -111,6 +126,57 @@ public class AutoSendVehicleToKzj extends Prun{ } } + @SneakyThrows + public void sendVehicleToDjqOrGzq(String isCalling, String block) { + log.info(THIS_CLASS + "-装箱区->待检区或管制区补空任务开始执行扫描。"); + RLock lock = redissonClient.getLock("todjq"); + boolean tryLock = lock.tryLock(0, TimeUnit.SECONDS); + try { + if (tryLock) { + if (isCalling.equals(IOSEnum.IS_NOTANDYES.code("否"))) { + //存在正在执行的行架任务 + List taskList = taskService.list(new LambdaQueryWrapper() + .lt(SchBaseTask::getTask_status, TaskStatusEnum.FINISHED.getCode()) + .eq(SchBaseTask::getIs_delete, IOSEnum.IS_NOTANDYES.code("否")) + .eq(SchBaseTask::getTask_type, "010909")); + if (ObjectUtils.isNotEmpty(taskList)) { + log.warn("当前装箱区存在执行的行架任务"+taskList.stream().map(SchBaseTask::getTask_code).collect(Collectors.joining(","))); + return; + } + } + //存在装箱区有空载具的点位 + List zxqVehicleList = packageinfoivtService + .selectEmpPoints(PackageInfoIvtEnum.POINT_STATUS.code("装箱区"), PackageInfoIvtEnum.IVT_STATUS.code("空载具")); + List djqEmpList = packageinfoivtService + .selectEmpPoints(PackageInfoIvtEnum.POINT_STATUS.code("待检区"), PackageInfoIvtEnum.IVT_STATUS.code("空")); + if (CollectionUtils.isEmpty(zxqVehicleList) || CollectionUtils.isEmpty(djqEmpList)) { + log.info(THIS_CLASS + "装箱区或待检区没有可用点位"); + return; + } + JSONObject task = new JSONObject(); + task.put("task_type", PackageInfoIvtEnum.TASK_TYPE.code("补空(装箱区->待检区)")); + task.put("point_code1", zxqVehicleList.get(0).getPoint_code()); + task.put("vehicle_code2", PackageInfoIvtEnum.AGV_ACTION_TYPE.code("普通任务")); + task.put("task_status", TaskStatusEnum.SURE_END.getCode()); + task.put("point_code2", djqEmpList.get(0).getPoint_code()); + try { + sendDjqKzjTask.createTask(task); + }catch (Exception ex){ + log.error(THIS_CLASS+"任务创建失败"+ex.getMessage()); + } + + } else { + log.info(THIS_CLASS + "装箱区搬空任务正在创建被锁住"); + } + } finally { + if (lock.isLocked() && lock.isHeldByCurrentThread()) { + lock.unlock(); + } + } + } + + + private void getPointCode(JSONObject task, String taskType) { List packageList; diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/pda/mps/service/impl/BakingServiceImpl.java b/lms/nladmin-system/src/main/java/org/nl/wms/pda/mps/service/impl/BakingServiceImpl.java index f68add9e2..0d1e08ab3 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/pda/mps/service/impl/BakingServiceImpl.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/pda/mps/service/impl/BakingServiceImpl.java @@ -539,7 +539,7 @@ public class BakingServiceImpl implements BakingService { throw new BadRequestException("物料基础信息中无此物料!"); } - //查询该母卷对应最近的一条入烘箱记录 + /*//查询该母卷对应最近的一条入烘箱记录 JSONObject last_hot_mst = WQLObject.getWQLObject("ST_IVT_HotRegionIOMst").query("container_name = '" + jsonHotIvt.getString("container_name") + "' AND io_type = '0' order by confirm_time desc").uniqueResult(0); JSONObject hotParam = new JSONObject(); @@ -565,7 +565,7 @@ public class BakingServiceImpl implements BakingService { } else { hotParam.put("oven_time", last_hot_mst.getString("oven_time")); } - this.createHotIoMst(hotParam); + this.createHotIoMst(hotParam);*/ } } JSONObject result = new JSONObject(); diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/sch/manage/AutoIntoHotCacheTask.java b/lms/nladmin-system/src/main/java/org/nl/wms/sch/manage/AutoIntoHotCacheTask.java index ef6db9464..d41b80875 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/sch/manage/AutoIntoHotCacheTask.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/sch/manage/AutoIntoHotCacheTask.java @@ -10,6 +10,7 @@ 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.auto.AutoSendToZxq; import org.nl.modules.wql.WQL; +import org.nl.modules.wql.util.SpringContextHolder; import org.nl.wms.sch.tasks.InCoolIvtTask; import org.nl.wms.sch.tasks.InHotTask; import org.redisson.api.RLock; @@ -54,7 +55,6 @@ public class AutoIntoHotCacheTask { log.info("烘箱对接位:{} 没找到暂存位!", task.getPoint_code1()); return; } - new InHotTask().immediateNotifyAcs(task.getTask_id()); task.setTask_status(TaskStatusEnum.START_AND_POINT.getCode()); task.setPoint_code2(cache_jo.getString("point_code")); @@ -62,6 +62,8 @@ public class AutoIntoHotCacheTask { task.setUpdate_time(DateUtil.now()); task.setTask_type("010204"); taskService.updateById(task); + + SpringContextHolder.getBean(InHotTask.class).immediateNotifyAcs(task.getTask_id()); } } else { log.info("定时对B1入暂存任务被锁住。");