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

View File

@@ -165,32 +165,17 @@ public class BstIvtPackageinfoivtServiceImpl extends ServiceImpl<BstIvtPackagein
} }
BstIvtPackageinfoivt newPoint; BstIvtPackageinfoivt newPoint;
String taskPointType = null; String taskPointType = null;
//空载具缓存位特殊二次分配逻辑:先判断是否有执行中的行架任务,有就分配行架搬运起点,无就按顺序排序分配点位 //空载具缓存位特殊二次分配逻辑:先判断是否有执行中的行架任务或补空载具任务,如未完成,不分配点位
if (baseTask.getTask_type().equals(PackageInfoIvtEnum.TASK_TYPE.code("补空(管制区->空载具缓存位)")) || if (baseTask.getTask_type().equals(PackageInfoIvtEnum.TASK_TYPE.code("补空(管制区->空载具缓存位)")) ||
baseTask.getTask_type().equals(PackageInfoIvtEnum.TASK_TYPE.code("补空(待检区->空载具缓存位)")) baseTask.getTask_type().equals(PackageInfoIvtEnum.TASK_TYPE.code("补空(待检区->空载具缓存位)"))
) { ) {
//是否有执行中的行架任务,有就分配行架搬运起点 //检查是否满足二次分配条件
List<SchBaseTask> taskList = taskService.list(new LambdaQueryWrapper<SchBaseTask>() checkTaskInfo();
.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("请等待桁架任务取空载具动作执行完成,再分配空载具点位");
}
}
}
newPoint = checkIvtSBlock(baseTask); newPoint = checkIvtSBlock(baseTask);
} else { } else {
if (baseTask.getTask_type().equals(PackageInfoIvtEnum.TASK_TYPE.code("满轴缓存位->待检区"))) { 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); newPoint = getBstIvtPackageinfoivt(actionType, taskPointType, baseTask);
} }
@@ -243,21 +228,41 @@ public class BstIvtPackageinfoivtServiceImpl extends ServiceImpl<BstIvtPackagein
taskList = bstIvtPackageinfoivtMapper.getTaskList(pointIds, pointIds, pointIds, null); taskList = bstIvtPackageinfoivtMapper.getTaskList(pointIds, pointIds, pointIds, null);
} else if (pointCode.equals(PackageInfoIvtEnum.TASK_POINT_TYPE.code("放货分配"))) { } else if (pointCode.equals(PackageInfoIvtEnum.TASK_POINT_TYPE.code("放货分配"))) {
taskList = bstIvtPackageinfoivtMapper.getTaskList(pointIds, pointIds, null, pointIds); 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("四个点任务放货"))) { } else if (pointCode.equals(PackageInfoIvtEnum.TASK_POINT_TYPE.code("四个点任务放货"))) {
taskList = bstIvtPackageinfoivtMapper.getTaskList(pointIds, null, pointIds, null); 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("取货任务取货分配"))) { } else if (pointCode.equals(PackageInfoIvtEnum.TASK_POINT_TYPE.code("取货任务取货分配"))) {
taskList = bstIvtPackageinfoivtMapper.getTaskList(pointIds, pointIds, pointIds, pointIds); taskList = bstIvtPackageinfoivtMapper.getTaskList(pointIds, pointIds, pointIds, pointIds);
} else { } else {
return packageinfoivtList; return packageinfoivtList;
} }
// 过滤未完成任务的任务 // 未完成的任务点位汇集
if (pointCode.equals(PackageInfoIvtEnum.TASK_POINT_TYPE.code("四个点任务放货"))) { 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() pointSets = taskList.stream()
.flatMap(task -> Stream.of( .flatMap(task -> Stream.of(
task.getPoint_code1() task.getPoint_code1()
)) ))
.filter(Objects::nonNull) .filter(Objects::nonNull)
.collect(Collectors.toSet()); .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("放货任务"))) { } else if (pointCode.equals(PackageInfoIvtEnum.TASK_POINT_TYPE.code("取货任务")) || pointCode.equals(PackageInfoIvtEnum.TASK_POINT_TYPE.code("放货任务"))) {
pointSets = taskList.stream() pointSets = taskList.stream()
.flatMap(task -> Stream.of( .flatMap(task -> Stream.of(
@@ -277,6 +282,7 @@ public class BstIvtPackageinfoivtServiceImpl extends ServiceImpl<BstIvtPackagein
.filter(Objects::nonNull) .filter(Objects::nonNull)
.collect(Collectors.toSet()); .collect(Collectors.toSet());
} }
//符合条件的库存点位过滤掉已存在任务的点位
List<BstIvtPackageinfoivt> ivtList = packageinfoivtList.stream() List<BstIvtPackageinfoivt> ivtList = packageinfoivtList.stream()
.filter(p -> !pointSets.contains(p.getPoint_code())) .filter(p -> !pointSets.contains(p.getPoint_code()))
.collect(Collectors.toList()); .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")), WAIT_POINT_TYPE(MapOf.of("满轴区等待点", "1", "待检区等待点", "2")),