From 48020b340d4bce51660fa5b412085e4d4cd769f1 Mon Sep 17 00:00:00 2001 From: LSH Date: 星期二, 18 七月 2023 17:03:32 +0800 Subject: [PATCH] #完善路径工具类 --- src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java | 126 ++++++++++++++++++++++++++++++++++++++++- 1 files changed, 121 insertions(+), 5 deletions(-) diff --git a/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java b/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java index 0e6d25b..37e50e7 100644 --- a/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java +++ b/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java @@ -21,6 +21,8 @@ import com.zy.common.service.CommonService; import com.zy.common.utils.CollectionUtils; import com.zy.common.utils.HttpHandler; +import com.zy.common.utils.RedisUtil; +import com.zy.common.utils.RgvUtils; import com.zy.core.CrnThread; import com.zy.core.DevpThread; import com.zy.core.cache.MessageQueue; @@ -89,6 +91,8 @@ private BasRgvErrLogService basRgvErrLogService; @Autowired private BasRgvPathService basRgvPathService; + @Autowired + private RedisUtil redisUtil; @Value("${wms.url}") private String wmsUrl; @@ -558,11 +562,11 @@ } }else { //灏忎簬鎴栫瓑浜�1鍙拌溅锛屽垎閰嶅叏璺緞 - List<Integer> rgvPath = new ArrayList<Integer>(){{ - add(1);add(2);add(3);add(4);add(5);add(6); - add(7);add(8);add(9);add(10);add(11);add(12); - add(13);add(14);add(15);add(16);add(17);add(18); - }}; + BasRgvPath basRgvPath = basRgvPathService.selectByRgvNo(0);//鑾峰彇榛樿璺緞 + if (basRgvPath == null) { + return null; + } + List<Integer> rgvPath = JSON.parseArray(basRgvPath.getPath(), Integer.class); if (rgvPath.contains(path)) { //褰撳墠璺緞涓寘鍚洰鏍囩珯锛屽垯閫夊畾杩欏彴杞� return list.get(0).getSlave().getId(); @@ -627,6 +631,24 @@ continue; } + //鍒ゆ柇琛岃蛋璺緞鏄惁琚崰鐢� + Integer staNo = wrkMast.getSourceStaNo(); + BasDevp basDevp = basDevpService.selectById(staNo); + if (basDevp == null) { + continue;//鐩爣绔欎笉瀛樺湪 + } + //璧峰璺緞 + int startPath = rgvProtocol.getRgvPos().intValue(); + //鐩爣璺緞鍊� + int endPath = basDevp.getLocType3().intValue(); + boolean pathUsed = RgvUtils.isPathUsed(startPath, endPath);//鍒ゆ柇琛岃蛋璺緞鏄惁琚崰鐢� + if (pathUsed) { + //琛岃蛋璺緞琚崰鐢紝绂佹涓嬪彂鍛戒护 + continue; + } + //琛岃蛋璺緞绌洪棽锛岄攣瀹氳矾寰� + RgvUtils.lockPath(startPath, endPath, rgvProtocol.getRgvNo(), wrkMast.getWrkNo(), true); + // 鍛戒护涓嬪彂鍖� -------------------------------------------------------------------------- RgvCommand rgvCommand = new RgvCommand(); rgvCommand.setRgvNo(wrkMast.getRgvNo()); // RGV缂栧彿 @@ -655,6 +677,24 @@ continue; } + //鍒ゆ柇琛岃蛋璺緞鏄惁琚崰鐢� + Integer staNo = wrkMast.getStaNo(); + BasDevp basDevp = basDevpService.selectById(staNo); + if (basDevp == null) { + continue;//鐩爣绔欎笉瀛樺湪 + } + //璧峰璺緞 + int startPath = rgvProtocol.getRgvPos().intValue(); + //鐩爣璺緞鍊� + int endPath = basDevp.getLocType3().intValue(); + boolean pathUsed = RgvUtils.isPathUsed(startPath, endPath);//鍒ゆ柇琛岃蛋璺緞鏄惁琚崰鐢� + if (pathUsed) { + //琛岃蛋璺緞琚崰鐢紝绂佹涓嬪彂鍛戒护 + continue; + } + //琛岃蛋璺緞绌洪棽锛岄攣瀹氳矾寰� + RgvUtils.lockPath(startPath, endPath, rgvProtocol.getRgvNo(), wrkMast.getWrkNo(), true); + // 鍛戒护涓嬪彂鍖� -------------------------------------------------------------------------- RgvCommand rgvCommand = new RgvCommand(); rgvCommand.setRgvNo(wrkMast.getRgvNo()); // RGV缂栧彿 @@ -679,6 +719,24 @@ if (rgvProtocol.getTaskNo1() != 0 || rgvProtocol.getLoaded1() != 0) {//RGV鏄惁鏃犱换鍔°�丷GV鏄惁鏃犺揣 continue; } + + //鍒ゆ柇琛岃蛋璺緞鏄惁琚崰鐢� + Integer staNo = wrkMast.getSourceStaNo(); + BasDevp basDevp = basDevpService.selectById(staNo); + if (basDevp == null) { + continue;//鐩爣绔欎笉瀛樺湪 + } + //璧峰璺緞 + int startPath = rgvProtocol.getRgvPos().intValue(); + //鐩爣璺緞鍊� + int endPath = basDevp.getLocType3().intValue(); + boolean pathUsed = RgvUtils.isPathUsed(startPath, endPath);//鍒ゆ柇琛岃蛋璺緞鏄惁琚崰鐢� + if (pathUsed) { + //琛岃蛋璺緞琚崰鐢紝绂佹涓嬪彂鍛戒护 + continue; + } + //琛岃蛋璺緞绌洪棽锛岄攣瀹氳矾寰� + RgvUtils.lockPath(startPath, endPath, rgvProtocol.getRgvNo(), wrkMast.getWrkNo(), true); // 鍛戒护涓嬪彂鍖� -------------------------------------------------------------------------- RgvCommand rgvCommand = new RgvCommand(); @@ -708,6 +766,24 @@ continue; } + //鍒ゆ柇琛岃蛋璺緞鏄惁琚崰鐢� + Integer staNo = wrkMast.getStaNo(); + BasDevp basDevp = basDevpService.selectById(staNo); + if (basDevp == null) { + continue;//鐩爣绔欎笉瀛樺湪 + } + //璧峰璺緞 + int startPath = rgvProtocol.getRgvPos().intValue(); + //鐩爣璺緞鍊� + int endPath = basDevp.getLocType3().intValue(); + boolean pathUsed = RgvUtils.isPathUsed(startPath, endPath);//鍒ゆ柇琛岃蛋璺緞鏄惁琚崰鐢� + if (pathUsed) { + //琛岃蛋璺緞琚崰鐢紝绂佹涓嬪彂鍛戒护 + continue; + } + //琛岃蛋璺緞绌洪棽锛岄攣瀹氳矾寰� + RgvUtils.lockPath(startPath, endPath, rgvProtocol.getRgvNo(), wrkMast.getWrkNo(), true); + // 鍛戒护涓嬪彂鍖� -------------------------------------------------------------------------- RgvCommand rgvCommand = new RgvCommand(); rgvCommand.setRgvNo(wrkMast.getRgvNo()); // RGV缂栧彿 @@ -733,6 +809,10 @@ } } + } + + private boolean rgvIoExecuteWrk2To3() { + return false; } /** @@ -1718,9 +1798,24 @@ wrkMast1.setWrkSts(27L);//27.RGV鏀捐揣瀹屾垚 } + //瑙i攣璺緞 + RgvUtils.unLockPath(wrkMast1.getRgvNo()); + wrkMast1.setModiTime(now); if (wrkMastMapper.updateById(wrkMast1) == 0) { log.error("宸ヤ綅1淇敼宸ヤ綔妗g姸鎬佸け璐ワ紒锛侊紝宸ヤ綔鍙�={}", wrkMast1.getWrkNo()); + } + + // 鍛戒护涓嬪彂鍖� -------------------------------------------------------------------------- + RgvCommand rgvCommand = new RgvCommand(); + rgvCommand.setRgvNo(rgv.getId()); // RGV缂栧彿 + rgvCommand.setAckFinish1((short) 1); // 宸ヤ綅1浠诲姟瀹屾垚纭浣� + rgvCommand.setTaskNo1(wrkMast1.getWrkNo().shortValue()); // 宸ヤ綅1宸ヤ綔鍙� + rgvCommand.setTaskMode1(RgvTaskModeType.NONE); // 宸ヤ綅1浠诲姟妯″紡: 鏃� + rgvCommand.setCommand((short) 1); //宸ヤ綅1浠诲姟纭 + if (!MessageQueue.offer(SlaveType.Crn, wrkMast1.getRgvNo(), new Task(4, rgvCommand))) { + //step=2,宸ヤ綅1銆�2浠诲姟纭锛� step=4锛屽伐浣�1纭锛� step=5锛屽伐浣�2浠诲姟纭 + log.error("RGV鍛戒护涓嬪彂澶辫触锛孯GV鍙�={}锛屼换鍔℃暟鎹�={}", rgv.getId(), JSON.toJSON(rgvCommand)); } // //宸ヤ綅1鍙栬揣瀹屾垚鍚庯紝宸ヤ綅2鏄棤璐х┖闂茬姸鎬佹椂锛屽噯澶囩粰宸ヤ綅2鍙戜换鍔★紝纭鏄惁鏈夊緟鎵цRGV浠诲姟 @@ -2838,6 +2933,27 @@ } /** + * 鍒濆鍖朢GV鍦板浘 + */ + public synchronized void initRgvMap() { + Object data = redisUtil.get("rgv_map"); + if (data == null) { + //閲嶆柊鑾峰彇鍏ㄨ矾寰勫湴鍥� + BasRgvPath basRgvPath = basRgvPathService.selectByRgvNo(0);//鑾峰彇榛樿璺緞 + if (basRgvPath != null) { + ArrayList<RgvNode> rgvNodes = new ArrayList<>(); + List<Integer> rgvPath = JSON.parseArray(basRgvPath.getPath(), Integer.class); + for (Integer integer : rgvPath) { + RgvNode rgvNode = new RgvNode(integer); + rgvNodes.add(rgvNode); + } + //灏嗘暟鎹簱鍦板浘鏁版嵁瀛樺叆redis + redisUtil.set("rgv_map", JSON.toJSONString(rgvNodes)); + } + } + } + + /** * 鍫嗗灈鏈烘紨绀� ===>> 搴撲綅绉昏浆 */ public synchronized void crnDemoOfLocMove1() { -- Gitblit v1.9.1