From 6b246faa2e12b5a0212f7411039df03fac014071 Mon Sep 17 00:00:00 2001 From: luxiaotao1123 <t1341870251@163.com> Date: 星期四, 14 十一月 2024 14:47:34 +0800 Subject: [PATCH] # --- zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/TrafficService.java | 153 ++++++++++++++++++++++++++------------------------ 1 files changed, 79 insertions(+), 74 deletions(-) diff --git a/zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/TrafficService.java b/zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/TrafficService.java index 428c9f0..70dec0e 100644 --- a/zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/TrafficService.java +++ b/zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/TrafficService.java @@ -238,94 +238,99 @@ // 鏃犲彲璧拌璺緞 } else { - assert !Cools.isEmpty(blockVehicleList); - Integer maxJamTimeoutFactor = null; - - // persist jam data - jam = this.createOrUpdateJam(agv, startCode, segment, jam); - - // ? has unAvoidable block vehicles - if (blockVehicleList.stream().anyMatch(blockVehicleDto -> !blockVehicleDto.isAvoidable())) { - - // set factor of jam timeout - maxJamTimeoutFactor = 1; + if (Cools.isEmpty(blockVehicleList)) { + log.warn("AGV[{}] can't reach to code: {}, because there is too many vehicle in the lane...", agvNo, endCode.getData()); } else { - // ? already do notify to avoid - if (!Cools.isEmpty(jam.getAvoAgv()) - && BlockVehicleDto.customContain(blockVehicleList, agvService.getById(jam.getAvoAgv()).getUuid())) { + assert !Cools.isEmpty(blockVehicleList); + Integer maxJamTimeoutFactor = null; - maxJamTimeoutFactor = 10; + // persist jam data + jam = this.createOrUpdateJam(agv, startCode, segment, jam); + // ? has unAvoidable block vehicles + if (blockVehicleList.stream().anyMatch(blockVehicleDto -> !blockVehicleDto.isAvoidable())) { + + // set factor of jam timeout + maxJamTimeoutFactor = 1; } else { - // select optimal block vehicle - String blockAgvNo = blockVehicleList.stream() - .filter(BlockVehicleDto::isAvoidable) - .map(BlockVehicleDto::getVehicle) - .findFirst().orElse(null); + // ? already do notify to avoid + if (!Cools.isEmpty(jam.getAvoAgv()) + && BlockVehicleDto.customContain(blockVehicleList, agvService.getById(jam.getAvoAgv()).getUuid())) { - // block vehicle info - Agv blockAgv = agvService.selectByUuid(blockAgvNo); - String blockAgvCode = codeService.getById(agvDetailService.selectByAgvId(blockAgv.getId()).getRecentCode()).getData(); + maxJamTimeoutFactor = 10; - do { - - // 闃诲杞﹁締姝e湪鍘熷湴浣滀笟锛岀瓑寰� ===>> 瓒呰繃绛夊緟鏃堕棿锛岀粫璺� - List<Segment> runningSegList = segmentService.getByAgvAndState(blockAgv.getId(), SegmentStateType.RUNNING.toString()); - if (!Cools.isEmpty(runningSegList)) { - maxJamTimeoutFactor = 1; - break; - } - - // 鍒ゆ柇涓嬩釜浠诲姟鏄惁涓哄師鍦颁换鍔★紝濡傛灉鏄垯绛夊緟 ===>> 瓒呰繃绛夊緟鏃堕棿锛岀粫璺紱濡傛灉涓嶆槸锛岃闃诲杞﹁締閬胯 - Segment waitingSeg = segmentService.getJustWaitingSeg(blockAgv.getId()); - if (null != waitingSeg && waitingSeg.getEndNode().equals(codeService.selectByData(blockAgvCode).getId())) { - maxJamTimeoutFactor = 1; - break; - } - - // notify block vehicle to avoid - if (this.notifyVehicleAvoid(blockAgvNo, blockAgvCode, unlockPathList, agvNo, jam)) { - if (jam.getCycleAvo() == 1) { - jam.setCycleCode(endCode.getId()); - } - jam.setAvoAgv(blockAgv.getId()); - jam.setNotifyTime(new Date()); - if (!jamService.updateById(jam)) { - throw new CoolException(jam.getUuid() + "-jam failed to update锛侊紒锛�"); - } - } else { - - maxJamTimeoutFactor = 1; - } - - } while (false); - } - - } - - // handle jam timeout - if (null != maxJamTimeoutFactor) { - if (System.currentTimeMillis() - jam.getStartTime().getTime() > MAX_JAM_TIMEOUT * maxJamTimeoutFactor) { - - if (!Cools.isEmpty(lockPathList)) { - - pathList = lockPathList; } else { - log.error("{}鍙疯溅杈嗘绱{}] ===>> [{}]璺緞澶辫触锛屽師鍥狅細{}" - , agvNo, startCode.getData(), endCode.getData(), "璺緞闃诲瓒呮椂"); + + // select optimal block vehicle + String blockAgvNo = blockVehicleList.stream() + .filter(BlockVehicleDto::isAvoidable) + .map(BlockVehicleDto::getVehicle) + .findFirst().orElse(null); + + // block vehicle info + Agv blockAgv = agvService.selectByUuid(blockAgvNo); + String blockAgvCode = codeService.getById(agvDetailService.selectByAgvId(blockAgv.getId()).getRecentCode()).getData(); + + do { + + // 闃诲杞﹁締姝e湪鍘熷湴浣滀笟锛岀瓑寰� ===>> 瓒呰繃绛夊緟鏃堕棿锛岀粫璺� + List<Segment> runningSegList = segmentService.getByAgvAndState(blockAgv.getId(), SegmentStateType.RUNNING.toString()); + if (!Cools.isEmpty(runningSegList)) { + maxJamTimeoutFactor = 1; + break; + } + + // 鍒ゆ柇涓嬩釜浠诲姟鏄惁涓哄師鍦颁换鍔★紝濡傛灉鏄垯绛夊緟 ===>> 瓒呰繃绛夊緟鏃堕棿锛岀粫璺紱濡傛灉涓嶆槸锛岃闃诲杞﹁締閬胯 + Segment waitingSeg = segmentService.getJustWaitingSeg(blockAgv.getId()); + if (null != waitingSeg && waitingSeg.getEndNode().equals(codeService.selectByData(blockAgvCode).getId())) { + maxJamTimeoutFactor = 1; + break; + } + + // notify block vehicle to avoid + if (this.notifyVehicleAvoid(blockAgvNo, blockAgvCode, unlockPathList, agvNo, jam)) { + if (jam.getCycleAvo() == 1) { + jam.setCycleCode(endCode.getId()); + } + jam.setAvoAgv(blockAgv.getId()); + jam.setNotifyTime(new Date()); + if (!jamService.updateById(jam)) { + throw new CoolException(jam.getUuid() + "-jam failed to update锛侊紒锛�"); + } + } else { + + maxJamTimeoutFactor = 1; + } + + } while (false); } - } else { - log.warn("{}鍙疯溅杈嗘鍦ㄧ瓑寰呬氦閫氬牭濉烇紝闃诲杞﹁締锛氥�恵}銆�" - , agvNo - , blockVehicleList.stream().map(BlockVehicleDto::getVehicle).collect(Collectors.toList()).toString() - ); + } + + // handle jam timeout + if (null != maxJamTimeoutFactor) { + if (System.currentTimeMillis() - jam.getStartTime().getTime() > MAX_JAM_TIMEOUT * maxJamTimeoutFactor) { + + if (!Cools.isEmpty(lockPathList)) { + + pathList = lockPathList; + } else { + log.error("{}鍙疯溅杈嗘绱{}] ===>> [{}]璺緞澶辫触锛屽師鍥狅細{}" + , agvNo, startCode.getData(), endCode.getData(), "璺緞闃诲瓒呮椂"); + } + } else { + log.warn("{}鍙疯溅杈嗘鍦ㄧ瓑寰呬氦閫氬牭濉烇紝闃诲杞﹁締锛氥�恵}銆�" + , agvNo + , blockVehicleList.stream().map(BlockVehicleDto::getVehicle).collect(Collectors.toList()).toString() + ); + } + } + } } - } if (!Cools.isEmpty(pathList)) { -- Gitblit v1.9.1