From 6be77dcf31e3c9d7233b36d8e9d22c4d1d802f3e Mon Sep 17 00:00:00 2001
From: lsh <lsh@163.com>
Date: 星期六, 07 六月 2025 17:18:13 +0800
Subject: [PATCH] *

---
 src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java |  263 ++++++++++++++++++++++++++-------------------------
 1 files changed, 134 insertions(+), 129 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 6769ec8..c5d84c1 100644
--- a/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
@@ -94,29 +94,16 @@
         return false;
     }
 
-
     /**
      * 绔欑偣浠诲姟妫�娴�  鏇存柊灏忚溅浣嶇疆淇℃伅
      */
-    public synchronized void updateStePositionNearby() {
+    public synchronized int[][] getStePositionNearby(Integer siteNo) {
         try {
-            List<WrkMast> wrkMasts = wrkMastService.selectList(new EntityWrapper<WrkMast>().eq("wrk_sts", 1L));
-            if (wrkMasts.isEmpty()) {
-                return;
-            }
             List<BasDevpPosition> basDevpPositions = basDevpPositionService.selectList(new EntityWrapper<BasDevpPosition>().orderBy("plc_position", true));
             if (basDevpPositions.isEmpty()) {
                 log.error("鑾峰彇鎵�鏈夌珯鐐逛俊鎭紓甯�");
-                return;
+                return null;
             }
-//            List<Integer> siteList = SortTheExecutionOfTheCarUtil.WrkMastExtractSites(wrkMasts);
-//            List<Integer> devpList = SortTheExecutionOfTheCarUtil.BasDevpPositionExtractSites(basDevpPositions);
-//            Integer siteNo = SortTheExecutionOfTheCarUtil.ObtainDenseAreasFirstPlace(siteList, devpList);
-//            if (siteNo == null) {
-//                log.error("灏辫繎瀵嗛泦鍘熷垯鑾峰彇绔欑偣澶辫触");
-//                return;
-//            }
-            Integer siteNo = 110;
             Long sitePosition = 0L;
             for (BasDevpPosition basDevpPosition : basDevpPositions) {
                 if (basDevpPosition.getDevNo().equals(siteNo)) {
@@ -139,37 +126,29 @@
             Integer rgvNo = SortTheExecutionOfTheCarUtil.LatelyAndGreaterThan(rgvPositionList, sitePosition, perimeter);
             if (rgvNo == -1) {
                 log.info("鏇存柊灏忚溅鎺掑簭淇℃伅寮傚父={}", rgvNo);
-                return;
+                return null;
             }
             List<BasCircularShuttle> basCircularShuttleList = basCircularShuttleService.selectList(new EntityWrapper<BasCircularShuttle>().eq("status", 0).orderBy("rgv_id", true));
-            if (basCircularShuttleList.get(0).getRgvNo().equals(rgvNo)) {
-                return;
-            }
-
             int[][] ints = new int[basCircularShuttleList.size()][2];
             for (BasCircularShuttle basCircularShuttle : basCircularShuttleList) {
                 ints[basCircularShuttle.getRgvNo() - 1] = new int[]{basCircularShuttle.getRgvNo(), basCircularShuttle.getRgvId()};
+            }
+            if (basCircularShuttleList.get(0).getRgvNo().equals(rgvNo)) {
+                return ints;
             }
 //            String[] oldList = new String[ints.length];
 //            for (int[] rgv : ints){
 //                oldList[rgv[0]-1] = Arrays.toString(rgv);
 //            }
             int[][] rgvList = SortTheExecutionOfTheCarUtil.ReorderSteId(ints, rgvNo);
-//            String[] newList = new String[rgvList.length];
-//            for (int[] rgv : rgvList){
-//                newList[rgv[0]-1] = Arrays.toString(rgv);
-//            }
+            return rgvList;
 
-//            log.info("鏇存柊灏忚溅鎺掑簭淇℃伅锛氬師濮嬪皬杞﹀彿rgvNo={},灏忚溅閲嶆柊鎺掑簭淇℃伅={},灏忚溅鍘熷鎺掑簭淇℃伅={}",rgvNo,Arrays.toString(newList),Arrays.toString(oldList));
-            for (BasCircularShuttle basCircularShuttle : basCircularShuttleList) {
-                int[] rgv = rgvList[basCircularShuttle.getRgvNo() - 1];
-                basCircularShuttle.setRgvId(rgv[1]);
-                basCircularShuttleService.updateById(basCircularShuttle);
-            }
 
         } catch (Exception e) {
             log.error("鑷姩鏇存柊灏忚溅鎺掑簭淇℃伅澶辫触锛屽紓甯革細" + e);
         }
+        return null;
+
     }
 
     /**
@@ -227,22 +206,24 @@
     /**
      * 绔欑偣浠诲姟妫�娴�  涓嬪彂灏忚溅鍙栨斁浠诲姟
      */
-    public synchronized void DevpTaskNoRun() {
+    public synchronized List<List<List<WrkMast>>> DevpTaskNoRun() {
+        List<List<List<WrkMast>>> wrkMastListAll = new ArrayList<>();
+
         try {
             List<WrkMast> wrkMasts = wrkMastService.selectList(new EntityWrapper<WrkMast>().eq("wrk_sts", 1L).orderBy("modi_time", true));
             if (wrkMasts.isEmpty()) {
-                return;
+                return wrkMastListAll;
             }
             long differenceInSeconds = TimeCalculatorUtils.differenceInMilliseconds(wrkMasts.get(0).getModiTime(), new Date());
             if (differenceInSeconds <= 1000) {
-                return;
+                return wrkMastListAll;
             }
 
             BasCircularShuttle basCircularShuttle = basCircularShuttleService.selectOne(new EntityWrapper<BasCircularShuttle>().eq("rgv_id", 1));
             RgvThread rgvThread = (RgvThread) SlaveConnection.get(SlaveType.Rgv, basCircularShuttle.getRgvNo());
             RgvProtocol rgvProtocol = rgvThread.getRgvProtocol();
             if (rgvProtocol == null) {
-                return;
+                return wrkMastListAll;
             }
             List<BasDevpPosition> basDevpPositions = basDevpPositionService.selectList(new EntityWrapper<BasDevpPosition>().orderBy("plc_position", true));
             List<BasDevpPosition> basDevpPositionDevRegion = basDevpPositionService.selectList(new EntityWrapper<BasDevpPosition>().orderBy("dev_region", true));
@@ -251,13 +232,16 @@
             BasDevpPosition[] basDevpPositionsListUN = SortTheExecutionOfTheCarUtil.devpNoSortUN(basDevpPositionsList);
             List<List<Integer>> siteListAll = SortTheExecutionOfTheCarUtil.siteListAll(basDevpPositionDevRegion);
 //            List<List<WrkMast>> wrkMastLists = getWrkMastLists(basDevpPositionsListUN);
-            List<List<List<WrkMast>>> wrkMastListAll = getWrkMastListAll(siteListAll,basDevpPositionsListUN);
+            return getWrkMastListAll(siteListAll,basDevpPositionsListUN);
             //涓嬪彂浠诲姟
 //            taskDown(wrkMastLists);
-            taskDown(wrkMastListAll);
+
         } catch (Exception e) {
             log.error("鑷姩涓嬪彂灏忚溅鍙栨斁浠诲姟澶辫触锛屽紓甯革細" + e);
         }
+        return wrkMastListAll;
+
+
     }
 
     //鑾峰彇灏忚溅鍙栨斁浠诲姟鍒楄〃澶辫触
@@ -479,72 +463,87 @@
 //        }
 //    }
     public synchronized void taskDown(List<List<List<WrkMast>>> wrkMastListAll) {
-
+//0灏忚溅杞﹀彿  1灏忚溅缂栧彿
         List<Integer> rgvNoM = new ArrayList<>();
         List<Integer> rgvNoR = new ArrayList<>();
         int wrkMastRunCount = 0;
         long devperimeter = 0L;
-        for (List<List<WrkMast>> wrkMastLists : wrkMastListAll) {
-            long rgvId = 0;
-            runRgv:
-            for (List<WrkMast> wrkMastList : wrkMastLists) {
-                for (WrkMast wrkMast : wrkMastList) {
-                    while (rgvId <= rgvCount) {
-                        rgvId++;
-//                    log.info("瀛樺湪浠诲姟锛孯GV鍙�={}锛屼换鍔℃暟鎹�={}", rgvId, JSON.toJSON(wrkMast));
-                        if (rgvId > rgvCount) {
-                            break runRgv;
-                        }
-                        BasCircularShuttle basCircularShuttle = basCircularShuttleService.selectOne(new EntityWrapper<BasCircularShuttle>().eq("rgv_id", rgvId));
-                        if (basCircularShuttle.getStatus() != 0){
-                            continue ;
-                        }
-                        RgvThread rgvThread = (RgvThread) SlaveConnection.get(SlaveType.Rgv, basCircularShuttle.getRgvNo());
-                        RgvProtocol rgvProtocol = rgvThread.getRgvProtocol();
-                        if (rgvProtocol == null) {
-                            continue;
+        try{
+            for (List<List<WrkMast>> wrkMastLists : wrkMastListAll) {
+                List<Integer> rgvNoRN = new ArrayList<>();
+                runRgv:
+                for (List<WrkMast> wrkMastList : wrkMastLists) {
+                    for (WrkMast wrkMast : wrkMastList) {
+
+                        int[][] stePositionNearby = getStePositionNearby(wrkMast.getSourceStaNo());
+                        if (stePositionNearby==null){
+                            break  runRgv;
                         }
 
-                        List<WrkMast> wrkMasts = wrkMastService.selectList(new EntityWrapper<WrkMast>().eq("rgv_no", rgvProtocol.getRgvNo()).eq("wrk_sts", 2L));
-                        if (!wrkMasts.isEmpty()) {
-                            continue;
+                        int[] rgvListRun = new int[stePositionNearby.length];
+                        for (int[] rgvNo:stePositionNearby){
+                            rgvListRun[rgvNo[0]-1] = rgvNo[1];
                         }
-                        if (rgvProtocol != null
-                                && rgvProtocol.modeType == RgvModeType.AUTO
-                                && (rgvProtocol.getStatusType() == RgvStatusType.IDLE || rgvProtocol.getStatusType() == RgvStatusType.ROAM)
-                                && rgvProtocol.getTaskNo1() == 0
-                                && rgvProtocol.getAlarm() == 0) {
-                            BasDevpPosition basDevpPosition = basDevpPositionService.selectOne(new EntityWrapper<BasDevpPosition>().eq("dev_no", wrkMast.getSourceStaNo()));
-                            if (basDevpPosition.getPlcPosition()>rgvProtocol.getRgvPos()){
-                                if (basDevpPosition.getPlcPosition()-rgvProtocol.getRgvPos()>taskRunPerimeter){
-                                    if (!rgvNoM.contains(rgvProtocol.getRgvNo())){
-                                        rgvNoM.add(rgvProtocol.getRgvNo());
-                                        if (wrkMastRunCount == 0){
-                                            devperimeter = basDevpPosition.getPlcPosition()-taskRunPerimeter+10000>perimeter? 10000:basDevpPosition.getPlcPosition()-taskRunPerimeter+10000;
-                                        }
-                                        wrkMastRunCount++;
-                                        break;
-                                    }
-                                    continue ;
-                                }
-                            } else {
-                                if (rgvProtocol.getRgvPos()+ perimeter -basDevpPosition.getPlcPosition()>taskRunPerimeter){
-                                    if (!rgvNoM.contains(rgvProtocol.getRgvNo())){
-                                        rgvNoM.add(rgvProtocol.getRgvNo());
-                                        if (wrkMastRunCount == 0){
-                                            devperimeter = basDevpPosition.getPlcPosition()-taskRunPerimeter+10000>perimeter? 10000:basDevpPosition.getPlcPosition()-taskRunPerimeter+10000;
-                                        }
-                                        wrkMastRunCount++;
-                                        break;
-                                    }
-                                    continue ;
-                                }
+
+                        for (int rgvNo : rgvListRun){
+                            if (rgvNoRN.contains(rgvNo)){
+                                continue;
                             }
 
-                            if (rgvProtocol.getStatusType() == RgvStatusType.ROAM) {
-                                double finalVelocity = 0.0;     // 鏈�缁堥�熷害 (m/s)
-                                double distance = (Math.pow(finalVelocity, 2) - Math.pow(rgvProtocol.instantaneousSpeed / 60, 2)) / (2 * acceleration);
-                                if ((distance * proportion + (rgvProtocol.instantaneousSpeed / 60) * proportion * rgvDate) > (SortTheExecutionOfTheCarUtil.LatelyAndLessThan(basDevpPosition.getPlcPosition(), rgvProtocol.getRgvPos(), perimeter) )) {
+                            BasCircularShuttle basCircularShuttle = basCircularShuttleService.selectOne(new EntityWrapper<BasCircularShuttle>().eq("rgv_no", rgvNo));
+                            if (basCircularShuttle.getStatus() != 0){
+                                continue ;
+                            }
+                            long rgvId = basCircularShuttle.getRgvId();
+
+                            RgvThread rgvThread = (RgvThread) SlaveConnection.get(SlaveType.Rgv, basCircularShuttle.getRgvNo());
+                            RgvProtocol rgvProtocol = rgvThread.getRgvProtocol();
+                            if (rgvProtocol == null) {
+                                continue;
+                            }
+
+                            List<WrkMast> wrkMasts = wrkMastService.selectList(new EntityWrapper<WrkMast>().eq("rgv_no", rgvProtocol.getRgvNo()).eq("wrk_sts", 2L));
+                            if (!wrkMasts.isEmpty()) {
+                                continue;
+                            }
+                            if (rgvProtocol != null
+                                    && rgvProtocol.modeType == RgvModeType.AUTO
+                                    && (rgvProtocol.getStatusType() == RgvStatusType.IDLE || rgvProtocol.getStatusType() == RgvStatusType.ROAM)
+                                    && rgvProtocol.getTaskNo1() == 0
+                                    && rgvProtocol.getAlarm() == 0) {
+                                BasDevpPosition basDevpPosition = basDevpPositionService.selectOne(new EntityWrapper<BasDevpPosition>().eq("dev_no", wrkMast.getSourceStaNo()));
+                                if (basDevpPosition.getPlcPosition()>rgvProtocol.getRgvPos()){
+                                    if (basDevpPosition.getPlcPosition()-rgvProtocol.getRgvPos()>taskRunPerimeter){
+                                        if (!rgvNoM.contains(rgvProtocol.getRgvNo())){
+                                            rgvNoM.add(rgvProtocol.getRgvNo());
+                                            rgvNoRN.add(rgvProtocol.getRgvNo());
+                                            if (wrkMastRunCount == 0){
+                                                devperimeter = basDevpPosition.getPlcPosition()-taskRunPerimeter+10000>perimeter? 10000:basDevpPosition.getPlcPosition()-taskRunPerimeter+10000;
+                                            }
+                                            wrkMastRunCount++;
+                                            break;
+                                        }
+                                        continue ;
+                                    }
+                                } else {
+                                    if (rgvProtocol.getRgvPos()+ perimeter -basDevpPosition.getPlcPosition()>taskRunPerimeter){
+                                        if (!rgvNoM.contains(rgvProtocol.getRgvNo())){
+                                            rgvNoM.add(rgvProtocol.getRgvNo());
+                                            rgvNoRN.add(rgvProtocol.getRgvNo());
+                                            if (wrkMastRunCount == 0){
+                                                devperimeter = basDevpPosition.getPlcPosition()-taskRunPerimeter+10000>perimeter? 10000:basDevpPosition.getPlcPosition()-taskRunPerimeter+10000;
+                                            }
+                                            wrkMastRunCount++;
+                                            break;
+                                        }
+                                        continue ;
+                                    }
+                                }
+
+                                if (rgvProtocol.getStatusType() == RgvStatusType.ROAM) {
+                                    double finalVelocity = 0.0;     // 鏈�缁堥�熷害 (m/s)
+                                    double distance = (Math.pow(finalVelocity, 2) - Math.pow(rgvProtocol.instantaneousSpeed / 60, 2)) / (2 * acceleration);
+                                    if ((distance * proportion + (rgvProtocol.instantaneousSpeed / 60) * proportion * rgvDate) > (SortTheExecutionOfTheCarUtil.LatelyAndLessThan(basDevpPosition.getPlcPosition(), rgvProtocol.getRgvPos(), perimeter) )) {
 //                                List<BasDevpPosition> basDevpPositions = basDevpPositionService.selectList(new EntityWrapper<BasDevpPosition>().orderBy("plc_position", true));
 //                                if (basDevpPositions.isEmpty()) {
 //                                    log.error("鑾峰彇鎵�鏈夌珯鐐逛俊鎭紓甯�,RGV浠诲姟涓嬪彂澶辫触锛岃鑱旂郴绠$悊鍛橈紒锛侊紒");
@@ -553,52 +552,58 @@
 //                                List<Integer> devpList = SortTheExecutionOfTheCarUtil.BasDevpPositionExtractSites(basDevpPositions);
 //
 //                                if (!SortTheExecutionOfTheCarUtil.calculateShortestDistanceDirection(devpList,rgvProtocol.getEndStaM(),wrkMast.getSourceStaNo())){
-                                    continue;
+                                        continue;
 //                                }
+                                    }
                                 }
-                            }
 
-                            if (!rgvNoR.contains(rgvProtocol.getRgvNo())){
-                                rgvNoR.add(rgvProtocol.getRgvNo());
-                            } else {
-                                continue ;
-                            }
+                                rgvNoRN.add(rgvProtocol.getRgvNo());
+                                if (!rgvNoR.contains(rgvProtocol.getRgvNo())){
+                                    rgvNoR.add(rgvProtocol.getRgvNo());
+                                } else {
+                                    continue ;
+                                }
 
-                            RgvCommand rgvCommand = new RgvCommand();
-                            rgvCommand.setRgvNo(rgvProtocol.getRgvNo());
-                            rgvCommand.setAckFinish1((short) 0);  // 宸ヤ綅1浠诲姟瀹屾垚纭浣�
-                            rgvCommand.setTaskNo1(wrkMast.getWrkNo().shortValue());
-                            rgvCommand.setTaskMode1(RgvTaskModeType.FETCH_PUT); // 宸ヤ綅1浠诲姟妯″紡:  鍙栨斁璐�
-                            rgvCommand.setSourceStaNo1(wrkMast.getSourceStaNo().shortValue());   //宸ヤ綅1璧风偣
-                            rgvCommand.setDestinationStaNo1(wrkMast.getStaNo().shortValue());   //宸ヤ綅1鐩爣绔欑偣
-                            rgvCommand.setCommand((short) 1);   //宸ヤ綅1浠诲姟纭
-                            rgvCommand.setRgvSome(basCircularShuttle.getRgvSome()==1 ? (short) 1 : (short) 0);
-                            if (!MessageQueue.offer(SlaveType.Rgv, rgvProtocol.getRgvNo(), new Task(2, rgvCommand))) {
-                                //
-                                log.error("RGV鍛戒护涓嬪彂澶辫触锛孯GV鍙�={}锛屼换鍔℃暟鎹�={}", rgvId, JSON.toJSON(rgvCommand));
-                                wrkMast.setLogErrTime(new Date());
-                                wrkMast.setLogErrMemo("RGV鍛戒护涓嬪彂澶辫触锛孯GV鍙�={"+rgvId+"}===>璺宠繃");
-                                wrkMastService.updateById(wrkMast);
+                                RgvCommand rgvCommand = new RgvCommand();
+                                rgvCommand.setRgvNo(rgvProtocol.getRgvNo());
+                                rgvCommand.setAckFinish1((short) 0);  // 宸ヤ綅1浠诲姟瀹屾垚纭浣�
+                                rgvCommand.setTaskNo1(wrkMast.getWrkNo().shortValue());
+                                rgvCommand.setTaskMode1(RgvTaskModeType.FETCH_PUT); // 宸ヤ綅1浠诲姟妯″紡:  鍙栨斁璐�
+                                rgvCommand.setSourceStaNo1(wrkMast.getSourceStaNo().shortValue());   //宸ヤ綅1璧风偣
+                                rgvCommand.setDestinationStaNo1(wrkMast.getStaNo().shortValue());   //宸ヤ綅1鐩爣绔欑偣
+                                rgvCommand.setCommand((short) 1);   //宸ヤ綅1浠诲姟纭
+                                rgvCommand.setRgvSome(basCircularShuttle.getRgvSome()==1 ? (short) 1 : (short) 0);
+                                if (!MessageQueue.offer(SlaveType.Rgv, rgvProtocol.getRgvNo(), new Task(2, rgvCommand))) {
+                                    //
+                                    log.error("RGV鍛戒护涓嬪彂澶辫触锛孯GV鍙�={}锛屼换鍔℃暟鎹�={}", rgvId, JSON.toJSON(rgvCommand));
+                                    wrkMast.setLogErrTime(new Date());
+                                    wrkMast.setLogErrMemo("RGV鍛戒护涓嬪彂澶辫触锛孯GV鍙�={"+rgvId+"}===>璺宠繃");
+                                    wrkMastService.updateById(wrkMast);
+                                    break runRgv;
+                                }
+                                log.info("RGV鍛戒护涓嬪彂鎴愬姛锛孯GV鍙�={}锛屼换鍔℃暟鎹�={}", rgvId, JSON.toJSON(rgvCommand));
+
+                                wrkMast.setWrkSts(2L);
+                                wrkMast.setRgvNo(rgvProtocol.getRgvNo());
+                                Date now = new Date();
+                                wrkMast.setAppeTime(now);
+                                wrkMast.setCrnStrTime(now);
+                                try {
+                                    wrkMastService.updateById(wrkMast);
+                                    break;
+                                } catch (Exception e) {
+                                    log.error("鏇存柊灏忚溅浠诲姟澶辫触,浠诲姟鍙凤細" + wrkMast.getWrkNo());
+                                }
                                 break runRgv;
                             }
-                            log.info("RGV鍛戒护涓嬪彂鎴愬姛锛孯GV鍙�={}锛屼换鍔℃暟鎹�={}", rgvId, JSON.toJSON(rgvCommand));
-
-                            wrkMast.setWrkSts(2L);
-                            wrkMast.setRgvNo(rgvProtocol.getRgvNo());
-                            Date now = new Date();
-                            wrkMast.setAppeTime(now);
-                            wrkMast.setCrnStrTime(now);
-                            try {
-                                wrkMastService.updateById(wrkMast);
-                                break;
-                            } catch (Exception e) {
-                                log.error("鏇存柊灏忚溅浠诲姟澶辫触,浠诲姟鍙凤細" + wrkMast.getWrkNo());
-                            }
-                            break runRgv;
                         }
                     }
                 }
             }
+
+        } catch (Exception e){
+            log.error("RGV婕父鍚姩鍛戒护涓嬪彂澶辫触锛屼换鍔℃暟鎹�===> "+JSON.toJSON(wrkMastListAll));
+            return;
         }
         try{
             for (Integer rgvNo : rgvNoM){

--
Gitblit v1.9.1