From 4d9e2ea59aa2e9fbdcacd3d8d8dfd543a2fccba5 Mon Sep 17 00:00:00 2001
From: L <L@132>
Date: 星期五, 23 一月 2026 13:53:06 +0800
Subject: [PATCH] *

---
 src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java |  171 ++++++++++++++++++++++++++++++++++++++++++++++++++++++--
 1 files changed, 163 insertions(+), 8 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 e75980e..bb2a5dc 100644
--- a/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
@@ -703,11 +703,12 @@
                         } else {
                             staProtocol = staProtocol.clone();
                         }
-                        if (!staProtocol.isAutoing() || staProtocol.isLoading()) {
+                        if (!staProtocol.isAutoing() || !staProtocol.isLoading()) {
                             continue;
                         }
                         TaskWrk taskWrk = taskWrkMapper.selectCrnStaWorking(crnProtocol.getLaneNo(), staDesc.getStnNo().toString());
                         if (taskWrk == null) {
+                            log.info("鍫嗗灈鏈哄嚭搴撶珯鍒板嚭搴撶珯锛氭湭鏌ヨ鍒扮姸鎬佷负13鐨勪换鍔′俊鎭紝绔欑偣鍙�:" + staDesc.getStnNo().toString());
                             continue;
                         }
                         if (staProtocol.isAutoing() && staProtocol.isLoading() && (staProtocol.getWorkNo() == 0 || staProtocol.getStaNo() == 0 || staProtocol.getWorkNo().equals(taskWrk.getWrkNo()))) {
@@ -1764,7 +1765,7 @@
         ConcurrentHashMap<String, TaskProtocol> allTaskProtocol = taskProtocolCache.getAllTaskProtocol();
         if (!allTaskProtocol.isEmpty()) {
             for (TaskProtocol taskProtocol : allTaskProtocol.values()) {
-                if (taskProtocol.getTaskNo() != 0) {
+                if (taskProtocol.getTaskNo() != 0 && taskProtocol.getTaskNo()!=32222L) {
                     return taskProtocol.getTaskNo().toString();
                 }
             }
@@ -2043,6 +2044,16 @@
         }
         return null;
     }
+    public TaskWrk deviceDetectionGetWrkNo(RgvSlave.RgvStn inSta) {
+
+        DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, inSta.getDevpPlcId());
+        StaProtocol staProtocol = devpThread.getStation().get(inSta.getStaNo());
+        if (staProtocol == null || Cools.isEmpty(staProtocol.getWorkNo())) {
+            return null;
+        }
+        TaskWrk taskWrk = taskWrkService.selectByWrkNo(staProtocol.getWorkNo());
+        return taskWrk;
+    }
     public boolean deviceDetection(RgvSlave.RgvStn inSta,Integer rgvNo) {
         ArrayList<Integer> arrayList = new ArrayList<Integer>() {{
             add(1009);
@@ -2106,6 +2117,7 @@
     public synchronized void taskStart() {
         for (RgvSlave rgvSlave : slaveProperties.getRgv()) {
             try {
+                Thread.sleep(101);
                 if (rgvDetection(rgvSlave)) {
                     String taskNoNow = rgvOtherTaskWrk(rgvSlave);
                     List<BasDevpPosition> basDevpPositions = basDevpPositionService.selectList(new EntityWrapper<BasDevpPosition>().orderBy("PLC_POSITION", true));
@@ -2121,10 +2133,12 @@
                     }
                     List<TaskWrk> taskWrkList = new ArrayList<>();
                     List<Integer> staList = new ArrayList<>();
+                    List<String> taskNoList = taskStartRepel();
                     for (RgvSlave.RgvStn inSta : rgvSlave.getRgvInSta()) {
                         TaskWrk taskWrk = deviceDetection(inSta);
                         if (taskWrk != null) {
                             if (taskWrk.getWrkNo().toString().equals(taskNoNow)) continue;
+                            if (!taskNoList.contains(taskWrk.getWrkNo().toString())) continue;
                             taskWrkList.add(taskWrk);
                             staList.add(inSta.getStaNo());
                         }
@@ -2156,9 +2170,10 @@
                             if (rgvOtherIDLEOther(rgvSlave)){
                                 if (!rgvOtherIDLE(rgvSlave,staList.get(0))){
                                     System.out.println("绌洪棽灏辫繎璺宠繃==="+rgvSlave.getId()+"===");
-                                    RgvErrCache.updateRgvErr(rgvSlave.getId(),staList.get(0)+"绌洪棽灏辫繎璺宠繃");
-
-                                    sign=true;
+                                    if (itSmall){
+                                        RgvErrCache.updateRgvErr(rgvSlave.getId(),staList.get(0)+"绌洪棽灏辫繎璺宠繃");
+                                        sign=true;
+                                    }
                                 }
                             }
                             if (sign){
@@ -2237,9 +2252,10 @@
                             if (rgvOtherIDLEOther2(rgvSlave)){
                                 if (!rgvOtherIDLE2(rgvSlave,staList.get(0))){
                                     System.out.println("杩愯灏辫繎璺宠繃==="+rgvSlave.getId()+"===");
-                                    RgvErrCache.updateRgvErr(rgvSlave.getId(),staList.get(0)+"杩愯灏辫繎璺宠繃");
-
-                                    sign=true;
+                                    if (itSmall){
+                                        RgvErrCache.updateRgvErr(rgvSlave.getId(),staList.get(0)+"杩愯灏辫繎璺宠繃");
+                                        sign=true;
+                                    }
                                 }
                             }
                             if (sign){
@@ -2442,6 +2458,145 @@
         }
     }
 
+    public List<String> taskStartRepel() {
+        ArrayList<String> arrayListOld = new ArrayList<>();
+        ArrayList<String> arrayListNew = new ArrayList<>();
+        ArrayList<Integer> arrayListAllP = new ArrayList<>();
+        ArrayList<Long[]> arrayListAll = new ArrayList<>();
+        for (RgvSlave rgvSlave : slaveProperties.getRgv()) {
+            try{
+                boolean itSmall = new TrackRangeUtils().IsItSmall(rgvSlave);
+                String taskNoNow = rgvOtherTaskWrk(rgvSlave);
+                if (taskNoNow.equals("鏃�")){
+                    continue;
+                }
+                if (!arrayListOld.contains(taskNoNow)){
+                    arrayListOld.add(taskNoNow);
+                }
+
+                TaskWrk taskWrk = taskWrkMapper.selectByTaskNo(taskNoNow);
+                if (taskWrk != null) {
+                    if (!arrayListAllP.contains(taskWrk.getWrkNo())) {
+
+                        RgvThread rgvThread = (RgvThread) SlaveConnection.get(SlaveType.Rgv, rgvSlave.getId());
+                        TaskProtocolCache taskProtocolCache = rgvThread.getTaskProtocolCache();
+
+                        arrayListAllP.add(taskWrk.getWrkNo());
+                        long startP = 0;
+                        if (!itSmall){
+                            startP = System.currentTimeMillis();
+                        }
+
+                        long endP = 0;
+                        long endP1 = 0;
+                        long endP2 = 0;
+                        ConcurrentHashMap<String, TaskProtocol> allTaskProtocol = taskProtocolCache.getAllTaskProtocol();
+                        for (TaskProtocol taskProtocol : allTaskProtocol.values()){
+                            if (taskProtocol.getTaskStatus() == 2){//鍙�
+                                endP1 = taskProtocol.getTargetPosition();
+                            } else if (taskProtocol.getTaskStatus() == 3){//鏀�
+                                endP2 = taskProtocol.getTargetPosition();
+                            }
+                        }
+                        if (endP1 > endP2){
+                            if (itSmall){
+                                endP = endP1;
+                            } else {
+                                endP = endP2;
+                            }
+                        }
+                        if (endP == 0){
+                            if (itSmall){
+                                endP = System.currentTimeMillis();
+                            }
+                        }
+                        Long[] longList = {taskWrk.getWrkNo().longValue(),startP,endP};
+                        arrayListAll.add(longList);
+                    }
+                } else {
+                    RgvThread rgvThread = (RgvThread) SlaveConnection.get(SlaveType.Rgv, rgvSlave.getId());
+                    TaskProtocolCache taskProtocolCache = rgvThread.getTaskProtocolCache();
+
+                    try {
+                        long startP = 0;
+                        long endP = 0;
+                        ConcurrentHashMap<String, TaskProtocol> allTaskProtocol = taskProtocolCache.getAllTaskProtocol();
+                        for (TaskProtocol taskProtocol : allTaskProtocol.values()){
+                            if (taskProtocol.getTaskStatus() == 2){//鍙�
+                                startP = taskProtocol.getTargetPosition();
+                            } else if (taskProtocol.getTaskStatus() == 3){//鏀�
+                                endP = taskProtocol.getTargetPosition();
+                            }
+                        }
+                        if (startP == 0 ){
+                            if (!itSmall){
+                                startP = System.currentTimeMillis();
+                            }
+                        }
+                        if (endP == 0){
+                            if (itSmall){
+                                endP = System.currentTimeMillis();
+                            }
+                        }
+//                        taskNoNow
+                        long parseLong = Long.parseLong(taskNoNow);
+                        Long[] longList = {parseLong,startP,endP};
+                        arrayListAll.add(longList);
+
+                    } catch (Exception e) {
+                        log.error("浠诲姟杩囨护鏌ヨ灏忚溅鎵ц浠诲姟寮傚父锛�"+e.getMessage());
+                        return new ArrayList<>();
+                    }
+                }
+
+            } catch (Exception e) {
+            }
+        }
+        for (RgvSlave rgvSlave : slaveProperties.getRgv()) {
+            if (rgvDetection(rgvSlave)) {
+                for (RgvSlave.RgvStn rgvStn : rgvSlave.getRgvInSta()) {
+                    TaskWrk taskWrk = deviceDetectionGetWrkNo(rgvStn);
+                    if (taskWrk != null) {
+                        if (!arrayListAllP.contains(taskWrk.getWrkNo())) {
+                            arrayListAllP.add(taskWrk.getWrkNo());
+                            BasDevpPosition basDevpPositionSta = basDevpPositionService.selectOne(new EntityWrapper<BasDevpPosition>().eq("DEV_NO", rgvStn.getStaNo()));
+                            BasDevpPosition basDevpPositionEnd = basDevpPositionService.selectOne(new EntityWrapper<BasDevpPosition>().eq("DEV_NO", BarcodeUtils.getOutStaNo(taskWrk.getOriginTargetPoint())));
+                            Long[] longList = {taskWrk.getWrkNo().longValue(),basDevpPositionSta.getPlcPosition(),basDevpPositionEnd.getPlcPosition()};
+                            arrayListAll.add(longList);
+                        }
+                    }
+                }
+            }
+        }
+        List<Long[]> crossingPathsW = TrackUtils.findCrossingPathsW(arrayListAll);
+        List<Long> wrkNoList = new ArrayList<>();
+        List<Long> signWrk = new ArrayList<>();
+        for (Long[] longList : crossingPathsW) {
+            if (arrayListOld.contains(longList[0].toString()) || arrayListOld.contains(longList[1].toString())){
+                signWrk.add(longList[0]);
+                signWrk.add(longList[1]);
+                continue;
+            }
+            if (!wrkNoList.contains(longList[0]) && !signWrk.contains(longList[0])) {
+                if (!wrkNoList.contains(longList[1]) && !signWrk.contains(longList[1])) {
+                    wrkNoList.add(longList[0]);
+                }
+            }
+            signWrk.add(longList[0]);
+            signWrk.add(longList[1]);
+        }
+        for (Integer str : arrayListAllP) {
+            if (!signWrk.contains(str.longValue())) {
+                arrayListNew.add(str.toString());
+            }
+        }
+        for (Long wrk : wrkNoList) {
+            arrayListNew.add(wrk.toString());
+        }
+
+        return arrayListNew;
+    }
+
     //鑾峰彇璧风偣涓庣粓鐐瑰璞�
     public RgvSlave.RgvStn getRgvStnNow(RgvSlave rgvSlave, Integer staNo) {
         for (RgvSlave.RgvStn rgvStn : rgvSlave.getRgvInSta()) {

--
Gitblit v1.9.1