From d30e25a8cd7ed03a80fcfa84d87a6d4be7a4bf66 Mon Sep 17 00:00:00 2001 From: liyongde <1419499670@qq.com> Date: Mon, 30 Jun 2025 10:30:34 +0800 Subject: [PATCH] =?UTF-8?q?opt:=20=E5=A4=87=E8=B4=A7=E5=8C=BA=E3=80=81?= =?UTF-8?q?=E9=80=81=E8=BD=B4=EF=BC=88=E5=8E=BB=E9=99=A4=E5=88=86=E5=88=87?= =?UTF-8?q?=E8=AE=A1=E5=88=92=E7=8A=B6=E6=80=81=E6=A0=A1=E9=AA=8C=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/IMdPbPapervehicleService.java | 7 ++ .../impl/MdPbPapervehicleServiceImpl.java | 12 +++ .../service/IBstIvtStockingivtService.java | 9 +++ .../dao/mapper/BstIvtStockingivtMapper.java | 13 +++- .../dao/mapper/BstIvtStockingivtMapper.xml | 20 +++++ .../impl/BstIvtStockingivtServiceImpl.java | 5 ++ .../IPdmBiSlittingproductionplanService.java | 2 + ...dmBiSlittingproductionplanServiceImpl.java | 23 ++++++ .../tasks/slitter/StockAreaCallTubeTask.java | 4 +- .../slitter/StockAreaSendVehicleTask.java | 31 +++++++- .../tasks/slitter/TrussCallAirShaftTask.java | 11 +-- .../slitter/auto/AutoCallAirShaftTask.java | 78 ++++++++++++++++--- .../slitter/auto/AutoSendAirShaftAgvTask.java | 9 +-- .../slitter/mapper/dto/BhTubePointDto.java | 8 +- .../service/impl/SlitterServiceImpl.java | 9 --- .../system/service/quartz/task/TestTask.java | 17 +++- 16 files changed, 223 insertions(+), 35 deletions(-) diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/bst/ivt/papervehicle/service/IMdPbPapervehicleService.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/bst/ivt/papervehicle/service/IMdPbPapervehicleService.java index cee710038..8ad3f4768 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/bst/ivt/papervehicle/service/IMdPbPapervehicleService.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/bst/ivt/papervehicle/service/IMdPbPapervehicleService.java @@ -69,4 +69,11 @@ public interface IMdPbPapervehicleService extends IService { * @return */ List getInfoByTask(); + + /** + * 通过载具获取管芯编码 + * @param vehicleCode + * @return + */ + List getTubeCodesByVehicle(String vehicleCode); } diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/bst/ivt/papervehicle/service/impl/MdPbPapervehicleServiceImpl.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/bst/ivt/papervehicle/service/impl/MdPbPapervehicleServiceImpl.java index 143862573..1e8a362c2 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/bst/ivt/papervehicle/service/impl/MdPbPapervehicleServiceImpl.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/bst/ivt/papervehicle/service/impl/MdPbPapervehicleServiceImpl.java @@ -23,6 +23,7 @@ import javax.annotation.Resource; import java.util.List; import java.util.Map; import java.util.Set; +import java.util.stream.Collectors; /** * @description 服务实现 @@ -106,4 +107,15 @@ public class MdPbPapervehicleServiceImpl extends ServiceImpl getTubeCodesByVehicle(String vehicleCode) { + LambdaQueryWrapper lam = new LambdaQueryWrapper<>(); + lam.eq(MdPbPapervehicle::getVehicle_code, vehicleCode); + List list = list(lam); + if (list.size() == 0) { + return null; + } + return list.stream().map(MdPbPapervehicle::getMaterial_code).distinct().collect(Collectors.toList()); + } + } diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/bst/ivt/stockingivt/service/IBstIvtStockingivtService.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/bst/ivt/stockingivt/service/IBstIvtStockingivtService.java index ba5854fc6..23e590a41 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/bst/ivt/stockingivt/service/IBstIvtStockingivtService.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/bst/ivt/stockingivt/service/IBstIvtStockingivtService.java @@ -111,6 +111,15 @@ public interface IBstIvtStockingivtService extends IService { */ List getNeedPaperTubesPoint(String pointType, List tubes, String location); + /** + * 分组聚合获取需要管芯数组的托盘位置(搬运中的数据) + * @param pointType + * @param tube + * @param location + * @return + */ + List getNeedPaperTubePointInTasking(String pointType, String tube, String location); + /** * 获取3个托盘的数据 * @param location diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/bst/ivt/stockingivt/service/dao/mapper/BstIvtStockingivtMapper.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/bst/ivt/stockingivt/service/dao/mapper/BstIvtStockingivtMapper.java index dcbb5e257..eebb68b15 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/bst/ivt/stockingivt/service/dao/mapper/BstIvtStockingivtMapper.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/bst/ivt/stockingivt/service/dao/mapper/BstIvtStockingivtMapper.java @@ -38,7 +38,7 @@ public interface BstIvtStockingivtMapper extends BaseMapper { /** * 分组聚合获取备货区中数量够用的的货位 - * @param pointType 类型:0暂存位置,1靠近分切机 + * @param pointType 类型:2暂存位置,1靠近桁架 * @param tube 纸管号 两个都是一样的,因此拿一个就行 * @param location 位置:0上区域,1下区域 * @return / @@ -46,7 +46,7 @@ public interface BstIvtStockingivtMapper extends BaseMapper { List getNeedPaperTubePoint(String pointType, String tube, String location); /** * 分组聚合获取备货区中数量够用的的货位 - * @param pointType 类型:0暂存位置,1靠近分切机 + * @param pointType 类型:2暂存位置,1靠近桁架 * @param tubes 纸管号 两个不一定一样的 * @param location 位置:0上区域,1下区域 * @return / @@ -56,5 +56,12 @@ public interface BstIvtStockingivtMapper extends BaseMapper { List getCanMovePointList(String location, String pointType); List getMoveTaskPoints(); - + /** + * 分组聚合获取备货区中数量够用的的货位(任务中) + * @param pointType 类型:2暂存位置,1靠近桁架 + * @param tube 纸管号 两个都是一样的,因此拿一个就行 + * @param location 位置:0上区域,1下区域 + * @return / + */ + List getNeedPaperTubePointInTasking(String pointType, String tube, String location); } diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/bst/ivt/stockingivt/service/dao/mapper/BstIvtStockingivtMapper.xml b/lms/nladmin-system/src/main/java/org/nl/b_lms/bst/ivt/stockingivt/service/dao/mapper/BstIvtStockingivtMapper.xml index faca57a91..7cd6d3991 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/bst/ivt/stockingivt/service/dao/mapper/BstIvtStockingivtMapper.xml +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/bst/ivt/stockingivt/service/dao/mapper/BstIvtStockingivtMapper.xml @@ -140,4 +140,24 @@ AND t.task_status ]]> '07' AND t.is_delete = '0' + diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/bst/ivt/stockingivt/service/impl/BstIvtStockingivtServiceImpl.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/bst/ivt/stockingivt/service/impl/BstIvtStockingivtServiceImpl.java index 0f7024b73..41d162682 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/bst/ivt/stockingivt/service/impl/BstIvtStockingivtServiceImpl.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/bst/ivt/stockingivt/service/impl/BstIvtStockingivtServiceImpl.java @@ -321,6 +321,11 @@ public class BstIvtStockingivtServiceImpl extends ServiceImpl getNeedPaperTubePointInTasking(String pointType, String tube, String location) { + return bstIvtStockingivtMapper.getNeedPaperTubePointInTasking(pointType, tube, location); + } + @Override public List getCanMovePointList(String location, String pointType) { return bstIvtStockingivtMapper.getCanMovePointList(location, pointType); diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/pdm/bi/slittingproductionplan/service/IPdmBiSlittingproductionplanService.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/pdm/bi/slittingproductionplan/service/IPdmBiSlittingproductionplanService.java index 284c52eda..616fd1bf9 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/pdm/bi/slittingproductionplan/service/IPdmBiSlittingproductionplanService.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/pdm/bi/slittingproductionplan/service/IPdmBiSlittingproductionplanService.java @@ -152,4 +152,6 @@ public interface IPdmBiSlittingproductionplanService extends IService getXnPlanByDevice(String deviceCode); + + List getPlansByDto(SlitterPlanDistinctDto dto); } diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/pdm/bi/slittingproductionplan/service/impl/PdmBiSlittingproductionplanServiceImpl.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/pdm/bi/slittingproductionplan/service/impl/PdmBiSlittingproductionplanServiceImpl.java index 218a276ed..bc81b5c00 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/pdm/bi/slittingproductionplan/service/impl/PdmBiSlittingproductionplanServiceImpl.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/pdm/bi/slittingproductionplan/service/impl/PdmBiSlittingproductionplanServiceImpl.java @@ -14,6 +14,7 @@ import lombok.extern.slf4j.Slf4j; import org.nl.b_lms.pdm.bi.slittingproductionplan.service.IPdmBiSlittingproductionplanService; import org.nl.b_lms.pdm.bi.slittingproductionplan.service.dao.PdmBiSlittingproductionplan; import org.nl.b_lms.pdm.bi.slittingproductionplan.service.dao.mapper.PdmBiSlittingproductionplanMapper; +import org.nl.b_lms.sch.tasks.slitter.constant.SlitterConstant; import org.nl.b_lms.sch.tasks.slitter.mapper.dto.SlitterPlanDistinctDto; import org.nl.b_lms.sch.tasks.slitter.util.SlitterTaskUtil; import org.nl.b_lms.storage_manage.ios.enums.IOSEnum; @@ -212,4 +213,26 @@ public class PdmBiSlittingproductionplanServiceImpl extends ServiceImpl getPlansByDto(SlitterPlanDistinctDto dto) { + List checkPlans = list(new LambdaQueryWrapper() + .eq(PdmBiSlittingproductionplan::getResource_name, dto.getResource_name()) + .eq(PdmBiSlittingproductionplan::getParent_container_name, dto.getParent_container_name()) + .eq(PdmBiSlittingproductionplan::getUp_or_down, dto.getUp_or_down()) + .eq(PdmBiSlittingproductionplan::getSplit_group, dto.getSplit_group()) + .eq(PdmBiSlittingproductionplan::getIs_delete, SlitterConstant.SLITTER_NO) + .eq(PdmBiSlittingproductionplan::getIs_paper_ok, SlitterConstant.SLITTER_YES)); + if (checkPlans.size() == 0) { + // 可能是改切,所以换成restruct_container_name来使用 + checkPlans = list(new LambdaQueryWrapper() + .eq(PdmBiSlittingproductionplan::getResource_name, dto.getResource_name()) + .eq(PdmBiSlittingproductionplan::getRestruct_container_name, dto.getParent_container_name()) + .eq(PdmBiSlittingproductionplan::getUp_or_down, dto.getUp_or_down()) + .eq(PdmBiSlittingproductionplan::getSplit_group, dto.getSplit_group()) + .eq(PdmBiSlittingproductionplan::getIs_delete, SlitterConstant.SLITTER_NO) + .eq(PdmBiSlittingproductionplan::getIs_paper_ok, SlitterConstant.SLITTER_YES)); + } + return checkPlans; + } } diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/slitter/StockAreaCallTubeTask.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/slitter/StockAreaCallTubeTask.java index af17ec2f4..31f700348 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/slitter/StockAreaCallTubeTask.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/slitter/StockAreaCallTubeTask.java @@ -119,7 +119,9 @@ public class StockAreaCallTubeTask extends AbstractAcsTask { SchBaseTask task = new SchBaseTask(); task.setTask_id(IdUtil.getSnowflake(1, 1).nextIdStr()); task.setTask_code(IdUtil.getSnowflake(1, 1).nextIdStr()); - task.setTask_status(TaskStatusEnum.START_AND_POINT.getCode()); + task.setTask_status(ObjectUtil.isNotEmpty(form.getString("task_status")) + ? form.getString("task_status") + : TaskStatusEnum.START_AND_POINT.getCode()); task.setPoint_code1(form.getString("point_code1")); task.setPoint_code2(form.getString("point_code2")); task.setVehicle_code(form.getString("vehicle_code")); diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/slitter/StockAreaSendVehicleTask.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/slitter/StockAreaSendVehicleTask.java index fa6a9f244..e30a4f8cd 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/slitter/StockAreaSendVehicleTask.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/slitter/StockAreaSendVehicleTask.java @@ -21,6 +21,7 @@ import org.nl.common.utils.TaskUtils; import org.nl.modules.common.exception.BadRequestException; import org.nl.modules.wql.WQL; import org.nl.modules.wql.core.bean.WQLObject; +import org.nl.modules.wql.util.SpringContextHolder; import org.nl.wms.sch.AcsTaskDto; import org.nl.wms.sch.manage.AbstractAcsTask; import org.nl.wms.sch.manage.TaskStatusEnum; @@ -30,6 +31,8 @@ import org.springframework.transaction.annotation.Transactional; import java.util.ArrayList; import java.util.List; +import java.util.stream.Collectors; +import java.util.stream.Stream; import static org.nl.b_lms.sch.tasks.slitter.util.SlitterTaskUtil.doSavePaperInfos; @@ -129,6 +132,30 @@ public class StockAreaSendVehicleTask extends AbstractAcsTask { .eq(MdPbPapervehicle::getVehicle_code, callPoint.getString("vehicle_code"))); doSavePaperInfos(paperList, param); stockAreaCallTubeTask.createTask(param); + // 如果有半条任务,要看看是不是这个任务的后置任务,是的话需要修改状态并下发。 + List tasks = taskService.list(new LambdaQueryWrapper() + .in(SchBaseTask::getTask_type, Stream.of(SlitterEnum.TASK_TYPE.code("备货区送载具"), SlitterEnum.TASK_TYPE.code("备货区送纸管")).collect(Collectors.toList())) + .eq(SchBaseTask::getTask_status, TaskStatusEnum.SURE_START.getCode()) + .eq(SchBaseTask::getIs_delete, "0") + .orderByAsc(SchBaseTask::getCreate_time)); + for (SchBaseTask baseTask : tasks) { + JSONObject halfRequestParam = JSONObject.parseObject(baseTask.getRequest_param()); + if (ObjectUtil.isEmpty(halfRequestParam) || ObjectUtil.isEmpty(halfRequestParam.getString("task_id"))) { + break; + } + String taskId = halfRequestParam.getString("task_id"); + if (task.getTask_id().equals(taskId)) { + baseTask.setTask_status(TaskStatusEnum.START_AND_POINT.getCode()); + baseTask.setRemark("前置任务触发后置任务"); + taskService.updateById(baseTask); + if (THIS_CLASS.equals(baseTask.getHandle_class())) { + this.immediateNotifyAcs(null); + } + if (StockAreaCallTubeTask.class.getName().equals(baseTask.getHandle_class())) { + stockAreaCallTubeTask.immediateNotifyAcs(null); + } + } + } } } // 取消 @@ -147,7 +174,9 @@ public class StockAreaSendVehicleTask extends AbstractAcsTask { SchBaseTask task = new SchBaseTask(); task.setTask_id(IdUtil.getSnowflake(1, 1).nextIdStr()); task.setTask_code(IdUtil.getSnowflake(1, 1).nextIdStr()); - task.setTask_status(TaskStatusEnum.START_AND_POINT.getCode()); + task.setTask_status(ObjectUtil.isNotEmpty(form.getString("task_status")) + ? form.getString("task_status") + : TaskStatusEnum.START_AND_POINT.getCode()); task.setPoint_code1(form.getString("point_code1")); task.setPoint_code2(form.getString("point_code2")); task.setPoint_code3(ObjectUtil.isNotEmpty(callPoint) diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/slitter/TrussCallAirShaftTask.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/slitter/TrussCallAirShaftTask.java index 8940903ee..4b2ca1892 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/slitter/TrussCallAirShaftTask.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/slitter/TrussCallAirShaftTask.java @@ -121,6 +121,7 @@ public class TrussCallAirShaftTask extends AbstractAcsTask { .set(BstIvtShafttubeivt::getUpdate_time, DateUtil.now()) .eq(BstIvtShafttubeivt::getPoint_code, task.getPoint_code2()); shafttubeivtService.update(shaftLamUpdate); + // todo: 有问题 if (ObjectUtil.isEmpty(startPointObj.getQzz_no1()) && ObjectUtil.isEmpty(startPointObj.getQzz_no2())) { // 查找半条任务,并创建下发 List list = taskService.list(new LambdaQueryWrapper() @@ -133,19 +134,19 @@ public class TrussCallAirShaftTask extends AbstractAcsTask { if ("010814".equals(schBaseTask.getTask_type())) { JSONObject requestParam = JSONObject.parseObject(schBaseTask.getRequest_param()); if (ObjectUtil.isNotEmpty(requestParam.getString("needPosition")) && "A".equals(requestParam.getString("needPosition"))) { - schBaseTask.setPoint_code2(task.getPoint_code1() + "_" + requestParam.getString("needPosition")); + schBaseTask.setPoint_code2(task.getPoint_code1().split("_")[0] + "_" + requestParam.getString("needPosition")); } if (ObjectUtil.isNotEmpty(requestParam.getString("needPosition")) && "B".equals(requestParam.getString("needPosition"))) { - schBaseTask.setPoint_code2(task.getPoint_code1() + "_" + requestParam.getString("needPosition")); + schBaseTask.setPoint_code2(task.getPoint_code1().split("_")[0] + "_" + requestParam.getString("needPosition")); } - schBaseTask.setRemark("AGV取货完成触发!"); + schBaseTask.setRemark("桁架任务完成触发!"); schBaseTask.setUpdate_time(DateUtil.now()); schBaseTask.setTask_status(TaskStatusEnum.START_AND_POINT.getCode()); taskService.updateById(schBaseTask); trussSendAirShaftTask.immediateNotifyAcs(schBaseTask.getTask_id()); } else if ("010812".equals(schBaseTask.getTask_type())) { - schBaseTask.setRemark("AGV取货完成触发!"); - schBaseTask.setPoint_code2(task.getPoint_code1() + "_A"); + schBaseTask.setRemark("桁架任务完成触发!"); + schBaseTask.setPoint_code2(task.getPoint_code1().split("_")[0] + "_A"); schBaseTask.setUpdate_time(DateUtil.now()); schBaseTask.setTask_status(TaskStatusEnum.START_AND_POINT.getCode()); taskService.updateById(schBaseTask); diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/slitter/auto/AutoCallAirShaftTask.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/slitter/auto/AutoCallAirShaftTask.java index 508a33d03..01fcb9649 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/slitter/auto/AutoCallAirShaftTask.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/slitter/auto/AutoCallAirShaftTask.java @@ -41,6 +41,7 @@ import org.nl.system.service.notice.ISysNoticeService; import org.nl.system.service.param.ISysParamService; import org.nl.system.service.param.dao.Param; import org.nl.wms.ext.acs.service.WmsToAcsService; +import org.nl.wms.sch.manage.TaskStatusEnum; import org.redisson.api.RLock; import org.redisson.api.RedissonClient; import org.springframework.beans.factory.annotation.Autowired; @@ -315,9 +316,9 @@ public class AutoCallAirShaftTask extends Prun { stepErrorInfo.add("呼叫出轴失败-穿拔轴" + empty.getPoint_code() + "不进行套轴,跳过!"); return; } - toCallAgvMovePaperTube(needPlans, location, empty); // 保存所需要的分切计划数据到点位上(套轴对接位)更新分切计划 saveCutPlanMessage(empty, needPlans, qzzSize); + toCallAgvMovePaperTube(needPlans, location, empty, plans); return; } // 查找一条没任务的点位 @@ -396,7 +397,7 @@ public class AutoCallAirShaftTask extends Prun { // 拔管数量 param.put("pullCount", oldPlans.size()); param.put("containers", oldPlans.stream().map(PdmBiSlittingproductionplan::getContainer_name).collect(Collectors.toList())); - toCallAgvMovePaperTube(needPlans, location, empty); + toCallAgvMovePaperTube(needPlans, location, empty, plans); trussCallAirShaftTask.createTask(param); // 将分切计划is_paper_ok 1(纸管已经准备好) -> 2(已经套轴) needPlans.forEach(p -> { @@ -528,8 +529,10 @@ public class AutoCallAirShaftTask extends Prun { *

默认双管芯尺寸一致 * @param needPlans 所需要套轴的分切计划 * @param location 位置 + * @param empty 穿拔轴点位 + * @param plans 总计划 */ - public Boolean toCallAgvMovePaperTube(List needPlans, String location, BstIvtShafttubeivt empty) { + public Boolean toCallAgvMovePaperTube(List needPlans, String location, BstIvtShafttubeivt empty, List plans) { // 1 前置参数获取 // 最多两根 List tubes = needPlans.stream().map(plan -> { @@ -608,12 +611,25 @@ public class AutoCallAirShaftTask extends Prun { } // 2.3 查找type=0的位置(待命的托盘)中是否存在(需要判断的是单独一个托盘) 校验了不在搬运中 List stockingivtList = stockingivtService.getNeedPaperTubePoint("0", tubes.get(0), location); + String flag = "0"; + // 如果找不到,可能当前的管芯正在搬出去 + if (stockingivtList.size() == 0) { + stockingivtList = stockingivtService.getNeedPaperTubePointInTasking("1", tubes.get(0), location); + if (stockingivtList.size() > 0) { + flag = "1"; + } + } // 找一个点位: 目的需要的点位 // 筛选单独托盘有超过所需数 BhTubePointDto needPoint = null; for (BhTubePointDto bhTubePointDto : stockingivtList) { if (bhTubePointDto.getQty() >= needQuantity) { needPoint = bhTubePointDto; + // 如果是任务中的,需要反查,获取任务中的point_code2 + if ("1".equals(flag)) { + SchBaseTask baseTask = taskService.getById(needPoint.getTask_id()); + needPoint.setPoint_code(baseTask.getPoint_code2()); + } break; } } @@ -627,14 +643,15 @@ public class AutoCallAirShaftTask extends Prun { } // 3 找到就创建AGV搬运任务 // 筛选3个位置中数量最少的搬走, 如果是空位,直接搬运过来 - List needMovePointListAll = stockingivtService.getCanMovePointList(location, "1"); + List canMovePointListAll = stockingivtService.getCanMovePointList(location, "1"); // 过滤掉另一台穿拔轴需要的轴的数据 - List needMovePointList = new ArrayList<>(); + List canMovePointList; if (ObjectUtil.isEmpty(one)) { - needMovePointList = needMovePointListAll; + canMovePointList = canMovePointListAll; } else { + // 把另一台机构所需要的管芯对应的位置过滤掉 List otherTubes = Stream.of(one.getTube_code1(), one.getTube_code2()).filter(ObjectUtil::isNotEmpty).collect(Collectors.toList()); - needMovePointList = needMovePointListAll.stream().filter(bh -> { + canMovePointList = canMovePointListAll.stream().filter(bh -> { String vehicleCode = bh.getVehicle_code(); if (otherTubes.size() == 0 || "0".equals(bh.getIvt_status()) || ObjectUtil.isEmpty(vehicleCode)) { return true; @@ -645,7 +662,8 @@ public class AutoCallAirShaftTask extends Prun { }).collect(Collectors.toList()); } // 3.1 空位就直接创建搬过来的任务 - BhTubeMovePointDto needMovePoint = needMovePointList.size() > 0 ? needMovePointList.get(0) : null; + // 如果有空位,第一个肯定是空位,所以获取第一个元素判断状态即可canMovePointList + BhTubeMovePointDto needMovePoint = canMovePointList.size() > 0 ? canMovePointList.get(0) : null; if (ObjectUtil.isEmpty(needMovePoint) || "0".equals(needMovePoint.getIvt_status())) { // 直接搬过来即可 JSONObject param = new JSONObject(); @@ -653,6 +671,8 @@ public class AutoCallAirShaftTask extends Prun { param.put("point_code2", needMovePoint.getPoint_code()); param.put("vehicle_code", needPoint.getVehicle_code()); param.put("product_area", SlitterConstant.SLITTER_TASK_AREA); + param.put("task_id", "1".equals(flag) ? needPoint.getTask_id() : ""); + param.put("task_status", "1".equals(flag) ? TaskStatusEnum.SURE_START.getCode() : TaskStatusEnum.START_AND_POINT.getCode()); param.put("task_type", SlitterEnum.TASK_TYPE.code("备货区送纸管")); // 存储纸管信息 List paperList = mdPbPapervehicleService.list(new LambdaQueryWrapper() @@ -673,6 +693,8 @@ public class AutoCallAirShaftTask extends Prun { param.put("vehicle_code", needPoint.getVehicle_code()); param.put("product_area", SlitterConstant.SLITTER_TASK_AREA); param.put("task_type", SlitterEnum.TASK_TYPE.code("备货区送纸管")); + param.put("task_id", "1".equals(flag) ? needPoint.getTask_id() : ""); + param.put("task_status", "1".equals(flag) ? TaskStatusEnum.SURE_START.getCode() : TaskStatusEnum.START_AND_POINT.getCode()); // 存储纸管信息 List paperList = mdPbPapervehicleService.list(new LambdaQueryWrapper() .eq(MdPbPapervehicle::getVehicle_code, needPoint.getVehicle_code())); @@ -681,7 +703,43 @@ public class AutoCallAirShaftTask extends Prun { stepErrorInfo.add("备货区正在搬运管芯过来,托盘号:[" + needPoint.getVehicle_code() + "]。"); return true; } - // 3.3 查找一个没有任务的空位(创建交换任务) + // 3.3 排序,获取最后的起点,需要根据下一趟需要套轴的管芯规格来进行过滤 + if (plans.size() > 0) { + PdmBiSlittingproductionplan needDemoPlan = needPlans.get(0); + // 除去当前计划的设备. + List willPassPlan = plans.stream() + .filter(p -> !p.getResource_name().equals(needDemoPlan.getResource_name())) + .collect(Collectors.toList()); + if (ObjectUtil.isNotEmpty(willPassPlan)) { + log.info("即将套轴的计划:{}", willPassPlan); + SlitterPlanDistinctDto distinctDto = willPassPlan.get(0); + // 获取对应的计划 + List willNextPlans = slittingproductionplanService.getPlansByDto(distinctDto); + // 过滤计划中的管芯编码 + List nextTubs = willNextPlans.stream().map(p -> "1".equals(p.getPaper_tube_or_FRP()) + ? p.getPaper_tube_material() + : p.getFRP_material()).distinct().collect(Collectors.toList()); + log.info("预期下一个所需管芯: {}", nextTubs); + // 通过canMovePointList过滤 + List movePointDtos = canMovePointList.stream().filter(p -> { + // 获取载具对应的管芯编码 + List vehicleTubes = papervehicleService.getTubeCodesByVehicle(p.getVehicle_code()); + // 过滤掉在nextTubs的数据 + for (String vehicleTube : vehicleTubes) { + if (nextTubs.contains(vehicleTube)) { + return false; + } + } + return true; + }).collect(Collectors.toList()); + if (ObjectUtil.isNotEmpty(movePointDtos)) { + // 避免3个全是包含所需的 + needMovePoint = movePointDtos.get(0); + } + } + } + log.info("可以移出来的点位:{}", needMovePoint); + // 3.4 查找一个没有任务的空位(创建交换任务) List list = stockingivtService.getEmptyPointNotTask(location, "0"); if (list.size() == 0) { noticeService.createNotice("备货区找不到空位置搬运", @@ -700,6 +758,8 @@ public class AutoCallAirShaftTask extends Prun { param.put("material_code", tubes.get(0)); param.put("call_point", needPoint); param.put("task_type", SlitterEnum.TASK_TYPE.code("备货区送载具")); + param.put("task_id", "1".equals(flag) ? needPoint.getTask_id() : ""); + param.put("task_status", "1".equals(flag) ? TaskStatusEnum.SURE_START.getCode() : TaskStatusEnum.START_AND_POINT.getCode()); param.put("product_area", SlitterConstant.SLITTER_TASK_AREA); stockAreaSendVehicleTask.createTask(param); stepErrorInfo.add("备货区交换托盘中...请等待。"); diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/slitter/auto/AutoSendAirShaftAgvTask.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/slitter/auto/AutoSendAirShaftAgvTask.java index df5bdebce..50ec0ac7c 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/slitter/auto/AutoSendAirShaftAgvTask.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/slitter/auto/AutoSendAirShaftAgvTask.java @@ -73,12 +73,11 @@ public class AutoSendAirShaftAgvTask { continue; } // 最多4条分切计划 - List plans = slittingproductionplanService.list(new LambdaQueryWrapper() - .in(PdmBiSlittingproductionplan::getQzzno, collect) - .eq(PdmBiSlittingproductionplan::getStatus, "01") - .eq(PdmBiSlittingproductionplan::getIs_delete, SlitterConstant.SLITTER_NO)); + List plans = slittingproductionplanService.list(new LambdaQueryWrapper() + .in(PdmBiSlittingproductionplan::getQzzno, collect) + .eq(PdmBiSlittingproductionplan::getIs_delete, SlitterConstant.SLITTER_NO)); if (plans.size() == 0) { - log.info("找不到状态01的分切计划,送到异常处理位置!"); + log.info("找不到分切计划,送到异常处理位置!"); // 不能抛异常,需要通过通知的形式,并且创建agv搬到异常处理位(4)。 // 判断套轴暂存位异常点位是否含有任务 List exceptionPoints = bcutpointivtService.getAreaNotTaskPointByStatus("4", "1", "0", "0"); diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/slitter/mapper/dto/BhTubePointDto.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/slitter/mapper/dto/BhTubePointDto.java index 6c63ba254..4628f66e5 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/slitter/mapper/dto/BhTubePointDto.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/slitter/mapper/dto/BhTubePointDto.java @@ -2,12 +2,14 @@ package org.nl.b_lms.sch.tasks.slitter.mapper.dto; import lombok.Data; +import java.io.Serializable; + /** * @Author: lyd * @Date: 2025/3/18 */ @Data -public class BhTubePointDto { +public class BhTubePointDto implements Serializable { /** * 点位 @@ -21,4 +23,8 @@ public class BhTubePointDto { * 数量 */ private Integer qty; + /** + * 任务id + */ + private String task_id; } diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/slitter/service/impl/SlitterServiceImpl.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/slitter/service/impl/SlitterServiceImpl.java index 16c11d05e..8f84eb584 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/slitter/service/impl/SlitterServiceImpl.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/slitter/service/impl/SlitterServiceImpl.java @@ -169,10 +169,6 @@ public class SlitterServiceImpl implements SlitterService { List tubes = Stream.of(point.getTube_code1(), point.getTube_code2()) .filter(ObjectUtil::isNotEmpty) .collect(Collectors.toList()); - // 判断是否存在纸管(查找三点位是否有所需的管芯) -// List list = papervehicleService.list(new LambdaQueryWrapper() -// .in(MdPbPapervehicle::getMaterial_code, tubes) -// .gt(MdPbPapervehicle::getQty, 0)); List gxQtyList = papervehicleService.getGxPoints(point.getPoint_location(), tubes); // point.getTube_code1() 编码 , getTube_name1() : 纸制筒管|纸管|6英寸|1300 or 纸制筒管|纸管|3英寸|12|650 res.put("device_code", deviceCode); @@ -180,11 +176,6 @@ public class SlitterServiceImpl implements SlitterService { if ("1".equals(autoSendEmpty.getValue()) && gxQtyList.size() == 0) { con.put("is_bushing", SlitterConstant.TO_SHAFT_INFO_97); } else { -// int sum = list.stream() -// .mapToInt(e -> e.getQty().intValue()) -// .sum(); -// // 需要求和判断当前数量和所需数 -// con.put("is_bushing", sum >= tubes.size() ? SlitterConstant.SLITTER_YES : SlitterConstant.SLITTER_NO); List hasNeedPoint = gxQtyList.stream() .filter(gx -> "1".equals(gx.getPoint_type()) && gx.getQty() >= tubes.size()) .collect(Collectors.toList()); diff --git a/lms/nladmin-system/src/main/java/org/nl/system/service/quartz/task/TestTask.java b/lms/nladmin-system/src/main/java/org/nl/system/service/quartz/task/TestTask.java index 8b731cc3f..e6330b657 100644 --- a/lms/nladmin-system/src/main/java/org/nl/system/service/quartz/task/TestTask.java +++ b/lms/nladmin-system/src/main/java/org/nl/system/service/quartz/task/TestTask.java @@ -1,8 +1,14 @@ package org.nl.system.service.quartz.task; import lombok.extern.slf4j.Slf4j; +import org.nl.b_lms.sch.tasks.first_floor_area.auto.Prun; +import org.redisson.api.RLock; +import org.redisson.api.RedissonClient; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; +import java.util.concurrent.TimeUnit; + /** * @Author: lyd * @Description: 测试例子 @@ -10,10 +16,19 @@ import org.springframework.stereotype.Component; */ @Slf4j @Component -public class TestTask { +public class TestTask extends Prun { + @Autowired + private RedissonClient redissonClient; public void run() { + log.info("测试"); + try { + Thread.sleep(15000); + } catch (InterruptedException e) { + throw new RuntimeException(e); + } log.info("run 执行成功"); + } public void run1(String str) {