fix:增加已分配执行中的空载具任务判断
This commit is contained in:
@@ -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()
|
||||
|
||||
Reference in New Issue
Block a user