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/asrs/service/impl/MainServiceImpl.java |  392 +++++++++++++++++++++++++++++++++++++++++++++++++++++--
 1 files changed, 374 insertions(+), 18 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 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;
                         }

--
Gitblit v1.9.1