From f7bcd87b19bf265d0fa157f110632d6b661ec22d Mon Sep 17 00:00:00 2001
From: LSH
Date: 星期一, 25 九月 2023 15:25:03 +0800
Subject: [PATCH] #

---
 src/main/java/com/zy/core/model/DevpSlave.java              |    4 
 src/main/java/com/zy/asrs/utils/RouteUtils.java             |   24 ++
 src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java |  392 +++++++++++++++++++++++++++++++++++++++++--
 src/main/java/com/zy/asrs/mapper/WrkMastMapper.java         |    8 
 src/main/resources/mapper/WrkMastMapper.xml                 |   31 +++
 src/main/java/com/zy/core/MainProcess.java                  |    5 
 src/main/resources/application.yml                          |   37 ++++
 7 files changed, 476 insertions(+), 25 deletions(-)

diff --git a/src/main/java/com/zy/asrs/mapper/WrkMastMapper.java b/src/main/java/com/zy/asrs/mapper/WrkMastMapper.java
index 887a810..b9b6e3f 100644
--- a/src/main/java/com/zy/asrs/mapper/WrkMastMapper.java
+++ b/src/main/java/com/zy/asrs/mapper/WrkMastMapper.java
@@ -255,6 +255,14 @@
 
     WrkMast selectWrkMastLabelingOne54();
 
+    List<WrkMast> selectWaitBindRGVRgvNo(@Param("rgvNo") Integer rgvNo);
+    List<WrkMast> selectWaitBindRgvNo2(@Param("rgvNo") Integer rgvNo);
+    void insertRgvMast(@Param("wrkNo") Integer wrkNo);
+    void updateRgvMast(@Param("wrkNo") Integer wrkNo);
+
+    WrkMast selectWaitBindRgvNoOneWrkNo(@Param("wrkNo") Integer wrkNo);
+
+
 
 
     /*..............................涓婇ザ姹熼摐..............浠ヤ笂.............寰愬伐姹変簯..............................*/
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 5cb274b..e3dfe47 100644
--- a/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
@@ -580,27 +580,145 @@
         return null;
     }
 
+//    /**
+//     * 缁戝畾灏忚溅鏂规硶
+//     */
+//    public synchronized void rgvBindSte() {
+//        //鑾峰彇绛夊緟缁戝畾RGV鐨勪换鍔�
+//        List<WrkMast> wrkMasts = wrkMastMapper.selectWaitBindRGV();
+//        for (WrkMast wrkMast : wrkMasts) {
+//            //鐩爣绔�
+//            Integer staNo = wrkMast.getStaNo();
+//            //婧愮珯
+//            Integer sourceStaNo = wrkMast.getSourceStaNo();
+//            //閫氳繃鐩爣绔欐悳绱gv鍙�
+//            Integer rgvNo=0;
+//            if (wrkMast.getCrnNo()==1){
+//                rgvNo=1;
+//            }else if (wrkMast.getCrnNo()==6){
+//                rgvNo=2;
+//            }else {
+//                rgvNo = this.searchRgvNo(staNo);
+//            }
+//            if (rgvNo == null || rgvNo==0) {//鏈壘鍒板彲鐢ㄧ殑rgv
+//                continue;
+//            }
+//
+//            wrkMast.setRgvNo(rgvNo);//缁戝畾rgv鍙�
+//            wrkMast.setRgvDstaNo(wrkMast.getSourceStaNo());//璁剧疆RGV鍓嶅線宸ヤ綔妗f簮绔欏彇璐�
+//            if (wrkMastMapper.updateById(wrkMast)==0){
+//                log.error("缁戝畾灏忚溅鏇存柊宸ヤ綔妗eけ璐ワ紒锛侊紒 [宸ヤ綔鍙凤細{}]", wrkMast.getWrkNo());
+//            }
+//        }
+//    }
+
     /**
      * 缁戝畾灏忚溅鏂规硶
      */
     public synchronized void rgvBindSte() {
-        //鑾峰彇绛夊緟缁戝畾RGV鐨勪换鍔�
-        List<WrkMast> wrkMasts = wrkMastMapper.selectWaitBindRGV();
-        for (WrkMast wrkMast : wrkMasts) {
-            //鐩爣绔�
-            Integer staNo = wrkMast.getStaNo();
-            //婧愮珯
-            Integer sourceStaNo = wrkMast.getSourceStaNo();
-            //閫氳繃鐩爣绔欐悳绱gv鍙�
-            Integer rgvNo = this.searchRgvNo(staNo);
-            if (rgvNo == null) {//鏈壘鍒板彲鐢ㄧ殑rgv
+        try {
+            // 鏍规嵁杈撻�佺嚎plc閬嶅巻
+            for (DevpSlave devp : slaveProperties.getDevp()) {
+                if (devp.getId()==2){
+                    continue;
+                }
+                SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, devp.getId());
+                //鍏ュ簱缁戝皬杞�
+                for (DevpSlave.Sta Sta : devp.getInRgvSta()) {
+                    StaProtocol staProtocol = devpThread.getStation().get(Sta.getStaNo());
+                    if (staProtocol == null) {
+                        continue;
+                    } else {
+                        staProtocol = staProtocol.clone();
+                    }
+                    if (staProtocol.isAutoing() && staProtocol.isLoading() && staProtocol.getWorkNo() != 0 && staProtocol.getWorkNo() < 9990){
+                        List<WrkMast> wrkMasts = wrkMastMapper.selectList(new EntityWrapper<WrkMast>().eq("wrk_no", staProtocol.getWorkNo()).eq("wrk_sts", 2L));
+                        if (Cools.isEmpty(wrkMasts) || wrkMasts.size()!=1){
+                            continue;
+                        }
+                        WrkMast wrkMast = wrkMasts.get(0);
+                                    //鐩爣绔�
+                        Integer staNo = wrkMast.getStaNo();
+                        //閫氳繃鐩爣绔欐悳绱gv鍙�
+                        Integer rgvNo=0;
+                        if (wrkMast.getCrnNo()==1){
+                            rgvNo=1;
+                        }else if (wrkMast.getCrnNo()==6){
+                            rgvNo=2;
+                        }else {
+                            rgvNo = this.searchRgvNo(staNo);
+                        }
+                        if (rgvNo == null || rgvNo==0) {//鏈壘鍒板彲鐢ㄧ殑rgv
+                            continue;
+                        }
+                        wrkMast.setRgvNo(rgvNo);//缁戝畾rgv鍙�
+                        if (wrkMastMapper.updateById(wrkMast)==0){
+                            log.error("缁戝畾灏忚溅鏇存柊宸ヤ綔妗eけ璐ワ紒锛侊紒 [宸ヤ綔鍙凤細{}]", wrkMast.getWrkNo());
+                        }
+                    }
+                }
+                //鍑哄簱缁戝皬杞�
+                for (DevpSlave.Sta Sta : devp.getOutRgvSta()) {
+                    StaProtocol staProtocol = devpThread.getStation().get(Sta.getStaNo());
+                    if (staProtocol == null) {
+                        continue;
+                    } else {
+                        staProtocol = staProtocol.clone();
+                    }
+                    if (staProtocol.isAutoing() && staProtocol.isLoading() && staProtocol.getWorkNo() != 0 && staProtocol.getWorkNo() < 9990){
+                        List<WrkMast> wrkMasts = wrkMastMapper.selectList(new EntityWrapper<WrkMast>().eq("wrk_no", staProtocol.getWorkNo()).eq("wrk_sts", 14L));
+                        if (Cools.isEmpty(wrkMasts) || wrkMasts.size()!=1){
+                            continue;
+                        }
+                        WrkMast wrkMast = wrkMasts.get(0);
+                        //鐩爣绔�
+                        Integer staNo = wrkMast.getStaNo();
+                        //閫氳繃鐩爣绔欐悳绱gv鍙�
+                        Integer rgvNo=0;
+                        if (wrkMast.getCrnNo()==1){
+                            rgvNo=1;
+                        }else if (wrkMast.getCrnNo()==6){
+                            rgvNo=2;
+                        }else {
+                            rgvNo = this.searchRgvNo(staNo);
+                        }
+                        if (rgvNo == null || rgvNo==0) {//鏈壘鍒板彲鐢ㄧ殑rgv
+                            continue;
+                        }
+                        wrkMast.setRgvNo(rgvNo);//缁戝畾rgv鍙�
+                        if (wrkMastMapper.updateById(wrkMast)==0){
+                            log.error("缁戝畾灏忚溅鏇存柊宸ヤ綔妗eけ璐ワ紒锛侊紒 [宸ヤ綔鍙凤細{}]", wrkMast.getWrkNo());
+                        }
+                    }
+                }
+            }
+        }catch (Exception e){
+            log.error("缁戝畾灏忚溅寮傚父锛歿}", e.getMessage());
+        }
+    }
+
+    /**
+     * 缁戝畾灏忚溅鏂规硶
+     */
+    public synchronized void rgvBindSte2() {
+        for (RgvSlave rgv : slaveProperties.getRgv()) {
+            List<WrkMast> wrkMasts = wrkMastMapper.selectWaitBindRGVRgvNo(rgv.getId());
+            if (!Cools.isEmpty(wrkMasts) && wrkMasts.size()!=0){
                 continue;
             }
-
-            wrkMast.setRgvNo(rgvNo);//缁戝畾rgv鍙�
-            wrkMast.setRgvDstaNo(wrkMast.getSourceStaNo());//璁剧疆RGV鍓嶅線宸ヤ綔妗f簮绔欏彇璐�
-            if (wrkMastMapper.updateById(wrkMast)==0){
-                log.error("缁戝畾灏忚溅鏇存柊宸ヤ綔妗eけ璐ワ紒锛侊紒 [宸ヤ綔鍙凤細{}]", wrkMast.getWrkNo());
+            List<WrkMast> wrkMasts2 = wrkMastMapper.selectWaitBindRgvNo2(rgv.getId());
+            for (WrkMast wrkMast : wrkMasts2) {
+                if (wrkMastMapper.selectWaitBindRgvNoOneWrkNo(wrkMast.getWrkNo())!=null){
+                    continue;
+                }
+                //鐩爣绔�
+                BasDevp basDevp = basDevpService.selectById(wrkMast.getRgvDstaNo());
+                if (Cools.isEmpty(basDevp) || !basDevp.getAutoing().equals("Y") || !basDevp.getLoading().equals("N") || basDevp.getWrkNo()!=0){
+                    continue;
+                }
+                wrkMastMapper.insertRgvMast(wrkMast.getWrkNo());
+                wrkMastMapper.updateRgvMast(wrkMast.getWrkNo());
+                break;
             }
         }
     }
@@ -608,7 +726,7 @@
     /**
      * 鍏ュ嚭搴�  ===>>  RGV鍏ュ嚭搴撲綔涓氫笅鍙�
      */
-    public synchronized void rgvIoExecute() {
+    public synchronized void rgvIoExecuteOld() {
         for (RgvSlave rgv : slaveProperties.getRgv()) {
             // 鑾峰彇RGV淇℃伅
             RgvThread rgvThread = (RgvThread) SlaveConnection.get(SlaveType.Rgv, rgv.getId());
@@ -627,12 +745,102 @@
                     && rgvProtocol.getModeType() == RgvModeType.AUTO
 //                    && rgvProtocol.getTaskNo1() == 0 && rgvProtocol.getTaskNo2() == 0
 //                    && rgvProtocol.getLoaded1() == 0 && rgvProtocol.getLoaded2() == 0
-                    ) {
+            ) {
 
                 //鏌ユ壘鏄惁瀛樺湪鍏ュ嚭搴撳伐浣滀腑绛夊緟RGV鎼繍鐨勪换鍔�
                 List<WrkMast> wrkMasts = wrkMastMapper.selectIoRgvNo(rgv.getId());
                 for (WrkMast wrkMast : wrkMasts) {
                     if (wrkMast.getWrkSts() == 2) {//2.璁惧涓婅蛋1 => 3.RGV鍙栬揣涓�
+                        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);//鍒ゆ柇琛岃蛋璺緞鏄惁琚崰鐢�
+                        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缂栧彿
+                        rgvCommand.setAckFinish1((short) 0);  // 宸ヤ綅1浠诲姟瀹屾垚纭浣�
+                        rgvCommand.setTaskNo1(wrkMast.getWrkNo().shortValue()); // 宸ヤ綅1宸ヤ綔鍙�
+                        rgvCommand.setTaskMode1(RgvTaskModeType.FETCH); // 宸ヤ綅1浠诲姟妯″紡:  鍙栬揣
+                        rgvCommand.setDestinationStaNo1(wrkMast.getRgvDstaNo().shortValue());   //宸ヤ綅1鐩爣绔欑偣
+                        rgvCommand.setCommand((short) 1);   //宸ヤ綅1浠诲姟纭
+                        if (!MessageQueue.offer(SlaveType.Crn, wrkMast.getRgvNo(), new Task(4, rgvCommand))) {
+                            //step=2,宸ヤ綅1銆�2鍐欎换鍔★紱   step=4锛屽伐浣�1鍐欎换鍔★紱     step=5锛屽伐浣�2鍐欎换鍔�
+                            log.error("RGV鍛戒护涓嬪彂澶辫触锛孯GV鍙�={}锛屼换鍔℃暟鎹�={}", wrkMast.getRgvNo(), JSON.toJSON(rgvCommand));
+                        } else {
+                            // 淇敼宸ヤ綔妗g姸鎬� 2.璁惧涓婅蛋1 => 3.RGV鍙栬揣涓�
+                            Date now = new Date();
+                            wrkMast.setWrkSts(3L);
+                            wrkMast.setModiTime(now);
+                            if (wrkMastMapper.updateById(wrkMast) == 0) {
+                                log.error("淇敼宸ヤ綔妗g姸鎬� 2.璁惧涓婅蛋1 => 3.RGV鍙栬揣涓� 澶辫触锛侊紒锛屽伐浣滃彿={}", wrkMast.getWrkNo());
+                            }
+                        }
+                    } else if (wrkMast.getWrkSts() == 14) {//4.RGV鍙栬揣瀹屾垚 => 5.RGV鏀捐揣涓�   14鍑哄簱瀹屾垚
+                        if (rgvProtocol.getTaskNo1() == 0 || !rgvProtocol.getTaskNo1().equals(wrkMast.getWrkNo().shortValue())) {//RGV蹇呴』鏈変换鍔′笖浠诲姟鍜屽綋鍓嶅伐浣滄。涓�鑷�
+                            continue;
+                        }
+                        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(), wrkMast.getWrkNo(), true);
+
+                        //  鍛戒护涓嬪彂鍖� --------------------------------------------------------------------------
+                        RgvCommand rgvCommand = new RgvCommand();
+                        rgvCommand.setRgvNo(wrkMast.getRgvNo()); // RGV缂栧彿
+                        rgvCommand.setAckFinish1((short) 0);  // 宸ヤ綅1浠诲姟瀹屾垚纭浣�
+                        rgvCommand.setTaskNo1(wrkMast.getWrkNo().shortValue()); // 宸ヤ綅1宸ヤ綔鍙�
+                        rgvCommand.setTaskMode1(RgvTaskModeType.PUT); // 宸ヤ綅1浠诲姟妯″紡:  鏀捐揣
+                        rgvCommand.setDestinationStaNo1(wrkMast.getRgvDstaNo().shortValue());   //宸ヤ綅1鐩爣绔欑偣
+                        rgvCommand.setCommand((short) 1);   //宸ヤ綅1浠诲姟纭
+                        if (!MessageQueue.offer(SlaveType.Crn, wrkMast.getRgvNo(), new Task(4, rgvCommand))) {
+                            //step=2,宸ヤ綅1銆�2鍐欎换鍔★紱   step=4锛屽伐浣�1鍐欎换鍔★紱     step=5锛屽伐浣�2鍐欎换鍔�
+                            log.error("RGV鍛戒护涓嬪彂澶辫触锛孯GV鍙�={}锛屼换鍔℃暟鎹�={}", wrkMast.getRgvNo(), JSON.toJSON(rgvCommand));
+                        } else {
+                            // 淇敼宸ヤ綔妗g姸鎬� 4.RGV鍙栬揣瀹屾垚 => 5.RGV鏀捐揣涓�
+                            Date now = new Date();
+                            wrkMast.setWrkSts(5L);
+                            wrkMast.setModiTime(now);
+                            if (wrkMastMapper.updateById(wrkMast) == 0) {
+                                log.error("淇敼宸ヤ綔妗g姸鎬� 4.RGV鍙栬揣瀹屾垚 => 5.RGV鏀捐揣涓� 澶辫触锛侊紒锛屽伐浣滃彿={}", wrkMast.getWrkNo());
+                            }
+                        }
+                    } else if (wrkMast.getWrkSts() == 23) {//23.璁惧涓婅蛋1 => 24.RGV鍙栬揣涓�
                         if (rgvProtocol.getTaskNo1() != 0 || rgvProtocol.getLoaded1() != 0) {//RGV鏄惁鏃犱换鍔°�丷GV鏄惁鏃犺揣
                             continue;
                         }
@@ -667,6 +875,154 @@
                             //step=2,宸ヤ綅1銆�2鍐欎换鍔★紱   step=4锛屽伐浣�1鍐欎换鍔★紱     step=5锛屽伐浣�2鍐欎换鍔�
                             log.error("RGV鍛戒护涓嬪彂澶辫触锛孯GV鍙�={}锛屼换鍔℃暟鎹�={}", wrkMast.getRgvNo(), JSON.toJSON(rgvCommand));
                         } else {
+                            // 淇敼宸ヤ綔妗g姸鎬� 23.璁惧涓婅蛋1 => 24.RGV鍙栬揣涓�
+                            Date now = new Date();
+                            wrkMast.setWrkSts(24L);
+                            wrkMast.setModiTime(now);
+                            if (wrkMastMapper.updateById(wrkMast) == 0) {
+                                log.error("淇敼宸ヤ綔妗g姸鎬� 23.璁惧涓婅蛋1 => 24.RGV鍙栬揣涓� 澶辫触锛侊紒锛屽伐浣滃彿={}", wrkMast.getWrkNo());
+                            }
+                        }
+                    } else if (wrkMast.getWrkSts() == 25) {//25.RGV鍙栬揣瀹屾垚 => 26.RGV鏀捐揣涓�
+                        if (rgvProtocol.getTaskNo1() == 0 || !rgvProtocol.getTaskNo1().equals(wrkMast.getWrkNo().shortValue())) {//RGV蹇呴』鏈変换鍔′笖浠诲姟鍜屽綋鍓嶅伐浣滄。涓�鑷�
+                            continue;
+                        }
+                        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(), wrkMast.getWrkNo(), true);
+
+                        //  鍛戒护涓嬪彂鍖� --------------------------------------------------------------------------
+                        RgvCommand rgvCommand = new RgvCommand();
+                        rgvCommand.setRgvNo(wrkMast.getRgvNo()); // RGV缂栧彿
+                        rgvCommand.setAckFinish1((short) 0);  // 宸ヤ綅1浠诲姟瀹屾垚纭浣�
+                        rgvCommand.setTaskNo1(wrkMast.getWrkNo().shortValue()); // 宸ヤ綅1宸ヤ綔鍙�
+                        rgvCommand.setTaskMode1(RgvTaskModeType.PUT); // 宸ヤ綅1浠诲姟妯″紡:  鏀捐揣
+                        rgvCommand.setDestinationStaNo1(wrkMast.getRgvDstaNo().shortValue());   //宸ヤ綅1鐩爣绔欑偣
+                        rgvCommand.setCommand((short) 1);   //宸ヤ綅1浠诲姟纭
+                        if (!MessageQueue.offer(SlaveType.Crn, wrkMast.getRgvNo(), new Task(4, rgvCommand))) {
+                            //step=2,宸ヤ綅1銆�2鍐欎换鍔★紱   step=4锛屽伐浣�1鍐欎换鍔★紱     step=5锛屽伐浣�2鍐欎换鍔�
+                            log.error("RGV鍛戒护涓嬪彂澶辫触锛孯GV鍙�={}锛屼换鍔℃暟鎹�={}", wrkMast.getRgvNo(), JSON.toJSON(rgvCommand));
+                        } else {
+                            // 淇敼宸ヤ綔妗g姸鎬� 25.RGV鍙栬揣瀹屾垚 => 26.RGV鏀捐揣涓�
+                            Date now = new Date();
+                            wrkMast.setWrkSts(26L);
+                            wrkMast.setModiTime(now);
+                            if (wrkMastMapper.updateById(wrkMast) == 0) {
+                                log.error("淇敼宸ヤ綔妗g姸鎬� 25.RGV鍙栬揣瀹屾垚 => 26.RGV鏀捐揣涓� 澶辫触锛侊紒锛屽伐浣滃彿={}", wrkMast.getWrkNo());
+                            }
+                        }
+                    }
+                }
+
+            }
+        }
+    }
+
+    /**
+     * 鍏ュ嚭搴�  ===>>  RGV鍏ュ嚭搴撲綔涓氫笅鍙�
+     */
+    public synchronized void rgvIoExecute() {
+        for (RgvSlave rgv : slaveProperties.getRgv()) {
+            RgvSlave rgvSlave=null;
+            if (rgv.getId()==1){
+                rgvSlave = slaveProperties.getRgv().get(1);
+            }else {
+                rgvSlave = slaveProperties.getRgv().get(0);
+            }
+
+            // 鑾峰彇RGV淇℃伅
+            RgvThread rgvThread = (RgvThread) SlaveConnection.get(SlaveType.Rgv, rgv.getId());
+            RgvProtocol rgvProtocol = rgvThread.getRgvProtocol();
+            if (rgvProtocol == null) {
+                continue;
+            }
+
+            RgvThread rgvThreadSlave = (RgvThread) SlaveConnection.get(SlaveType.Rgv, rgvSlave.getId());
+            RgvProtocol rgvProtocolSlave = rgvThreadSlave.getRgvProtocol();
+            BasRgv basRgvSlave = null;
+            if (rgvProtocolSlave == null) {
+                rgvSlave=null;
+            }else {
+                basRgvSlave = basRgvService.selectById(rgv.getId());
+                if (basRgvSlave == null) {
+                    rgvSlave=null;
+                }
+            }
+
+            BasRgv basRgv = basRgvService.selectById(rgv.getId());
+            if (basRgv == null) {
+                log.error("{}鍙稲GV灏氭湭鍦ㄦ暟鎹簱杩涜缁存姢锛�", rgv.getId());
+                continue;
+            }
+
+            boolean signSlave=false;//姝ゅ鍒ゆ柇RgvSlave鏄惁宸茬粡瑙勯伩
+            boolean signSlaveState=false;//姝ゅ鍒ゆ柇RgvSlave鏄惁绌洪棽
+            Integer staSlave = 0;//姝ゅ璁板綍RgvSlave褰撳墠浣嶇疆
+
+            // 鍙湁褰揜GV绌洪棽銆佽嚜鍔�,
+            if (rgvProtocol.getStatusType() == RgvStatusType.IDLE
+                    && rgvProtocol.getModeType() == RgvModeType.AUTO
+//                    && rgvProtocol.getTaskNo1() == 0 && rgvProtocol.getTaskNo2() == 0
+//                    && rgvProtocol.getLoaded1() == 0 && rgvProtocol.getLoaded2() == 0
+                    ) {
+
+                //鏌ユ壘鏄惁瀛樺湪鍏ュ嚭搴撳伐浣滀腑绛夊緟RGV鎼繍鐨勪换鍔�
+                List<WrkMast> wrkMasts = wrkMastMapper.selectIoRgvNo(rgv.getId());
+                for (WrkMast wrkMast : wrkMasts) {
+                    if (wrkMast.getWrkSts() == 2) {//2.璁惧涓婅蛋1 => 3.RGV鍙栬揣涓�
+                        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);//鍒ゆ柇琛岃蛋璺緞鏄惁琚崰鐢�
+                        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缂栧彿
+                        rgvCommand.setAckFinish1((short) 0);  // 宸ヤ綅1浠诲姟瀹屾垚纭浣�
+                        rgvCommand.setTaskNo1(wrkMast.getWrkNo().shortValue()); // 宸ヤ綅1宸ヤ綔鍙�
+                        rgvCommand.setTaskMode1(RgvTaskModeType.FETCH); // 宸ヤ綅1浠诲姟妯″紡:  鍙栬揣
+                        rgvCommand.setDestinationStaNo1(wrkMast.getRgvDstaNo().shortValue());   //宸ヤ綅1鐩爣绔欑偣
+                        rgvCommand.setCommand((short) 1);   //宸ヤ綅1浠诲姟纭
+                        if (!MessageQueue.offer(SlaveType.Crn, wrkMast.getRgvNo(), new Task(4, rgvCommand))) {
+                            //step=2,宸ヤ綅1銆�2鍐欎换鍔★紱   step=4锛屽伐浣�1鍐欎换鍔★紱     step=5锛屽伐浣�2鍐欎换鍔�
+                            log.error("RGV鍛戒护涓嬪彂澶辫触锛孯GV鍙�={}锛屼换鍔℃暟鎹�={}", wrkMast.getRgvNo(), JSON.toJSON(rgvCommand));
+                        } else {
                             // 淇敼宸ヤ綔妗g姸鎬� 2.璁惧涓婅蛋1 => 3.RGV鍙栬揣涓�
                             Date now = new Date();
                             wrkMast.setWrkSts(3L);
@@ -675,7 +1031,7 @@
                                 log.error("淇敼宸ヤ綔妗g姸鎬� 2.璁惧涓婅蛋1 => 3.RGV鍙栬揣涓� 澶辫触锛侊紒锛屽伐浣滃彿={}", wrkMast.getWrkNo());
                             }
                         }
-                    } else if (wrkMast.getWrkSts() == 4) {//4.RGV鍙栬揣瀹屾垚 => 5.RGV鏀捐揣涓�
+                    } else if (wrkMast.getWrkSts() == 14) {//4.RGV鍙栬揣瀹屾垚 => 5.RGV鏀捐揣涓�   14鍑哄簱瀹屾垚
                         if (rgvProtocol.getTaskNo1() == 0 || !rgvProtocol.getTaskNo1().equals(wrkMast.getWrkNo().shortValue())) {//RGV蹇呴』鏈変换鍔′笖浠诲姟鍜屽綋鍓嶅伐浣滄。涓�鑷�
                             continue;
                         }
diff --git a/src/main/java/com/zy/asrs/utils/RouteUtils.java b/src/main/java/com/zy/asrs/utils/RouteUtils.java
index 90cbf42..2816909 100644
--- a/src/main/java/com/zy/asrs/utils/RouteUtils.java
+++ b/src/main/java/com/zy/asrs/utils/RouteUtils.java
@@ -12,11 +12,11 @@
 
 //    姝e簭
     public static final List<Integer> TRACK_POSITION_POSITIVE_SEQUENCE = 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(101);add(102);add(104);add(105);add(107);add(118);add(108);add(119);add(110);add(120);add(111);add(121);add(113);add(114);add(116);add(117);
     }};
 //    鍙嶅簭
     public static final List<Integer> TRACK_POSITION_REVERSE_SEQUENCE = new ArrayList<Integer>() {{
-        add(12);add(11);add(10);add(9);add(8);add(7);add(6);add(5);add(4);add(3);add(2);add(1);
+        add(117);add(116);add(114);add(113);add(121);add(111);add(120);add(110);add(119);add(108);add(118);add(107);add(105);add(104);add(102);add(101);
     }};
 
     public static String zerofill(String msg, Integer count){
@@ -35,7 +35,7 @@
 
     // 鑾峰彇褰撳墠灏忚溅鏈璧扮殑璺嚎闆嗗悎
     public static List<Integer> getRoute(Integer groupStart,Integer groupEnd){
-        boolean sign = groupStart < groupEnd;
+        boolean sign = TRACK_POSITION_POSITIVE_SEQUENCE.indexOf(groupStart) < TRACK_POSITION_POSITIVE_SEQUENCE.indexOf(groupEnd);
         List<Integer> result = new ArrayList<>();
         List<Integer> groupRoute = null;
         if (sign){
@@ -97,9 +97,21 @@
         }
     }
 
+    /*
+    * a  灏忚溅褰撳墠浣嶇疆
+    * b  灏忚溅浠诲姟寮�濮嬩綅缃�
+    * c  灏忚溅浠诲姟缁撴潫浣嶇疆
+    * sign  鍙︿竴涓皬杞︾┖闂叉爣璁�
+    * */
+    public static boolean RouteAutoBoolean(Integer a,Integer b,Integer c,Integer aa,Integer bb,Integer cc,boolean idleOther){
+        List<Integer> routeCurrent = getRouteIntersection(getRoute(a, c), getRoute(b, c), RouteCollectCountType.DEDUPLICATIONUNION);//骞堕泦
+        List<Integer> routeOther = getRouteIntersection(getRoute(aa, cc), getRoute(bb, cc), RouteCollectCountType.DEDUPLICATIONUNION);//
+        return !getRouteBoolean(routeCurrent, routeOther);  //鏄惁鏈変氦闆�
+    }
+
     public static void main(String[] arge){
-        List<Integer> routeCurrent = getRoute(2, 9);  //鑾峰彇褰撳墠灏忚溅璺緞
-        List<Integer> routeOther = getRoute(12, 5);  //鑾峰彇鍏跺畠灏忚溅璺緞
+        List<Integer> routeCurrent = getRoute(104, 119);  //鑾峰彇褰撳墠灏忚溅璺緞
+        List<Integer> routeOther = getRoute(117, 118);  //鑾峰彇鍏跺畠灏忚溅璺緞
         System.out.println("褰撳墠灏忚溅璺緞:\t"+routeCurrent);
         System.out.println("鍏跺畠灏忚溅璺緞:\t"+routeOther);
 
@@ -117,6 +129,8 @@
 
         List<Integer> routeIntersection3 = getRouteIntersection(routeCurrent, routeOther, RouteCollectCountType.DEDUPLICATIONUNION);//鍘婚噸骞堕泦
         System.out.println("璺緞鍘婚噸骞堕泦锛歕t"+routeIntersection3);
+
+        System.out.println(RouteAutoBoolean(101,104,119,114,116,120,true));
     }
 
 }
diff --git a/src/main/java/com/zy/core/MainProcess.java b/src/main/java/com/zy/core/MainProcess.java
index ab1cb60..91eb879 100644
--- a/src/main/java/com/zy/core/MainProcess.java
+++ b/src/main/java/com/zy/core/MainProcess.java
@@ -66,9 +66,10 @@
                     /////////////////////////////////////RGV璋冨害/////////////////////////////////////
 
 //                    //缁戝畾灏忚溅鏂规硶
-//                    mainService.rgvBindSte();
+                    mainService.rgvBindSte();
+                    mainService.rgvBindSte2();
 //                    // 鍏ュ嚭搴�  ===>>  RGV鍏ュ嚭搴撲綔涓氫笅鍙�
-//                    mainService.rgvIoExecute();
+                    mainService.rgvIoExecute();
 //                    // RGV鍏ュ簱  ===>> 鏍规嵁RGV瀹屾垚淇″彿,鎵ц瀵瑰伐浣滄。鐨勫畬鎴愭搷浣�
 //                    mainService.rgvFinished();
 //                    // 鍏ュ嚭搴�  ===>>  RGV鍑哄簱绔欏埌绯荤粺鍏ュ嚭搴撶珯
diff --git a/src/main/java/com/zy/core/model/DevpSlave.java b/src/main/java/com/zy/core/model/DevpSlave.java
index ad33be5..9cd578c 100644
--- a/src/main/java/com/zy/core/model/DevpSlave.java
+++ b/src/main/java/com/zy/core/model/DevpSlave.java
@@ -27,6 +27,10 @@
 
     private List<Sta> pickSta = new ArrayList<>();
 
+    private List<Sta> outRgvSta = new ArrayList<>();
+
+    private List<Sta> inRgvSta = new ArrayList<>();
+
     @Data
     public static class Sta {
 
diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml
index 620400c..8db6b40 100644
--- a/src/main/resources/application.yml
+++ b/src/main/resources/application.yml
@@ -269,6 +269,43 @@
     pickSta[0]:
       staNo: 11
       barcode: ${wcs-slave.barcode[0].id}
+    # Rgv鍑哄簱鍙�1
+    outRgvSta[0]:
+      staNo: 102
+    # Rgv鍑哄簱鍙�1
+    outRgvSta[1]:
+      staNo: 105
+    # Rgv鍑哄簱鍙�1
+    outRgvSta[2]:
+      staNo: 108
+    # Rgv鍑哄簱鍙�1
+    outRgvSta[3]:
+      staNo: 111
+    # Rgv鍑哄簱鍙�1
+    outRgvSta[4]:
+      staNo: 114
+    # Rgv鍑哄簱鍙�1
+    outRgvSta[5]:
+      staNo: 117
+    # Rgv鍏ュ簱鍙�1
+    inRgvSta[0]:
+      staNo: 118
+    # Rgv鍏ュ簱鍙�1
+    inRgvSta[1]:
+      staNo: 119
+    # Rgv鍏ュ簱鍙�1
+    inRgvSta[2]:
+      staNo: 120
+    # Rgv鍏ュ簱鍙�1
+    inRgvSta[3]:
+      staNo: 121
+    # Rgv鍏ュ簱鍙�1
+    inRgvSta[4]:
+      staNo: 122
+    # Rgv鍏ュ簱鍙�1
+    inRgvSta[5]:
+      staNo: 123
+
   # 杈撻�佺嚎
   devp[1]:
     id: 2
diff --git a/src/main/resources/mapper/WrkMastMapper.xml b/src/main/resources/mapper/WrkMastMapper.xml
index 3b7c168..b0937e5 100644
--- a/src/main/resources/mapper/WrkMastMapper.xml
+++ b/src/main/resources/mapper/WrkMastMapper.xml
@@ -247,6 +247,37 @@
         and rgv_no is null
     </select>
 
+    <select id="selectWaitBindRgvNo2" resultMap="BaseResultMap">
+        select * from dbo.asr_wrk_mast
+        where 1=1
+        and wrk_sts in (2,14)
+        and (rgv_no IS NULL OR rgv_no = 0)
+    </select>
+
+    <select id="selectWaitBindRGVRgvNo" resultMap="BaseResultMap">
+        select * from dbo.asr_wrk_mast_rgv
+        where 1=1
+        and wrk_sts &lt; 110
+        and rgv_no = #{rgvNo}
+    </select>
+
+    <select id="selectWaitBindRgvNoOneWrkNo" resultMap="BaseResultMap">
+        select * from dbo.asr_wrk_mast_rgv
+        where 1=1
+        and wrk_no = #{wrkNo}
+    </select>
+
+    <insert id="insertRgvMast">
+        INSERT INTO dbo.asr_wrk_mast_rgv SELECT * FROM asr_wrk_mast WHERE wrk_no = #{wrkNo}
+    </insert>
+
+    <update id="updateRgvMast">
+        update asr_wrk_mast_rgv
+        set wrk_sts=100
+        where 1=1
+        and wrk_no = #{wrkNo}
+    </update>
+
     <select id="selectRgvInSteWrkNo" resultMap="BaseResultMap">
         select top 1 * from dbo.asr_wrk_mast where 1=1 and wrk_sts =12 and wrk_no=#{wrkNo} and rgv_no is null
     </select>

--
Gitblit v1.9.1