From e3a413d3410621a7abbec52e48b3ff51b89d9cca Mon Sep 17 00:00:00 2001
From: lsh <lsh@163.com>
Date: 星期五, 07 六月 2024 15:08:31 +0800
Subject: [PATCH] #

---
 src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java |  836 +++++++++++++++++++++++++++++++++++++++++++++++------------
 1 files changed, 662 insertions(+), 174 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 e77aeab..5a41296 100644
--- a/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
@@ -109,6 +109,7 @@
 
     @Value("${wms.url}")
     private String wmsUrl;
+    private WrkMastSplitTwinServiceImpl wrkMastSplitTwinService;
 
     /**
      * 缁勬墭
@@ -1231,131 +1232,255 @@
         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(), 1, null, 2, 3);
+                        if (!wrkMastSplitTwinList.isEmpty() && wrkMastSplitTwinList.size()!=1){
+                            log.error("鍫嗗灈鏈烘斁璐у畬鎴愮瓑寰呯‘璁ゅ紓甯�,鍫嗗灈鏈哄彿={},寮傚父淇℃伅={},宸ヤ綅鍙�={},宸ヤ綔绫诲瀷={},宸ヤ綔鐘舵��={}",wrkMast.getCrnNo(),"瀛樺湪澶氱瑪鍙墽琛屼綔涓氾紝璇峰垹闄ゆ棤鏁堜綔涓氾紒锛侊紒",1,2,3);
+                        }
+                        for (WrkMastSplitTwin wrkMastSplitTwin:wrkMastSplitTwinList){
+                            if (wrkMastSplitTwin.getWrkNo()!=wrkMast.getWrkNo().longValue()){
+                                log.error("鍫嗗灈鏈烘斁璐у畬鎴愮瓑寰呯‘璁ゅ紓甯�,鍫嗗灈鏈哄彿={},寮傚父淇℃伅={},宸ヤ綅鍙�={},宸ヤ綔绫诲瀷={},宸ヤ綔鐘舵��={},宸ヤ綔浠诲姟鍙�={},鎵ц浠诲姟鍙�={}",wrkMast.getCrnNo(),"宸ヤ綔浠诲姟涓庢墽琛屼换鍔′笉鍖归厤",1,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澶辫触",1,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(), 1, null, 2, 3);
+                        if (!wrkMastSplitTwinList.isEmpty() && wrkMastSplitTwinList.size()!=1){
+                            log.error("鍫嗗灈鏈烘斁璐у畬鎴愮瓑寰呯‘璁ゅ紓甯�,鍫嗗灈鏈哄彿={},寮傚父淇℃伅={},宸ヤ綅鍙�={},宸ヤ綔绫诲瀷={},宸ヤ綔鐘舵��={}",wrkMast.getCrnNo(),"瀛樺湪澶氱瑪鍙墽琛屼綔涓氾紝璇峰垹闄ゆ棤鏁堜綔涓氾紒锛侊紒",1,2,3);
+                        }
+                        for (WrkMastSplitTwin wrkMastSplitTwin:wrkMastSplitTwinList){
+                            if (wrkMastSplitTwin.getWrkNo()!=wrkMast.getWrkNo().longValue()){
+                                log.error("鍫嗗灈鏈烘斁璐у畬鎴愮瓑寰呯‘璁ゅ紓甯�,鍫嗗灈鏈哄彿={},寮傚父淇℃伅={},宸ヤ綅鍙�={},宸ヤ綔绫诲瀷={},宸ヤ綔鐘舵��={},宸ヤ綔浠诲姟鍙�={},鎵ц浠诲姟鍙�={}",wrkMast.getCrnNo(),"宸ヤ綔浠诲姟涓庢墽琛屼换鍔′笉鍖归厤",1,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(5, 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澶辫触",1,2,3);
+                                }
                             } else {
                                 log.error("鏇存柊宸ヤ綔妗g殑宸ヤ綔鐘舵�佷负14澶辫触锛侊紒锛� [宸ヤ綔鍙�:{}]", wrkMast.getWrkNo());
                             }
@@ -1363,7 +1488,66 @@
                     }
                 }
             }
+        }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;
     }
 
     /**
@@ -1373,55 +1557,14 @@
         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();
-                }
-                if (staProtocol.isAutoing() && staProtocol.isLoading() && (staProtocol.getWorkNo() == 0 || staProtocol.getStaNo() == null)) {
-                    // 鏌ヨ宸ヤ綔妗�
-                    WrkMast wrkMast = wrkMastMapper.selectPakOutStep2(staProtocol.getSiteId());
-                    if (wrkMast == null) {
+                switch (crnSlave.getId()){
+                    case 3:
+                    case 4:
+                    case 5:
+                        crnStnToOutStnTwo(crnStn,2);
                         continue;
-                    }
-                    // 鍒ゆ柇宸ヤ綔妗f潯浠�
-                    if (wrkMast.getIoType() < 100 || wrkMast.getStaNo() == null || wrkMast.getSourceStaNo() == null) {
-                        continue;
-                    }
-                    // 鍒ゆ柇鍚婅溅鏄惁瀹為檯宸插畬鎴愶紝涓旂數鑴戠姸鎬佸湪move涓紝浠ュ鐢佃剳杩涜鏇存柊宸ヤ綔妗�
-                    CrnThread crnThread = (CrnThread) SlaveConnection.get(SlaveType.Crn, wrkMast.getCrnNo());
-                    CrnProtocol crnProtocol = crnThread.getCrnProtocol();
-                    if (crnProtocol.statusTypeTwo == CrnStatusType.FETCHING || crnProtocol.statusTypeTwo == CrnStatusType.PUTTING) {
-                        // 绉诲姩涓�
-                        continue;
-                    }
-
-                    //  鍒ゆ柇鍫嗗灈鏈虹姸鎬佺瓑寰呯‘璁�
-                    if (crnProtocol.modeType == CrnModeType.AUTO && crnProtocol.getTaskNoTwo().equals(wrkMast.getWrkNo().shortValue())
-                            && crnProtocol.statusTypeTwo == CrnStatusType.WAITING
-                            && crnProtocol.forkPosTypeTwo == 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))) {
-                            continue;
-                        }
-
-                        // 鏇存柊宸ヤ綔妗g姸鎬佷负14澶辫触
-                        wrkMast.setWrkSts(14L);
-                        wrkMast.setCrnEndTime(new Date());
-                        if (wrkMastMapper.updateById(wrkMast) != 0) {
-                            // 澶嶄綅鍫嗗灈鏈�
-                            crnThread.setResetFlagTwo(true);
-                        } else {
-                            log.error("鏇存柊宸ヤ綔妗g殑宸ヤ綔鐘舵�佷负14澶辫触锛侊紒锛� [宸ヤ綔鍙�:{}]", wrkMast.getWrkNo());
-                        }
-                    }
+                    default:
+                        break;
                 }
             }
         }
@@ -3188,44 +3331,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);
@@ -3241,19 +3409,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.isEmpty() && 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.isEmpty() && 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);
@@ -3262,25 +3545,43 @@
                     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()) {
-            if (crn.getId()<3 || crn.getId()>5){
-                continue;
+            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) {
-                continue;
+                return false;
+            }
+            if (crnProtocol.modeType != CrnModeType.AUTO){
+                return false;
             }
             //  鐘舵�侊細绛夊緟纭 骞朵笖  浠诲姟瀹屾垚浣� = 1
             if (crnProtocol.statusTypeTwo == CrnStatusType.WAITING && crnProtocol.getTaskNoTwo() != 0) {
@@ -3292,26 +3593,73 @@
                     WrkMast wrkMast = wrkMastMapper.selectPakInStep3(crnProtocol.getTaskNoTwo().intValue());
                     if (wrkMast == null) {
                         log.error("鍫嗗灈鏈哄浜庣瓑寰呯‘璁や笖浠诲姟瀹屾垚鐘舵�侊紝浣嗘湭鎵惧埌宸ヤ綔妗c�傚爢鍨涙満鍙�={}锛屽伐浣滃彿={}", crn.getId(), crnProtocol.getTaskNoTwo());
-                        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);
-                    // 淇敼鎴愬姛鍚庡浣嶅爢鍨涙満
-                    if (wrkMastMapper.updateById(wrkMast) > 0) {
-                        // 鍫嗗灈鏈哄浣�
-                        crnThread.setResetFlagTwo(true);
+                    // 鍫嗗灈鏈哄浣�
+                    List<WrkMastSplitTwin> wrkMastSplitTwinList = wrkMastSplitTwinMapper.getWrkMastSplitTwin(crn.getId(), 2, null, 2, 3);
+                    if (!wrkMastSplitTwinList.isEmpty() && 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.isEmpty() && 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;
     }
 
     /**
@@ -5884,5 +6232,145 @@
     public synchronized boolean steIoExecute(Integer sign) {
         return false;
     }
+    /**
+     * 鍏ュ嚭搴�  ===>>  鍫嗗灈鏈哄叆鍑哄簱浣滀笟涓嬪彂
+     */
+    public synchronized void crnIoExecuteTwoExecute() {
+        for (CrnSlave crn : slaveProperties.getCrn()) {
+            try{
+                switch (crn.getId()){
+                    case 3:
+                    case 4:
+                    case 5:
+                        crnWrkMastSplitTwinExecute(crn);
+                        continue;
+                    default:
+                        continue;
+                }
+            }catch (Exception e){
+                log.error("鍫嗗灈鏈哄嚭鍏ュ簱鎵ц浠诲姟涓嬪彂鎶ラ敊,鍫嗗灈鏈哄彿={},寮傚父淇℃伅={}",crn.getId(),e.getMessage());
+            }
+        }
+    }
+
+
+    public synchronized boolean crnWrkMastSplitTwinExecute(CrnSlave crn){
+        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鏃犱换鍔℃椂鎵嶇户缁墽琛�
+                if (crnProtocol.getStatusType() == CrnStatusType.IDLE
+                        && crnProtocol.getTaskNo() == 0
+                        && crnProtocol.getLoaded() == 0
+                        && crnProtocol.getForkPos() == 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;
+                } else if (crnProtocol.getStatusType() == CrnStatusType.SEPARATE_IDLE
+                        && crnProtocol.getTaskNo() == 0
+                        && crnProtocol.getLoaded() == 1
+                        && crnProtocol.getForkPos() == 0) {
+                    sign[0] = 2;
+                    sign[1] = 1;
+                } else if (crnProtocol.getStatusTypeTwo() == CrnStatusType.SEPARATE_IDLE
+                        && crnProtocol.getTaskNoTwo() == 0
+                        && crnProtocol.getLoadedTwo() == 1
+                        && crnProtocol.getForkPosTwo() == 0){
+                    sign[0] = 2;
+                    sign[1] = 2;
+                }
+            }
+
+            if (sign[0]!=0){
+                List<WrkMastSplitTwin> wrkMastSplitTwinList = wrkMastSplitTwinService.getWrkMastSplitTwin(crn.getId(),sign[1],null,sign[0],0);
+                if (!wrkMastSplitTwinList.isEmpty() && wrkMastSplitTwinList.size()!=1){
+                    log.error("鍫嗗灈鏈哄嚭鍏ュ簱涓嬪彂寮傚父,鍫嗗灈鏈哄彿={},寮傚父淇℃伅={},宸ヤ綅鍙�={},宸ヤ綔绫诲瀷={}",crn.getId(),"瀛樺湪澶氱瑪鍙墽琛屼綔涓氾紝璇峰垹闄ゆ棤鏁堜綔涓氾紒锛侊紒",sign[1],sign[0]);
+                }
+                for (WrkMastSplitTwin wrkMastSplitTwin:wrkMastSplitTwinList){
+                    return sign[0] == 1? crnExecuteTakeFull(crn.getId(), wrkMastSplitTwin, sign[1]) : crnExecutePutFull(crn.getId(), wrkMastSplitTwin, sign[1]);
+                }
+            }
+        }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