From 4da282d3a87fb648ae6865929f5862b27d05a562 Mon Sep 17 00:00:00 2001
From: cpT <1@123>
Date: 星期四, 03 七月 2025 15:07:25 +0800
Subject: [PATCH] #改造

---
 src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java | 1089 ++++++++++++++++++++++++++++++++++++++++++++------------
 1 files changed, 851 insertions(+), 238 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 a57287c..7d2b90f 100644
--- a/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
@@ -4,6 +4,7 @@
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.mapper.EntityWrapper;
 import com.core.common.Cools;
+import com.core.common.SpringUtils;
 import com.core.exception.CoolException;
 import com.zy.asrs.controller.CrnController;
 import com.zy.asrs.domain.enums.TaskStatusType;
@@ -31,7 +32,6 @@
 import com.zy.core.thread.RgvThread;
 import com.zy.core.thread.SiemensDevpThread;
 import lombok.extern.slf4j.Slf4j;
-import org.apache.poi.ss.formula.functions.T;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Service;
@@ -55,8 +55,6 @@
 
     @Autowired
     private SlaveProperties slaveProperties;
-    @Autowired
-    private WrkMastMapper wrkMastMapper;
     @Autowired
     private LocMastService locMastService;
     @Autowired
@@ -105,6 +103,11 @@
 
     @Value("${constant-parameters.avoidDistance}")
     private Long avoidDistance;
+    @Autowired
+    private TaskWrkLogServiceImpl taskWrkLogService;
+    @Autowired
+    private BasPlcerrorLogServiceImpl basPlcerrorLogService;
+    public Long currentTimeMilliConnectCrnAuto= 0L;
 
     public void generateStoreWrkFile() {
         try {
@@ -130,35 +133,59 @@
                     boolean back = false;
                     String errMsg = "-";
                     if (staProtocol.getGrossWt()>=600){
-                        errMsg = "瓒呴噸";
+                        errMsg = "瓒呴噸锛�"+staProtocol.getGrossWt()+"kg";
                         back = true;
                     }
                     if (staProtocol.isFrontErr()) {
-                        errMsg = "鍓嶈秴闄�";
+                        if (!back){
+                            errMsg = "鍓嶈秴闄�";
+                        } else {
+                            errMsg = errMsg+"---"+"鍓嶈秴闄�";
+                        }
                         back = true;
                     }
-                    if (!back && staProtocol.isBackErr()) {
-                        errMsg = "鍚庤秴闄�";
+                    if (staProtocol.isBackErr()) {
+                        if (!back){
+                            errMsg = "鍚庤秴闄�";
+                        } else {
+                            errMsg = errMsg+"---"+"鍚庤秴闄�";
+                        }
                         back = true;
                     }
-                    if (!back && staProtocol.isHighErr()) {
-                        errMsg = "楂樿秴闄�";
+                    if (staProtocol.isHighErr()) {
+                        if (!back){
+                            errMsg = "楂樿秴闄�";
+                        } else {
+                            errMsg = errMsg+"---"+"楂樿秴闄�";
+                        }
                         back = true;
                     }
-                    if (!back && staProtocol.isLeftErr()) {
-                        errMsg = "宸﹁秴闄�";
+                    if (staProtocol.isLeftErr()) {
+                        if (!back){
+                            errMsg = "宸﹁秴闄�";
+                        } else {
+                            errMsg = errMsg+"---"+"宸﹁秴闄�";
+                        }
                         back = true;
                     }
-                    if (!back && staProtocol.isRightErr()) {
-                        errMsg = "鍙宠秴闄�";
+                    if (staProtocol.isRightErr()) {
+                        if (!back){
+                            errMsg = "鍙宠秴闄�";
+                        } else {
+                            errMsg = errMsg+"---"+"鍙宠秴闄�";
+                        }
                         back = true;
                     }
-                    if (!back && staProtocol.isWeightErr()) {
-                        errMsg = "瓒呴噸";
-                        back = true;
-                    }
-                    if (!back && staProtocol.isBarcodeErr()) {
-                        errMsg = "鎵爜澶辫触";
+//                    if (!back && staProtocol.isWeightErr()) {
+//                        errMsg = "瓒呴噸";
+//                        back = true;
+//                    }
+                    if (staProtocol.isBarcodeErr()) {
+                        if (!back){
+                            errMsg = "鎵爜澶辫触";
+                        } else {
+                            errMsg = errMsg+"---"+"鎵爜澶辫触";
+                        }
                         back = true;
                     }
                     // 閫�鍥�
@@ -177,6 +204,7 @@
                         staProtocol.setWorkNo(9999);
                         staProtocol.setStaNo(inSta.getBackSta());
                         devpThread.setPakMk(staProtocol.getSiteId(), false);
+                        devpThread.setPakMkRun(staProtocol.getSiteId(), false);
                         devpThread.setErrorDev(staProtocol.getSiteId(), errMsg);
                         MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol));
                         TaskWrk taskWrk = taskWrkMapper.selectByWrkNo(Integer.valueOf(workNo));
@@ -200,6 +228,25 @@
                             continue;
                         }
                         String barcode = barcodeThread.getBarcode();
+                        int signI = 0;
+                        while (signI<6){
+                            Thread.sleep(200);
+                            signI = signI +1;
+                            // 鑾峰彇鏉$爜鎵弿浠俊鎭�
+                            if (Cools.isEmpty(barcode) || barcode.equals("000000")) {
+                                devpThread.setErrorDev(staProtocol.getSiteId(), "寰幆娆℃暟锛�"+signI+"锛涙壂鐮佸�硷細"+barcode);
+
+                                BarcodeThread barcodeThreadO = (BarcodeThread) SlaveConnection.get(SlaveType.Barcode, inSta.getBarcode());
+                                if (barcodeThreadO == null) {
+                                    continue;
+                                }
+                                barcode = barcodeThreadO.getBarcode();
+                            } else {
+                                break;
+                            }
+                        }
+
+
                         if (!Cools.isEmpty(barcode) && !barcode.equals("99999999") && !barcode.equals("000000")) {
                             // 璇锋眰wms鎺ュ彛锛岃幏鍙栧伐浣滃彿鍜岀洰鏍囧簱浣�
                             ToWmsDTO toWmsDTO = new ToWmsDTO(staProtocol.getSiteId(),staProtocol.getGrossWt(),barcode, workNo == 9998? 0 : 1);
@@ -207,7 +254,7 @@
                             TaskWrk taskWrk1 = taskWrkService.selectOne(new EntityWrapper<TaskWrk>().eq("barcode", barcode));
                             if (!Cools.isEmpty(taskWrk1)) {
                                 log.info("鎵樼洏鐮侊細" + barcode + "浠诲姟妗e瓨鍦�");
-                                if (taskWrk1.getIoType() == 1 && taskWrk1.getStatus() < 3 && taskWrk1.getStartPoint().equals(staProtocol.getSiteId().toString())) {
+                                if (taskWrk1.getIoType() == 1 && taskWrk1.getStatus() < 3 && (taskWrk1.getStartPoint().equals(staProtocol.getSiteId().toString()) || taskWrk1.getStartPoint().equals(String.valueOf((staProtocol.getSiteId()+1))))) {
                                     StaDesc staDesc = staDescService.selectOne(new EntityWrapper<StaDesc>()
                                             .eq("CRN_NO", taskWrk1.getCrnNo()).eq("TYPE_NO", 1).eq("STN_NO", staProtocol.getSiteId()));
 
@@ -293,7 +340,7 @@
                                 staProtocol.setWorkNo(9999);
                                 staProtocol.setStaNo(inSta.getBackSta());
                                 devpThread.setPakMk(staProtocol.getSiteId(), false);
-                                devpThread.setErrorDev(staProtocol.getSiteId(), jsonObject.getString("msg"));
+                                devpThread.setErrorDev(staProtocol.getSiteId(), jsonObject.getString("message"));
                                 MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol));
                             }
                         } else {
@@ -366,10 +413,10 @@
                         errMsg = "鍙宠秴闄�";
                         back = true;
                     }
-                    if (!back && staProtocol.isWeightErr()) {
-                        errMsg = "瓒呴噸";
-                        back = true;
-                    }
+//                    if (!back && staProtocol.isWeightErr()) {
+//                        errMsg = "瓒呴噸";
+//                        back = true;
+//                    }
                     // 閫�鍥�
                     if (back) {
                         if (stano == inSta.getBackSta().shortValue()) {
@@ -622,6 +669,9 @@
             }
 
             CrnSlave crnSlave = new CrnSlave(crn);
+            if (Cools.isEmpty(crnProtocol.getLaneNo()) || crnProtocol.getLaneNo()==0){
+                continue;
+            }
 
             if (!crn.getId().equals(crnProtocol.getLaneNo())) {
                 for (CrnSlave crnOther : slaveProperties.getCrn()) {
@@ -685,6 +735,86 @@
     }
 
     /**
+     * 鍫嗗灈鏈�5鍒嗛挓鏃犱换鍔″垯鍥炲埌婧愮偣
+     */
+    public void crnStnToOutStnSou() {
+        for (CrnSlave crn : slaveProperties.getCrn()) {
+            try{
+                // 鑾峰彇鍫嗗灈鏈轰俊鎭�
+                CrnThread crnThread = (CrnThread) SlaveConnection.get(SlaveType.Crn, crn.getId());
+                CrnProtocol crnProtocol = crnThread.getCrnProtocol();
+                if (crnProtocol == null) {
+                    continue;
+                }
+                BasCrnp basCrnp = basCrnpService.selectById(crn.getId());
+                if (basCrnp == null) {
+                    log.error("{}鍙峰爢鍨涙満灏氭湭鍦ㄦ暟鎹簱杩涜缁存姢锛�", crn.getId());
+                    continue;
+                }
+                if (System.currentTimeMillis()-currentTimeMilliConnectCrnAuto<1000*60*10){
+                    continue;
+                }
+                if (crnProtocol.modeType == CrnModeType.AUTO && crnProtocol.statusType == CrnStatusType.IDLE && crnProtocol.getLoaded().equals((short)0) && crnProtocol.getLaneNo()!=0 && crnProtocol.getTaskNo() == 0 ) {
+                    if (crnProtocol.getBay()!=1 || crnProtocol.getLevel()!=1){
+                        //鑾峰彇宸ヤ綔妗�
+                        List<TaskWrk> taskWrks = taskWrkMapper.selectByLaneNo(crnProtocol.getLaneNo());
+                        if (!taskWrks.isEmpty()) {
+                            continue;
+                        }
+                        List<TaskWrkLog> taskWrkLogs = taskWrkLogService.selectList(new EntityWrapper<TaskWrkLog>().eq("CRN_NO",crnProtocol.getLaneNo()).orderBy("COMPLETE_TIME",true));
+                        if (!taskWrkLogs.isEmpty()) {
+                            TaskWrkLog taskWrkLog = taskWrkLogs.get(0);
+                            Date completeTime = taskWrkLog.getCompleteTime();
+                            if (completeTime==null){
+                                completeTime = taskWrkLog.getCancelTime();
+                                if (completeTime==null){
+                                    completeTime = taskWrkLog.getModiTime();
+                                }
+                            }
+                            long differenceInSeconds = TimeCalculatorUtils.differenceInMilliseconds(completeTime, new Date());
+                            if (differenceInSeconds <= 60*10*1000) {
+                                return;
+                            }
+                        }
+                        // 鍛戒护涓嬪彂鍖� --------------------------------------------------------------------------
+                        CrnCommand crnCommand = new CrnCommand();
+                        crnCommand.setCrnNo(crnProtocol.getCrnNo()); // 鍫嗗灈鏈虹紪鍙�
+                        crnCommand.setLaneNo(crnProtocol.getLaneNo()); // 鍫嗗灈鏈哄贩閬撶紪鍙�
+                        crnCommand.setTaskNo((short)999); // 宸ヤ綔鍙�
+                        crnCommand.setAckFinish((short) 0);  // 浠诲姟瀹屾垚纭浣�
+                        crnCommand.setTaskMode(CrnTaskModeType.GO_ORIGIN); // 浠诲姟妯″紡:  搴撲綅绉昏浆
+                        crnCommand.setSourcePosX((short) 0);     // 婧愬簱浣嶆帓
+                        crnCommand.setSourcePosY((short) 0);     // 婧愬簱浣嶅垪
+                        crnCommand.setSourcePosZ((short) 0);   // 婧愬簱浣嶅眰
+                        int row = crnProtocol.getLaneNo() * 2;
+                        crnCommand.setDestinationPosX((short) row);     // 鐩爣搴撲綅鎺�
+                        crnCommand.setDestinationPosY((short) 1);     // 鐩爣搴撲綅灞�
+                        crnCommand.setDestinationPosZ((short) 1);     // 鐩爣搴撲綅鍒�
+                        if (!MessageQueue.offer(SlaveType.Crn, crnProtocol.getCrnNo(), new Task(2, crnCommand))) {
+                            log.error("鍫嗗灈鏈鸿嚜鍔ㄥ洖婧愮偣澶辫触锛屽爢鍨涙満鍙�={}", crnProtocol.getCrnNo());
+
+                            if (System.currentTimeMillis()-currentTimeMilliConnectCrnAuto>1000*60*10){
+                                try{
+                                    DeviceErrorService deviceErrorService = SpringUtils.getBean(DeviceErrorService.class);
+                                    deviceErrorService.addDeviceError("CrnErr", crnProtocol.getCrnNo(), "鍫嗗灈鏈鸿嚜鍔ㄥ洖婧愮偣澶辫触");
+                                } catch (Exception e2){
+                                }
+                                if (currentTimeMilliConnectCrnAuto == 0){
+                                    currentTimeMilliConnectCrnAuto = System.currentTimeMillis()-1000*60*10-1;
+                                } else {
+                                    currentTimeMilliConnectCrnAuto = System.currentTimeMillis();
+                                }
+                            }
+                        }
+                    }
+                }
+            } catch (Exception e){
+                log.error("鍫嗗灈鏈�5鍒嗛挓鏃犱换鍔″垯鍥炲埌婧愮偣澶辫触");
+            }
+        }
+    }
+
+    /**
      * 鍏ュ嚭搴�  ===>>  鍫嗗灈鏈哄叆鍑哄簱浣滀笟涓嬪彂
      */
     public synchronized void crnIoExecute() throws IOException {
@@ -702,6 +832,9 @@
             }
 
             CrnSlave crn = new CrnSlave(crnSlave);
+            if (Cools.isEmpty(crnProtocol.getLaneNo()) || crnProtocol.getLaneNo()==0){
+                continue;
+            }
 
             if (!crnSlave.getId().equals(crnProtocol.getLaneNo())) {
                 for (CrnSlave crnOther : slaveProperties.getCrn()) {
@@ -711,8 +844,12 @@
                 }
             }
 
-            // 搴撲綅绉昏浆
-            this.locToLoc(crn, crnProtocol);
+            try{
+                // 搴撲綅绉昏浆
+                this.locToLoc(crn, crnProtocol);
+            } catch (Exception e) {
+                log.error("搴撲綅绉昏浆澶辫触");
+            }
 
             // 鍙湁褰撳爢鍨涙満绌洪棽 骞朵笖 鏃犱换鍔℃椂鎵嶇户缁墽琛�
             if (crnProtocol.getStatusType() == CrnStatusType.IDLE && crnProtocol.getTaskNo() == 0 && crnProtocol.getModeType() == CrnModeType.AUTO
@@ -854,15 +991,16 @@
                 // 鍛戒护涓嬪彂鍖� --------------------------------------------------------------------------
                 CrnCommand crnCommand = new CrnCommand();
                 crnCommand.setCrnNo(slave.getId()); // 鍫嗗灈鏈虹紪鍙�
-                crnCommand.setCrnNo(crnProtocol.getLaneNo()); // 鍫嗗灈鏈哄贩閬撶紪鍙�
+                crnCommand.setLaneNo(crnProtocol.getLaneNo()); // 鍫嗗灈鏈哄贩閬撶紪鍙�
                 crnCommand.setTaskNo(taskWrk.getWrkNo().shortValue()); // 宸ヤ綔鍙�
                 crnCommand.setAckFinish((short) 0);  // 浠诲姟瀹屾垚纭浣�
                 crnCommand.setTaskMode(CrnTaskModeType.LOC_MOVE); // 浠诲姟妯″紡:  搴撲綅绉昏浆
-                crnCommand.setSourcePosX(crnStn.getRow().shortValue());     // 婧愬簱浣嶅垪
-                crnCommand.setSourcePosY(crnStn.getBay().shortValue());     // 婧愬簱浣嶅眰
-                crnCommand.setSourcePosZ(crnStn.getLev().shortValue());     // 婧愬簱浣嶆帓
+                crnCommand.setSourcePosX(crnStn.getRow().shortValue());     // 婧愬簱浣嶆帓
+                crnCommand.setSourcePosY(crnStn.getBay().shortValue());     // 婧愬簱浣嶅垪
+                crnCommand.setSourcePosZ(crnStn.getLev().shortValue());   // 婧愬簱浣嶅眰
                 crnCommand.setDestinationPosX(Utils.getRowShort(taskWrk.getTargetPoint()));     // 鐩爣搴撲綅鍒�
-                crnCommand.setDestinationPosY(Utils.getBayShort(taskWrk.getTargetPoint()));     // 鐩爣搴撲綅灞�
+                int bay1 = Utils.getBayShort(taskWrk.getTargetPoint()) + 1;
+                crnCommand.setDestinationPosY((short)bay1);     // 鐩爣搴撲綅灞�
                 crnCommand.setDestinationPosZ(Utils.getLevShort(taskWrk.getTargetPoint()));     // 鐩爣搴撲綅鎺�
 //                crnCommand.setCommand((short) 1);
                 if (!MessageQueue.offer(SlaveType.Crn, slave.getId(), new Task(2, crnCommand))) {
@@ -959,8 +1097,11 @@
                     }
 
                     // 鍒ゆ柇鍫嗗灈鏈哄嚭搴撶珯鐘舵��
-                    if (staProtocol.isAutoing() && !staProtocol.isLoading() && staDetl.getCanouting() != null && staDetl.getCanouting().equals("Y")
-                            && staProtocol.getWorkNo() == 0 && staProtocol.isOutEnable()) {
+                    if (staProtocol.isAutoing() && staDetl.getCanouting() != null && staDetl.getCanouting().equals("Y")) {
+
+//                    // 鍒ゆ柇鍫嗗灈鏈哄嚭搴撶珯鐘舵��
+//                    if (staProtocol.isAutoing() && !staProtocol.isLoading() && staDetl.getCanouting() != null && staDetl.getCanouting().equals("Y")
+//                            && staProtocol.getWorkNo() == 0 && staProtocol.isOutEnable()) {
                         // 鍛戒护涓嬪彂鍖� --------------------------------------------------------------------------
 
                         // 鍫嗗灈鏈烘帶鍒惰繃婊�
@@ -989,12 +1130,13 @@
                         command.setAckFinish((short) 0);  // 浠诲姟瀹屾垚纭浣�
                         command.setTaskMode(CrnTaskModeType.PAKIN); // 浠诲姟妯″紡
                         command.setSourcePosX(Utils.getRowShort(taskWrk.getStartPoint()));     // 婧愬簱浣嶆帓
-                        command.setSourcePosY(Utils.getBayShort(taskWrk.getStartPoint()));     // 婧愬簱浣嶅垪
+                        int bayS = Utils.getBayShort(taskWrk.getStartPoint()) + 1;
+                        command.setSourcePosY((short)bayS);     // 婧愬簱浣嶅垪
                         command.setSourcePosZ(Utils.getLevShort(taskWrk.getStartPoint()));     // 婧愬簱浣嶅眰
                         command.setDestinationPosX(crnStn.getRow().shortValue());     // 鐩爣搴撲綅鎺�
                         command.setDestinationPosY(crnStn.getBay().shortValue());     // 鐩爣搴撲綅鍒�
                         command.setDestinationPosZ(crnStn.getLev().shortValue());     // 鐩爣搴撲綅灞�
-                        command.setCommand((short) 1);
+//                        command.setCommand((short) 1);
                         if (!MessageQueue.offer(SlaveType.Crn, slave.getId(), new Task(2, command))) {
                             log.error("鍫嗗灈鏈哄懡浠ょ敓鎴愬け璐ワ紝鍫嗗灈鏈哄彿={}锛屽贩閬�={}锛屼换鍔℃暟鎹�={}", slave.getId(), taskWrk.getCrnNo(), JSON.toJSON(command));
                             devpThread.setErrorDev(staProtocol.getSiteId(), crnProtocol.getLaneNo()+"宸烽亾鍫嗗灈鏈哄懡浠ょ敓鎴愬け璐�");
@@ -1061,6 +1203,8 @@
                             if (staProtocol.isOutEnable()){
                                 CrnErrCache.updateCrnErr(crnProtocol.getCrnNo(), "娌℃湁鍙嚭");
                             }
+                        } else {
+                            CrnErrCache.updateCrnErr(crnProtocol.getCrnNo(), "鍑哄簱绔欑偣锛氶潪鑷姩");
                         }
                     }
                 }
@@ -1120,10 +1264,12 @@
                 crnCommand.setAckFinish((short) 0);  // 浠诲姟瀹屾垚纭浣�
                 crnCommand.setTaskMode(CrnTaskModeType.LOC_MOVE); // 浠诲姟妯″紡:  搴撲綅绉昏浆
                 crnCommand.setSourcePosX(Utils.getRowShort(taskWrk.getStartPoint()));     // 婧愬簱浣嶆帓
-                crnCommand.setSourcePosY(Utils.getBayShort(taskWrk.getStartPoint()));     // 婧愬簱浣嶅垪
+                int bayS = Utils.getBayShort(taskWrk.getStartPoint()) + 1;
+                crnCommand.setSourcePosY((short)bayS);     // 婧愬簱浣嶅垪
                 crnCommand.setSourcePosZ(Utils.getLevShort(taskWrk.getStartPoint()));     // 婧愬簱浣嶅眰
                 crnCommand.setDestinationPosX(Utils.getRowShort(taskWrk.getTargetPoint()));     // 鐩爣搴撲綅鎺�
-                crnCommand.setDestinationPosY(Utils.getBayShort(taskWrk.getTargetPoint()));     // 鐩爣搴撲綅鍒�
+                int bayE = Utils.getBayShort(taskWrk.getTargetPoint()) + 1;
+                crnCommand.setDestinationPosY((short)bayE);     // 鐩爣搴撲綅鍒�
                 crnCommand.setDestinationPosZ(Utils.getLevShort(taskWrk.getTargetPoint()));     // 鐩爣搴撲綅灞�
 //                crnCommand.setCommand((short) 1);
                 if (!MessageQueue.offer(SlaveType.Crn, slave.getId(), new Task(2, crnCommand))) {
@@ -1181,80 +1327,87 @@
      */
     public void storeFinished() throws InterruptedException {
         for (CrnSlave crnSlave : slaveProperties.getCrn()) {
-            // 鑾峰彇鍫嗗灈鏈轰俊鎭�
-            CrnThread crnThread = (CrnThread) SlaveConnection.get(SlaveType.Crn, crnSlave.getId());
-            CrnProtocol crnProtocol = crnThread.getCrnProtocol();
-            if (crnProtocol == null) {
-                continue;
-            }
-
-            CrnSlave crn = new CrnSlave(crnSlave);
-
-            if (!crnSlave.getId().equals(crnProtocol.getLaneNo())) {
-                for (CrnSlave crnOther : slaveProperties.getCrn()) {
-                    if (crnOther.getId().equals(crnProtocol.getLaneNo())) {
-                        crn.updateCrnInStn(crnOther);
-                    }
-                }
-            }
-
-            //  鐘舵�侊細绛夊緟纭 骞朵笖  浠诲姟瀹屾垚浣� = 1
-            if (crnProtocol.statusType == CrnStatusType.WAITING && crnProtocol.getTaskNo() != 0) {
-                //鑾峰彇鍏ュ簱寰呯‘璁ゅ伐浣滄。
-                TaskWrk taskWrk = taskWrkMapper.selectCrnNoInWorking(crnProtocol.getLaneNo(), crnProtocol.getTaskNo().intValue());
-                if (Cools.isEmpty(taskWrk) && crnProtocol.getTaskNo() != 999) {
-                    log.error("鍫嗗灈鏈哄浜庣瓑寰呯‘璁や笖浠诲姟瀹屾垚鐘舵�侊紝浣嗘湭鎵惧埌宸ヤ綔妗c�傚爢鍨涙満鍙�={}锛屽贩閬撳彿={}锛屽伐浣滃彿={}", crn.getId(), crnProtocol.getLaneNo(), crnProtocol.getTaskNo());
+            try{
+                // 鑾峰彇鍫嗗灈鏈轰俊鎭�
+                CrnThread crnThread = (CrnThread) SlaveConnection.get(SlaveType.Crn, crnSlave.getId());
+                CrnProtocol crnProtocol = crnThread.getCrnProtocol();
+                if (crnProtocol == null) {
                     continue;
                 }
-//                Thread.sleep(300);
-                //纭瀹屾垚淇″彿
-                CrnOperatorParam crnOperatorParam = new CrnOperatorParam();
-                crnOperatorParam.setCrnNo(crn.getId());
-                Date now = new Date();
 
-                crnController.crnTaskComplete(crnOperatorParam);
-                if (!Cools.isEmpty(taskWrk)) {
-                    if (taskWrk.getIoType() == 1 && taskWrk.getWrkSts() == 3) {
-                        taskWrk.setWrkSts(4);//鍏ュ簱瀹屾垚
-                        taskWrk.setStatus(TaskStatusType.OVER.id);//瀹岀粨
-                        //鏇存柊搴撲綅鐘舵��
-                        LocMast locMast = locMastService.selectByLocNo(taskWrk.getTargetPoint());
-                        locMast.setLocSts("F");//F.鍦ㄥ簱
-                        locMast.setBarcode(taskWrk.getBarcode());//鎵樼洏鐮�
-                        locMast.setModiTime(now);
-                        locMast.setModiUser(9999L);
-                        locMastService.updateById(locMast);
-                    } else if (taskWrk.getIoType() == 2 && taskWrk.getWrkSts() == 12) {
-                        taskWrk.setWrkSts(13);//鍑哄簱瀹屾垚
-                        taskWrk.setStatus(TaskStatusType.OVER.id);//瀹岀粨
-                        //鏇存柊搴撲綅鐘舵��
-                        LocMast locMast = locMastService.selectByLocNo(taskWrk.getStartPoint());
-                        locMast.setLocSts("O");//O.绌哄簱浣�
-                        locMast.setBarcode("");//鎵樼洏鐮�
-                        locMast.setModiTime(now);
-                        locMast.setModiUser(9999L);
-                        locMastService.updateById(locMast);
-                    } else if (taskWrk.getIoType() == 3 && taskWrk.getWrkSts() == 12) {
-                        taskWrk.setWrkSts(4);//鍏ュ簱瀹屾垚
-                        taskWrk.setStatus(TaskStatusType.OVER.id);//瀹岀粨
-                        //鏇存柊搴撲綅鐘舵��
-                        LocMast locMast = locMastService.selectByLocNo(taskWrk.getTargetPoint());
-                        locMast.setLocSts("F");//F.鍦ㄥ簱
-                        locMast.setBarcode(taskWrk.getBarcode());//鎵樼洏鐮�
-                        locMast.setModiTime(now);
-                        locMast.setModiUser(9999L);
-                        locMastService.updateById(locMast);
+                CrnSlave crn = new CrnSlave(crnSlave);
+                if (Cools.isEmpty(crnProtocol.getLaneNo()) || crnProtocol.getLaneNo()==0){
+                    continue;
+                }
 
-                        LocMast locMast1 = locMastService.selectByLocNo(taskWrk.getStartPoint());
-                        locMast1.setLocSts("O");//O.绌哄簱浣�
-                        locMast1.setBarcode("");//鎵樼洏鐮�
-                        locMast1.setModiTime(now);
-                        locMast1.setModiUser(9999L);
-                        locMastService.updateById(locMast1);
+                if (!crnSlave.getId().equals(crnProtocol.getLaneNo())) {
+                    for (CrnSlave crnOther : slaveProperties.getCrn()) {
+                        if (crnOther.getId().equals(crnProtocol.getLaneNo())) {
+                            crn.updateCrnInStn(crnOther);
+                        }
                     }
-                    taskWrk.setModiTime(now);
-                    taskWrk.setCompleteTime(now);
-                    taskWrkService.updateById(taskWrk);
+                }
+
+                //  鐘舵�侊細绛夊緟纭 骞朵笖  浠诲姟瀹屾垚浣� = 1
+                if (crnProtocol.statusType == CrnStatusType.WAITING && crnProtocol.getTaskNo() != 0) {
+                    //鑾峰彇鍏ュ簱寰呯‘璁ゅ伐浣滄。
+                    TaskWrk taskWrk = taskWrkMapper.selectCrnNoInWorking(crnProtocol.getLaneNo(), crnProtocol.getTaskNo().intValue());
+                    if (Cools.isEmpty(taskWrk) && crnProtocol.getTaskNo() != 999) {
+                        log.error("鍫嗗灈鏈哄浜庣瓑寰呯‘璁や笖浠诲姟瀹屾垚鐘舵�侊紝浣嗘湭鎵惧埌宸ヤ綔妗c�傚爢鍨涙満鍙�={}锛屽贩閬撳彿={}锛屽伐浣滃彿={}", crn.getId(), crnProtocol.getLaneNo(), crnProtocol.getTaskNo());
+                        continue;
+                    }
+//                Thread.sleep(300);
+                    //纭瀹屾垚淇″彿
+//                    CrnOperatorParam crnOperatorParam = new CrnOperatorParam();
+//                    crnOperatorParam.setCrnNo(crn.getId());
+                    Date now = new Date();
+
+//                    crnController.crnTaskComplete(crnOperatorParam);
+//                    MessageQueue.offer(SlaveType.Crn, crn.getId(), new Task(2, command))
+                    crnThread.setResetFlag(true);
+
+                    if (!Cools.isEmpty(taskWrk)) {
+                        if (taskWrk.getIoType() == 1 && taskWrk.getWrkSts() == 3) {
+                            taskWrk.setWrkSts(4);//鍏ュ簱瀹屾垚
+                            taskWrk.setStatus(TaskStatusType.OVER.id);//瀹岀粨
+                            //鏇存柊搴撲綅鐘舵��
+                            LocMast locMast = locMastService.selectByLocNo(taskWrk.getTargetPoint());
+                            locMast.setLocSts("F");//F.鍦ㄥ簱
+                            locMast.setBarcode(taskWrk.getBarcode());//鎵樼洏鐮�
+                            locMast.setModiTime(now);
+                            locMast.setModiUser(9999L);
+                            locMastService.updateById(locMast);
+                        } else if (taskWrk.getIoType() == 2 && taskWrk.getWrkSts() == 12) {
+                            taskWrk.setWrkSts(13);//鍑哄簱瀹屾垚
+                            taskWrk.setStatus(TaskStatusType.OVER.id);//瀹岀粨
+                            //鏇存柊搴撲綅鐘舵��
+                            LocMast locMast = locMastService.selectByLocNo(taskWrk.getStartPoint());
+                            locMast.setLocSts("O");//O.绌哄簱浣�
+                            locMast.setBarcode("");//鎵樼洏鐮�
+                            locMast.setModiTime(now);
+                            locMast.setModiUser(9999L);
+                            locMastService.updateById(locMast);
+                        } else if (taskWrk.getIoType() == 3 && taskWrk.getWrkSts() == 12) {
+                            taskWrk.setWrkSts(4);//鍏ュ簱瀹屾垚
+                            taskWrk.setStatus(TaskStatusType.OVER.id);//瀹岀粨
+                            //鏇存柊搴撲綅鐘舵��
+                            LocMast locMast = locMastService.selectByLocNo(taskWrk.getTargetPoint());
+                            locMast.setLocSts("F");//F.鍦ㄥ簱
+                            locMast.setBarcode(taskWrk.getBarcode());//鎵樼洏鐮�
+                            locMast.setModiTime(now);
+                            locMast.setModiUser(9999L);
+                            locMastService.updateById(locMast);
+
+                            LocMast locMast1 = locMastService.selectByLocNo(taskWrk.getStartPoint());
+                            locMast1.setLocSts("O");//O.绌哄簱浣�
+                            locMast1.setBarcode("");//鎵樼洏鐮�
+                            locMast1.setModiTime(now);
+                            locMast1.setModiUser(9999L);
+                            locMastService.updateById(locMast1);
+                        }
+                        taskWrk.setModiTime(now);
+                        taskWrk.setCompleteTime(now);
+                        taskWrkService.updateById(taskWrk);
 
 
 //                    try {
@@ -1294,8 +1447,11 @@
 //                        log.error("wcs瀹岀粨浠诲姟涓婃姤wms澶辫触,鎶ラ敊淇℃伅锛�", e);
 ////                        throw new CoolException("wcs娲惧彂鍏ュ簱浠诲姟涓婃姤wms澶辫触");
 //                    }
-                }
+                    }
 
+                }
+            } catch (Exception e){
+                log.error("鍫嗗灈鏈烘墽琛屽宸ヤ綔妗g殑瀹屾垚鎿嶄綔澶辫触 ===>> [id:{}] [error:{}]", crnSlave.getId(), e.getMessage());
             }
         }
     }
@@ -1306,115 +1462,243 @@
     public void recCrnErr() {
         Date now = new Date();
         for (CrnSlave crn : slaveProperties.getCrn()) {
-            // 鑾峰彇鍫嗗灈鏈轰俊鎭�
-            CrnThread crnThread = (CrnThread) SlaveConnection.get(SlaveType.Crn, crn.getId());
-            CrnProtocol crnProtocol = crnThread.getCrnProtocol();
-            if (crnProtocol == null) {
-                continue;
-            }
-            if (false) {
-//            if (crnProtocol.getModeType() != CrnModeType.STOP) {
-                // 鏈変换鍔�
-                if (crnProtocol.getTaskNo() != 0) {
-                    BasErrLog latest = basErrLogService.findLatestByTaskNo(crn.getId(), crnProtocol.getTaskNo().intValue());
-                    // 鏈夊紓甯�
-                    if (latest == null) {
+            try{
+                // 鑾峰彇鍫嗗灈鏈轰俊鎭�
+                CrnThread crnThread = (CrnThread) SlaveConnection.get(SlaveType.Crn, crn.getId());
+                CrnProtocol crnProtocol = crnThread.getCrnProtocol();
+                if (crnProtocol == null) {
+                    continue;
+                }
+                if (crnProtocol.getModeType() != CrnModeType.STOP) {
+                    // 鏈変换鍔�
+                    if (crnProtocol.getTaskNo() != 0) {
+                        BasErrLog latest = basErrLogService.findLatestByTaskNo(crn.getId(), crnProtocol.getTaskNo().intValue());
+                        // 鏈夊紓甯�
+                        if (latest == null) {
+                            if (crnProtocol.getAlarm() != null && crnProtocol.getAlarm() > 0) {
+                                TaskWrk taskWrk = taskWrkMapper.selectByWrkNo(Integer.valueOf(crnProtocol.getTaskNo()));
+                                if (taskWrk == null) {
+                                    continue;
+                                }
+                                BasCrnError crnError = basCrnErrorMapper.selectById(crnProtocol.getAlarm().intValue());
+                                String errName = crnError == null ? String.valueOf(crnProtocol.getAlarm()) : crnError.getErrName();
+                                BasErrLog basErrLog = new BasErrLog(
+                                        null,    // 缂栧彿
+                                        taskWrk.getWrkNo(),    // 宸ヤ綔鍙�
+                                        now,    // 鍙戠敓鏃堕棿
+                                        null,    // 缁撴潫鏃堕棿
+                                        taskWrk.getWrkSts().longValue(),    // 宸ヤ綔鐘舵��
+                                        taskWrk.getIoType(),    // 鍏ュ嚭搴撶被鍨�
+                                        taskWrk.getCrnNo(),    // 宸烽亾鍙�
+                                        crn.getId(),    // 鍫嗗灈鏈哄彿
+                                        taskWrk.getTargetPoint(),    // 鐩爣搴撲綅
+                                        0,    // 鐩爣绔�
+                                        0,    // 婧愮珯
+                                        taskWrk.getStartPoint(),    // 婧愬簱浣�
+                                        taskWrk.getBarcode(),    // 鏉$爜
+                                        (int) crnProtocol.getAlarm(),    // 寮傚父鐮�
+                                        errName,    // 寮傚父
+                                        1,    // 寮傚父鎯呭喌
+                                        taskWrk.getCreateTime(),    // 浠诲姟鏃堕棿(鎺ユ敹鏃堕棿)
+                                        null,    // 娣诲姞浜哄憳
+                                        now,    // 淇敼鏃堕棿
+                                        null,    // 淇敼浜哄憳
+                                        "浠诲姟涓紓甯�"    // 澶囨敞
+                                );
+                                if (!basErrLogService.insert(basErrLog)) {
+                                    log.error("鍫嗗灈鏈簆lc寮傚父璁板綍澶辫触 ===>> [id:{}] [error:{}]", crn.getId(), errName);
+                                }
+                            }
+                        } else {
+                            // 寮傚父淇
+                            if (crnProtocol.getAlarm() == null || crnProtocol.getAlarm() == 0) {
+                                latest.setEndTime(now);
+                                latest.setUpdateTime(now);
+                                latest.setStatus(2);
+                                if (!basErrLogService.updateById(latest)) {
+                                    log.error("鍫嗗灈鏈簆lc寮傚父璁板綍淇澶辫触 ===>> [id:{}] [errLogId:{}]", crn.getId(), latest.getId());
+                                }
+                            }
+                        }
+                        // 鏃犱换鍔�
+                    } else {
+                        BasErrLog latest = basErrLogService.findLatest(crn.getId());
+                        // 鏈夊紓甯�
                         if (crnProtocol.getAlarm() != null && crnProtocol.getAlarm() > 0) {
-                            WrkMast wrkMast = wrkMastMapper.selectById(crnProtocol.getTaskNo());
-                            if (wrkMast == null) {
-                                continue;
+                            // 璁板綍鏂板紓甯�
+                            if (latest == null || (latest.getErrCode() != crnProtocol.getAlarm().intValue())) {
+                                BasCrnError crnError = basCrnErrorMapper.selectById(crnProtocol.getAlarm());
+                                String errName = crnError == null ? String.valueOf(crnProtocol.getAlarm()) : crnError.getErrName();
+                                BasErrLog basErrLog = new BasErrLog(
+                                        null,    // 缂栧彿
+                                        null,    // 宸ヤ綔鍙�
+                                        now,    // 鍙戠敓鏃堕棿
+                                        null,    // 缁撴潫鏃堕棿
+                                        null,    // 宸ヤ綔鐘舵��
+                                        null,    // 鍏ュ嚭搴撶被鍨�
+                                        crnProtocol.getLaneNo(),    // 鍫嗗灈鏈�
+                                        crn.getId(),    // plc
+                                        null,    // 鐩爣搴撲綅
+                                        null,    // 鐩爣绔�
+                                        null,    // 婧愮珯
+                                        null,    // 婧愬簱浣�
+                                        null,    // 鏉$爜
+                                        (int) crnProtocol.getAlarm(),    // 寮傚父鐮�
+                                        errName,    // 寮傚父
+                                        1,    // 寮傚父鎯呭喌
+                                        now,    // 娣诲姞鏃堕棿
+                                        null,    // 娣诲姞浜哄憳
+                                        now,    // 淇敼鏃堕棿
+                                        null,    // 淇敼浜哄憳
+                                        "鏃犱换鍔″紓甯�"    // 澶囨敞
+                                );
+                                if (!basErrLogService.insert(basErrLog)) {
+                                    log.error("鍫嗗灈鏈簆lc寮傚父璁板綍澶辫触 ===>> [id:{}] [error:{}]", crn.getId(), errName);
+                                }
                             }
-                            BasCrnError crnError = basCrnErrorMapper.selectById(crnProtocol.getAlarm());
-                            String errName = crnError == null ? String.valueOf(crnProtocol.getAlarm()) : crnError.getErrName();
-                            BasErrLog basErrLog = new BasErrLog(
-                                    null,    // 缂栧彿
-                                    wrkMast.getWrkNo(),    // 宸ヤ綔鍙�
-                                    now,    // 鍙戠敓鏃堕棿
-                                    null,    // 缁撴潫鏃堕棿
-                                    wrkMast.getWrkSts(),    // 宸ヤ綔鐘舵��
-                                    wrkMast.getIoType(),    // 鍏ュ嚭搴撶被鍨�
-                                    crn.getId(),    // 鍫嗗灈鏈�
-                                    null,    // plc
-                                    wrkMast.getLocNo(),    // 鐩爣搴撲綅
-                                    wrkMast.getStaNo(),    // 鐩爣绔�
-                                    wrkMast.getSourceStaNo(),    // 婧愮珯
-                                    wrkMast.getSourceLocNo(),    // 婧愬簱浣�
-                                    wrkMast.getBarcode(),    // 鏉$爜
-                                    (int) crnProtocol.getAlarm(),    // 寮傚父鐮�
-                                    errName,    // 寮傚父
-                                    1,    // 寮傚父鎯呭喌
-                                    now,    // 娣诲姞鏃堕棿
-                                    null,    // 娣诲姞浜哄憳
-                                    now,    // 淇敼鏃堕棿
-                                    null,    // 淇敼浜哄憳
-                                    "浠诲姟涓紓甯�"    // 澶囨敞
-                            );
-                            if (!basErrLogService.insert(basErrLog)) {
-                                log.error("鍫嗗灈鏈簆lc寮傚父璁板綍澶辫触 ===>> [id:{}] [error:{}]", crn.getId(), errName);
-                            }
-                        }
-                    } else {
-                        // 寮傚父淇
-                        if (crnProtocol.getAlarm() == null || crnProtocol.getAlarm() == 0) {
-                            latest.setEndTime(now);
-                            latest.setUpdateTime(now);
-                            latest.setStatus(2);
-                            if (!basErrLogService.updateById(latest)) {
-                                log.error("鍫嗗灈鏈簆lc寮傚父璁板綍淇澶辫触 ===>> [id:{}] [errLogId:{}]", crn.getId(), latest.getId());
-                            }
-                        }
-                    }
-                    // 鏃犱换鍔�
-                } else {
-                    BasErrLog latest = basErrLogService.findLatest(crn.getId());
-                    // 鏈夊紓甯�
-                    if (crnProtocol.getAlarm() != null && crnProtocol.getAlarm() > 0) {
-                        // 璁板綍鏂板紓甯�
-                        if (latest == null || (latest.getErrCode() != crnProtocol.getAlarm().intValue())) {
-                            BasCrnError crnError = basCrnErrorMapper.selectById(crnProtocol.getAlarm());
-                            String errName = crnError == null ? String.valueOf(crnProtocol.getAlarm()) : crnError.getErrName();
-                            BasErrLog basErrLog = new BasErrLog(
-                                    null,    // 缂栧彿
-                                    null,    // 宸ヤ綔鍙�
-                                    now,    // 鍙戠敓鏃堕棿
-                                    null,    // 缁撴潫鏃堕棿
-                                    null,    // 宸ヤ綔鐘舵��
-                                    null,    // 鍏ュ嚭搴撶被鍨�
-                                    crn.getId(),    // 鍫嗗灈鏈�
-                                    null,    // plc
-                                    null,    // 鐩爣搴撲綅
-                                    null,    // 鐩爣绔�
-                                    null,    // 婧愮珯
-                                    null,    // 婧愬簱浣�
-                                    null,    // 鏉$爜
-                                    (int) crnProtocol.getAlarm(),    // 寮傚父鐮�
-                                    errName,    // 寮傚父
-                                    1,    // 寮傚父鎯呭喌
-                                    now,    // 娣诲姞鏃堕棿
-                                    null,    // 娣诲姞浜哄憳
-                                    now,    // 淇敼鏃堕棿
-                                    null,    // 淇敼浜哄憳
-                                    "鏃犱换鍔″紓甯�"    // 澶囨敞
-                            );
-                            if (!basErrLogService.insert(basErrLog)) {
-                                log.error("鍫嗗灈鏈簆lc寮傚父璁板綍澶辫触 ===>> [id:{}] [error:{}]", crn.getId(), errName);
-                            }
-                        }
-                        // 鏃犲紓甯�
-                    } else {
-                        // 寮傚父淇
-                        if (latest != null && latest.getStatus() == 1) {
-                            latest.setEndTime(now);
-                            latest.setUpdateTime(now);
-                            latest.setStatus(2);
-                            if (!basErrLogService.updateById(latest)) {
-                                log.error("鍫嗗灈鏈簆lc寮傚父璁板綍淇澶辫触 ===>> [id:{}] [errLogId:{}]", crn.getId(), latest.getId());
+                            // 鏃犲紓甯�
+                        } else {
+                            // 寮傚父淇
+                            if (latest != null && latest.getStatus() == 1) {
+                                latest.setEndTime(now);
+                                latest.setUpdateTime(now);
+                                latest.setStatus(2);
+                                if (!basErrLogService.updateById(latest)) {
+                                    log.error("鍫嗗灈鏈簆lc寮傚父璁板綍淇澶辫触 ===>> [id:{}] [errLogId:{}]", crn.getId(), latest.getId());
+                                }
                             }
                         }
                     }
                 }
+            } catch (Exception e){
+                log.error("鍫嗗灈鏈哄紓甯镐俊鎭褰曞け璐� ===>> [id:{}] [error:{}]", crn.getId(), e.getMessage());
             }
+        }
+    }
 
+    /**
+     * 鍫嗗灈鏈哄紓甯镐俊鎭褰�
+     */
+    public void recDevErr() {
+        Date now = new Date();
+        for (DevpSlave devpSlave : slaveProperties.getDevp()) {
+            try{
+                // 鑾峰彇鍫嗗灈鏈轰俊鎭�
+                DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, devpSlave.getId());
+                Map<Integer, StaProtocol> station = devpThread.getStation();
+                for (StaProtocol staProtocol : station.values()){
+                    try{
+                        if (staProtocol == null) {
+                            continue;
+                        }
+//                        if (staProtocol.isAutoing()) {
+//                            // 鏈変换鍔�
+//                            if (staProtocol.getWorkNo() != 0) {
+////                                BasErrLog latest = basPlcerrorLogService.se(crn.getId(), crnProtocol.getTaskNo().intValue());
+//                                // 鏈夊紓甯�
+//                                if (latest == null) {
+//                                    if (crnProtocol.getAlarm() != null && crnProtocol.getAlarm() > 0) {
+//                                        TaskWrk taskWrk = taskWrkMapper.selectByWrkNo(Integer.valueOf(crnProtocol.getTaskNo()));
+//                                        if (taskWrk == null) {
+//                                            continue;
+//                                        }
+//                                        BasCrnError crnError = basCrnErrorMapper.selectById(crnProtocol.getAlarm().intValue());
+//                                        String errName = crnError == null ? String.valueOf(crnProtocol.getAlarm()) : crnError.getErrName();
+//                                        BasErrLog basErrLog = new BasErrLog(
+//                                                null,    // 缂栧彿
+//                                                taskWrk.getWrkNo(),    // 宸ヤ綔鍙�
+//                                                now,    // 鍙戠敓鏃堕棿
+//                                                null,    // 缁撴潫鏃堕棿
+//                                                taskWrk.getWrkSts().longValue(),    // 宸ヤ綔鐘舵��
+//                                                taskWrk.getIoType(),    // 鍏ュ嚭搴撶被鍨�
+//                                                crn.getId(),    // 鍫嗗灈鏈�
+//                                                null,    // plc
+//                                                taskWrk.getTargetPoint(),    // 鐩爣搴撲綅
+//                                                0,    // 鐩爣绔�
+//                                                0,    // 婧愮珯
+//                                                taskWrk.getStartPoint(),    // 婧愬簱浣�
+//                                                taskWrk.getBarcode(),    // 鏉$爜
+//                                                (int) crnProtocol.getAlarm(),    // 寮傚父鐮�
+//                                                errName,    // 寮傚父
+//                                                1,    // 寮傚父鎯呭喌
+//                                                taskWrk.getCreateTime(),    // 浠诲姟鏃堕棿(鎺ユ敹鏃堕棿)
+//                                                null,    // 娣诲姞浜哄憳
+//                                                now,    // 淇敼鏃堕棿
+//                                                null,    // 淇敼浜哄憳
+//                                                "浠诲姟涓紓甯�"    // 澶囨敞
+//                                        );
+//                                        if (!basErrLogService.insert(basErrLog)) {
+//                                            log.error("鍫嗗灈鏈簆lc寮傚父璁板綍澶辫触 ===>> [id:{}] [error:{}]", crn.getId(), errName);
+//                                        }
+//                                    }
+//                                } else {
+//                                    // 寮傚父淇
+//                                    if (crnProtocol.getAlarm() == null || crnProtocol.getAlarm() == 0) {
+//                                        latest.setEndTime(now);
+//                                        latest.setUpdateTime(now);
+//                                        latest.setStatus(2);
+//                                        if (!basErrLogService.updateById(latest)) {
+//                                            log.error("鍫嗗灈鏈簆lc寮傚父璁板綍淇澶辫触 ===>> [id:{}] [errLogId:{}]", crn.getId(), latest.getId());
+//                                        }
+//                                    }
+//                                }
+//                                // 鏃犱换鍔�
+//                            } else {
+//                                BasErrLog latest = basErrLogService.findLatest(crn.getId());
+//                                // 鏈夊紓甯�
+//                                if (crnProtocol.getAlarm() != null && crnProtocol.getAlarm() > 0) {
+//                                    // 璁板綍鏂板紓甯�
+//                                    if (latest == null || (latest.getErrCode() != crnProtocol.getAlarm().intValue())) {
+//                                        BasCrnError crnError = basCrnErrorMapper.selectById(crnProtocol.getAlarm());
+//                                        String errName = crnError == null ? String.valueOf(crnProtocol.getAlarm()) : crnError.getErrName();
+//                                        BasErrLog basErrLog = new BasErrLog(
+//                                                null,    // 缂栧彿
+//                                                null,    // 宸ヤ綔鍙�
+//                                                now,    // 鍙戠敓鏃堕棿
+//                                                null,    // 缁撴潫鏃堕棿
+//                                                null,    // 宸ヤ綔鐘舵��
+//                                                null,    // 鍏ュ嚭搴撶被鍨�
+//                                                crn.getId(),    // 鍫嗗灈鏈�
+//                                                null,    // plc
+//                                                null,    // 鐩爣搴撲綅
+//                                                null,    // 鐩爣绔�
+//                                                null,    // 婧愮珯
+//                                                null,    // 婧愬簱浣�
+//                                                null,    // 鏉$爜
+//                                                (int) crnProtocol.getAlarm(),    // 寮傚父鐮�
+//                                                errName,    // 寮傚父
+//                                                1,    // 寮傚父鎯呭喌
+//                                                now,    // 娣诲姞鏃堕棿
+//                                                null,    // 娣诲姞浜哄憳
+//                                                now,    // 淇敼鏃堕棿
+//                                                null,    // 淇敼浜哄憳
+//                                                "鏃犱换鍔″紓甯�"    // 澶囨敞
+//                                        );
+//                                        if (!basErrLogService.insert(basErrLog)) {
+//                                            log.error("鍫嗗灈鏈簆lc寮傚父璁板綍澶辫触 ===>> [id:{}] [error:{}]", crn.getId(), errName);
+//                                        }
+//                                    }
+//                                    // 鏃犲紓甯�
+//                                } else {
+//                                    // 寮傚父淇
+//                                    if (latest != null && latest.getStatus() == 1) {
+//                                        latest.setEndTime(now);
+//                                        latest.setUpdateTime(now);
+//                                        latest.setStatus(2);
+//                                        if (!basErrLogService.updateById(latest)) {
+//                                            log.error("鍫嗗灈鏈簆lc寮傚父璁板綍淇澶辫触 ===>> [id:{}] [errLogId:{}]", crn.getId(), latest.getId());
+//                                        }
+//                                    }
+//                                }
+//                            }
+//                        }
+                    } catch (Exception devErr){
+                        log.error("杈撻�佺嚎绔欑偣寮傚父淇℃伅璁板綍澶辫触 ===>> [id:{}] [error:{}]", staProtocol.getStaNo(), devErr.getMessage());
+                    }
+                }
+            } catch (Exception e){
+                log.error("杈撻�佺嚎寮傚父淇℃伅璁板綍澶辫触 ===>> [id:{}] [error:{}]", devpSlave.getId(), e.getMessage());
+            }
         }
     }
 
@@ -1545,9 +1829,15 @@
         }
         if (rgvProtocolOther.statusEnable) {
             BasDevpPosition basDevpPosition = basDevpPositionService.selectOne(new EntityWrapper<BasDevpPosition>().eq("DEV_NO", staNo));
-            if (Math.abs(basDevpPosition.getPlcPosition()-rgvProtocol.getRgvPos())
+            long abs = Math.abs(Math.abs(basDevpPosition.getPlcPosition() - rgvProtocol.getRgvPos())
+                    -
+                    Math.abs(basDevpPosition.getPlcPosition() - rgvProtocolOther.getRgvPos()));
+            if (abs<100){
+                return true;
+            }
+            if (Math.abs(basDevpPosition.getPlcPosition() - rgvProtocol.getRgvPos())
                     >=
-                    Math.abs(basDevpPosition.getPlcPosition()-rgvProtocolOther.getRgvPos())){
+                    Math.abs(basDevpPosition.getPlcPosition() - rgvProtocolOther.getRgvPos())){
                 return false;
             }
         }
@@ -1571,6 +1861,12 @@
         }
         if (rgvProtocolOther.statusEnable) {
             BasDevpPosition basDevpPosition = basDevpPositionService.selectOne(new EntityWrapper<BasDevpPosition>().eq("DEV_NO", staNo));
+            long abs = Math.abs(Math.abs(basDevpPosition.getPlcPosition() - rgvProtocol.getRgvPos())
+                    -
+                    Math.abs(basDevpPosition.getPlcPosition() - rgvProtocolOther.getRgvPos()));
+            if (abs<100){
+                return true;
+            }
             if (Math.abs(basDevpPosition.getPlcPosition()-rgvProtocol.getRgvPos())
                     >=
                     Math.abs(basDevpPosition.getPlcPosition()-rgvProtocolOther.getRgvPos())){
@@ -1588,16 +1884,186 @@
             return null;
         }
         // 鍒ゆ柇鏄惁婊¤冻鍙栬揣鏉′欢
+        if (!staProtocol.isPakMkTask()) {
+            devpThread.setErrorDev(staProtocol.getSiteId(), "浠诲姟宸蹭笅鍙戠瓑寰呭皬杞﹀彇");
+            return null;
+        }
+        // 鍒ゆ柇鏄惁婊¤冻鍙栬揣鏉′欢
         if (staProtocol.isAutoing()
 //                && staProtocol.isLoading()
 //                && staProtocol.isStaOk()
                 && staProtocol.getWorkNo() != 0) {
             TaskWrk taskWrk = taskWrkService.selectByWrkNo(staProtocol.getWorkNo());
             if (taskWrk != null) {
+                Integer stano = staProtocol.getStaNo();
+                if (staProtocol.getSiteId() == 1004 || staProtocol.getSiteId()==1020){
+                    if (!staProtocol.isPakMkRun()) {
+                        devpThread.setErrorDev(staProtocol.getSiteId(), "寮傚父鍥為��鏍囪锛岄渶瑕佸洖閫�");
+                        return null;
+                    }
+                    if (!staProtocol.isLoading()) {
+                        devpThread.setErrorDev(staProtocol.getSiteId(), "鏃犵墿");
+                        return null;
+                    }
+                    if (!staProtocol.isInEnable()) {
+                        devpThread.setErrorDev(staProtocol.getSiteId(), "绛夊緟鍙叆淇″彿");
+                        return null;
+                    }
+                    if (!staProtocol.isStaOk()) {
+                        devpThread.setErrorDev(staProtocol.getSiteId(), "绛夊緟閾炬潯灏辩华");
+                        return null;
+                    }
+                    // 灏哄妫�娴嬪紓甯�
+                    boolean back = false;
+                    String errMsg = "-";
+                    if (staProtocol.getGrossWt()>=600){
+                        errMsg = "瓒呴噸锛�"+staProtocol.getGrossWt()+"kg";
+                        back = true;
+                    }
+                    if (staProtocol.isFrontErr()) {
+                        if (!back){
+                            errMsg = "鍓嶈秴闄�";
+                        } else {
+                            errMsg = errMsg+"---"+"鍓嶈秴闄�";
+                        }
+                        back = true;
+                    }
+                    if (staProtocol.isBackErr()) {
+                        if (!back){
+                            errMsg = "鍚庤秴闄�";
+                        } else {
+                            errMsg = errMsg+"---"+"鍚庤秴闄�";
+                        }
+                        back = true;
+                    }
+                    if (staProtocol.isHighErr()) {
+                        if (!back){
+                            errMsg = "楂樿秴闄�";
+                        } else {
+                            errMsg = errMsg+"---"+"楂樿秴闄�";
+                        }
+                        back = true;
+                    }
+                    if (staProtocol.isLeftErr()) {
+                        if (!back){
+                            errMsg = "宸﹁秴闄�";
+                        } else {
+                            errMsg = errMsg+"---"+"宸﹁秴闄�";
+                        }
+                        back = true;
+                    }
+                    if (staProtocol.isRightErr()) {
+                        if (!back){
+                            errMsg = "鍙宠秴闄�";
+                        } else {
+                            errMsg = errMsg+"---"+"鍙宠秴闄�";
+                        }
+                        back = true;
+                    }
+//                    if (!back && staProtocol.isWeightErr()) {
+//                        errMsg = "瓒呴噸";
+//                        back = true;
+//                    }
+                    if (staProtocol.isBarcodeErr()) {
+                        if (!back){
+                            errMsg = "鎵爜澶辫触";
+                        } else {
+                            errMsg = errMsg+"---"+"鎵爜澶辫触";
+                        }
+                        back = true;
+                    }
+                    // 閫�鍥�
+                    if (back) {
+                        if (stano.equals(staProtocol.getStaNo() + 1)) {
+                            return null;
+                        }
+                        if (!staProtocol.isPakMk()) {
+                            return null;
+                        }
+                        System.out.println("鎵爜鍏ュ簱澶辫触锛寋"+inSta.getStaNo()+"}鍏ュ簱绔欏洜{"+errMsg+"}寮傚父锛屾墭鐩樺凡琚��鍥�");
+//                        News.warn("鎵爜鍏ュ簱澶辫触锛寋}鍏ュ簱绔欏洜{}寮傚父锛屾墭鐩樺凡琚��鍥�", inSta.getStaNo(), errMsg);
+                        staProtocol.setWorkNo(9999);
+                        staProtocol.setStaNo(staProtocol.getStaNo()+1);
+                        devpThread.setPakMk(staProtocol.getSiteId(), false);
+                        devpThread.setPakMkRun(staProtocol.getSiteId(), false);
+                        devpThread.setPakMkTask(staProtocol.getSiteId(), false);
+                        devpThread.setErrorDev(staProtocol.getSiteId(), errMsg);
+                        MessageQueue.offer(SlaveType.Devp, 1, new Task(2, staProtocol));
+                        try{
+                            taskWrk.setMemo(errMsg);//灏嗛敊璇爜瀛樺叆澶囨敞瀛楁杩涜灞曠ず
+                            taskWrk.setModiTime(new Date());
+                            taskWrkMapper.updateById(taskWrk);
+                        } catch (Exception e){
+                            devpThread.setErrorDev(staProtocol.getSiteId(), errMsg+"寮傚父淇℃伅淇濆瓨宸ヤ綔妗f澶辫触锛�");
+                        }
+                        return null;
+                    }
+                }
                 return taskWrk;
+            }
+        } else if (staProtocol.isAutoing() && staProtocol.getWorkNo() == 0 && !staProtocol.isLoading()){
+            if (inSta.isDirectionOther()){
+                StaProtocol staProtocolOther = devpThread.getStation().get(inSta.getStaNoOther());
+                if (staProtocolOther == null) {
+                    return null;
+                }
+                // 鍒ゆ柇鏄惁婊¤冻鍙栬揣鏉′欢
+                if (staProtocolOther.isAutoing()
+                        && staProtocolOther.getWorkNo() != 0) {
+                    TaskWrk taskWrkOther = taskWrkService.selectByWrkNo(staProtocolOther.getWorkNo());
+                    if (taskWrkOther != null) {
+                        return taskWrkOther;
+                    }
+                }
             }
         }
         return null;
+    }
+    public boolean deviceDetection(RgvSlave.RgvStn inSta,Integer rgvNo) {
+        ArrayList<Integer> arrayList = new ArrayList<Integer>() {{
+            add(1009);
+            add(1011);
+            add(1012);
+            add(1014);
+            add(1016);
+        }};
+        try{
+
+            DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, inSta.getDevpPlcId());
+            ArrayList<Integer> listW = new ArrayList<Integer>();
+            ArrayList<Integer> listL = new ArrayList<Integer>();
+            for (Integer staNo : arrayList){
+                StaProtocol staProtocol = devpThread.getStation().get(staNo);
+                if (staProtocol == null) {
+                    RgvErrCache.updateRgvErr(rgvNo,staNo+"绔欑偣鏁版嵁涓㈠け");
+                    return false;
+                }
+                // 鍒ゆ柇鏄惁婊¤冻鍙栬揣鏉′欢
+                if (staProtocol.getWorkNo() != 0) {
+                    if (!listW.contains(staProtocol.getWorkNo())) {
+                        listW.add(staProtocol.getWorkNo());
+                    }
+                }
+                // 鍒ゆ柇鏄惁婊¤冻鍙栬揣鏉′欢
+                if (staProtocol.isLoading()) {
+                    if (!listL.contains(staProtocol.getStaNo())) {
+                        listL.add(staProtocol.getStaNo());
+                    }
+                }
+            }
+            if (listW.size()>=3){
+                RgvErrCache.updateRgvErr(rgvNo,"绛夊緟1012鎷i�夛紝闃叉鍫靛");
+                return false;
+            }
+            if (listL.size()>=3){
+                RgvErrCache.updateRgvErr(rgvNo,"绛夊緟1012鎷i�夛紝闃叉鍫靛");
+                return false;
+            }
+        } catch (Exception e){
+            RgvErrCache.updateRgvErr(rgvNo,"1012妫�娴嬪紓甯革細"+e.getMessage());
+            return false;
+        }
+        return true;
     }
 
     public boolean rgvOtherStatusEnable(RgvSlave slave) {
@@ -1622,6 +2088,11 @@
                     boolean itSmall = new TrackRangeUtils().IsItSmall(rgvSlave);
                     if (basDevpPositions.isEmpty()) {
                         log.error("鑾峰彇鎵�鏈夌珯鐐逛俊鎭紓甯�");
+                        try{
+                            DeviceErrorService deviceErrorService = SpringUtils.getBean(DeviceErrorService.class);
+                            deviceErrorService.addDeviceError("rgvErr", rgvSlave.getId(), "鎸囦护鐢熸垚锛氳幏鍙栨墍鏈夌珯鐐逛俊鎭紓甯�");
+                        } catch (Exception e2){
+                        }
                         continue;
                     }
                     List<TaskWrk> taskWrkList = new ArrayList<>();
@@ -1660,6 +2131,9 @@
                         if (!sign && staList.size()==1){
                             if (rgvOtherIDLEOther(rgvSlave)){
                                 if (!rgvOtherIDLE(rgvSlave,staList.get(0))){
+                                    System.out.println("绌洪棽灏辫繎璺宠繃==="+rgvSlave.getId()+"===");
+                                    RgvErrCache.updateRgvErr(rgvSlave.getId(),staList.get(0)+"绌洪棽灏辫繎璺宠繃");
+
                                     sign=true;
                                 }
                             }
@@ -1671,6 +2145,8 @@
                                             Integer outStaNo = BarcodeUtils.getOutStaNo(taskWrk.getOriginTargetPoint());
                                             for (RgvSlave.RgvStn rgvSuper : rgvSlave.getRgvSuperSta()){
                                                 if (rgvSuper.getStaNo().equals(outStaNo)){
+                                                    System.out.println("绌洪棽灏辫繎璺宠繃鍚庡洜鏈�杩滃啀娆℃墽琛�==="+rgvSlave.getId()+"===");
+
                                                     sign=false;
                                                     break;
                                                 }
@@ -1692,6 +2168,9 @@
                                         if (taskWrk != null) {
                                             BasDevpPosition basDevpPosition = basDevpPositionService.selectOne(new EntityWrapper<BasDevpPosition>().eq("DEV_NO", BarcodeUtils.getOutStaNo(taskWrk.getOriginTargetPoint())));
                                             if (RouteUtils.CheckIfItIsWithinTheRange(rangeList, basDevpPosition.getPlcPosition(), basDevpPositions, itSmall)) {
+                                                System.out.println("鍏ㄨ寖鍥存墽琛�==="+rgvSlave.getId()+"==="+taskWrk);
+                                                System.out.println("鍏ㄨ寖鍥存墽琛�==="+rgvSlave.getId()+"==="+JSON.toJSONString(belongToRange));
+
                                                 sign = taskGenerate(rgvSlave, rgvStn, 0);
                                             }
                                         }
@@ -1713,6 +2192,9 @@
                                             Integer outStaNo = BarcodeUtils.getOutStaNo(taskWrk.getOriginTargetPoint());
                                             for (RgvSlave.RgvStn rgvStnOut : rgvSlave.getRgvOutSta()) {
                                                 if (rgvStnOut.getStaNo().equals(outStaNo)) {
+                                                    System.out.println("绛涢�夎寖鍥村唴鍙栬揣浠诲姟==="+rgvSlave.getId()+"==="+taskWrk);
+                                                    System.out.println("绛涢�夎寖鍥村唴鍙栬揣浠诲姟==="+rgvSlave.getId()+"==="+JSON.toJSONString(belongToRange));
+
                                                     sign = taskGenerate(rgvSlave, rgvStn, 0);
                                                     break;
                                                 }
@@ -1730,12 +2212,38 @@
                         if (!sign && staList.size()==1){
                             if (rgvOtherIDLEOther2(rgvSlave)){
                                 if (!rgvOtherIDLE2(rgvSlave,staList.get(0))){
+                                    System.out.println("杩愯灏辫繎璺宠繃==="+rgvSlave.getId()+"===");
+                                    RgvErrCache.updateRgvErr(rgvSlave.getId(),staList.get(0)+"杩愯灏辫繎璺宠繃");
+
                                     sign=true;
+                                }
+                            }
+                            if (sign){
+                                for (RgvSlave.RgvStn rgvStn : rgvSlave.getRgvInSta()) {
+                                    if (rgvStn.getStaNo().equals(staList.get(0))) {
+                                        TaskWrk taskWrk = deviceDetection(rgvStn);
+                                        if (taskWrk != null) {
+                                            Integer outStaNo = BarcodeUtils.getOutStaNo(taskWrk.getOriginTargetPoint());
+                                            for (RgvSlave.RgvStn rgvSuper : rgvSlave.getRgvSuperSta()){
+                                                if (rgvSuper.getStaNo().equals(outStaNo)){
+                                                    System.out.println("杩愯灏辫繎璺宠繃鍚庡洜鏈�杩滃啀娆℃墽琛�==="+rgvSlave.getId()+"===");
+
+                                                    sign=false;
+                                                    break;
+                                                }
+                                            }
+                                        } else {
+                                            return;
+                                        }
+                                        break;
+                                    }
                                 }
                             }
                         }
 
-                        if (!sign) {
+
+
+                        if (!sign && staList.size()>1) {
                             for (Integer staNoNow : rangeList) {
                                 for (RgvSlave.RgvStn rgvStn : rgvSlave.getRgvInSta()) {
                                     if (rgvStn.getStaNo().equals(staNoNow)) {
@@ -1743,6 +2251,9 @@
                                         if (taskWrk != null) {
                                             BasDevpPosition basDevpPosition = basDevpPositionService.selectOne(new EntityWrapper<BasDevpPosition>().eq("DEV_NO", BarcodeUtils.getOutStaNo(taskWrk.getOriginTargetPoint())));
                                             if (RouteUtils.CheckIfItIsWithinTheRange(rangeList, basDevpPosition.getPlcPosition(), basDevpPositions, itSmall)) {
+                                                System.out.println("绛涢�夊崐杈硅寖鍥村唴浠诲姟==="+rgvSlave.getId()+"==="+taskWrk);
+                                                System.out.println("绛涢�夊崐杈硅寖鍥村唴浠诲姟==="+rgvSlave.getId()+"==="+JSON.toJSONString(belongToRange));
+
                                                 sign = taskGenerate(rgvSlave, rgvStn, 0);
                                             }
                                         }
@@ -1753,7 +2264,34 @@
                                     break;
                                 }
                             }
+                        }else if (!sign && staList.size()==1){
+                            BasDevpPosition basDevpPosition1 = basDevpPositionService.selectOne(new EntityWrapper<BasDevpPosition>().eq("DEV_NO", staList.get(0)));
+                            if (Math.abs(basDevpPosition1.getPlcPosition()- rgvProtocol.getRgvPos())<rgvProtocol.getCarBodyJiaoMing()+rgvProtocol.getCarBodyKunPeng() + avoidDistance*2){
+                                for (Integer staNoNow : rangeList) {
+                                    for (RgvSlave.RgvStn rgvStn : rgvSlave.getRgvInSta()) {
+                                        if (rgvStn.getStaNo().equals(staNoNow)) {
+                                            TaskWrk taskWrk = deviceDetection(rgvStn);
+                                            if (taskWrk != null) {
+                                                BasDevpPosition basDevpPosition = basDevpPositionService.selectOne(new EntityWrapper<BasDevpPosition>().eq("DEV_NO", BarcodeUtils.getOutStaNo(taskWrk.getOriginTargetPoint())));
+                                                if (RouteUtils.CheckIfItIsWithinTheRange(rangeList, basDevpPosition.getPlcPosition(), basDevpPositions, itSmall)) {
+                                                    System.out.println("绛涢�夊崐杈硅寖鍥村唴浠诲姟==="+rgvSlave.getId()+"==="+taskWrk);
+                                                    System.out.println("绛涢�夊崐杈硅寖鍥村唴浠诲姟==="+rgvSlave.getId()+"==="+JSON.toJSONString(belongToRange));
+
+                                                    sign = taskGenerate(rgvSlave, rgvStn, 0);
+                                                }
+                                            }
+                                            break;
+                                        }
+                                    }
+                                    if (sign) {
+                                        break;
+                                    }
+                                }
+                            }
                         }
+
+
+
                         if (!sign && staList.size()>1) {
                             //  鍗婅竟鍖哄煙鍐呭彇璐т换鍔�
                             for (Integer staNoNow : rangeList) {
@@ -1764,6 +2302,9 @@
                                             Integer outStaNo = BarcodeUtils.getOutStaNo(taskWrk.getOriginTargetPoint());
                                             for (RgvSlave.RgvStn rgvStnOut : rgvSlave.getRgvOutSta()) {
                                                 if (rgvStnOut.getStaNo().equals(outStaNo)) {
+                                                    System.out.println("绛涢�夊崐杈硅寖鍥村彇璐т换鍔�==="+rgvSlave.getId()+"==="+taskWrk);
+                                                    System.out.println("绛涢�夊崐杈硅寖鍥村彇璐т换鍔�==="+rgvSlave.getId()+"==="+JSON.toJSONString(belongToRange));
+
                                                     sign = taskGenerate(rgvSlave, rgvStn, 0);
                                                     break;
                                                 }
@@ -1777,26 +2318,67 @@
                                 }
                             }
                         }
-//                        if (!sign) {
-//                            //  鍗婅竟鍖哄煙鍐呮斁璐т换鍔�
-//                            for (Integer staNoNow : rangeListOther) {
-//                                for (RgvSlave.RgvStn rgvStn : rgvSlave.getRgvInSta()) {
-//                                    if (rgvStn.getStaNo().equals(staNoNow)) {
-//                                        TaskWrk taskWrk = deviceDetection(rgvStn);
-//                                        if (taskWrk != null) {
-//                                            BasDevpPosition basDevpPosition = basDevpPositionService.selectOne(new EntityWrapper<BasDevpPosition>().eq("DEV_NO", BarcodeUtils.getOutStaNo(taskWrk.getOriginTargetPoint())));
-//                                            if (RouteUtils.CheckIfItIsWithinTheRange(rangeList, basDevpPosition.getPlcPosition(), basDevpPositions, itSmall)) {
-//                                                sign = taskGenerate(rgvSlave, rgvStn, 0);
-//                                            }
-//                                        }
-//                                        break;
-//                                    }
-//                                }
-//                                if (sign) {
-//                                    break;
-//                                }
-//                            }
-//                        }
+                        if (!sign && staList.size()>1) {
+                            for (Integer staNoNow : rangeListOther) {
+                                for (RgvSlave.RgvStn rgvStn : rgvSlave.getRgvInSta()) {
+                                    if (rgvStn.getStaNo().equals(staNoNow)) {
+                                        TaskWrk taskWrk = deviceDetection(rgvStn);
+                                        if (taskWrk != null) {
+                                            Integer outStaNo = BarcodeUtils.getOutStaNo(taskWrk.getOriginTargetPoint());
+                                            for (RgvSlave.RgvStn rgvSuper : rgvSlave.getRgvSuperSta()){
+                                                if (rgvSuper.getStaNo().equals(outStaNo)){
+                                                    System.out.println("鍥犳渶杩滄墽琛屽崐杈瑰尯鍩熷唴鏀捐揣浠诲姟==="+rgvSlave.getId()+"===");
+                                                    BasDevpPosition basDevpPosition = basDevpPositionService.selectOne(new EntityWrapper<BasDevpPosition>().eq("DEV_NO", BarcodeUtils.getOutStaNo(taskWrk.getOriginTargetPoint())));
+                                                    if (RouteUtils.CheckIfItIsWithinTheRange(rangeList, basDevpPosition.getPlcPosition(), basDevpPositions, itSmall)) {
+                                                        sign = taskGenerate(rgvSlave, rgvStn, 0);
+                                                    }
+                                                    break;
+                                                }
+                                            }
+                                        }
+                                        break;
+                                    }
+                                    if (sign) {
+                                        break;
+                                    }
+                                }
+                                if (sign) {
+                                    break;
+                                }
+                            }
+
+                        }else if (!sign && staList.size()==1){
+                            for (Integer staNoNow : rangeList) {
+                                for (RgvSlave.RgvStn rgvStn : rgvSlave.getRgvInSta()) {
+                                    if (rgvStn.getStaNo().equals(staNoNow)) {
+                                        TaskWrk taskWrk = deviceDetection(rgvStn);
+                                        if (taskWrk != null) {
+                                            Integer outStaNo = BarcodeUtils.getOutStaNo(taskWrk.getOriginTargetPoint());
+                                            for (RgvSlave.RgvStn rgvSuper : rgvSlave.getRgvSuperSta()){
+                                                if (rgvSuper.getStaNo().equals(outStaNo)){
+                                                    System.out.println("鍥犳渶杩滄墽琛屽崐杈瑰尯鍩熷唴鏀捐揣浠诲姟==="+rgvSlave.getId()+"===");
+                                                    BasDevpPosition basDevpPosition = basDevpPositionService.selectOne(new EntityWrapper<BasDevpPosition>().eq("DEV_NO", BarcodeUtils.getOutStaNo(taskWrk.getOriginTargetPoint())));
+                                                    if (RouteUtils.CheckIfItIsWithinTheRange(rangeList, basDevpPosition.getPlcPosition(), basDevpPositions, itSmall)) {
+                                                        sign = taskGenerate(rgvSlave, rgvStn, 0);
+                                                    }
+                                                    break;
+                                                }
+                                            }
+                                        }
+                                        break;
+                                    }
+                                    if (sign) {
+                                        break;
+                                    }
+                                }
+                                if (sign) {
+                                    break;
+                                }
+                            }
+
+                        }
+                        RgvErrCache.updateRgvErr(rgvSlave.getId(),"鏈煡璇㈠埌鍙墽琛屼换鍔�");
+
                     } else {
                         //鍙敤鍖哄煙灏辫繎鍙栬揣
                         //灏辫繎鎺掑簭
@@ -1827,6 +2409,11 @@
                 }
             } catch (Exception e) {
                 log.error("浠诲姟鐢熸垚澶辫触===銆嬪紓甯镐俊鎭細{}", e.getMessage());
+                try{
+                    DeviceErrorService deviceErrorService = SpringUtils.getBean(DeviceErrorService.class);
+                    deviceErrorService.addDeviceError("rgvErr", rgvSlave.getId(), "鎸囦护鐢熸垚澶辫触");
+                } catch (Exception e2){
+                }
             }
         }
     }
@@ -1866,6 +2453,7 @@
         try {
             RgvThread rgvThread = (RgvThread) SlaveConnection.get(SlaveType.Rgv, rgvSlave.getId());
             TaskProtocolCache taskProtocolCache = rgvThread.getTaskProtocolCache();
+            DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, rgvStn.getDevpPlcId());
 
             TaskProtocol issuedTake = new TaskProtocol();
             TaskProtocol issuedPut = new TaskProtocol();
@@ -1883,6 +2471,17 @@
                 if (targetPointConvert == null) {
                     return false;
                 }
+                if (targetPointConvert == 1009){
+                    if (!deviceDetection(rgvStn, rgvSlave.getId())){
+                        return false;
+                    }
+                }
+                try{
+                    devpThread.setPakMkTask(rgvStn.getStaNo(), false);
+                } catch (Exception e2){
+                    RgvErrCache.updateRgvErr(rgvSlave.getId(),rgvStn.getStaNo()+"灏忚溅浠诲姟涓嬪彂鏍囪鏇存柊澶辫触");
+                }
+
 
                 BasDevpPosition basDevpPositionSou = basDevpPositionService.selectOne(new EntityWrapper<BasDevpPosition>().eq("DEV_NO", rgvStn.getStaNo()));
                 BasDevpPosition basDevpPositionEnd = basDevpPositionService.selectOne(new EntityWrapper<BasDevpPosition>().eq("DEV_NO", targetPointConvert));
@@ -1919,6 +2518,13 @@
                 }
             } catch (Exception e) {
                 log.error("浠诲姟鐢熸垚澶辫触issued1===銆嬪紓甯镐俊鎭細{}", e.getMessage());
+                RgvErrCache.updateRgvErr(rgvSlave.getId(),rgvStn.getStaNo()+"绔欑偣浠诲姟鐢熸垚澶辫触issued1");
+
+                try{
+                    DeviceErrorService deviceErrorService = SpringUtils.getBean(DeviceErrorService.class);
+                    deviceErrorService.addDeviceError("rgvErr", rgvSlave.getId(), "浠诲姟鐢熸垚澶辫触issued1");
+                } catch (Exception e2){
+                }
                 return false;
             }
 
@@ -1936,6 +2542,13 @@
             }
         } catch (Exception e) {
             log.error("浠诲姟鐢熸垚澶辫触issued2===銆嬪紓甯镐俊鎭細{}", e.getMessage());
+            RgvErrCache.updateRgvErr(rgvSlave.getId(),rgvStn.getStaNo()+"绔欑偣浠诲姟鐢熸垚澶辫触issued2");
+
+            try{
+                DeviceErrorService deviceErrorService = SpringUtils.getBean(DeviceErrorService.class);
+                deviceErrorService.addDeviceError("rgvErr", rgvSlave.getId(), "绔欑偣浠诲姟鐢熸垚澶辫触issued2");
+            } catch (Exception e2){
+            }
         }
         return true;
     }
@@ -1951,7 +2564,7 @@
             // 鍛戒护闆嗗悎
             List<LedCommand> commands = new ArrayList<>();
             // 宸ヤ綔妗i泦鍚�
-            List<WrkMast> wrkMasts = new ArrayList<>();
+            List<TaskWrk> taskWrks = new ArrayList<>();
             for (Integer staNo : led.getStaArr()) {
                 // 鑾峰彇鍙夎溅绔欑偣
                 StaProtocol staProtocol = devpThread.getStation().get(staNo);
@@ -1975,7 +2588,7 @@
                 ledCommand.getMatDtos().add(matDto);
                 commands.add(ledCommand);
             }
-            Set<Integer> workNos = wrkMasts.stream().map(WrkMast::getWrkNo).collect(Collectors.toSet());
+            Set<Integer> workNos = taskWrks.stream().map(TaskWrk::getWrkNo).collect(Collectors.toSet());
             // 鑾峰彇LED绾跨▼
             LedThread ledThread = (LedThread) SlaveConnection.get(SlaveType.Led, led.getId());
             // 鐩稿悓宸ヤ綔鍙烽泦鍚堝垯杩囨护
@@ -1994,10 +2607,10 @@
 
             try {
                 // 淇敼涓绘。led鏍囪
-                for (WrkMast wrkMast : wrkMasts) {
-                    wrkMast.setOveMk("Y");
-                    wrkMast.setModiTime(new Date());
-                    if (wrkMastMapper.updateById(wrkMast) == 0) {
+                for (TaskWrk taskWrk : taskWrks) {
+//                    taskWrk.setOveMk("Y");
+                    taskWrk.setModiTime(new Date());
+                    if (taskWrkMapper.updateById(taskWrk) == 0) {
 //                        News.errorNoLog(""+mark+" - 4"+" - 鏇存柊宸ヤ綔妗eけ璐�");
                         throw new CoolException("鏇存柊宸ヤ綔妗eけ璐�");
                     }

--
Gitblit v1.9.1