From 1dacf2305187f5c2fb44f03b6b754c46cb73ba25 Mon Sep 17 00:00:00 2001
From: L <L@132>
Date: 星期四, 19 三月 2026 08:53:59 +0800
Subject: [PATCH] *

---
 src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java |  166 ++++++++++++++++++++++++++++++++++++++++++++++++++----
 1 files changed, 152 insertions(+), 14 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 be3cfa5..e6e8827 100644
--- a/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
@@ -100,7 +100,7 @@
     public synchronized int[][] getStePositionNearby(Integer siteNo) {
         try {
             List<BasDevpPosition> basDevpPositions = basDevpPositionService.selectList(new EntityWrapper<BasDevpPosition>().orderBy("plc_position", true));
-            if (basDevpPositions.isEmpty()) {
+            if (basDevpPositions == null || basDevpPositions.isEmpty()) {
                 log.error("鑾峰彇鎵�鏈夌珯鐐逛俊鎭紓甯�");
                 return null;
             }
@@ -114,8 +114,11 @@
             List<List<Long>> rgvPositionList = new ArrayList<>();
             for (RgvSlave rgvSlave : slaveProperties.getRgv()) {
                 RgvThread rgvThread = (RgvThread) SlaveConnection.get(SlaveType.Rgv, rgvSlave.getId());
+                if (rgvThread == null) {
+                    continue;
+                }
                 RgvProtocol rgvProtocol = rgvThread.getRgvProtocol();
-                if (rgvProtocol == null) {
+                if (rgvProtocol == null || rgvProtocol.getRgvNo() == null || rgvProtocol.getRgvPos() == null) {
                     continue;
                 }
                 List<Long> rgvPosition = new ArrayList<>();
@@ -123,17 +126,31 @@
                 rgvPosition.add(rgvProtocol.getRgvPos());
                 rgvPositionList.add(rgvPosition);
             }
+            if (rgvPositionList.isEmpty()) {
+                return null;
+            }
             Integer rgvNo = SortTheExecutionOfTheCarUtil.LatelyAndGreaterThan(rgvPositionList, sitePosition, perimeter);
             if (rgvNo == -1) {
                 log.info("鏇存柊灏忚溅鎺掑簭淇℃伅寮傚父={}", rgvNo);
                 return null;
             }
-            List<BasCircularShuttle> basCircularShuttleList = basCircularShuttleService.selectList(new EntityWrapper<BasCircularShuttle>().eq("status", 0).orderBy("rgv_id", true));
+            List<BasCircularShuttle> basCircularShuttleList = basCircularShuttleService.selectList(new EntityWrapper<BasCircularShuttle>().orderBy("rgv_id", true));
+            if (basCircularShuttleList == null || basCircularShuttleList.isEmpty()) {
+                return null;
+            }
             int[][] ints = new int[basCircularShuttleList.size()][2];
             for (BasCircularShuttle basCircularShuttle : basCircularShuttleList) {
+                if (basCircularShuttle == null || basCircularShuttle.getRgvNo() == null || basCircularShuttle.getRgvId() == null) {
+                    continue;
+                }
+                if (basCircularShuttle.getRgvNo() < 1 || basCircularShuttle.getRgvNo() > basCircularShuttleList.size()) {
+                    continue;
+                }
                 ints[basCircularShuttle.getRgvNo() - 1] = new int[]{basCircularShuttle.getRgvNo(), basCircularShuttle.getRgvId()};
             }
-            if (basCircularShuttleList.get(0).getRgvNo().equals(rgvNo)) {
+            if (basCircularShuttleList.get(0) != null
+                    && basCircularShuttleList.get(0).getRgvNo() != null
+                    && basCircularShuttleList.get(0).getRgvNo().equals(rgvNo)) {
                 return ints;
             }
 //            String[] oldList = new String[ints.length];
@@ -145,7 +162,7 @@
 
 
         } catch (Exception e) {
-            log.error("鑷姩鏇存柊灏忚溅鎺掑簭淇℃伅澶辫触锛屽紓甯革細" + e);
+            log.error("鑷姩鏇存柊灏忚溅鎺掑簭淇℃伅澶辫触(getStePositionNearby), siteNo={}", siteNo, e);
         }
         return null;
 
@@ -159,12 +176,23 @@
             boolean sign = false;
             Integer rgvNo = 0;
             List<BasCircularShuttle> basCircularShuttleList = basCircularShuttleService.selectList(new EntityWrapper<BasCircularShuttle>().orderBy("rgv_id", true));
+            if (basCircularShuttleList == null || basCircularShuttleList.isEmpty()) {
+                return;
+            }
             for (BasCircularShuttle basCircularShuttle : basCircularShuttleList) {
+                if (basCircularShuttle == null || basCircularShuttle.getRgvNo() == null) {
+                    sign = true;
+                    continue;
+                }
                 if (basCircularShuttle.getStatus() != 0){
                     sign = true;
                     continue;
                 }
                 RgvThread rgvThread = (RgvThread) SlaveConnection.get(SlaveType.Rgv, basCircularShuttle.getRgvNo());
+                if (rgvThread == null) {
+                    sign = true;
+                    continue;
+                }
                 RgvProtocol rgvProtocol = rgvThread.getRgvProtocol();
                 if (rgvProtocol == null) {
                     sign = true;
@@ -178,6 +206,12 @@
             if (sign && rgvNo != 0) {
                 int[][] ints = new int[basCircularShuttleList.size()][2];
                 for (BasCircularShuttle basCircularShuttle : basCircularShuttleList) {
+                    if (basCircularShuttle == null || basCircularShuttle.getRgvNo() == null || basCircularShuttle.getRgvId() == null) {
+                        continue;
+                    }
+                    if (basCircularShuttle.getRgvNo() < 1 || basCircularShuttle.getRgvNo() > basCircularShuttleList.size()) {
+                        continue;
+                    }
                     ints[basCircularShuttle.getRgvNo() - 1] = new int[]{basCircularShuttle.getRgvNo(), basCircularShuttle.getRgvId()};
                 }
 //                String[] oldList = new String[ints.length];
@@ -192,14 +226,23 @@
 
 //                log.info("鏇存柊灏忚溅鎺掑簭淇℃伅锛氬師濮嬪皬杞﹀彿rgvNo={},灏忚溅閲嶆柊鎺掑簭淇℃伅={},灏忚溅鍘熷鎺掑簭淇℃伅={}",rgvNo,Arrays.toString(newList),Arrays.toString(oldList));
                 for (BasCircularShuttle basCircularShuttle : basCircularShuttleList) {
+                    if (basCircularShuttle == null || basCircularShuttle.getRgvNo() == null) {
+                        continue;
+                    }
+                    if (basCircularShuttle.getRgvNo() < 1 || basCircularShuttle.getRgvNo() > rgvList.length) {
+                        continue;
+                    }
                     int[] rgv = rgvList[basCircularShuttle.getRgvNo() - 1];
+                    if (rgv == null || rgv.length < 2) {
+                        continue;
+                    }
                     basCircularShuttle.setRgvId(rgv[1]);
                     basCircularShuttleService.updateById(basCircularShuttle);
                 }
             }
 
         } catch (Exception e) {
-            log.error("鑷姩鏇存柊灏忚溅鎺掑簭淇℃伅澶辫触锛屽紓甯革細" + e);
+            log.error("鑷姩鏇存柊灏忚溅鎺掑簭淇℃伅澶辫触(updateStePosition)", e);
         }
     }
 
@@ -219,13 +262,22 @@
             }
 
             BasCircularShuttle basCircularShuttle = basCircularShuttleService.selectOne(new EntityWrapper<BasCircularShuttle>().eq("rgv_id", 1));
+            if (basCircularShuttle == null || basCircularShuttle.getRgvNo() == null) {
+                return;
+            }
             RgvThread rgvThread = (RgvThread) SlaveConnection.get(SlaveType.Rgv, basCircularShuttle.getRgvNo());
+            if (rgvThread == null) {
+                return;
+            }
             RgvProtocol rgvProtocol = rgvThread.getRgvProtocol();
-            if (rgvProtocol == null) {
+            if (rgvProtocol == null || rgvProtocol.getRgvPos() == null) {
                 return;
             }
             List<BasDevpPosition> basDevpPositions = basDevpPositionService.selectList(new EntityWrapper<BasDevpPosition>().orderBy("plc_position", true));
             List<BasDevpPosition> basDevpPositionDevRegion = basDevpPositionService.selectList(new EntityWrapper<BasDevpPosition>().orderBy("dev_region", true));
+            if (basDevpPositions == null || basDevpPositions.isEmpty() || basDevpPositionDevRegion == null || basDevpPositionDevRegion.isEmpty()) {
+                return;
+            }
             Integer devNo = SortTheExecutionOfTheCarUtil.LatelyAndLessThan(basDevpPositions, rgvProtocol.getRgvPos(), perimeter);
             BasDevpPosition[] basDevpPositionsList = SortTheExecutionOfTheCarUtil.devpNoSort(basDevpPositions, devNo);
             BasDevpPosition[] basDevpPositionsListUN = SortTheExecutionOfTheCarUtil.devpNoSortUN(basDevpPositionsList);
@@ -355,14 +407,20 @@
                             }
 
                             BasCircularShuttle basCircularShuttle = basCircularShuttleService.selectOne(new EntityWrapper<BasCircularShuttle>().eq("rgv_no", rgvNo));
+                            if (basCircularShuttle == null) {
+                                continue;
+                            }
                             if (basCircularShuttle.getStatus() != 0){
                                 continue ;
                             }
                             long rgvId = basCircularShuttle.getRgvId();
 
                             RgvThread rgvThread = (RgvThread) SlaveConnection.get(SlaveType.Rgv, basCircularShuttle.getRgvNo());
+                            if (rgvThread == null) {
+                                continue;
+                            }
                             RgvProtocol rgvProtocol = rgvThread.getRgvProtocol();
-                            if (rgvProtocol == null) {
+                            if (rgvProtocol == null || rgvProtocol.getRgvNo() == null || rgvProtocol.getRgvPos() == null) {
                                 continue;
                             }
 
@@ -374,8 +432,12 @@
                                     && rgvProtocol.modeType == RgvModeType.AUTO
                                     && (rgvProtocol.getStatusType() == RgvStatusType.IDLE || rgvProtocol.getStatusType() == RgvStatusType.ROAM)
                                     && rgvProtocol.getTaskNo1() == 0
+                                    && rgvProtocol.getRgvPosInt() != 0
                                     && rgvProtocol.getAlarm() == 0) {
                                 BasDevpPosition basDevpPosition = basDevpPositionService.selectOne(new EntityWrapper<BasDevpPosition>().eq("dev_no", wrkMast.getSourceStaNo()));
+                                if (basDevpPosition == null || basDevpPosition.getPlcPosition() == null) {
+                                    continue;
+                                }
                                 if (basDevpPosition.getPlcPosition()>rgvProtocol.getRgvPos()){
                                     if (basDevpPosition.getPlcPosition()-rgvProtocol.getRgvPos()>taskRunPerimeter){
                                         if (!rgvNoM.contains(rgvProtocol.getRgvNo())){
@@ -478,6 +540,9 @@
                     continue;
                 }
                 RgvThread rgvThread = (RgvThread) SlaveConnection.get(SlaveType.Rgv, rgvNo);
+                if (rgvThread == null) {
+                    continue;
+                }
                 RgvProtocol rgvProtocol = rgvThread.getRgvProtocol();
                 if (rgvProtocol == null) {
                     continue;
@@ -503,9 +568,12 @@
 
     //浠诲姟瀹屾垚
     public synchronized void rgvCompleteWrkMastSta(int[] autoZ) {
-        try {
-            for (RgvSlave rgvSlave : slaveProperties.getRgv()) {
+        for (RgvSlave rgvSlave : slaveProperties.getRgv()) {
+            try {
                 RgvThread rgvThread = (RgvThread) SlaveConnection.get(SlaveType.Rgv, rgvSlave.getId());
+                if (rgvThread == null) {
+                    continue;
+                }
                 RgvProtocol rgvProtocol = rgvThread.getRgvProtocol();
                 if (rgvProtocol == null) {
                     continue;
@@ -515,7 +583,7 @@
                     log.error("{}鍙稲GV灏氭湭鍦ㄦ暟鎹簱杩涜缁存姢锛�", rgvSlave.getId());
                     continue;
                 }
-                if (rgvProtocol.getStatusType() == RgvStatusType.WAITING) {
+                if (rgvProtocol.getStatusType() == RgvStatusType.WAITING || rgvProtocol.getStatusType() == RgvStatusType.WAITING101) {
                     log.info("{}鍙峰皬杞︾瓑寰厀cs纭锛岀姸鎬亄}锛屽弬鏁皗}", rgvProtocol.getRgvNo(), rgvProtocol.getStatusType(), rgvProtocol);
                 }
                 // 鍙湁褰揜GV绛夊緟WCS纭銆佽嚜鍔�
@@ -524,7 +592,7 @@
                         && rgvProtocol.getTaskNo1() != 0
                 ) {
 //                    log.info("{}鍙峰皬杞︾瓑寰厀cs纭锛岀姸鎬亄}锛屽弬鏁皗}",rgvProtocol.getRgvNo(),rgvProtocol.getStatusType(),rgvProtocol);
-                    WrkMast wrkMast = wrkMastService.selectOne(new EntityWrapper<WrkMast>().eq("wrk_no", rgvProtocol.getTaskNo1().longValue()));
+                    WrkMast wrkMast = wrkMastService.selectOne(new EntityWrapper<WrkMast>().eq("wrk_no", rgvProtocol.getTaskNo1().longValue()).eq("rgv_no",rgvProtocol.getRgvNo()));
                     if (Cools.isEmpty(wrkMast) || !wrkMast.getWrkSts().equals(2L)) {
                         log.error("鏈煡鍒板皬杞︽墽琛屼换鍔℃垨鑰呮墽琛屼换鍔$姸鎬佷笉绗﹀悎锛�" + wrkMast);
                         continue;
@@ -576,10 +644,80 @@
                         }
                     } catch (Exception e){}
                     wrkMastService.updateById(wrkMast);
+                } else if (rgvProtocol.getStatusType() == RgvStatusType.WAITING101
+                        && rgvProtocol.getModeType() == RgvModeType.AUTO
+                        && rgvProtocol.getTaskNo1() != 0
+                ){
+                    boolean rgvComplete = rgvComplete(rgvProtocol.getRgvNo());
+                    if (!rgvComplete) {
+                        log.error("灏忚溅澶嶄綅澶辫触锛屽皬杞﹀彿{}锛�", rgvProtocol.getRgvNo());
+                        break;
+                    }
                 }
+            } catch (Exception e) {
+                log.error("灏忚溅澶嶄綅绾跨▼鎶ラ敊锛�" + e);
             }
-        } catch (Exception e) {
-            log.error("灏忚溅澶嶄綅绾跨▼鎶ラ敊锛�" + e);
+        }
+    }
+    public synchronized void rgvCancelWrkMastSta() {
+        for (RgvSlave rgvSlave : slaveProperties.getRgv()) {
+            try {
+                RgvThread rgvThread = (RgvThread) SlaveConnection.get(SlaveType.Rgv, rgvSlave.getId());
+                if (rgvThread == null) {
+                    continue;
+                }
+                RgvProtocol rgvProtocol = rgvThread.getRgvProtocol();
+                if (rgvProtocol == null) {
+                    continue;
+                }
+                if (rgvProtocol.getStatusType() == RgvStatusType.CANCEL) {
+                    log.info("{}鍙峰皬杞︾瓑寰厀cs鍙栨秷锛岀姸鎬亄}锛屽弬鏁皗}", rgvProtocol.getRgvNo(), rgvProtocol.getStatusType(), rgvProtocol);
+                }
+                // 鍙湁褰揜GV绛夊緟WCS纭銆佽嚜鍔�
+                if (rgvProtocol.getStatusType() == RgvStatusType.CANCEL
+                        && rgvProtocol.getModeType() == RgvModeType.AUTO
+                        && rgvProtocol.getTaskNo1() != 0
+                ) {
+
+                    RgvCommand rgvCommand = new RgvCommand();
+                    rgvCommand.setRgvNo(rgvProtocol.getRgvNo());
+                    rgvCommand.setAckFinish1((short) 0);  // 宸ヤ綅1浠诲姟瀹屾垚纭浣�
+                    rgvCommand.setTaskNo1(rgvProtocol.getTaskNo1());
+                    rgvCommand.setTaskMode1(RgvTaskModeType.CANCEL); // 宸ヤ綅1浠诲姟妯″紡:  鍙栨秷
+                    rgvCommand.setSourceStaNo1((short)-1);   //宸ヤ綅1璧风偣
+                    rgvCommand.setDestinationStaNo1((short)-1);   //宸ヤ綅1鐩爣绔欑偣
+//                    rgvCommand.setCommand((short) 1);   //宸ヤ綅1浠诲姟纭
+//                    rgvCommand.setRgvSome((short) 1);
+                    if (!MessageQueue.offer(SlaveType.Rgv, rgvProtocol.getRgvNo(), new Task(4, rgvCommand))) {
+                        //
+                        log.error("RGV鍙栨秷鍛戒护涓嬪彂澶辫触锛孯GV鍙�={}锛屼换鍔℃暟鎹�={}", rgvProtocol.getRgvNo(), JSON.toJSON(rgvCommand));
+//                        wrkMast.setLogErrTime(new Date());
+//                        wrkMast.setLogErrMemo("RGV鍙栨秷鍛戒护涓嬪彂澶辫触锛孯GV鍙�={"+rgvProtocol.getRgvNo()+"}===>璺宠繃");
+//                        wrkMastService.updateById(wrkMast);
+                        continue;
+                    }
+                    log.info("RGV鍙栨秷鍛戒护涓嬪彂鎴愬姛锛孯GV鍙�={}锛屼换鍔℃暟鎹�={}", rgvProtocol.getRgvNo(), JSON.toJSON(rgvCommand));
+
+                    WrkMast wrkMast = wrkMastService.selectOne(new EntityWrapper<WrkMast>().eq("wrk_no", rgvCommand.getTaskNo1().longValue()).eq("rgv_no",rgvCommand.getRgvNo()));
+                    if (Cools.isEmpty(wrkMast) || !wrkMast.getWrkSts().equals(2L)) {
+                        log.error("鏈煡鍒板皬杞︽墽琛屼换鍔℃垨鑰呮墽琛屼换鍔$姸鎬佷笉绗﹀悎锛�" + wrkMast);
+                        continue;
+                    }
+
+                    Date now = new Date();
+                    wrkMast.setWrkSts(1L);
+                    wrkMast.setRgvNo(0);
+                    wrkMast.setAppeTime(now);
+                    wrkMast.setLogErrTime(now);
+
+                    wrkMast.setLogErrMemo("RGV鐢宠鍙栨秷浠诲姟锛孯GV鍙�={"+rgvProtocol.getRgvNo()+"}锛屽彇娑堟椂闂达細"+now);
+
+                    wrkMastService.updateById(wrkMast);
+
+                }
+            } catch (Exception e) {
+                log.error("灏忚溅鍙栨秷绾跨▼鎶ラ敊锛�" + e);
+            }
         }
     }
 

--
Gitblit v1.9.1