From 25730dfb2243ecced8df6159d1edd27cd0684b45 Mon Sep 17 00:00:00 2001 From: gongbaoxiong <751575283@qq.com> Date: Wed, 10 Jul 2024 08:51:32 +0800 Subject: [PATCH] =?UTF-8?q?fix:=E5=A2=9E=E5=8A=A0=E5=B7=B2=E5=88=86?= =?UTF-8?q?=E9=85=8D=E6=89=A7=E8=A1=8C=E4=B8=AD=E7=9A=84=E7=A9=BA=E8=BD=BD?= =?UTF-8?q?=E5=85=B7=E4=BB=BB=E5=8A=A1=E5=88=A4=E6=96=AD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../impl/BstIvtPackageinfoivtServiceImpl.java | 311 ++++++++++-------- 1 file changed, 170 insertions(+), 141 deletions(-) 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 c51308225..fecb90e54 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 @@ -91,135 +91,6 @@ public class BstIvtPackageinfoivtServiceImpl extends ServiceImpl(page.getPage() + 1, page.getSize()), queryWrapper); } - /** - * 查询没有搬运任务的空的目标点位 - * @param ivtType 点位类型 - * @param ivtStatus 库存状态 - * @param pointCode 取货还是放货 - * @param sortType 点位排序规则1:升序2:降序 - * @param taskType 任务类型 - * @return List - */ - @Override - public List checkEndPointTask(String ivtType, String ivtStatus, String pointCode, String sortType, String taskType) { - List packageinfoivtList = getBstIvtPackageinfoivts(ivtType, ivtStatus, sortType); - Set pointIds = packageinfoivtList.stream() - .map(BstIvtPackageinfoivt::getPoint_code) - .collect(Collectors.toSet()); - if (CollectionUtils.isEmpty(pointIds)) { - return Collections.emptyList(); - } - if (pointCode == null) { - return packageinfoivtList; - } - List taskList; - Set pointSets; - if (pointCode.equals(PackageInfoIvtEnum.TASK_POINT_TYPE.code("取货任务")) || pointCode.equals(PackageInfoIvtEnum.TASK_POINT_TYPE.code("放货任务"))) { - taskList = bstIvtPackageinfoivtMapper.getTaskList(pointIds, pointIds, null, null); - } else if (pointCode.equals(PackageInfoIvtEnum.TASK_POINT_TYPE.code("取货分配"))) { - taskList = bstIvtPackageinfoivtMapper.getTaskList(pointIds, pointIds, pointIds, null); - } else if (pointCode.equals(PackageInfoIvtEnum.TASK_POINT_TYPE.code("放货分配"))) { - taskList = bstIvtPackageinfoivtMapper.getTaskList(pointIds, pointIds, null, pointIds); - } - else if (pointCode.equals(PackageInfoIvtEnum.TASK_POINT_TYPE.code("四个点任务放货"))) { - taskList = bstIvtPackageinfoivtMapper.getTaskList(pointIds, null, pointIds, null); - } - else if (pointCode.equals(PackageInfoIvtEnum.TASK_POINT_TYPE.code("取货任务取货分配"))) { - taskList = bstIvtPackageinfoivtMapper.getTaskList(pointIds, pointIds, pointIds, pointIds); - } else { - return packageinfoivtList; - } - // 过滤未完成任务的任务 - if (pointCode.equals(PackageInfoIvtEnum.TASK_POINT_TYPE.code("取货任务")) || pointCode.equals(PackageInfoIvtEnum.TASK_POINT_TYPE.code("放货任务"))) { - pointSets = taskList.stream() - // 对每个任务应用映射操作,将point_code字段添加到Stream中 - .flatMap(task -> Stream.of( - task.getPoint_code1(), - task.getPoint_code2() - )) - .filter(Objects::nonNull) - .collect(Collectors.toSet()); - } else { - pointSets = taskList.stream() - .flatMap(task -> Stream.of( - task.getPoint_code1(), - task.getPoint_code2(), - task.getPoint_code3(), - task.getPoint_code4() - )) - .filter(Objects::nonNull) - .collect(Collectors.toSet()); - } - return packageinfoivtList.stream() - .filter(p -> !pointSets.contains(p.getPoint_code())) - .collect(Collectors.toList()); - } - - private List getBstIvtPackageinfoivts(String ivtType, String ivtStatus, String sortType) { - LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper() - .eq(BstIvtPackageinfoivt::getIs_used, PackageInfoIvtEnum.IS_USED.code("启用")) - .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)) { - queryWrapper.orderByDesc(BstIvtPackageinfoivt::getSort_seq); - } else { - queryWrapper.orderByAsc(BstIvtPackageinfoivt::getSort_seq); - } - return bstIvtPackageinfoivtMapper.selectList(queryWrapper); - } - - - public List checkEndPointTask1(String ivtType, String ivtStatus, String pointCode, String sortType, String taskType) { - List packageinfoivtList = getBstIvtPackageinfoivts(ivtType, ivtStatus, sortType); - Set pointIds = packageinfoivtList.stream().map(BstIvtPackageinfoivt::getPoint_code).collect(Collectors.toSet()); - if (CollectionUtils.isEmpty(pointIds)) { - return null; - } - if (pointCode.equals("1")) { - List taskList = taskService.list(new LambdaUpdateWrapper() - //起点未完成任务 - .lt(SchBaseTask::getTask_status, TaskStatusEnum.FINISHED.getCode()) - .eq(taskType != null && !taskType.equals(""), SchBaseTask::getTask_type, taskType) - .and( - r -> r.in(SchBaseTask::getPoint_code1, pointIds) - )); - return packageinfoivtList.stream().filter(r -> !taskList.stream().map(SchBaseTask::getPoint_code1).collect(Collectors.toSet()).contains(r.getPoint_code())).collect(Collectors.toList()); - } else { - List taskList = taskService.list(new LambdaUpdateWrapper() - //终点未完成任务 - .lt(SchBaseTask::getTask_status, TaskStatusEnum.FINISHED.getCode()) - .eq(taskType != null && !taskType.equals(""), SchBaseTask::getTask_type, taskType) - .and( - r -> r.in(SchBaseTask::getPoint_code2, pointIds) - )); - return packageinfoivtList.stream().filter(r -> !taskList.stream().map(SchBaseTask::getPoint_code2).collect(Collectors.toSet()).contains(r.getPoint_code())).collect(Collectors.toList()); - } - } - - - /** - * 获取等待点 - */ - @Override - public String getWaitPoint(String block, String waitPointType) { - List waitPointList = bstIvtPackageinfoivtMapper.selectList(new LambdaQueryWrapper() - .eq(BstIvtPackageinfoivt::getIs_used, PackageInfoIvtEnum.IS_USED.code("启用")) - .eq(BstIvtPackageinfoivt::getPoint_status, PackageInfoIvtEnum.POINT_STATUS.code("等待点")) - .eq(BstIvtPackageinfoivt::getBlock, block)); - if (CollectionUtils.isEmpty(waitPointList)) { - throw new BadRequestException("找不到等待点!"); - } - List waitPoints = waitPointList.stream().filter(r -> r.getPoint_location().equals(waitPointType)).collect(Collectors.toList()); - if (CollectionUtils.isEmpty(waitPoints)) { - throw new BadRequestException("找不到等待点!"); - } - return waitPoints.get(0).getPoint_code(); - } - /** * @param taskCode 任务编码唯一ID @@ -315,7 +186,7 @@ public class BstIvtPackageinfoivtServiceImpl extends ServiceImpl + */ + @Override + public List checkEndPointTask(String ivtType, String ivtStatus, String pointCode, String sortType, String taskType) { + List packageinfoivtList = getBstIvtPackageinfoivts(ivtType, ivtStatus, sortType); + Set pointIds = packageinfoivtList.stream() + .map(BstIvtPackageinfoivt::getPoint_code) + .collect(Collectors.toSet()); + if (CollectionUtils.isEmpty(pointIds)) { + return Collections.emptyList(); + } + if (pointCode == null) { + return packageinfoivtList; + } + List taskList; + Set pointSets; + if (pointCode.equals(PackageInfoIvtEnum.TASK_POINT_TYPE.code("取货任务")) || pointCode.equals(PackageInfoIvtEnum.TASK_POINT_TYPE.code("放货任务"))) { + taskList = bstIvtPackageinfoivtMapper.getTaskList(pointIds, pointIds, null, null); + } else if (pointCode.equals(PackageInfoIvtEnum.TASK_POINT_TYPE.code("取货分配"))) { + taskList = bstIvtPackageinfoivtMapper.getTaskList(pointIds, pointIds, pointIds, null); + } else if (pointCode.equals(PackageInfoIvtEnum.TASK_POINT_TYPE.code("放货分配"))) { + taskList = bstIvtPackageinfoivtMapper.getTaskList(pointIds, pointIds, null, pointIds); + } + else if (pointCode.equals(PackageInfoIvtEnum.TASK_POINT_TYPE.code("四个点任务放货"))) { + taskList = bstIvtPackageinfoivtMapper.getTaskList(pointIds, null, pointIds, null); + } + else if (pointCode.equals(PackageInfoIvtEnum.TASK_POINT_TYPE.code("取货任务取货分配"))) { + taskList = bstIvtPackageinfoivtMapper.getTaskList(pointIds, pointIds, pointIds, pointIds); + } else { + return packageinfoivtList; + } + // 过滤未完成任务的任务 + if (pointCode.equals(PackageInfoIvtEnum.TASK_POINT_TYPE.code("取货任务")) || pointCode.equals(PackageInfoIvtEnum.TASK_POINT_TYPE.code("放货任务"))) { + pointSets = taskList.stream() + .flatMap(task -> Stream.of( + task.getPoint_code1(), + task.getPoint_code2() + )) + .filter(Objects::nonNull) + .collect(Collectors.toSet()); + } else { + pointSets = taskList.stream() + .flatMap(task -> Stream.of( + task.getPoint_code1(), + task.getPoint_code2(), + task.getPoint_code3(), + task.getPoint_code4() + )) + .filter(Objects::nonNull) + .collect(Collectors.toSet()); + } + List ivtList = packageinfoivtList.stream() + .filter(p -> !pointSets.contains(p.getPoint_code())) + .collect(Collectors.toList()); + //送空载具到空载具缓存位任务,需要判断是否存在已分配的且未完成的送空载具任务,如果存在,判断存在是否阻挡 + if (taskType.equals(PackageInfoIvtEnum.TASK_TYPE.code("补空(待检区->空载具缓存位)")) || taskType.equals(PackageInfoIvtEnum.TASK_TYPE.code("补空(管制区->空载具缓存位)"))) { + Set taskPointSet = taskList.stream().map(SchBaseTask::getPoint_code2).collect(Collectors.toSet()); + List pointList = new ArrayList<>(); + if (CollectionUtils.isEmpty(taskPointSet)) { + List vehicleList = ivtList.stream() + .filter(n -> n.getIvt_status().equals(PackageInfoIvtEnum.IVT_STATUS.code("空载具"))) + .sorted(Comparator.comparing(BstIvtPackageinfoivt::getSort_seq)) + .collect(Collectors.toList()); + pointList.add(getBstIvtPackageinfoivt(vehicleList,ivtList)); + return pointList; + } else { + List existPointList = bstIvtPackageinfoivtMapper.selectList(new LambdaQueryWrapper().in(BstIvtPackageinfoivt::getPoint_code, taskPointSet)); + existPointList = existPointList.stream().peek(r -> r.setIvt_status(PackageInfoIvtEnum.IVT_STATUS.code("空载具"))).collect(Collectors.toList()); + pointList.add(getBstIvtPackageinfoivt(existPointList, ivtList)); + return pointList; + } + } else { + return ivtList; + } + } + + + /** + * 根据点位类型查询库存 + */ + private List getBstIvtPackageinfoivts(String ivtType, String ivtStatus, String sortType) { + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper() + .eq(BstIvtPackageinfoivt::getIs_used, PackageInfoIvtEnum.IS_USED.code("启用")) + .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)) { + queryWrapper.orderByDesc(BstIvtPackageinfoivt::getSort_seq); + } else { + queryWrapper.orderByAsc(BstIvtPackageinfoivt::getSort_seq); + } + return bstIvtPackageinfoivtMapper.selectList(queryWrapper); + } + + + public List checkEndPointTask1(String ivtType, String ivtStatus, String pointCode, String sortType, String taskType) { + List packageinfoivtList = getBstIvtPackageinfoivts(ivtType, ivtStatus, sortType); + Set pointIds = packageinfoivtList.stream().map(BstIvtPackageinfoivt::getPoint_code).collect(Collectors.toSet()); + if (CollectionUtils.isEmpty(pointIds)) { + return null; + } + if (pointCode.equals("1")) { + List taskList = taskService.list(new LambdaUpdateWrapper() + //起点未完成任务 + .lt(SchBaseTask::getTask_status, TaskStatusEnum.FINISHED.getCode()) + .eq(taskType != null && !taskType.equals(""), SchBaseTask::getTask_type, taskType) + .and( + r -> r.in(SchBaseTask::getPoint_code1, pointIds) + )); + return packageinfoivtList.stream().filter(r -> !taskList.stream().map(SchBaseTask::getPoint_code1).collect(Collectors.toSet()).contains(r.getPoint_code())).collect(Collectors.toList()); + } else { + List taskList = taskService.list(new LambdaUpdateWrapper() + //终点未完成任务 + .lt(SchBaseTask::getTask_status, TaskStatusEnum.FINISHED.getCode()) + .eq(taskType != null && !taskType.equals(""), SchBaseTask::getTask_type, taskType) + .and( + r -> r.in(SchBaseTask::getPoint_code2, pointIds) + )); + return packageinfoivtList.stream().filter(r -> !taskList.stream().map(SchBaseTask::getPoint_code2).collect(Collectors.toSet()).contains(r.getPoint_code())).collect(Collectors.toList()); + } + } + + + /** + * 获取等待点 + */ + @Override + public String getWaitPoint(String block, String waitPointType) { + List waitPointList = bstIvtPackageinfoivtMapper.selectList(new LambdaQueryWrapper() + .eq(BstIvtPackageinfoivt::getIs_used, PackageInfoIvtEnum.IS_USED.code("启用")) + .eq(BstIvtPackageinfoivt::getPoint_status, PackageInfoIvtEnum.POINT_STATUS.code("等待点")) + .eq(BstIvtPackageinfoivt::getBlock, block)); + if (CollectionUtils.isEmpty(waitPointList)) { + throw new BadRequestException("找不到等待点!"); + } + List waitPoints = waitPointList.stream().filter(r -> r.getPoint_location().equals(waitPointType)).collect(Collectors.toList()); + if (CollectionUtils.isEmpty(waitPoints)) { + throw new BadRequestException("找不到等待点!"); + } + return waitPoints.get(0).getPoint_code(); + } + + + + /** * 更新点位状态 * @@ -439,7 +465,6 @@ 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)) { + List kzjIvtList = packageinfoivtService.checkEndPointTask(PackageInfoIvtEnum.POINT_STATUS.code("空载具缓存位"), null, PackageInfoIvtEnum.TASK_POINT_TYPE.code("放货任务"), PackageInfoIvtEnum.SORT_TYPE.code("降序"), baseTask.getTask_type()); + if (CollectionUtils.isNotEmpty(kzjIvtList)) { + return kzjIvtList.get(0); + } else { return newPoint; } + } + + + /** + * 判断点位是否有外层阻挡 + */ + private static BstIvtPackageinfoivt getBstIvtPackageinfoivt(List vehicleList,List kzjIvtList) { boolean hasEmptyVehicle; - //判断有空载具 - List vehicleList = kzjIvtList.stream() - .filter(n -> n.getIvt_status().equals(PackageInfoIvtEnum.IVT_STATUS.code("空载具"))) - .sorted(Comparator.comparing(BstIvtPackageinfoivt::getSort_seq)) - .collect(Collectors.toList()); - //判断空载具点位外层是否有空载具 + BstIvtPackageinfoivt newPoint = new BstIvtPackageinfoivt(); if (CollectionUtils.isNotEmpty(vehicleList)) { BigDecimal sortSeq = vehicleList.get(0).getSort_seq(); hasEmptyVehicle = kzjIvtList.stream()