fix:待检区到管制区任务下发优化、出入烘箱去除插入到表内
This commit is contained in:
@@ -33,7 +33,7 @@ import java.util.stream.Collectors;
|
||||
@Slf4j
|
||||
@Component
|
||||
@RequiredArgsConstructor
|
||||
public class AutoSendDjqToGzq extends Prun{
|
||||
public class AutoSendDjqToGzq extends Prun {
|
||||
|
||||
private final String THIS_CLASS = AutoSendDjqToGzq.class.getName();
|
||||
@Resource
|
||||
@@ -54,7 +54,7 @@ public class AutoSendDjqToGzq extends Prun{
|
||||
public void run() {
|
||||
try {
|
||||
this.sendDjqToGzq();
|
||||
}catch (Exception ex){
|
||||
} catch (Exception ex) {
|
||||
log.error(ex.getMessage());
|
||||
}
|
||||
}
|
||||
@@ -65,35 +65,29 @@ public class AutoSendDjqToGzq extends Prun{
|
||||
*/
|
||||
@SneakyThrows
|
||||
public void sendDjqToGzq() {
|
||||
log.info(THIS_CLASS+"-待检区->管制区定时任务开始执行扫描。");
|
||||
log.info(THIS_CLASS + "-待检区->管制区定时任务开始执行扫描。");
|
||||
RLock lock = redissonClient.getLock(THIS_CLASS);
|
||||
boolean tryLock = lock.tryLock(0, TimeUnit.SECONDS);
|
||||
try {
|
||||
if (tryLock) {
|
||||
//待检区有管制品且过滤未完成任务
|
||||
List<BstIvtPackageinfoivt> djqPackageinfoivtList = packageinfoivtService.checkEndPointTask(PackageInfoIvtEnum.POINT_STATUS.code("待检区"), PackageInfoIvtEnum.IVT_STATUS.code("管制品"), PackageInfoIvtEnum.TASK_POINT_TYPE.code("取货任务"), PackageInfoIvtEnum.SORT_TYPE.code("升序"), PackageInfoIvtEnum.TASK_TYPE.code("待检区->管制区"));
|
||||
List<BstIvtPackageinfoivt> djqPackageinfoivtList2 = packageinfoivtService.checkEndPointTask(PackageInfoIvtEnum.POINT_STATUS.code("装箱区"), PackageInfoIvtEnum.IVT_STATUS.code("管制品"), PackageInfoIvtEnum.TASK_POINT_TYPE.code("取货任务"), PackageInfoIvtEnum.SORT_TYPE.code("升序"), PackageInfoIvtEnum.TASK_TYPE.code("待检区->管制区"));
|
||||
List<BstIvtPackageinfoivt> djqPackageinfoivtList = packageinfoivtService.selectEmpPoints(PackageInfoIvtEnum.POINT_STATUS.code("待检区"), PackageInfoIvtEnum.IVT_STATUS.code("管制品"));
|
||||
// List<BstIvtPackageinfoivt> djqPackageinfoivtList2 = packageinfoivtService.checkEndPointTask(PackageInfoIvtEnum.POINT_STATUS.code("装箱区"), PackageInfoIvtEnum.IVT_STATUS.code("管制品"), PackageInfoIvtEnum.TASK_POINT_TYPE.code("取货任务"), PackageInfoIvtEnum.SORT_TYPE.code("升序"), PackageInfoIvtEnum.TASK_TYPE.code("待检区->管制区"));
|
||||
if (CollectionUtils.isEmpty(djqPackageinfoivtList)) {
|
||||
return;
|
||||
}
|
||||
if (!CollectionUtils.isEmpty(djqPackageinfoivtList2)){
|
||||
djqPackageinfoivtList.addAll(djqPackageinfoivtList2);
|
||||
}
|
||||
//管制区有空位且过滤未完成任务
|
||||
List<BstIvtPackageinfoivt> gzqPackageinfoivtList = packageinfoivtService.checkEndPointTask(PackageInfoIvtEnum.POINT_STATUS.code("管制区"), PackageInfoIvtEnum.IVT_STATUS.code("空"), PackageInfoIvtEnum.TASK_POINT_TYPE.code("放货任务"), PackageInfoIvtEnum.SORT_TYPE.code("升序"), PackageInfoIvtEnum.TASK_TYPE.code("待检区->管制区"));
|
||||
//todo 新增NG卷放置临时管制区135136,只取空不补空
|
||||
List<BstIvtPackageinfoivt> ivtLists =
|
||||
gzqPackageinfoivtList.stream()
|
||||
.filter(r -> PackageInfoIvtEnum.POINT_STATUS.code("管制区").equals(r.getPoint_status()))
|
||||
.collect(Collectors.toList());
|
||||
if (ObjectUtils.isEmpty(ivtLists)) {
|
||||
List<BstIvtPackageinfoivt> gzqPackageinfoivtList = packageinfoivtService.selectEmpPoints(PackageInfoIvtEnum.POINT_STATUS.code("管制区"), PackageInfoIvtEnum.IVT_STATUS.code("空"));
|
||||
if (ObjectUtils.isEmpty(gzqPackageinfoivtList)) {
|
||||
log.info("待检区->管制区agv自动搬运任务暂无可用空位,子卷号为:" + djqPackageinfoivtList.get(0).getContainer_name());
|
||||
throw new BadRequestException("待检区->管制区agv自动搬运任务暂无可用空位,子卷号为:" + djqPackageinfoivtList.get(0).getContainer_name());
|
||||
}
|
||||
JSONObject task = new JSONObject();
|
||||
task.put("point_code2", ivtLists.get(0).getPoint_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());
|
||||
task.put("task_type", PackageInfoIvtEnum.TASK_TYPE.code("待检区->管制区"));
|
||||
createTask(djqPackageinfoivtList, task);
|
||||
gzqTask.createTask(task);
|
||||
} else {
|
||||
log.info("待检区->管制区任务正在创建被锁住。");
|
||||
}
|
||||
@@ -104,128 +98,4 @@ public class AutoSendDjqToGzq extends Prun{
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* 创建任务
|
||||
*/
|
||||
private void createTask(List<BstIvtPackageinfoivt> djqPackageinfoivtList, JSONObject task) {
|
||||
// 浅货位和深货位
|
||||
Map<Boolean, List<BstIvtPackageinfoivt>> ivtMap = djqPackageinfoivtList.stream()
|
||||
.collect(Collectors.partitioningBy(r -> r.getDepth().equals(PackageInfoIvtEnum.DEPTH_TYPE.code("浅货位"))));
|
||||
List<BstIvtPackageinfoivt> shallowIvtList = ivtMap.get(true);
|
||||
List<BstIvtPackageinfoivt> deepIvtList = ivtMap.get(false);
|
||||
if (ObjectUtils.isNotEmpty(shallowIvtList)) {
|
||||
// 优先处理浅货位
|
||||
handleTaskForShallow(task, shallowIvtList.get(0));
|
||||
} else if (ObjectUtils.isNotEmpty(deepIvtList)) {
|
||||
// 处理深货位
|
||||
handleTaskForDeep(task, deepIvtList.get(0));
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 处理浅货位
|
||||
*/
|
||||
private void handleTaskForShallow(JSONObject task, BstIvtPackageinfoivt shallowIvt) {
|
||||
task.put("vehicle_code", shallowIvt.getContainer_name());
|
||||
task.put("point_code1", shallowIvt.getPoint_code());
|
||||
gzqTask.createTask(task);
|
||||
}
|
||||
|
||||
/**
|
||||
* 处理深货位
|
||||
*/
|
||||
private void handleTaskForDeep(JSONObject task, BstIvtPackageinfoivt deepIvt) {
|
||||
String pointCode1 = deepIvt.getPoint_code();
|
||||
List<BstIvtPackageinfoivt> groupIvtList = packageinfoivtService.list(new LambdaQueryWrapper<BstIvtPackageinfoivt>()
|
||||
.eq(BstIvtPackageinfoivt::getCol_num, deepIvt.getCol_num()))
|
||||
.stream()
|
||||
.filter(r -> r.getDepth().equals(PackageInfoIvtEnum.DEPTH_TYPE.code("浅货位")))
|
||||
.collect(Collectors.toList());
|
||||
if (ObjectUtils.isNotEmpty(groupIvtList)) {
|
||||
BstIvtPackageinfoivt shallowIvt = groupIvtList.get(0);
|
||||
//处理深货位对应浅货位的状态
|
||||
handleShallowIvtStatus(task, deepIvt, shallowIvt, pointCode1);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 处理深货位对应浅货位的状态
|
||||
*/
|
||||
private void handleShallowIvtStatus(JSONObject task, BstIvtPackageinfoivt deepIvt, BstIvtPackageinfoivt shallowIvt, String pointCode1) {
|
||||
Set<String> pointCodes2 = Collections.singleton(shallowIvt.getPoint_code());
|
||||
//浅货位状态为空,查询该货位是否存在运行中的放货任务
|
||||
//如果不存在,则直接创建主任务
|
||||
//如果存在,则1.建立确定起点的主任务,2.运行中的放货任务完成后,再让下发执行主任务
|
||||
//浅货位状态不为空,查询该货位是否存在运行中的取货任务
|
||||
//如果不存在,1.创建主任务不下发;2.创建移库任务,绑定主任务关联关系task_group_id,等待移库任务完成后,再下发主任务
|
||||
//如果存在,不需要移库,绑定与主任务关联关系task_group_id,等待运行中的取货任务完成后,再让下发执行主任务
|
||||
List<SchBaseTask> existTaskList = shallowIvt.getIvt_status().equals(PackageInfoIvtEnum.IVT_STATUS.code("空"))
|
||||
? bstIvtPackageinfoivtMapper.getTaskList(null, pointCodes2, null, null)
|
||||
: bstIvtPackageinfoivtMapper.getTaskList(pointCodes2, null, null, null);
|
||||
//创建搬运任务
|
||||
task.put("vehicle_code", deepIvt.getContainer_name());
|
||||
task.put("point_code1", pointCode1);
|
||||
//不存在搬运任务
|
||||
if (ObjectUtils.isEmpty(existTaskList)) {
|
||||
//浅库位状态为空
|
||||
if (shallowIvt.getIvt_status().equals(PackageInfoIvtEnum.IVT_STATUS.code("空"))) {
|
||||
gzqTask.createTask(task);
|
||||
} else {
|
||||
createMainTask(task, deepIvt, shallowIvt, pointCode1, null);
|
||||
}
|
||||
//存在搬运任务
|
||||
} else {
|
||||
//浅库位状态为空
|
||||
if (shallowIvt.getIvt_status().equals(PackageInfoIvtEnum.IVT_STATUS.code("空"))) {
|
||||
createMainTask(task, deepIvt, shallowIvt, pointCode1, existTaskList.get(0));
|
||||
} else {
|
||||
//浅库位状态不为空
|
||||
task.put("task_status", TaskStatusEnum.SURE_END.getCode());
|
||||
LambdaUpdateWrapper<SchBaseTask> updateWrapper = new LambdaUpdateWrapper<SchBaseTask>().eq(SchBaseTask::getTask_id, existTaskList.get(0).getTask_id());
|
||||
updateWrapper.set(SchBaseTask::getTask_group_id, gzqTask.createTask(task));
|
||||
taskService.update(null, updateWrapper);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 创建搬运和移库任务
|
||||
*/
|
||||
private void createMainTask(JSONObject task, BstIvtPackageinfoivt deepIvt, BstIvtPackageinfoivt shallowIvt, String pointCode1, SchBaseTask existTask) {
|
||||
String taskId;
|
||||
String shiftingTaskId;
|
||||
task.put("vehicle_code", deepIvt.getContainer_name());
|
||||
task.put("point_code1", pointCode1);
|
||||
task.put("task_status", TaskStatusEnum.SURE_END.getCode());
|
||||
taskId = gzqTask.createTask(task);
|
||||
//获取移库任务目标点
|
||||
String pointCode4 = packageinfoivtService.getDjqShiftingPoint(shallowIvt,true);
|
||||
JSONObject task1 = new JSONObject();
|
||||
if (existTask != null) {
|
||||
task1.put("task_status", StringUtils.isBlank(pointCode4) ? TaskStatusEnum.SURE_START.getCode() : TaskStatusEnum.SURE_END.getCode());
|
||||
} else {
|
||||
task1.put("task_status", StringUtils.isBlank(pointCode4) ? TaskStatusEnum.SURE_START.getCode() : TaskStatusEnum.START_AND_POINT.getCode());
|
||||
}
|
||||
task1.put("vehicle_code2", PackageInfoIvtEnum.AGV_ACTION_TYPE.code("普通任务"));
|
||||
task1.put("task_type", PackageInfoIvtEnum.TASK_TYPE.code("待检区移库任务"));
|
||||
task1.put("vehicle_code", shallowIvt.getContainer_name());
|
||||
task1.put("point_code1", shallowIvt.getPoint_code());
|
||||
task1.put("point_code2", pointCode4);
|
||||
task1.put("task_group_id", taskId);
|
||||
task1.put("material_code", shallowIvt.getIvt_status());
|
||||
shiftingTaskId = shiftingTask.createTask(task1);
|
||||
if (existTask != null) {
|
||||
LambdaUpdateWrapper<SchBaseTask> updateWrapper = new LambdaUpdateWrapper<SchBaseTask>()
|
||||
.eq(SchBaseTask::getTask_id, existTask.getTask_id());
|
||||
updateWrapper.set(SchBaseTask::getTask_group_id, shiftingTaskId);
|
||||
taskService.update(null, updateWrapper);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
@@ -16,6 +16,7 @@ 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.DjqToKzjhcwTask;
|
||||
import org.nl.b_lms.sch.tasks.first_floor_area.GzqToKzjhcwTask;
|
||||
import org.nl.b_lms.sch.tasks.first_floor_area.SendDjqKzjTask;
|
||||
import org.nl.b_lms.sch.tasks.first_floor_area.ShiftingTask;
|
||||
import org.nl.b_lms.storage_manage.ios.enums.IOSEnum;
|
||||
import org.nl.common.enums.PackageInfoIvtEnum;
|
||||
@@ -53,11 +54,14 @@ public class AutoSendVehicleToKzj extends Prun{
|
||||
private ShiftingTask shiftingTask;
|
||||
@Resource
|
||||
private IschBaseTaskService taskService;
|
||||
@Resource
|
||||
private SendDjqKzjTask sendDjqKzjTask;
|
||||
|
||||
//待检区或管制区->空载具缓存位补空
|
||||
public void run() {
|
||||
try {
|
||||
this.toKzjHcw();
|
||||
this.sendVehicleToDjqOrGzq(IOSEnum.IS_NOTANDYES.code("否"), null);
|
||||
}catch (Exception ex){
|
||||
log.error(ex.getMessage());
|
||||
}
|
||||
@@ -82,6 +86,17 @@ public class AutoSendVehicleToKzj extends Prun{
|
||||
if (existTask.size() <= 1) {
|
||||
List<BstIvtPackageinfoivt> empPoints = this.packageinfoivtService.selectEmpPoints(PackageInfoIvtEnum.POINT_STATUS.code("空载具缓存位"), PackageInfoIvtEnum.IVT_STATUS.code("空"));
|
||||
List<BstIvtPackageinfoivt> vehiclePoints = this.packageinfoivtService.selectEmpPoints(PackageInfoIvtEnum.POINT_STATUS.code("待检区"), PackageInfoIvtEnum.IVT_STATUS.code("空载具"));
|
||||
//如果待检区没有可用的空载具
|
||||
if (CollectionUtils.isEmpty(vehiclePoints)){
|
||||
List<SchBaseTask> taskList = taskService.list(new LambdaQueryWrapper<SchBaseTask>()
|
||||
.lt(SchBaseTask::getTask_status, TaskStatusEnum.FINISHED.getCode())
|
||||
.eq(SchBaseTask::getIs_delete, IOSEnum.IS_NOTANDYES.code("否"))
|
||||
.eq(SchBaseTask::getTask_type, "010909"));
|
||||
if (ObjectUtils.isEmpty(taskList)){
|
||||
vehiclePoints = packageinfoivtService
|
||||
.selectEmpPoints(PackageInfoIvtEnum.POINT_STATUS.code("装箱区"), PackageInfoIvtEnum.IVT_STATUS.code("空载具"));
|
||||
}
|
||||
}
|
||||
if (!CollectionUtils.isEmpty(empPoints) && !CollectionUtils.isEmpty(vehiclePoints) && existTask.size() < empPoints.size()) {
|
||||
//增加空洞判断
|
||||
//车 04 05 06
|
||||
@@ -111,6 +126,57 @@ public class AutoSendVehicleToKzj extends Prun{
|
||||
}
|
||||
}
|
||||
|
||||
@SneakyThrows
|
||||
public void sendVehicleToDjqOrGzq(String isCalling, String block) {
|
||||
log.info(THIS_CLASS + "-装箱区->待检区或管制区补空任务开始执行扫描。");
|
||||
RLock lock = redissonClient.getLock("todjq");
|
||||
boolean tryLock = lock.tryLock(0, TimeUnit.SECONDS);
|
||||
try {
|
||||
if (tryLock) {
|
||||
if (isCalling.equals(IOSEnum.IS_NOTANDYES.code("否"))) {
|
||||
//存在正在执行的行架任务
|
||||
List<SchBaseTask> taskList = taskService.list(new LambdaQueryWrapper<SchBaseTask>()
|
||||
.lt(SchBaseTask::getTask_status, TaskStatusEnum.FINISHED.getCode())
|
||||
.eq(SchBaseTask::getIs_delete, IOSEnum.IS_NOTANDYES.code("否"))
|
||||
.eq(SchBaseTask::getTask_type, "010909"));
|
||||
if (ObjectUtils.isNotEmpty(taskList)) {
|
||||
log.warn("当前装箱区存在执行的行架任务"+taskList.stream().map(SchBaseTask::getTask_code).collect(Collectors.joining(",")));
|
||||
return;
|
||||
}
|
||||
}
|
||||
//存在装箱区有空载具的点位
|
||||
List<BstIvtPackageinfoivt> zxqVehicleList = packageinfoivtService
|
||||
.selectEmpPoints(PackageInfoIvtEnum.POINT_STATUS.code("装箱区"), PackageInfoIvtEnum.IVT_STATUS.code("空载具"));
|
||||
List<BstIvtPackageinfoivt> djqEmpList = packageinfoivtService
|
||||
.selectEmpPoints(PackageInfoIvtEnum.POINT_STATUS.code("待检区"), PackageInfoIvtEnum.IVT_STATUS.code("空"));
|
||||
if (CollectionUtils.isEmpty(zxqVehicleList) || CollectionUtils.isEmpty(djqEmpList)) {
|
||||
log.info(THIS_CLASS + "装箱区或待检区没有可用点位");
|
||||
return;
|
||||
}
|
||||
JSONObject task = new JSONObject();
|
||||
task.put("task_type", PackageInfoIvtEnum.TASK_TYPE.code("补空(装箱区->待检区)"));
|
||||
task.put("point_code1", zxqVehicleList.get(0).getPoint_code());
|
||||
task.put("vehicle_code2", PackageInfoIvtEnum.AGV_ACTION_TYPE.code("普通任务"));
|
||||
task.put("task_status", TaskStatusEnum.SURE_END.getCode());
|
||||
task.put("point_code2", djqEmpList.get(0).getPoint_code());
|
||||
try {
|
||||
sendDjqKzjTask.createTask(task);
|
||||
}catch (Exception ex){
|
||||
log.error(THIS_CLASS+"任务创建失败"+ex.getMessage());
|
||||
}
|
||||
|
||||
} else {
|
||||
log.info(THIS_CLASS + "装箱区搬空任务正在创建被锁住");
|
||||
}
|
||||
} finally {
|
||||
if (lock.isLocked() && lock.isHeldByCurrentThread()) {
|
||||
lock.unlock();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
private void getPointCode(JSONObject task, String taskType) {
|
||||
List<BstIvtPackageinfoivt> packageList;
|
||||
|
||||
@@ -539,7 +539,7 @@ public class BakingServiceImpl implements BakingService {
|
||||
throw new BadRequestException("物料基础信息中无此物料!");
|
||||
}
|
||||
|
||||
//查询该母卷对应最近的一条入烘箱记录
|
||||
/*//查询该母卷对应最近的一条入烘箱记录
|
||||
JSONObject last_hot_mst = WQLObject.getWQLObject("ST_IVT_HotRegionIOMst").query("container_name = '" + jsonHotIvt.getString("container_name") + "' AND io_type = '0' order by confirm_time desc").uniqueResult(0);
|
||||
|
||||
JSONObject hotParam = new JSONObject();
|
||||
@@ -565,7 +565,7 @@ public class BakingServiceImpl implements BakingService {
|
||||
} else {
|
||||
hotParam.put("oven_time", last_hot_mst.getString("oven_time"));
|
||||
}
|
||||
this.createHotIoMst(hotParam);
|
||||
this.createHotIoMst(hotParam);*/
|
||||
}
|
||||
}
|
||||
JSONObject result = new JSONObject();
|
||||
|
||||
@@ -10,6 +10,7 @@ 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.auto.AutoSendToZxq;
|
||||
import org.nl.modules.wql.WQL;
|
||||
import org.nl.modules.wql.util.SpringContextHolder;
|
||||
import org.nl.wms.sch.tasks.InCoolIvtTask;
|
||||
import org.nl.wms.sch.tasks.InHotTask;
|
||||
import org.redisson.api.RLock;
|
||||
@@ -54,7 +55,6 @@ public class AutoIntoHotCacheTask {
|
||||
log.info("烘箱对接位:{} 没找到暂存位!", task.getPoint_code1());
|
||||
return;
|
||||
}
|
||||
new InHotTask().immediateNotifyAcs(task.getTask_id());
|
||||
|
||||
task.setTask_status(TaskStatusEnum.START_AND_POINT.getCode());
|
||||
task.setPoint_code2(cache_jo.getString("point_code"));
|
||||
@@ -62,6 +62,8 @@ public class AutoIntoHotCacheTask {
|
||||
task.setUpdate_time(DateUtil.now());
|
||||
task.setTask_type("010204");
|
||||
taskService.updateById(task);
|
||||
|
||||
SpringContextHolder.getBean(InHotTask.class).immediateNotifyAcs(task.getTask_id());
|
||||
}
|
||||
} else {
|
||||
log.info("定时对B1入暂存任务被锁住。");
|
||||
|
||||
Reference in New Issue
Block a user