From 6c265faa61e5cf0ea8a0c4fce81355a52e211de0 Mon Sep 17 00:00:00 2001
From: LSH
Date: 星期二, 21 十一月 2023 16:08:46 +0800
Subject: [PATCH] #

---
 src/main/java/com/zy/core/thread/RgvThread.java             |   20 ++++++
 src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java |  130 +++++++++++++++++++++++++++++++++++++++++++
 src/main/java/com/zy/core/MainProcess.java                  |   12 ++-
 src/main/java/com/zy/asrs/mapper/WrkMastStaMapper.java      |    1 
 src/main/java/com/zy/core/enums/RgvTaskModeType.java        |    2 
 src/main/resources/mapper/WrkMastStaMapper.xml              |   12 ++++
 6 files changed, 171 insertions(+), 6 deletions(-)

diff --git a/src/main/java/com/zy/asrs/mapper/WrkMastStaMapper.java b/src/main/java/com/zy/asrs/mapper/WrkMastStaMapper.java
index 680f267..cf94005 100644
--- a/src/main/java/com/zy/asrs/mapper/WrkMastStaMapper.java
+++ b/src/main/java/com/zy/asrs/mapper/WrkMastStaMapper.java
@@ -17,6 +17,7 @@
     * 鑾峰彇鎵�鏈変换鍔℃暟閲�
     * */
     Integer selectAllWrkCount(@Param("type")Integer type);
+    Integer selectAllWrkStsCount(@Param("type")Integer type,@Param("wrkSts")Integer wrkSts);
 
     /*
     * 鑾峰彇鎵�鏈夊彲鎵ц浠诲姟
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 4c8de9f..00617eb 100644
--- a/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
@@ -3832,6 +3832,16 @@
                 ) {
                     log.info("{}鍙峰皬杞︾瓑寰厀cs纭锛岀姸鎬亄}锛屽弬鏁皗}",rgvProtocol.getRgvNo(),rgvProtocol.getStatusType(),rgvProtocol);
                     if (rgvProtocol.getTaskNo1()!=0){
+                        if (rgvProtocol.getTaskNo1()==9999){
+                            boolean rgvComplete = rgvComplete(rgvProtocol.getRgvNo());
+                            if (!rgvComplete){
+                                log.error("灏忚溅澶嶄綅澶辫触锛屽皬杞﹀彿{}锛�",rgvProtocol.getRgvNo());
+                            }
+                            BasRgvMap basRgvMap = basRgvMapMapper.selectById(rgvProtocol.getRgvNo());
+                            basRgvMap.setNowRoute(rgvProtocol.getRgvPosI());
+                            rgvMapUpdate(basRgvMap,basRgvMap.getStartRoute(),basRgvMap.getStartRoute());
+                            break;
+                        }
                         WrkMastSta wrkMastSta = wrkMastStaMapper.selectByWrkNo(rgvProtocol.getTaskNo1().intValue());
                         if (Cools.isEmpty(wrkMastSta) || wrkMastSta.getType()!=1 || wrkMastSta.getWrkSts()!=1){
                             log.error("鏈煡鍒板皬杞︽墽琛屼换鍔℃垨鑰呮墽琛屼换鍔$姸鎬佷笉绗﹀悎锛�"+wrkMastSta);
@@ -3844,7 +3854,20 @@
                         }
                         wrkMastSta.setWrkSts(3);
                         wrkMastStaMapper.updateById(wrkMastSta);
+                        BasRgvMap basRgvMap = basRgvMapMapper.selectById(rgvProtocol.getRgvNo());
+                        basRgvMap.setNowRoute(rgvProtocol.getRgvPosI());
+                        rgvMapUpdate(basRgvMap,basRgvMap.getStartRoute(),basRgvMap.getStartRoute());
                     }else if (rgvProtocol.getTaskNo2()!=0){
+                        if (rgvProtocol.getTaskNo2()==9999){
+                            boolean rgvComplete = rgvComplete(rgvProtocol.getRgvNo());
+                            if (!rgvComplete){
+                                log.error("灏忚溅澶嶄綅澶辫触锛屽皬杞﹀彿{}锛�",rgvProtocol.getRgvNo());
+                            }
+                            BasRgvMap basRgvMap = basRgvMapMapper.selectById(rgvProtocol.getRgvNo());
+                            basRgvMap.setNowRoute(rgvProtocol.getRgvPosI());
+                            rgvMapUpdate(basRgvMap,basRgvMap.getStartRoute(),basRgvMap.getStartRoute());
+                            break;
+                        }
                         WrkMastSta wrkMastSta = wrkMastStaMapper.selectByWrkNo(rgvProtocol.getTaskNo2().intValue());
                         if (Cools.isEmpty(wrkMastSta) || wrkMastSta.getType()!=2){
                             log.error("鏈煡鍒板皬杞︽墽琛屼换鍔℃垨鑰呮墽琛屼换鍔$姸鎬佷笉绗﹀悎锛�"+wrkMastSta);
@@ -3857,6 +3880,9 @@
                         }
                         wrkMastSta.setWrkSts(3);
                         wrkMastStaMapper.updateById(wrkMastSta);
+                        BasRgvMap basRgvMap = basRgvMapMapper.selectById(rgvProtocol.getRgvNo());
+                        basRgvMap.setNowRoute(rgvProtocol.getRgvPosI());
+                        rgvMapUpdate(basRgvMap,basRgvMap.getStartRoute(),basRgvMap.getStartRoute());
                     }else {
                         log.error("灏忚溅澶嶄綅澶辫触锛屽皬杞﹀彿{},绛夊緟wcs纭浣嗘槸娌℃湁宸ヤ綔鍙凤紒",rgvProtocol.getRgvNo());
                     }
@@ -4055,6 +4081,108 @@
         }
     }
 
+    /*
+    * 鏈変换鍔′絾鏈墽琛�  姝ゆ椂闇�瑕佽皟鏁村皬杞︿綅缃�
+    * */
+    public synchronized void rgvRunWrkMastEmptyStaAvoidance() {
+        try{
+            Integer integer = wrkMastStaMapper.selectAllWrkStsCount(null,0);//鏌ヨ鐘舵�佷负0鐨勪换鍔�
+            if (integer==0){
+                return;
+            }
+            for (RgvSlave rgvSlave:slaveProperties.getRgv()) {
+                RgvThread rgvThread = (RgvThread) SlaveConnection.get(SlaveType.Rgv, rgvSlave.getId());
+                RgvProtocol rgvProtocol = rgvThread.getRgvProtocol();
+                if (rgvProtocol == null) {
+                    continue;
+                }
+                BasRgv basRgv = basRgvService.selectById(rgvSlave.getId());
+                if (basRgv == null) {
+                    log.error("{}鍙稲GV灏氭湭鍦ㄦ暟鎹簱杩涜缁存姢锛�", rgvSlave.getId());
+                    continue;
+                }
+
+                // 鍙湁褰揜GV绌洪棽銆佽嚜鍔�,宸ヤ綅涓�鏃犵墿//rgv鍙敤
+                if (rgvProtocol.getStatusType() == RgvStatusType.IDLE
+                        && rgvProtocol.getModeType() == RgvModeType.AUTO
+                        && rgvProtocol.getLoaded1()==0  //鐜板満淇敼锛氬彔鐩樻満锛屼笉婊¢兘绠楁棤鐗╋紝鎬庝箞鍒ゆ柇闇�瑕佽窡鐢垫帶瀵规帴
+                        && rgvProtocol.getTaskNo1()==0
+                        && rgvProtocol.getTaskNo2()==0
+                ) {
+                    BasRgvMap basRgvMap = basRgvMapMapper.selectById(rgvProtocol.getRgvNo());
+                    if (rgvProtocol.getRgvPosI().equals(basRgvMap.getStartRoute())){
+                        continue;
+                    }
+                    rgvAvoidanceXY(rgvProtocol.getRgvNo());
+                    rgvMapUpdate(basRgvMap,basRgvMap.getStartRoute(),basRgvMap.getStartRoute());
+                }
+            }
+        }catch (Exception e){
+            log.error("4109琛屾墽琛屽皬杞﹀垵濮嬪寲浠诲姟涓嬪彂澶辫触");
+            log.error("4109琛�"+e);
+        }
+    }
+
+    /*
+     * 鍒锋柊鍦板浘鏁版嵁
+     * */
+    public synchronized void refreshRgvMap() {
+        try{
+            for (RgvSlave rgvSlave:slaveProperties.getRgv()) {
+                RgvThread rgvThread = (RgvThread) SlaveConnection.get(SlaveType.Rgv, rgvSlave.getId());
+                RgvProtocol rgvProtocol = rgvThread.getRgvProtocol();
+                if (rgvProtocol == null) {
+                    continue;
+                }
+                BasRgv basRgv = basRgvService.selectById(rgvSlave.getId());
+                if (basRgv == null) {
+                    log.error("{}鍙稲GV灏氭湭鍦ㄦ暟鎹簱杩涜缁存姢锛�", rgvSlave.getId());
+                    continue;
+                }
+
+                // 鍙湁褰揜GV绌洪棽銆佽嚜鍔�,宸ヤ綅涓�鏃犵墿//rgv鍙敤
+                if (rgvProtocol.getStatusType() == RgvStatusType.IDLE
+                        && rgvProtocol.getModeType() == RgvModeType.AUTO
+                        && rgvProtocol.getLoaded1()==0  //鐜板満淇敼锛氬彔鐩樻満锛屼笉婊¢兘绠楁棤鐗╋紝鎬庝箞鍒ゆ柇闇�瑕佽窡鐢垫帶瀵规帴
+                        && (rgvProtocol.getTaskNo1()==0 || rgvProtocol.getTaskNo1()==9999)
+                        && (rgvProtocol.getTaskNo2()==0 || rgvProtocol.getTaskNo2()==9999)
+                ) {
+                    BasRgvMap basRgvMap = basRgvMapMapper.selectById(rgvProtocol.getRgvNo());
+                    basRgvMap.setNowRoute(rgvProtocol.getRgvPosI());
+                    rgvMapUpdate(basRgvMap,basRgvMap.getStartRoute(),basRgvMap.getStartRoute());
+                }
+            }
+        }catch (Exception e){
+            log.error("4109琛屾墽琛屽皬杞﹀垵濮嬪寲浠诲姟涓嬪彂澶辫触");
+            log.error("4109琛�"+e);
+        }
+    }
+
+    /*
+     * 灏忚溅XY绉诲姩  閬胯
+     * */
+    public synchronized boolean rgvAvoidanceXY(Integer rgvId){
+        try{
+            //  鍛戒护涓嬪彂鍖� --------------------------------------------------------------------------
+            RgvCommand rgvCommand = new RgvCommand();
+            rgvCommand.setRgvNo(rgvId); // RGV缂栧彿
+            rgvCommand.setAckFinish1((short) 0);  // 宸ヤ綅1浠诲姟瀹屾垚纭浣�
+            rgvCommand.setTaskNo1((short)9999); // 宸ヤ綅1宸ヤ綔鍙�
+            rgvCommand.setTaskMode1(RgvTaskModeType.GO_ORIGIN); // 宸ヤ綅1浠诲姟妯″紡:  鍥炲師鐐�
+            rgvCommand.setCommand((short) 1);   //宸ヤ綅1浠诲姟纭
+            if (!MessageQueue.offer(SlaveType.Crn, rgvId, new Task(9, rgvCommand))) {
+                //step=2,宸ヤ綅1銆�2鍐欎换鍔★紱   step=4锛屽伐浣�1鍐欎换鍔★紱     step=5锛屽伐浣�2鍐欎换鍔�   step=9锛屽洖鍘熺偣 9999浠诲姟鍙�
+                log.error("RGV鍛戒护涓嬪彂澶辫触锛孯GV鍙�={}锛屼换鍔℃暟鎹�={}", rgvId, JSON.toJSON(rgvCommand));
+                return false;
+            } else {
+                return true;
+            }
+        }catch (Exception e){
+            return false;
+
+        }
+    }
+
 
     /*
     * 灏忚溅鍙栬揣鑷冲伐浣嶄换鍔�
@@ -4193,9 +4321,11 @@
                 log.error("RGV鍛戒护涓嬪彂澶辫触锛孯GV鍙�={}",rgvId);
                 return false;
             } else {
+                log.info("RGV鍛戒护涓嬪彂鎴愬姛锛孯GV鍙�={}",rgvId);
                 return true;
             }
         }catch (Exception e){
+            log.error("RGV鍛戒护涓嬪彂澶辫触锛孯GV鍙�={}銆傚紓甯革細"+e,rgvId);
             return false;
         }
     }
diff --git a/src/main/java/com/zy/core/MainProcess.java b/src/main/java/com/zy/core/MainProcess.java
index 16f7ab0..ca6aadc 100644
--- a/src/main/java/com/zy/core/MainProcess.java
+++ b/src/main/java/com/zy/core/MainProcess.java
@@ -45,13 +45,14 @@
 
                     //鍒濆鍖朢GV鍦板浘
 //                    mainService.initRgvMap();
+                    mainService.refreshRgvMap();
                     // 婕旂ず
                     mainService.crnDemoOfLocMove1();
                     // 鍏ュ嚭搴撴ā寮忓垏鎹㈠嚱鏁�
 //                    mainService.ioConvert();
                     // 鍏ュ簱  ===>> 鍏ュ簱绔欏埌鍫嗗灈鏈虹珯锛屾牴鎹潯鐮佹壂鎻忕敓鎴愬叆搴撳伐浣滄。
                     mainService.generateStoreWrkFile(); // 缁勬墭
-                    mainService.generateStoreWrkFile0(); // WMS鍏ュ簱
+//                    mainService.generateStoreWrkFile0(); // WMS鍏ュ簱
                     // 鎷f枡銆佸苟鏉裤�佺洏鐐瑰啀鍏ュ簱
                     mainService.stnToCrnStnPick();
                     // 鍑哄簱  ===>>  鍫嗗灈鏈哄嚭搴撶珯鍒板嚭搴撶珯
@@ -66,10 +67,10 @@
                     /////////////////////////////////////RGV璋冨害/////////////////////////////////////
 
 //                    //缁戝畾灏忚溅鏂规硶
-                    mainService.rgvBindSte();
-                    mainService.rgvBindSte2();
-//                    // 鍏ュ嚭搴�  ===>>  RGV鍏ュ嚭搴撲綔涓氫笅鍙�
-                    mainService.rgvIoExecute();
+//                    mainService.rgvBindSte();
+//                    mainService.rgvBindSte2();
+////                    // 鍏ュ嚭搴�  ===>>  RGV鍏ュ嚭搴撲綔涓氫笅鍙�
+//                    mainService.rgvIoExecute();
 //                    // RGV鍏ュ簱  ===>> 鏍规嵁RGV瀹屾垚淇″彿,鎵ц瀵瑰伐浣滄。鐨勫畬鎴愭搷浣�
 //                    mainService.rgvFinished();
 //                    // 鍏ュ嚭搴�  ===>>  RGV鍑哄簱绔欏埌绯荤粺鍏ュ嚭搴撶珯
@@ -84,6 +85,7 @@
                     //鎵ц灏忚溅绌烘澘鎼繍浠诲姟
                     mainService.rgvRunWrkMastEmptyStaPut();//鏀�
                     mainService.rgvRunWrkMastEmptyStaTake();//鍙�
+                    mainService.rgvRunWrkMastEmptyStaAvoidance();//閬胯
 
 
                     /////////////////////////////////////RGV璋冨害/////////////////////////////////////
diff --git a/src/main/java/com/zy/core/enums/RgvTaskModeType.java b/src/main/java/com/zy/core/enums/RgvTaskModeType.java
index e5d2748..290b43d 100644
--- a/src/main/java/com/zy/core/enums/RgvTaskModeType.java
+++ b/src/main/java/com/zy/core/enums/RgvTaskModeType.java
@@ -9,7 +9,7 @@
 //    X_MOVE(4),    // 绔欎綅绉昏浆
 //    Y_MOVE(5),    // 绔欎綅绉昏浆
 //    XY_MOVE(6),    // 绔欎綅绉昏浆
-//    GO_ORIGIN(7),    // 鍥炲師鐐�
+    GO_ORIGIN(7),    // 鍥炲師鐐�
 //    BACK_ORIGIN(8),      // 鍥炲弽鍘熺偣
 //    CLEAR(9),       // 娓呴敊
     ;
diff --git a/src/main/java/com/zy/core/thread/RgvThread.java b/src/main/java/com/zy/core/thread/RgvThread.java
index c3dd9d8..94d8059 100644
--- a/src/main/java/com/zy/core/thread/RgvThread.java
+++ b/src/main/java/com/zy/core/thread/RgvThread.java
@@ -99,6 +99,26 @@
                         command.setCommand((short)0);
                         write(command);
                         break;
+                    // 鍥炲師鐐�  閬胯
+                    case 9:
+                        RgvCommand commandAvoidanceXY = (RgvCommand) task.getData();
+                        if (null == commandAvoidanceXY) {
+                            commandAvoidanceXY = new RgvCommand();
+                        }
+                        commandAvoidanceXY.setRgvNo(slave.getId()); // RGV缂栧彿
+                        commandAvoidanceXY.setTaskNo1((short) 9999); // 宸ヤ綔鍙�
+                        commandAvoidanceXY.setAckFinish1((short) 1);  // 浠诲姟瀹屾垚纭浣�
+                        commandAvoidanceXY.setTaskMode1(RgvTaskModeType.GO_ORIGIN); // 浠诲姟妯″紡
+                        commandAvoidanceXY.setSourceStaNo1((short)0);     // 婧愮珯
+                        commandAvoidanceXY.setDestinationStaNo1((short)0);     // 鐩爣绔�
+                        commandAvoidanceXY.setTaskNo2((short) 0); // 宸ヤ綔鍙�
+                        commandAvoidanceXY.setAckFinish2((short) 1);  // 浠诲姟瀹屾垚纭浣�
+                        commandAvoidanceXY.setTaskMode2(RgvTaskModeType.GO_ORIGIN); // 浠诲姟妯″紡
+                        commandAvoidanceXY.setSourceStaNo2((short)0);     // 婧愮珯
+                        commandAvoidanceXY.setDestinationStaNo2((short)0);     // 鐩爣绔�
+                        commandAvoidanceXY.setCommand((short)0);
+                        write(commandAvoidanceXY);
+                        break;
                     default:
                         break;
                 }
diff --git a/src/main/resources/mapper/WrkMastStaMapper.xml b/src/main/resources/mapper/WrkMastStaMapper.xml
index 429d50c..e932388 100644
--- a/src/main/resources/mapper/WrkMastStaMapper.xml
+++ b/src/main/resources/mapper/WrkMastStaMapper.xml
@@ -82,6 +82,18 @@
         </if>
     </select>
 
+    <select id="selectAllWrkCount" resultMap="Integer">
+        select count(1) from asr_wrk_mast_sta
+        where 1=1
+        <if test="type!=null">
+            and type = #{type}
+        </if>
+        <if test="wrkSts!=null">
+            and wrk_sts = #{wrkSts}
+        </if>
+    </select>
+
+
 
 
 </mapper>

--
Gitblit v1.9.1