fix:增加二次分配任务完成情况校验
This commit is contained in:
@@ -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);
|
||||
|
||||
|
||||
}
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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("请等待桁架任务取空载具动作执行完成,再分配空载具点位");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 根据点位类型查询库存
|
||||
|
||||
@@ -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")),
|
||||
|
||||
Reference in New Issue
Block a user