opt:优化装箱区装箱任务完成再送空载具

This commit is contained in:
2024-07-16 22:28:12 +08:00
parent 419e821ffc
commit 2ae67fc99e
5 changed files with 35 additions and 37 deletions

View File

@@ -20,6 +20,7 @@ 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.dto.SchBaseTaskVO;
import org.nl.b_lms.sch.task.service.IschBaseTaskService;
import org.nl.b_lms.sch.tasks.first_floor_area.auto.AutoSendVehicleToDjq;
import org.nl.b_lms.storage_manage.database.service.dao.BstIvtBoxinfo;
import org.nl.b_lms.storage_manage.database.service.dao.mapper.BstIvtBoxinfoMapper;
import org.nl.b_lms.storage_manage.ios.enums.IOSEnum;
@@ -49,7 +50,8 @@ import java.util.List;
@Slf4j
public class ZxDjwTask extends AbstractAcsTask {
@Resource
private AutoSendVehicleToDjq autoSendVehicleToDjq;
@Resource
private BstIvtBoxinfoMapper bstIvtBoxinfoMapper;
@Resource
@@ -118,31 +120,31 @@ public class ZxDjwTask extends AbstractAcsTask {
} else if (StrUtil.isEmpty(containerInfo.getContainer_name())) {
throw new BadRequestException("子卷号不能为空!");
}
//1.判断是否最后一个子卷相同木箱号的子卷包装关系如果生成状态0,且个数等于1且子卷号等于当前载具号就是最后一个子卷
List<PdmBiSubpackagerelation> packagerelationList = subpackageRelationService.list(new LambdaQueryWrapper<PdmBiSubpackagerelation>().eq(PdmBiSubpackagerelation::getPackage_box_sn, schBaseTask.getVehicle_code2()).eq(PdmBiSubpackagerelation::getStatus, "0"));
if (packagerelationList.size() == 1 && packagerelationList.get(0).getContainer_name().equals(schBaseTask.getVehicle_code())) {
//4.更改木箱信息为已装箱:1
//2.更改木箱信息为已装箱:1
BstIvtBoxinfo bstIvtBoxinfo = bstIvtBoxinfoMapper.selectOne(new LambdaQueryWrapper<BstIvtBoxinfo>().eq(BstIvtBoxinfo::getBox_no, schBaseTask.getVehicle_code2()).ne(BstIvtBoxinfo::getIs_packing, "1"));
if (bstIvtBoxinfo == null) {
throw new BadRequestException("子卷包装关系为已装箱或找该任务的木箱号不存在!");
}
bstIvtBoxinfo.setIs_packing(IOSEnum.IS_NOTANDYES.code(""));
bstIvtBoxinfoMapper.updateById(bstIvtBoxinfo);
//5.最后一个子卷,清除装箱位木箱信息
//3.最后一个子卷,清除装箱位木箱信息
packageinfoivtService.update(null, new UpdateWrapper<BstIvtPackageinfoivt>().set("ivt_status", PackageInfoIvtEnum.IVT_STATUS.code("")).set("container_name", null).eq("point_code", schBaseTask.getPoint_code2()));
//4.创建装箱区->待检区或管制区补空任务
autoSendVehicleToDjq.sendVehicleToDjqOrGzq1(IOSEnum.IS_NOTANDYES.code(""));
}
//6.改变子卷包装状态为已装箱1
//5.改变子卷包装状态为已装箱1
PdmBiSubpackagerelation pdmBiSubpackagerelation = subpackageRelationService
.getOne(new LambdaUpdateWrapper<PdmBiSubpackagerelation>().eq(PdmBiSubpackagerelation::getContainer_name, schBaseTask.getVehicle_code()), false);
pdmBiSubpackagerelation.setStatus(IOSEnum.IS_NOTANDYES.code(""));
subpackageRelationService.updateById(pdmBiSubpackagerelation);
//2.更改任务状态为完成
//6.更改任务状态为完成
updateWrapper.set(SchBaseTask::getTask_status, TaskStatusEnum.FINISHED.getCode());
//3.改变起点点位状态
//7.改变起点点位状态
packageinfoivtService.update(null, new UpdateWrapper<BstIvtPackageinfoivt>().set("ivt_status", PackageInfoIvtEnum.IVT_STATUS.code("空载具")).set("container_name", null).eq("point_code", schBaseTask.getPoint_code1()));
//创建装箱区->空载具缓存位补空任务
//kzjhcwTask.toKzjHcw(schBaseTask.getPoint_code1());
}
// 取消
if (status.equals(IOSEnum.IS_NOTANDYES.code(""))) {

View File

@@ -54,7 +54,7 @@ public class AutoSendGzqToDjq {
JSONObject task1 = new JSONObject();
String pointCode3;
String pointCode4;
List<BstIvtPackageinfoivt> gzqIvtList = packageinfoivtService.checkEndPointTask(PackageInfoIvtEnum.POINT_STATUS.code("管制区"), PackageInfoIvtEnum.IVT_STATUS.code("空载具"), PackageInfoIvtEnum.TASK_POINT_TYPE.code("取货任务"), PackageInfoIvtEnum.SORT_TYPE.code(""), "");
List<BstIvtPackageinfoivt> gzqIvtList = packageinfoivtService.checkEndPointTask(PackageInfoIvtEnum.POINT_STATUS.code("管制区"), PackageInfoIvtEnum.IVT_STATUS.code("空载具"), PackageInfoIvtEnum.TASK_POINT_TYPE.code("取货任务"), PackageInfoIvtEnum.SORT_TYPE.code(""), "");
//todo 新增NG卷放置临时管制区135136只取空不补空
List<BstIvtPackageinfoivt> ivtLists =
gzqIvtList.stream()
@@ -68,7 +68,7 @@ public class AutoSendGzqToDjq {
PackageInfoIvtEnum.POINT_STATUS.code("待检区"),
PackageInfoIvtEnum.IVT_STATUS.code(""),
PackageInfoIvtEnum.TASK_POINT_TYPE.code("放货任务"),
PackageInfoIvtEnum.SORT_TYPE.code(""),
PackageInfoIvtEnum.SORT_TYPE.code(""),
""
);
if (CollectionUtils.isNotEmpty(packageList)) {
@@ -84,12 +84,12 @@ public class AutoSendGzqToDjq {
}
}
//管制区->待检区送合格品任务
List<BstIvtPackageinfoivt> gzqPackageinfoivtList = packageinfoivtService.checkEndPointTask(PackageInfoIvtEnum.POINT_STATUS.code("管制区"), PackageInfoIvtEnum.IVT_STATUS.code("合格品"), PackageInfoIvtEnum.TASK_POINT_TYPE.code("取货任务"), PackageInfoIvtEnum.SORT_TYPE.code(""), "");
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(""), "");
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;
}

View File

@@ -1,24 +1,26 @@
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 lombok.RequiredArgsConstructor;
import lombok.SneakyThrows;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils;
import org.nl.b_lms.pdm.subpackagerelation.service.IpdmBiSubpackagerelationService;
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.SendDjqKzjTask;
import org.nl.b_lms.sch.tasks.first_floor_area.SendGzqKzjTask;
import org.nl.b_lms.storage_manage.ios.enums.IOSEnum;
import org.nl.common.enums.PackageInfoIvtEnum;
import org.nl.wms.sch.manage.TaskStatusEnum;
import org.redisson.api.RLock;
import org.redisson.api.RedissonClient;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.concurrent.TimeUnit;
import java.util.stream.Collectors;
@@ -41,7 +43,8 @@ public class AutoSendVehicleToDjq {
private SendGzqKzjTask sendGzqKzjTask;
@Resource
private IbstIvtPackageinfoivtService ibstIvtPackageinfoivtService;
private IpdmBiSubpackagerelationService ipdmBiSubpackagerelationService;
@Resource
private IbstIvtPackageinfoivtService packageinfoivtService;
@@ -49,11 +52,11 @@ public class AutoSendVehicleToDjq {
//装箱区->待检区或管制区补空载具
public void run() {
this.sendVehicleToDjqOrGzq1();
this.sendVehicleToDjqOrGzq1(IOSEnum.IS_NOTANDYES.code(""));
}
@SneakyThrows
public void sendVehicleToDjqOrGzq1() {
public void sendVehicleToDjqOrGzq1(String isCalling) {
log.info(THIS_CLASS + "-装箱区->待检区或管制区补空任务开始执行扫描。");
RLock lock = redissonClient.getLock(THIS_CLASS);
boolean tryLock = lock.tryLock(0, TimeUnit.SECONDS);
@@ -61,11 +64,15 @@ public class AutoSendVehicleToDjq {
if (tryLock) {
String pointCode2;
JSONObject task = new JSONObject();
//存在装箱任务,暂不补空
List<String> taskTypes = new ArrayList<>(Collections.singletonList(PackageInfoIvtEnum.TASK_TYPE.code("装箱区->装箱对接位")));
List<SchBaseTask> existTaskList = taskService.getExistTasks(taskTypes);
if (CollectionUtils.isNotEmpty(existTaskList)) {
return;
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, "010704"));
if (CollectionUtils.isNotEmpty(taskList)) {
return;
}
}
//存在装箱区有空载具的点位
List<BstIvtPackageinfoivt> zxqIvtList = packageinfoivtService.checkEndPointTask(PackageInfoIvtEnum.POINT_STATUS.code("装箱区"), PackageInfoIvtEnum.IVT_STATUS.code("空载具"), PackageInfoIvtEnum.TASK_POINT_TYPE.code("取货任务"), "", "");
@@ -78,7 +85,7 @@ public class AutoSendVehicleToDjq {
// } else {
// pointCode2 = getPointCode(task, PackageInfoIvtEnum.TASK_TYPE.code("补空(装箱区->管制区)"));
// }
//todo 新增NG卷放置临时管制区135136只取空不补空
//todo 新增NG卷放置临时管制区135136优先去补管制区
pointCode2 = getPointCode(task, PackageInfoIvtEnum.TASK_TYPE.code("补空(装箱区->管制区)"));
//去装箱区搬运空载具
if (pointCode2 != null) {

View File

@@ -158,12 +158,10 @@ public class AutoSendZxToDjw {
//托盘类型 1小托盘 2大托盘
param.put("containerType", bstIvtBoxinfo.getVehicle_type());
//木箱计划放入子卷数量
//param.put("boxNo", relationList.get(0).getQuanlity_in_box());
//todo 木箱计划放入子卷数量暂时默认1
param.put("boxNo", relationList.get(0).getQuanlity_in_box());
Integer num = getNumFromRedis();
num = num + 1;
if (num.equals(Integer.parseInt(bstIvtBoxinfo.getNum()))) {
if (num.equals(Integer.parseInt(relationList.get(0).getQuanlity_in_box().toString()))) {
param.put("lastOne", IOSEnum.IS_NOTANDYES.code(""));
num = 0;
} else {
@@ -171,15 +169,6 @@ public class AutoSendZxToDjw {
}
// 更新计数
redisUtils.set(NUM_KEY, num);
//NUM = NUM + 1;
// if (NUM == Integer.parseInt(bstIvtBoxinfo.getNum())) {
// //todo 查询是否为最后一个子卷暂时默认1
// param.put("lastOne", IOSEnum.IS_NOTANDYES.code("是"));
// NUM = 0;
// } else {
// //todo 查询是否为最后一个子卷暂时默认1
// param.put("lastOne", IOSEnum.IS_NOTANDYES.code("否"));
// }
jo.put("request_param", param.toString());
zxDjwTask.createTask(jo);
// try {

View File

@@ -27,7 +27,7 @@ public class ManualSendToZxq {
//待检区->装箱区agv手动搬运任务
public void run() {
this.sendDjqToZxq();
//this.sendDjqToZxq();
}
/**