From d9248408fbaf28f25dfcf8e5ec3a5372e7a7c5a3 Mon Sep 17 00:00:00 2001
From: Junjie <fallin.jie@qq.com>
Date: 星期五, 14 七月 2023 10:48:55 +0800
Subject: [PATCH] RGV路径解锁

---
 src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java |  110 ++++++++++++++++++++++++++++++++++++++++++++++++++++--
 1 files changed, 105 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..05d2f26 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(), 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(), 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(), true);
 
                         //  鍛戒护涓嬪彂鍖� --------------------------------------------------------------------------
                         RgvCommand rgvCommand = new RgvCommand();
@@ -707,6 +765,24 @@
                         if (rgvProtocol.getLoaded1() == 0) {//RGV蹇呴』鏈夌墿
                             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(), true);
 
                         //  鍛戒护涓嬪彂鍖� --------------------------------------------------------------------------
                         RgvCommand rgvCommand = new RgvCommand();
@@ -1717,6 +1793,9 @@
                     rgvProtocol.setTaskNo1((short) 0);//鍑哄簱浠诲姟瀹屾垚锛屾竻绌轰换鍔″彿
                     wrkMast1.setWrkSts(27L);//27.RGV鏀捐揣瀹屾垚
                 }
+
+                //瑙i攣璺緞
+                RgvUtils.unLockPath(wrkMast1.getRgvNo());
 
                 wrkMast1.setModiTime(now);
                 if (wrkMastMapper.updateById(wrkMast1) == 0) {
@@ -2838,6 +2917,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