add:增加自动执行等待的桁架任务

This commit is contained in:
2024-06-29 09:21:25 +08:00
parent 830a523d56
commit 1a86159e34
14 changed files with 251 additions and 37 deletions

View File

@@ -56,10 +56,10 @@ public class BstIvtPackageinfoivtServiceImpl extends ServiceImpl<BstIvtPackagein
private IschBaseTaskService taskService;
@Resource
private BstIvtPackageinfoivtMapper bstIvtPackageinfoivtMapper;
@Resource
private IbstIvtPackageinfoivtService packageinfoivtService;
/**
* 查询数据分页
*
@@ -122,8 +122,10 @@ public class BstIvtPackageinfoivtServiceImpl extends ServiceImpl<BstIvtPackagein
private List<BstIvtPackageinfoivt> getBstIvtPackageinfoivts(String ivtType, String ivtStatus, String sortType) {
LambdaQueryWrapper<BstIvtPackageinfoivt> queryWrapper = new LambdaQueryWrapper<BstIvtPackageinfoivt>()
.eq(BstIvtPackageinfoivt::getIs_used, PackageInfoIvtEnum.IS_USED.code("启用"))
.eq(BstIvtPackageinfoivt::getPoint_status, ivtType)
.eq(BstIvtPackageinfoivt::getIvt_status, ivtStatus);
.eq(BstIvtPackageinfoivt::getPoint_status, ivtType);
if (StringUtils.isNotEmpty(ivtStatus)) {
queryWrapper.eq(BstIvtPackageinfoivt::getIvt_status, ivtStatus);
}
if (PackageInfoIvtEnum.SORT_TYPE.code("升序").equals(sortType)) {
queryWrapper.orderByAsc(BstIvtPackageinfoivt::getSort_seq);
} else if (PackageInfoIvtEnum.SORT_TYPE.code("降序").equals(sortType)) {
@@ -239,6 +241,7 @@ public class BstIvtPackageinfoivtServiceImpl extends ServiceImpl<BstIvtPackagein
* @return 新的点位
*/
private String getNewPoint(String taskCode, String actionType) {
BstIvtPackageinfoivt newPoint = new BstIvtPackageinfoivt();
String taskPointType = null;
//执行中的任务
SchBaseTask baseTask = taskService.getOne(new LambdaQueryWrapper<SchBaseTask>()
@@ -247,7 +250,51 @@ public class BstIvtPackageinfoivtServiceImpl extends ServiceImpl<BstIvtPackagein
if (baseTask == null) {
throw new BadRequestException("该任务未执行或不存在!");
}
//空载具缓存位特殊二次分配逻辑:先判断是否有执行中的行架任务,有就分配行架搬运起点,无就按顺序排序分配点位
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 (taskList.get(0).getTask_type().equals(PackageInfoIvtEnum.TASK_TYPE.code("输送线四个点任务"))) {
newPoint.setPoint_code(taskList.get(0).getPoint_code3());
} else {
newPoint.setPoint_code(taskList.get(0).getPoint_code1());
}
} else {
//newPoint = getBstIvtPackageinfoivt(actionType, taskPointType, baseTask);
newPoint = checkIvtSBlock();
}
} else {
newPoint = getBstIvtPackageinfoivt(actionType, taskPointType, baseTask);
}
if (StringUtils.isNotBlank(newPoint.getPoint_code())) {
//更新任务起点或终点
if (PackageInfoIvtEnum.TASK_ACTION_TYPE.code("取货分配").equals(actionType)) {
baseTask.setPoint_code1(newPoint.getPoint_code());
if (StringUtils.isNotBlank(newPoint.getContainer_name())) {
//更新子卷号
baseTask.setVehicle_code(newPoint.getContainer_name());
}
} else if (PackageInfoIvtEnum.TASK_ACTION_TYPE.code("放货分配").equals(actionType)) {
baseTask.setPoint_code2(newPoint.getPoint_code());
}
taskService.updateById(baseTask);
return newPoint.getPoint_code();
} else {
throw new BadRequestException("点位外层有载具阻挡或暂无点位资源!");
}
}
private BstIvtPackageinfoivt getBstIvtPackageinfoivt(String actionType, String taskPointType, SchBaseTask baseTask) {
BstIvtPackageinfoivt newPoint;
//1取货任务2放货任务
LambdaQueryWrapper<BstIvtPackageinfoivt> queryWrapper = new LambdaQueryWrapper<>();
if (PackageInfoIvtEnum.TASK_ACTION_TYPE.code("取货分配").equals(actionType)) {
@@ -264,23 +311,34 @@ public class BstIvtPackageinfoivtServiceImpl extends ServiceImpl<BstIvtPackagein
if (CollectionUtils.isEmpty(newPointList)) {
throw new BadRequestException("暂无点位资源!");
}
BstIvtPackageinfoivt point = newPointList.get(0);
if (point != null) {
//更新任务起点或终点
if (PackageInfoIvtEnum.TASK_ACTION_TYPE.code("取货分配").equals(actionType)) {
baseTask.setPoint_code1(point.getPoint_code());
if (StringUtils.isNotBlank(point.getContainer_name())) {
//更新子卷号
baseTask.setVehicle_code(point.getContainer_name());
}
} else if (PackageInfoIvtEnum.TASK_ACTION_TYPE.code("放货分配").equals(actionType)) {
baseTask.setPoint_code2(point.getPoint_code());
}
taskService.updateById(baseTask);
return point.getPoint_code();
} else {
return "";
newPoint = newPointList.get(0);
return newPoint;
}
/**
* 获取不阻挡的空载具缓存点位
*/
public BstIvtPackageinfoivt checkIvtSBlock() {
BstIvtPackageinfoivt newPoint = new BstIvtPackageinfoivt();
List<BstIvtPackageinfoivt> kzjIvtList = packageinfoivtService.checkEndPointTask(PackageInfoIvtEnum.POINT_STATUS.code("空载具缓存位"), null, PackageInfoIvtEnum.TASK_POINT_TYPE.code("放货任务"), PackageInfoIvtEnum.SORT_TYPE.code("降序"), "");
if (CollectionUtils.isEmpty(kzjIvtList)) {
return newPoint;
}
boolean hasEmptyVehicle = true;
Optional<BstIvtPackageinfoivt> emptyList = kzjIvtList.stream()
.filter(n -> n.getIvt_status().equals(PackageInfoIvtEnum.IVT_STATUS.code("")))
.findFirst();
//判断点位外层是否有空载具
if (emptyList.isPresent()) {
BigDecimal sortSeq = emptyList.get().getSort_seq();
hasEmptyVehicle = kzjIvtList.stream()
.anyMatch(r -> r.getSort_seq().compareTo(sortSeq) < 0 &&
r.getIvt_status().equals(PackageInfoIvtEnum.IVT_STATUS.code("空载具")));
}
if (hasEmptyVehicle) {
return newPoint;
}
return emptyList.get();
}

View File

@@ -139,7 +139,7 @@ public class DjqTask extends AbstractAcsTask {
throw new BadRequestException("任务已执行不能取消");
}
//任务被标记为取消
schBaseTask.setTask_status(TaskStatusEnum.CANCEL.getCode());
schBaseTask.setIs_delete(IOSEnum.IS_NOTANDYES.code(""));
}
schBaseTask.setUpdate_time(DateUtil.now());
schBaseTask.setUpdate_optid(SecurityUtils.getCurrentUserId());
@@ -199,7 +199,7 @@ public class DjqTask extends AbstractAcsTask {
public void sendDjqToZxq(SchBaseTask schBaseTask) {
//装箱区有空位
List<BstIvtPackageinfoivt> bstIvtPackageinfoivtList = packageinfoivtService.checkEndPointTask(PackageInfoIvtEnum.POINT_STATUS.code("装箱区"), PackageInfoIvtEnum.IVT_STATUS.code(""),PackageInfoIvtEnum.TASK_POINT_TYPE.code("取货任务"), "","");
List<BstIvtPackageinfoivt> bstIvtPackageinfoivtList = packageinfoivtService.checkEndPointTask(PackageInfoIvtEnum.POINT_STATUS.code("装箱区"), PackageInfoIvtEnum.IVT_STATUS.code(""), PackageInfoIvtEnum.TASK_POINT_TYPE.code("取货任务"), "", "");
if (CollectionUtils.isNotEmpty(bstIvtPackageinfoivtList)) {
Map<String, List<String>> ivtList = bstIvtPackageinfoivtList.stream()
.collect(Collectors.groupingBy(
@@ -232,6 +232,7 @@ public class DjqTask extends AbstractAcsTask {
throw new BadRequestException("满轴缓存位 -> 待检区取消接口任务号为空!");
}
schBaseTask.setTask_status(TaskStatusEnum.CANCEL.getCode());
schBaseTask.setIs_delete(IOSEnum.IS_NOTANDYES.code(""));
schBaseTask.setUpdate_time(DateUtil.now());
schBaseTask.setUpdate_optid(SecurityUtils.getCurrentUserId());
schBaseTask.setUpdate_optname(SecurityUtils.getCurrentNickName());

View File

@@ -132,6 +132,7 @@ public class DjqToKzjhcwTask extends AbstractAcsTask {
}
//任务被标记为取消
schBaseTask.setTask_status(TaskStatusEnum.CANCEL.getCode());
schBaseTask.setIs_delete(IOSEnum.IS_NOTANDYES.code(""));
}
schBaseTask.setUpdate_time(DateUtil.now());
schBaseTask.setUpdate_optid(SecurityUtils.getCurrentUserId());
@@ -210,6 +211,7 @@ public class DjqToKzjhcwTask extends AbstractAcsTask {
throw new BadRequestException("待检区->空载具缓存位取消接口任务号为空!");
}
schBaseTask.setTask_status(TaskStatusEnum.CANCEL.getCode());
schBaseTask.setIs_delete(IOSEnum.IS_NOTANDYES.code(""));
schBaseTask.setUpdate_time(DateUtil.now());
schBaseTask.setUpdate_optid(SecurityUtils.getCurrentUserId());
schBaseTask.setUpdate_optname(SecurityUtils.getCurrentNickName());
@@ -294,4 +296,4 @@ public class DjqToKzjhcwTask extends AbstractAcsTask {
// this.createTask(toKzjHcwTask);
// }
// }
}
}

View File

@@ -1,4 +1,5 @@
package org.nl.b_lms.sch.tasks.first_floor_area;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.lang.Assert;
import cn.hutool.core.util.BooleanUtil;
@@ -26,6 +27,7 @@ import org.nl.wms.sch.manage.TaskStatusEnum;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.List;
@@ -83,7 +85,7 @@ public class GzqTask extends AbstractAcsTask {
@Override
@Transactional(rollbackFor = Exception.class)
public void updateTaskStatus(JSONObject taskObj, String status) {
SchBaseTask schBaseTask = taskService.getOne(new LambdaUpdateWrapper<SchBaseTask>().eq( SchBaseTask::getTask_id, taskObj.getString("task_id")), false);
SchBaseTask schBaseTask = taskService.getOne(new LambdaUpdateWrapper<SchBaseTask>().eq(SchBaseTask::getTask_id, taskObj.getString("task_id")), false);
if (schBaseTask == null) {
throw new BadRequestException("满轴缓存位 -> 管制区完成接口任务号为空!");
}
@@ -125,6 +127,7 @@ public class GzqTask extends AbstractAcsTask {
}
//任务被标记为取消
schBaseTask.setTask_status(TaskStatusEnum.CANCEL.getCode());
schBaseTask.setIs_delete(IOSEnum.IS_NOTANDYES.code(""));
}
schBaseTask.setUpdate_time(DateUtil.now());
schBaseTask.setUpdate_optid(SecurityUtils.getCurrentUserId());
@@ -194,8 +197,6 @@ public class GzqTask extends AbstractAcsTask {
}
@Override
public void cancel(String taskId) {
SchBaseTask schBaseTask = taskService.getOne(new LambdaUpdateWrapper<SchBaseTask>()
@@ -204,6 +205,7 @@ public class GzqTask extends AbstractAcsTask {
throw new BadRequestException("满轴缓存位 -> 管制区取消接口任务号为空!");
}
schBaseTask.setTask_status(TaskStatusEnum.CANCEL.getCode());
schBaseTask.setIs_delete(IOSEnum.IS_NOTANDYES.code(""));
schBaseTask.setUpdate_time(DateUtil.now());
schBaseTask.setUpdate_optid(SecurityUtils.getCurrentUserId());
schBaseTask.setUpdate_optname(SecurityUtils.getCurrentNickName());

View File

@@ -132,6 +132,7 @@ public class GzqToKzjhcwTask extends AbstractAcsTask {
}
//任务被标记为取消
schBaseTask.setTask_status(TaskStatusEnum.CANCEL.getCode());
schBaseTask.setIs_delete(IOSEnum.IS_NOTANDYES.code(""));
}
schBaseTask.setUpdate_time(DateUtil.now());
schBaseTask.setUpdate_optid(SecurityUtils.getCurrentUserId());
@@ -210,6 +211,7 @@ public class GzqToKzjhcwTask extends AbstractAcsTask {
throw new BadRequestException("管制区->空载具缓存位取消接口任务号为空!");
}
schBaseTask.setTask_status(TaskStatusEnum.CANCEL.getCode());
schBaseTask.setIs_delete(IOSEnum.IS_NOTANDYES.code(""));
schBaseTask.setUpdate_time(DateUtil.now());
schBaseTask.setUpdate_optid(SecurityUtils.getCurrentUserId());
schBaseTask.setUpdate_optname(SecurityUtils.getCurrentNickName());

View File

@@ -158,6 +158,7 @@ public class MzhcwTask extends AbstractAcsTask {
}
// 更新任务表删除字段
schBaseTask.setTask_status(TaskStatusEnum.CANCEL.getCode());
schBaseTask.setIs_delete(IOSEnum.IS_NOTANDYES.code(""));
}
schBaseTask.setUpdate_time(DateUtil.now());
schBaseTask.setUpdate_optid(SecurityUtils.getCurrentUserId());
@@ -360,6 +361,7 @@ public class MzhcwTask extends AbstractAcsTask {
throw new BadRequestException("输送线点位 -> 满轴缓存位取消接口任务号为空!");
}
schBaseTask.setTask_status(TaskStatusEnum.CANCEL.getCode());
schBaseTask.setIs_delete(IOSEnum.IS_NOTANDYES.code(""));
schBaseTask.setUpdate_time(DateUtil.now());
schBaseTask.setUpdate_optid(SecurityUtils.getCurrentUserId());
schBaseTask.setUpdate_optname(SecurityUtils.getCurrentNickName());

View File

@@ -102,6 +102,7 @@ public class SendDjqKzjTask extends AbstractAcsTask {
}
//任务被标记为取消
schBaseTask.setTask_status(TaskStatusEnum.CANCEL.getCode());
schBaseTask.setIs_delete(IOSEnum.IS_NOTANDYES.code(""));
}
schBaseTask.setUpdate_time(DateUtil.now());
schBaseTask.setUpdate_optid(SecurityUtils.getCurrentUserId());
@@ -132,7 +133,7 @@ public class SendDjqKzjTask extends AbstractAcsTask {
boolean isSend = !StrUtil.isNotBlank(form.getString("is_send")) || BooleanUtil.toBoolean(form.getString("is_send"));
SchBaseTaskVO schBaseTaskVo = SchBaseTaskVO.builder()
.task_type(taskType)
.vehicle_code(vehicleCode)
.vehicle_code(vehicleCode)
.vehicle_code2(form.getString("vehicle_code2"))
.point_code1(pointCode1)
.point_code2(pointCode2)
@@ -180,6 +181,7 @@ public class SendDjqKzjTask extends AbstractAcsTask {
throw new BadRequestException("装箱区->待检区送空载具取消接口任务号为空!");
}
schBaseTask.setTask_status(TaskStatusEnum.CANCEL.getCode());
schBaseTask.setIs_delete(IOSEnum.IS_NOTANDYES.code(""));
schBaseTask.setUpdate_time(DateUtil.now());
schBaseTask.setUpdate_optid(SecurityUtils.getCurrentUserId());
schBaseTask.setUpdate_optname(SecurityUtils.getCurrentNickName());

View File

@@ -102,6 +102,7 @@ public class SendGzqKzjTask extends AbstractAcsTask {
}
//任务被标记为取消
schBaseTask.setTask_status(TaskStatusEnum.CANCEL.getCode());
schBaseTask.setIs_delete(IOSEnum.IS_NOTANDYES.code(""));
}
schBaseTask.setUpdate_time(DateUtil.now());
schBaseTask.setUpdate_optid(SecurityUtils.getCurrentUserId());
@@ -132,7 +133,7 @@ public class SendGzqKzjTask extends AbstractAcsTask {
boolean isSend = !StrUtil.isNotBlank(form.getString("is_send")) || BooleanUtil.toBoolean(form.getString("is_send"));
SchBaseTaskVO schBaseTaskVo = SchBaseTaskVO.builder()
.task_type(taskType)
.vehicle_code(vehicleCode)
.vehicle_code(vehicleCode)
.vehicle_code2(form.getString("vehicle_code2"))
.point_code1(pointCode1)
.point_code2(pointCode2)
@@ -180,6 +181,7 @@ public class SendGzqKzjTask extends AbstractAcsTask {
throw new BadRequestException("装箱区->管制区送空载具取消接口任务号为空!");
}
schBaseTask.setTask_status(TaskStatusEnum.CANCEL.getCode());
schBaseTask.setIs_delete(IOSEnum.IS_NOTANDYES.code(""));
schBaseTask.setUpdate_time(DateUtil.now());
schBaseTask.setUpdate_optid(SecurityUtils.getCurrentUserId());
schBaseTask.setUpdate_optname(SecurityUtils.getCurrentNickName());

View File

@@ -1,4 +1,5 @@
package org.nl.b_lms.sch.tasks.first_floor_area;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.lang.Assert;
import cn.hutool.core.util.BooleanUtil;
@@ -24,6 +25,7 @@ import org.nl.wms.sch.manage.TaskStatusEnum;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.List;
@@ -49,9 +51,6 @@ public class SsxDjwTask extends AbstractAcsTask {
private IbstIvtPackageinfoivtService packageinfoivtService;
@Override
public List<AcsTaskDto> addTask() {
ArrayList<AcsTaskDto> resultList = new ArrayList<>();
@@ -83,7 +82,7 @@ public class SsxDjwTask extends AbstractAcsTask {
@Override
@Transactional(rollbackFor = Exception.class)
public void updateTaskStatus(JSONObject taskObj, String status) {
SchBaseTask schBaseTask = taskService.getOne(new LambdaUpdateWrapper<SchBaseTask>().eq( SchBaseTask::getTask_id, taskObj.getString("task_id")), false);
SchBaseTask schBaseTask = taskService.getOne(new LambdaUpdateWrapper<SchBaseTask>().eq(SchBaseTask::getTask_id, taskObj.getString("task_id")), false);
if (schBaseTask == null) {
throw new BadRequestException("空载具缓存位 -> 输送线完成接口任务号为空!");
}
@@ -120,7 +119,9 @@ public class SsxDjwTask extends AbstractAcsTask {
}
//任务被标记为取消
schBaseTask.setTask_status(TaskStatusEnum.CANCEL.getCode());
schBaseTask.setIs_delete(IOSEnum.IS_NOTANDYES.code(""));
schBaseTask.setTask_status(TaskStatusEnum.CANCEL.getCode());
schBaseTask.setIs_delete(IOSEnum.IS_NOTANDYES.code(""));
}
schBaseTask.setUpdate_time(DateUtil.now());
schBaseTask.setUpdate_optid(SecurityUtils.getCurrentUserId());
@@ -192,11 +193,12 @@ public class SsxDjwTask extends AbstractAcsTask {
@Override
public void cancel(String taskId) {
SchBaseTask schBaseTask = taskService.getOne(new LambdaUpdateWrapper<SchBaseTask>()
.eq(SchBaseTask::getTask_id, taskId), false) ;
.eq(SchBaseTask::getTask_id, taskId), false);
if (schBaseTask == null) {
throw new BadRequestException("空载具缓存位 -> 输送线取消接口任务号为空!");
}
schBaseTask.setTask_status(TaskStatusEnum.CANCEL.getCode());
schBaseTask.setIs_delete(IOSEnum.IS_NOTANDYES.code(""));
schBaseTask.setUpdate_time(DateUtil.now());
schBaseTask.setUpdate_optid(SecurityUtils.getCurrentUserId());
schBaseTask.setUpdate_optname(SecurityUtils.getCurrentNickName());

View File

@@ -151,6 +151,7 @@ public class ZxDjwTask extends AbstractAcsTask {
}
//任务被标记为取消
schBaseTask.setTask_status(TaskStatusEnum.CANCEL.getCode());
schBaseTask.setIs_delete(IOSEnum.IS_NOTANDYES.code(""));
schBaseTask.setRemark("任务被强制取消,不执行任何逻辑!");
}
schBaseTask.setUpdate_time(DateUtil.now());
@@ -231,6 +232,7 @@ public class ZxDjwTask extends AbstractAcsTask {
throw new BadRequestException("装箱区 -> 装箱对接位取消接口任务号为空!");
}
schBaseTask.setTask_status(TaskStatusEnum.CANCEL.getCode());
schBaseTask.setIs_delete(IOSEnum.IS_NOTANDYES.code(""));
schBaseTask.setUpdate_time(DateUtil.now());
schBaseTask.setUpdate_optid(SecurityUtils.getCurrentUserId());
schBaseTask.setUpdate_optname(SecurityUtils.getCurrentNickName());

View File

@@ -144,6 +144,7 @@ public class ZxqTask extends AbstractAcsTask {
}
//任务被标记为取消
schBaseTask.setTask_status(TaskStatusEnum.CANCEL.getCode());
schBaseTask.setIs_delete(IOSEnum.IS_NOTANDYES.code(""));
}
schBaseTask.setUpdate_time(DateUtil.now());
schBaseTask.setUpdate_optid(SecurityUtils.getCurrentUserId());
@@ -303,6 +304,7 @@ public class ZxqTask extends AbstractAcsTask {
throw new BadRequestException("待检区 -> 装箱区取消接口任务号为空!");
}
schBaseTask.setTask_status(TaskStatusEnum.CANCEL.getCode());
schBaseTask.setIs_delete(IOSEnum.IS_NOTANDYES.code(""));
schBaseTask.setUpdate_time(DateUtil.now());
schBaseTask.setUpdate_optid(SecurityUtils.getCurrentUserId());
schBaseTask.setUpdate_optname(SecurityUtils.getCurrentNickName());

View File

@@ -0,0 +1,119 @@
package org.nl.b_lms.sch.tasks.first_floor_area.auto;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils;
import org.nl.b_lms.sch.point.dao.BstIvtPackageinfoivt;
import org.nl.b_lms.sch.point.service.IbstIvtPackageinfoivtService;
import org.nl.b_lms.sch.task.dao.SchBaseTask;
import org.nl.b_lms.sch.task.service.IschBaseTaskService;
import org.nl.b_lms.sch.tasks.first_floor_area.DjqTask;
import org.nl.b_lms.sch.tasks.first_floor_area.MzhcwTask;
import org.nl.b_lms.sch.tasks.first_floor_area.SsxDjwTask;
import org.nl.b_lms.storage_manage.ios.enums.IOSEnum;
import org.nl.common.enums.PackageInfoIvtEnum;
import org.nl.modules.common.exception.BadRequestException;
import org.nl.wms.sch.manage.TaskStatusEnum;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.Comparator;
import java.util.List;
import java.util.stream.Collectors;
@Slf4j
@Component
@RequiredArgsConstructor
public class AutoExecuteWaitTask {
@Resource
private MzhcwTask mzhcwTask;
@Resource
private SsxDjwTask ssxDjwTask;
@Resource
private IschBaseTaskService taskService;
@Resource
private IbstIvtPackageinfoivtService packageinfoivtService;
//自动执行等待的桁架任务
public void run() {
this.executeWaitTask();
}
/**
* 放满与取空桁架任务
*/
void executeWaitTask() {
List<SchBaseTask> taskList = taskService.list(
new LambdaQueryWrapper<SchBaseTask>()
.or(r -> r.eq(SchBaseTask::getTask_status, TaskStatusEnum.SURE_END.getCode())
.and(w -> w.eq(SchBaseTask::getTask_type, PackageInfoIvtEnum.TASK_TYPE.code("放空(空载具缓存位->输送线)"))))
.or(r -> r.eq(SchBaseTask::getTask_status, TaskStatusEnum.SURE_START.getCode())
.and(w -> w.eq(SchBaseTask::getTask_type, PackageInfoIvtEnum.TASK_TYPE.code("输送线->满轴缓存位"))))
);
for (SchBaseTask task : taskList) {
if (task != null) {
String taskType = task.getTask_type();
if (PackageInfoIvtEnum.TASK_TYPE.code("放空(空载具缓存位->输送线)").equals(taskType)) {
List<BstIvtPackageinfoivt> kzjPointList = packageinfoivtService
.list(new LambdaUpdateWrapper<BstIvtPackageinfoivt>()
.eq(BstIvtPackageinfoivt::getIs_used, PackageInfoIvtEnum.IS_USED.code("启用")
).eq(BstIvtPackageinfoivt::getPoint_status, PackageInfoIvtEnum.POINT_STATUS.code("空载具缓存位"))
.eq(BstIvtPackageinfoivt::getIvt_status, PackageInfoIvtEnum.IVT_STATUS.code("空载具"))
.orderByAsc(BstIvtPackageinfoivt::getSort_seq));
if (CollectionUtils.isEmpty(kzjPointList)) {
return;
}
List<SchBaseTask> existTaskList = getExistTasks(taskType, task.getVehicle_code());
if (existTaskList.size() > 1) {
throw new BadRequestException("存在多个子卷号相同的任务!");
}
task.setPoint_code1(kzjPointList.get(0).getPoint_code());
task.setTask_status(TaskStatusEnum.START_AND_POINT.getCode());
taskService.updateById(task);
ssxDjwTask.immediateNotifyAcs(null);
} else if (PackageInfoIvtEnum.TASK_TYPE.code("输送线->满轴缓存位").equals(taskType)) {
List<BstIvtPackageinfoivt> mzPointList = packageinfoivtService
.list(new LambdaUpdateWrapper<BstIvtPackageinfoivt>()
.eq(BstIvtPackageinfoivt::getIs_used, PackageInfoIvtEnum.IS_USED.code("启用")
).eq(BstIvtPackageinfoivt::getPoint_status, PackageInfoIvtEnum.POINT_STATUS.code("满轴缓存位"))
.eq(BstIvtPackageinfoivt::getIvt_status, PackageInfoIvtEnum.IVT_STATUS.code(""))
.orderByDesc(BstIvtPackageinfoivt::getSort_seq));
if (CollectionUtils.isEmpty(mzPointList)) {
return;
}
//校验相同是否存在相同子卷号任务
List<SchBaseTask> existTaskList = getExistTasks(taskType, task.getVehicle_code());
//如果有就不创建,没有就创建
if (existTaskList.size() > 1) {
throw new BadRequestException("存在多个子卷号相同的任务!");
}
task.setPoint_code2(mzPointList.get(0).getPoint_code());
task.setTask_status(TaskStatusEnum.START_AND_POINT.getCode());
taskService.updateById(task);
mzhcwTask.immediateNotifyAcs(null);
}
}
}
}
//校验相同子卷号的任务
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(""))
);
}
}

View File

@@ -42,19 +42,19 @@ public class AutoSendVehicleToDjq {
//存在装箱区有空载具的点位
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("取货任务取货分配"), "", "");
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("降序"), "");
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("升序"), "");
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("普通任务"));

View File

@@ -12,7 +12,11 @@ import org.nl.common.enums.PackageInfoIvtEnum;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Optional;
import java.util.stream.Collectors;
@@ -72,10 +76,24 @@ public class AutoSendVehicleToKzj {
//存在空载具缓存位无空载具的点位
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("放货分配"), "", "");
List<BstIvtPackageinfoivt> kzjIvtList = packageinfoivtService.checkEndPointTask(PackageInfoIvtEnum.POINT_STATUS.code("空载具缓存位"), null, PackageInfoIvtEnum.TASK_POINT_TYPE.code("放货分配"), PackageInfoIvtEnum.SORT_TYPE.code("降序"), "");
if (CollectionUtils.isEmpty(kzjIvtList)) {
return;
}
boolean hasEmptyVehicle = true;
Optional<BstIvtPackageinfoivt> emptyList = kzjIvtList.stream()
.filter(n -> n.getIvt_status().equals(PackageInfoIvtEnum.IVT_STATUS.code("")))
.findFirst();
//判断点位外层是否有空载具
if (emptyList.isPresent()) {
BigDecimal sortSeq = emptyList.get().getSort_seq();
hasEmptyVehicle = kzjIvtList.stream()
.anyMatch(r -> r.getSort_seq().compareTo(sortSeq) < 0 &&
r.getIvt_status().equals(PackageInfoIvtEnum.IVT_STATUS.code("空载具")));
}
if (hasEmptyVehicle) {
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)) {
@@ -95,7 +113,7 @@ public class AutoSendVehicleToKzj {
if (pointCode1 != null) {
task.put("point_code1", pointCode1);
//送空二次分配,目标点分配等待点
task.put("point_code4", kzjIvtList.get(0).getPoint_code());
task.put("point_code4", emptyList.get().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);