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.dao.SchBaseTask;
import org.nl.b_lms.sch.task.dto.SchBaseTaskVO; import org.nl.b_lms.sch.task.dto.SchBaseTaskVO;
import org.nl.b_lms.sch.task.service.IschBaseTaskService; 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.BstIvtBoxinfo;
import org.nl.b_lms.storage_manage.database.service.dao.mapper.BstIvtBoxinfoMapper; import org.nl.b_lms.storage_manage.database.service.dao.mapper.BstIvtBoxinfoMapper;
import org.nl.b_lms.storage_manage.ios.enums.IOSEnum; import org.nl.b_lms.storage_manage.ios.enums.IOSEnum;
@@ -49,7 +50,8 @@ import java.util.List;
@Slf4j @Slf4j
public class ZxDjwTask extends AbstractAcsTask { public class ZxDjwTask extends AbstractAcsTask {
@Resource
private AutoSendVehicleToDjq autoSendVehicleToDjq;
@Resource @Resource
private BstIvtBoxinfoMapper bstIvtBoxinfoMapper; private BstIvtBoxinfoMapper bstIvtBoxinfoMapper;
@Resource @Resource
@@ -118,31 +120,31 @@ public class ZxDjwTask extends AbstractAcsTask {
} else if (StrUtil.isEmpty(containerInfo.getContainer_name())) { } else if (StrUtil.isEmpty(containerInfo.getContainer_name())) {
throw new BadRequestException("子卷号不能为空!"); throw new BadRequestException("子卷号不能为空!");
} }
//1.判断是否最后一个子卷相同木箱号的子卷包装关系如果生成状态0,且个数等于1且子卷号等于当前载具号就是最后一个子卷 //1.判断是否最后一个子卷相同木箱号的子卷包装关系如果生成状态0,且个数等于1且子卷号等于当前载具号就是最后一个子卷
List<PdmBiSubpackagerelation> packagerelationList = subpackageRelationService.list(new LambdaQueryWrapper<PdmBiSubpackagerelation>().eq(PdmBiSubpackagerelation::getPackage_box_sn, schBaseTask.getVehicle_code2()).eq(PdmBiSubpackagerelation::getStatus, "0")); 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())) { 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")); BstIvtBoxinfo bstIvtBoxinfo = bstIvtBoxinfoMapper.selectOne(new LambdaQueryWrapper<BstIvtBoxinfo>().eq(BstIvtBoxinfo::getBox_no, schBaseTask.getVehicle_code2()).ne(BstIvtBoxinfo::getIs_packing, "1"));
if (bstIvtBoxinfo == null) { if (bstIvtBoxinfo == null) {
throw new BadRequestException("子卷包装关系为已装箱或找该任务的木箱号不存在!"); throw new BadRequestException("子卷包装关系为已装箱或找该任务的木箱号不存在!");
} }
bstIvtBoxinfo.setIs_packing(IOSEnum.IS_NOTANDYES.code("")); bstIvtBoxinfo.setIs_packing(IOSEnum.IS_NOTANDYES.code(""));
bstIvtBoxinfoMapper.updateById(bstIvtBoxinfo); 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())); 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 PdmBiSubpackagerelation pdmBiSubpackagerelation = subpackageRelationService
.getOne(new LambdaUpdateWrapper<PdmBiSubpackagerelation>().eq(PdmBiSubpackagerelation::getContainer_name, schBaseTask.getVehicle_code()), false); .getOne(new LambdaUpdateWrapper<PdmBiSubpackagerelation>().eq(PdmBiSubpackagerelation::getContainer_name, schBaseTask.getVehicle_code()), false);
pdmBiSubpackagerelation.setStatus(IOSEnum.IS_NOTANDYES.code("")); pdmBiSubpackagerelation.setStatus(IOSEnum.IS_NOTANDYES.code(""));
subpackageRelationService.updateById(pdmBiSubpackagerelation); subpackageRelationService.updateById(pdmBiSubpackagerelation);
//2.更改任务状态为完成 //6.更改任务状态为完成
updateWrapper.set(SchBaseTask::getTask_status, TaskStatusEnum.FINISHED.getCode()); 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())); 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(""))) { if (status.equals(IOSEnum.IS_NOTANDYES.code(""))) {

View File

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

View File

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

View File

@@ -158,12 +158,10 @@ public class AutoSendZxToDjw {
//托盘类型 1小托盘 2大托盘 //托盘类型 1小托盘 2大托盘
param.put("containerType", bstIvtBoxinfo.getVehicle_type()); 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()); param.put("boxNo", relationList.get(0).getQuanlity_in_box());
Integer num = getNumFromRedis(); Integer num = getNumFromRedis();
num = num + 1; 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("")); param.put("lastOne", IOSEnum.IS_NOTANDYES.code(""));
num = 0; num = 0;
} else { } else {
@@ -171,15 +169,6 @@ public class AutoSendZxToDjw {
} }
// 更新计数 // 更新计数
redisUtils.set(NUM_KEY, num); 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()); jo.put("request_param", param.toString());
zxDjwTask.createTask(jo); zxDjwTask.createTask(jo);
// try { // try {

View File

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