fix:增加二次分配任务重复校验

This commit is contained in:
2024-06-28 01:30:03 +08:00
parent a714b8e2d6
commit a9ef3d8f69
12 changed files with 467 additions and 185 deletions

View File

@@ -7,6 +7,7 @@ import org.nl.b_lms.sch.task.dao.SchBaseTask;
import java.util.List;
import java.util.Map;
import java.util.Set;
/**
* {@code @Description:} 装箱区点位库存表(BstIvtPackageinfoivt)数据持久层
@@ -28,4 +29,10 @@ public interface BstIvtPackageinfoivtMapper extends BaseMapper<BstIvtPackageinfo
Integer getZxqTaskCount(String groupId);
/**
* 获取点位任务数量
*/
List<SchBaseTask> getTaskList(Set<String> point_code1, Set<String> point_code2, Set<String> point_code3, Set<String> point_code4);
}

View File

@@ -2,26 +2,84 @@
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="org.nl.b_lms.sch.point.dao.mapper.BstIvtPackageinfoivtMapper">
<select id="getPointTaskCount" resultType="java.util.Map">
SELECT
t.point_code2,
COUNT( t.point_code2 ) AS count
FROM
sch_base_task t
WHERE
t.task_type ='010704'
AND t.create_time >= DATE_FORMAT(DATE_SUB(CURDATE(), INTERVAL 1 DAY), '%Y-%m-%d %H:%i:%s')
AND t.task_status <![CDATA[ < ]]> '07'
GROUP BY t.point_code2
SELECT t.point_code2,
COUNT(t.point_code2) AS count
FROM sch_base_task t
WHERE t.task_type = '010704'
AND t.create_time >= DATE_FORMAT(DATE_SUB(CURDATE(), INTERVAL 1 DAY), '%Y-%m-%d %H:%i:%s')
AND t.task_status <![CDATA[ < ]]> '07'
GROUP BY t.point_code2
</select>
<select id="getZxqTaskCount" resultType="java.lang.Integer">
SELECT
COUNT( 1 )
FROM
sch_base_task t
WHERE
t.task_type = '010908'
AND t.vehicle_code2 = #{groupId}
AND t.task_status <![CDATA[ < ]]> '07'
AND t.create_time >= DATE_FORMAT(DATE_SUB( CURDATE(), INTERVAL 1 DAY ),'%Y-%m-%d %H:%i:%s')
SELECT COUNT(1)
FROM sch_base_task t
WHERE t.task_type = '010908'
AND t.vehicle_code2 = #{groupId}
AND t.task_status <![CDATA[ < ]]> '07'
AND t.create_time >= DATE_FORMAT(DATE_SUB(CURDATE(), INTERVAL 1 DAY), '%Y-%m-%d %H:%i:%s')
</select>
<select id="getTaskList1" resultType="org.nl.b_lms.sch.task.dao.SchBaseTask">
SELECT
TASK_CODE
FROM
SCH_BASE_TASK
WHERE
(
<if test="point_code1 != null">
point_code1 IN #{point_code1}
</if>
<if test="point_code2 != null">
OR point_code2 IN #{point_code2}
</if>
<if test="point_code3 != null">
OR point_code3 IN #{point_code3}
</if>
<if test="point_code4 != null">
OR point_code4 IN #{point_code4}
</if>
)
AND (task_status <![CDATA[ < ]]> '07')
</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
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>
)
AND (task_status <![CDATA[ < ]]> '07')
</select>
</mapper>

View File

@@ -32,12 +32,12 @@ import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import java.math.BigDecimal;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.*;
import java.util.concurrent.TimeUnit;
import java.util.stream.Collectors;
import java.util.stream.Stream;
import static java.util.Collections.emptyList;
/**
@@ -57,6 +57,8 @@ public class BstIvtPackageinfoivtServiceImpl extends ServiceImpl<BstIvtPackagein
@Resource
private BstIvtPackageinfoivtMapper bstIvtPackageinfoivtMapper;
@Resource
private IbstIvtPackageinfoivtService packageinfoivtService;
/**
* 查询数据分页
@@ -77,54 +79,44 @@ public class BstIvtPackageinfoivtServiceImpl extends ServiceImpl<BstIvtPackagein
.map(BstIvtPackageinfoivt::getPoint_code)
.collect(Collectors.toSet());
if (CollectionUtils.isEmpty(pointIds)) {
return null;
return Collections.emptyList();
}
SFunction<SchBaseTask, String> pointCodeType1;
SFunction<SchBaseTask, String> pointCodeType2 = null;
if (pointCode.equals(PackageInfoIvtEnum.TASK_POINT_TYPE.code("取货任务"))) {
pointCodeType1 = SchBaseTask::getPoint_code1;
} else if (pointCode.equals(PackageInfoIvtEnum.TASK_POINT_TYPE.code("放货任务"))) {
pointCodeType1 = SchBaseTask::getPoint_code2;
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("取货分配"))) {
pointCodeType1 = SchBaseTask::getPoint_code3;
taskList = bstIvtPackageinfoivtMapper.getTaskList(pointIds, pointIds, pointIds, null);
} else if (pointCode.equals(PackageInfoIvtEnum.TASK_POINT_TYPE.code("放货分配"))) {
pointCodeType1 = SchBaseTask::getPoint_code4;
} else if (pointCode.equals(PackageInfoIvtEnum.TASK_POINT_TYPE.code("取货任务取货分配"))) {
pointCodeType1 = SchBaseTask::getPoint_code1;
pointCodeType2 = SchBaseTask::getPoint_code3;
taskList = bstIvtPackageinfoivtMapper.getTaskList(pointIds, pointIds, null, pointIds);
} else {
pointCodeType1 = SchBaseTask::getPoint_code2;
pointCodeType2 = SchBaseTask::getPoint_code4;
taskList = bstIvtPackageinfoivtMapper.getTaskList(pointIds, pointIds, pointIds, pointIds);
}
// 查询未完成任务
LambdaQueryWrapper<SchBaseTask> taskQueryWrapper = new LambdaQueryWrapper<SchBaseTask>()
.lt(SchBaseTask::getTask_status, TaskStatusEnum.FINISHED.getCode())
.in(pointCodeType1, pointIds);
if (pointCodeType2 != null) {
taskQueryWrapper = new LambdaQueryWrapper<SchBaseTask>()
.lt(SchBaseTask::getTask_status, TaskStatusEnum.FINISHED.getCode())
.in(pointCodeType1, pointIds).in(pointCodeType2, pointIds);
}
if (taskType != null && !taskType.isEmpty()) {
taskQueryWrapper.eq(SchBaseTask::getTask_type, taskType);
}
List<SchBaseTask> taskList = taskService.list(taskQueryWrapper);
SFunction<SchBaseTask, String> finalPointCodeType2 = pointCodeType2;
Set<String> taskPointCodes = taskList.stream()
.flatMap(task -> {
Set<String> pointCodeTypes = new HashSet<>();
pointCodeTypes.add(pointCodeType1.apply(task));
if (finalPointCodeType2 != null) {
pointCodeTypes.add(finalPointCodeType2.apply(task));
}
return pointCodeTypes.stream();
})
.collect(Collectors.toSet());
// 过滤未完成任务的任务
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()
// 对每个任务应用映射操作将point_code字段添加到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(packageInfo -> !taskPointCodes.contains(packageInfo.getPoint_code()))
.filter(p -> !pointSets.contains(p.getPoint_code()))
.collect(Collectors.toList());
}
private List<BstIvtPackageinfoivt> getBstIvtPackageinfoivts(String ivtType, String ivtStatus, String sortType) {
@@ -229,7 +221,7 @@ public class BstIvtPackageinfoivtServiceImpl extends ServiceImpl<BstIvtPackagein
} else {
log.info("一楼装箱区点位二次分配接口异常,正在分配中!");
result.put("status", HttpStatus.BAD_REQUEST.value());
result.put("message", "二次分配点位正在分配中!");
result.put("message", "二次分配点位正在分配中,已锁住!");
}
} finally {
if (tryLock) {
@@ -247,6 +239,7 @@ public class BstIvtPackageinfoivtServiceImpl extends ServiceImpl<BstIvtPackagein
* @return 新的点位
*/
private String getNewPoint(String taskCode, String actionType) {
String taskPointType = null;
//执行中的任务
SchBaseTask baseTask = taskService.getOne(new LambdaQueryWrapper<SchBaseTask>()
.eq(SchBaseTask::getTask_code, taskCode)
@@ -254,17 +247,20 @@ public class BstIvtPackageinfoivtServiceImpl extends ServiceImpl<BstIvtPackagein
if (baseTask == null) {
throw new BadRequestException("该任务未执行或不存在!");
}
//1取货任务2放货任务
LambdaQueryWrapper<BstIvtPackageinfoivt> queryWrapper = new LambdaQueryWrapper<>();
if (PackageInfoIvtEnum.TASK_ACTION_TYPE.code("取货分配").equals(actionType)) {
queryWrapper.eq(BstIvtPackageinfoivt::getPoint_code, baseTask.getPoint_code3());
taskPointType = PackageInfoIvtEnum.TASK_POINT_TYPE.code("取货任务");
} else if (PackageInfoIvtEnum.TASK_ACTION_TYPE.code("放货分配").equals(actionType)) {
queryWrapper.eq(BstIvtPackageinfoivt::getPoint_code, baseTask.getPoint_code4());
taskPointType = PackageInfoIvtEnum.TASK_POINT_TYPE.code("放货任务");
}
BstIvtPackageinfoivt bstIvtPackageinfoivt = bstIvtPackageinfoivtMapper.selectOne(queryWrapper);
//根据任务类型返回点位分配规则
BstIvtPackageinfoivt ivtInfo = getIvtInfoFromRegion(baseTask.getTask_type(), actionType);
List<BstIvtPackageinfoivt> newPointList = getBstIvtPackageinfoivts(bstIvtPackageinfoivt.getPoint_status(), ivtInfo.getIvt_status(), ivtInfo.getSort_seq().toString());
List<BstIvtPackageinfoivt> newPointList = packageinfoivtService.checkEndPointTask(bstIvtPackageinfoivt.getPoint_status(), ivtInfo.getIvt_status(), taskPointType, ivtInfo.getSort_seq().toString(), "");
if (CollectionUtils.isEmpty(newPointList)) {
throw new BadRequestException("暂无点位资源!");
}
@@ -389,7 +385,7 @@ public class BstIvtPackageinfoivtServiceImpl extends ServiceImpl<BstIvtPackagein
if (actionType.equals(PackageInfoIvtEnum.TASK_ACTION_TYPE.code("取货完成"))) {
//清空起点库存状态
bstIvtPackageinfoivtMapper.update(null, new UpdateWrapper<BstIvtPackageinfoivt>()
.setSql("ivt_status = null, container_name = '0'")
.setSql("ivt_status = '0', container_name = null")
.eq("point_code", baseTask.getPoint_code1()));
}

View File

@@ -104,7 +104,7 @@ public class DjqTask extends AbstractAcsTask {
//1.更改任务状态为完成
schBaseTask.setTask_status(TaskStatusEnum.FINISHED.getCode());
//2.改变起点点位状态,二次分配,取货完成就改起点库存
packageinfoivtService.update(new UpdateWrapper<BstIvtPackageinfoivt>().set("ivt_status", PackageInfoIvtEnum.IVT_STATUS.code("")).set("container_name", null).eq("point_code", schBaseTask.getPoint_code1()));
//packageinfoivtService.update(new UpdateWrapper<BstIvtPackageinfoivt>().set("ivt_status", PackageInfoIvtEnum.IVT_STATUS.code("空")).set("container_name", null).eq("point_code", schBaseTask.getPoint_code1()));
//3更新库存记录
//todo 暂时改为质检合格品
packageinfoivtService.update(new UpdateWrapper<BstIvtPackageinfoivt>().set("ivt_status", PackageInfoIvtEnum.IVT_STATUS.code("有子卷")).set("container_name", schBaseTask.getVehicle_code()).eq("point_code", schBaseTask.getPoint_code2()));

View File

@@ -28,10 +28,37 @@ public class AutoSendDjqToGzq {
//待检区->管制区agv自动搬运任务
public void run() {
//this.sendDjqToGzq();
this.sendDjqToGzq();
}
/**
* 普通任务
*/
void sendDjqToGzq() {
//待检区有管制品且过滤未完成任务
List<BstIvtPackageinfoivt> djqPackageinfoivtList = packageinfoivtService.checkEndPointTask(PackageInfoIvtEnum.POINT_STATUS.code("待检区"), PackageInfoIvtEnum.IVT_STATUS.code("管制品"), PackageInfoIvtEnum.TASK_POINT_TYPE.code("取货任务"), PackageInfoIvtEnum.SORT_TYPE.code("升序"), "");
if (CollectionUtils.isEmpty(djqPackageinfoivtList)) {
return;
}
//管制区有空位且过滤未完成任务
List<BstIvtPackageinfoivt> gzqPackageinfoivtList = packageinfoivtService.checkEndPointTask(PackageInfoIvtEnum.POINT_STATUS.code("管制区"), PackageInfoIvtEnum.IVT_STATUS.code(""), PackageInfoIvtEnum.TASK_POINT_TYPE.code("放货任务"), PackageInfoIvtEnum.SORT_TYPE.code("降序"), "");
if (CollectionUtils.isEmpty(gzqPackageinfoivtList)) {
return;
}
JSONObject task = new JSONObject();
task.put("task_type", PackageInfoIvtEnum.TASK_TYPE.code("待检区->管制区"));
task.put("vehicle_code", djqPackageinfoivtList.get(0).getContainer_name());
task.put("point_code1", djqPackageinfoivtList.get(0).getPoint_code());
task.put("point_code2", gzqPackageinfoivtList.get(0).getPoint_code());
gzqTask.createTask(task);
}
/**
* 二次分配任务
*/
void sendDjqToGzq1() {
JSONObject task = new JSONObject();
String pointCode1;
//待检区有管制品且过滤未完成任务
@@ -45,9 +72,9 @@ public class AutoSendDjqToGzq {
pointCode1 = notNeedAllocation.get(0).getPoint_code();
task.put("vehicle_code2", PackageInfoIvtEnum.AGV_ACTION_TYPE.code("放货二次分配"));
} else {
pointCode1 = packageinfoivtService.getWaitPoint(djqPackageinfoivtList.get(0).getBlock(), djqPackageinfoivtList.get(0).getWait_point_type());
task.put("vehicle_code2", PackageInfoIvtEnum.AGV_ACTION_TYPE.code("取放货二次分配"));
task.put("point_code3", djqPackageinfoivtList.get(0).getPoint_code());
pointCode1 = packageinfoivtService.getWaitPoint(djqPackageinfoivtList.get(0).getBlock(), djqPackageinfoivtList.get(0).getWait_point_type());
task.put("vehicle_code2", PackageInfoIvtEnum.AGV_ACTION_TYPE.code("取放货二次分配"));
task.put("point_code3", djqPackageinfoivtList.get(0).getPoint_code());
}
List<BstIvtPackageinfoivt> gzqPackageinfoivtList = packageinfoivtService.checkEndPointTask(PackageInfoIvtEnum.POINT_STATUS.code("管制区"), PackageInfoIvtEnum.IVT_STATUS.code(""), PackageInfoIvtEnum.TASK_POINT_TYPE.code("放货分配"), "", "");
if (pointCode1 != null && CollectionUtils.isNotEmpty(gzqPackageinfoivtList)) {

View File

@@ -28,10 +28,39 @@ public class AutoSendGzqToDjq {
//管制区->待检区agv自动搬运任务
public void run() {
//this.sendGzqToDjq();
this.sendGzqToDjq();
}
/**
* 普通任务
*/
void sendGzqToDjq() {
//管制区有合格品且过滤未完成任务
List<BstIvtPackageinfoivt> gzqPackageinfoivtList = packageinfoivtService.checkEndPointTask(PackageInfoIvtEnum.POINT_STATUS.code("管制区"), PackageInfoIvtEnum.IVT_STATUS.code("合格品"), PackageInfoIvtEnum.TASK_POINT_TYPE.code("取货任务"), PackageInfoIvtEnum.SORT_TYPE.code("降序"), "");
if (CollectionUtils.isEmpty(gzqPackageinfoivtList)) {
return;
}
//待检区有空位且过滤未完成任务
List<BstIvtPackageinfoivt> djqPackageinfoivtList = packageinfoivtService.checkEndPointTask(PackageInfoIvtEnum.POINT_STATUS.code("待检区"), PackageInfoIvtEnum.IVT_STATUS.code(""), PackageInfoIvtEnum.TASK_POINT_TYPE.code("放货任务"), PackageInfoIvtEnum.SORT_TYPE.code("升序"), "");
if (CollectionUtils.isEmpty(djqPackageinfoivtList)) {
return;
}
JSONObject task = new JSONObject();
task.put("task_type", PackageInfoIvtEnum.TASK_TYPE.code("管制区->待检区"));
task.put("vehicle_code", gzqPackageinfoivtList.get(0).getContainer_name());
task.put("point_code1", gzqPackageinfoivtList.get(0).getPoint_code());
task.put("point_code2", djqPackageinfoivtList.get(0).getPoint_code());
djqTask.createTask(task);
}
/**
* 二次分配逻辑
*/
void sendGzqToDjq1() {
JSONObject task = new JSONObject();
String pointCode2;
//管制区有合格品且过滤未完成任务

View File

@@ -28,27 +28,62 @@ public class AutoSendMzToDjq {
//满轴->待检区agv自动搬运任务
public void run() {
this.sendMzqToDjq();
this.sendMzqToDjq2();
}
/**
* 普通任务
*/
void sendMzqToDjq() {
JSONObject toDjqTask = new JSONObject();
//满轴有子卷且没有未完成任务
List<BstIvtPackageinfoivt> bstIvtPackageinfoivtList = packageinfoivtService.checkEndPointTask(PackageInfoIvtEnum.POINT_STATUS.code("满轴缓存位"), PackageInfoIvtEnum.IVT_STATUS.code("有子卷"), "1", "2", "");
if (CollectionUtils.isEmpty(bstIvtPackageinfoivtList)) {
return;
}
List<BstIvtPackageinfoivt> djqPackageinfoivtList = packageinfoivtService.checkEndPointTask(PackageInfoIvtEnum.POINT_STATUS.code("待检区"), PackageInfoIvtEnum.IVT_STATUS.code(""), "2", "1", "");
if (CollectionUtils.isNotEmpty(djqPackageinfoivtList)) {
toDjqTask.put("vehicle_code", bstIvtPackageinfoivtList.get(0).getContainer_name());
toDjqTask.put("point_code1", bstIvtPackageinfoivtList.get(0).getPoint_code());
toDjqTask.put("task_type", PackageInfoIvtEnum.TASK_TYPE.code("满轴缓存位->待检区"));
toDjqTask.put("point_code2", djqPackageinfoivtList.get(0).getPoint_code());
djqTask.createTask(toDjqTask);
if (CollectionUtils.isEmpty(djqPackageinfoivtList)) {
return;
}
JSONObject toDjqTask = new JSONObject();
toDjqTask.put("vehicle_code", bstIvtPackageinfoivtList.get(0).getContainer_name());
toDjqTask.put("point_code1", bstIvtPackageinfoivtList.get(0).getPoint_code());
toDjqTask.put("task_type", PackageInfoIvtEnum.TASK_TYPE.code("满轴缓存位->待检区"));
toDjqTask.put("point_code2", djqPackageinfoivtList.get(0).getPoint_code());
djqTask.createTask(toDjqTask);
}
void sendMzqToDjq2() {
try {
String pointCode2 = null;
JSONObject task = new JSONObject();
//满轴有子卷且过滤未完成任务
List<BstIvtPackageinfoivt> mzqPackageinfoivtList = packageinfoivtService.checkEndPointTask(PackageInfoIvtEnum.POINT_STATUS.code("满轴缓存位"), PackageInfoIvtEnum.IVT_STATUS.code("有子卷"), PackageInfoIvtEnum.TASK_POINT_TYPE.code("取货分配"), PackageInfoIvtEnum.SORT_TYPE.code("降序"), "");
if (CollectionUtils.isEmpty(mzqPackageinfoivtList)) {
return;
}
//待检区有空位且过滤未完成任务
List<BstIvtPackageinfoivt> djqPackageinfoivtList = packageinfoivtService.checkEndPointTask(PackageInfoIvtEnum.POINT_STATUS.code("待检区"), PackageInfoIvtEnum.IVT_STATUS.code(""), PackageInfoIvtEnum.TASK_POINT_TYPE.code("放货任务"), PackageInfoIvtEnum.SORT_TYPE.code("降序"), "");
if (CollectionUtils.isEmpty(djqPackageinfoivtList)) {
return;
}
pointCode2 = djqPackageinfoivtList.get(0).getPoint_code();
task.put("vehicle_code2", PackageInfoIvtEnum.AGV_ACTION_TYPE.code("取货二次分配"));
task.put("task_type", PackageInfoIvtEnum.TASK_TYPE.code("满轴缓存位->待检区"));
task.put("vehicle_code", mzqPackageinfoivtList.get(0).getContainer_name());
task.put("point_code1", packageinfoivtService.getWaitPoint(mzqPackageinfoivtList.get(0).getBlock(), mzqPackageinfoivtList.get(0).getWait_point_type()));
task.put("point_code3", mzqPackageinfoivtList.get(0).getPoint_code());
task.put("point_code2", pointCode2);
djqTask.createTask(task);
} catch (Exception ex) {
log.error("sendMzqToDjq1 error:{}", ex.getMessage());
}
}
/**
* 二次分配任务
*/
void sendMzqToDjq1() {
try {
String pointCode2 = null;
@@ -73,15 +108,13 @@ public class AutoSendMzToDjq {
task.put("vehicle_code2", PackageInfoIvtEnum.AGV_ACTION_TYPE.code("取放货二次分配"));
task.put("point_code4", djqPackageinfoivtList.get(0).getPoint_code());
}
if (pointCode2 != null) {
task.put("task_type", PackageInfoIvtEnum.TASK_TYPE.code("满轴缓存位->待检区"));
task.put("vehicle_code", mzqPackageinfoivtList.get(0).getContainer_name());
//需要二次分配,起点分配等待点
task.put("point_code1", packageinfoivtService.getWaitPoint(mzqPackageinfoivtList.get(0).getBlock(), mzqPackageinfoivtList.get(0).getWait_point_type()));
task.put("point_code3", mzqPackageinfoivtList.get(0).getPoint_code());
task.put("point_code2", pointCode2);
djqTask.createTask(task);
}
task.put("vehicle_code", mzqPackageinfoivtList.get(0).getContainer_name());
//需要二次分配,起点分配等待点
task.put("point_code1", packageinfoivtService.getWaitPoint(mzqPackageinfoivtList.get(0).getBlock(), mzqPackageinfoivtList.get(0).getWait_point_type()));
task.put("point_code3", mzqPackageinfoivtList.get(0).getPoint_code());
task.put("point_code2", pointCode2);
djqTask.createTask(task);
} catch (Exception ex) {
log.error("sendMzqToDjq1 error:{}", ex.getMessage());
}

View File

@@ -36,6 +36,9 @@ public class AutoSendToZxq {
this.sendDjqToZxq();
}
/**
* 普通任务
*/
void sendDjqToZxq() {
JSONObject toDjqTask = new JSONObject();
//待检区有子卷且过滤未完成任务
@@ -44,16 +47,21 @@ public class AutoSendToZxq {
return;
}
List<BstIvtPackageinfoivt> zxqPackageinfoivtList = packageinfoivtService.checkEndPointTask(PackageInfoIvtEnum.POINT_STATUS.code("装箱区"), PackageInfoIvtEnum.IVT_STATUS.code(""), PackageInfoIvtEnum.TASK_POINT_TYPE.code("放货任务"), "", "");
if (CollectionUtils.isNotEmpty(zxqPackageinfoivtList)) {
toDjqTask.put("vehicle_code", djqPackageinfoivtList.get(0).getContainer_name());
toDjqTask.put("point_code1", djqPackageinfoivtList.get(0).getPoint_code());
toDjqTask.put("task_type", PackageInfoIvtEnum.TASK_TYPE.code("待检区->装箱区"));
toDjqTask.put("point_code2", zxqPackageinfoivtList.get(0).getPoint_code());
zxqTask.createTask(toDjqTask);
if (CollectionUtils.isEmpty(zxqPackageinfoivtList)) {
return;
}
toDjqTask.put("vehicle_code", djqPackageinfoivtList.get(0).getContainer_name());
toDjqTask.put("point_code1", djqPackageinfoivtList.get(0).getPoint_code());
toDjqTask.put("task_type", PackageInfoIvtEnum.TASK_TYPE.code("待检区->装箱区"));
toDjqTask.put("point_code2", zxqPackageinfoivtList.get(0).getPoint_code());
zxqTask.createTask(toDjqTask);
}
/**
* 二次分配任务
*/
public void sendDjqToZxq1() {
//装箱区有空位,去待检区消费合格品子卷
List<BstIvtPackageinfoivt> bstIvtPackageinfoivtList = packageinfoivtService.checkEndPointTask(

View File

@@ -31,14 +31,51 @@ public class AutoSendVehicleToDjq {
@Resource
private IbstIvtPackageinfoivtService packageinfoivtService;
//装箱区->待检区或管制区补空载具
public void run() {
//this.sendVehicleToDjqOrGzq();
this.sendVehicleToDjqOrGzq1();
}
public void sendVehicleToDjqOrGzq1() {
//存在装箱区有空载具的点位
String pointCode2 = null;
JSONObject task = new JSONObject();
List<BstIvtPackageinfoivt> zxqIvtList = packageinfoivtService.checkEndPointTask(PackageInfoIvtEnum.POINT_STATUS.code("装箱区"), PackageInfoIvtEnum.IVT_STATUS.code("空载具"), PackageInfoIvtEnum.TASK_POINT_TYPE.code("取货任务取货分配"), "", "");
if (CollectionUtils.isEmpty(zxqIvtList)) {
return;
}
//待检区有空位且过滤未完成任务
List<BstIvtPackageinfoivt> djqPackageinfoivtList = packageinfoivtService.checkEndPointTask(PackageInfoIvtEnum.POINT_STATUS.code("待检区"), PackageInfoIvtEnum.IVT_STATUS.code(""), PackageInfoIvtEnum.TASK_POINT_TYPE.code("放货任务放货分配"), PackageInfoIvtEnum.SORT_TYPE.code("降序"), "");
if (CollectionUtils.isNotEmpty(djqPackageinfoivtList)) {
pointCode2 = djqPackageinfoivtList.get(0).getPoint_code();
task.put("vehicle_code2", PackageInfoIvtEnum.AGV_ACTION_TYPE.code("普通任务"));
task.put("task_type", PackageInfoIvtEnum.TASK_TYPE.code("补空(装箱区->待检区)"));
} else {
//管制区有空位
List<BstIvtPackageinfoivt> gzqList = packageinfoivtService.checkEndPointTask(PackageInfoIvtEnum.POINT_STATUS.code("管制区"), PackageInfoIvtEnum.IVT_STATUS.code(""), PackageInfoIvtEnum.TASK_POINT_TYPE.code("放货任务放货分配"), PackageInfoIvtEnum.SORT_TYPE.code("升序"), "");
if (CollectionUtils.isNotEmpty(gzqList)) {
pointCode2 = gzqList.get(0).getPoint_code();
task.put("vehicle_code2", PackageInfoIvtEnum.AGV_ACTION_TYPE.code("普通任务"));
task.put("task_type", PackageInfoIvtEnum.TASK_TYPE.code("补空(装箱区->管制区)"));
}
}
//去装箱区搬运空载具
if (pointCode2 != null) {
task.put("point_code2", pointCode2);
task.put("point_code1", zxqIvtList.get(0).getPoint_code());
if (task.getString("task_type").equals(PackageInfoIvtEnum.TASK_TYPE.code("补空(装箱区->待检区)"))) {
sendDjqKzjTask.createTask(task);
} else {
sendGzqKzjTask.createTask(task);
}
}
}
/**
* 装箱区->待检区或管制区补空载具
* 二次分配任务
*/
public void sendVehicleToDjqOrGzq() {
//存在装箱区有空载具的点位
@@ -76,7 +113,7 @@ public class AutoSendVehicleToDjq {
task.put("task_type", PackageInfoIvtEnum.TASK_TYPE.code("补空(装箱区->管制区)"));
}
}
//去待检区或管制区搬运空载具
//去装箱区搬运空载具
if (pointCode2 != null) {
task.put("point_code2", pointCode2);
//送空二次分配,目标点分配等待点

View File

@@ -29,14 +29,84 @@ public class AutoSendVehicleToKzj {
@Resource
private IbstIvtPackageinfoivtService packageinfoivtService;
//待检区或管制区->空载具缓存位补空
public void run() {
this.toKzjHcw();
this.toKzjHcw2();
}
public void toKzjHcw() {
//存在空载具缓存位无空载具的点位
List<BstIvtPackageinfoivt> kzjIvtList = packageinfoivtService.checkEndPointTask(PackageInfoIvtEnum.POINT_STATUS.code("空载具缓存位"), PackageInfoIvtEnum.IVT_STATUS.code(""), PackageInfoIvtEnum.TASK_POINT_TYPE.code("放货任务"), PackageInfoIvtEnum.SORT_TYPE.code("降序"), "");
if (CollectionUtils.isEmpty(kzjIvtList)) {
return;
}
String pointCode1 = null;
JSONObject task = new JSONObject();
//待检区有空载具
List<BstIvtPackageinfoivt> djqPointList = packageinfoivtService.checkEndPointTask(PackageInfoIvtEnum.POINT_STATUS.code("待检区"), PackageInfoIvtEnum.IVT_STATUS.code("空载具"), PackageInfoIvtEnum.TASK_POINT_TYPE.code("取货任务"), "", "");
if (CollectionUtils.isNotEmpty(djqPointList)) {
pointCode1 = djqPointList.get(0).getPoint_code();
} else {
//查询装箱区有空载具
List<BstIvtPackageinfoivt> zxqPointList = packageinfoivtService.checkEndPointTask(PackageInfoIvtEnum.POINT_STATUS.code("装箱区"), PackageInfoIvtEnum.IVT_STATUS.code("空载具"), PackageInfoIvtEnum.TASK_POINT_TYPE.code("取货任务"), "", "");
if (CollectionUtils.isNotEmpty(zxqPointList)) {
pointCode1 = zxqPointList.get(0).getPoint_code();
}
}
//去装箱区搬运空载具
if (pointCode1 != null) {
task.put("point_code1", pointCode1);
//送到到任意空载具缓存位
task.put("point_code2", kzjIvtList.get(0).getPoint_code());
task.put("task_type", PackageInfoIvtEnum.TASK_TYPE.code("补空(待检区->空载具缓存位)"));
djqToKzjhcwTask.createTask(task);
}
}
/**
* 待检区或管制区->空载具缓存位补空
* 二次分配任务
*/
public void toKzjHcw2() {
//存在空载具缓存位无空载具的点位
String pointCode1 = null;
JSONObject task = new JSONObject();
List<BstIvtPackageinfoivt> kzjIvtList = packageinfoivtService.checkEndPointTask(PackageInfoIvtEnum.POINT_STATUS.code("空载具缓存位"), PackageInfoIvtEnum.IVT_STATUS.code(""), PackageInfoIvtEnum.TASK_POINT_TYPE.code("放货分配"), "", "");
if (CollectionUtils.isEmpty(kzjIvtList)) {
return;
}
//待检区有空载具且过滤未完成任务
List<BstIvtPackageinfoivt> djqPackageinfoivtList = packageinfoivtService.checkEndPointTask(PackageInfoIvtEnum.POINT_STATUS.code("待检区"), PackageInfoIvtEnum.IVT_STATUS.code("空载具"), PackageInfoIvtEnum.TASK_POINT_TYPE.code("取货任务"), PackageInfoIvtEnum.SORT_TYPE.code("升序"), "");
if (CollectionUtils.isNotEmpty(djqPackageinfoivtList)) {
pointCode1 = djqPackageinfoivtList.get(0).getPoint_code();
task.put("vehicle_code2", PackageInfoIvtEnum.AGV_ACTION_TYPE.code("放货二次分配"));
task.put("task_type", PackageInfoIvtEnum.TASK_TYPE.code("补空(待检区->空载具缓存位)"));
} else {
//管制区有空位
List<BstIvtPackageinfoivt> gzqList = packageinfoivtService.checkEndPointTask(PackageInfoIvtEnum.POINT_STATUS.code("管制区"), PackageInfoIvtEnum.IVT_STATUS.code("空载具"), PackageInfoIvtEnum.TASK_POINT_TYPE.code("取货任务"), "", "");
if (CollectionUtils.isNotEmpty(gzqList)) {
pointCode1 = gzqList.get(0).getPoint_code();
task.put("vehicle_code2", PackageInfoIvtEnum.AGV_ACTION_TYPE.code("放货二次分配"));
task.put("task_type", PackageInfoIvtEnum.TASK_TYPE.code("补空(管制区->空载具缓存位)"));
}
}
//去待检区或管制区搬运空载具
if (pointCode1 != null) {
task.put("point_code1", pointCode1);
//送空二次分配,目标点分配等待点
task.put("point_code4", kzjIvtList.get(0).getPoint_code());
task.put("point_code2", packageinfoivtService.getWaitPoint(kzjIvtList.get(0).getBlock(), kzjIvtList.get(0).getWait_point_type()));
if (task.getString("task_type").equals(PackageInfoIvtEnum.TASK_TYPE.code("补空(待检区->空载具缓存位)"))) {
djqToKzjhcwTask.createTask(task);
} else {
gzqToKzjhcwTask.createTask(task);
}
}
}
/**
* 二次分配任务
*/
public void toKzjHcw1() {
//存在空载具缓存位无空载具的点位
@@ -49,10 +119,10 @@ public class AutoSendVehicleToKzj {
//待检区有空载具且过滤未完成任务
List<BstIvtPackageinfoivt> djqPackageinfoivtList = packageinfoivtService.checkEndPointTask(PackageInfoIvtEnum.POINT_STATUS.code("待检区"), PackageInfoIvtEnum.IVT_STATUS.code("空载具"), PackageInfoIvtEnum.TASK_POINT_TYPE.code("取货任务取货分配"), PackageInfoIvtEnum.SORT_TYPE.code("升序"), "");
if (CollectionUtils.isNotEmpty(djqPackageinfoivtList)) {
//无二次分配
//无二次分配
List<BstIvtPackageinfoivt> notNeedAllocation = djqPackageinfoivtList.stream().filter(r -> !r.getWait_point_type().equals(PackageInfoIvtEnum.WAIT_POINT_TYPE.code("待检区等待点"))).collect(Collectors.toList());
if (CollectionUtils.isNotEmpty(notNeedAllocation)) {
pointCode1 = notNeedAllocation.get(0).getPoint_code();
pointCode1 = djqPackageinfoivtList.get(0).getPoint_code();
task.put("vehicle_code2", PackageInfoIvtEnum.AGV_ACTION_TYPE.code("放货二次分配"));
} else {
if (CollectionUtils.isNotEmpty(djqPackageinfoivtList)) {
@@ -87,34 +157,4 @@ public class AutoSendVehicleToKzj {
}
}
}
public void toKzjHcw() {
//存在空载具缓存位无空载具的点位
List<BstIvtPackageinfoivt> kzjIvtList = packageinfoivtService.checkEndPointTask(PackageInfoIvtEnum.POINT_STATUS.code("空载具缓存位"), PackageInfoIvtEnum.IVT_STATUS.code(""), PackageInfoIvtEnum.TASK_POINT_TYPE.code("放货任务"), PackageInfoIvtEnum.SORT_TYPE.code("降序"), "");
if (CollectionUtils.isEmpty(kzjIvtList)) {
return;
}
String pointCode1 = null;
JSONObject toKzjHcwTask = new JSONObject();
//待检区有空载具
List<BstIvtPackageinfoivt> djqPointList = packageinfoivtService.checkEndPointTask(PackageInfoIvtEnum.POINT_STATUS.code("待检区"), PackageInfoIvtEnum.IVT_STATUS.code("空载具"), PackageInfoIvtEnum.TASK_POINT_TYPE.code("取货任务"), "", "");
if (CollectionUtils.isNotEmpty(djqPointList)) {
pointCode1 = djqPointList.get(0).getPoint_code();
} else {
//查询装箱区有空载具
List<BstIvtPackageinfoivt> zxqPointList = packageinfoivtService.checkEndPointTask(PackageInfoIvtEnum.POINT_STATUS.code("装箱区"), PackageInfoIvtEnum.IVT_STATUS.code("空载具"), PackageInfoIvtEnum.TASK_POINT_TYPE.code("取货任务"), "", "");
if (CollectionUtils.isNotEmpty(zxqPointList)) {
pointCode1 = zxqPointList.get(0).getPoint_code();
}
}
//去装箱区搬运空载具
if (pointCode1 != null) {
toKzjHcwTask.put("point_code1", pointCode1);
//送到到任意空载具缓存位
toKzjHcwTask.put("point_code2", kzjIvtList.get(0).getPoint_code());
toKzjHcwTask.put("task_type", PackageInfoIvtEnum.TASK_TYPE.code("补空(待检区->空载具缓存位)"));
djqToKzjhcwTask.createTask(toKzjHcwTask);
}
}
}

View File

@@ -64,6 +64,9 @@ import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import java.lang.reflect.Method;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.*;
import java.util.concurrent.TimeUnit;
import java.util.stream.Collectors;
@@ -1748,14 +1751,16 @@ public class AcsToWmsServiceImpl implements AcsToWmsService {
// 这个情况是有agv任务在搬去待检区或管制区的路上还没有更新任务状态需要查询是否有这种任务等这个任务更新完后
// 再补发之前创建的输送线到满轴缓存位任务;
log.info("二楼到一楼成品子卷到达一楼输送线sendProductToFirstFloor--------------------------" + whereJson.toString());
JSONObject result = new JSONObject();
if (StringUtils.isBlank(whereJson.getString("device_code")) || StringUtils.isBlank(whereJson.getString("material_barcode"))) {
throw new BadRequestException("接口sendProductToFirstFloor目标站点或子卷号参数为空");
}
if (whereJson.getString("device_code").equals("null") || whereJson.getString("material_barcode").equals("null")) {
throw new BadRequestException("接口sendProductToFirstFloor目标站点或子卷号参数为null");
}
RLock lock = redissonClient.getLock(whereJson.getString("material_barcode"));
String containerName = whereJson.getString("material_barcode");
JSONObject result = new JSONObject();
result.put("data", containerName);
RLock lock = redissonClient.getLock(containerName);
boolean tryLock = lock.tryLock(0, TimeUnit.SECONDS);
try {
if (tryLock) {
@@ -1765,10 +1770,12 @@ public class AcsToWmsServiceImpl implements AcsToWmsService {
.orderByAsc(BstIvtPackageinfoivt::getSort_seq));
List<BstIvtPackageinfoivt> mzPointList = bstIvtPackageinfoivtList.stream()
.filter(r -> PackageInfoIvtEnum.POINT_STATUS.code("满轴缓存位").equals(r.getPoint_status())
&& PackageInfoIvtEnum.IVT_STATUS.code("").equals(r.getIvt_status())).collect(Collectors.toList());
&& PackageInfoIvtEnum.IVT_STATUS.code("").equals(r.getIvt_status()))
.sorted(Comparator.comparing(BstIvtPackageinfoivt::getSort_seq).reversed()).collect(Collectors.toList());
JSONObject jo = new JSONObject();
jo.put("acs_task_type", PackageInfoIvtEnum.ACS_TASK_TYPE.code("桁架任务"));
jo.put("vehicle_code", whereJson.getString("material_barcode"));
jo.put("vehicle_code", containerName);
//2.创建输送线->满轴位桁架任务,
String point_code1 = whereJson.getString("device_code");
jo.put("point_code1", point_code1);
@@ -1778,56 +1785,30 @@ public class AcsToWmsServiceImpl implements AcsToWmsService {
List<BstIvtPackageinfoivt> kzjPointList = bstIvtPackageinfoivtList.stream()
.filter(r -> PackageInfoIvtEnum.POINT_STATUS.code("空载具缓存位").equals(r.getPoint_status())
&& PackageInfoIvtEnum.IVT_STATUS.code("空载具").equals(r.getIvt_status()))
.sorted(Comparator.comparing(BstIvtPackageinfoivt::getSort_seq).reversed()).collect(Collectors.toList());
.sorted(Comparator.comparing(BstIvtPackageinfoivt::getSort_seq)).collect(Collectors.toList());
//空载具缓存位有空载具,桁架取空载具从外到里取空载具,升序
if (CollectionUtils.isNotEmpty(kzjPointList)) {
// 创建前先判断是否有已创建相同任务
List<SchBaseTask> existTaskList = getExistTasks(PackageInfoIvtEnum.TASK_TYPE.code("输送线四个点任务"));
if (CollectionUtils.isEmpty(existTaskList)) {
jo.put("point_code3", kzjPointList.get(0).getPoint_code());
//终点为输送线点位
jo.put("point_code4", whereJson.getString("device_code"));
jo.put("task_type", PackageInfoIvtEnum.TASK_TYPE.code("输送线四个点任务"));
jo.put("is_send", true);
mzhcwTask.createTask(jo);
}
//创建输送线四个点任务
return createTask(containerName, jo, kzjPointList.get(0).getPoint_code(), whereJson.getString("device_code"));
} else {
//如果空载具缓存位确少空载具,创建输送线->满轴缓存位两个点任务
List<SchBaseTask> existTaskList = getExistTasks(PackageInfoIvtEnum.TASK_TYPE.code("输送线->满轴缓存位"));
if (CollectionUtils.isEmpty(existTaskList)) {
jo.put("task_type", PackageInfoIvtEnum.TASK_TYPE.code("输送线->满轴缓存位"));
jo.put("is_send", true);
mzhcwTask.createTask(jo);
}
//空载具缓存位缺少空载具,下发一个确定终点的空载具缓存位->输送线任务
List<SchBaseTask> existTasks = getExistTasks(PackageInfoIvtEnum.TASK_TYPE.code("放空(空载具缓存位->输送线)"));
if (CollectionUtils.isEmpty(existTasks)) {
JSONObject jo1 = new JSONObject();
//创建确定终点任务
jo1.put("acs_task_type", PackageInfoIvtEnum.ACS_TASK_TYPE.code("桁架任务"));
jo1.put("task_type", PackageInfoIvtEnum.TASK_TYPE.code("放空(空载具缓存位->输送线)"));
jo1.put("point_code2", "NBJ1002");
jo1.put("task_status", TaskStatusEnum.SURE_END.getCode());
jo1.put("is_send", false);
ssxDjwTask.createTask(jo1);
}
//创建输送线->满轴缓存位两个点任务
return createTask2(containerName, jo);
}
result.put("status", HttpStatus.OK.value());
result.put("message", "反馈成功!");
} else {
// 如果满轴位没有可用的空点位,先创建一个桁架任务但是不下发,等这边空出来点位,判断是否有这种桁架任务然后补发;
// List<SchBaseTask> existTaskList = getExistTasks(PackageInfoIvtEnum.TASK_TYPE.code("输送线->满轴缓存位"));
// //如果有就不创建,没有就创建
// if (CollectionUtils.isEmpty(existTaskList)) {
// //只确定起点NBJ1002
// JSONObject jo2 = new JSONObject();
// jo2.put("acs_task_type", PackageInfoIvtEnum.ACS_TASK_TYPE.code("桁架任务"));
// jo2.put("task_type", PackageInfoIvtEnum.TASK_TYPE.code("输送线->满轴缓存位"));
// jo2.put("point_code1", "NBJ1002");
// jo.put("task_status", TaskStatusEnum.SURE_START.getCode());
// jo2.put("is_send", false);
// mzhcwTask.createTask(jo2);
// }
//如果满轴位没有可用的空点位,先创建一个桁架任务但是不下发,等这边空出来点位,判断是否有这种桁架任务然后补发;
List<SchBaseTask> existTaskList = getExistTasks(PackageInfoIvtEnum.TASK_TYPE.code("输送线->满轴缓存位"),containerName);
//如果有就不创建,没有就创建
if (CollectionUtils.isEmpty(existTaskList)) {
//只确定起点NBJ1002
JSONObject jo2 = new JSONObject();
jo2.put("acs_task_type", PackageInfoIvtEnum.ACS_TASK_TYPE.code("桁架任务"));
jo2.put("task_type", PackageInfoIvtEnum.TASK_TYPE.code("输送线->满轴缓存位"));
jo2.put("point_code1", "NBJ1002");
jo.put("task_status", TaskStatusEnum.SURE_START.getCode());
jo2.put("is_send", false);
mzhcwTask.createTask(jo2);
}
result.put("data", containerName);
result.put("status", HttpStatus.BAD_REQUEST.value());
result.put("message", "满轴缓存位暂无空位!");
}
@@ -1844,6 +1825,61 @@ public class AcsToWmsServiceImpl implements AcsToWmsService {
return result;
}
private JSONObject createTask2(String containerName, JSONObject jo) {
JSONObject result = new JSONObject();
result.put("data", containerName);
//如果空载具缓存位确少空载具,创建输送线->满轴缓存位两个点任务
List<SchBaseTask> existTaskList = getExistTasks(PackageInfoIvtEnum.TASK_TYPE.code("输送线->满轴缓存位"));
List<SchBaseTask> existTaskList1 = getExistTasks(PackageInfoIvtEnum.TASK_TYPE.code("输送线->满轴缓存位"), containerName);
if (CollectionUtils.isEmpty(existTaskList1)) {
jo.put("task_type", PackageInfoIvtEnum.TASK_TYPE.code("输送线->满轴缓存位"));
jo.put("is_send", true);
mzhcwTask.createTask(jo);
//空载具缓存位缺少空载具,下发一个确定终点的空载具缓存位->输送线任务
List<SchBaseTask> existTasks = getExistTasks(PackageInfoIvtEnum.TASK_TYPE.code("放空(空载具缓存位->输送线)"));
List<SchBaseTask> existTask1 = getExistTasks(PackageInfoIvtEnum.TASK_TYPE.code("放空(空载具缓存位->输送线)"), containerName);
if (CollectionUtils.isEmpty(existTask1)) {
JSONObject jo1 = new JSONObject();
//创建确定终点任务
jo1.put("acs_task_type", PackageInfoIvtEnum.ACS_TASK_TYPE.code("桁架任务"));
jo1.put("task_type", PackageInfoIvtEnum.TASK_TYPE.code("放空(空载具缓存位->输送线)"));
jo1.put("point_code2", "NBJ1002");
jo1.put("vehicle_code", containerName);
jo1.put("task_status", TaskStatusEnum.SURE_END.getCode());
jo1.put("is_send", false);
ssxDjwTask.createTask(jo1);
}
result.put("status", HttpStatus.OK.value());
result.put("message", "反馈成功!");
} else {
result.put("status", HttpStatus.BAD_REQUEST.value());
result.put("message", "该子卷号:" + containerName + "桁架任务已存在,二楼下一楼存在相同子卷号,请检查!");
}
return result;
}
private JSONObject createTask(String containerName, JSONObject jo, String pointCode3, String pointCode4) {
JSONObject result = new JSONObject();
result.put("data", containerName);
// 创建前先判断是否有已创建相同任务
List<SchBaseTask> existTaskList = getExistTasks(PackageInfoIvtEnum.TASK_TYPE.code("输送线四个点任务"));
List<SchBaseTask> existTaskList1 = getExistTasks(PackageInfoIvtEnum.TASK_TYPE.code("输送线四个点任务"), containerName);
if (CollectionUtils.isEmpty(existTaskList1)) {
jo.put("point_code3", pointCode3);
//终点为输送线点位
jo.put("point_code4", pointCode4);
jo.put("task_type", PackageInfoIvtEnum.TASK_TYPE.code("输送线四个点任务"));
jo.put("is_send", true);
mzhcwTask.createTask(jo);
result.put("status", HttpStatus.OK.value());
result.put("message", "反馈成功!");
} else {
result.put("status", HttpStatus.BAD_REQUEST.value());
result.put("message", "该子卷号:" + containerName + "桁架任务已存在,二楼下一楼存在相同子卷号,请检查!");
}
return result;
}
private List<SchBaseTask> getExistTasks(String taskType) {
return taskService.list(new LambdaUpdateWrapper<SchBaseTask>()
.eq(SchBaseTask::getTask_type, taskType)
@@ -1851,6 +1887,17 @@ public class AcsToWmsServiceImpl implements AcsToWmsService {
.eq(SchBaseTask::getIs_delete, IOSEnum.IS_NOTANDYES.code("")));
}
private List<SchBaseTask> getExistTasks(String taskType, String containerName) {
String startTime = LocalDate.now().atStartOfDay().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
return taskService.list(new LambdaQueryWrapper<SchBaseTask>()
.eq(SchBaseTask::getTask_type, taskType)
.eq(SchBaseTask::getVehicle_code, containerName)
.gt(SchBaseTask::getCreate_time, startTime)
.eq(SchBaseTask::getIs_delete, IOSEnum.IS_NOTANDYES.code(""))
);
}
@Override
@Transactional(rollbackFor = Exception.class)