From a4fdbb852841fcc9bcc78676e4551efcff384494 Mon Sep 17 00:00:00 2001
From: LSH <1>
Date: 星期六, 08 六月 2024 11:17:43 +0800
Subject: [PATCH] #

---
 src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java | 1678 ++++++++++++++++++++++++++++++++++++++++++++++++++++++-----
 1 files changed, 1,527 insertions(+), 151 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 cc1bbba..64ccc7f 100644
--- a/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
@@ -10,6 +10,7 @@
 import com.zy.asrs.entity.*;
 import com.zy.asrs.mapper.*;
 import com.zy.asrs.service.*;
+import com.zy.asrs.utils.CodeDetectionUtil;
 import com.zy.asrs.utils.RouteUtils;
 import com.zy.asrs.utils.Utils;
 import com.zy.asrs.utils.VersionUtils;
@@ -103,9 +104,13 @@
     private RgvOneSignMapper rgvOneSignMapper;
     @Autowired
     private WrkMastCrnMapper wrkMastCrnMapper;
+    @Autowired
+    private WrkMastSplitTwinMapper wrkMastSplitTwinMapper;
 
     @Value("${wms.url}")
     private String wmsUrl;
+    @Autowired
+    private WrkMastSplitTwinService wrkMastSplitTwinService;
 
     /**
      * 缁勬墭
@@ -125,7 +130,7 @@
 
                 if (!Cools.isEmpty(barcode)) {
 //                    log.info("{}鍙锋潯鐮佹壂鎻忓櫒妫�娴嬫潯鐮佷俊鎭細{}", inSta.getBarcode(), barcode);
-                    if ("NG".endsWith(barcode) || "NoRead".equals(barcode)) {
+                    if ("NG".endsWith(barcode) || "NoRead".equals(barcode) || !CodeDetectionUtil.barcodeDetection(barcode)) {
                         continue;
                     }
                 } else {
@@ -294,7 +299,7 @@
 
                 if (!Cools.isEmpty(barcode)) {
 //                    log.info("{}鍙锋潯鐮佹壂鎻忓櫒妫�娴嬫潯鐮佷俊鎭細{}", inSta.getBarcode(), barcode);
-                    if ("NG".endsWith(barcode) || "NoRead".equals(barcode)) {
+                    if ("NG".endsWith(barcode) || "NoRead".equals(barcode) || !CodeDetectionUtil.barcodeDetection(barcode)) {
                         continue;
                     }
                 } else {
@@ -366,8 +371,8 @@
                         && staProtocol.getWorkNo() == 0
                         && staProtocol.isPakMk()) {// && !Cools.isEmpty(barcode)) {
 
-//                    if(Cools.isEmpty(barcode) || "NG".endsWith(barcode) || "NoRead".equals(barcode)) {
-//                        log.info("{}鍙锋潯鐮佹壂鎻忓櫒妫�娴嬫潯鐮佷俊鎭細{}", inSta.getBarcode(), barcode);
+                    if(Cools.isEmpty(barcode) || "NG".endsWith(barcode) || !CodeDetectionUtil.barcodeDetection(barcode)) {
+                        log.info("{}鍙锋潯鐮佹壂鎻忓櫒妫�娴嬫潯鐮佷俊鎭細{}", inSta.getBarcode(), barcode);
 //                        //鏉$爜涓虹┖鎴栬�呬笉绗﹀悎锛岄��搴撳埌172绔欑偣
 //                        staProtocol.setWorkNo((short)32222);
 //                        staProtocol.setStaNo((short)172);
@@ -376,8 +381,8 @@
 //                        if (!result) {
 //                            throw new CoolException("鏇存柊plc绔欑偣淇℃伅澶辫触");
 //                        }
-//                        continue;
-//                    }
+                        continue;
+                    }
 
                     // 鍒ゆ柇閲嶅宸ヤ綔妗�
                     WrkMast wrkMast = wrkMastMapper.selectPakInStep1(inSta.getStaNo(), barcode);
@@ -443,6 +448,174 @@
             }
         }
 
+    }
+
+    /**
+     * 缁勬墭
+     * 鍏ュ簱绔欙紝鏍规嵁鏉$爜鎵弿鐢熸垚鍏ュ簱宸ヤ綔妗o紝宸ヤ綔鐘舵�� 2
+     */
+    public synchronized void generateStoreWrkFileLarge() {
+        // 鏍规嵁杈撻�佺嚎plc閬嶅巻
+        for (DevpSlave devp : slaveProperties.getDevp()) {
+            // 閬嶅巻鍏ュ簱鍙�
+            for (DevpSlave.Sta inSta : devp.getInLargeSta()) {
+                // 鑾峰彇鏉$爜鎵弿浠俊鎭�
+                BarcodeThread barcodeThread = (BarcodeThread) SlaveConnection.get(SlaveType.Barcode, inSta.getBarcode());
+                if (barcodeThread == null) {
+                    continue;
+                }
+                String barcode = barcodeThread.getBarcode();
+
+                if (!Cools.isEmpty(barcode)) {
+//                    log.info("{}鍙锋潯鐮佹壂鎻忓櫒妫�娴嬫潯鐮佷俊鎭細{}", inSta.getBarcode(), barcode);
+                    if ("NG".endsWith(barcode) || "NoRead".equals(barcode) || !CodeDetectionUtil.barcodeDetection(barcode)) {
+                        continue;
+                    }
+                } else {
+                    continue;
+                }
+
+                // 鑾峰彇鍏ュ簱绔欎俊鎭�
+//                SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, devp.getId());
+                SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, devp.getId());
+                StaProtocol staProtocol = devpThread.getStation().get(inSta.getStaNo());
+                if (staProtocol == null) {
+                    continue;
+                } else {
+                    staProtocol = staProtocol.clone();
+                }
+
+                // 灏哄妫�娴嬪紓甯�
+                boolean back = false;
+                String errMsg = "寮傚父锛�";
+                if (staProtocol.isFrontErr()) {
+                    errMsg = errMsg+"鍓嶈秴闄愶紱";
+                    back = true;
+                }
+                if (staProtocol.isBackErr()) {
+                    errMsg = errMsg+"鍚庤秴闄�";
+                    back = true;
+                }
+                if (staProtocol.isHighErr()) {
+                    errMsg = errMsg+"楂樿秴闄�";
+                    back = true;
+                }
+                if (staProtocol.isLeftErr()) {
+                    errMsg = errMsg+"宸﹁秴闄�";
+                    back = true;
+                }
+                if (staProtocol.isRightErr()) {
+                    errMsg = errMsg+"鍙宠秴闄�";
+                    back = true;
+                }
+                if (staProtocol.isWeightErr()) {
+                    errMsg = errMsg+"瓒呴噸";
+                    back = true;
+                }
+                if (staProtocol.isBarcodeErr()) {
+                    errMsg = errMsg+"鎵爜澶辫触";
+                    back = true;
+                }
+                // 閫�鍥�
+                if (back) {
+                    // led 寮傚父鏄剧ず
+                    LedThread ledThread = (LedThread) SlaveConnection.get(SlaveType.Led, inSta.getLed());
+                    if (ledThread != null) {
+                        MessageQueue.offer(SlaveType.Led, inSta.getLed(), new Task(5, errMsg));
+                    }
+                    continue;
+                }
+
+                // 鍏ュ嚭搴撴ā寮忓垽鏂�
+//                if ( inSta.getStaNo()==203 && devpThread.ioModeOf2F != IoModeType.PAKIN_MODE) { continue; }
+//                if (inSta.getStaNo() == 203 && devpThread.ioModeOf2F == IoModeType.PAKOUT_MODE) {
+//                    continue;
+//                }
+
+                // 鍒ゆ柇鏄惁婊¤冻鍏ュ簱鏉′欢
+                if (staProtocol.isAutoing()
+                        && staProtocol.isLoading()
+                        && staProtocol.isInEnable()
+                        && !staProtocol.isEmptyMk()
+                        && staProtocol.getWorkNo() == 0
+                        && staProtocol.isPakMk()) {// && !Cools.isEmpty(barcode)) {
+
+                    if(Cools.isEmpty(barcode) || "NG".endsWith(barcode) || !CodeDetectionUtil.barcodeDetection(barcode)) {
+                        log.info("{}鍙锋潯鐮佹壂鎻忓櫒妫�娴嬫潯鐮佷俊鎭細{}", inSta.getBarcode(), barcode);
+//                        //鏉$爜涓虹┖鎴栬�呬笉绗﹀悎锛岄��搴撳埌172绔欑偣
+//                        staProtocol.setWorkNo((short)32222);
+//                        staProtocol.setStaNo((short)172);
+//                        devpThread.setPakMk(staProtocol.getSiteId(), false);
+//                        boolean result = MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol));
+//                        if (!result) {
+//                            throw new CoolException("鏇存柊plc绔欑偣淇℃伅澶辫触");
+//                        }
+                        continue;
+                    }
+
+                    // 鍒ゆ柇閲嶅宸ヤ綔妗�
+                    WrkMast wrkMast = wrkMastMapper.selectPakInStep1(inSta.getStaNo(), barcode);
+                    if (wrkMast != null) {
+                        log.error("宸ヤ綔妗d腑宸插瓨鍦ㄨ绔欑姸鎬佷负锛� 2.璁惧涓婅蛋 锛夌殑鏁版嵁,宸ヤ綔鍙�={}", wrkMast.getWrkNo());
+                        continue;
+                    }
+//                    // 鑾峰彇鍏ュ簱閫氱煡妗�
+//                    List<WaitPakin> waitPakins = waitPakinMapper.selectList(new EntityWrapper<WaitPakin>().eq("zpallet", barcode).eq("io_status", "N"));
+//                    if (waitPakins.isEmpty()) {
+//                        log.error("鏃犳鍏ュ簱鏉$爜鏁版嵁銆傛潯鐮佸彿={}", barcode);
+//                        continue;
+//                    }
+
+                    try {
+
+                        LocTypeDto locTypeDto = new LocTypeDto(staProtocol);
+
+                        SearchLocParam param = new SearchLocParam();
+                        param.setBarcode(barcode);
+                        param.setIoType(1);
+                        param.setSourceStaNo(inSta.getStaNo());
+                        param.setLocType1(locTypeDto.getLocType1());
+                        String response = new HttpHandler.Builder()
+                                .setUri(wmsUrl)
+                                .setPath("/rpc/pakin/loc/v1")
+                                .setJson(JSON.toJSONString(param))
+                                .build()
+                                .doPost();
+                        JSONObject jsonObject = JSON.parseObject(response);
+                        if (jsonObject.getInteger("code").equals(200)) {
+                            StartupDto dto = jsonObject.getObject("data", StartupDto.class);
+
+                            barcodeThread.setBarcode("");
+                            staProtocol.setWorkNo(dto.getWorkNo());
+
+                            if(Cools.isEmpty(dto.getRgvNo()) || dto.getRgvNo() <= 0) {
+                                staProtocol.setStaNo(dto.getStaNo());
+                            } else {//濡傛灉瀛樺湪RGV缂栧彿锛岃鏄庨渶瑕丷GV鎺ラ┏锛屽厛涓嬪彂浠诲姟鍒癛GV婧愮珯
+                                staProtocol.setStaNo(dto.getRgvSstaNo());
+                            }
+
+                            devpThread.setPakMk(staProtocol.getSiteId(), false);
+                            boolean result = MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol));
+                            if (!result) {
+                                throw new CoolException("鏇存柊plc绔欑偣淇℃伅澶辫触");
+                            }
+                        } else {
+                            log.error("璇锋眰鎺ュ彛澶辫触锛侊紒锛乽rl锛歿}锛況equest锛歿}锛況esponse锛歿}", wmsUrl + "/rpc/pakin/loc/v1", JSON.toJSONString(param), response);
+
+                            LedThread ledThread = (LedThread) SlaveConnection.get(SlaveType.Led, inSta.getLed());
+
+                            if (ledThread != null) {
+                                MessageQueue.offer(SlaveType.Led, inSta.getLed(), new Task(5, "鍏ュ簱澶辫触锛�"));
+                            }
+                        }
+
+                    } catch (Exception e) {
+                        e.printStackTrace();
+                        TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
+                    }
+                }
+            }
+        }
     }
 
     /**
@@ -1060,136 +1233,339 @@
         for (CrnSlave crnSlave : slaveProperties.getCrn()) {
             // 閬嶅巻鍫嗗灈鏈哄嚭搴撶珯
             for (CrnSlave.CrnStn crnStn : crnSlave.getCrnOutStn()) {
-                // 鑾峰彇鍫嗗灈鏈哄嚭搴撶珯淇℃伅
-                DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, crnStn.getDevpPlcId());
-                StaProtocol staProtocol = devpThread.getStation().get(crnStn.getStaNo());
-                if (staProtocol == null) {
-                    continue;
-                } else {
-                    staProtocol = staProtocol.clone();
+                switch (crnSlave.getId()){
+                    case 1:
+                    case 2:
+                        crnStnToOutStnOne(crnStn);
+                        continue;
+                    case 3:
+                    case 4:
+                    case 5:
+                        crnStnToOutStnTwo(crnStn,1);
+                        continue;
+                    case 6:
+                    case 7:
+                        crnStnToOutStnThree(crnStn);
+                        continue;
+                    default:
+                        break;
                 }
-                if (staProtocol.isAutoing() && staProtocol.isLoading() && (staProtocol.getWorkNo() == 0 || staProtocol.getStaNo() == null)) {
-                    // 鏌ヨ宸ヤ綔妗�
-                    WrkMast wrkMast = wrkMastMapper.selectPakOutStep2(staProtocol.getSiteId());
-                    if (wrkMast == null) {
-                        continue;
+            }
+        }
+    }
+    /**
+     * 鍫嗗灈鏈虹珯鍑哄簱鍒板嚭搴撶珯
+     */
+    public synchronized boolean crnStnToOutStnOne(CrnSlave.CrnStn crnStn ) {
+        try{
+            // 鑾峰彇鍫嗗灈鏈哄嚭搴撶珯淇℃伅
+            DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, crnStn.getDevpPlcId());
+            StaProtocol staProtocol = devpThread.getStation().get(crnStn.getStaNo());
+            if (staProtocol == null) {
+                return false;
+            } else {
+                staProtocol = staProtocol.clone();
+            }
+            if (staProtocol.isAutoing() && staProtocol.isLoading() && (staProtocol.getWorkNo() == 0 || staProtocol.getStaNo() == null)) {
+                // 鏌ヨ宸ヤ綔妗�
+                WrkMast wrkMast = wrkMastMapper.selectPakOutStep2(staProtocol.getSiteId());
+                if (wrkMast == null) {
+                    return false;
+                }
+                // 鍒ゆ柇宸ヤ綔妗f潯浠�
+                if (wrkMast.getIoType() < 100 || wrkMast.getStaNo() == null || wrkMast.getSourceStaNo() == null) {
+                    return false;
+                }
+                // 鍒ゆ柇鍚婅溅鏄惁瀹為檯宸插畬鎴愶紝涓旂數鑴戠姸鎬佸湪move涓紝浠ュ鐢佃剳杩涜鏇存柊宸ヤ綔妗�
+                CrnThread crnThread = (CrnThread) SlaveConnection.get(SlaveType.Crn, wrkMast.getCrnNo());
+                CrnProtocol crnProtocol = crnThread.getCrnProtocol();
+                if (crnProtocol.statusType == CrnStatusType.FETCHING || crnProtocol.statusType == CrnStatusType.PUTTING) {
+                    // 绉诲姩涓�
+                    return false;
+                }
+
+                WrkMastCrn wrkMastCrn = wrkMastCrnMapper.selectWrkNoOneAndTwo(crnProtocol.getTaskNo().intValue());
+                if (!Cools.isEmpty(wrkMastCrn) && wrkMastCrn.getWrkSts().equals(12L)){
+                    wrkMast = wrkMastMapper.selectPakInStep3(wrkMastCrn.getWrkNo().intValue());
+                } else {
+                    return false;
+                }
+                //  鍒ゆ柇鍫嗗灈鏈虹姸鎬佺瓑寰呯‘璁�
+                if (crnProtocol.modeType == CrnModeType.AUTO && crnProtocol.getTaskNo().equals(wrkMast.getWrkNo().shortValue())
+                        && crnProtocol.statusType == CrnStatusType.WAITING
+                        && crnProtocol.forkPosType == CrnForkPosType.HOME) {
+
+                    // 鍛戒护涓嬪彂鍖� --------------------------------------------------------------------------
+                    StaProtocol staProtocolOther = devpThread.getStation().get(crnStn.getStaNoOther());
+                    if (staProtocolOther == null) {
+                        return false;
+                    } else {
+                        staProtocolOther = staProtocolOther.clone();
                     }
-                    // 鍒ゆ柇宸ヤ綔妗f潯浠�
-                    if (wrkMast.getIoType() < 100 || wrkMast.getStaNo() == null || wrkMast.getSourceStaNo() == null) {
-                        continue;
+                    if (staProtocolOther.isAutoing() && staProtocolOther.isLoading() && (staProtocolOther.getWorkNo() == 0 || staProtocolOther.getStaNo() == null)) {
+//                        WrkMastCrn wrkMastCrn = wrkMastCrnMapper.selectWrkNoOneAndTwo(wrkMast.getWrkNo());
+
+
+                        WrkMast wrkMastOne = wrkMastMapper.selectPakInStep3(wrkMastCrn.getWrkNoOne().intValue());
+                        WrkMast wrkMastTwo = wrkMastMapper.selectPakInStep3(wrkMastCrn.getWrkNoTwo().intValue());
+                        WrkMast wrkMast1 = null;
+                        WrkMast wrkMast2 = null;
+                        if (Utils.getRow(wrkMastOne.getSourceLocNo()) == wrkMast.getCrnNo()*4){
+                            wrkMast1 = wrkMastTwo;
+                            wrkMast2 = wrkMastOne;
+                        }else {
+                            wrkMast2 = wrkMastTwo;
+                            wrkMast1 = wrkMastOne;
+                        }
+
+                        // 涓嬪彂绔欑偣淇℃伅
+                        staProtocolOther.setWorkNo(Cools.isEmpty(wrkMast1.getWorkNoOther())? wrkMast1.getWrkNo():wrkMast1.getWorkNoOther());
+                        staProtocolOther.setStaNo(wrkMast1.getStaNo());
+                        if (!MessageQueue.offer(SlaveType.Devp, crnStn.getDevpPlcId(), new Task(2, staProtocolOther))) {
+                            return false;
+                        }
+
+                        // 涓嬪彂绔欑偣淇℃伅
+                        staProtocol.setWorkNo(Cools.isEmpty(wrkMast2.getWorkNoOther())? wrkMast2.getWrkNo():wrkMast2.getWorkNoOther());
+//                                    staProtocol.setStaNo(RouteUtils.CrnStaEnd(wrkMast.getStaNo(),wrkMast.getSourceStaNo()));
+                        staProtocol.setStaNo(wrkMast2.getStaNo());
+                        if (!MessageQueue.offer(SlaveType.Devp, crnStn.getDevpPlcId(), new Task(2, staProtocol))) {
+                            return false;
+                        }
+                        boolean sign = true;
+
+                        // 鏇存柊宸ヤ綔妗g姸鎬佷负14澶辫触
+                        wrkMastCrn.setWrkSts(14L);
+                        if (wrkMastCrnMapper.updateById(wrkMastCrn) != 0) {
+                        } else {
+                            sign = false;
+                            log.error("鏇存柊宸ヤ綔妗g殑宸ヤ綔鐘舵�佷负14澶辫触锛侊紒锛� [宸ヤ綔鍙�:{}]", wrkMast.getWrkNo());
+                        }
+
+                        // 鏇存柊宸ヤ綔妗g姸鎬佷负14澶辫触
+                        wrkMastOne.setWrkSts(14L);
+                        wrkMastOne.setCrnEndTime(new Date());
+                        if (wrkMastMapper.updateById(wrkMastOne) != 0) {
+                        } else {
+                            sign = false;
+                            log.error("鏇存柊宸ヤ綔妗g殑宸ヤ綔鐘舵�佷负14澶辫触锛侊紒锛� [宸ヤ綔鍙�:{}]", wrkMast.getWrkNo());
+                        }
+
+                        // 鏇存柊宸ヤ綔妗g姸鎬佷负14澶辫触
+                        wrkMastTwo.setWrkSts(14L);
+                        wrkMastTwo.setCrnEndTime(new Date());
+                        if (wrkMastMapper.updateById(wrkMastTwo) != 0) {
+                        } else {
+                            sign = false;
+                            log.error("鏇存柊宸ヤ綔妗g殑宸ヤ綔鐘舵�佷负14澶辫触锛侊紒锛� [宸ヤ綔鍙�:{}]", wrkMast.getWrkNo());
+                        }
+
+                        if (sign){
+                            // 澶嶄綅鍫嗗灈鏈�
+                            crnThread.setResetFlag(true);
+                            return true;
+                        }
                     }
-                    // 鍒ゆ柇鍚婅溅鏄惁瀹為檯宸插畬鎴愶紝涓旂數鑴戠姸鎬佸湪move涓紝浠ュ鐢佃剳杩涜鏇存柊宸ヤ綔妗�
-                    CrnThread crnThread = (CrnThread) SlaveConnection.get(SlaveType.Crn, wrkMast.getCrnNo());
-                    CrnProtocol crnProtocol = crnThread.getCrnProtocol();
+                }
+            }
+        }catch (Exception e){
+            log.error("鏇存柊宸ヤ綔妗g殑宸ヤ綔鐘舵�佷负14澶辫触锛侊紒锛� [鍑哄簱绔�:{}]", crnStn.getStaNo());
+        }
+        return false;
+    }
+    public synchronized boolean crnStnToOutStnTwo(CrnSlave.CrnStn crnStn ,Integer conStation) {
+        try{
+            Date now = new Date();
+            // 鑾峰彇鍫嗗灈鏈哄嚭搴撶珯淇℃伅
+            DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, crnStn.getDevpPlcId());
+            StaProtocol staProtocol = devpThread.getStation().get(crnStn.getStaNo());
+            if (staProtocol == null) {
+                return false;
+            } else {
+                staProtocol = staProtocol.clone();
+            }
+            if (staProtocol.isAutoing() && staProtocol.isLoading() && (staProtocol.getWorkNo() == 0 || staProtocol.getStaNo() == null)) {
+                // 鏌ヨ宸ヤ綔妗�
+                WrkMast wrkMast = wrkMastMapper.selectPakOutStep2(staProtocol.getSiteId());
+                if (wrkMast == null) {
+                    return false;
+                }
+                // 鍒ゆ柇宸ヤ綔妗f潯浠�
+                if (wrkMast.getIoType() < 100 || wrkMast.getStaNo() == null || wrkMast.getSourceStaNo() == null) {
+                    return false;
+                }
+                // 鍒ゆ柇鍚婅溅鏄惁瀹為檯宸插畬鎴愶紝涓旂數鑴戠姸鎬佸湪move涓紝浠ュ鐢佃剳杩涜鏇存柊宸ヤ綔妗�
+                CrnThread crnThread = (CrnThread) SlaveConnection.get(SlaveType.Crn, wrkMast.getCrnNo());
+                CrnProtocol crnProtocol = crnThread.getCrnProtocol();
+                if (conStation==1){
                     if (crnProtocol.statusType == CrnStatusType.FETCHING || crnProtocol.statusType == CrnStatusType.PUTTING) {
                         // 绉诲姩涓�
-                        continue;
-                    }
-                    if (crnProtocol.getCrnNo()<=2){
-                        WrkMastCrn wrkMastCrn = wrkMastCrnMapper.selectWrkNoOneAndTwo(crnProtocol.getTaskNo().intValue());
-                        if (!Cools.isEmpty(wrkMastCrn) && wrkMastCrn.getWrkSts().equals(12L)){
-                            wrkMast = wrkMastMapper.selectPakInStep3(wrkMastCrn.getWrkNo().intValue());
-                        }
+                        return false;
                     }
                     //  鍒ゆ柇鍫嗗灈鏈虹姸鎬佺瓑寰呯‘璁�
                     if (crnProtocol.modeType == CrnModeType.AUTO && crnProtocol.getTaskNo().equals(wrkMast.getWrkNo().shortValue())
                             && crnProtocol.statusType == CrnStatusType.WAITING
-                            && crnProtocol.forkPosType == CrnForkPosType.HOME) {
-
-                        // 鍛戒护涓嬪彂鍖� --------------------------------------------------------------------------
-                        if (crnProtocol.getCrnNo()<=2){
-
-                            StaProtocol staProtocolOther = devpThread.getStation().get(crnStn.getStaNoOther());
-                            if (staProtocolOther == null) {
-                                continue;
-                            } else {
-                                staProtocolOther = staProtocolOther.clone();
+                            && crnProtocol.forkPosType == CrnForkPosType.HOME
+                            && crnProtocol.getLoaded()==0) {
+                        List<WrkMastSplitTwin> wrkMastSplitTwinList = wrkMastSplitTwinMapper.getWrkMastSplitTwin(wrkMast.getCrnNo(), conStation, null, 2, 3);
+                        if (wrkMastSplitTwinList.size()!=1){
+                            log.error("鍫嗗灈鏈烘斁璐у畬鎴愮瓑寰呯‘璁ゅ紓甯�,鍫嗗灈鏈哄彿={},寮傚父淇℃伅={},宸ヤ綅鍙�={},宸ヤ綔绫诲瀷={},宸ヤ綔鐘舵��={}",wrkMast.getCrnNo(),"涓嶅瓨鍦ㄦ垨鑰呭瓨鍦ㄥ绗斿彲鎵ц浣滀笟锛岃鍒犻櫎鏃犳晥浣滀笟锛侊紒锛�",conStation,2,3);
+                        }
+                        for (WrkMastSplitTwin wrkMastSplitTwin:wrkMastSplitTwinList){
+                            if (wrkMastSplitTwin.getWrkNo()!=wrkMast.getWrkNo().longValue()){
+                                log.error("鍫嗗灈鏈烘斁璐у畬鎴愮瓑寰呯‘璁ゅ紓甯�,鍫嗗灈鏈哄彿={},寮傚父淇℃伅={},宸ヤ綅鍙�={},宸ヤ綔绫诲瀷={},宸ヤ綔鐘舵��={},宸ヤ綔浠诲姟鍙�={},鎵ц浠诲姟鍙�={}",wrkMast.getCrnNo(),"宸ヤ綔浠诲姟涓庢墽琛屼换鍔′笉鍖归厤",conStation,2,3,wrkMast.getWrkNo(),wrkMastSplitTwin.getWrkNo());
+                                return false;
                             }
-                            if (staProtocolOther.isAutoing() && staProtocolOther.isLoading() && (staProtocolOther.getWorkNo() == 0 || staProtocolOther.getStaNo() == null)) {
-                                WrkMastCrn wrkMastCrn = wrkMastCrnMapper.selectWrkNoOneAndTwo(wrkMast.getWrkNo());
-                                if (Cools.isEmpty(wrkMastCrn)){
-                                    continue;
-                                }
-
-                                WrkMast wrkMastOne = wrkMastMapper.selectPakInStep3(wrkMastCrn.getWrkNoOne().intValue());
-                                WrkMast wrkMastTwo = wrkMastMapper.selectPakInStep3(wrkMastCrn.getWrkNoTwo().intValue());
-                                WrkMast wrkMast1 = null;
-                                WrkMast wrkMast2 = null;
-                                if (Utils.getRow(wrkMastOne.getSourceLocNo()) == wrkMast.getCrnNo()*4){
-                                    wrkMast1 = wrkMastTwo;
-                                    wrkMast2 = wrkMastOne;
-                                }else {
-                                    wrkMast2 = wrkMastTwo;
-                                    wrkMast1 = wrkMastOne;
-                                }
-
-                                // 涓嬪彂绔欑偣淇℃伅
-                                staProtocolOther.setWorkNo(Cools.isEmpty(wrkMast1.getWorkNoOther())? wrkMast1.getWrkNo():wrkMast1.getWorkNoOther());
-                                staProtocolOther.setStaNo(wrkMast1.getStaNo());
-                                if (!MessageQueue.offer(SlaveType.Devp, crnStn.getDevpPlcId(), new Task(2, staProtocolOther))) {
-                                    continue;
-                                }
-
-                                // 涓嬪彂绔欑偣淇℃伅
-                                staProtocol.setWorkNo(Cools.isEmpty(wrkMast2.getWorkNoOther())? wrkMast2.getWrkNo():wrkMast2.getWorkNoOther());
-//                                    staProtocol.setStaNo(RouteUtils.CrnStaEnd(wrkMast.getStaNo(),wrkMast.getSourceStaNo()));
-                                staProtocol.setStaNo(wrkMast2.getStaNo());
-                                if (!MessageQueue.offer(SlaveType.Devp, crnStn.getDevpPlcId(), new Task(2, staProtocol))) {
-                                    continue;
-                                }
-                                boolean sign = true;
-
-                                // 鏇存柊宸ヤ綔妗g姸鎬佷负14澶辫触
-                                wrkMastCrn.setWrkSts(14L);
-                                if (wrkMastCrnMapper.updateById(wrkMastCrn) != 0) {
-                                } else {
-                                    sign = false;
-                                    log.error("鏇存柊宸ヤ綔妗g殑宸ヤ綔鐘舵�佷负14澶辫触锛侊紒锛� [宸ヤ綔鍙�:{}]", wrkMast.getWrkNo());
-                                }
-
-                                // 鏇存柊宸ヤ綔妗g姸鎬佷负14澶辫触
-                                wrkMastOne.setWrkSts(14L);
-                                wrkMastOne.setCrnEndTime(new Date());
-                                if (wrkMastMapper.updateById(wrkMastOne) != 0) {
-                                } else {
-                                    sign = false;
-                                    log.error("鏇存柊宸ヤ綔妗g殑宸ヤ綔鐘舵�佷负14澶辫触锛侊紒锛� [宸ヤ綔鍙�:{}]", wrkMast.getWrkNo());
-                                }
-
-                                // 鏇存柊宸ヤ綔妗g姸鎬佷负14澶辫触
-                                wrkMastTwo.setWrkSts(14L);
-                                wrkMastTwo.setCrnEndTime(new Date());
-                                if (wrkMastMapper.updateById(wrkMastTwo) != 0) {
-                                } else {
-                                    sign = false;
-                                    log.error("鏇存柊宸ヤ綔妗g殑宸ヤ綔鐘舵�佷负14澶辫触锛侊紒锛� [宸ヤ綔鍙�:{}]", wrkMast.getWrkNo());
-                                }
-
-                                if (sign){
-                                    // 澶嶄綅鍫嗗灈鏈�
-                                    crnThread.setResetFlag(true);
-                                }
-                            }
-
-                        }else {
+                            // 鍛戒护涓嬪彂鍖� --------------------------------------------------------------------------
                             // 涓嬪彂绔欑偣淇℃伅
                             staProtocol.setWorkNo(wrkMast.getWrkNo());
                             staProtocol.setStaNo(RouteUtils.CrnStaEnd(wrkMast.getStaNo(),wrkMast.getSourceStaNo()));
                             if (!MessageQueue.offer(SlaveType.Devp, crnStn.getDevpPlcId(), new Task(2, staProtocol))) {
-                                continue;
+                                return false;
                             }
-
                             // 鏇存柊宸ヤ綔妗g姸鎬佷负14澶辫触
                             wrkMast.setWrkSts(14L);
-                            wrkMast.setCrnEndTime(new Date());
+                            wrkMast.setCrnEndTime(now);
                             if (wrkMastMapper.updateById(wrkMast) != 0) {
-                                // 澶嶄綅鍫嗗灈鏈�
-                                crnThread.setResetFlag(true);
+                                wrkMastSplitTwin.setWrkSts(wrkMastSplitTwin.getWrkSts()+1);
+                                wrkMastSplitTwin.setUpdateTime(now);
+                                // 淇敼鎴愬姛鍚庡浣嶅爢鍨涙満
+                                if (wrkMastSplitTwinService.updateById(wrkMastSplitTwin)) {
+                                    // 鍫嗗灈鏈哄浣�
+                                    crnThread.setResetFlag(true);
+                                    return true;
+                                }else {
+                                    log.error("鍫嗗灈鏈烘斁璐у畬鎴愮瓑寰呯‘璁ゅ紓甯�,鍫嗗灈鏈哄彿={},寮傚父淇℃伅={},宸ヤ綅鍙�={},宸ヤ綔绫诲瀷={},宸ヤ綔鐘舵��={}",wrkMast.getCrnNo(),"淇敼鎵ц妗f澶辫触",conStation,2,3);
+                                }
                             } else {
                                 log.error("鏇存柊宸ヤ綔妗g殑宸ヤ綔鐘舵�佷负14澶辫触锛侊紒锛� [宸ヤ綔鍙�:{}]", wrkMast.getWrkNo());
                             }
                         }
                     }
+                }else if (conStation==2){
+                    if (crnProtocol.statusTypeTwo == CrnStatusType.FETCHING || crnProtocol.statusTypeTwo == CrnStatusType.PUTTING) {
+                        // 绉诲姩涓�
+                        return false;
+                    }
+                    //  鍒ゆ柇鍫嗗灈鏈虹姸鎬佺瓑寰呯‘璁�
+                    if (crnProtocol.modeType == CrnModeType.AUTO && crnProtocol.getTaskNoTwo().equals(wrkMast.getWrkNo().shortValue())
+                            && crnProtocol.statusTypeTwo == CrnStatusType.WAITING
+                            && crnProtocol.forkPosTypeTwo == CrnForkPosType.HOME
+                            && crnProtocol.getLoadedTwo()==0) {
+                        List<WrkMastSplitTwin> wrkMastSplitTwinList = wrkMastSplitTwinMapper.getWrkMastSplitTwin(wrkMast.getCrnNo(), conStation, null, 2, 3);
+                        if (wrkMastSplitTwinList.size()!=1){
+                            log.error("鍫嗗灈鏈烘斁璐у畬鎴愮瓑寰呯‘璁ゅ紓甯�,鍫嗗灈鏈哄彿={},寮傚父淇℃伅={},宸ヤ綅鍙�={},宸ヤ綔绫诲瀷={},宸ヤ綔鐘舵��={}",wrkMast.getCrnNo(),"涓嶅瓨鍦ㄦ垨鑰呭瓨鍦ㄥ绗斿彲鎵ц浣滀笟锛岃鍒犻櫎鏃犳晥浣滀笟锛侊紒锛�",conStation,2,3);
+                        }
+                        for (WrkMastSplitTwin wrkMastSplitTwin:wrkMastSplitTwinList){
+                            if (wrkMastSplitTwin.getWrkNo()!=wrkMast.getWrkNo().longValue()){
+                                log.error("鍫嗗灈鏈烘斁璐у畬鎴愮瓑寰呯‘璁ゅ紓甯�,鍫嗗灈鏈哄彿={},寮傚父淇℃伅={},宸ヤ綅鍙�={},宸ヤ綔绫诲瀷={},宸ヤ綔鐘舵��={},宸ヤ綔浠诲姟鍙�={},鎵ц浠诲姟鍙�={}",wrkMast.getCrnNo(),"宸ヤ綔浠诲姟涓庢墽琛屼换鍔′笉鍖归厤",conStation,2,3,wrkMast.getWrkNo(),wrkMastSplitTwin.getWrkNo());
+                                return false;
+                            }
+                            // 鍛戒护涓嬪彂鍖� --------------------------------------------------------------------------
+                            // 涓嬪彂绔欑偣淇℃伅
+                            staProtocol.setWorkNo(wrkMast.getWrkNo());
+                            staProtocol.setStaNo(RouteUtils.CrnStaEnd(wrkMast.getStaNo(),wrkMast.getSourceStaNo()));
+                            if (!MessageQueue.offer(SlaveType.Devp, crnStn.getDevpPlcId(), new Task(2, staProtocol))) {
+                                return false;
+                            }
+                            // 鏇存柊宸ヤ綔妗g姸鎬佷负14澶辫触
+                            wrkMast.setWrkSts(14L);
+                            wrkMast.setCrnEndTime(now);
+                            if (wrkMastMapper.updateById(wrkMast) != 0) {
+                                wrkMastSplitTwin.setWrkSts(wrkMastSplitTwin.getWrkSts()+1);
+                                wrkMastSplitTwin.setUpdateTime(now);
+                                // 淇敼鎴愬姛鍚庡浣嶅爢鍨涙満
+                                if (wrkMastSplitTwinService.updateById(wrkMastSplitTwin)) {
+                                    // 鍫嗗灈鏈哄浣�
+                                    crnThread.setResetFlagTwo(true);
+                                    return true;
+                                }else {
+                                    log.error("鍫嗗灈鏈烘斁璐у畬鎴愮瓑寰呯‘璁ゅ紓甯�,鍫嗗灈鏈哄彿={},寮傚父淇℃伅={},宸ヤ綅鍙�={},宸ヤ綔绫诲瀷={},宸ヤ綔鐘舵��={}",wrkMast.getCrnNo(),"淇敼鎵ц妗f澶辫触",conStation,2,3);
+                                }
+                            } else {
+                                log.error("鏇存柊宸ヤ綔妗g殑宸ヤ綔鐘舵�佷负14澶辫触锛侊紒锛� [宸ヤ綔鍙�:{}]", wrkMast.getWrkNo());
+                            }
+                        }
+                    }
+                }
+            }
+        }catch (Exception e){
+            log.error("鏇存柊宸ヤ綔妗g殑宸ヤ綔鐘舵�佷负14澶辫触锛侊紒锛� [鍑哄簱绔�:{}]", crnStn.getStaNo());
+        }
+        return false;
+    }
+    public synchronized boolean crnStnToOutStnThree(CrnSlave.CrnStn crnStn ) {
+        try{
+            // 鑾峰彇鍫嗗灈鏈哄嚭搴撶珯淇℃伅
+            DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, crnStn.getDevpPlcId());
+            StaProtocol staProtocol = devpThread.getStation().get(crnStn.getStaNo());
+            if (staProtocol == null) {
+                return false;
+            } else {
+                staProtocol = staProtocol.clone();
+            }
+            if (staProtocol.isAutoing() && staProtocol.isLoading() && (staProtocol.getWorkNo() == 0 || staProtocol.getStaNo() == null)) {
+                // 鏌ヨ宸ヤ綔妗�
+                WrkMast wrkMast = wrkMastMapper.selectPakOutStep2(staProtocol.getSiteId());
+                if (wrkMast == null) {
+                    return false;
+                }
+                // 鍒ゆ柇宸ヤ綔妗f潯浠�
+                if (wrkMast.getIoType() < 100 || wrkMast.getStaNo() == null || wrkMast.getSourceStaNo() == null) {
+                    return false;
+                }
+                // 鍒ゆ柇鍚婅溅鏄惁瀹為檯宸插畬鎴愶紝涓旂數鑴戠姸鎬佸湪move涓紝浠ュ鐢佃剳杩涜鏇存柊宸ヤ綔妗�
+                CrnThread crnThread = (CrnThread) SlaveConnection.get(SlaveType.Crn, wrkMast.getCrnNo());
+                CrnProtocol crnProtocol = crnThread.getCrnProtocol();
+                if (crnProtocol.statusType == CrnStatusType.FETCHING || crnProtocol.statusType == CrnStatusType.PUTTING) {
+                    // 绉诲姩涓�
+                    return false;
+                }
+                //  鍒ゆ柇鍫嗗灈鏈虹姸鎬佺瓑寰呯‘璁�
+                if (crnProtocol.modeType == CrnModeType.AUTO && crnProtocol.getTaskNo().equals(wrkMast.getWrkNo().shortValue())
+                        && crnProtocol.statusType == CrnStatusType.WAITING
+                        && crnProtocol.forkPosType == CrnForkPosType.HOME) {
+                    // 鍛戒护涓嬪彂鍖� --------------------------------------------------------------------------
+                    // 涓嬪彂绔欑偣淇℃伅
+                    staProtocol.setWorkNo(wrkMast.getWrkNo());
+                    staProtocol.setStaNo(RouteUtils.CrnStaEnd(wrkMast.getStaNo(),wrkMast.getSourceStaNo()));
+                    if (!MessageQueue.offer(SlaveType.Devp, crnStn.getDevpPlcId(), new Task(2, staProtocol))) {
+                        return false;
+                    }
+
+                    // 鏇存柊宸ヤ綔妗g姸鎬佷负14澶辫触
+                    wrkMast.setWrkSts(14L);
+                    wrkMast.setCrnEndTime(new Date());
+                    if (wrkMastMapper.updateById(wrkMast) != 0) {
+                        // 澶嶄綅鍫嗗灈鏈�
+                        crnThread.setResetFlag(true);
+                        return true;
+                    } else {
+                        log.error("鏇存柊宸ヤ綔妗g殑宸ヤ綔鐘舵�佷负14澶辫触锛侊紒锛� [宸ヤ綔鍙�:{}]", wrkMast.getWrkNo());
+                    }
+                }
+            }
+        }catch (Exception e){
+            log.error("鏇存柊宸ヤ綔妗g殑宸ヤ綔鐘舵�佷负14澶辫触锛侊紒锛� [鍑哄簱绔�:{}]", crnStn.getStaNo());
+        }
+        return false;
+    }
+
+    /**
+     * 鍫嗗灈鏈虹珯鍑哄簱鍒板嚭搴撶珯
+     */
+    public synchronized void crnStnToOutStnTwo() {
+        for (CrnSlave crnSlave : slaveProperties.getCrn()) {
+            // 閬嶅巻鍫嗗灈鏈哄嚭搴撶珯
+            for (CrnSlave.CrnStn crnStn : crnSlave.getCrnOutStn()) {
+                switch (crnSlave.getId()){
+                    case 3:
+                    case 4:
+                    case 5:
+                        crnStnToOutStnTwo(crnStn,2);
+                        continue;
+                    default:
+                        break;
                 }
             }
         }
@@ -1227,8 +1603,12 @@
                                 case 2:
                                     this.crnStnToLoc1Single(crn, crnProtocol); //  鍏ュ簱
                                     break;
+                                case 3:
+                                case 4:
+                                case 5:
+                                    continue;
                                 default:
-                                    this.crnStnToLoc1(crn, crnProtocol); //  鍏ュ簱
+                                    this.crnStnToLoc1(crn, crnProtocol,1); //  鍏ュ簱
                             }
                             crnProtocol.setLastIo("O");
                         } else if (basCrnp.getOutEnable().equals("Y")) {
@@ -1237,8 +1617,12 @@
                                 case 2:
                                     this.locToCrnStn1Single(crn, crnProtocol); //  鍑哄簱
                                     break;
+                                case 3:
+                                case 4:
+                                case 5:
+                                    continue;
                                 default:
-                                    this.locToCrnStn1(crn, crnProtocol); //  鍑哄簱
+                                    this.locToCrnStn1(crn, crnProtocol,1); //  鍑哄簱
                             }
                             crnProtocol.setLastIo("I");
                         }
@@ -1251,8 +1635,12 @@
                                 case 2:
                                     this.locToCrnStn1Single(crn, crnProtocol); //  鍑哄簱
                                     break;
+                                case 3:
+                                case 4:
+                                case 5:
+                                    continue;
                                 default:
-                                    this.locToCrnStn1(crn, crnProtocol); //  鍑哄簱
+                                    this.locToCrnStn1(crn, crnProtocol,1); //  鍑哄簱
                             }
                             crnProtocol.setLastIo("I");
                         } else if (basCrnp.getInEnable().equals("Y")) {
@@ -1261,13 +1649,130 @@
                                 case 2:
                                     this.crnStnToLoc1Single(crn, crnProtocol); //  鍏ュ簱
                                     break;
+                                case 3:
+                                case 4:
+                                case 5:
+                                    continue;
                                 default:
-                                    this.crnStnToLoc1(crn, crnProtocol); //  鍏ュ簱
+                                    this.crnStnToLoc1(crn, crnProtocol,1); //  鍏ュ簱
                             }
                             crnProtocol.setLastIo("O");
                         }
                     }
                 }
+                // 搴撲綅绉昏浆
+                this.locToLoc(crn, crnProtocol);
+//            this.crnRebackHp(crnProtocol, crnThread);
+
+            }
+        }catch (Exception e){
+            log.error("鍫嗗灈鏈哄嚭鍏ュ簱涓嬪彂鎶ラ敊"+e);
+        }
+    }
+
+    /**
+     * 鍏ュ嚭搴�  ===>>  鍫嗗灈鏈哄叆鍑哄簱浣滀笟涓嬪彂
+     */
+    public synchronized void crnIoExecuteTwo() {
+        try{
+            for (CrnSlave crn : slaveProperties.getCrn()) {
+                // 鑾峰彇鍫嗗灈鏈轰俊鎭�
+                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;
+                }
+
+
+                int[] sign = new int[]{0,0};
+                // 鍙湁褰撳爢鍨涙満绌洪棽 骞朵笖 鏃犱换鍔℃椂鎵嶇户缁墽琛�
+                if (crnProtocol.getModeType() == CrnModeType.AUTO) {
+                    // 鍙湁褰撳爢鍨涙満宸ヤ綅绌洪棽 骞朵笖 鏃犱换鍔℃椂鎵嶇户缁墽琛�
+                    if (crnProtocol.getStatusType() == CrnStatusType.IDLE
+                            && crnProtocol.getTaskNo() == 0
+                            && crnProtocol.getLoaded() == 0
+                            && crnProtocol.getForkPos() == 0) {
+//                        sign[0] = 1;
+//                        sign[1] = 1;
+                        /*
+                        * 浠诲姟鎷嗗垎鐗规畩澶勭悊
+                        * */
+                        if (crnProtocol.getStatusTypeTwo() == CrnStatusType.IDLE
+                                && crnProtocol.getTaskNoTwo() == 0
+                                && crnProtocol.getLoadedTwo() == 0
+                                && crnProtocol.getForkPosTwo() == 0){
+                            sign[0] = 1;
+                            sign[1] = 1;
+                        }
+                    }else if (crnProtocol.getStatusTypeTwo() == CrnStatusType.IDLE
+                            && crnProtocol.getTaskNoTwo() == 0
+                            && crnProtocol.getLoadedTwo() == 0
+                            && crnProtocol.getForkPosTwo() == 0){
+                        sign[0] = 1;
+                        sign[1] = 2;
+                    }
+                }
+
+                if (sign[0]==1 && sign[1] == 1){
+                    // 濡傛灉鏈�杩戜竴娆℃槸鍏ュ簱妯″紡
+                    if (crnProtocol.getLastIo().equals("I")) {
+                        if (basCrnp.getInEnable().equals("Y")) {
+                            switch (crn.getId()){
+                                case 3:
+                                case 4:
+                                case 5:
+                                    this.crnStnToLoc1Big(crn, crnProtocol, sign[1]); //  鍏ュ簱
+                                    break;
+                                default:
+                                    continue;
+                            }
+                            crnProtocol.setLastIo("O");
+                        } else if (basCrnp.getOutEnable().equals("Y")) {
+                            switch (crn.getId()){
+                                case 3:
+                                case 4:
+                                case 5:
+                                    this.locToCrnStn1Big(crn, crnProtocol, sign[1]); //  鍑哄簱
+                                    break;
+                                default:
+                                    continue;
+                            }
+                            crnProtocol.setLastIo("I");
+                        }
+                    }
+                    // 濡傛灉鏈�杩戜竴娆℃槸鍑哄簱妯″紡
+                    else if (crnProtocol.getLastIo().equals("O")) {
+                        if (basCrnp.getOutEnable().equals("Y")) {
+                            switch (crn.getId()){
+                                case 3:
+                                case 4:
+                                case 5:
+                                    this.locToCrnStn1Big(crn, crnProtocol, sign[1]); //  鍑哄簱
+                                    break;
+                                default:
+                                    continue;
+                            }
+                            crnProtocol.setLastIo("I");
+                        } else if (basCrnp.getInEnable().equals("Y")) {
+                            switch (crn.getId()){
+                                case 3:
+                                case 4:
+                                case 5:
+                                    this.crnStnToLoc1Big(crn, crnProtocol, sign[1]); //  鍏ュ簱
+                                    break;
+                                default:
+                                    continue;
+                            }
+                            crnProtocol.setLastIo("O");
+                        }
+                    }
+                }
+
                 // 搴撲綅绉昏浆
                 this.locToLoc(crn, crnProtocol);
 //            this.crnRebackHp(crnProtocol, crnThread);
@@ -1533,9 +2038,9 @@
 
     /**
      * 鍏ュ簱  ===>>  鍫嗗灈鏈虹珯鍒板簱浣�
-     * 2022-12-03 TQS淇敼锛屽厛閬嶅巻鏌ヨ鍚屽彴鍫嗗灈鏈哄伐浣滄。鎵�鏈夌珯鐐瑰叆搴撲换鍔IST锛屾牴鎹伐浣滄。浠诲姟鎺掑簭浼樺厛绾ч珮浜� 鏍规嵁鍫嗗灈鏈哄叆搴撶珯鐐规帓搴�
+     * 2024-06-05
      */
-    public synchronized void crnStnToLoc1(CrnSlave slave, CrnProtocol crnProtocol) {
+    public synchronized void crnStnToLoc1Big(CrnSlave slave, CrnProtocol crnProtocol, Integer crnStation) {
         List<WrkMast> wrkMasts = wrkMastMapper.selectPakInStep12(slave.getId());
         for(WrkMast wrkMast : wrkMasts){
             if (wrkMast == null) {
@@ -1568,8 +2073,8 @@
                 log.error("鍏ュ簱 ===>> 鍫嗗灈鏈虹珯鐐瑰湪鏁版嵁搴撲笉瀛樺湪, 绔欑偣缂栧彿={}", crnStn.getStaNo());
                 continue;
             }
-            if (staProtocol.isAutoing() && staProtocol.isLoading() && staProtocol.getWorkNo() > 0 && staProtocol.isInEnable()
-                    && staDetl.getCanining() != null && staDetl.getCanining().equals("Y")) {
+            if (staProtocol.isAutoing() && staProtocol.isLoading() && staProtocol.getWorkNo().equals(wrkMast.getWrkNo())
+                    && staProtocol.isInEnable() && staDetl.getCanining() != null && staDetl.getCanining().equals("Y")) {
                 flag = true;
             }
             if (!flag) {
@@ -1587,14 +2092,35 @@
                 continue;
             }
 
-            // 鍫嗗灈鏈烘帶鍒惰繃婊�
-            if (!crnProtocol.getStatusType().equals(CrnStatusType.IDLE) || crnProtocol.getTaskNo() != 0) {
-                continue;
+            //宸ヤ綅
+            if (crnStation == 1){
+                // 鍫嗗灈鏈烘帶鍒惰繃婊�
+                if (!crnProtocol.getStatusType().equals(CrnStatusType.IDLE) || crnProtocol.getTaskNo() != 0) {
+                    break;
+                }
+                // 鍫嗗灈鏈烘帶鍒惰繃婊�
+                if (!crnProtocol.getStatusTypeTwo().equals(CrnStatusType.IDLE) || crnProtocol.getTaskNoTwo() != 0) {
+                    break;
+                }
+            }else if(crnStation == 2){
+                // 鍫嗗灈鏈烘帶鍒惰繃婊�
+                if (!crnProtocol.getStatusTypeTwo().equals(CrnStatusType.IDLE) || crnProtocol.getTaskNoTwo() != 0) {
+                    break;
+                }
+            }else {
+                break;
             }
+
 
             // 宸茬粡瀛樺湪鍚婅溅鎵ц浠诲姟鏃讹紝鍒欒繃婊�
             if (wrkMastMapper.selectWorking(slave.getId()) != null) {
                 continue;
+            }
+
+            // 宸茬粡瀛樺湪鍚婅溅鎵ц浠诲姟鏃讹紝鍒欒繃婊�
+            if (wrkMastSplitTwinMapper.selectCount(new EntityWrapper<WrkMastSplitTwin>().eq("wrk_no", wrkMast.getWrkNo().longValue())) != 0) {
+                break;
+//                        return;
             }
 
             // 鍙屾繁搴撲綅涓旀祬搴撲綅鏈夎揣锛屽垯闇�鍏堝娴呭簱浣嶈繘琛屽簱浣嶇Щ杞�
@@ -1640,14 +2166,14 @@
             crnCommand.setCrnNo(slave.getId()); // 鍫嗗灈鏈虹紪鍙�
             crnCommand.setTaskNo(wrkMast.getWrkNo().shortValue()); // 宸ヤ綔鍙�
             crnCommand.setAckFinish((short) 0);  // 浠诲姟瀹屾垚纭浣�
-            crnCommand.setTaskMode(CrnTaskModeType.LOC_MOVE); // 浠诲姟妯″紡:  搴撲綅绉昏浆
+            crnCommand.setTaskMode(CrnTaskModeType.SEPARATE_TAKE); // 浠诲姟妯″紡:  鍗曞彇璐�
             crnCommand.setSourcePosX(crnStn.getRow().shortValue());     // 婧愬簱浣嶆帓
             crnCommand.setSourcePosY(crnStn.getBay().shortValue());     // 婧愬簱浣嶅垪
             crnCommand.setSourcePosZ(crnStn.getLev().shortValue());     // 婧愬簱浣嶅眰
-            crnCommand.setDestinationPosX(locMast.getRow1().shortValue());     // 鐩爣搴撲綅鎺�
-            crnCommand.setDestinationPosY(locMast.getBay1().shortValue());     // 鐩爣搴撲綅鍒�
-            crnCommand.setDestinationPosZ(locMast.getLev1().shortValue());     // 鐩爣搴撲綅灞�
-            if (!MessageQueue.offer(SlaveType.Crn, wrkMast.getCrnNo(), new Task(2, crnCommand))) {
+            crnCommand.setDestinationPosX((short)0);     // 鐩爣搴撲綅鎺�
+            crnCommand.setDestinationPosY((short)0);     // 鐩爣搴撲綅鍒�
+            crnCommand.setDestinationPosZ((short)0);     // 鐩爣搴撲綅灞�
+            if (!MessageQueue.offer(SlaveType.Crn, wrkMast.getCrnNo(), new Task(crnStation==1? 2:5, crnCommand))) {
                 log.error("鍫嗗灈鏈哄懡浠や笅鍙戝け璐ワ紝鍫嗗灈鏈哄彿={}锛屼换鍔℃暟鎹�={}", wrkMast.getCrnNo(), JSON.toJSON(crnCommand));
             } else {
                 // 淇敼宸ヤ綔妗g姸鎬� 2.璁惧涓婅蛋 => 3.鍚婅溅鍏ュ簱涓�
@@ -1655,17 +2181,34 @@
                 wrkMast.setWrkSts(3L);
                 wrkMast.setCrnStrTime(now);
                 wrkMast.setModiTime(now);
+                WrkMastSplitTwin wrkMastSplitTwin = new WrkMastSplitTwin(wrkMast,crnStation,now);
+                wrkMastSplitTwin.setWrkSts(1);
+                wrkMastSplitTwin.setWrkStart(wrkMast.getStaNo().toString());
+                wrkMastSplitTwin.setWrkEnd(wrkMast.getLocNo());
+                wrkMastSplitTwin.setStartRow(crnStn.getRow());
+                wrkMastSplitTwin.setStartBay(crnStn.getBay());
+                wrkMastSplitTwin.setStartLev(crnStn.getLev());
+                wrkMastSplitTwin.setEndRow(locMast.getRow1());
+                wrkMastSplitTwin.setEndBay(locMast.getBay1());
+                wrkMastSplitTwin.setEndLev(locMast.getLev1());
+                wrkMastSplitTwin.setWrkType(1);
+                wrkMastSplitTwin.setIoType(1);
+
                 if (wrkMastMapper.updateById(wrkMast) == 0) {
                     log.error("淇敼宸ヤ綔妗g姸鎬� 2.璁惧涓婅蛋 => 3.鍚婅溅鍏ュ簱涓� 澶辫触锛侊紒锛屽伐浣滃彿={}", wrkMast.getWrkNo());
                 }
+
+                if (wrkMastSplitTwinMapper.insert(wrkMastSplitTwin)==0){
+                    log.error("鍒涘缓 鍫嗗灈鏈烘墽琛屼换鍔� 澶辫触锛侊紒锛屽伐浣滃彿={}锛屽爢鍨涙満鍙�={}", wrkMast.getWrkNo(),wrkMast.getCrnNo());
+                }
+                break;
             }
         }
-
     }
 
     /**
      * 鍏ュ簱  ===>>  鍫嗗灈鏈虹珯鍒板簱浣�
-     * 2022-12-03 TQS淇敼锛屽厛閬嶅巻鏌ヨ鍚屽彴鍫嗗灈鏈哄伐浣滄。鎵�鏈夌珯鐐瑰叆搴撲换鍔IST锛屾牴鎹伐浣滄。浠诲姟鎺掑簭浼樺厛绾ч珮浜� 鏍规嵁鍫嗗灈鏈哄叆搴撶珯鐐规帓搴�
+     * 2024-01-15 鐓滄槦灏忔枡绠�
      */
     public synchronized void crnStnToLoc1Single(CrnSlave slave, CrnProtocol crnProtocol) {
         List<WrkMast> wrkMasts = wrkMastMapper.selectPakInStep12(slave.getId());
@@ -1707,9 +2250,13 @@
                 log.error("鍏ュ簱 ===>> 鍫嗗灈鏈虹珯鐐瑰湪鏁版嵁搴撲笉瀛樺湪, 绔欑偣缂栧彿={}", crnStn.getStaNo());
                 continue;
             }
-            if (staProtocol.isAutoing() && staProtocol.isLoading() && staProtocol.getWorkNo() > 0 && staProtocol.isInEnable()
-                    && staDetl.getCanining() != null && staDetl.getCanining().equals("Y")) {
+            if (staProtocol.isAutoing() && staProtocol.isLoading() && staProtocol.getWorkNo().equals(wrkMast.getWrkNo())
+                    && staProtocol.isInEnable() && staDetl.getCanining() != null && staDetl.getCanining().equals("Y")) {
                 flag = true;
+            }
+
+            if (staProtocol.getWorkNo().equals(staProtocolOther.getWorkNo())){
+                continue;
             }
 
             // 鏌ヨ绔欑偣璇︾粏淇℃伅
@@ -1741,7 +2288,7 @@
                 continue;
             }
             if (!locMast.getLocSts().equals("S") && !locMast.getLocSts().equals("Q")) {
-                log.error("鍏ュ簱鎿嶄綔搴撲綅鐘舵�佷笉绗﹀悎--鐘舵��, 搴撲綅鍙�={}锛屽簱浣嶇姸鎬�={}", wrkMast.getLocNo(), locMast.getLocSts());
+                log.error("鍏ュ簱鎿嶄綔搴撲綅鐘舵�佷笉绗﹀悎--鐘舵��, 搴撲綅鍙�={}锛屽簱浣嶇姸鎬�={}", locMast.getLocNo(), locMast.getLocSts());
                 continue;
             }
 
@@ -1798,6 +2345,148 @@
     }
 
     /**
+     * 鍏ュ簱  ===>>  鍫嗗灈鏈虹珯鍒板簱浣�
+     * 2024-01-15 浼樺寲鍙屽伐浣�
+     */
+    public synchronized void crnStnToLoc1(CrnSlave slave, CrnProtocol crnProtocol, Integer crnStation) {
+        List<WrkMast> wrkMasts = wrkMastMapper.selectPakInStep12(slave.getId());
+        for(WrkMast wrkMast : wrkMasts){
+            if (wrkMast == null) {
+                continue;
+            }
+
+            CrnSlave.CrnStn crnStn = null;
+            for (CrnSlave.CrnStn crnStn1 : slave.getCrnInStn()){
+                if(crnStn1.getStaNo().equals(wrkMast.getStaNo())){
+                    crnStn = crnStn1;
+                    break;
+                }
+            }
+            if(Cools.isEmpty(crnStn)){
+                continue;
+            }
+
+            boolean flag = false;
+            // 鑾峰彇鍫嗗灈鏈哄叆搴撶珯淇℃伅
+            DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, crnStn.getDevpPlcId());
+            StaProtocol staProtocol = devpThread.getStation().get(crnStn.getStaNo());
+            if (staProtocol == null) {
+                continue;
+            } else {
+                staProtocol = staProtocol.clone();
+            }
+            // 鏌ヨ绔欑偣璇︾粏淇℃伅
+            BasDevp staDetl = basDevpService.selectById(crnStn.getStaNo());
+            if (staDetl == null) {
+                log.error("鍏ュ簱 ===>> 鍫嗗灈鏈虹珯鐐瑰湪鏁版嵁搴撲笉瀛樺湪, 绔欑偣缂栧彿={}", crnStn.getStaNo());
+                continue;
+            }
+            if (staProtocol.isAutoing() && staProtocol.isLoading() && staProtocol.getWorkNo().equals(wrkMast.getWrkNo())
+                    && staProtocol.isInEnable() && staDetl.getCanining() != null && staDetl.getCanining().equals("Y")) {
+                flag = true;
+            }
+            if (!flag) {
+                continue;
+            }
+
+            // 鑾峰彇搴撲綅淇℃伅
+            LocMast locMast = locMastService.selectById(wrkMast.getLocNo());
+            if (locMast == null) {
+                log.error("鏌ヨ搴撳瓨鏃犳暟鎹�--搴撲綅鍙穥}", wrkMast.getLocNo());
+                continue;
+            }
+            if (!locMast.getLocSts().equals("S") && !locMast.getLocSts().equals("Q")) {
+                log.error("鍏ュ簱鎿嶄綔搴撲綅鐘舵�佷笉绗﹀悎--鐘舵��, 搴撲綅鍙�={}锛屽簱浣嶇姸鎬�={}", wrkMast.getLocNo(), locMast.getLocSts());
+                continue;
+            }
+
+            //宸ヤ綅
+            if (crnStation == 1){
+                // 鍫嗗灈鏈烘帶鍒惰繃婊�
+                if (!crnProtocol.getStatusType().equals(CrnStatusType.IDLE) || crnProtocol.getTaskNo() != 0) {
+                    break;
+                }
+            }else if(crnStation == 2){
+                // 鍫嗗灈鏈烘帶鍒惰繃婊�
+                if (!crnProtocol.getStatusTypeTwo().equals(CrnStatusType.IDLE) || crnProtocol.getTaskNoTwo() != 0) {
+                    break;
+                }
+            }else {
+                break;
+            }
+
+
+            // 宸茬粡瀛樺湪鍚婅溅鎵ц浠诲姟鏃讹紝鍒欒繃婊�
+            if (wrkMastMapper.selectWorking(slave.getId()) != null) {
+                continue;
+            }
+
+            // 鍙屾繁搴撲綅涓旀祬搴撲綅鏈夎揣锛屽垯闇�鍏堝娴呭簱浣嶈繘琛屽簱浣嶇Щ杞�
+            if (Utils.isDeepLoc(slaveProperties, wrkMast.getLocNo())) {
+                String shallowLocNo = Utils.getShallowLoc(slaveProperties, wrkMast.getLocNo());
+                LocMast shallowLoc = locMastService.selectById(shallowLocNo);
+                // O.绌哄簱浣嶃�丵.鎷f枡/鐩樼偣/骞舵澘鍐嶅叆搴撱�丼.鍏ュ簱棰勭害銆乆.绂佺敤 鐩存帴鎼紒
+                if (shallowLoc.getLocSts().equals("P") || shallowLoc.getLocSts().equals("R")) {
+                    WrkMast waitWrkMast = wrkMastMapper.selectByLocNo(shallowLocNo);
+                    if (null == waitWrkMast) {
+                        log.error("{}搴撲綅寮傚父锛屾湭妫�绱㈠埌鐩稿簲宸ヤ綔妗o紒", shallowLocNo);
+                    } else {
+                        waitWrkMast.setIoPri(15D);
+                        waitWrkMast.setModiTime(new Date());
+                        if (wrkMastMapper.updateById(waitWrkMast) == 0) {
+                            log.error("璋冩暣宸ヤ綔妗d紭鍏堢骇澶辫触锛佸伐浣滃彿={}", waitWrkMast.getWrkNo());
+                        }
+                        continue;
+                    }
+
+                } else if (shallowLoc.getLocSts().equals("F") || shallowLoc.getLocSts().equals("D")) {
+                    // 姝ゆ爣璁伴伩鍏嶅娆℃墽琛岀Щ搴撲换鍔�
+                    if (Cools.isEmpty(wrkMast.getUpdMk()) || "N".equals(wrkMast.getUpdMk())) {
+                        wrkMast.setUpdMk("Y");
+                        wrkMast.setIoPri(14D);
+                        wrkMastMapper.updateById(wrkMast);
+                        // 鐢熸垚宸ヤ綔妗�,灏嗘祬搴撲綅绉昏浆鍒版柊鐨勫簱浣嶄腑
+                        moveLocForDeepLoc(slave, shallowLoc);
+                        // 鐢熸垚宸ヤ綔妗c�佹敼鍙樻祬搴撲綅鐨勬簮搴�/鐩爣搴� 搴撲綅鐘舵�併�佷笅鍙戝爢鍨涙満鍛戒护锛堢珛椹墽琛�)
+//                        moveLocForDeepLocPakin(slave, shallowLoc, wrkMast);
+                    }
+                    continue;
+                } else if (shallowLoc.getLocSts().equals("Q")) {
+                    WrkMast waitWrkMast = wrkMastMapper.selectByLocNo1(shallowLocNo);
+                    if (null != waitWrkMast && waitWrkMast.getWrkSts() == 4) {
+                        continue;
+                    }
+                }
+            }
+
+            // 鍛戒护涓嬪彂鍖� --------------------------------------------------------------------------
+            CrnCommand crnCommand = new CrnCommand();
+            crnCommand.setCrnNo(slave.getId()); // 鍫嗗灈鏈虹紪鍙�
+            crnCommand.setTaskNo(wrkMast.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.setDestinationPosX(locMast.getRow1().shortValue());     // 鐩爣搴撲綅鎺�
+            crnCommand.setDestinationPosY(locMast.getBay1().shortValue());     // 鐩爣搴撲綅鍒�
+            crnCommand.setDestinationPosZ(locMast.getLev1().shortValue());     // 鐩爣搴撲綅灞�
+            if (!MessageQueue.offer(SlaveType.Crn, wrkMast.getCrnNo(), new Task(crnStation==1? 2:5, crnCommand))) {
+                log.error("鍫嗗灈鏈哄懡浠や笅鍙戝け璐ワ紝鍫嗗灈鏈哄彿={}锛屼换鍔℃暟鎹�={}", wrkMast.getCrnNo(), JSON.toJSON(crnCommand));
+            } else {
+                // 淇敼宸ヤ綔妗g姸鎬� 2.璁惧涓婅蛋 => 3.鍚婅溅鍏ュ簱涓�
+                Date now = new Date();
+                wrkMast.setWrkSts(3L);
+                wrkMast.setCrnStrTime(now);
+                wrkMast.setModiTime(now);
+                if (wrkMastMapper.updateById(wrkMast) == 0) {
+                    log.error("淇敼宸ヤ綔妗g姸鎬� 2.璁惧涓婅蛋 => 3.鍚婅溅鍏ュ簱涓� 澶辫触锛侊紒锛屽伐浣滃彿={}", wrkMast.getWrkNo());
+                }
+            }
+        }
+    }
+
+    /**
      * 鍑哄簱  ===>>  搴撲綅鍒板爢鍨涙満绔�
      * 2022-06-09 TQS淇敼锛屾煡璇㈠伐浣滄。LIST锛岄亶鍘嗕笅鍙戯紝闃叉绗竴涓换鍔″牭濉炲嚭搴�
      */
@@ -1818,7 +2507,7 @@
                 // 鑾峰彇婧愬簱浣嶄俊鎭�
                 LocMast sourceSta = locMastService.selectById(wrkMast.getSourceLocNo());
                 if (!sourceSta.getLocSts().equals("R") && !sourceSta.getLocSts().equals("P")) {
-                    log.error("鍑哄簱鎿嶄綔搴撲綅鐘舵�佷笉绗﹀悎--鐘舵��, 搴撲綅鍙�={}锛屽簱浣嶇姸鎬�={}", wrkMast.getLocNo(), sourceSta.getLocSts());
+                    log.error("鍑哄簱鎿嶄綔搴撲綅鐘舵�佷笉绗﹀悎--鐘舵��, 搴撲綅鍙�={}锛屽簱浣嶇姸鎬�={}", wrkMast.getSourceLocNo(), sourceSta.getLocSts());
                     continue;
                 }
                 // 鑾峰彇鍫嗗灈鏈哄嚭搴撶珯淇℃伅
@@ -1937,9 +2626,9 @@
 
     /**
      * 鍑哄簱  ===>>  搴撲綅鍒板爢鍨涙満绔�
-     * 2022-12-03 TQS淇敼锛屽厛閬嶅巻鏌ヨ宸ヤ綔妗f墍鏈夌珯鐐瑰嚭搴撲换鍔IST锛屾牴鎹伐浣滄。浠诲姟鎺掑簭浼樺厛绾ч珮浜� 鏍规嵁鍫嗗灈鏈哄叆搴撶珯鐐规帓搴�
+     * 2024-01-15 浼樺寲鍙屽伐浣�
      */
-    public synchronized void locToCrnStn1(CrnSlave slave, CrnProtocol crnProtocol) {
+    public synchronized void locToCrnStn1(CrnSlave slave, CrnProtocol crnProtocol, Integer crnStation) {
         List<WrkMast> wrkMasts = wrkMastMapper.selectPakOutStep12(slave.getId());
         for (WrkMast wrkMast : wrkMasts) {
             if (wrkMast == null) {
@@ -1972,7 +2661,7 @@
             // 鑾峰彇婧愬簱浣嶄俊鎭�
             LocMast sourceSta = locMastService.selectById(wrkMast.getSourceLocNo());
             if (!sourceSta.getLocSts().equals("R") && !sourceSta.getLocSts().equals("P")) {
-                log.error("鍑哄簱鎿嶄綔搴撲綅鐘舵�佷笉绗﹀悎--鐘舵��, 搴撲綅鍙�={}锛屽簱浣嶇姸鎬�={}", wrkMast.getLocNo(), sourceSta.getLocSts());
+                log.error("鍑哄簱鎿嶄綔搴撲綅鐘舵�佷笉绗﹀悎--鐘舵��, 搴撲綅鍙�={}锛屽簱浣嶇姸鎬�={}", wrkMast.getSourceLocNo(), sourceSta.getLocSts());
                 continue;
             }
             // 鑾峰彇鍫嗗灈鏈哄嚭搴撶珯淇℃伅
@@ -2003,9 +2692,21 @@
                     && staProtocol.getWorkNo() == 0 && staProtocol.isOutEnable()) {
                 // 鍛戒护涓嬪彂鍖� --------------------------------------------------------------------------
 
-                // 鍫嗗灈鏈烘帶鍒惰繃婊�
-                if (!crnProtocol.getStatusType().equals(CrnStatusType.IDLE) || crnProtocol.getTaskNo() != 0) {
+
+                //宸ヤ綅
+                if (crnStation == 1){
+                    // 鍫嗗灈鏈烘帶鍒惰繃婊�
+                    if (!crnProtocol.getStatusType().equals(CrnStatusType.IDLE) || crnProtocol.getTaskNo() != 0) {
 //                        continue;
+                        break;
+                    }
+                }else if(crnStation == 2){
+                    // 鍫嗗灈鏈烘帶鍒惰繃婊�
+                    if (!crnProtocol.getStatusTypeTwo().equals(CrnStatusType.IDLE) || crnProtocol.getTaskNoTwo() != 0) {
+//                        continue;
+                        break;
+                    }
+                }else {
                     break;
                 }
 
@@ -2071,7 +2772,7 @@
                 crnCommand.setDestinationPosX(crnStn.getRow().shortValue());     // 鐩爣搴撲綅鎺�
                 crnCommand.setDestinationPosY(crnStn.getBay().shortValue());     // 鐩爣搴撲綅鍒�
                 crnCommand.setDestinationPosZ(crnStn.getLev().shortValue());     // 鐩爣搴撲綅灞�
-                if (!MessageQueue.offer(SlaveType.Crn, wrkMast.getCrnNo(), new Task(2, crnCommand))) {
+                if (!MessageQueue.offer(SlaveType.Crn, wrkMast.getCrnNo(), new Task(crnStation==1? 2:5, crnCommand))) {
                     log.error("鍫嗗灈鏈哄懡浠や笅鍙戝け璐ワ紝鍫嗗灈鏈哄彿={}锛屼换鍔℃暟鎹�={}", wrkMast.getCrnNo(), JSON.toJSON(crnCommand));
                 } else {
                     // 淇敼宸ヤ綔妗g姸鎬� 11.鐢熸垚鍑哄簱ID => 12.鍚婅溅鍑哄簱涓�
@@ -2091,7 +2792,7 @@
 
     /**
      * 鍑哄簱  ===>>  搴撲綅鍒板爢鍨涙満绔�
-     * 2022-12-03 TQS淇敼锛屽厛閬嶅巻鏌ヨ宸ヤ綔妗f墍鏈夌珯鐐瑰嚭搴撲换鍔IST锛屾牴鎹伐浣滄。浠诲姟鎺掑簭浼樺厛绾ч珮浜� 鏍规嵁鍫嗗灈鏈哄叆搴撶珯鐐规帓搴�
+     * 2024-01-15 鐓滄槦灏忔枡绠�
      */
     public synchronized void locToCrnStn1Single(CrnSlave slave, CrnProtocol crnProtocol) {
         List<WrkMastCrn> wrkMastCrnList = wrkMastCrnMapper.selectList(new EntityWrapper<WrkMastCrn>()
@@ -2120,7 +2821,7 @@
             // 鑾峰彇婧愬簱浣嶄俊鎭�
             LocMast sourceSta = locMastService.selectById(wrkMastCrn.getSourceLocNo());
             if (!sourceSta.getLocSts().equals("R") && !sourceSta.getLocSts().equals("P")) {
-                log.error("鍑哄簱鎿嶄綔搴撲綅鐘舵�佷笉绗﹀悎--鐘舵��, 搴撲綅鍙�={}锛屽簱浣嶇姸鎬�={}", wrkMastCrn.getLocNo(), sourceSta.getLocSts());
+                log.error("鍑哄簱鎿嶄綔搴撲綅鐘舵�佷笉绗﹀悎--鐘舵��, 搴撲綅鍙�={}锛屽簱浣嶇姸鎬�={}", wrkMastCrn.getSourceLocNo(), sourceSta.getLocSts());
                 continue;
             }
             // 鑾峰彇鍫嗗灈鏈哄嚭搴撶珯淇℃伅
@@ -2219,6 +2920,199 @@
                         }
                         break;
                     }
+                }
+            }
+        }
+
+    }
+
+    /**
+     * 鍑哄簱  ===>>  搴撲綅鍒板爢鍨涙満绔�
+     * 2024-06-05  鐓滄槦澶ф枡绠�
+     */
+    public synchronized void locToCrnStn1Big(CrnSlave slave, CrnProtocol crnProtocol, Integer crnStation) {
+        List<WrkMast> wrkMasts = wrkMastMapper.selectPakOutStep12(slave.getId());
+        for (WrkMast wrkMast : wrkMasts) {
+            if (wrkMast == null) {
+                continue;
+            }
+
+            CrnSlave.CrnStn crnStn = null;
+            for (CrnSlave.CrnStn crnStn1 : slave.getCrnOutStn()){
+                if(crnStn1.getStaNo().equals(wrkMast.getSourceStaNo())){
+                    crnStn = crnStn1;
+                    break;
+                }
+            }
+            if(Cools.isEmpty(crnStn)){
+                continue;
+            }
+
+            // 宸ヤ綔妗g姸鎬佸垽鏂�
+            if (wrkMast.getIoType() < 100 || wrkMast.getSourceStaNo() == null) {
+                log.error("鏌ヨ宸ヤ綔妗f暟鎹笉绗﹀悎鏉′欢--鍏ュ嚭绫诲瀷/绔欑偣, 宸ヤ綔鍙�={}锛屾簮搴撲綅={}锛屽叆鍑虹被鍨�={}", wrkMast.getWrkNo(), wrkMast.getSourceLocNo(), wrkMast.getIoType());
+                continue;
+            }
+            //閫�搴撴ā寮忚烦杩�118銆�119鍑哄簱浠诲姟
+            if (wrkMast.getStaNo()==118 || wrkMast.getStaNo()==119){
+                RgvOneSign rgvOneSign = rgvOneSignMapper.selectOneSign();
+                if (Cools.isEmpty(rgvOneSign) || rgvOneSign.getRgvOneSign()==1){
+                    continue;
+                }
+            }
+            // 鑾峰彇婧愬簱浣嶄俊鎭�
+            LocMast sourceSta = locMastService.selectById(wrkMast.getSourceLocNo());
+            if (!sourceSta.getLocSts().equals("R") && !sourceSta.getLocSts().equals("P")) {
+                log.error("鍑哄簱鎿嶄綔搴撲綅鐘舵�佷笉绗﹀悎--鐘舵��, 搴撲綅鍙�={}锛屽簱浣嶇姸鎬�={}", wrkMast.getSourceLocNo(), sourceSta.getLocSts());
+                continue;
+            }
+            // 鑾峰彇鍫嗗灈鏈哄嚭搴撶珯淇℃伅
+            SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, crnStn.getDevpPlcId());
+            StaProtocol staProtocol = devpThread.getStation().get(crnStn.getStaNo());
+            if (staProtocol == null) {
+                break;
+//                    continue;
+            } else {
+                staProtocol = staProtocol.clone();
+            }
+
+//            // 鍏ュ嚭搴撴ā寮忓垽鏂�
+//            if (devpThread.ioMode != IoModeType.PAKOUT_MODE) { continue; }
+            if (wrkMast.getStaNo() == 204 && devpThread.ioModeOf2F != IoModeType.PAKOUT_MODE) {
+                continue;
+            }
+
+            // 鏌ヨ绔欑偣璇︾粏淇℃伅
+            BasDevp staDetl = basDevpService.selectById(crnStn.getStaNo());
+            if (staDetl == null) {
+                log.error("鍑哄簱 ===>> 鍫嗗灈鏈虹珯鐐瑰湪鏁版嵁搴撲笉瀛樺湪, 绔欑偣缂栧彿={}", crnStn.getStaNo());
+                break;
+//                    continue;
+            }
+            // 鍒ゆ柇鍫嗗灈鏈哄嚭搴撶珯鐘舵��
+            if (staProtocol.isAutoing() && !staProtocol.isLoading() && staDetl.getCanouting() != null && staDetl.getCanouting().equals("Y")
+                    && staProtocol.getWorkNo() == 0 && staProtocol.isOutEnable()) {
+                // 鍛戒护涓嬪彂鍖� --------------------------------------------------------------------------
+
+
+                //宸ヤ綅
+                if (crnStation == 1){
+                    // 鍫嗗灈鏈烘帶鍒惰繃婊�
+                    if (!crnProtocol.getStatusType().equals(CrnStatusType.IDLE) || crnProtocol.getTaskNo() != 0) {
+//                        continue;
+                        break;
+                    }
+                    // 鍫嗗灈鏈烘帶鍒惰繃婊�
+                    if (!crnProtocol.getStatusTypeTwo().equals(CrnStatusType.IDLE) || crnProtocol.getTaskNoTwo() != 0) {
+//                        continue;
+                        break;
+                    }
+                }else if(crnStation == 2){
+                    // 鍫嗗灈鏈烘帶鍒惰繃婊�
+                    if (!crnProtocol.getStatusTypeTwo().equals(CrnStatusType.IDLE) || crnProtocol.getTaskNoTwo() != 0) {
+//                        continue;
+                        break;
+                    }
+                }else {
+                    break;
+                }
+
+                // 鍙屾繁搴撲綅涓旀祬搴撲綅鏈夎揣锛屽垯闇�鍏堝娴呭簱浣嶈繘琛屽簱浣嶇Щ杞�
+                if (Utils.isDeepLoc(slaveProperties, wrkMast.getSourceLocNo())) {
+                    String shallowLocNo = Utils.getShallowLoc(slaveProperties, wrkMast.getSourceLocNo());
+                    LocMast shallowLoc = locMastService.selectById(shallowLocNo);
+                    // O.绌哄簱浣嶃�丵.鎷f枡/鐩樼偣/骞舵澘鍐嶅叆搴撱�丼.鍏ュ簱棰勭害銆乆.绂佺敤 鐩存帴鎼紒
+                    if (shallowLoc.getLocSts().equals("P") || shallowLoc.getLocSts().equals("R")) {
+                        WrkMast waitWrkMast = wrkMastMapper.selectByLocNo(shallowLocNo);
+                        if (null == waitWrkMast) {
+                            log.error("{}搴撲綅寮傚父锛屾湭妫�绱㈠埌鐩稿簲宸ヤ綔妗o紒", shallowLocNo);
+                        } else {
+                            if (waitWrkMast.getWrkSts() == 11) {
+                                waitWrkMast.setIoPri(15D);
+                                waitWrkMast.setModiTime(new Date());
+                                if (wrkMastMapper.updateById(waitWrkMast) == 0) {
+                                    log.error("璋冩暣宸ヤ綔妗d紭鍏堢骇澶辫触锛佸伐浣滃彿={}", waitWrkMast.getWrkNo());
+                                }
+                                continue;
+                            } else {
+
+                            }
+                        }
+                    } else if (shallowLoc.getLocSts().equals("F") || shallowLoc.getLocSts().equals("D")) {
+//                            WrkMast waitWrkMast = wrkMastMapper.selectByLocNo(shallowLocNo);
+                        //2022-08-16 modify,涓嶆牴鎹畊pdmk鏍囪绉诲簱浠诲姟(瀹规槗琚彇娑堝鑷村牭濉�)锛屾煡璇㈠伐浣滄。鏄惁瀛樺湪浠诲姟
+                        WrkMast waitWrkMast = wrkMastMapper.selectByLocNo1(shallowLocNo);
+                        // 姝ゆ爣璁伴伩鍏嶅娆℃墽琛岀Щ搴撲换鍔�
+//                            if (Cools.isEmpty(wrkMast.getUpdMk()) || "N".equals(wrkMast.getUpdMk())
+//                                || Cools.isEmpty(waitWrkMast)) {
+                        if (Cools.isEmpty(waitWrkMast)) {
+                            wrkMast.setUpdMk("Y");
+                            wrkMastMapper.updateById(wrkMast);
+                            // 鐢熸垚宸ヤ綔妗�,灏嗘祬搴撲綅绉昏浆鍒版柊鐨勫簱浣嶄腑
+                            moveLocForDeepLoc(slave, shallowLoc);
+                        }
+                        log.error("{}浠诲姟鍑哄簱澶辫触锛屾祬搴撲綅鍫靛锛佹祬搴撲綅鍙�:{}", wrkMast.getWrkNo(), shallowLocNo);
+                        continue;
+                    } else if (shallowLoc.getLocSts().equals("Q") || shallowLoc.getLocSts().equals("S")) {
+                        WrkMast waitWrkMast = wrkMastMapper.selectByLocNo1(shallowLocNo);
+                        if (null != waitWrkMast && waitWrkMast.getWrkSts() == 4) {
+                            continue;
+                        }
+                    }
+                }
+
+                // 宸茬粡瀛樺湪鍚婅溅鎵ц浠诲姟鏃讹紝鍒欒繃婊�
+                if (wrkMastMapper.selectWorking(slave.getId()) != null) {
+                    break;
+//                        return;
+                }
+
+                // 宸茬粡瀛樺湪鍚婅溅鎵ц浠诲姟鏃讹紝鍒欒繃婊�
+                if (wrkMastSplitTwinMapper.selectCount(new EntityWrapper<WrkMastSplitTwin>().eq("wrk_no", wrkMast.getWrkNo().longValue())) != 0) {
+                    break;
+//                        return;
+                }
+
+                // 1.鍫嗗灈鏈哄紑濮嬬Щ鍔�
+                CrnCommand crnCommand = new CrnCommand();
+                crnCommand.setCrnNo(slave.getId()); // 鍫嗗灈鏈虹紪鍙�
+                crnCommand.setTaskNo(wrkMast.getWrkNo().shortValue()); // 宸ヤ綔鍙�
+                crnCommand.setAckFinish((short) 0);  // 浠诲姟瀹屾垚纭浣�
+                crnCommand.setTaskMode(CrnTaskModeType.SEPARATE_TAKE); // 浠诲姟妯″紡:  鍗曞彇璐�
+                crnCommand.setSourcePosX(sourceSta.getRow1().shortValue());     // 婧愬簱浣嶆帓
+                crnCommand.setSourcePosY(sourceSta.getBay1().shortValue());     // 婧愬簱浣嶅垪
+                crnCommand.setSourcePosZ(sourceSta.getLev1().shortValue());     // 婧愬簱浣嶅眰
+                crnCommand.setDestinationPosX((short)0);     // 鐩爣搴撲綅鎺�
+                crnCommand.setDestinationPosY((short)0);     // 鐩爣搴撲綅鍒�
+                crnCommand.setDestinationPosZ((short)0);     // 鐩爣搴撲綅灞�
+                if (!MessageQueue.offer(SlaveType.Crn, wrkMast.getCrnNo(), new Task(crnStation==1? 2:5, crnCommand))) {
+                    log.error("鍫嗗灈鏈哄懡浠や笅鍙戝け璐ワ紝鍫嗗灈鏈哄彿={}锛屼换鍔℃暟鎹�={}", wrkMast.getCrnNo(), JSON.toJSON(crnCommand));
+                } else {
+                    // 淇敼宸ヤ綔妗g姸鎬� 11.鐢熸垚鍑哄簱ID => 12.鍚婅溅鍑哄簱涓�
+                    Date now = new Date();
+                    wrkMast.setWrkSts(12L);
+                    wrkMast.setCrnStrTime(now);
+                    wrkMast.setModiTime(now);
+                    WrkMastSplitTwin wrkMastSplitTwin = new WrkMastSplitTwin(wrkMast,crnStation,now);
+                    wrkMastSplitTwin.setWrkSts(1);
+                    wrkMastSplitTwin.setWrkStart(wrkMast.getSourceLocNo());
+                    wrkMastSplitTwin.setWrkEnd(wrkMast.getSourceStaNo().toString());
+                    wrkMastSplitTwin.setStartRow(sourceSta.getRow1());
+                    wrkMastSplitTwin.setStartBay(sourceSta.getBay1());
+                    wrkMastSplitTwin.setStartLev(sourceSta.getLev1());
+                    wrkMastSplitTwin.setEndRow(crnStn.getRow());
+                    wrkMastSplitTwin.setEndBay(crnStn.getBay());
+                    wrkMastSplitTwin.setEndLev(crnStn.getLev());
+                    wrkMastSplitTwin.setWrkType(1);
+                    wrkMastSplitTwin.setIoType(2);
+                    if (wrkMastMapper.updateById(wrkMast) == 0) {
+                        log.error("淇敼宸ヤ綔妗g姸鎬� 11.鐢熸垚鍑哄簱ID => 12.鍚婅溅鍑哄簱涓� 澶辫触锛侊紒锛屽伐浣滃彿={}", wrkMast.getWrkNo());
+                    }
+
+                    if (wrkMastSplitTwinMapper.insert(wrkMastSplitTwin)==0){
+                        log.error("鍒涘缓 鍫嗗灈鏈烘墽琛屼换鍔� 澶辫触锛侊紒锛屽伐浣滃彿={}锛屽爢鍨涙満鍙�={}", wrkMast.getWrkNo(),wrkMast.getCrnNo());
+                    }
+                    break;
                 }
             }
         }
@@ -2438,44 +3332,69 @@
     /**
      * 鎵ц瀵瑰伐浣滄。鐨勫畬鎴愭搷浣�
      */
+
     public synchronized void storeFinished() {
         for (CrnSlave crn : slaveProperties.getCrn()) {
+            switch (crn.getId()){
+                case 1:
+                case 2:
+                    storeFinishedExecuteOne(crn);
+                    continue;
+                case 3:
+                case 4:
+                case 5:
+                    storeFinishedExecuteTwo(crn);
+                    continue;
+                case 6:
+                case 7:
+                    storeFinishedExecuteThree(crn);
+                    continue;
+                default:
+                    continue;
+            }
+        }
+    }
+    public synchronized boolean storeFinishedExecuteOne(CrnSlave crn) {
+        try{
             // 鑾峰彇鍫嗗灈鏈轰俊鎭�
             CrnThread crnThread = (CrnThread) SlaveConnection.get(SlaveType.Crn, crn.getId());
             CrnProtocol crnProtocol = crnThread.getCrnProtocol();
             if (crnProtocol == null) {
-                continue;
+                return false;
+            }
+            if (crnProtocol.modeType != CrnModeType.AUTO){
+                return false;
             }
             //  鐘舵�侊細绛夊緟纭 骞朵笖  浠诲姟瀹屾垚浣� = 1
             if (crnProtocol.statusType == CrnStatusType.WAITING && crnProtocol.getTaskNo() != 0) {
                 if (crnProtocol.getTaskNo() == 32222) {
                     // 鍫嗗灈鏈哄浣�
                     crnThread.setResetFlag(true);
-                } else if (crnProtocol.getCrnNo()<3) {
+                } else {
                     // 鑾峰彇鍏ュ簱寰呯‘璁ゅ伐浣滄。
                     WrkMastCrn wrkMastCrn = wrkMastCrnMapper.selectWrkNoOneAndTwo(crnProtocol.getTaskNo().intValue());
                     if (wrkMastCrn == null) {
                         log.error("鍫嗗灈鏈哄浜庣瓑寰呯‘璁や笖浠诲姟瀹屾垚鐘舵�侊紝浣嗘湭鎵惧埌宸ヤ綔妗c�傚爢鍨涙満鍙�={}锛屽伐浣滃彿={}", crn.getId(), crnProtocol.getTaskNo());
-                        continue;
+                        return false;
                     }
                     // 鑾峰彇鍏ュ簱寰呯‘璁ゅ伐浣滄。
                     WrkMast wrkMast = wrkMastMapper.selectPakInStep3(crnProtocol.getTaskNo().intValue());
                     if (wrkMast == null) {
                         log.error("鍫嗗灈鏈哄浜庣瓑寰呯‘璁や笖浠诲姟瀹屾垚鐘舵�侊紝浣嗘湭鎵惧埌宸ヤ綔妗c�傚爢鍨涙満鍙�={}锛屽伐浣滃彿={}", crn.getId(), crnProtocol.getTaskNo());
-                        continue;
+                        return false;
                     }
 
                     // 鑾峰彇鍏ュ簱寰呯‘璁ゅ伐浣滄。
                     WrkMast wrkMastOther = wrkMastMapper.selectPakInStep3(wrkMastCrn.getWrkNoTwo().intValue());
                     if (wrkMastOther == null) {
                         log.error("鍫嗗灈鏈哄浜庣瓑寰呯‘璁や笖浠诲姟瀹屾垚鐘舵�侊紝浣嗘湭鎵惧埌宸ヤ綔妗c�傚爢鍨涙満鍙�={}锛屽伐浣滃彿={}", crn.getId(), crnProtocol.getTaskNo());
-                        continue;
+                        return false;
                     }
                     // 鍏ュ簱 + 搴撲綅杞Щ  ==> 4.鍏ュ簱瀹屾垚
                     if (wrkMastCrn.getWrkSts() == 3 || (wrkMastCrn.getWrkSts() == 12 && wrkMastCrn.getIoType() == 11)) {
                         wrkMastCrn.setWrkSts(4L);
                     } else {
-                        continue;
+                        return false;
                     }
                     Date now = new Date();
                     wrkMastCrn.setModiTime(now);
@@ -2491,19 +3410,134 @@
                     if (wrkMastCrnMapper.updateById(wrkMastCrn) > 0 && wrkMastMapper.updateById(wrkMast) > 0 && wrkMastMapper.updateById(wrkMastOther) > 0 ) {
                         // 鍫嗗灈鏈哄浣�
                         crnThread.setResetFlag(true);
+                        return true;
                     }
+                }
+            }
+        }catch (Exception e){
+            log.error("鍫嗗灈鏈哄伐浣嶄竴瀹屾垚绛夊緟纭寮傚父,鍫嗗灈鏈哄彿={},寮傚父淇℃伅={},宸ヤ綅鍙�={}",crn.getId(),e.getMessage(),1);
+        }
+        return false;
+    }
+    public synchronized boolean storeFinishedExecuteTwo(CrnSlave crn) {
+        try{
+            // 鑾峰彇鍫嗗灈鏈轰俊鎭�
+            CrnThread crnThread = (CrnThread) SlaveConnection.get(SlaveType.Crn, crn.getId());
+            CrnProtocol crnProtocol = crnThread.getCrnProtocol();
+            if (crnProtocol == null) {
+                return false;
+            }
+            if (crnProtocol.modeType != CrnModeType.AUTO){
+                return false;
+            }
+            //  鐘舵�侊細绛夊緟纭 骞朵笖  浠诲姟瀹屾垚浣� = 1
+            if (crnProtocol.statusType == CrnStatusType.WAITING && crnProtocol.getTaskNo() != 0) {
+                if (crnProtocol.getTaskNo() == 32222) {
+                    // 鍫嗗灈鏈哄浣�
+                    crnThread.setResetFlag(true);
+                    return true;
                 } else {
                     // 鑾峰彇鍏ュ簱寰呯‘璁ゅ伐浣滄。
                     WrkMast wrkMast = wrkMastMapper.selectPakInStep3(crnProtocol.getTaskNo().intValue());
                     if (wrkMast == null) {
                         log.error("鍫嗗灈鏈哄浜庣瓑寰呯‘璁や笖浠诲姟瀹屾垚鐘舵�侊紝浣嗘湭鎵惧埌宸ヤ綔妗c�傚爢鍨涙満鍙�={}锛屽伐浣滃彿={}", crn.getId(), crnProtocol.getTaskNo());
-                        continue;
+                        return false;
                     }
                     // 鍏ュ簱 + 搴撲綅杞Щ  ==> 4.鍏ュ簱瀹屾垚
                     if (wrkMast.getWrkSts() == 3 || (wrkMast.getWrkSts() == 12 && wrkMast.getIoType() == 11)) {
                         wrkMast.setWrkSts(4L);
                     } else {
-                        continue;
+                        return false;
+                    }
+                    Date now = new Date();
+                    wrkMast.setCrnEndTime(now);
+                    wrkMast.setModiTime(now);
+                    // 鍫嗗灈鏈哄浣�
+                    List<WrkMastSplitTwin> wrkMastSplitTwinList = wrkMastSplitTwinMapper.getWrkMastSplitTwin(crn.getId(), 1, null, 2, 3);
+                    if (wrkMastSplitTwinList.size()!=1){
+                        log.error("鍫嗗灈鏈烘斁璐у畬鎴愮瓑寰呯‘璁ゅ紓甯�,鍫嗗灈鏈哄彿={},寮傚父淇℃伅={},宸ヤ綅鍙�={},宸ヤ綔绫诲瀷={},宸ヤ綔鐘舵��={}",crn.getId(),"涓嶅瓨鍦ㄦ垨鑰呭瓨鍦ㄥ绗斿彲鎵ц浣滀笟锛岃鍒犻櫎鏃犳晥浣滀笟锛侊紒锛�",1,2,3);
+                    }
+                    for (WrkMastSplitTwin wrkMastSplitTwin:wrkMastSplitTwinList){
+                        if (wrkMastSplitTwin.getWrkNo()!=wrkMast.getWrkNo().longValue()){
+                            log.error("鍫嗗灈鏈烘斁璐у畬鎴愮瓑寰呯‘璁ゅ紓甯�,鍫嗗灈鏈哄彿={},寮傚父淇℃伅={},宸ヤ綅鍙�={},宸ヤ綔绫诲瀷={},宸ヤ綔鐘舵��={},宸ヤ綔浠诲姟鍙�={},鎵ц浠诲姟鍙�={}",crn.getId(),"宸ヤ綔浠诲姟涓庢墽琛屼换鍔′笉鍖归厤",1,2,3,wrkMast.getWrkNo(),wrkMastSplitTwin.getWrkNo());
+                            return false;
+                        }
+                        wrkMastSplitTwin.setWrkSts(wrkMastSplitTwin.getWrkSts()+1);
+                        wrkMastSplitTwin.setUpdateTime(now);
+                        // 淇敼鎴愬姛鍚庡浣嶅爢鍨涙満
+                        if (wrkMastMapper.updateById(wrkMast) > 0) {
+                            // 淇敼鎴愬姛鍚庡浣嶅爢鍨涙満
+                            if (wrkMastSplitTwinService.updateById(wrkMastSplitTwin)) {
+                                // 鍫嗗灈鏈哄浣�
+                                crnThread.setResetFlag(true);
+                                return true;
+                            }else {
+                                log.error("鍫嗗灈鏈烘斁璐у畬鎴愮瓑寰呯‘璁ゅ紓甯�,鍫嗗灈鏈哄彿={},寮傚父淇℃伅={},宸ヤ綅鍙�={},宸ヤ綔绫诲瀷={},宸ヤ綔鐘舵��={}",crn.getId(),"淇敼鎵ц妗f澶辫触",1,2,3);
+                            }
+                        }else {
+                            log.error("鍫嗗灈鏈烘斁璐у畬鎴愮瓑寰呯‘璁ゅ紓甯�,鍫嗗灈鏈哄彿={},寮傚父淇℃伅={},宸ヤ綅鍙�={},宸ヤ綔绫诲瀷={},宸ヤ綔鐘舵��={}",crn.getId(),"淇敼宸ヤ綔妗f澶辫触锛�",1,2,3);
+                        }
+                    }
+                    return false;
+                }
+            }else if (crnProtocol.statusType == CrnStatusType.SEPARATE_WAITING && crnProtocol.getTaskNo() != 0  && crnProtocol.getLoaded()==1){
+                if (crnProtocol.getTaskNo() == 32222) {
+                    // 鍫嗗灈鏈哄浣�
+                    crnThread.setResetFlag(true);
+                    return true;
+                } else {
+                    List<WrkMastSplitTwin> wrkMastSplitTwinList = wrkMastSplitTwinMapper.getWrkMastSplitTwin(crn.getId(), 1, null, 1, 1);
+                    if (wrkMastSplitTwinList.size()!=1){
+                        log.error("鍫嗗灈鏈烘斁璐у畬鎴愮瓑寰呯‘璁ゅ紓甯�,鍫嗗灈鏈哄彿={},寮傚父淇℃伅={},宸ヤ綅鍙�={},宸ヤ綔绫诲瀷={},宸ヤ綔鐘舵��={}",crn.getId(),"涓嶅瓨鍦ㄦ垨鑰呭瓨鍦ㄥ绗斿彲鎵ц浣滀笟锛岃鍒犻櫎鏃犳晥浣滀笟锛侊紒锛�",1,1,1);
+                    }
+                    for (WrkMastSplitTwin wrkMastSplitTwin:wrkMastSplitTwinList){
+                        Date now = new Date();
+                        wrkMastSplitTwin.setWrkSts(wrkMastSplitTwin.getWrkSts()+1);
+                        wrkMastSplitTwin.setUpdateTime(now);
+                        // 淇敼鎴愬姛鍚庡浣嶅爢鍨涙満
+                        if (wrkMastSplitTwinService.updateById(wrkMastSplitTwin)) {
+                            // 鍫嗗灈鏈哄浣�
+                            crnThread.setResetFlag(true);
+                            return true;
+                        }else {
+                            log.error("鍫嗗灈鏈烘斁璐у畬鎴愮瓑寰呯‘璁ゅ紓甯�,鍫嗗灈鏈哄彿={},寮傚父淇℃伅={},宸ヤ綅鍙�={},宸ヤ綔绫诲瀷={},宸ヤ綔鐘舵��={}",crn.getId(),"淇敼鎵ц妗f澶辫触",1,2,3);
+                        }
+                    }
+                }
+            }
+        }catch (Exception e){
+            log.error("鍫嗗灈鏈哄伐浣嶄竴瀹屾垚绛夊緟纭寮傚父,鍫嗗灈鏈哄彿={},寮傚父淇℃伅={},宸ヤ綅鍙�={}",crn.getId(),e.getMessage(),1);
+        }
+        return false;
+    }
+    public synchronized boolean storeFinishedExecuteThree(CrnSlave crn) {
+        try{
+            // 鑾峰彇鍫嗗灈鏈轰俊鎭�
+            CrnThread crnThread = (CrnThread) SlaveConnection.get(SlaveType.Crn, crn.getId());
+            CrnProtocol crnProtocol = crnThread.getCrnProtocol();
+            if (crnProtocol == null) {
+                return false;
+            }
+            if (crnProtocol.modeType != CrnModeType.AUTO){
+                return false;
+            }
+            //  鐘舵�侊細绛夊緟纭 骞朵笖  浠诲姟瀹屾垚浣� = 1
+            if (crnProtocol.statusType == CrnStatusType.WAITING && crnProtocol.getTaskNo() != 0) {
+                if (crnProtocol.getTaskNo() == 32222) {
+                    // 鍫嗗灈鏈哄浣�
+                    crnThread.setResetFlag(true);
+                } else {
+                    // 鑾峰彇鍏ュ簱寰呯‘璁ゅ伐浣滄。
+                    WrkMast wrkMast = wrkMastMapper.selectPakInStep3(crnProtocol.getTaskNo().intValue());
+                    if (wrkMast == null) {
+                        log.error("鍫嗗灈鏈哄浜庣瓑寰呯‘璁や笖浠诲姟瀹屾垚鐘舵�侊紝浣嗘湭鎵惧埌宸ヤ綔妗c�傚爢鍨涙満鍙�={}锛屽伐浣滃彿={}", crn.getId(), crnProtocol.getTaskNo());
+                        return false;
+                    }
+                    // 鍏ュ簱 + 搴撲綅杞Щ  ==> 4.鍏ュ簱瀹屾垚
+                    if (wrkMast.getWrkSts() == 3 || (wrkMast.getWrkSts() == 12 && wrkMast.getIoType() == 11)) {
+                        wrkMast.setWrkSts(4L);
+                    } else {
+                        return false;
                     }
                     Date now = new Date();
                     wrkMast.setCrnEndTime(now);
@@ -2512,11 +3546,121 @@
                     if (wrkMastMapper.updateById(wrkMast) > 0) {
                         // 鍫嗗灈鏈哄浣�
                         crnThread.setResetFlag(true);
+                        return true;
                     }
                 }
+            }
+        }catch (Exception e){
+            log.error("鍫嗗灈鏈哄伐浣嶄竴瀹屾垚绛夊緟纭寮傚父,鍫嗗灈鏈哄彿={},寮傚父淇℃伅={},宸ヤ綅鍙�={}",crn.getId(),e.getMessage(),1);
+        }
+        return false;
+    }
 
+    /**
+     * 鎵ц瀵瑰伐浣滄。鐨勫畬鎴愭搷浣�
+     */
+    public synchronized void storeFinishedTwo() {
+        for (CrnSlave crn : slaveProperties.getCrn()) {
+            switch (crn.getId()){
+                case 3:
+                case 4:
+                case 5:
+                    storeFinishedTwoExecute(crn);
+                    continue;
+                default:
+                    continue;
             }
         }
+    }
+
+    public synchronized boolean storeFinishedTwoExecute(CrnSlave crn) {
+        try{
+            // 鑾峰彇鍫嗗灈鏈轰俊鎭�
+            CrnThread crnThread = (CrnThread) SlaveConnection.get(SlaveType.Crn, crn.getId());
+            CrnProtocol crnProtocol = crnThread.getCrnProtocol();
+            if (crnProtocol == null) {
+                return false;
+            }
+            if (crnProtocol.modeType != CrnModeType.AUTO){
+                return false;
+            }
+            //  鐘舵�侊細绛夊緟纭 骞朵笖  浠诲姟瀹屾垚浣� = 1
+            if (crnProtocol.statusTypeTwo == CrnStatusType.WAITING && crnProtocol.getTaskNoTwo() != 0) {
+                if (crnProtocol.getTaskNoTwo() == 32222) {
+                    // 鍫嗗灈鏈哄浣�
+                    crnThread.setResetFlagTwo(true);
+                } else {
+                    // 鑾峰彇鍏ュ簱寰呯‘璁ゅ伐浣滄。
+                    WrkMast wrkMast = wrkMastMapper.selectPakInStep3(crnProtocol.getTaskNoTwo().intValue());
+                    if (wrkMast == null) {
+                        log.error("鍫嗗灈鏈哄浜庣瓑寰呯‘璁や笖浠诲姟瀹屾垚鐘舵�侊紝浣嗘湭鎵惧埌宸ヤ綔妗c�傚爢鍨涙満鍙�={}锛屽伐浣滃彿={}", crn.getId(), crnProtocol.getTaskNoTwo());
+                        return false;
+                    }
+                    // 鍏ュ簱 + 搴撲綅杞Щ  ==> 4.鍏ュ簱瀹屾垚
+                    if (wrkMast.getWrkSts() == 3 || (wrkMast.getWrkSts() == 12 && wrkMast.getIoType() == 11)) {
+                        wrkMast.setWrkSts(4L);
+                    } else {
+                        return false;
+                    }
+                    Date now = new Date();
+                    wrkMast.setCrnEndTime(now);
+                    wrkMast.setModiTime(now);
+                    // 鍫嗗灈鏈哄浣�
+                    List<WrkMastSplitTwin> wrkMastSplitTwinList = wrkMastSplitTwinMapper.getWrkMastSplitTwin(crn.getId(), 2, null, 2, 3);
+                    if (wrkMastSplitTwinList.size()!=1){
+                        log.error("鍫嗗灈鏈哄彇璐у畬鎴愮瓑寰呯‘璁ゅ紓甯�,鍫嗗灈鏈哄彿={},寮傚父淇℃伅={},宸ヤ綅鍙�={},宸ヤ綔绫诲瀷={},宸ヤ綔鐘舵��={}",crn.getId(),"涓嶅瓨鍦ㄦ垨鑰呭瓨鍦ㄥ绗斿彲鎵ц浣滀笟锛岃鍒犻櫎鏃犳晥浣滀笟锛侊紒锛�",2,2,3);
+                    }
+                    for (WrkMastSplitTwin wrkMastSplitTwin:wrkMastSplitTwinList){
+                        if (wrkMastSplitTwin.getWrkNo()!=wrkMast.getWrkNo().longValue()){
+                            log.error("鍫嗗灈鏈哄彇璐у畬鎴愮瓑寰呯‘璁ゅ紓甯�,鍫嗗灈鏈哄彿={},寮傚父淇℃伅={},宸ヤ綅鍙�={},宸ヤ綔绫诲瀷={},宸ヤ綔鐘舵��={},宸ヤ綔浠诲姟鍙�={},鎵ц浠诲姟鍙�={}",crn.getId(),"宸ヤ綔浠诲姟涓庢墽琛屼换鍔′笉鍖归厤",1,2,3,wrkMast.getWrkNo(),wrkMastSplitTwin.getWrkNo());
+                            return false;
+                        }
+                        wrkMastSplitTwin.setWrkSts(wrkMastSplitTwin.getWrkSts()+1);
+                        wrkMastSplitTwin.setUpdateTime(now);
+                        // 淇敼鎴愬姛鍚庡浣嶅爢鍨涙満
+                        if (wrkMastMapper.updateById(wrkMast) > 0) {
+                            // 淇敼鎴愬姛鍚庡浣嶅爢鍨涙満
+                            if (wrkMastSplitTwinService.updateById(wrkMastSplitTwin)) {
+                                // 鍫嗗灈鏈哄浣�
+                                crnThread.setResetFlagTwo(true);
+                                return true;
+                            }else {
+                                log.error("鍫嗗灈鏈哄彇璐у畬鎴愮瓑寰呯‘璁ゅ紓甯�,鍫嗗灈鏈哄彿={},寮傚父淇℃伅={},宸ヤ綅鍙�={},宸ヤ綔绫诲瀷={},宸ヤ綔鐘舵��={}",crn.getId(),"淇敼鎵ц妗f澶辫触",2,2,3);
+                            }
+                        }else {
+                            log.error("鍫嗗灈鏈哄彇璐у畬鎴愮瓑寰呯‘璁ゅ紓甯�,鍫嗗灈鏈哄彿={},寮傚父淇℃伅={},宸ヤ綅鍙�={},宸ヤ綔绫诲瀷={},宸ヤ綔鐘舵��={}",crn.getId(),"淇敼宸ヤ綔妗f澶辫触锛�",2,2,3);
+                        }
+                    }
+                    return false;
+                }
+            }else if (crnProtocol.statusTypeTwo == CrnStatusType.SEPARATE_WAITING && crnProtocol.getTaskNoTwo() != 0  && crnProtocol.getLoadedTwo()==1){
+                if (crnProtocol.getTaskNoTwo() == 32222) {
+                    // 鍫嗗灈鏈哄浣�
+                    crnThread.setResetFlagTwo(true);
+                } else {
+                    List<WrkMastSplitTwin> wrkMastSplitTwinList = wrkMastSplitTwinMapper.getWrkMastSplitTwin(crn.getId(), 2, null, 1, 1);
+                    if (wrkMastSplitTwinList.size()!=1){
+                        log.error("鍫嗗灈鏈哄彇璐у畬鎴愮瓑寰呯‘璁ゅ紓甯�,鍫嗗灈鏈哄彿={},寮傚父淇℃伅={},宸ヤ綅鍙�={},宸ヤ綔绫诲瀷={},宸ヤ綔鐘舵��={}",crn.getId(),"涓嶅瓨鍦ㄦ垨鑰呭瓨鍦ㄥ绗斿彲鎵ц浣滀笟锛岃鍒犻櫎鏃犳晥浣滀笟锛侊紒锛�",2,1,1);
+                    }
+                    for (WrkMastSplitTwin wrkMastSplitTwin:wrkMastSplitTwinList){
+                        Date now = new Date();
+                        wrkMastSplitTwin.setWrkSts(wrkMastSplitTwin.getWrkSts()+1);
+                        wrkMastSplitTwin.setUpdateTime(now);
+                        // 淇敼鎴愬姛鍚庡浣嶅爢鍨涙満
+                        if (wrkMastSplitTwinService.updateById(wrkMastSplitTwin)) {
+                            // 鍫嗗灈鏈哄浣�
+                            crnThread.setResetFlagTwo(true);
+                            return true;
+                        }else {
+                            log.error("鍫嗗灈鏈哄彇璐у畬鎴愮瓑寰呯‘璁ゅ紓甯�,鍫嗗灈鏈哄彿={},寮傚父淇℃伅={},宸ヤ綅鍙�={},宸ヤ綔绫诲瀷={},宸ヤ綔鐘舵��={}",crn.getId(),"淇敼鎵ц妗f澶辫触",2,2,3);
+                        }
+                    }
+                }
+            }
+        }catch (Exception e){
+            log.error("鍫嗗灈鏈哄伐浣嶄簩瀹屾垚绛夊緟纭寮傚父,鍫嗗灈鏈哄彿={},寮傚父淇℃伅={},宸ヤ綅鍙�={}",crn.getId(),e.getMessage(),2);
+        }
+        return false;
     }
 
     /**
@@ -2876,6 +4020,62 @@
                             }
                         } else {
                             log.error("璇锋眰鎺ュ彛澶辫触锛侊紒锛乽rl锛歿}锛況equest锛歿}锛況esponse锛歿}", wmsUrl + "/rpc/pakin/pair/station/single/loc/v1", JSON.toJSONString(param), response);
+                        }
+                    } catch (Exception e) {
+                        e.printStackTrace();
+                        TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
+                    }
+                }
+            }
+        }
+    }
+    /**
+     * 绌烘爤鏉垮垵濮嬪寲鍏ュ簱,鍙夎溅鍏ュ簱绔欐斁璐�
+     */
+    public synchronized void storeEmptyPltLarge() {
+        for (DevpSlave devp : slaveProperties.getDevp()) {
+            // 閬嶅巻绌烘澘鍏ュ簱鍙�
+            for (DevpSlave.Sta emptyInSta : devp.getEmptyInLargeSta()) {
+                // 鑾峰彇绌烘澘鍏ュ簱绔欎俊鎭�
+                SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, devp.getId());
+                StaProtocol staProtocol = devpThread.getStation().get(emptyInSta.getStaNo());
+                if (staProtocol == null) {
+                    continue;
+                } else {
+                    staProtocol = staProtocol.clone();
+                }
+
+                // 绔欑偣鏉′欢鍒ゆ柇
+                if (staProtocol.isAutoing() && staProtocol.isLoading() && staProtocol.isInEnable()
+                        && staProtocol.isEmptyMk() && ((staProtocol.getWorkNo() > 32222 && staProtocol.getWorkNo() <= 63333) || staProtocol.getWorkNo()==0)  && staProtocol.isPakMk()) {
+
+                    try {
+                        LocTypeDto locTypeDto = new LocTypeDto(staProtocol);
+
+                        SearchLocParam param = new SearchLocParam();
+                        param.setIoType(10);
+                        param.setSourceStaNo(emptyInSta.getStaNo());
+                        param.setLocType1(locTypeDto.getLocType1());
+                        String response = new HttpHandler.Builder()
+                                .setUri(wmsUrl)
+                                .setPath("/rpc/pakin/loc/v1")
+                                .setJson(JSON.toJSONString(param))
+                                .build()
+                                .doPost();
+                        JSONObject jsonObject = JSON.parseObject(response);
+                        if (jsonObject.getInteger("code").equals(200)) {
+                            StartupDto dto = jsonObject.getObject("data", StartupDto.class);
+
+                            // 鏇存柊绔欑偣淇℃伅 涓� 涓嬪彂plc鍛戒护
+                            staProtocol.setWorkNo(dto.getWorkNo());
+                            staProtocol.setStaNo(dto.getStaNo());
+                            devpThread.setPakMk(staProtocol.getSiteId(), false);
+                            boolean result = MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol));
+                            if (!result) {
+                                throw new CoolException("鏇存柊plc绔欑偣淇℃伅澶辫触");
+                            }
+                        } else {
+                            log.error("璇锋眰鎺ュ彛澶辫触锛侊紒锛乽rl锛歿}锛況equest锛歿}锛況esponse锛歿}", wmsUrl + "/rpc/pakin/loc/v1", JSON.toJSONString(param), response);
                         }
                     } catch (Exception e) {
                         e.printStackTrace();
@@ -4257,6 +5457,8 @@
                         case 6:////鎻愬崌
 //                            signWork = qwe();
                             break;
+                        case 7:////浣嶇Щ
+                            break;
                         default:
                             break;
                     }
@@ -4279,6 +5481,8 @@
                                 break;
                             case 6:////鎻愬崌
 //                            signWork = rgvRunWrkMastEmptyStaPut();
+                                break;
+                            case 7:////浣嶇Щ
                                 break;
                             default:
                                 break;
@@ -4996,6 +6200,10 @@
      * 灏忚溅鍦板浘鏇存柊  鏇存柊閿�
      * */
     public synchronized boolean rgvMapUpdate(BasRgvMap basRgvMapCurrent,Integer staStart,Integer staEnd){
+        if (true){
+            basRgvMapMapper.updateById(basRgvMapCurrent);
+            return true;
+        }
 
 //        List<Integer> integers = RouteUtils.RouteMapCurrentFar(basRgvMapCurrent.getNowRoute(),staStart,staEnd, basRgvMapCurrent.getLockStartRoute());
         //鏇存柊褰撳墠灏忚溅閿�
@@ -5019,4 +6227,172 @@
         }
     }
 
+    /**
+     * 鍏ュ嚭搴�  ===>>  灏忚溅浣滀笟涓嬪彂
+     */
+    public synchronized boolean steIoExecute(Integer sign) {
+        return false;
+    }
+    /**
+     * 鍏ュ嚭搴�  ===>>  鍫嗗灈鏈哄叆鍑哄簱浣滀笟涓嬪彂
+     */
+    public synchronized void crnIoExecuteTwoExecute(Integer i) {
+        for (CrnSlave crn : slaveProperties.getCrn()) {
+            try{
+                switch (crn.getId()){
+                    case 3:
+                    case 4:
+                    case 5:
+                        crnWrkMastSplitTwinExecute(crn,i);
+                        continue;
+                    default:
+                        continue;
+                }
+            }catch (Exception e){
+                log.error("鍫嗗灈鏈哄嚭鍏ュ簱鎵ц浠诲姟涓嬪彂鎶ラ敊,鍫嗗灈鏈哄彿={},寮傚父淇℃伅={}",crn.getId(),e.getMessage());
+            }
+        }
+    }
+
+
+    public synchronized boolean crnWrkMastSplitTwinExecute(CrnSlave crn,Integer i){
+        try{
+            // 鑾峰彇鍫嗗灈鏈轰俊鎭�
+            CrnThread crnThread = (CrnThread) SlaveConnection.get(SlaveType.Crn, crn.getId());
+            CrnProtocol crnProtocol = crnThread.getCrnProtocol();
+            if (crnProtocol == null) {
+                return false;
+            }
+            BasCrnp basCrnp = basCrnpService.selectById(crn.getId());
+            if (basCrnp == null) {
+                log.error("{}鍙峰爢鍨涙満灏氭湭鍦ㄦ暟鎹簱杩涜缁存姢锛�", crn.getId());
+                return false;
+            }
+
+
+            int[] sign = new int[]{0,0};
+            // 鍙湁褰撳爢鍨涙満鑷姩鏃舵墠缁х画鎵ц
+            if (crnProtocol.getModeType() == CrnModeType.AUTO) {
+                // 鍙湁褰撳爢鍨涙満宸ヤ綅1鍙栬揣鎴栬�呮湁鐗� 骞朵笖 宸ヤ綅2鏃犱换鍔℃椂鎵嶇户缁墽琛�
+                switch (i){
+                    case 1:
+                        if (crnProtocol.getStatusType() == CrnStatusType.IDLE
+                                && crnProtocol.getTaskNo() == 0
+                                && crnProtocol.getLoaded() == 0
+                                && crnProtocol.getForkPos() == 0) {
+                            sign[0] = 1;
+                            sign[1] = 1;
+                        }
+                        break;
+                    case 2:
+                        if (crnProtocol.getStatusType() == CrnStatusType.SEPARATE_IDLE
+                                && crnProtocol.getTaskNo() == 0
+                                && crnProtocol.getLoaded() == 1
+                                && crnProtocol.getForkPos() == 0) {
+                            sign[0] = 2;
+                            sign[1] = 1;
+                        }
+                        break;
+                    case 3:
+                        if (crnProtocol.getStatusTypeTwo() == CrnStatusType.IDLE
+                                && crnProtocol.getTaskNoTwo() == 0
+                                && crnProtocol.getLoadedTwo() == 0
+                                && crnProtocol.getForkPosTwo() == 0){
+                            sign[0] = 1;
+                            sign[1] = 2;
+                        }
+                        break;
+                    case 4:
+                        if (crnProtocol.getStatusTypeTwo() == CrnStatusType.SEPARATE_IDLE
+                                && crnProtocol.getTaskNoTwo() == 0
+                                && crnProtocol.getLoadedTwo() == 1
+                                && crnProtocol.getForkPosTwo() == 0){
+                            sign[0] = 2;
+                            sign[1] = 2;
+                        }
+                        break;
+                    default:
+                }
+            }
+
+            if (sign[0]!=0){
+                List<WrkMastSplitTwin> wrkMastSplitTwinList = wrkMastSplitTwinService.getWrkMastSplitTwin(crn.getId(),sign[1],null,sign[0],0);
+                if (wrkMastSplitTwinList.size()>1){
+                    log.error("鍫嗗灈鏈哄嚭鍏ュ簱涓嬪彂寮傚父,鍫嗗灈鏈哄彿={},寮傚父淇℃伅={},宸ヤ綅鍙�={},宸ヤ綔绫诲瀷={}",crn.getId(),"瀛樺湪澶氱瑪鍙墽琛屼綔涓氾紝璇峰垹闄ゆ棤鏁堜綔涓氾紒锛侊紒",sign[1],sign[0]);
+                    return false;
+                }
+                for (WrkMastSplitTwin wrkMastSplitTwin:wrkMastSplitTwinList){
+                    boolean ack = sign[0] == 1 ? crnExecuteTakeFull(crn.getId(), wrkMastSplitTwin, sign[1]) : crnExecutePutFull(crn.getId(), wrkMastSplitTwin, sign[1]);
+                    if (ack){
+                        wrkMastSplitTwin.setWrkSts(wrkMastSplitTwin.getWrkType()==1? 1:3);
+                        wrkMastSplitTwinService.updateById(wrkMastSplitTwin);
+                    }else {
+                        log.error("鍫嗗灈鏈哄嚭鍏ュ簱涓嬪彂鎶ラ敊,鍫嗗灈鏈哄彿={},寮傚父淇℃伅={}",crn.getId(),"涓嬪彂浠诲姟杩斿洖鍊间负锛�"+ack);
+                    }
+                }
+            }
+        }catch (Exception e){
+            log.error("鍫嗗灈鏈哄嚭鍏ュ簱涓嬪彂鎶ラ敊,鍫嗗灈鏈哄彿={},寮傚父淇℃伅={}",crn.getId(),e.getMessage());
+        }
+        return false;
+    }
+
+    /*
+     * 鍫嗗灈鏈哄彇璐ц嚦宸ヤ綅浠诲姟
+     * */
+    public synchronized boolean crnExecuteTakeFull(Integer crnNo,WrkMastSplitTwin wrkMastSplitTwin, Integer crnStation){
+        try{
+            //  鍛戒护涓嬪彂鍖� --------------------------------------------------------------------------
+            // 1.鍫嗗灈鏈哄紑濮嬬Щ鍔�
+            CrnCommand crnCommand = new CrnCommand();
+            crnCommand.setCrnNo(crnNo); // 鍫嗗灈鏈虹紪鍙�
+            crnCommand.setTaskNo(wrkMastSplitTwin.getWrkNo().shortValue()); // 宸ヤ綔鍙�
+            crnCommand.setAckFinish((short) 0);  // 浠诲姟瀹屾垚纭浣�
+            crnCommand.setTaskMode(CrnTaskModeType.SEPARATE_TAKE); // 浠诲姟妯″紡:  鍗曞彇璐�
+            crnCommand.setSourcePosX(wrkMastSplitTwin.getStartRow().shortValue());     // 婧愬簱浣嶆帓
+            crnCommand.setSourcePosY(wrkMastSplitTwin.getStartBay().shortValue());     // 婧愬簱浣嶅垪
+            crnCommand.setSourcePosZ(wrkMastSplitTwin.getStartLev().shortValue());     // 婧愬簱浣嶅眰
+            crnCommand.setDestinationPosX((short)0);     // 鐩爣搴撲綅鎺�
+            crnCommand.setDestinationPosY((short)0);     // 鐩爣搴撲綅鍒�
+            crnCommand.setDestinationPosZ((short)0);     // 鐩爣搴撲綅灞�
+            if (!MessageQueue.offer(SlaveType.Crn, wrkMastSplitTwin.getCrnNo(), new Task(crnStation==1? 2:5, crnCommand))) {
+                log.error("鍫嗗灈鏈哄懡浠や笅鍙戝け璐ワ紝鍫嗗灈鏈哄彿={}锛屼换鍔℃暟鎹�={}", wrkMastSplitTwin.getCrnNo(), JSON.toJSON(crnCommand));
+                return false;
+            } else {
+                return true;
+            }
+        }catch (Exception e){
+            return false;
+        }
+    }
+
+    /*
+     * 鍫嗗灈鏈烘斁璐ц揣鑷冲嚭搴撶珯鐐逛换鍔�
+     * */
+    public synchronized boolean crnExecutePutFull(Integer crnNo,WrkMastSplitTwin wrkMastSplitTwin, Integer crnStation){
+        try{
+            //  鍛戒护涓嬪彂鍖� --------------------------------------------------------------------------
+            // 1.鍫嗗灈鏈哄紑濮嬬Щ鍔�
+            CrnCommand crnCommand = new CrnCommand();
+            crnCommand.setCrnNo(crnNo); // 鍫嗗灈鏈虹紪鍙�
+            crnCommand.setTaskNo(wrkMastSplitTwin.getWrkNo().shortValue()); // 宸ヤ綔鍙�
+            crnCommand.setAckFinish((short) 0);  // 浠诲姟瀹屾垚纭浣�
+            crnCommand.setTaskMode(CrnTaskModeType.SEPARATE_PUT); // 浠诲姟妯″紡:  鍗曟斁璐�
+            crnCommand.setSourcePosX((short)0);     // 婧愬簱浣嶆帓
+            crnCommand.setSourcePosY((short)0);     // 婧愬簱浣嶅垪
+            crnCommand.setSourcePosZ((short)0);     // 婧愬簱浣嶅眰
+            crnCommand.setDestinationPosX(wrkMastSplitTwin.getEndRow().shortValue());     // 鐩爣搴撲綅鎺�
+            crnCommand.setDestinationPosY(wrkMastSplitTwin.getEndBay().shortValue());     // 鐩爣搴撲綅鍒�
+            crnCommand.setDestinationPosZ(wrkMastSplitTwin.getEndLev().shortValue());     // 鐩爣搴撲綅灞�
+            if (!MessageQueue.offer(SlaveType.Crn, wrkMastSplitTwin.getCrnNo(), new Task(crnStation==1? 2:5, crnCommand))) {
+                log.error("鍫嗗灈鏈哄懡浠や笅鍙戝け璐ワ紝鍫嗗灈鏈哄彿={}锛屼换鍔℃暟鎹�={}", wrkMastSplitTwin.getCrnNo(), JSON.toJSON(crnCommand));
+                return false;
+            } else {
+                return true;
+            }
+        }catch (Exception e){
+            return false;
+        }
+    }
+
 }

--
Gitblit v1.9.1