fix:增加已分配执行中的空载具任务判断

This commit is contained in:
2024-07-10 08:51:32 +08:00
parent 8287c2d0c2
commit 25730dfb22

View File

@@ -91,135 +91,6 @@ public class BstIvtPackageinfoivtServiceImpl extends ServiceImpl<BstIvtPackagein
return bstIvtPackageinfoivtMapper.selectPage(new Page<>(page.getPage() + 1, page.getSize()), queryWrapper);
}
/**
* 查询没有搬运任务的空的目标点位
* @param ivtType 点位类型
* @param ivtStatus 库存状态
* @param pointCode 取货还是放货
* @param sortType 点位排序规则1升序2降序
* @param taskType 任务类型
* @return List<BstIvtPackageinfoivt>
*/
@Override
public List<BstIvtPackageinfoivt> checkEndPointTask(String ivtType, String ivtStatus, String pointCode, String sortType, String taskType) {
List<BstIvtPackageinfoivt> packageinfoivtList = getBstIvtPackageinfoivts(ivtType, ivtStatus, sortType);
Set<String> pointIds = packageinfoivtList.stream()
.map(BstIvtPackageinfoivt::getPoint_code)
.collect(Collectors.toSet());
if (CollectionUtils.isEmpty(pointIds)) {
return Collections.emptyList();
}
if (pointCode == null) {
return packageinfoivtList;
}
List<SchBaseTask> taskList;
Set<String> 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<BstIvtPackageinfoivt> getBstIvtPackageinfoivts(String ivtType, String ivtStatus, String sortType) {
LambdaQueryWrapper<BstIvtPackageinfoivt> queryWrapper = new LambdaQueryWrapper<BstIvtPackageinfoivt>()
.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<BstIvtPackageinfoivt> checkEndPointTask1(String ivtType, String ivtStatus, String pointCode, String sortType, String taskType) {
List<BstIvtPackageinfoivt> packageinfoivtList = getBstIvtPackageinfoivts(ivtType, ivtStatus, sortType);
Set<String> pointIds = packageinfoivtList.stream().map(BstIvtPackageinfoivt::getPoint_code).collect(Collectors.toSet());
if (CollectionUtils.isEmpty(pointIds)) {
return null;
}
if (pointCode.equals("1")) {
List<SchBaseTask> taskList = taskService.list(new LambdaUpdateWrapper<SchBaseTask>()
//起点未完成任务
.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<SchBaseTask> taskList = taskService.list(new LambdaUpdateWrapper<SchBaseTask>()
//终点未完成任务
.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<BstIvtPackageinfoivt> waitPointList = bstIvtPackageinfoivtMapper.selectList(new LambdaQueryWrapper<BstIvtPackageinfoivt>()
.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<BstIvtPackageinfoivt> 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<BstIvtPackagein
}
}
}
newPoint = checkIvtSBlock();
newPoint = checkIvtSBlock(baseTask);
} else {
newPoint = getBstIvtPackageinfoivt(actionType, taskPointType, baseTask);
}
@@ -334,11 +205,166 @@ public class BstIvtPackageinfoivtServiceImpl extends ServiceImpl<BstIvtPackagein
taskService.updateById(baseTask);
return newPoint.getPoint_code();
} else {
throw new BadRequestException("点位外层有载具阻挡或暂无点位资源");
throw new BadRequestException("存在未完成的取放货任务或点位外层有载具阻挡!");
}
}
/**
* 查询没有搬运任务的空的目标点位
* @param ivtType 点位类型
* @param ivtStatus 库存状态
* @param pointCode 取货还是放货
* @param sortType 点位排序规则1升序2降序
* @param taskType 任务类型
* @return List<BstIvtPackageinfoivt>
*/
@Override
public List<BstIvtPackageinfoivt> checkEndPointTask(String ivtType, String ivtStatus, String pointCode, String sortType, String taskType) {
List<BstIvtPackageinfoivt> packageinfoivtList = getBstIvtPackageinfoivts(ivtType, ivtStatus, sortType);
Set<String> pointIds = packageinfoivtList.stream()
.map(BstIvtPackageinfoivt::getPoint_code)
.collect(Collectors.toSet());
if (CollectionUtils.isEmpty(pointIds)) {
return Collections.emptyList();
}
if (pointCode == null) {
return packageinfoivtList;
}
List<SchBaseTask> taskList;
Set<String> 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<BstIvtPackageinfoivt> 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<String> taskPointSet = taskList.stream().map(SchBaseTask::getPoint_code2).collect(Collectors.toSet());
List<BstIvtPackageinfoivt> pointList = new ArrayList<>();
if (CollectionUtils.isEmpty(taskPointSet)) {
List<BstIvtPackageinfoivt> 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<BstIvtPackageinfoivt> existPointList = bstIvtPackageinfoivtMapper.selectList(new LambdaQueryWrapper<BstIvtPackageinfoivt>().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<BstIvtPackageinfoivt> getBstIvtPackageinfoivts(String ivtType, String ivtStatus, String sortType) {
LambdaQueryWrapper<BstIvtPackageinfoivt> queryWrapper = new LambdaQueryWrapper<BstIvtPackageinfoivt>()
.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<BstIvtPackageinfoivt> checkEndPointTask1(String ivtType, String ivtStatus, String pointCode, String sortType, String taskType) {
List<BstIvtPackageinfoivt> packageinfoivtList = getBstIvtPackageinfoivts(ivtType, ivtStatus, sortType);
Set<String> pointIds = packageinfoivtList.stream().map(BstIvtPackageinfoivt::getPoint_code).collect(Collectors.toSet());
if (CollectionUtils.isEmpty(pointIds)) {
return null;
}
if (pointCode.equals("1")) {
List<SchBaseTask> taskList = taskService.list(new LambdaUpdateWrapper<SchBaseTask>()
//起点未完成任务
.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<SchBaseTask> taskList = taskService.list(new LambdaUpdateWrapper<SchBaseTask>()
//终点未完成任务
.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<BstIvtPackageinfoivt> waitPointList = bstIvtPackageinfoivtMapper.selectList(new LambdaQueryWrapper<BstIvtPackageinfoivt>()
.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<BstIvtPackageinfoivt> 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<BstIvtPackagein
//放满轴任务不判断终点是否有任务
taskPointType = PackageInfoIvtEnum.TASK_POINT_TYPE.code("四个点任务放货");
}
BstIvtPackageinfoivt bstIvtPackageinfoivt = bstIvtPackageinfoivtMapper.selectOne(queryWrapper);
//根据任务类型返回点位分配规则
BstIvtPackageinfoivt ivtInfo = getIvtInfoFromRegion(baseTask.getTask_type(), actionType);
@@ -454,19 +479,23 @@ public class BstIvtPackageinfoivtServiceImpl extends ServiceImpl<BstIvtPackagein
/**
* 获取不阻挡的空载具缓存点位
*/
public BstIvtPackageinfoivt checkIvtSBlock() {
public BstIvtPackageinfoivt checkIvtSBlock(SchBaseTask baseTask) {
BstIvtPackageinfoivt newPoint = new BstIvtPackageinfoivt();
List<BstIvtPackageinfoivt> kzjIvtList = packageinfoivtService.checkEndPointTask(PackageInfoIvtEnum.POINT_STATUS.code("空载具缓存位"), null, PackageInfoIvtEnum.TASK_POINT_TYPE.code("放货任务"), PackageInfoIvtEnum.SORT_TYPE.code("降序"), "");
if (CollectionUtils.isEmpty(kzjIvtList)) {
List<BstIvtPackageinfoivt> 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<BstIvtPackageinfoivt> vehicleList,List<BstIvtPackageinfoivt> kzjIvtList) {
boolean hasEmptyVehicle;
//判断有空载具
List<BstIvtPackageinfoivt> 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()