fix:增加二次分配任务完成情况校验

This commit is contained in:
2024-07-10 22:53:06 +08:00
parent db067c980a
commit 8884ef7c59
4 changed files with 84 additions and 55 deletions

View File

@@ -32,7 +32,7 @@ public interface BstIvtPackageinfoivtMapper extends BaseMapper<BstIvtPackageinfo
/**
* 获取点位任务数量
*/
List<SchBaseTask> getTaskList(Set<String> point_code1, Set<String> point_code2, Set<String> point_code3, Set<String> point_code4);
List<SchBaseTask> getTaskList(Set<String> pointCodes1, Set<String> pointCodes2, Set<String> pointCodes3, Set<String> pointCodes4);
}

View File

@@ -44,40 +44,27 @@
</select>
<select id="getTaskList" resultType="org.nl.b_lms.sch.task.dao.SchBaseTask">
SELECT
point_code1,
point_code2,
point_code3,
point_code4
FROM
SCH_BASE_TASK
SELECT point_code1, point_code2, point_code3, point_code4
FROM SCH_BASE_TASK
WHERE
(
<if test="point_code1 != null">
point_code1 IN
<foreach item="code" collection="point_code1" open="(" separator="," close=")">
#{code}
</foreach>
</if>
<if test="point_code2 != null">
OR point_code2 IN
<foreach item="code" collection="point_code2" open="(" separator="," close=")">
#{code}
</foreach>
</if>
<if test="point_code3 != null">
OR point_code3 IN
<foreach item="code" collection="point_code3" open="(" separator="," close=")">
#{code}
</foreach>
</if>
<if test="point_code4 != null">
OR point_code4 IN
<foreach item="code" collection="point_code4" open="(" separator="," close=")">
#{code}
</foreach>
</if>
)
<trim prefix="(" suffix=")" prefixOverrides="OR">
<if test="pointCodes1 != null and pointCodes1.size() > 0">
OR point_code1 IN
<foreach item="code" collection="pointCodes1" open="(" separator="," close=")"> #{code} </foreach>
</if>
<if test="pointCodes2 != null and pointCodes2.size() > 0">
OR point_code2 IN
<foreach item="code" collection="pointCodes2" open="(" separator="," close=")"> #{code} </foreach>
</if>
<if test="pointCodes3 != null and pointCodes3.size() > 0">
OR point_code3 IN
<foreach item="code" collection="pointCodes3" open="(" separator="," close=")"> #{code} </foreach>
</if>
<if test="pointCodes4 != null and pointCodes4.size() > 0">
OR point_code4 IN
<foreach item="code" collection="pointCodes4" open="(" separator="," close=")"> #{code} </foreach>
</if>
</trim>
AND (task_status <![CDATA[ < ]]> '07')
AND (is_delete = '0')
</select>

View File

@@ -165,32 +165,17 @@ public class BstIvtPackageinfoivtServiceImpl extends ServiceImpl<BstIvtPackagein
}
BstIvtPackageinfoivt newPoint;
String taskPointType = null;
//空载具缓存位特殊二次分配逻辑:先判断是否有执行中的行架任务,有就分配行架搬运起点,无就按顺序排序分配点位
//空载具缓存位特殊二次分配逻辑:先判断是否有执行中的行架任务或补空载具任务,如未完成,不分配点位
if (baseTask.getTask_type().equals(PackageInfoIvtEnum.TASK_TYPE.code("补空(管制区->空载具缓存位)")) ||
baseTask.getTask_type().equals(PackageInfoIvtEnum.TASK_TYPE.code("补空(待检区->空载具缓存位)"))
) {
//是否有执行中的行架任务,有就分配行架搬运起点
List<SchBaseTask> taskList = taskService.list(new LambdaQueryWrapper<SchBaseTask>()
.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 (StringUtils.isBlank(taskList.get(0).getRequest_param())) {
throw new BadRequestException("请等待桁架任务取空载具动作执行完成,再分配空载具点位");
} else {
if (!taskList.get(0).getRequest_param().equals(PackageInfoIvtEnum.TASK_ACTION_TYPE.code("取货完成"))) {
throw new BadRequestException("请等待桁架任务取空载具动作执行完成,再分配空载具点位");
}
}
}
//检查是否满足二次分配条件
checkTaskInfo();
newPoint = checkIvtSBlock(baseTask);
} else {
if (baseTask.getTask_type().equals(PackageInfoIvtEnum.TASK_TYPE.code("满轴缓存位->待检区"))) {
//放满轴任务不判断终点是否有任务
taskPointType = PackageInfoIvtEnum.TASK_POINT_TYPE.code("四个点任务放货");
taskPointType = PackageInfoIvtEnum.TASK_POINT_TYPE.code("四个点任务分配");
}
newPoint = getBstIvtPackageinfoivt(actionType, taskPointType, baseTask);
}
@@ -243,21 +228,41 @@ public class BstIvtPackageinfoivtServiceImpl extends ServiceImpl<BstIvtPackagein
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, null, null);
} 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(null, pointIds, null, pointIds);
} 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("四个点任务放货"))) {
pointSets = taskList.stream()
.flatMap(task -> Stream.of(
task.getPoint_code1(),
task.getPoint_code3()
))
.filter(Objects::nonNull)
.collect(Collectors.toSet());
} else if (pointCode.equals(PackageInfoIvtEnum.TASK_POINT_TYPE.code("四个点任务分配"))) {
pointSets = taskList.stream()
.flatMap(task -> Stream.of(
task.getPoint_code1()
))
.filter(Objects::nonNull)
.collect(Collectors.toSet());
} else if (pointCode.equals(PackageInfoIvtEnum.TASK_POINT_TYPE.code("空载具放货"))) {
pointSets = taskList.stream()
.flatMap(task -> Stream.of(
task.getPoint_code2(),
task.getPoint_code4()
))
.filter(Objects::nonNull)
.collect(Collectors.toSet());
} else if (pointCode.equals(PackageInfoIvtEnum.TASK_POINT_TYPE.code("取货任务")) || pointCode.equals(PackageInfoIvtEnum.TASK_POINT_TYPE.code("放货任务"))) {
pointSets = taskList.stream()
.flatMap(task -> Stream.of(
@@ -277,6 +282,7 @@ public class BstIvtPackageinfoivtServiceImpl extends ServiceImpl<BstIvtPackagein
.filter(Objects::nonNull)
.collect(Collectors.toSet());
}
//符合条件的库存点位过滤掉已存在任务的点位
List<BstIvtPackageinfoivt> ivtList = packageinfoivtList.stream()
.filter(p -> !pointSets.contains(p.getPoint_code()))
.collect(Collectors.toList());
@@ -302,6 +308,42 @@ public class BstIvtPackageinfoivtServiceImpl extends ServiceImpl<BstIvtPackagein
}
}
/**
* 检查是否满足二次分配条件
*/
private void checkTaskInfo() {
List<SchBaseTask> taskList1 = taskService.list(new LambdaQueryWrapper<SchBaseTask>()
.lt(SchBaseTask::getTask_status, TaskStatusEnum.FINISHED.getCode())
.and(
r -> r.eq(SchBaseTask::getTask_type, PackageInfoIvtEnum.TASK_TYPE.code("补空(管制区->空载具缓存位)"))
.or()
.eq(SchBaseTask::getTask_type, PackageInfoIvtEnum.TASK_TYPE.code("补空(待检区->空载具缓存位)")
)));
if (CollectionUtils.isNotEmpty(taskList1)) {
//存在未完成的已分配的送空载具任务,需要等这个任务完成再分配
if (taskList1.stream().anyMatch(r -> !r.getPoint_code2().equals("ZXQ_01_1"))) {
throw new BadRequestException("请等待补空载具任务执行完成,再分配空载具点位");
}
}
//是否有执行中的行架任务,有就分配行架搬运起点
List<SchBaseTask> taskList2 = taskService.list(new LambdaQueryWrapper<SchBaseTask>()
.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(taskList2)) {
if (StringUtils.isBlank(taskList2.get(0).getRequest_param())) {
throw new BadRequestException("请等待桁架任务取空载具动作执行完成,再分配空载具点位");
} else {
if (!taskList2.get(0).getRequest_param().equals(PackageInfoIvtEnum.TASK_ACTION_TYPE.code("取货完成"))) {
throw new BadRequestException("请等待桁架任务取空载具动作执行完成,再分配空载具点位");
}
}
}
}
/**
* 根据点位类型查询库存

View File

@@ -41,7 +41,7 @@ public enum PackageInfoIvtEnum {
//起点终点类型
TASK_POINT_TYPE(MapOf.of("取货任务", "1", "放货任务", "2", "取货分配", "3", "放货分配", "4", "取货任务取货分配", "5", "放货任务放货分配", "6", "四个点任务放货", "7")),
TASK_POINT_TYPE(MapOf.of("取货任务", "1", "放货任务", "2", "取货分配", "3", "放货分配", "4", "取货任务取货分配", "5", "放货任务放货分配", "6", "四个点任务放货", "7","空载具放货", "8", "四个点任务分配", "9")),
//等待点类型
WAIT_POINT_TYPE(MapOf.of("满轴区等待点", "1", "待检区等待点", "2")),