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>
|
||||||
|
|
||||||
<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>
|
||||||
|
|||||||
@@ -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("请等待桁架任务取空载具动作执行完成,再分配空载具点位");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 根据点位类型查询库存
|
* 根据点位类型查询库存
|
||||||
|
|||||||
@@ -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")),
|
||||||
|
|||||||
Reference in New Issue
Block a user