From 6b37fd7b4ce28fb79aab4e5b851acf7f2097a8de Mon Sep 17 00:00:00 2001
From: L <L@132>
Date: 星期五, 23 一月 2026 13:42:37 +0800
Subject: [PATCH] *

---
 src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java |  290 +++++++++++++++++++++++++++++++++++++++++++++++----------
 1 files changed, 238 insertions(+), 52 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 a1bc3c0..6aafecc 100644
--- a/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
@@ -703,12 +703,16 @@
                         } else {
                             staProtocol = staProtocol.clone();
                         }
-                        if (staProtocol.isAutoing() && staProtocol.isLoading() && (staProtocol.getWorkNo() == 0 || staProtocol.getStaNo() == 0)) {
+                        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()))) {
                             // 鏌ヨ宸ヤ綔妗�
-                            TaskWrk taskWrk = taskWrkMapper.selectCrnStaWorking(crnProtocol.getLaneNo(), staDesc.getStnNo().toString());
-                            if (taskWrk == null) {
-                                continue;
-                            }
                             log.info("涓嬪彂杈撻�佺嚎浠诲姟锛歵askWrk:" + JSON.toJSONString(taskWrk));
 //                            R r = siteController.siteDetlUpdate(Integer.valueOf(taskWrk.getTargetPoint()), taskWrk.getWrkNo().shortValue(), (short) 0, "Y", false, false);
                             staProtocol.setWorkNo(taskWrk.getWrkNo());
@@ -1761,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();
                 }
             }
@@ -2040,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);
@@ -2103,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));
@@ -2118,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());
                         }
@@ -2153,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){
@@ -2234,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){
@@ -2437,6 +2456,138 @@
                 }
             }
         }
+    }
+
+    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;
+                        ConcurrentHashMap<String, TaskProtocol> allTaskProtocol = taskProtocolCache.getAllTaskProtocol();
+                        boolean sign = true;
+                        for (TaskProtocol taskProtocol : allTaskProtocol.values()){
+                            if (taskProtocol.getTaskStatus() == 2){//鍙�
+                                endP = taskProtocol.getTargetPosition();
+                                sign = false;
+                            } else if (taskProtocol.getTaskStatus() == 3 && sign){//鏀�
+                                endP = taskProtocol.getTargetPosition();
+                            }
+                        }
+                        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;
     }
 
     //鑾峰彇璧风偣涓庣粓鐐瑰璞�
@@ -2818,37 +2969,47 @@
                     if (basCrnp.getInEnable().equals("Y")) {
                         boolean crnStnToLocDemo = this.crnStnToLocDemo(crnSlave, crnProtocol);//  鍏ュ簱
                         if (crnStnToLocDemo){
+                            crnProtocol.setSignIntOut(true);
                             crnProtocol.setLastIo("O");
                         } else if (!crnProtocol.isSignIntOut()){
                             crnProtocol.setLastIo("O");
                         }
                     } else if (basCrnp.getOutEnable().equals("Y")) {
-                        boolean locToCrnStnDemo = this.locToCrnStnDemo(crnSlave, crnProtocol);//  鍑哄簱
-                        if (locToCrnStnDemo && crnProtocol.isSignIntOut()){
+                        if (!crnProtocol.isSignIntOut()){
                             crnProtocol.setLastIo("I");
-                        } else if (locToCrnStnDemo){
-                            crnProtocol.setLastIo("I");
-                            crnProtocol.setSignIntOut(true);
-                        } else if (!crnProtocol.isSignIntOut()){
-                            crnProtocol.setLastIo("I");
+                        } else {
+                            boolean locToCrnStnDemo = this.locToCrnStnDemo(crnSlave, crnProtocol);//  鍑哄簱
+                            if (locToCrnStnDemo && crnProtocol.isSignIntOut()){
+                                crnProtocol.setLastIo("I");
+                            } else if (locToCrnStnDemo){
+                                crnProtocol.setLastIo("I");
+                                crnProtocol.setSignIntOut(true);
+                            } else if (!crnProtocol.isSignIntOut()){
+                                crnProtocol.setLastIo("I");
+                            }
                         }
                     }
                 }
                 // 濡傛灉鏈�杩戜竴娆℃槸鍑哄簱妯″紡
                 else if (crnProtocol.getLastIo().equals("O")) {
                     if (basCrnp.getOutEnable().equals("Y")) {
-                        boolean locToCrnStnDemo = this.locToCrnStnDemo(crnSlave, crnProtocol);//  鍑哄簱
-                        if (locToCrnStnDemo && crnProtocol.isSignIntOut()){
+                        if (!crnProtocol.isSignIntOut()) {
                             crnProtocol.setLastIo("I");
-                        } else if (locToCrnStnDemo){
-                            crnProtocol.setLastIo("I");
-                            crnProtocol.setSignIntOut(true);
-                        } else if (!crnProtocol.isSignIntOut()){
-                            crnProtocol.setLastIo("I");
+                        } else {
+                            boolean locToCrnStnDemo = this.locToCrnStnDemo(crnSlave, crnProtocol);//  鍑哄簱
+                            if (locToCrnStnDemo && crnProtocol.isSignIntOut()){
+                                crnProtocol.setLastIo("I");
+                            } else if (locToCrnStnDemo){
+                                crnProtocol.setLastIo("I");
+                                crnProtocol.setSignIntOut(true);
+                            } else if (!crnProtocol.isSignIntOut()){
+                                crnProtocol.setLastIo("I");
+                            }
                         }
                     } else if (basCrnp.getInEnable().equals("Y")) {
                         boolean crnStnToLocDemo = this.crnStnToLocDemo(crnSlave, crnProtocol);//  鍏ュ簱
                         if (crnStnToLocDemo){
+                            crnProtocol.setSignIntOut(true);
                             crnProtocol.setLastIo("O");
                         } else if (!crnProtocol.isSignIntOut()){
                             crnProtocol.setLastIo("O");
@@ -2907,7 +3068,7 @@
                 // 鑾峰彇宸ヤ綔鐘舵�佷负2锛堣澶囦笂璧帮級鐨勫叆搴撳伐浣滄。
                 TaskWrk taskWrk = null;
                 for (String locNo : crnProtocol.getLocMastDemoList()) {
-                    TaskWrk taskWrk1 = taskWrkService.selectByTaskNo(locNo);
+                    TaskWrk taskWrk1 = taskWrkService.selectByTaskNo(locNo+"r");
                     if (Cools.isEmpty(taskWrk1)){
                         continue;
                     }
@@ -3307,33 +3468,58 @@
                     if (Cools.isEmpty(basCrnp.getHpMk()) || !basCrnp.getHpMk().equals("Y")){
                         continue;
                     }
+                    boolean signIn = false;
+                    for (String[] locS : crnProtocol.getLocMastDemoListSign()){
+                        if (locS[3].equals(String.valueOf(crnProtocol.getLocMastDemoListSign().size()))){
+                            String locNo1 = locS[0];
+                            String locNo2 = locS[2];
+                            ArrayList<String> locNoList = new ArrayList<>();
+                            locNoList.add(locNo1);
+                            locNoList.add(locNo2);
+                            for (String locNo : locNoList) {
+                                TaskWrk taskWrk1 = taskWrkService.selectByTaskNo(locNo+"r");
+                                if (Cools.isEmpty(taskWrk1)){
+                                    continue;
+                                }
+                                signIn = true;
+                                break;
+                            }
+                        }
+                    }
+                    if (signIn){
+                        continue;
+                    }
                     for (String[] locS : crnProtocol.getLocMastDemoListSign()){
                         if (locS[3].equals("1")){
-                            String locNo = locS[0];
-                            LocMast locMast = locMastService.selectByLocNo(locNo);
-                            if (locMast.getLocSts().equals("F")){
-                                CarryParam carryParam = new CarryParam();
-                                carryParam.setTaskNo(locNo);
-                                carryParam.setBarcode(locNo);
-                                carryParam.setIoType(1);//浠诲姟绫诲瀷=銆�1锛氬嚭搴撱��2锛氱Щ搴撱��3锛氬叆搴�   ====杞崲涓�====>  1锛氬叆搴擄紝2锛氬嚭搴擄紝3锛氱Щ搴�
-                                carryParam.setTaskPriority(1);
-                                carryParam.setTargetPoint("1012");
-                                carryParam.setStartPoint(BarcodeUtils.formatCode(locNo));
-                                carryParam.setMeno("Demo");
-                                taskWrkController.addTaskPoint(carryParam);
-                                Thread.sleep(50);
-                            } else if (locMast.getLocSts().equals("O")){
-                                CarryParam carryParam = new CarryParam();
-                                carryParam.setTaskNo(locNo+"r");
-                                carryParam.setBarcode(locNo);
-                                carryParam.setIoType(3);//浠诲姟绫诲瀷=銆�1锛氬嚭搴撱��2锛氱Щ搴撱��3锛氬叆搴�   ====杞崲涓�====>  1锛氬叆搴擄紝2锛氬嚭搴擄紝3锛氱Щ搴�
-                                carryParam.setTaskPriority(1);
-                                carryParam.setStartPoint("1012");
-                                carryParam.setTargetPoint(BarcodeUtils.formatCode(locNo));
-                                carryParam.setMeno("Demo");
-                                taskWrkController.addTaskPoint(carryParam);
-                                Thread.sleep(50);
-                                LocFCSUtils.updateLocSInPlace(crnProtocol.getLocMastDemoListSign());
+                            String locNo1 = locS[0];
+                            String locNo2 = locS[2];
+                            ArrayList<String> locNoList = new ArrayList<>();
+                            locNoList.add(locNo1);
+                            locNoList.add(locNo2);
+                            for (String locNo : locNoList) {
+                                LocMast locMast = locMastService.selectByLocNo(locNo);
+                                if (locMast.getLocSts().equals("F")){
+                                    CarryParam carryParam = new CarryParam();
+                                    carryParam.setTaskNo(locNo);
+                                    carryParam.setBarcode(locNo);
+                                    carryParam.setIoType(1);//浠诲姟绫诲瀷=銆�1锛氬嚭搴撱��2锛氱Щ搴撱��3锛氬叆搴�   ====杞崲涓�====>  1锛氬叆搴擄紝2锛氬嚭搴擄紝3锛氱Щ搴�
+                                    carryParam.setTaskPriority(1);
+                                    carryParam.setTargetPoint("1012");
+                                    carryParam.setStartPoint(BarcodeUtils.formatCode(locNo));
+                                    carryParam.setMeno("Demo");
+                                    taskWrkController.addTaskPoint(carryParam);
+                                } else if (locMast.getLocSts().equals("O")){
+                                    CarryParam carryParam = new CarryParam();
+                                    carryParam.setTaskNo(locNo+"r");
+                                    carryParam.setBarcode(locNo);
+                                    carryParam.setIoType(3);//浠诲姟绫诲瀷=銆�1锛氬嚭搴撱��2锛氱Щ搴撱��3锛氬叆搴�   ====杞崲涓�====>  1锛氬叆搴擄紝2锛氬嚭搴擄紝3锛氱Щ搴�
+                                    carryParam.setTaskPriority(1);
+                                    carryParam.setStartPoint("1012");
+                                    carryParam.setTargetPoint(BarcodeUtils.formatCode(locNo));
+                                    carryParam.setMeno("Demo");
+                                    taskWrkController.addTaskPoint(carryParam);
+                                    LocFCSUtils.updateLocSInPlace(crnProtocol.getLocMastDemoListSign());
+                                }
                             }
                         }
                     }

--
Gitblit v1.9.1