From 473da408619b57c656cc22e191e9ed2e1c3eafaa Mon Sep 17 00:00:00 2001
From: lsh <lsh@163.com>
Date: 星期五, 13 六月 2025 10:41:19 +0800
Subject: [PATCH] *

---
 src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java |  420 +++++++++++++++++++++++------------------------------------
 1 files changed, 163 insertions(+), 257 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 b4256dd..be3cfa5 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;
+
     }
 
     /**
@@ -228,13 +207,14 @@
      * 绔欑偣浠诲姟妫�娴�  涓嬪彂灏忚溅鍙栨斁浠诲姟
      */
     public synchronized void DevpTaskNoRun() {
+
         try {
             List<WrkMast> wrkMasts = wrkMastService.selectList(new EntityWrapper<WrkMast>().eq("wrk_sts", 1L).orderBy("modi_time", true));
             if (wrkMasts.isEmpty()) {
                 return;
             }
             long differenceInSeconds = TimeCalculatorUtils.differenceInMilliseconds(wrkMasts.get(0).getModiTime(), new Date());
-            if (differenceInSeconds <= 100) {
+            if (differenceInSeconds <= 1000) {
                 return;
             }
 
@@ -251,32 +231,57 @@
             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);
+            List<List<List<WrkMast>>> wrkMastListAll = getWrkMastListAll(siteListAll, basDevpPositionsListUN);
             //涓嬪彂浠诲姟
 //            taskDown(wrkMastLists);
             taskDown(wrkMastListAll);
         } catch (Exception e) {
-            log.error("鑷姩涓嬪彂灏忚溅鍙栨斁浠诲姟澶辫触锛屽紓甯革細" + e);
+            log.error("鑷姩涓嬪彂灏忚溅浠诲姟澶辫触锛屽紓甯革細" + e);
         }
+
     }
 
     //鑾峰彇灏忚溅鍙栨斁浠诲姟鍒楄〃澶辫触
     public synchronized List<List<List<WrkMast>>> getWrkMastListAll(List<List<Integer>> siteListAll ,BasDevpPosition[] basDevpPositionsListUN) {
         List<List<List<WrkMast>>> wrkMastListAll = new ArrayList<>();
+        List<Integer> sourceStaNoList = new ArrayList<>();
+
         for (List<Integer> siteList : siteListAll){
             List<List<WrkMast>> wrkMastLists = new ArrayList<>();
             try {
                 List<WrkMast> wrkMastlistA = new ArrayList<>();
                 List<WrkMast> wrkMastlistB = new ArrayList<>();
+                List<WrkMast> wrkMastlistC = new ArrayList<>();
+                List<WrkMast> wrkMastlistD = new ArrayList<>();
                 for (BasDevpPosition basDevpPosition : basDevpPositionsListUN) {
                     List<WrkMast> wrkMastList = wrkMastService.selectList(new EntityWrapper<WrkMast>().eq("sta_no", basDevpPosition.getDevNo()).eq("wrk_sts", 1L).orderBy("modi_time", true));
                     for (WrkMast wrkMast : wrkMastList) {
                         if (!Cools.isEmpty(wrkMast)) {
                             if (siteList.contains(wrkMast.getSourceStaNo())){
-                                if (SortTheExecutionOfTheCarUtil.devpNoSortbj(basDevpPositionsListUN, wrkMast.getSourceStaNo(), wrkMast.getStaNo())) {
-                                    wrkMastlistA.add(wrkMast);
+                                if (!sourceStaNoList.contains(wrkMast.getSourceStaNo())){
+                                    List<WrkMast> wrkMastListS = wrkMastService.selectList(new EntityWrapper<WrkMast>().eq("source_sta_no", wrkMast.getSourceStaNo()).eq("wrk_sts", 1L).orderBy("modi_time", true));
+                                    if (wrkMastListS.isEmpty()){
+                                        continue;
+                                    }
                                 } else {
-                                    wrkMastlistB.add(wrkMast);
+                                    continue;
+                                }
+                                long differenceInSeconds = TimeCalculatorUtils.differenceInMilliseconds(wrkMast.getModiTime(), new Date());
+
+                                if (SortTheExecutionOfTheCarUtil.devpNoSortbj(basDevpPositionsListUN, wrkMast.getSourceStaNo(), wrkMast.getStaNo())) {
+                                    sourceStaNoList.add(wrkMast.getSourceStaNo());
+                                    if (differenceInSeconds>600000){
+                                        wrkMastlistA.add(wrkMast);
+                                    } else {
+                                        wrkMastlistC.add(wrkMast);
+                                    }
+                                } else {
+                                    sourceStaNoList.add(wrkMast.getSourceStaNo());
+                                    if (differenceInSeconds>600000){
+                                        wrkMastlistB.add(wrkMast);
+                                    } else {
+                                        wrkMastlistD.add(wrkMast);
+                                    }
                                 }
                             }
                         }
@@ -284,6 +289,8 @@
                 }
                 wrkMastLists.add(wrkMastlistA);
                 wrkMastLists.add(wrkMastlistB);
+                wrkMastLists.add(wrkMastlistC);
+                wrkMastLists.add(wrkMastlistD);
 //                return wrkMastLists;
                 wrkMastListAll.add(wrkMastLists);
             } catch (Exception e) {
@@ -320,199 +327,87 @@
         }
     }
 
-//    public synchronized void taskDown(List<List<WrkMast>> wrkMastLists) {
-//        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;
-//                    }
-//
-//                    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) {
-//                        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);
-//                            BasDevpPosition basDevpPosition = basDevpPositionService.selectOne(new EntityWrapper<BasDevpPosition>().eq("dev_no", wrkMast.getSourceStaNo()));
-//                            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浠诲姟涓嬪彂澶辫触锛岃鑱旂郴绠$悊鍛橈紒锛侊紒");
-////                                    break runRgv;
-////                                }
-////                                List<Integer> devpList = SortTheExecutionOfTheCarUtil.BasDevpPositionExtractSites(basDevpPositions);
-////
-////                                if (!SortTheExecutionOfTheCarUtil.calculateShortestDistanceDirection(devpList,rgvProtocol.getEndStaM(),wrkMast.getSourceStaNo())){
-//                                    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));
-//                            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;
-//                    } else if (rgvProtocol != null
-//                            && rgvProtocol.modeType == RgvModeType.AUTO
-//                            && rgvProtocol.getStatusType() == RgvStatusType.WALK
-//                            && rgvProtocol.getTaskNo1() == 0
-//                            && rgvProtocol.getAlarm() == 0) {
-//                        if (rgvProtocol.getStatusType() == RgvStatusType.WALK) {
-//                            double finalVelocity = 0.0;     // 鏈�缁堥�熷害 (m/s)
-//                            double distance = (Math.pow(finalVelocity, 2) - Math.pow(rgvProtocol.instantaneousSpeed / 60, 2)) / (2 * acceleration);
-//                            BasDevpPosition basDevpPosition = basDevpPositionService.selectOne(new EntityWrapper<BasDevpPosition>().eq("dev_no", wrkMast.getSourceStaNo()));
-//                            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浠诲姟涓嬪彂澶辫触锛岃鑱旂郴绠$悊鍛橈紒锛侊紒");
-////                                    break runRgv;
-////                                }
-////                                List<Integer> devpList = SortTheExecutionOfTheCarUtil.BasDevpPositionExtractSites(basDevpPositions);
-////
-////                                if (!SortTheExecutionOfTheCarUtil.calculateShortestDistanceDirection(devpList,rgvProtocol.getEndStaM(),wrkMast.getSourceStaNo())){
-//                                continue;
-////                                }
-//                            }
-//                        }
-//                        RgvCommand rgvCommand = new RgvCommand();
-//                        rgvCommand.setRgvNo(rgvProtocol.getRgvNo());
-//                        rgvCommand.setAckFinish1((short) 0);  // 宸ヤ綅1浠诲姟瀹屾垚纭浣�
-//                        rgvCommand.setTaskNo1(wrkMast.getWrkNo().shortValue());
-//                        rgvCommand.setTaskMode1(RgvTaskModeType.X_MOVE); // 宸ヤ綅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(3, rgvCommand))) {
-//                            //
-//                            log.error("RGV鍛戒护涓嬪彂澶辫触锛孯GV鍙�={}锛屼换鍔℃暟鎹�={}", rgvId, JSON.toJSON(rgvCommand));
-//                            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;
-//                    } else {
-//                        break runRgv;
-//                    }
-//                }
-//            }
-//        }
-//    }
     public synchronized void taskDown(List<List<List<WrkMast>>> wrkMastListAll) {
-
         List<Integer> rgvNoM = new ArrayList<>();
         List<Integer> rgvNoR = new ArrayList<>();
-        Integer 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;
+        int wrkMastRunCount = 0;
+        long devperimeter = 0L;
+        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());
-                                        wrkMastRunCount++;
-                                        break;
-                                    }
-                                    continue ;
-                                }
-                            } else {
-                                if (rgvProtocol.getRgvPos()+ perimeter -basDevpPosition.getPlcPosition()>taskRunPerimeter){
-                                    if (!rgvNoM.contains(rgvProtocol.getRgvNo())){
-                                        rgvNoM.add(rgvProtocol.getRgvNo());
-                                        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浠诲姟涓嬪彂澶辫触锛岃鑱旂郴绠$悊鍛橈紒锛侊紒");
@@ -521,49 +416,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));
+                                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){
@@ -584,9 +488,11 @@
                         && rgvProtocol.getStatusType() == RgvStatusType.IDLE
                         && rgvProtocol.getTaskNo1() == 0
                         && rgvProtocol.getAlarm() == 0) {
-                    if (!MessageQueue.offer(SlaveType.Rgv, rgvProtocol.getRgvNo(), new Task(4,devperimeter))) {
-                        log.error("RGV婕父鍚姩鍛戒护涓嬪彂澶辫触锛孯GV鍙�={}锛屼换鍔℃暟鎹�={}", rgvNo, "婕父鎸囦护");
+                    if (!MessageQueue.offer(SlaveType.Rgv, rgvProtocol.getRgvNo(), new Task(5,devperimeter))) {
+                        log.error("RGV婕父鍚姩鍛戒护涓嬪彂澶辫触锛孯GV鍙�={}锛屼换鍔℃暟鎹�={}", rgvNo, "婕父鎸囦护锛岀洰鐨勫湴锛�"+devperimeter);
                         break;
+                    } else {
+                        log.info("RGV婕父鍚姩鍛戒护涓嬪彂鎴愬姛锛孯GV鍙�={}锛屼换鍔℃暟鎹�={}", rgvNo, "婕父鎸囦护锛岀洰鐨勫湴锛�"+devperimeter);
                     }
                 }
             }
@@ -643,7 +549,7 @@
                                     wrkMastService.updateById(wrkMast);
                                     continue;
                                 }else {
-                                    log.error("宸ヤ綔鍙�"+wrkMast.getWrkNo()+"浠诲姟瀹屾垚淇℃伅涓婁紶澶勭悊澶辫触");
+                                    log.error("宸ヤ綔鍙�"+wrkMast.getWrkNo()+"浠诲姟瀹屾垚淇℃伅涓婁紶澶勭悊澶辫触1");
                                 }
                             } else {
                                 //娴嬭瘯鐢�

--
Gitblit v1.9.1