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 b987f4fff..a581826e6 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 @@ -106,4 +106,6 @@ public interface IBstIvtStockingivtService extends IService { List showDetail2(Map param); PdmBiOrderbominfo showBom2(Map param); + + List getMoveTaskPoints(); } 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 42edf4d39..39b34d291 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 @@ -42,4 +42,6 @@ public interface BstIvtStockingivtMapper extends BaseMapper { List getNeedPaperTubePoint(String pointType, String tube, String location); List getCanMovePointList(String location, String pointType); + + List getMoveTaskPoints(); } 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 baaa70bff..5d3686ff4 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 @@ -90,4 +90,14 @@ ORDER BY ivt_status ASC, qty ASC; + 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 19b40105c..13ff27431 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 @@ -379,4 +379,9 @@ public class BstIvtStockingivtServiceImpl extends ServiceImpl getMoveTaskPoints() { + return bstIvtStockingivtMapper.getMoveTaskPoints(); + } } 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 6cd7a34ad..a27b395d4 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 @@ -92,32 +92,44 @@ public class StockAreaSendVehicleTask extends AbstractAcsTask { String endPoint = task.getPoint_code2(); BstIvtStockingivt startPointObj = stockingivtService.getPointByCode(startPoint, false); BstIvtStockingivt endPointObj = stockingivtService.getPointByCode(endPoint, false); - // 互换资源 (交换载具号) - endPointObj.setIvt_status("1"); - endPointObj.setVehicle_code(task.getVehicle_code()); - TaskUtils.updateOptMessageByBStockingPoint(endPointObj); - stockingivtService.update(endPointObj); - startPointObj.setVehicle_code(""); - startPointObj.setIvt_status("0"); - TaskUtils.updateOptMessageByBStockingPoint(startPointObj); - stockingivtService.update(startPointObj); - // 创建搬运任务, 将所需要的纸管对应的托盘换过来。 - String requestParam = task.getRequest_param(); - JSONObject jsonObject = JSONObject.parseObject(requestParam); - if (ObjectUtil.isEmpty(requestParam)) { - throw new BadRequestException("任务 code = " + task.getTask_code() + " 参数错误"); + if (SlitterEnum.TASK_TYPE.code("备货区单独送空载具").equals(task.getTask_type())) { + // 终点赋值 + endPointObj.setIvt_status("1"); + endPointObj.setVehicle_code(task.getVehicle_code()); + TaskUtils.updateOptMessageByBStockingPoint(endPointObj); + stockingivtService.update(endPointObj); + startPointObj.setVehicle_code(""); + startPointObj.setIvt_status("0"); + TaskUtils.updateOptMessageByBStockingPoint(startPointObj); + stockingivtService.update(startPointObj); + } else { + // 互换资源 (交换载具号) + endPointObj.setIvt_status("1"); + endPointObj.setVehicle_code(task.getVehicle_code()); + TaskUtils.updateOptMessageByBStockingPoint(endPointObj); + stockingivtService.update(endPointObj); + startPointObj.setVehicle_code(""); + startPointObj.setIvt_status("0"); + TaskUtils.updateOptMessageByBStockingPoint(startPointObj); + stockingivtService.update(startPointObj); + // 创建搬运任务, 将所需要的纸管对应的托盘换过来。 + String requestParam = task.getRequest_param(); + JSONObject jsonObject = JSONObject.parseObject(requestParam); + if (ObjectUtil.isEmpty(requestParam)) { + throw new BadRequestException("任务 code = " + task.getTask_code() + " 参数错误"); + } + JSONObject callPoint = jsonObject.getJSONObject("call_point"); + JSONObject param = new JSONObject(); + param.put("point_code1", callPoint.getString("point_code")); + param.put("point_code2", startPoint); + param.put("vehicle_code", callPoint.getString("vehicle_code")); + param.put("task_type", SlitterEnum.TASK_TYPE.code("备货区送纸管")); + param.put("product_area", SlitterConstant.SLITTER_TASK_AREA); + List paperList = mdPbPapervehicleService.list(new LambdaQueryWrapper() + .eq(MdPbPapervehicle::getVehicle_code, callPoint.getString("vehicle_code"))); + doSavePaperInfos(paperList, param); + stockAreaCallTubeTask.createTask(param); } - JSONObject callPoint = jsonObject.getJSONObject("call_point"); - JSONObject param = new JSONObject(); - param.put("point_code1", callPoint.getString("point_code")); - param.put("point_code2", startPoint); - param.put("vehicle_code", callPoint.getString("vehicle_code")); - param.put("task_type", SlitterEnum.TASK_TYPE.code("备货区送纸管")); - param.put("product_area", SlitterConstant.SLITTER_TASK_AREA); - List paperList = mdPbPapervehicleService.list(new LambdaQueryWrapper() - .eq(MdPbPapervehicle::getVehicle_code, callPoint.getString("vehicle_code"))); - doSavePaperInfos(paperList, param); - stockAreaCallTubeTask.createTask(param); } // 取消 if (status.equals(IOSEnum.IS_NOTANDYES.code("否"))) { @@ -138,7 +150,9 @@ public class StockAreaSendVehicleTask extends AbstractAcsTask { task.setTask_status(TaskStatusEnum.START_AND_POINT.getCode()); task.setPoint_code1(form.getString("point_code1")); task.setPoint_code2(form.getString("point_code2")); - task.setPoint_code3(callPoint.getString("point_code")); + task.setPoint_code3(ObjectUtil.isNotEmpty(callPoint) + ? callPoint.getString("point_code") + : ""); task.setVehicle_code(form.getString("vehicle_code")); task.setAcs_task_type("3"); task.setIs_delete("0"); 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 29539c2fe..bf7167160 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 @@ -54,6 +54,8 @@ public class TrussCallAirShaftTask extends AbstractAcsTask { private IBstIvtCutpointivtService bcutpointivtService; @Autowired private IBstIvtShafttubeivtService shafttubeivtService; + @Autowired + private TrussSendAirShaftTask trussSendAirShaftTask; @Override public List addTask() { /* @@ -117,6 +119,29 @@ public class TrussCallAirShaftTask extends AbstractAcsTask { .set(BstIvtShafttubeivt::getUpdate_time, DateUtil.now()) .eq(BstIvtShafttubeivt::getPoint_code, task.getPoint_code2()); shafttubeivtService.update(shaftLamUpdate); + if (ObjectUtil.isEmpty(startPointObj.getQzz_no1()) && ObjectUtil.isEmpty(startPointObj.getQzz_no2())) { + // 查找半条任务,并创建下发 + List list = taskService.list(new LambdaQueryWrapper() + .eq(SchBaseTask::getTask_type, "010814") + .eq(SchBaseTask::getTask_status, TaskStatusEnum.SURE_START.getCode()) + .eq(SchBaseTask::getIs_delete, "0") + .orderByAsc(SchBaseTask::getCreate_time)); + if (list.size() > 0) { + SchBaseTask schBaseTask = list.get(0); + 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")); + } + if (ObjectUtil.isNotEmpty(requestParam.getString("needPosition")) && "B".equals(requestParam.getString("needPosition"))) { + schBaseTask.setPoint_code2(task.getPoint_code1() + "_" + requestParam.getString("needPosition")); + } + schBaseTask.setRemark("AGV取货完成触发!"); + schBaseTask.setUpdate_time(DateUtil.now()); + schBaseTask.setTask_status(TaskStatusEnum.START_AND_POINT.getCode()); + taskService.updateById(schBaseTask); + trussSendAirShaftTask.immediateNotifyAcs(schBaseTask.getTask_id()); + } + } } // 取消 if (status.equals(IOSEnum.IS_NOTANDYES.code("否"))) { 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 276bd59ef..a9edddd93 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 @@ -60,6 +60,7 @@ import java.util.stream.Stream; import static org.nl.b_lms.sch.tasks.slitter.util.SlitterTaskUtil.doSavePaperInfos; /** + * 定时器呼叫套轴任务 * @Author: lyd * @Date: 2024/2/1 * @Description: 自动任务 呼叫套轴 根据分切计划来呼叫套轴任务 桁架任务 @@ -105,10 +106,7 @@ public class AutoCallAirShaftTask extends Prun { public final static String IS_ONLY_PULLING = "IS_ONLY_PULLING"; public final static String TZ_DAY = "TZ_DAY"; public final static String USE_XN = "USE_XN"; - public String stepStr = ""; public List stepErrorInfo = new ArrayList<>(); - private static final DateTimeFormatter TIME_FORMATTER = - DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); @Autowired private RedissonClient redissonClient; @@ -141,10 +139,9 @@ public class AutoCallAirShaftTask extends Prun { List emptyPoints = bstIvtShafttubeivtService.getAllShaftPointsByConditions("2", "0", "0"); for (BstIvtShafttubeivt empty : emptyPoints) { - stepStr = ""; stepErrorInfo = new ArrayList<>(); doCallShaft(empty, isOnlyPulling, tzDay, paramObj, useXn); - redisUtils.set("INFO" + empty.getPoint_code(), stepStr); + log.info("--------------------------------------------------"); redisUtils.set("ERROR" + empty.getPoint_code(), stepErrorInfo); } } else { @@ -159,17 +156,16 @@ public class AutoCallAirShaftTask extends Prun { @Transactional(rollbackFor = Exception.class) public void doCallShaft(BstIvtShafttubeivt empty, Param isOnlyPulling, Param tzDay, Param paramObj, Param useXn) { + log.info(empty.getPoint_code() + "执行中..."); // 标箔:1,锂电:2 改:大小:4代5代 String specification = empty.getQzz_generation(); String location = empty.getPoint_location(); - stepStr += "1"; if (ObjectUtil.isNotEmpty(isOnlyPulling) && SlitterConstant.SLITTER_YES.equals(isOnlyPulling.getValue())) { stepErrorInfo.add("系统设置了只做拔轴,详细看参数表:" + IS_ONLY_PULLING); // 只做拔轴 makePullShaft(empty, specification); return; } - stepStr += ",2"; Integer integer = Integer.valueOf(ObjectUtil.isEmpty(tzDay.getValue()) ? "0" : tzDay.getValue()); // 2、获取分切计划数据 校验代数 List planAll; @@ -228,13 +224,11 @@ public class AutoCallAirShaftTask extends Prun { // 查看套轴对接位是否满了 List emptyShaftPoint = bcutpointivtService.getAreaNotTaskPointByStatus("1", "1", location, "0"); - stepStr += ",6"; // 如果满了就只做拔轴 预留一个货位?,防止套轴直接站满 if (emptyShaftPoint.size() < 1) { log.info("暂存位没有空位!正在检测是否存在半个点位!"); // 校验是否存在半个位置,且有分切计划 // 获取只有一个位置的点位 - stepStr += ",7"; List halfPlacePoint = bcutpointivtService.getAllHalfPlacePoints("1", "1", location); List qzzs = halfPlacePoint.stream() @@ -247,11 +241,9 @@ public class AutoCallAirShaftTask extends Prun { makePullShaft(empty, specification); return; } - stepStr += ",12"; // 从寻查找分切计划,并放在plans, 没有考虑区域问题, 里面会考虑代数 List tzOKPlans = slittingproductionplanService.getByQzzNos(qzzs, "01"); if (ObjectUtil.isEmpty(tzOKPlans)) { - stepStr += ",13"; log.info("计划找不到"); List collect = halfPlacePoint.stream().map(BstIvtCutpointivt::getPoint_code).collect(Collectors.toList()); stepErrorInfo.add("找不到气胀[" + qzzs + "]对应的计划。请检查点位" + collect); @@ -273,7 +265,6 @@ public class AutoCallAirShaftTask extends Prun { } log.info("找到对应的另一半的计划 - {}", plans); } - stepStr += ",14"; // 获取一个分切计划的Dto。如果是6寸,可以直接使用、如果是3寸,需要判断当前位置是否满足 // todo: 需要校验分切设备是在对应的区域中 SlitterPlanDistinctDto planDto = plans.stream() @@ -316,12 +307,10 @@ public class AutoCallAirShaftTask extends Prun { String qzz_generation = needPlan.getQzz_generation(); // 从套轴对接位获取相同气涨轴大小 // update: 不需要(同标箔或者锂电分开) - stepStr += ",15"; List qzzPoint = bcutpointivtService.getPointByTypeAndShaftSize("1", qzzSize, specification); log.info("查找到满足到对应尺寸的点位-{}", qzzPoint); if (qzzPoint.size() == 0) { stepErrorInfo.add("没有可拔轴的点位。"); - stepStr += ",16"; //若套轴暂存位没有相同规格的气胀轴,直接去气胀轴库找即可 // 调用ACS滚条气涨轴下来 if (!toAcsOutShaft(qzzSize,location, empty)) { @@ -332,7 +321,6 @@ public class AutoCallAirShaftTask extends Prun { toCallAgvMovePaperTube(needPlans, location, empty); // 保存所需要的分切计划数据到点位上(套轴对接位)更新分切计划 saveCutPlanMessage(empty, needPlans, qzzSize); - stepStr += ",97"; return; } // 查找一条没任务的点位 @@ -340,10 +328,8 @@ public class AutoCallAirShaftTask extends Prun { // 当前纸管的规格信息 String oldQzzNo = ObjectUtil.isNotEmpty(startPoint.getQzz_no1()) ? startPoint.getQzz_no1() : startPoint.getQzz_no2(); - stepStr += ",33"; if (oldQzzNo == null) { log.error("当前气胀轴的编码为空!"); - stepStr += ",96"; stepErrorInfo.add(startPoint.getPoint_code() + "的气胀轴编码为空,请检查..."); return; } @@ -351,11 +337,9 @@ public class AutoCallAirShaftTask extends Prun { ? startPoint.getTruss_point_code1() : startPoint.getTruss_point_code2(); if (startPointCode == null) { log.error("当前点位的编码为空!"); - stepStr += ",96"; stepErrorInfo.add(startPoint.getPoint_code() + "的点位编码为空,检查A或B点位的信息是否正常"); return; } - stepStr += ",34"; // 如果A6寸 B3寸,则需要过滤到精确点位 if (ObjectUtil.isNotEmpty(startPoint.getQzz_no1()) && ObjectUtil.isNotEmpty(startPoint.getQzz_no2())) { // 获取需要的数据 @@ -378,7 +362,6 @@ public class AutoCallAirShaftTask extends Prun { } } } - stepStr += ",35"; // 创建任务 JSONObject param = new JSONObject(); param.put("point_code1", startPointCode); @@ -399,7 +382,6 @@ public class AutoCallAirShaftTask extends Prun { // 最多两条 List oldPlans = slittingproductionplanService.getByQzzNo(oldQzzNo); if (oldPlans.size() == 0) { - stepStr += ",96"; log.warn("当前气胀轴编码{},找不到对应的计划", oldQzzNo); // 把点位禁用 startPoint.setIs_used("0"); @@ -418,16 +400,13 @@ 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); - stepStr += ",36"; trussCallAirShaftTask.createTask(param); - stepStr += ",37"; // 将分切计划is_paper_ok 1(纸管已经准备好) -> 2(已经套轴) needPlans.forEach(p -> { p.setIs_paper_ok("2"); TaskUtils.updateOptMessageBySlitterPlan(p); }); slittingproductionplanService.updateBatchById(needPlans); - stepStr += ",97"; } public List getSlitterPlanByTubesDtos(List filteredList @@ -516,7 +495,6 @@ public class AutoCallAirShaftTask extends Prun { // 从套轴对接位获取相同气涨轴大小 // update: 不需要(同标箔或者锂电分开) // todo: 需要校验区域0/1 - stepStr += ",15"; List qzzPoint = bcutpointivtService.getPointByTypeAndShaftSize("1", qzzSize, qzzGeneration); log.info("查找可以拔轴的点位数:{}", qzzPoint.size()); if (!judgment1 && !judgment2 && qzzPoint.size() == 0) { @@ -555,7 +533,6 @@ public class AutoCallAirShaftTask extends Prun { * @param location 位置 */ public Boolean toCallAgvMovePaperTube(List needPlans, String location, BstIvtShafttubeivt empty) { - stepStr += ",17"; // 最多两根 List tubes = needPlans.stream().map(plan -> { if (SlitterConstant.SLITTER_TYPE_PAPER.equals(plan.getPaper_tube_or_FRP())) { @@ -571,7 +548,6 @@ public class AutoCallAirShaftTask extends Prun { .eq(BstIvtShafttubeivt::getPoint_type, empty.getPoint_type()) .eq(BstIvtShafttubeivt::getIs_used, "1")); log.info("同位置的另一台穿拔轴机构:{}", one); - stepStr += ",18"; // 另一台所需要的数量 int otherDeviceTubeSize = 0; // 缺省的数量 @@ -590,7 +566,6 @@ public class AutoCallAirShaftTask extends Prun { } // 说明三个位置中有包含此纸管的数据。 if (sum >= tubes.size() + otherDeviceTubeSize) { - stepStr += ",19"; return true; } // 如果不够,就计算还缺多少个 @@ -598,7 +573,6 @@ public class AutoCallAirShaftTask extends Prun { // 兜底 needQuantity = needTemp > 0 ? needTemp : 1; } - stepStr += ",20"; // 查找type=0的位置(待命的托盘)中是否存在(需要判断的是单独一个托盘) 校验了不在搬运中 List stockingivtList = stockingivtService.getNeedPaperTubePoint("0", tubes.get(0), location); // 找一个点位: 目的需要的点位 @@ -611,7 +585,6 @@ public class AutoCallAirShaftTask extends Prun { } } if (needPoint == null) { - stepStr += ",21"; // 不存在则站内通知 noticeService.createNotice("备货区找不到[" + tubes.get(0) + "]的纸管信息", "点位[" + empty.getPoint_name() + "]无法从备货区找到纸管信息", @@ -624,7 +597,6 @@ public class AutoCallAirShaftTask extends Prun { List needMovePointList = stockingivtService.getCanMovePointList(location, "1"); // 空位就直接创建搬过来的任务 BhTubeMovePointDto needMovePoint = needMovePointList.size() > 0 ? needMovePointList.get(0) : null; - stepStr += ",22"; if (ObjectUtil.isEmpty(needMovePoint) || "0".equals(needMovePoint.getIvt_status())) { // 直接搬过来即可 JSONObject param = new JSONObject(); @@ -638,14 +610,29 @@ public class AutoCallAirShaftTask extends Prun { .eq(MdPbPapervehicle::getVehicle_code, needPoint.getVehicle_code())); doSavePaperInfos(paperList, param); stockAreaCallTubeTask.createTask(param); - stepStr += ",23"; return true; } - stepStr += ",24"; + // 判断是否有单独拉出去的任务,有的话直接拉过来。 + List stockingivts = stockingivtService.getMoveTaskPoints(); + if (CollectionUtil.isNotEmpty(stockingivts)) { + BstIvtStockingivt bstIvtStockingivt = stockingivts.get(0); + // 直接搬过来即可 + JSONObject param = new JSONObject(); + param.put("point_code1", needPoint.getPoint_code()); + param.put("point_code2", bstIvtStockingivt.getPoint_code()); + param.put("vehicle_code", needPoint.getVehicle_code()); + param.put("product_area", SlitterConstant.SLITTER_TASK_AREA); + param.put("task_type", SlitterEnum.TASK_TYPE.code("备货区送纸管")); + // 存储纸管信息 + List paperList = mdPbPapervehicleService.list(new LambdaQueryWrapper() + .eq(MdPbPapervehicle::getVehicle_code, needPoint.getVehicle_code())); + doSavePaperInfos(paperList, param); + stockAreaCallTubeTask.createTask(param); + return true; + } // 查找一个没有任务的空位 List list = stockingivtService.getEmptyPointNotTask(location, "0"); if (list.size() == 0) { - stepStr += ",25"; noticeService.createNotice("备货区找不到空位置搬运", "点位[" + empty.getPoint_name() + "]无法从备货区找到空位", NoticeTypeEnum.EXCEPTION.getCode()); @@ -663,7 +650,6 @@ public class AutoCallAirShaftTask extends Prun { param.put("task_type", SlitterEnum.TASK_TYPE.code("备货区送载具")); param.put("product_area", SlitterConstant.SLITTER_TASK_AREA); stockAreaSendVehicleTask.createTask(param); - stepStr += ",26"; stepErrorInfo.add("备货区交换托盘中...请等待。"); return true; } @@ -677,19 +663,15 @@ public class AutoCallAirShaftTask extends Prun { * @param empty 套拔轴点位 */ private Boolean toAcsOutShaft(String qzzSize, String location, BstIvtShafttubeivt empty) { - stepStr += ",27"; // 需要区分上下 List shafttubeivts = bstIvtShafttubeivtService.getByQzzSize(qzzSize ,empty.getPoint_code(), location); - stepStr += ",28"; if (shafttubeivts.size() == 0) { log.error("气胀轴库找不到[" + qzzSize + "]规格的气涨轴位"); stepErrorInfo.add("气胀轴库找不到[" + qzzSize + "]规格的气涨轴位"); - stepStr += ",98"; return false; } // 气涨轴库 BstIvtShafttubeivt shafttubeivt = shafttubeivts.get(0); - stepStr += ",29"; // 判断气胀轴是否有轴 JSONArray device_rows = new JSONArray(); JSONObject device_obj = new JSONObject(); @@ -699,7 +681,6 @@ public class AutoCallAirShaftTask extends Prun { device_obj.put("product_area", "B1"); JSONObject pointStatus = wmsToAcsService.getPointStatus(device_rows); if (ObjectUtil.isEmpty(pointStatus) || ObjectUtil.isEmpty(pointStatus.getJSONArray("data"))) { - stepStr += ",98"; log.error("获取气胀轴库信息失败"); stepErrorInfo.add("获取ACS气胀轴库信息失败..."); return false; @@ -707,7 +688,7 @@ public class AutoCallAirShaftTask extends Prun { boolean judgment1 = true; boolean judgment2 = true; // 获取气涨轴缓存没有任务的点位 - List qzzCache = bstIvtShafttubeivtService.getNotTaskShaftCache2(qzzSize, + List qzzCache = bstIvtShafttubeivtService.getNotTaskShaftCache(qzzSize, shafttubeivt.getQzz_generation(), location); if (qzzCache.size() == 0) { log.warn("未找到气胀轴密集库气涨轴规格「" + qzzSize + "」的暂存位"); @@ -717,20 +698,10 @@ public class AutoCallAirShaftTask extends Prun { if (data2.getInteger("qty") == 0) { log.warn("气胀轴库【" + shafttubeivt.getPoint_code() + "】没有气胀轴。"); judgment1 = false; - // 预扣除 - if (judgment2) { - BstIvtShafttubeivt waitUsedPoint = qzzCache.get(0); - waitUsedPoint.setPlan("1"); - waitUsedPoint.setTube_name1("预分配给" + empty.getPoint_code()); - waitUsedPoint.setUpdate_time(DateUtil.now()); - bstIvtShafttubeivtService.updateById(waitUsedPoint); - } } - stepStr += ",30"; if (!judgment1 && !judgment2) { log.warn("没有气胀轴,不给ACS写出轴信息"); stepErrorInfo.add("呼叫气胀轴失败,(密集库/暂存架)没有"+qzzSize+"寸的气胀轴,不给ACS写出轴信息。请人工补轴或将对应的分切计划点击入站完成"); - stepStr += ",98"; return false; } // 判断气胀轴密集库是否有数据 @@ -742,7 +713,6 @@ public class AutoCallAirShaftTask extends Prun { acsQzz.put("value", "1"); acsQzz.put("product_area", SlitterConstant.SLITTER_TASK_AREA); acsParam.add(acsQzz); - stepStr += ",31"; log.info("开始给ACS写信号出气胀轴 - {}", acsQzz); JSONObject action = wmsToAcsService.action(acsParam); log.info("下发给ACS写信号出气涨轴返回参数:{}", action); @@ -781,7 +751,6 @@ public class AutoCallAirShaftTask extends Prun { * @param qzzSize 气涨轴尺寸 */ private void saveCutPlanMessage(BstIvtShafttubeivt empty, List needPlans, String qzzSize) { - stepStr += ",32"; log.info("正在保存套轴信息 - {} , 尺寸 - {} 到点位 - {}", needPlans, qzzSize, empty); empty.setHave_qzz(SlitterConstant.SLITTER_YES); empty.setQzz_size(qzzSize); @@ -828,19 +797,15 @@ public class AutoCallAirShaftTask extends Prun { * @param specification 代数(4、5) */ private void makePullShaft(BstIvtShafttubeivt empty, String specification) { - stepStr += ",3"; - stepStr += ",8"; log.info("不需要套轴,只做拔轴!"); //查询套轴缓存位哦:point_type=1 List notTaskPoints = bcutpointivtService.getAreaNotTaskPointByTcQzzPoint(empty.getPoint_location()); //所有TC暂存位有卷的:Truss_point_code1,Truss_point_code2有任务的 //根据point_code排序 if (notTaskPoints.size() == 0) { - stepStr += ",99"; stepErrorInfo.add("只进行拔轴,没有可以拔轴的点位。"); return; } - stepStr += ",9"; // 筛选一个满足的位置:3寸:看代数4/5;6寸直接 //判断气胀轴代 CutpointAirShhaftDto cutpointivt = notTaskPoints.stream() @@ -850,11 +815,9 @@ public class AutoCallAirShaftTask extends Prun { .findFirst() .orElse(null); if (cutpointivt == null) { - stepStr += ",99"; stepErrorInfo.add("只进行拔轴,没有与机构匹配尺寸/代数可以拔轴的点位。"); return; } - stepStr += ",10"; String pointCode1 = cutpointivt.getQzz_point(); String qzzNo = cutpointivt.getQzz_no(); // 获取对应的分切计划 @@ -862,7 +825,6 @@ public class AutoCallAirShaftTask extends Prun { .eq(PdmBiSlittingproductionplan::getQzzno, qzzNo) .eq(PdmBiSlittingproductionplan::getIs_delete, "0")); if (list.size() == 0) { - stepStr += ",99"; log.warn("气涨轴[{}]对应的分切计划不存在!", qzzNo); bcutpointivtService.update(new UpdateWrapper() .eq("ivt_id",cutpointivt.getIvt_id()) @@ -895,7 +857,6 @@ public class AutoCallAirShaftTask extends Prun { param.put("is_pulling", SlitterConstant.SLITTER_YES); trussCallAirShaftTask.createTask(param); stepErrorInfo.add("只做拔轴,拔轴任务已经创建..."); - stepStr += ",11"; } /** @@ -912,7 +873,6 @@ public class AutoCallAirShaftTask extends Prun { } stepErrorInfo.add("存在为" + dto.getResource_name() + "送轴任务,不会继续套轴..."); log.info("存在任务,不允许套轴{}", dto); - stepStr += ",5"; return false; } @@ -947,7 +907,6 @@ public class AutoCallAirShaftTask extends Prun { && byContainerName.getSplit_group().equals(dto.getSplit_group())) { return true; } - stepStr += ",4"; stepErrorInfo.add("穿拔轴机" + shafttubeivt.getPoint_code() + "已经在为" + dto.getResource_name() + "套轴了..."); return false; } @@ -963,7 +922,6 @@ public class AutoCallAirShaftTask extends Prun { stepErrorInfo.add("设备" + dto.getResource_name() + "检测到暂存架" + stringList + "有套好的管芯,不会进行套轴。"); } log.info("检查有同母卷不允许套轴:{}", dto); - stepStr += ",4"; // 有就返回true return false; } diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/slitter/constant/SlitterEnum.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/slitter/constant/SlitterEnum.java index ed852f5c2..be868717d 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/slitter/constant/SlitterEnum.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/slitter/constant/SlitterEnum.java @@ -22,7 +22,7 @@ public enum SlitterEnum { TASK_TYPE(MapOf.of("穿拔轴缓存<>穿拔轴位", "010801", "穿拔轴缓存<>分切对接位", "010802", "穿拔轴位<>气胀轴缓存位", "010803" , "分切机下料AGV任务", "010804", "分切机上气胀轴", "010805", "分切机下气胀轴", "010806", "备货区送载具", "010807" , "备货区送纸管", "010808", "分切机下料桁架任务", "010809", "分切机下料AGV到内包间", "010810", "套轴异常处理AGV任务", "010811" - , "套轴异常处理桁架任务", "010812", "送气胀轴到分切机任务", "010813", "拔轴完毕出轴", "010814", "穿拔轴缓存<>气胀轴缓存位", "010815")); + , "套轴异常处理桁架任务", "010812", "送气胀轴到分切机任务", "010813", "拔轴完毕出轴", "010814", "穿拔轴缓存<>气胀轴缓存位", "010815", "备货区单独送空载具", "010816")); private Map code; public String code(String desc) { 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 66dd383a2..0efc52077 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 @@ -41,6 +41,7 @@ import org.nl.b_lms.sch.tasks.slitter.mapper.dto.CallPlanViewVO; import org.nl.b_lms.sch.tasks.slitter.mapper.dto.GxQtyDto; import org.nl.b_lms.sch.tasks.slitter.service.SlitterService; import org.nl.b_lms.sch.tasks.slitter.util.SlitterTaskUtil; +import org.nl.common.enums.NoticeTypeEnum; import org.nl.common.utils.SecurityUtils; import org.nl.common.utils.TaskUtils; import org.nl.modules.common.exception.BadRequestException; @@ -135,6 +136,8 @@ public class SlitterServiceImpl implements SlitterService { private RedisUtils redisUtils; @Autowired private ClassstandardService classstandardService; + @Autowired + private StockAreaSendVehicleTask stockAreaSendVehicleTask; @Override public JSONObject acsRequestShaftLoadTube(JSONObject param) { @@ -958,12 +961,13 @@ public class SlitterServiceImpl implements SlitterService { JSONObject res = new JSONObject(); res.put("status", HttpStatus.HTTP_OK); res.put("message", "请求成功!"); + String deviceCode = param.getString("device_code"); // param: device_code row_num if (ObjectUtil.isEmpty(param.getString("row_num"))) { - log.error("设备:{},排数不能为空", param.getString("device_code")); - throw new BadRequestException("设备:" + param.getString("device_code") + "排数不能为空"); + log.error("设备:{},排数不能为空", deviceCode); + throw new BadRequestException("设备:" + deviceCode + "排数不能为空"); } - BstIvtStockingivt device = stockingivtService.getPointByCode(param.getString("device_code"), false); + BstIvtStockingivt device = stockingivtService.getPointByCode(deviceCode, false); String vehicleCode = device.getVehicle_code(); if (ObjectUtil.isEmpty(vehicleCode)) { // 如果托盘号为空,那就是任务没完成,需要从任务中获取 @@ -997,7 +1001,33 @@ public class SlitterServiceImpl implements SlitterService { } else { papervehicleService.update(mdPbPapervehicle); } - // todo: 如果qty=0,创建AGV送空任务,(新的task_type)、后期优化可以新增诺宝取货完成提前释放货位,任务状态变成071 + // 如果qty=0,创建AGV送空任务,(新的task_type 010816)、后期优化可以新增诺宝取货完成提前释放货位,任务状态变成071 + List papers = papervehicleService.list(new LambdaQueryWrapper() + .eq(MdPbPapervehicle::getVehicle_code, vehicleCode)); + BigDecimal reduce = papers.stream().map(MdPbPapervehicle::getQty).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add); + if (reduce.intValue() <= 0) { + // 搬走 + List tasks = taskService.checkHaveTask(deviceCode); + if (CollectionUtil.isEmpty(tasks)) { + // 查找一个没有任务的空位 + List list = stockingivtService.getEmptyPointNotTask(device.getPoint_location(), "0"); + if (list.size() == 0) { + noticeService.createNotice("备货区找不到空位置搬运", + "备货区" + deviceCode + "异常", + NoticeTypeEnum.EXCEPTION.getCode()); + return res; + } + BstIvtStockingivt moveEmptyPoint = list.get(0); + JSONObject moveTaskParam = new JSONObject(); + moveTaskParam.put("point_code1", deviceCode); + moveTaskParam.put("point_code2", moveEmptyPoint.getPoint_code()); + moveTaskParam.put("vehicle_code", vehicleCode); + moveTaskParam.put("task_type", SlitterEnum.TASK_TYPE.code("备货区单独送空载具")); + moveTaskParam.put("product_area", SlitterConstant.SLITTER_TASK_AREA); + stockAreaSendVehicleTask.createTask(moveTaskParam); + } + + } } return res; } diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/ext/acs/rest/AcsToWmsController.java b/lms/nladmin-system/src/main/java/org/nl/wms/ext/acs/rest/AcsToWmsController.java index fecf5494f..e6133fb79 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/ext/acs/rest/AcsToWmsController.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/ext/acs/rest/AcsToWmsController.java @@ -108,6 +108,7 @@ public class AcsToWmsController { return new ResponseEntity<>(acsToWmsService.actionFinishRequest(jo), HttpStatus.OK); } + /** 二期二楼取货完成上报 */ @PostMapping("/actionFinishRequest2") @SaIgnore public ResponseEntity actionFinishRequest2(@RequestBody JSONObject jo) { diff --git a/lms/nladmin-system/src/main/resources/logback-spring.xml b/lms/nladmin-system/src/main/resources/logback-spring.xml index 040e763ef..2c520ee34 100644 --- a/lms/nladmin-system/src/main/resources/logback-spring.xml +++ b/lms/nladmin-system/src/main/resources/logback-spring.xml @@ -12,7 +12,7 @@ https://juejin.cn/post/6844903775631572999 nlAdmin + value="%black(%contextName-) %X{traceId} %red(%d{yyyy-MM-dd HH:mm:ss.SSS}) %green([%thread]) %highlight(%-5level) %boldMagenta(%logger{36}) - %cyan(%msg%n)"/>