From c48d0150aa9f6b297671f28adb6b9dc95b529cfc Mon Sep 17 00:00:00 2001
From: zhang <zc857179121@qq.com>
Date: 星期四, 05 六月 2025 16:59:39 +0800
Subject: [PATCH] 1

---
 src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java | 1450 ++++++++++++++++++++++++++++++++++++++++++---------------
 1 files changed, 1,066 insertions(+), 384 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 cdb869d..f9f9b19 100644
--- a/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
@@ -7,13 +7,8 @@
 import com.core.common.Cools;
 import com.core.exception.CoolException;
 import com.zy.asrs.entity.*;
-import com.zy.asrs.mapper.BasCrnErrorMapper;
-import com.zy.asrs.mapper.BasDevpMapper;
-import com.zy.asrs.mapper.WrkChargeMapper;
-import com.zy.asrs.mapper.WrkMastMapper;
+import com.zy.asrs.mapper.*;
 import com.zy.asrs.service.*;
-import com.zy.asrs.utils.Monitor;
-import com.zy.asrs.utils.Roles;
 import com.zy.asrs.utils.Utils;
 import com.zy.common.model.LocTypeDto;
 import com.zy.common.model.MatDto;
@@ -97,6 +92,10 @@
     private WrkChargeMapper wrkChargeMapper;
     @Autowired
     private BasDevpMapper basDevpMapper;
+    @Autowired
+    private WaitPakinMapper waitPakinMapper;
+
+    private Map<String, Integer> flagData = new HashMap<>();
 
     /**
      * 缁勬墭
@@ -117,34 +116,51 @@
                 }
                 Short workNo = staProtocol.getWorkNo();
 
-                Monitor.ledError(100,"娴嬭瘯");
                 // 鍒ゆ柇鏄惁婊¤冻鍏ュ簱鏉′欢
                 if (staProtocol.isAutoing() && staProtocol.isLoading()
                         && staProtocol.isInEnable()
                         && !staProtocol.isEmptyMk() && (workNo == 0 || (workNo >= 9990 && workNo <= 9999))
                         && staProtocol.isPakMk()) {
 
-                    //20230201. 2鍙峰爢鍨涙満鏈夊嚭搴撲换鍔℃椂锛岀姝㈡柊鏉垮叆搴�
-                    if (staProtocol.getWorkNo() == 9995) {
-                        if ( inSta.getStaNo()==103 && devpThread.ioModeOf1F == IoModeType.PAKOUT_MODE) {
-                            //鏈夊嚭搴撲换鍔★紝閫�搴撳埌鍏ュ簱鍙�
-                            staProtocol.setWorkNo((short) 9999);
-                            staProtocol.setStaNo((short)100);
-                            devpThread.setPakMk(staProtocol.getSiteId(), false);
-                            boolean result = MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol));
-                            News.error("MainServiceImpl  generateStoreWrkFile"+"103涓哄嚭搴撴ā寮忥紝绂佹鍏ュ簱锛岄��鍥炲叆搴撳彛銆傦紒锛侊紒");
-                            continue;
-                        }
-                        if ( inSta.getStaNo()==203 && devpThread.ioModeOf2F == IoModeType.PAKOUT_MODE) {
-                            //鏈夊嚭搴撲换鍔★紝閫�搴撳埌鍏ュ簱鍙�
-                            staProtocol.setWorkNo((short) 9999);
-                            staProtocol.setStaNo((short)200);
-                            devpThread.setPakMk(staProtocol.getSiteId(), false);
-                            boolean result = MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol));
-                            News.error("MainServiceImpl  generateStoreWrkFile"+"203涓哄嚭搴撴ā寮忥紝绂佹鍏ュ簱锛岄��鍥炲叆搴撳彛銆傦紒锛侊紒");
-                            continue;
-                        }
-                    }
+//                    //20230201. 2鍙峰爢鍨涙満鏈夊嚭搴撲换鍔℃椂锛岀姝㈡柊鏉垮叆搴�
+//                    if (staProtocol.getWorkNo() == 9995) {
+//                        if ( inSta.getStaNo()==103 && devpThread.ioModeOf1F == IoModeType.PAKOUT_MODE) {
+//                            //鏈夊嚭搴撲换鍔★紝閫�搴撳埌鍏ュ簱鍙�
+//                            staProtocol.setWorkNo((short) 9999);
+//                            staProtocol.setStaNo((short)100);
+//                            devpThread.setPakMk(staProtocol.getSiteId(), false);
+//                            boolean result = MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol));
+//                            News.error("MainServiceImpl  generateStoreWrkFile"+"103涓哄嚭搴撴ā寮忥紝绂佹鍏ュ簱锛岄��鍥炲叆搴撳彛銆傦紒锛侊紒");
+//                            continue;
+//                        }
+//                        if ( inSta.getStaNo()==203 && devpThread.ioModeOf2F == IoModeType.PAKOUT_MODE) {
+//                            //鏈夊嚭搴撲换鍔★紝閫�搴撳埌鍏ュ簱鍙�
+//                            staProtocol.setWorkNo((short) 9999);
+//                            staProtocol.setStaNo((short)200);
+//                            devpThread.setPakMk(staProtocol.getSiteId(), false);
+//                            boolean result = MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol));
+//                            News.error("MainServiceImpl  generateStoreWrkFile"+"203涓哄嚭搴撴ā寮忥紝绂佹鍏ュ簱锛岄��鍥炲叆搴撳彛銆傦紒锛侊紒");
+//                            continue;
+//                        }
+//                        if ( inSta.getStaNo()==113 && devpThread.ioModeOf3F == IoModeType.PAKOUT_MODE) {
+//                            //鏈夊嚭搴撲换鍔★紝閫�搴撳埌鍏ュ簱鍙�
+//                            staProtocol.setWorkNo((short) 9999);
+//                            staProtocol.setStaNo((short)114);
+//                            devpThread.setPakMk(staProtocol.getSiteId(), false);
+//                            boolean result = MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol));
+//                            News.error("MainServiceImpl  generateStoreWrkFile"+"103涓哄嚭搴撴ā寮忥紝绂佹鍏ュ簱锛岄��鍥炲叆搴撳彛銆傦紒锛侊紒");
+//                            continue;
+//                        }
+//                        if ( inSta.getStaNo()==213 && devpThread.ioModeOf4F == IoModeType.PAKOUT_MODE) {
+//                            //鏈夊嚭搴撲换鍔★紝閫�搴撳埌鍏ュ簱鍙�
+//                            staProtocol.setWorkNo((short) 9999);
+//                            staProtocol.setStaNo((short)214);
+//                            devpThread.setPakMk(staProtocol.getSiteId(), false);
+//                            boolean result = MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol));
+//                            News.error("MainServiceImpl  generateStoreWrkFile"+"203涓哄嚭搴撴ā寮忥紝绂佹鍏ュ簱锛岄��鍥炲叆搴撳彛銆傦紒锛侊紒");
+//                            continue;
+//                        }
+//                    }
 
                     // 鑾峰彇鏉$爜鎵弿浠俊鎭�
                     BarcodeThread barcodeThread = (BarcodeThread) SlaveConnection.get(SlaveType.Barcode, inSta.getBarcode());
@@ -152,9 +168,9 @@
                         continue;
                     }
                     String barcode = barcodeThread.getBarcode();
-                    if(!Cools.isEmpty(barcode)) {
+                    if (!Cools.isEmpty(barcode)) {
 //                        News.info("{}鍙锋潯鐮佹壂鎻忓櫒妫�娴嬫潯鐮佷俊鎭細{}", inSta.getBarcode(), barcode);
-                        if("NG".endsWith(barcode) || "NoRead".equals(barcode) || "empty".equals(barcode)) {
+                        if ("NG".endsWith(barcode) || "NoRead".equals(barcode) || "empty".equals(barcode)) {
                             staProtocol.setWorkNo((short) 9995);
                             staProtocol.setStaNo(inSta.getBackSta().shortValue());
                             devpThread.setPakMk(staProtocol.getSiteId(), false);
@@ -211,12 +227,13 @@
                         JSONObject jsonObject = JSON.parseObject(response);
                         LedThread ledThread = (LedThread) SlaveConnection.get(SlaveType.Led, inSta.getLed());
                         Integer code = jsonObject.getInteger("code");
+                        Object redata = jsonObject.get("data");
                         if (code.equals(200)) {
                             StartupDto dto = jsonObject.getObject("data", StartupDto.class);
                             // plc 澶勭悊
                             barcodeThread.setBarcode("");
                             staProtocol.setWorkNo(dto.getWorkNo().shortValue());
-                            staProtocol.setStaNo(dto.getStaNo().shortValue());
+                            staProtocol.setStaNo(Utils.getStaNoConvertCentreOther3(dto.getStaNo(), inSta.getStaNo()).shortValue());
                             devpThread.setPakMk(staProtocol.getSiteId(), false);
 
                             ledThread.errorReset();
@@ -225,14 +242,14 @@
                             if (!result) {
                                 throw new CoolException("鏇存柊plc绔欑偣淇℃伅澶辫触");
                             }
-                        } else if (code == 500){
-                            if (ledThread != null) {
-                                String errorMsg = jsonObject.getString("msg");
-                                if (!Cools.isEmpty(errorMsg)) {
-                                    MessageQueue.offer(SlaveType.Led, inSta.getLed(), new Task(3, errorMsg));
-                                }
-                            }
-                            News.error("璇锋眰鎺ュ彛澶辫触锛侊紒锛乽rl锛歿}锛況equest锛歿}锛況esponse锛歿}", wmsUrl + "/rpc/pakin/loc/v1", JSON.toJSONString(param), response);
+//                        } else if (code == 500){
+//                            if (ledThread != null) {
+//                                String errorMsg = jsonObject.getString("msg");
+//                                if (!Cools.isEmpty(errorMsg)) {
+//                                    MessageQueue.offer(SlaveType.Led, inSta.getLed(), new Task(3, errorMsg));
+//                                }
+//                            }
+//                            News.error("璇锋眰鎺ュ彛澶辫触锛侊紒锛乽rl锛歿}锛況equest锛歿}锛況esponse锛歿}", wmsUrl + "/rpc/pakin/loc/v1", JSON.toJSONString(param), response);
                         } else if (code == 700) {
                             staProtocol.setWorkNo((short) 9995);
                             staProtocol.setStaNo(inSta.getBackSta().shortValue());
@@ -243,6 +260,82 @@
                             if (ledThread != null) {
                                 String errorMsg = barcode + "鎵樼洏璇嗗埆寮傚父锛岃鍏堣繘琛岀粍鎵橈紒";
                                 MessageQueue.offer(SlaveType.Led, inSta.getLed(), new Task(3, errorMsg));
+                            }
+                        } else if (redata.toString().contains("鐗╂枡绫诲瀷鍜屽疄闄呯绫讳笉涓�鑷�")||redata.toString().contains("娣锋斁鐗╂枡绫诲瀷涓嶄竴鑷�")) {
+                            staProtocol.setWorkNo((short) 9995);
+                            staProtocol.setStaNo(inSta.getBackSta().shortValue());
+                            devpThread.setPakMk(staProtocol.getSiteId(), false);
+                            MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol));
+
+                            // led 寮傚父鏄剧ず
+                            if (ledThread != null) {
+                                String errorMsg = barcode + redata.toString();
+                                MessageQueue.offer(SlaveType.Led, inSta.getLed(), new Task(3, errorMsg));
+                            }
+                        }else if (redata.toString().startsWith("800")){
+                            staProtocol.setWorkNo((short) 9995);
+                            staProtocol.setStaNo(inSta.getBackSta().shortValue());
+                            devpThread.setPakMk(staProtocol.getSiteId(), false);
+                            MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol));
+
+                            // led 寮傚父鏄剧ず
+                            if (ledThread != null) {
+                                String errorMsg = barcode + "搴撲綅涓嶈冻";
+                                MessageQueue.offer(SlaveType.Led, inSta.getLed(), new Task(3, errorMsg));
+                            }
+                        } else if ((code == 500 || code == 1000)) {
+                            if (redata != null && redata.toString().startsWith("800")) {
+                                Integer num = flagData.get(param.getBarcode());
+                                if (num != null) {
+                                    flagData.put(param.getBarcode(), num + 1);
+                                } else {
+                                    flagData.put(param.getBarcode(), 1);
+                                }
+                            }
+                            if (flagData.get(param.getBarcode()) != null && flagData.get(param.getBarcode()) >= 2) {
+                                staProtocol.setWorkNo((short) 9995);
+                                staProtocol.setStaNo(inSta.getBackSta().shortValue());
+                                devpThread.setPakMk(staProtocol.getSiteId(), false);
+                                MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol));
+
+                                // led 寮傚父鏄剧ず
+                                if (ledThread != null && redata != null) {
+                                    String errorMsg = barcode + redata.toString();
+                                    MessageQueue.offer(SlaveType.Led, inSta.getLed(), new Task(3, errorMsg));
+                                }
+                            } else {
+                                if (inSta.getStaNo().equals(103)) {
+                                    staProtocol.setWorkNo((short) 9998);
+                                    staProtocol.setStaNo((short) 203);
+                                }
+                                if (inSta.getStaNo().equals(203)) {
+                                    staProtocol.setWorkNo((short) 9996);
+                                    staProtocol.setStaNo((short) 103);
+                                }
+                                if (inSta.getStaNo().equals(113)) {
+                                    staProtocol.setWorkNo((short) 9995);
+                                    staProtocol.setStaNo((short) 114);
+                                } else if (inSta.getStaNo().equals(213)) {
+                                    staProtocol.setWorkNo((short) 9995);
+                                    staProtocol.setStaNo((short) 214);
+                                }
+                                devpThread.setPakMk(staProtocol.getSiteId(), false);
+                                MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol));
+                                String data = jsonObject.getString("data");
+                                String msg = jsonObject.getString("msg");
+                                if (code == 500) {
+                                    // led 寮傚父鏄剧ず
+                                    if (ledThread != null) {
+                                        String errorMsg = "鍏ュ簱绔欙細" + staProtocol.getStaNo() + "---" + barcode + "妫�绱㈠簱浣嶅け璐�,璇锋鏌ュ簱瀛樺墿浣欍��===>>" + data + "--" + msg;
+                                        MessageQueue.offer(SlaveType.Led, inSta.getLed(), new Task(3, errorMsg));
+                                    }
+                                } else if (code == 1000) {
+                                    // led 寮傚父鏄剧ず
+                                    if (ledThread != null) {
+                                        String errorMsg = "鍏ュ簱绔欙細" + staProtocol.getStaNo() + "---" + barcode + "闇�瑕佹崲鍏ュ簱绔欍��";
+                                        MessageQueue.offer(SlaveType.Led, inSta.getLed(), new Task(3, errorMsg));
+                                    }
+                                }
                             }
                         }
                     } catch (Exception e) {
@@ -279,7 +372,9 @@
                         && staProtocol.isPakMk()) {
                     // 鍒ゆ柇閲嶅宸ヤ綔妗�
                     WrkMast wrkMast = wrkMastMapper.selectPakInStep11(inSta.getStaNo());
-                    if (wrkMast == null) { continue; }
+                    if (wrkMast == null) {
+                        continue;
+                    }
 
                     // 鍛戒护涓嬪彂鍖� --------------------------------------------------------------------------
 
@@ -306,7 +401,7 @@
     /**
      * 鎷f枡銆佸苟鏉裤�佺洏鐐瑰啀鍏ュ簱 銆愮1闃舵銆�
      */
-    public synchronized void stnToCrnStnPick0(){
+    public synchronized void stnToCrnStnPick0() {
         for (DevpSlave devp : slaveProperties.getDevp()) {
             // 閬嶅巻鎷f枡鍏ュ簱鍙�
             for (DevpSlave.Sta pickSta : devp.getPickOutSta()) {
@@ -337,23 +432,21 @@
                         case 104:
                         case 108:
                             staNo = 103;
-                            if (basDevps1.size()!=0 && basDevps2.size()!=0){
+                            if (basDevps1.size() != 0 && basDevps2.size() != 0) {
                                 continue;
-                            } else if (basDevps1.size()!=0){
-                                staNo = 203;
                             }
 
-                            List<WrkMast> wrkMasts1 = wrkMastMapper.selectWrkStsAndIoType((int)staNo);
-                            if (wrkMasts1.size()!=0){
+                            List<WrkMast> wrkMasts1 = wrkMastMapper.selectWrkStsAndIoType((int) staNo);
+                            if (wrkMasts1.size() != 0) {
                                 boolean flag = false;
-                                for (WrkMast wrkMast1:wrkMasts1){
-                                    if (!wrkMast1.getWrkNo().equals(wrkMast.getWrkNo())){
+                                for (WrkMast wrkMast1 : wrkMasts1) {
+                                    if (!wrkMast1.getWrkNo().equals(wrkMast.getWrkNo())) {
                                         flag = true;
                                         break;
                                     }
                                 }
-                                if (flag)  {
-                                    News.error("MainServiceImpl  324琛�"+"104绔欑偣瀛樺湪璐х墿锛屾崱鏂欑洏鐐硅揣鐗╂殏鏃朵笉閲嶆柊鍏ュ簱锛侊紒锛�");
+                                if (flag) {
+                                    News.error("MainServiceImpl  324琛�" + "104绔欑偣瀛樺湪璐х墿锛屾崱鏂欑洏鐐硅揣鐗╂殏鏃朵笉閲嶆柊鍏ュ簱锛侊紒锛�");
                                     continue;
                                 }
                             }
@@ -361,26 +454,24 @@
                         case 204:
                         case 208:
                             staNo = 203;
-                            if (basDevps1.size()!=0 && basDevps2.size()!=0){
+                            if (basDevps1.size() != 0 && basDevps2.size() != 0) {
                                 continue;
-                            } else if (basDevps2.size()!=0){
-                                staNo = 103;
                             }
 
 //                            if (basDevps2.size()!=0){
 //                                continue;
 //                            }
-                            List<WrkMast> wrkMasts2 = wrkMastMapper.selectWrkStsAndIoType((int)staNo);
-                            if (wrkMasts2.size()!=0){
+                            List<WrkMast> wrkMasts2 = wrkMastMapper.selectWrkStsAndIoType((int) staNo);
+                            if (wrkMasts2.size() != 0) {
                                 boolean flag = false;
-                                for (WrkMast wrkMast1:wrkMasts2){
-                                    if (!wrkMast1.getWrkNo().equals(wrkMast.getWrkNo())){
+                                for (WrkMast wrkMast1 : wrkMasts2) {
+                                    if (!wrkMast1.getWrkNo().equals(wrkMast.getWrkNo())) {
                                         flag = true;
                                         break;
                                     }
                                 }
-                                if (flag)  {
-                                    News.error("MainServiceImpl  346琛�"+"204绔欑偣瀛樺湪璐х墿锛屾崱鏂欑洏鐐硅揣鐗╂殏鏃朵笉閲嶆柊鍏ュ簱锛侊紒锛�");
+                                if (flag && devpThread.getStation().get(204).isLoading()) {
+                                    News.error("MainServiceImpl  346琛�" + "204绔欑偣瀛樺湪璐х墿锛屾崱鏂欑洏鐐硅揣鐗╂殏鏃朵笉閲嶆柊鍏ュ簱锛侊紒锛�");
                                     continue;
                                 }
                             }
@@ -394,9 +485,17 @@
                     staProtocol.setWorkNo(wrkMast.getWrkNo().shortValue());
                     staProtocol.setStaNo(staNo);
                     devpThread.setPakMk(staProtocol.getSiteId(), false);
+                    if (staProtocol.getStaNo().equals(300)) {
+                        BasDevp basDevp = basDevpMapper.selectByDevNo(300);
+                        basDevp.setWrkNo1(wrkMast.getWrkNo());
+                        basDevpService.selectById(basDevp);
+                        News.info("300绔欏幓鍏ュ簱绔欎换鍔′笅鍙戯紝鏇存柊绔欑偣琛紝[浠诲姟鍙�:{}锛岀珯鐐瑰彿:{}]", wrkMast.getWrkNo().shortValue(), staNo);
+                    }
                     boolean result = MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol));
                     if (!result) {
                         News.error("鍙戝竷鍛戒护鑷宠緭閫佺嚎闃熷垪澶辫触锛侊紒锛� [plc缂栧彿锛歿}]", devp.getId());
+                    } else {
+                        News.info("300绔欏幓鍏ュ簱绔欎换鍔″凡涓嬪彂锛孾浠诲姟鍙�:{}锛岀珯鐐瑰彿:{}]", wrkMast.getWrkNo().shortValue(), staNo);
                     }
                 }
             }
@@ -407,7 +506,7 @@
      * 鎷f枡銆佸苟鏉裤�佺洏鐐瑰啀鍏ュ簱銆愮2闃舵銆�
      */
     @Transactional
-    public synchronized void stnToCrnStnPick1(){
+    public synchronized void stnToCrnStnPick1() {
         for (DevpSlave devp : slaveProperties.getDevp()) {
             // 閬嶅巻鎷f枡鍏ュ簱鍙�
             for (DevpSlave.Sta pickSta : devp.getPickInSta()) {
@@ -426,7 +525,7 @@
                         // 0 - 9990 鎴栬�� 9996
                         && ((staProtocol.getWorkNo() > 0 && staProtocol.getWorkNo() < 9990) || staProtocol.getWorkNo() == 9996)
                         && staProtocol.getStaNo().equals(staProtocol.getSiteId().shortValue())
-                        && staProtocol.isPakMk()){
+                        && staProtocol.isPakMk()) {
 
                     // 鑾峰彇鏉$爜鎵弿浠俊鎭�
                     BarcodeThread barcodeThread = (BarcodeThread) SlaveConnection.get(SlaveType.Barcode, pickSta.getBarcode());
@@ -443,9 +542,9 @@
                     }
                     if (staProtocol.getWorkNo() == 9996) {
                         String barcode = barcodeThread.getBarcode();
-                        if(!Cools.isEmpty(barcode)) {
+                        if (!Cools.isEmpty(barcode)) {
                             News.info("{}鍙锋潯鐮佹壂鎻忓櫒妫�娴嬫潯鐮佷俊鎭細{}", pickSta.getBarcode(), barcode);
-                            if("NG".endsWith(barcode) || "NoRead".equals(barcode) || "empty".equals(barcode)) {
+                            if ("NG".endsWith(barcode) || "NoRead".equals(barcode) || "empty".equals(barcode)) {
                                 staProtocol.setWorkNo((short) 9995);
                                 staProtocol.setStaNo(pickSta.getBackSta().shortValue());
                                 devpThread.setPakMk(staProtocol.getSiteId(), false);
@@ -484,7 +583,7 @@
                         continue;
                     }
                     if ((wrkMast.getIoType() != 103 && wrkMast.getIoType() != 104 && wrkMast.getIoType() != 107)
-                        || Cools.isEmpty(wrkMast.getStaNo()) || Cools.isEmpty(wrkMast.getSourceStaNo()) ) {
+                            || Cools.isEmpty(wrkMast.getStaNo()) || Cools.isEmpty(wrkMast.getSourceStaNo())) {
                         continue;
                     }
 
@@ -495,6 +594,17 @@
                             .eq("crn_no", wrkMast.getCrnNo()); // 鍫嗗灈鏈哄彿
                     StaDesc staDesc = staDescService.selectOne(wrapper);
                     if (Cools.isEmpty(staDesc)) {
+                        // led 寮傚父鏄剧ず
+                        String errorMsg = "";
+                        LedThread ledThread = (LedThread) SlaveConnection.get(SlaveType.Led, pickSta.getLed());
+                        if (wrkMast.getIoType() == 103) {
+                            errorMsg = "褰撳墠鎷f枡浠诲姟璇风Щ鍔ㄨ嚦203绔�";
+                        } else {
+                            errorMsg = "褰撳墠鎷f枡浠诲姟璇风Щ鍔ㄨ嚦103绔�";
+                        }
+                        if (ledThread != null) {
+                            MessageQueue.offer(SlaveType.Led, pickSta.getLed(), new Task(3, errorMsg));
+                        }
                         News.error("鍏ュ簱璺緞涓嶅瓨鍦紒type_no={},stn_no={},crn_no={}", wrkMast.getIoType(), pickSta.getStaNo(), wrkMast.getCrnNo());
                         continue;
                     }
@@ -557,13 +667,18 @@
                     // 鏉$爜璁惧澶勭悊
                     barcodeThread.setBarcode("");
 
-                    if(wrkMast.getIoType()>100){
+                    if (wrkMast.getIoType() > 100) {
                         throw new CoolException("鍐嶅叆搴撴洿鏂板伐浣滄。澶辫触锛屼笉鑳界粰PLC涓嬪彂浠诲姟===>>" + wrkMast.getWrkNo());
                     }
                     // 鏇存柊绔欑偣淇℃伅 涓� 涓嬪彂plc鍛戒护
                     staProtocol.setWorkNo(wrkMast.getWrkNo().shortValue());
                     staProtocol.setStaNo(wrkMast.getStaNo().shortValue());
                     devpThread.setPakMk(staProtocol.getSiteId(), false);
+                    if (staProtocol.getStaNo().equals(300)) {
+                        BasDevp basDevp = basDevpMapper.selectByDevNo(300);
+                        basDevp.setWrkNo1(wrkMast.getWrkNo());
+                        basDevpService.selectById(basDevp);
+                    }
                     boolean result = MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol));
                     if (!result) {
                         News.error("鍙戝竷鍛戒护鑷宠緭閫佺嚎闃熷垪澶辫触锛侊紒锛� [plc缂栧彿锛歿}]", devp.getId());
@@ -752,13 +867,15 @@
 //                        && staProtocol.isInEnable()
                         && staProtocol.getWorkNo() > 0
                         && staProtocol.getStaNo().equals(staProtocol.getSiteId().shortValue())
-                        && staProtocol.isPakMk()){
+                        && staProtocol.isPakMk()) {
                     WrkMast wrkMast = wrkMastMapper.selectById(staProtocol.getWorkNo());
-                    if(Cools.isEmpty(wrkMast)){
+                    if (Cools.isEmpty(wrkMast)) {
                         News.error("鎷f枡/鐩樼偣杞叏鏉�,浠诲姟鍙峰伐浣滄。涓嶅瓨鍦�===>>[浠诲姟鍙�:{}]", staProtocol.getWorkNo());
                         continue;
                     }
-                    if (wrkMast.getIoType() != 101) { continue; }
+                    if (wrkMast.getIoType() != 101) {
+                        continue;
+                    }
 
                     //鎷f枡杞叏鏉块粯璁ゅ嚭搴撶珯100绔欙紝褰�100绔欐湁鐗╂椂锛岀洰鏍囨敼200绔�
                     Integer staNo = 100;
@@ -813,6 +930,67 @@
                     // 鏌ヨ宸ヤ綔妗�
                     WrkMast wrkMast = wrkMastMapper.selectPakOutStep16(staProtocol.getSiteId());
                     if (wrkMast == null) {
+                        try {
+                            if (crnSlave.getId() != 2) {
+                                // 鍒ゆ柇鍚婅溅鏄惁瀹為檯宸插畬鎴愶紝涓旂數鑴戠姸鎬佸湪move涓紝浠ュ鐢佃剳杩涜鏇存柊宸ヤ綔妗�
+                                CrnThread crnThread = (CrnThread) SlaveConnection.get(SlaveType.Crn, crnSlave.getId());
+                                CrnProtocol crnProtocol = crnThread.getCrnProtocol();
+                                if (crnProtocol.statusType == CrnStatusType.FETCHING || crnProtocol.statusType == CrnStatusType.PUTTING) {
+                                    // 绉诲姩涓�
+                                    continue;
+                                }
+                                WrkMast onlyWrkNo = wrkMastMapper.selectByOnlyWrkNo(crnProtocol.getTaskNo().intValue());
+                                if (Cools.isEmpty(onlyWrkNo) && (crnStn.getStaNo() == 112 || crnStn.getStaNo() == 212)) {
+                                    //  鍒ゆ柇鍫嗗灈鏈虹姸鎬佺瓑寰呯‘璁�
+                                    if (crnProtocol.modeType == CrnModeType.AUTO
+                                            && crnProtocol.statusType == CrnStatusType.WAITING
+                                            && crnProtocol.forkPosType == CrnForkPosType.HOME
+                                            && crnProtocol.getBay().equals(crnStn.getBay().shortValue()) && crnProtocol.getLevel().equals(crnStn.getLev().shortValue())) {
+                                        News.info("鍫嗗灈鏈烘帴椹充换鍔″畬鎴愶紝宸ヤ綔鍙凤細" + crnProtocol.getTaskNo() + "锛涙墽琛屽爢鍨涙満鍙凤細" + crnSlave.getId() + "锛涙帴椹虫斁璐т綅锛�" + crnStn.getStaNo() + "锛涙帴椹宠璧扮洰鏍囩珯锛�" + Utils.getStaNoConvertCentreOther2(crnStn.getStaNo()));
+                                        // 涓嬪彂绔欑偣淇℃伅
+                                        News.error("new867===>" + crnProtocol.getTaskNo());
+                                        News.error("new867===>" + Utils.getStaNoConvertCentreOther2(crnStn.getStaNo()).toString());
+                                        staProtocol.setWorkNo(crnProtocol.getTaskNo());
+                                        staProtocol.setStaNo(Utils.getStaNoConvertCentreOther2(crnStn.getStaNo()).shortValue());
+                                        if (!MessageQueue.offer(SlaveType.Devp, crnStn.getDevpPlcId(), new Task(2, staProtocol))) {
+                                            continue;
+                                        }
+                                        // 澶嶄綅鍫嗗灈鏈�
+                                        crnThread.setResetFlag(true);
+                                        continue;
+                                    }
+                                }
+                                if (Cools.isEmpty(onlyWrkNo) ||
+                                        ((onlyWrkNo.getStaNo() != 114 && onlyWrkNo.getStaNo() != 214 &&
+                                                onlyWrkNo.getSourceStaNo() != 114 && onlyWrkNo.getSourceStaNo() != 214)
+                                                &&
+                                                (onlyWrkNo.getStaNo() != 113 && onlyWrkNo.getStaNo() != 213 &&
+                                                        onlyWrkNo.getSourceStaNo() != 113 && onlyWrkNo.getSourceStaNo() != 213))
+                                ) {
+                                    continue;
+                                }
+                                //  鍒ゆ柇鍫嗗灈鏈虹姸鎬佺瓑寰呯‘璁�
+                                if (crnProtocol.modeType == CrnModeType.AUTO
+                                        && crnProtocol.statusType == CrnStatusType.WAITING
+                                        && crnProtocol.forkPosType == CrnForkPosType.HOME
+                                        && crnProtocol.getBay().equals(crnStn.getBay().shortValue()) && crnProtocol.getLevel().equals(crnStn.getLev().shortValue())) {
+                                    News.info("鍫嗗灈鏈烘帴椹充换鍔″畬鎴愶紝宸ヤ綔鍙凤細" + crnProtocol.getTaskNo() + "锛涙墽琛屽爢鍨涙満鍙凤細" + crnSlave.getId() + "锛涙帴椹虫斁璐т綅锛�" + crnStn.getStaNo() + "锛涙帴椹宠璧扮洰鏍囩珯锛�" + Utils.getStaNoConvertCentreOther2(crnStn.getStaNo()));
+                                    // 涓嬪彂绔欑偣淇℃伅
+                                    News.error("new867===>" + crnProtocol.getTaskNo());
+                                    News.error("new867===>" + Utils.getStaNoConvertCentreOther2(crnStn.getStaNo()).toString());
+                                    staProtocol.setWorkNo(crnProtocol.getTaskNo());
+                                    staProtocol.setStaNo(Utils.getStaNoConvertCentreOther2(crnStn.getStaNo()).shortValue());
+                                    if (!MessageQueue.offer(SlaveType.Devp, crnStn.getDevpPlcId(), new Task(2, staProtocol))) {
+                                        continue;
+                                    }
+                                    // 澶嶄綅鍫嗗灈鏈�
+                                    crnThread.setResetFlag(true);
+                                    continue;
+                                }
+                            }
+                        } catch (Exception e) {
+                            News.info("鍫嗗灈鏈烘帴椹充换鍔″畬鎴愶紝寮傚父锛�" + e.getMessage());
+                        }
                         continue;
                     }
                     // 鍒ゆ柇宸ヤ綔妗f潯浠�
@@ -835,7 +1013,9 @@
 
                         // 涓嬪彂绔欑偣淇℃伅
                         staProtocol.setWorkNo(wrkMast.getWrkNo().shortValue());
-                        staProtocol.setStaNo(wrkMast.getStaNo().shortValue());
+                        News.error("new902===>" + crnProtocol.getCrnNo().toString());
+                        News.error("new902===>" + wrkMast.getStaNoConvert(crnProtocol.getCrnNo()).toString());
+                        staProtocol.setStaNo(wrkMast.getStaNoConvert(crnProtocol.getCrnNo()).shortValue());
                         if (!MessageQueue.offer(SlaveType.Devp, crnStn.getDevpPlcId(), new Task(2, staProtocol))) {
                             continue;
                         }
@@ -862,12 +1042,14 @@
     /**
      * 鍏ュ嚭搴�  ===>>  鍫嗗灈鏈哄叆鍑哄簱浣滀笟涓嬪彂
      */
-    public synchronized void crnIoExecute(){
+    public synchronized void crnIoExecute() {
         for (CrnSlave crn : slaveProperties.getCrn()) {
             // 鑾峰彇鍫嗗灈鏈轰俊鎭�
             CrnThread crnThread = (CrnThread) SlaveConnection.get(SlaveType.Crn, crn.getId());
             CrnProtocol crnProtocol = crnThread.getCrnProtocol();
-            if (crnProtocol == null) { continue; }
+            if (crnProtocol == null) {
+                continue;
+            }
             BasCrnp basCrnp = basCrnpService.selectById(crn.getId());
             if (basCrnp == null) {
                 News.error("{}鍙峰爢鍨涙満灏氭湭鍦ㄦ暟鎹簱杩涜缁存姢锛�", crn.getId());
@@ -918,7 +1100,7 @@
     /**
      * 鍏ュ簱  ===>>  鍫嗗灈鏈虹珯鍒板簱浣�
      */
-    public synchronized boolean crnStnToLoc(CrnSlave slave, CrnProtocol crnProtocol){
+    public synchronized boolean crnStnToLoc(CrnSlave slave, CrnProtocol crnProtocol) {
         for (CrnSlave.CrnStn crnStn : slave.getCrnInStn()) {
             boolean flag = false;
             // 鑾峰彇鍫嗗灈鏈哄叆搴撶珯淇℃伅
@@ -938,25 +1120,106 @@
 
             // 鑾峰彇宸ヤ綔鐘舵�佷负 2,3,4,5,6 鐨勫叆搴撳伐浣滄。
             WrkMast wrkMast = wrkMastMapper.selectPakInStep23456(slave.getId(), staProtocol.getWorkNo().intValue(), crnStn.getStaNo());
-            if(null == wrkMast) {
-//                News.error("{}绔欑偣鏌ヨ鏃犲緟鍏ュ簱鏁版嵁 宸ヤ綔鍙�={}", crnStn.getStaNo(), staProtocol.getWorkNo());
+            if (null == wrkMast) {
+                try {
+                    WrkMast onlyWrkNo = wrkMastMapper.selectByOnlyWrkNo(staProtocol.getWorkNo().intValue());
+                    if (!Cools.isEmpty(onlyWrkNo) && onlyWrkNo.getCrnNo() == 2 && onlyWrkNo.getWrkSts() == 2 && crnProtocol.getCrnNo() != 2 && (onlyWrkNo.getIoType() == 1 || onlyWrkNo.getIoType() == 10)) {
+                        //                News.error("{}绔欑偣鏌ヨ鏃犲緟鍏ュ簱鏁版嵁 宸ヤ綔鍙�={}", crnStn.getStaNo(), staProtocol.getWorkNo());
+                        // 宸茬粡瀛樺湪鍚婅溅鎵ц浠诲姟鏃讹紝鍒欒繃婊�
+                        if (wrkMastMapper.selectWorking(slave.getId()) != null) {
+                            continue;
+                        }
+                        if (Cools.isEmpty(staProtocol.getWorkNo()) || !staProtocol.isLoading()) {
+                            continue;
+                        }
+                        //  鍒ゆ柇鍫嗗灈鏈虹姸鎬佺瓑寰呯‘璁�
+                        if (crnProtocol.modeType == CrnModeType.AUTO
+                                && crnProtocol.statusType == CrnStatusType.IDLE
+                                && crnProtocol.forkPosType == CrnForkPosType.HOME && crnStn.getBay() != (short) 4) {
+                            News.info("鍫嗗灈鏈烘帴椹充换鍔℃墽琛岋紝宸ヤ綔鍙凤細" + staProtocol.getWorkNo() + "锛涙墽琛屽爢鍨涙満鍙凤細" + slave.getId() + "锛涙帴椹冲彇璐т綅锛�" + crnStn.getStaNo() + "锛涙帴椹虫斁璐т綅锛�" + staProtocol.getSiteId());
+                            // 鍫嗗灈鏈烘帴椹充换鍔″懡浠や笅鍙戝尯 --------------------------------------------------------------------------
+                            CrnCommand crnCommand = new CrnCommand();
+                            crnCommand.setCrnNo(slave.getId()); // 鍫嗗灈鏈虹紪鍙�
+                            crnCommand.setTaskNo(onlyWrkNo.getWrkNo().shortValue()); // 宸ヤ綔鍙�
+                            crnCommand.setAckFinish((short) 0);  // 浠诲姟瀹屾垚纭浣�
+                            crnCommand.setCommand((short) 0);
+                            crnCommand.setTaskMode(CrnTaskModeType.LOC_MOVE); // 浠诲姟妯″紡:  搴撲綅绉昏浆
+                            crnCommand.setSourcePosX(crnStn.getRow().shortValue());     // 婧愬簱浣嶆帓
+                            crnCommand.setSourcePosY(crnStn.getBay().shortValue());     // 婧愬簱浣嶅垪
+                            crnCommand.setSourcePosZ(crnStn.getLev().shortValue());     // 婧愬簱浣嶅眰
+                            crnCommand.setDestinationPosX(Utils.getRow(staProtocol.getSiteId()));     // 鐩爣搴撲綅鎺�
+                            crnCommand.setDestinationPosY(Utils.getBay(staProtocol.getSiteId()));     // 鐩爣搴撲綅鍒�
+                            crnCommand.setDestinationPosZ(Utils.getLev(staProtocol.getSiteId()));     // 鐩爣搴撲綅灞�
+                            if (!MessageQueue.offer(SlaveType.Crn, slave.getId(), new Task(2, crnCommand))) {
+                                News.error("鍫嗗灈鏈哄懡浠や笅鍙戝け璐ワ紝鍫嗗灈鏈哄彿={}锛屼换鍔℃暟鎹�={}", slave.getId(), JSON.toJSONString(crnCommand));
+                            }
+                            return true;
+                        }
+                    } else if (!Cools.isEmpty(onlyWrkNo) && onlyWrkNo.getCrnNo() == 2 && onlyWrkNo.getWrkSts() > 16 && crnProtocol.getCrnNo() != 2 && onlyWrkNo.getIoType() > 100) {
+                        //                News.error("{}绔欑偣鏌ヨ鏃犲緟鍏ュ簱鏁版嵁 宸ヤ綔鍙�={}", crnStn.getStaNo(), staProtocol.getWorkNo());
+                        // 宸茬粡瀛樺湪鍚婅溅鎵ц浠诲姟鏃讹紝鍒欒繃婊�
+                        if (wrkMastMapper.selectWorking(slave.getId()) != null) {
+                            continue;
+                        }
+                        if (Cools.isEmpty(staProtocol.getWorkNo()) || !staProtocol.isLoading()) {
+                            continue;
+                        }
+                        //  鍒ゆ柇鍫嗗灈鏈虹姸鎬佺瓑寰呯‘璁�
+                        if (crnProtocol.modeType == CrnModeType.AUTO
+                                && crnProtocol.statusType == CrnStatusType.IDLE
+                                && crnProtocol.forkPosType == CrnForkPosType.HOME && crnStn.getBay() == (short) 4) {
+                            News.info("鍫嗗灈鏈烘帴椹充换鍔℃墽琛岋紝宸ヤ綔鍙凤細" + staProtocol.getWorkNo() + "锛涙墽琛屽爢鍨涙満鍙凤細" + slave.getId() + "锛涙帴椹冲彇璐т綅锛�" + crnStn.getStaNo() + "锛涙帴椹虫斁璐т綅锛�" + staProtocol.getSiteId());
+                            // 鍫嗗灈鏈烘帴椹充换鍔″懡浠や笅鍙戝尯 --------------------------------------------------------------------------
+                            CrnCommand crnCommand = new CrnCommand();
+                            crnCommand.setCrnNo(slave.getId()); // 鍫嗗灈鏈虹紪鍙�
+                            crnCommand.setTaskNo(onlyWrkNo.getWrkNo().shortValue()); // 宸ヤ綔鍙�
+                            crnCommand.setAckFinish((short) 0);  // 浠诲姟瀹屾垚纭浣�
+                            crnCommand.setCommand((short) 0);
+                            crnCommand.setTaskMode(CrnTaskModeType.LOC_MOVE); // 浠诲姟妯″紡:  搴撲綅绉昏浆
+                            crnCommand.setSourcePosX(crnStn.getRow().shortValue());     // 婧愬簱浣嶆帓
+                            crnCommand.setSourcePosY(crnStn.getBay().shortValue());     // 婧愬簱浣嶅垪
+                            crnCommand.setSourcePosZ(crnStn.getLev().shortValue());     // 婧愬簱浣嶅眰
+                            crnCommand.setDestinationPosX(Utils.getRow(staProtocol.getSiteId()));     // 鐩爣搴撲綅鎺�
+                            crnCommand.setDestinationPosY(Utils.getBay(staProtocol.getSiteId()));     // 鐩爣搴撲綅鍒�
+                            crnCommand.setDestinationPosZ(Utils.getLev(staProtocol.getSiteId()));     // 鐩爣搴撲綅灞�
+                            if (!MessageQueue.offer(SlaveType.Crn, slave.getId(), new Task(2, crnCommand))) {
+                                News.error("鍫嗗灈鏈哄懡浠や笅鍙戝け璐ワ紝鍫嗗灈鏈哄彿={}锛屼换鍔℃暟鎹�={}", slave.getId(), JSON.toJSONString(crnCommand));
+                            }
+                            return true;
+                        }
+                    }
+                    continue;
+                } catch (Exception e) {
+                    News.info("鍫嗗灈鏈烘帴椹充换鍔℃墽琛岋紝寮傚父锛�" + e.getMessage());
+                }
                 continue;
             }
 
-            // 鍏ュ簱娣卞簱浣嶆槸鍚︽湁闈濬銆丏銆乆搴撲綅杩涜鏍¢獙
-            if (wrkMastMapper.selectShallowLoc(Integer.parseInt(wrkMast.getLocNo().substring(0, 2)),Integer.parseInt(wrkMast.getLocNo().substring(2, 5)),Integer.parseInt(wrkMast.getLocNo().substring(5, 7)))!=null){
-                continue;
+            // 鍏ュ簱娣卞簱浣嶆槸鍚︽湁闈濬銆丏銆乆搴撲綅杩涜鏍¢獙 锛� Q銆丳銆丷銆丼锛�
+            if (wrkMastMapper.selectShallowLoc(Integer.parseInt(wrkMast.getLocNo().substring(0, 2)), Integer.parseInt(wrkMast.getLocNo().substring(2, 5)), Integer.parseInt(wrkMast.getLocNo().substring(5, 7))) != null) {
+                //妫�鏌ュ叆搴撳簱浣嶆槸鍚︽槸鍦ㄥ爢鍨涙満杈瑰簱浣�
+                ArrayList<Integer> outLoc = new ArrayList<>();
+                outLoc.add(3);
+                outLoc.add(4);
+                outLoc.add(11);
+                outLoc.add(12);
+                outLoc.add(18);
+                outLoc.add(19);
+                if (!outLoc.contains(Integer.parseInt(wrkMast.getLocNo().substring(0, 2)))) {
+                    continue;
+                }
             }
+
 
             //鍔犲己鍒ゆ柇锛屽彧瑕佸瓨鍦ㄧЩ搴撲换鍔★紝璇存槑鍑哄簱浠诲姟鏈畬鍏ㄧ粨鏉燂紝涓嶆墽琛屽叆搴撲换鍔�
             WrkMast one = wrkMastMapper.selectLocMoveData(slave.getId());
-            if(!Cools.isEmpty(one)){
+            if (!Cools.isEmpty(one)) {
                 News.error("鍏ュ簱 ===>> 瀛樺湪绉诲簱鏈畬鎴愪换鍔★紝涓嶈兘鍏ュ簱銆傜Щ搴撲换鍔″彿={},鍫嗗灈鏈哄彿={}", one.getWrkNo(), slave.getId());
 //                continue;
             }
 
             //鍏ュ簱搴撲綅涓嶆槸鏈�澶栧眰搴撲綅锛屽垽鏂渶澶栧眰搴撲綅鏄惁涓虹┖搴撲綅锛屽涓嶆槸鍒欒繘琛岀Щ搴撲换鍔�
-            if(!locMastService.isOutMost(wrkMast.getLocNo())) {
+            if (!locMastService.isOutMost(wrkMast.getLocNo())) {
                 WrkMast wrkMastMove = wrkMastMapper.selectLocMoveWorking(slave.getId());
                 if (wrkMastMove != null && wrkMast.getWrkNo() == 111) {
                     continue;
@@ -977,7 +1240,8 @@
                                     // 娌℃湁浣滀笟涓殑鍏ュ簱浠诲姟鏃讹紝鎵嶈兘鐢熸垚绉诲簱浠诲姟
                                     WrkMast one2 = wrkMastService.selectOne(new EntityWrapper<WrkMast>()
                                             .eq("crn_no", slave.getId())
-                                            .last(" and wrk_sts in (3,4,5,6,7,8)"));
+                                            .eq("source_loc_no", shallowLocNo));
+                                            //.last(" and wrk_sts in (3,4,5,6,7,8)"));
                                     if (one2 == null) {
                                         moveLocForDeepLoc(slave, shallowLoc);
                                         // 缃《浠诲姟
@@ -1016,24 +1280,25 @@
                     }
                 }
             }
-            if(flag){
-                return false;
+            if (flag) {
+                continue;
+//                return false;
             }
 
             // 鍒ゆ柇鏄惁宸插瓨鍦ㄥ皬杞︾粦瀹氫换鍔�
             BasSte basSte = basSteService.findByCrnNo(wrkMast.getCrnNo());
-            if(basSte == null) continue;
+            if (basSte == null) continue;
             WrkMast one1 = wrkMastService.selectOne(new EntityWrapper<WrkMast>()
-                    .eq("ste_no",basSte.getSteNo())
+                    .eq("ste_no", basSte.getSteNo())
                     .last(" and wrk_sts > 10"));
-            if(one1 != null){
+            if (one1 != null) {
                 News.error("{}鍏ュ簱浠诲姟鏃犳硶浣滀笟锛屽洜鍑哄簱浠诲姟宸茬粦瀹氬皬杞�!", wrkMast.getWrkNo());
                 continue;
             }
 
             if (wrkMast.getWrkSts() < 3) {
                 if (staProtocol.isAutoing() && staProtocol.isLoading() && staProtocol.getWorkNo() > 0 && staProtocol.isInEnable()
-                        && staDetl.getCanining()!=null && staDetl.getCanining().equals("Y")) {
+                        && staDetl.getCanining() != null && staDetl.getCanining().equals("Y")) {
                     flag = true;
                 }
                 if (!flag) {
@@ -1090,7 +1355,7 @@
                     if (wrkMast.getWrkSts() == 3L) {
                         this.carMoveOut(wrkMast, steNo, crnProtocol);
                     }
-                // 娌℃湁灏忚溅
+                    // 娌℃湁灏忚溅
                 } else {
 
                     // 褰撳墠鍏ュ簱搴撲綅缁勬病鏈夊皬杞� 鍫嗗灈鏈哄垯鍘荤珯鐐瑰彇璐у叆搴�
@@ -1133,7 +1398,7 @@
 
                 }
 
-            // 鐩爣搴撲綅 ===>> 闈炴渶澶栧眰搴撲綅
+                // 鐩爣搴撲綅 ===>> 闈炴渶澶栧眰搴撲綅
             } else {
                 // 鍒ゆ柇灏忚溅鏄惁鍦ㄥ綋鍓嶇粍搴撲綅锛屽鏋滄槸鍒欏皢绌挎杞︾Щ鑷虫渶澶栧眰锛岀瓑寰呭爢鍨涙満鏀捐揣锛涘鏋滀笉鏄紝鍒欏爢鍨涙満瀵绘壘绌挎杞︼紝骞舵斁缃綋鍓嶇粍鏈�澶栧眰
                 Integer steNo = this.hasCarOfIdle(wrkMast.getLocNo());
@@ -1151,7 +1416,10 @@
                         // 灏忚溅澶勪簬绌洪棽
                         SteThread steThread = (SteThread) SlaveConnection.get(SlaveType.Ste, steNo);
                         SteProtocol steProtocol = steThread.getSteProtocol();
-                        if (steProtocol == null) { continue; }
+                        if (steProtocol == null) {
+                            continue;
+                        }
+                        if (steProtocol.loca == 0) continue;
                         if (steProtocol.isIdle()) {
 
                             // 宸茬粡瀛樺湪鍚婅溅鎵ц浠诲姟鏃讹紝鍒欒繃婊�
@@ -1186,7 +1454,7 @@
                             }
                         }
                     }
-                // 娌℃湁灏忚溅
+                    // 娌℃湁灏忚溅
                 } else {
                     if (wrkMast.getWrkSts() == 2L && (wrkMast.getSteNo() == null || wrkMast.getSteNo() == 0)) {
                         // 瀵绘壘褰撳墠鍫嗗灈鏈哄搴旂殑灏忚溅
@@ -1201,8 +1469,8 @@
                     }
                     // 鍫嗗灈鏈烘惉杩愬皬杞�
                     if (wrkMast.getWrkSts() == 3L) {
-                        if (Cools.isEmpty(wrkMast.getSteNo()) || wrkMast.getSteNo()==0){
-                            News.error("宸ヤ綔鍙�={}鍗冲皢寮�濮嬫惉杩愬皬杞︿絾鏄伐浣滄。娌℃湁灏忚溅鍙�",wrkMast.getWrkNo());
+                        if (Cools.isEmpty(wrkMast.getSteNo()) || wrkMast.getSteNo() == 0) {
+                            News.error("宸ヤ綔鍙�={}鍗冲皢寮�濮嬫惉杩愬皬杞︿絾鏄伐浣滄。娌℃湁灏忚溅鍙�", wrkMast.getWrkNo());
                             return false;
                         }
                         this.carMoveIn(wrkMast, wrkMast.getSteNo(), crnProtocol);
@@ -1217,13 +1485,24 @@
     /**
      * 鍑哄簱  ===>>  搴撲綅鍒板爢鍨涙満绔�
      */
-    public synchronized boolean locToCrnStn(CrnSlave slave, CrnProtocol crnProtocol){
+    public synchronized boolean locToCrnStn(CrnSlave slave, CrnProtocol crnProtocol) {
         Collections.shuffle(slave.getCrnOutStn());
         for (CrnSlave.CrnStn crnStn : slave.getCrnOutStn()) {
-            // 鑾峰彇宸ヤ綔鐘舵�佷负11锛堢敓鎴愬嚭搴揑D锛夌殑鍑哄簱宸ヤ綔妗�
+            // 鑾峰彇宸ヤ綔鐘舵�佷负11,12,13,14,15, 16锛堢敓鎴愬嚭搴揑D锛夌殑鍑哄簱宸ヤ綔妗�
             WrkMast wrkMast = wrkMastMapper.selectPakOutStep111215(slave.getId(), crnStn.getStaNo());
             if (wrkMast == null) {
                 continue;
+            }
+
+            /*
+             * 100銆�200瀛樺湪杩涜涓殑鐩樼偣浠诲姟锛屽垯涓嶆墽琛岀洏鐐逛换鍔�
+             * */
+            if (wrkMast.getIoType().equals(107)) {
+                Integer countPan = wrkMastMapper.selectWrkStsAndIoType107Count(wrkMast.getSourceStaNo(), wrkMast.getWrkNo());
+                if (countPan > 0) {
+                    News.error("MainServiceImpl  locToCrnStn 1271琛�" + "鐩樼偣鍑哄簱璺宠繃锛屽瓨鍦ㄨ繘琛屼腑鍙兘鍫靛浠诲姟鏁皗}涓�", countPan);
+                    continue;
+                }
             }
 
             // 鑾峰彇鍫嗗灈鏈哄嚭搴撶珯淇℃伅
@@ -1235,41 +1514,49 @@
                 staProtocol = staProtocol.clone();
             }
 
-            if (wrkMast.getCrnNo().equals(2)){
+            if (wrkMast.getCrnNo().equals(2)) {
                 if (wrkMast.getStaNo() == 103 && devpThread.ioModeOf1F != IoModeType.PAKOUT_MODE) {
-                    News.error("MainServiceImpl  locToCrnStn"+"103闈炲嚭搴撴ā寮忥紝绂佹鍑哄簱銆備换鍔″彿:{}锛侊紒锛�",wrkMast.getWrkNo());
+                    News.error("MainServiceImpl  locToCrnStn" + "103闈炲嚭搴撴ā寮忥紝绂佹鍑哄簱銆備换鍔″彿:{}锛侊紒锛�", wrkMast.getWrkNo());
                     return false;
                 }
                 if (wrkMast.getStaNo() == 203 && devpThread.ioModeOf2F != IoModeType.PAKOUT_MODE) {
-                    News.error("MainServiceImpl  locToCrnStn"+"203闈炲嚭搴撴ā寮忥紝绂佹鍑哄簱銆備换鍔″彿:{}锛侊紒锛�",wrkMast.getWrkNo());
+                    News.error("MainServiceImpl  locToCrnStn" + "203闈炲嚭搴撴ā寮忥紝绂佹鍑哄簱銆備换鍔″彿:{}锛侊紒锛�", wrkMast.getWrkNo());
+                    return false;
+                }
+                if (wrkMast.getStaNo() == 113 && devpThread.ioModeOf3F != IoModeType.PAKOUT_MODE) {
+                    News.error("MainServiceImpl  locToCrnStn" + "113闈炲嚭搴撴ā寮忥紝绂佹鍑哄簱銆備换鍔″彿:{}锛侊紒锛�", wrkMast.getWrkNo());
+                    return false;
+                }
+                if (wrkMast.getStaNo() == 213 && devpThread.ioModeOf4F != IoModeType.PAKOUT_MODE) {
+                    News.error("MainServiceImpl  locToCrnStn" + "213闈炲嚭搴撴ā寮忥紝绂佹鍑哄簱銆備换鍔″彿:{}锛侊紒锛�", wrkMast.getWrkNo());
                     return false;
                 }
 
-                if (wrkMast.getWrkSts() == 11 && (wrkMast.getIoType() == 103 || wrkMast.getIoType() == 107)){
+                if (wrkMast.getWrkSts() == 11 && (wrkMast.getIoType() == 103 || wrkMast.getIoType() == 107)) {
                     Integer sour = wrkMast.getSourceStaNo();
                     List<WrkMast> wrkMasts = wrkMastMapper.selectWrkStsAndIoType0(sour);
-                    if (wrkMasts.size() > 0){
-                        News.error("MainServiceImpl  1028琛�"+"瀛樺湪鎹℃枡銆佺洏鐐规湭鍏ュ簱璐х墿锛�2鍙峰爢鍨涙満鏆傛椂绂佹鍑哄簱锛侊紒锛�");
+                    if (wrkMasts.size() > 0) {
+                        News.error("MainServiceImpl  1300琛�" + "瀛樺湪鎹℃枡銆佺洏鐐规湭鍏ュ簱璐х墿锛�2鍙峰爢鍨涙満鏆傛椂绂佹鍑哄簱锛侊紒锛�");
                         return false;
                     }
 
                     //濡傛灉瀛樺湪鐩爣绔�300涓旀鍦ㄦ墽琛岀殑鎷f枡/鐩樼偣浠诲姟锛屽垯2鍙峰爢鍨涙満涓嶅厑璁稿仛鎷f枡/鐩樼偣鍑哄簱
                     WrkMast one = wrkMastService.selectOne(new EntityWrapper<WrkMast>()
-                            .eq("sta_no",300)
+                            .eq("sta_no", 300)
                             .last(" and wrk_sts>11 and io_type in (103,107) "));
-                    if(!Cools.isEmpty(one)){
-                        News.error("MainServiceImpl  1099琛�"+"瀛樺湪鎹℃枡銆佺洏鐐规湭鍏ュ簱璐х墿锛�2鍙峰爢鍨涙満鏆傛椂绂佹鍑哄簱锛侊紒锛�");
+                    if (!Cools.isEmpty(one)) {
+                        News.error("MainServiceImpl  1309琛�" + "瀛樺湪鎹℃枡銆佺洏鐐规湭鍏ュ簱璐х墿锛�2鍙峰爢鍨涙満鏆傛椂绂佹鍑哄簱锛侊紒锛�");
                         continue;
                     }
                 }
 
-                if (wrkMast.getWrkSts() == 11 && wrkMast.getIoType() == 101){
+                if (wrkMast.getWrkSts() == 11 && wrkMast.getIoType() == 101) {
                     Integer sour = wrkMast.getSourceStaNo();
                     List<WrkMast> wrkMasts = wrkMastMapper.selectWrkStsAndIoType1(sour);
-                    if (wrkMasts.size() > 0){
-                        for (WrkMast one : wrkMasts){
-                            if(one.getWrkNo().equals(wrkMast.getWrkNo())){
-                                News.error("MainServiceImpl  1028琛�"+"204瀛樺湪鍏ㄦ澘鍑哄簱涓揣鐗╋紝2鍙峰爢鍨涙満鏆傛椂绂佹鍏ㄦ澘鍑哄簱锛侊紒锛�");
+                    if (wrkMasts.size() > 0) {
+                        for (WrkMast one : wrkMasts) {
+                            if (one.getWrkNo().equals(wrkMast.getWrkNo())) {
+                                News.error("MainServiceImpl  1028琛�" + "204瀛樺湪鍏ㄦ澘鍑哄簱涓揣鐗╋紝2鍙峰爢鍨涙満鏆傛椂绂佹鍏ㄦ澘鍑哄簱锛侊紒锛�");
                                 return false;
                             }
                         }
@@ -1279,35 +1566,35 @@
 
             // 鍒ゆ柇鏄惁宸插瓨鍦ㄥ皬杞︾粦瀹氫换鍔�
             BasSte basSte = basSteService.findByCrnNo(wrkMast.getCrnNo());
-            if(basSte == null) continue;
+            if (basSte == null) continue;
             WrkMast one1 = wrkMastService.selectOne(new EntityWrapper<WrkMast>()
-                    .eq("ste_no",basSte.getSteNo())
+                    .eq("ste_no", basSte.getSteNo())
                     .last(" and wrk_sts < 10"));
-            if(one1 != null){
+            if (one1 != null) {
                 News.error("{}鍑哄簱浠诲姟鏃犳硶浣滀笟锛屽洜鍏ュ簱浠诲姟宸茬粦瀹氬皬杞�!", wrkMast.getWrkNo());
                 return false;
             }
 
             //鍔犲己鍒ゆ柇锛岀‘淇濆洜鍑哄簱瀵艰嚧鐨勭Щ搴撴暣濂椾换鍔″叏閮ㄧ粨鏉熷悗锛屾墠鑳芥墽琛屼笅涓�绗斿嚭搴撲换鍔°�傚彧鏈夊簱浣嶅畬鎴愮Щ搴撳洖鍘诲叏閮ㄤ换鍔″悗锛屾墠璁や负褰撶粍鍑哄簱浠诲姟瀹屾垚
             WrkMast one = wrkMastMapper.selectLocMoveData(slave.getId());
-            if(!Cools.isEmpty(one)){
+            if (!Cools.isEmpty(one)) {
                 //瀛樺湪绉诲簱浠诲姟锛屼笖鍦ㄧЩ鍑轰腑锛屼笖绉诲簱婧愬簱浣嶄笌寰呭嚭搴撳簱浣嶄笉鍦ㄥ悓涓�搴撲綅缁勶紝鏃惰烦鍑猴紝纭繚绉诲簱/鍑哄簱鍏ㄥ浠诲姟瀹屾垚鍚庯紝鍐嶆墽琛屼笅涓�绗�
-                if(one.getWrkSts() > 10 && (Utils.getGroupRow(wrkMast.getSourceLocNo()) != Utils.getGroupRow(one.getSourceLocNo())
+                if (one.getWrkSts() > 10 && (Utils.getGroupRow(wrkMast.getSourceLocNo()) != Utils.getGroupRow(one.getSourceLocNo())
                         || Utils.getBay(wrkMast.getSourceLocNo()) != Utils.getBay(one.getSourceLocNo())
-                        || Utils.getLev(wrkMast.getSourceLocNo()) != Utils.getLev(one.getSourceLocNo()))){
+                        || Utils.getLev(wrkMast.getSourceLocNo()) != Utils.getLev(one.getSourceLocNo()))) {
                     continue;
                 }
                 //瀛樺湪绉诲簱浠诲姟锛屼笖鍦ㄧЩ鍥炰腑锛屼笖绉诲簱鐩爣搴撲綅涓庡緟鍑哄簱搴撲綅涓嶅湪鍚屼竴搴撲綅缁勶紝鏃惰烦鍑猴紝纭繚绉诲簱/鍑哄簱鍏ㄥ浠诲姟瀹屾垚鍚庯紝鍐嶆墽琛屼笅涓�绗�
-                if(one.getWrkSts() < 11  && (Utils.getGroupRow(wrkMast.getSourceLocNo()) != Utils.getGroupRow(one.getLocNo())
+                if (one.getWrkSts() < 11 && (Utils.getGroupRow(wrkMast.getSourceLocNo()) != Utils.getGroupRow(one.getLocNo())
                         || Utils.getBay(wrkMast.getSourceLocNo()) != Utils.getBay(one.getLocNo())
-                        || Utils.getLev(wrkMast.getSourceLocNo()) != Utils.getLev(one.getLocNo()))){
+                        || Utils.getLev(wrkMast.getSourceLocNo()) != Utils.getLev(one.getLocNo()))) {
                     continue;
                 }
             }
 
             //鍑哄簱搴撲綅涓嶆槸鏈�澶栧眰搴撲綅锛屽垽鏂渶澶栧眰搴撲綅鏄惁涓虹┖搴撲綅锛屽涓嶆槸鍒欒繘琛岀Щ搴撲换鍔�
             boolean flag = false;
-            if(!locMastService.isOutMost(wrkMast.getSourceLocNo())) {
+            if (!locMastService.isOutMost(wrkMast.getSourceLocNo())) {
                 WrkMast wrkMastMove = wrkMastMapper.selectLocMoveWorking(slave.getId());
                 if (wrkMastMove != null && wrkMast.getWrkNo() == 111) {
                     continue;
@@ -1319,39 +1606,40 @@
                 } else {
                     List<String> shallowLocs = Utils.getShallowLocs(wrkMast.getSourceLocNo());
                     if (!Cools.isEmpty(shallowLocs)) {
+                        // 娴呭簱浣嶇粍鏈夎揣
                         for (String shallowLocNo : shallowLocs) {
                             LocMast shallowLoc = locMastService.selectById(shallowLocNo);
                             WrkMast waitWrkMast = wrkMastMapper.selectByLocNo(shallowLocNo);
+                            // 娴呭簱浣嶅湪浣滀笟涓�
                             if (shallowLoc.getLocSts().equals("P") || shallowLoc.getLocSts().equals("R")) {
-                                if (Cools.isEmpty(waitWrkMast)){
+                                if (Cools.isEmpty(waitWrkMast)) {
                                     News.error("搴撲綅寮傚父");
-                                }else {
-                                    if (waitWrkMast.getIoType() != 11 || waitWrkMast.getWrkSts() != 17){
-                                        if(waitWrkMast.getIoPri()<=9980.0){
-                                            waitWrkMast.setIoPri(waitWrkMast.getIoPri()+10.0);
-                                        }else {
+                                } else {
+                                    if (waitWrkMast.getIoType() != 11 || waitWrkMast.getWrkSts() != 17) {
+                                        if (waitWrkMast.getIoPri() <= 9980.0) {
+                                            waitWrkMast.setIoPri(waitWrkMast.getIoPri() + 10.0);
+                                        } else {
                                             waitWrkMast.setIoPri(9999d);
                                         }
-                                        if(wrkMast.getIoPri()>=9000.0){
-                                            wrkMast.setIoPri(9999d);
-                                        }else if (wrkMast.getIoPri()>20.0){
-                                            wrkMast.setIoPri(wrkMast.getIoPri()-10.0);
-                                        }else {
-                                            wrkMast.setIoPri(13.0d);
-                                        }
-                                        if (wrkMastMapper.updateById(wrkMast)==0){
+//                                        if (wrkMast.getIoPri()>23.0){
+//                                            wrkMast.setIoPri(wrkMast.getIoPri()-10.0);
+//                                        }else {
+                                        wrkMast.setIoPri(15.0d);
+//                                        }
+                                        if (wrkMastMapper.updateById(wrkMast) == 0) {
                                             News.error("璋冩暣浼樺厛绾уけ璐�");
                                         }
-                                        if (wrkMastMapper.updateById(waitWrkMast)==0){
+                                        if (wrkMastMapper.updateById(waitWrkMast) == 0) {
                                             News.error("璋冩暣浼樺厛绾уけ璐�");
-                                        }else if (waitWrkMast.getWrkSts() != 17){
+                                        } else if (waitWrkMast.getWrkSts() != 17) {
                                             flag = true;
                                         }
 
                                         break;
                                     }
                                 }
-                            }else if (shallowLoc.getLocSts().equals("F") || shallowLoc.getLocSts().equals("D")) {
+                                // 娴呭簱浣嶇粍鏈夎揣锛屼笖娌℃湁鍦ㄤ綔涓氫腑
+                            } else if (shallowLoc.getLocSts().equals("F") || shallowLoc.getLocSts().equals("D")) {
                                 if (null == waitWrkMast) {
                                     // 鐢熸垚涓�绗旂Щ搴撲换鍔″伐浣滄。銆佹敼鍙樻祬搴撲綅鐨勬簮搴�/鐩爣搴� 搴撲綅鐘舵��
                                     // 娌℃湁浣滀笟涓殑鍑哄簱浠诲姟鏃讹紝鎵嶈兘鐢熸垚绉诲簱浠诲姟
@@ -1392,18 +1680,18 @@
                     }
                 }
             }
-            if(flag){
+            if (flag) {
                 return false;
             }
 
             // 宸ヤ綔妗g姸鎬佸垽鏂�
-            if (wrkMast.getIoType() < 100 || wrkMast.getSourceStaNo() == null){
+            if (wrkMast.getIoType() < 100 || wrkMast.getSourceStaNo() == null) {
                 News.error("鏌ヨ宸ヤ綔妗f暟鎹笉绗﹀悎鏉′欢--鍏ュ嚭绫诲瀷/绔欑偣, 宸ヤ綔鍙�={}锛屾簮搴撲綅={}锛屽叆鍑虹被鍨�={}", wrkMast.getWrkNo(), wrkMast.getSourceLocNo(), wrkMast.getIoType());
                 continue;
             }
             // 鑾峰彇婧愬簱浣嶄俊鎭�
             LocMast sourceSta = locMastService.selectById(wrkMast.getSourceLocNo());
-            if (!sourceSta.getLocSts().equals("R") &&!sourceSta.getLocSts().equals("P")) {
+            if (!sourceSta.getLocSts().equals("R") && !sourceSta.getLocSts().equals("P")) {
                 News.error("鍑哄簱鎿嶄綔搴撲綅鐘舵�佷笉绗﹀悎--鐘舵��, 搴撲綅鍙�={}锛屽簱浣嶇姸鎬�={}", wrkMast.getSourceLocNo(), sourceSta.getLocSts());
                 continue;
             }
@@ -1415,7 +1703,7 @@
                 continue;
             }
             // 鍒ゆ柇鍫嗗灈鏈哄嚭搴撶珯鐘舵��
-            if (staProtocol.isAutoing() && !staProtocol.isLoading() && staDetl.getCanouting() !=null && staDetl.getCanouting().equals("Y")
+            if (staProtocol.isAutoing() && !staProtocol.isLoading() && staDetl.getCanouting() != null && staDetl.getCanouting().equals("Y")
                     && staProtocol.getWorkNo() == 0 && staProtocol.isOutEnable()) {
                 // 鍛戒护涓嬪彂鍖� --------------------------------------------------------------------------
 
@@ -1467,7 +1755,7 @@
                         }
                         return true;
                     }
-                // 涓嶆槸鏈�澶栧眰搴撲綅锛岄渶瑕佷娇鐢ㄧ┛姊溅鎼繍鍚庯紝鍐嶅爢鍨涙満鍑哄簱
+                    // 涓嶆槸鏈�澶栧眰搴撲綅锛岄渶瑕佷娇鐢ㄧ┛姊溅鎼繍鍚庯紝鍐嶅爢鍨涙満鍑哄簱
                 } else {
                     // 褰撳墠缁勫簱浣嶆槸鍚︽湁绌挎杞�
                     Integer steNo = this.hasCarOfIdle(wrkMast.getSourceLocNo());
@@ -1478,12 +1766,15 @@
                             // 缁欑┛姊溅涓嬪彂鍛戒护 璁╁叾灏嗚揣鐗╂尓鑷冲爢鍨涙満鎼繍鐐�
                             SteThread steThread = (SteThread) SlaveConnection.get(SlaveType.Ste, steNo);
                             SteProtocol steProtocol = steThread.getSteProtocol();
-                            if (steProtocol == null) { continue; }
+                            if (steProtocol == null) {
+                                continue;
+                            }
+                            if (steProtocol.loca == 0) continue;
                             if (steProtocol.isIdle()) {
 
                                 //灏忚溅鍙兘缁戝畾涓�绗斾綔涓氫腑浠诲姟
                                 WrkMast wrkMast1 = wrkMastMapper.selectSteNoData(steNo);
-                                if(wrkMast1 != null){
+                                if (wrkMast1 != null) {
                                     continue;
                                 }
 
@@ -1496,7 +1787,7 @@
                                 steCommand.setRow(Utils.getGroupRow(steProtocol.getRow().intValue()).shortValue());
                                 steCommand.setBay(steProtocol.getBay());
                                 steCommand.setLev(steProtocol.getLev());
-                                steCommand.setMemo("11==>14灏忚溅鎼嚭搴撲换鍔★紝浠诲姟鍙�"+wrkMast.getWrkNo()+"");
+                                steCommand.setMemo("11==>14灏忚溅鎼嚭搴撲换鍔★紝浠诲姟鍙�" + wrkMast.getWrkNo() + "");
 
                                 if (!MessageQueue.offer(SlaveType.Ste, steNo, new Task(2, steCommand))) {
                                     News.error("绌挎杞﹀懡浠や笅鍙戝け璐ワ紝绌挎杞﹀彿={}锛屼换鍔℃暟鎹�={}", steNo, JSON.toJSON(steCommand));
@@ -1548,7 +1839,7 @@
                             }
                         }
 
-                    // 娌℃湁灏忚溅
+                        // 娌℃湁灏忚溅
                     } else {
                         if (wrkMast.getWrkSts() == 11L && wrkMast.getSteNo() == null) {
                             // 瀵绘壘鏈�杩戠殑灏忚溅
@@ -1579,8 +1870,8 @@
                         }
                         // 鍫嗗灈鏈烘惉杩愬皬杞�
                         if (wrkMast.getWrkSts() == 12L) {
-                            if (Cools.isEmpty(wrkMast.getSteNo()) || wrkMast.getSteNo()==0) {
-                                News.error("宸ヤ綔鍙�={}鍗冲皢寮�濮嬫惉杩愬皬杞︿絾鏄伐浣滄。娌℃湁灏忚溅鍙�",wrkMast.getWrkNo());
+                            if (Cools.isEmpty(wrkMast.getSteNo()) || wrkMast.getSteNo() == 0) {
+                                News.error("宸ヤ綔鍙�={}鍗冲皢寮�濮嬫惉杩愬皬杞︿絾鏄伐浣滄。娌℃湁灏忚溅鍙�", wrkMast.getWrkNo());
                                 return false;
                             }
                             this.carMoveIn(wrkMast, wrkMast.getSteNo(), crnProtocol);
@@ -1596,7 +1887,7 @@
     /**
      * 搴撲綅绉昏浆 NEW
      */
-    public synchronized void locToLoc1(CrnSlave slave, CrnProtocol crnProtocol){
+    public synchronized void locToLoc1(CrnSlave slave, CrnProtocol crnProtocol) {
         // 鑾峰彇宸ヤ綔妗d俊鎭�
         WrkMast wrkMast = wrkMastMapper.selectLocMove(slave.getId());
         if (null == wrkMast) {
@@ -1610,11 +1901,11 @@
 
         // 鍒ゆ柇鏄惁宸插瓨鍦ㄥ皬杞︾粦瀹氫换鍔�
         BasSte basSte = basSteService.findByCrnNo(wrkMast.getCrnNo());
-        if(basSte == null) return;
+        if (basSte == null) return;
         WrkMast one = wrkMastService.selectOne(new EntityWrapper<WrkMast>()
-                .eq("ste_no",basSte.getSteNo())
+                .eq("ste_no", basSte.getSteNo())
                 .last(" and io_type != 11 and wrk_sts < 10"));
-        if(one != null){
+        if (one != null) {
             News.error("{}绉诲簱浠诲姟鏃犳硶浣滀笟锛屽洜鍏ュ簱浠诲姟宸茬粦瀹氬皬杞�!", wrkMast.getWrkNo());
             return;
         }
@@ -1697,12 +1988,14 @@
                     // 缁欑┛姊溅涓嬪彂鍛戒护 璁╁叾灏嗚揣鐗╂尓鑷冲爢鍨涙満鎼繍鐐�
                     SteThread steThread = (SteThread) SlaveConnection.get(SlaveType.Ste, steNo);
                     SteProtocol steProtocol = steThread.getSteProtocol();
-                    if (steProtocol == null) { return; }
+                    if (steProtocol == null) {
+                        return;
+                    }
                     if (steProtocol.isIdle()) {
 
                         //灏忚溅鍙兘缁戝畾涓�绗斾綔涓氫腑浠诲姟
                         WrkMast wrkMast1 = wrkMastMapper.selectSteNoData(steNo);
-                        if(wrkMast1 != null){
+                        if (wrkMast1 != null) {
                             return;
                         }
 
@@ -1792,7 +2085,7 @@
     /**
      * 搴撲綅绉昏浆(楂橀绉诲簱锛宨o_type=111)
      */
-    public synchronized void locToLoc111(CrnSlave slave, CrnProtocol crnProtocol){
+    public synchronized void locToLoc111(CrnSlave slave, CrnProtocol crnProtocol) {
         // 鑾峰彇宸ヤ綔妗d俊鎭�
         WrkMast wrkMast = wrkMastMapper.selectLocMove111(slave.getId());
         if (null == wrkMast) {
@@ -1806,11 +2099,11 @@
 
         // 鍒ゆ柇鏄惁宸插瓨鍦ㄥ皬杞︾粦瀹氫换鍔�
         BasSte basSte = basSteService.findByCrnNo(wrkMast.getCrnNo());
-        if(basSte == null) return;
+        if (basSte == null) return;
         WrkMast one = wrkMastService.selectOne(new EntityWrapper<WrkMast>()
-                .eq("ste_no",basSte.getSteNo())
+                .eq("ste_no", basSte.getSteNo())
                 .last(" and io_type != 111 and wrk_sts < 10"));
-        if(one != null){
+        if (one != null) {
             News.error("{}绉诲簱浠诲姟鏃犳硶浣滀笟锛屽洜鍏ュ簱浠诲姟宸茬粦瀹氬皬杞�!", wrkMast.getWrkNo());
             return;
         }
@@ -1888,7 +2181,7 @@
     /**
      * 搴撲綅绉昏浆锛屽洖鍘熷簱浣�
      */
-    public synchronized void locToLoc17(CrnSlave slave, CrnProtocol crnProtocol){
+    public synchronized void locToLoc17(CrnSlave slave, CrnProtocol crnProtocol) {
         // 鑾峰彇宸ヤ綔妗d俊鎭�
         WrkMast wrkMast = wrkMastMapper.selectLocMove17(slave.getId());
         if (null == wrkMast) {
@@ -1904,28 +2197,28 @@
             Integer lev = Utils.getLev(wrkMast.getSourceLocNo());
 
             String locNo = Utils.append(row, bay, lev);
-            String[] deeplocs  = Utils.getDeepLocs(locNo);
-            if(!Cools.isEmpty(deeplocs)){
+            String[] deeplocs = Utils.getDeepLocs(locNo);
+            if (!Cools.isEmpty(deeplocs)) {
                 boolean ret = false;
-                for(String deepLocNo : deeplocs) {
+                for (String deepLocNo : deeplocs) {
                     LocMast deepLoc = locMastService.selectById(deepLocNo);
                     WrkMast waitWrkMast = wrkMastMapper.selectByLocNo1(deepLocNo);
-                    if(deepLoc != null && !deepLoc.getLocSts().equals("F")
+                    if (deepLoc != null && !deepLoc.getLocSts().equals("F")
                             && !deepLoc.getLocSts().equals("D")
                             && !deepLoc.getLocSts().equals("O")
-                            && (waitWrkMast!=null && waitWrkMast.getWrkSts()<18)){
+                            && (waitWrkMast != null && waitWrkMast.getWrkSts() < 18)) {
                         News.error("绉诲簱鍐嶅洖搴撴椂锛屾繁搴撲綅缁勬繁搴撲綅鐘舵�佷负浣滀笟涓� ===>> deepLoc={},loc_sts={}", deepLoc.getLocNo(), deepLoc.getLocSts());
-                        if(waitWrkMast.getIoPri()<9999) {//璋冮珮浼樺厛绾�
+                        if (waitWrkMast.getIoPri() < 9999) {//璋冮珮浼樺厛绾�
                             waitWrkMast.setIoPri(waitWrkMast.getIoPri() + 1);
                             wrkMastService.updateById(waitWrkMast);
                         }
                         flag = true;
                         break;
                     }
-                    if(deepLoc != null && deepLoc.getLocSts().equals("O")){
+                    if (deepLoc != null && deepLoc.getLocSts().equals("O")) {
                         //淇敼绉诲簱宸ヤ綔妗�
                         wrkMast.setSourceLocNo(wrkMast.getLocNo());
-                        wrkMast.setIoPri((double)9999);
+                        wrkMast.setIoPri((double) 9999);
                         wrkMast.setWrkSts(2L);
                         wrkMast.setLocNo(deepLocNo);
                         wrkMast.setSteNo(0);
@@ -1934,7 +2227,7 @@
                             News.error("淇敼宸ヤ綔妗g姸鎬� 17.绉诲簱瀹屾垚 => 2.绉诲簱鍐嶅叆搴撲腑 澶辫触锛侊紒锛屽伐浣滃彿={}", wrkMast.getWrkNo());
                         }
 
-                        if(deepLoc.getLocSts().equals("O")){
+                        if (deepLoc.getLocSts().equals("O")) {
                             deepLoc.setLocSts("S"); // S.鍏ュ簱棰勭害
                             deepLoc.setModiTime(new Date());
                             if (!locMastService.updateById(deepLoc)) {
@@ -1943,7 +2236,7 @@
                             }
                         }
                         LocMast sourceLoc = locMastService.selectById(wrkMast.getSourceLocNo());
-                        if(sourceLoc.getLocSts().equals("R") || sourceLoc.getLocSts().equals("D")){
+                        if (sourceLoc.getLocSts().equals("R") || sourceLoc.getLocSts().equals("D")) {
                             sourceLoc.setLocSts("R"); // R.鍑哄簱棰勭害
                             sourceLoc.setModiTime(new Date());
                             if (!locMastService.updateById(sourceLoc)) {
@@ -1954,12 +2247,12 @@
                         break;
                     }
                 }
-                if(ret == false && !flag){//娣卞簱浣嶉兘涓嶄负O
+                if (ret == false && !flag) {//娣卞簱浣嶉兘涓嶄负O
                     LocMast curLoc = locMastService.selectById(locNo);
-                    if(curLoc != null && curLoc.getLocSts().equals("O")){
+                    if (curLoc != null && curLoc.getLocSts().equals("O")) {
                         //淇敼绉诲簱宸ヤ綔妗�
                         wrkMast.setSourceLocNo(wrkMast.getLocNo());
-                        wrkMast.setIoPri((double)9999);
+                        wrkMast.setIoPri((double) 9999);
                         wrkMast.setWrkSts(2L);
                         wrkMast.setLocNo(locNo);
                         wrkMast.setSteNo(0);
@@ -1968,7 +2261,7 @@
                             News.error("淇敼宸ヤ綔妗g姸鎬� 17.绉诲簱瀹屾垚 => 2.绉诲簱鍐嶅叆搴撲腑 澶辫触锛侊紒锛屽伐浣滃彿={}", wrkMast.getWrkNo());
                         }
 
-                        if(curLoc.getLocSts().equals("O")){
+                        if (curLoc.getLocSts().equals("O")) {
                             curLoc.setLocSts("S"); // S.鍏ュ簱棰勭害
                             curLoc.setModiTime(new Date());
                             if (!locMastService.updateById(curLoc)) {
@@ -1977,7 +2270,7 @@
                             }
                         }
                         LocMast sourceLoc = locMastService.selectById(wrkMast.getSourceLocNo());
-                        if(sourceLoc.getLocSts().equals("R") || sourceLoc.getLocSts().equals("D")){
+                        if (sourceLoc.getLocSts().equals("R") || sourceLoc.getLocSts().equals("D")) {
                             sourceLoc.setLocSts("R"); // R.鍑哄簱棰勭害
                             sourceLoc.setModiTime(new Date());
                             if (!locMastService.updateById(sourceLoc)) {
@@ -1987,7 +2280,7 @@
                     }
                 }
             }
-            if(flag){
+            if (flag) {
                 return;
             }
         }
@@ -2044,7 +2337,9 @@
                         if (null == wrkMastMapper.selectPakin(slave.getId(), steNo)) {
                             SteThread steThread = (SteThread) SlaveConnection.get(SlaveType.Ste, steNo);
                             SteProtocol steProtocol = steThread.getSteProtocol();
-                            if (steProtocol == null) { return; }
+                            if (steProtocol == null) {
+                                return;
+                            }
                             this.letCarBeWaiting(wrkMast, steNo, wrkMast.getLocNo());
 //                            if(steProtocol.getLoca()==3 || steProtocol.getLoca()==4){
 //                                //灏忚溅宸茬粡鍦ㄥ緟鏈轰綅鏃讹紝鏃犻渶涓嬪彂鍒板緟鏈轰綅浠诲姟锛岀洿鎺ユ洿鏂扮姸鎬佸井3锛屽悓鏃剁粦瀹氬皬杞�
@@ -2064,7 +2359,9 @@
                         // 灏忚溅澶勪簬绌洪棽
                         SteThread steThread = (SteThread) SlaveConnection.get(SlaveType.Ste, steNo);
                         SteProtocol steProtocol = steThread.getSteProtocol();
-                        if (steProtocol == null) { return; }
+                        if (steProtocol == null) {
+                            return;
+                        }
                         if (steProtocol.isIdle()) {
 
                             // 宸茬粡瀛樺湪鍚婅溅鎵ц浠诲姟鏃讹紝鍒欒繃婊�
@@ -2187,7 +2484,7 @@
     /**
      * 搴撲綅绉昏浆
      */
-    public synchronized void locToLoc(CrnSlave slave, CrnProtocol crnProtocol){
+    public synchronized void locToLoc(CrnSlave slave, CrnProtocol crnProtocol) {
         // 鑾峰彇宸ヤ綔妗d俊鎭�
         WrkMast wrkMast = wrkMastMapper.selectLocMove(slave.getId());
         if (null == wrkMast) {
@@ -2279,7 +2576,9 @@
                         // 灏忚溅澶勪簬绌洪棽
                         SteThread steThread = (SteThread) SlaveConnection.get(SlaveType.Ste, steNo);
                         SteProtocol steProtocol = steThread.getSteProtocol();
-                        if (steProtocol == null) { return; }
+                        if (steProtocol == null) {
+                            return;
+                        }
                         if (steProtocol.isIdle()) {
 
                             // 宸茬粡瀛樺湪鍚婅溅鎵ц浠诲姟鏃讹紝鍒欒繃婊�
@@ -2345,12 +2644,14 @@
                     // 缁欑┛姊溅涓嬪彂鍛戒护 璁╁叾灏嗚揣鐗╂尓鑷冲爢鍨涙満鎼繍鐐�
                     SteThread steThread = (SteThread) SlaveConnection.get(SlaveType.Ste, steNo);
                     SteProtocol steProtocol = steThread.getSteProtocol();
-                    if (steProtocol == null) { return; }
+                    if (steProtocol == null) {
+                        return;
+                    }
                     if (steProtocol.isIdle()) {
 
                         //灏忚溅鍙兘缁戝畾涓�绗斾綔涓氫腑浠诲姟
                         WrkMast wrkMast1 = wrkMastMapper.selectSteNoData(steNo);
-                        if(wrkMast1 != null){
+                        if (wrkMast1 != null) {
                             return;
                         }
 
@@ -2427,7 +2728,9 @@
                             // 灏忚溅澶勪簬绌洪棽
                             SteThread steThread = (SteThread) SlaveConnection.get(SlaveType.Ste, steNo);
                             SteProtocol steProtocol = steThread.getSteProtocol();
-                            if (steProtocol == null) { return; }
+                            if (steProtocol == null) {
+                                return;
+                            }
                             if (steProtocol.isIdle()) {
 
                                 // 宸茬粡瀛樺湪鍚婅溅鎵ц浠诲姟鏃讹紝鍒欒繃婊�
@@ -2481,8 +2784,8 @@
                 }
                 // 鍫嗗灈鏈烘惉杩愬皬杞�
                 if (wrkMast.getWrkSts() == 12L) {
-                    if (Cools.isEmpty(wrkMast.getSteNo()) || wrkMast.getSteNo()==0) {
-                        News.error("宸ヤ綔鍙�={}鍗冲皢寮�濮嬫惉杩愬皬杞︿絾鏄伐浣滄。娌℃湁灏忚溅鍙�",wrkMast.getWrkNo());
+                    if (Cools.isEmpty(wrkMast.getSteNo()) || wrkMast.getSteNo() == 0) {
+                        News.error("宸ヤ綔鍙�={}鍗冲皢寮�濮嬫惉杩愬皬杞︿絾鏄伐浣滄。娌℃湁灏忚溅鍙�", wrkMast.getWrkNo());
                         return;
                     }
                     this.carMoveIn(wrkMast, wrkMast.getSteNo(), crnProtocol);
@@ -2499,7 +2802,11 @@
             // 鑾峰彇鍫嗗灈鏈轰俊鎭�
             SteThread steThread = (SteThread) SlaveConnection.get(SlaveType.Ste, ste.getId());
             SteProtocol steProtocol = steThread.getSteProtocol();
-            if (steProtocol == null) { continue; }
+            if (steProtocol == null) {
+                continue;
+            }
+            if (Cools.isEmpty(steProtocol.loca)) continue;
+            if (steProtocol.loca == 0) continue;
             if (Utils.getGroupRow(locNo).equals(Utils.getGroupRow(steProtocol.getRow().intValue())) && steProtocol.getBay() == Utils.getBay(locNo) && steProtocol.getLev() == Utils.getLev(locNo)) {
                 return steProtocol.getSteNo().intValue();
             }
@@ -2515,7 +2822,11 @@
             // 鑾峰彇鍫嗗灈鏈轰俊鎭�
             SteThread steThread = (SteThread) SlaveConnection.get(SlaveType.Ste, ste.getId());
             SteProtocol steProtocol = steThread.getSteProtocol();
-            if (steProtocol == null) { continue; }
+            if (steProtocol == null) {
+                continue;
+            }
+            if (Cools.isEmpty(steProtocol.loca)) continue;
+            if (steProtocol.loca == 0) continue;
             if (steProtocol.isIdle()) {
                 if (Utils.getGroupRow(locNo).equals(Utils.getGroupRow(steProtocol.getRow().intValue())) && steProtocol.getBay() == Utils.getBay(locNo) && steProtocol.getLev() == Utils.getLev(locNo)) {
                     return steProtocol.getSteNo().intValue();
@@ -2544,18 +2855,20 @@
 
     /**
      * 璁╁皬杞︿粠 杩滅偣 ====>> 寰呮満
-     *  绛夊緟鍫嗗灈鏈烘惉杩�
+     * 绛夊緟鍫嗗灈鏈烘惉杩�
      */
     public synchronized void letCarBeWaiting(WrkMast wrkMast, Integer steNo, String locNo) {
         // 鑾峰彇绌挎杞︿俊鎭�
         SteThread steThread = (SteThread) SlaveConnection.get(SlaveType.Ste, steNo);
         SteProtocol steProtocol = steThread.getSteProtocol();
-        if (steProtocol == null) { return; }
+        if (steProtocol == null) {
+            return;
+        }
         if (steProtocol.isIdle()) {
 
             //灏忚溅鍙兘缁戝畾涓�绗斾綔涓氫腑浠诲姟
             WrkMast wrkMast1 = wrkMastMapper.selectSteNoData(steNo);
-            if(wrkMast1 != null){
+            if (wrkMast1 != null) {
                 return;
             }
 
@@ -2587,7 +2900,9 @@
         // 鑾峰彇绌挎杞︿俊鎭�
         SteThread steThread = (SteThread) SlaveConnection.get(SlaveType.Ste, steNo);
         SteProtocol steProtocol = steThread.getSteProtocol();
-        if (steProtocol == null) { return; }
+        if (steProtocol == null) {
+            return;
+        }
 
         if (!basSteService.updatePakMk(steNo, "Y")) {
             News.error("淇敼绌挎杞︿綔涓氱姸鎬� 澶辫触锛侊紒锛岀┛姊溅={}", steNo);
@@ -2596,7 +2911,7 @@
 
         //灏忚溅鍙兘缁戝畾涓�绗斾綔涓氫腑浠诲姟
         WrkMast wrkMast1 = wrkMastMapper.selectSteNoData(steNo);
-        if(wrkMast1 != null){
+        if (wrkMast1 != null) {
             return;
         }
 
@@ -2624,18 +2939,20 @@
 
     /**
      * 璁╁皬杞︿粠 杩滅偣 ====>> 绉诲姩鍒拌繎鐐�
-     *  绛夊緟鍫嗗灈鏈烘惉杩�
+     * 绛夊緟鍫嗗灈鏈烘惉杩�
      */
     public synchronized void letCarBeReady(WrkMast wrkMast, Integer steNo, String locNo) {
         // 鑾峰彇绌挎杞︿俊鎭�
         SteThread steThread = (SteThread) SlaveConnection.get(SlaveType.Ste, steNo);
         SteProtocol steProtocol = steThread.getSteProtocol();
-        if (steProtocol == null) { return; }
+        if (steProtocol == null) {
+            return;
+        }
         if (steProtocol.isIdle()) {
 
             //灏忚溅鍙兘缁戝畾涓�绗斾綔涓氫腑浠诲姟
             WrkMast wrkMast1 = wrkMastMapper.selectSteNoData(steNo);
-            if(wrkMast1 != null){
+            if (wrkMast1 != null) {
                 return;
             }
 
@@ -2666,18 +2983,20 @@
 
     /**
      * 璁╁皬杞︿粠 杩滅偣 ====>> 绉诲姩鍒拌繎鐐�
-     *  绛夊緟鍫嗗灈鏈烘惉杩�
+     * 绛夊緟鍫嗗灈鏈烘惉杩�
      */
     public synchronized void letCarBeReady(WrkCharge wrkCharge, Integer steNo) {
         // 鑾峰彇绌挎杞︿俊鎭�
         SteThread steThread = (SteThread) SlaveConnection.get(SlaveType.Ste, steNo);
         SteProtocol steProtocol = steThread.getSteProtocol();
-        if (steProtocol == null) { return; }
+        if (steProtocol == null) {
+            return;
+        }
         if (steProtocol.isIdle()) {
 
             //灏忚溅鍙兘缁戝畾涓�绗斾綔涓氫腑浠诲姟
             WrkMast wrkMast1 = wrkMastMapper.selectSteNoData(steNo);
-            if(wrkMast1 != null){
+            if (wrkMast1 != null) {
                 return;
             }
 
@@ -2711,8 +3030,10 @@
         // 鑾峰彇鍫嗗灈鏈轰俊鎭�
         SteThread steThread = (SteThread) SlaveConnection.get(SlaveType.Ste, steNo);
         SteProtocol steProtocol = steThread.getSteProtocol();
-        if (steProtocol == null) { return; }
-        if(steProtocol.getLoad() == 1){
+        if (steProtocol == null) {
+            return;
+        }
+        if (steProtocol.getLoad() == 1) {
             News.error("灏忚溅涓婃柟鏈夎揣锛屾棤娉曚笅鍙戜换鍔�===>>{}", steNo);
             return;
         }
@@ -2737,9 +3058,9 @@
                     crnCommand.setDestinationPosY(locMast.getBay1().shortValue());     // 鐩爣搴撲綅鍒�
                     crnCommand.setDestinationPosZ(locMast.getLev1().shortValue());     // 鐩爣搴撲綅灞�
 
-                    if( crnCommand.getSourcePosX() == crnCommand.getDestinationPosX()
-                        && crnCommand.getSourcePosY() == crnCommand.getDestinationPosY()
-                        && crnCommand.getSourcePosZ() == crnCommand.getDestinationPosZ()){
+                    if (crnCommand.getSourcePosX() == crnCommand.getDestinationPosX()
+                            && crnCommand.getSourcePosY() == crnCommand.getDestinationPosY()
+                            && crnCommand.getSourcePosZ() == crnCommand.getDestinationPosZ()) {
                         //鎵撹ˉ涓侊紝濡傛灉鍑虹幇婧愭帓鍒楀眰 鍜岀洰鏍囨帓鍒楀眰瀹屽叏鐩稿悓鏃讹紝涓嶇粰鍫嗗灈鏈哄彂浠诲姟锛岀姸鎬佺洿鎺ョ敱3 ==>> 6
                         // 淇敼绌挎杞﹁繍琛屼腑鎺掑垪灞�
                         steThread.modifyPos(Utils.getGroupRow(locMast.getLocNo()), locMast.getBay1(), locMast.getLev1());
@@ -2767,7 +3088,7 @@
                             }
                         }
                     }
-                // 鍑哄簱鎼�
+                    // 鍑哄簱鎼�
                 } else {
                     locMast = locMastService.selectById(wrkMast.getSourceLocNo());
                     // 鍫嗗灈鏈哄懡浠や笅鍙戝尯 --------------------------------------------------------------------------
@@ -2810,7 +3131,9 @@
         // 鑾峰彇绌挎杞︿俊鎭�
         SteThread steThread = (SteThread) SlaveConnection.get(SlaveType.Ste, steNo);
         SteProtocol steProtocol = steThread.getSteProtocol();
-        if (steProtocol == null) { return; }
+        if (steProtocol == null) {
+            return;
+        }
         // 绌挎杞︾┖闂�
         if (steProtocol.isIdle() && steProtocol.getLoad() == 0) {
             // 鍫嗗灈鏈虹┖闂�
@@ -2864,7 +3187,9 @@
             // 鑾峰彇鍫嗗灈鏈轰俊鎭�
             CrnThread crnThread = (CrnThread) SlaveConnection.get(SlaveType.Crn, crn.getId());
             CrnProtocol crnProtocol = crnThread.getCrnProtocol();
-            if (crnProtocol == null) { continue; }
+            if (crnProtocol == null) {
+                continue;
+            }
             //  鐘舵�侊細绛夊緟纭 骞朵笖  浠诲姟瀹屾垚浣� = 1
             if (crnProtocol.statusType == CrnStatusType.WAITING && crnProtocol.getTaskNo() != 0) {
                 // 鑾峰彇鍏ュ簱寰呯‘璁ゅ伐浣滄。
@@ -2910,10 +3235,12 @@
                     }
 
                 }
-                if (wrkMast == null) { continue; }
+                if (wrkMast == null) {
+                    continue;
+                }
                 if (wrkMast.getIoType() != 11 && wrkMast.getIoType() != 111) {
                     // 鍏ュ簱 ==>> 璐х墿鎼叆搴�
-                    if (wrkMast.getWrkSts() == 7){
+                    if (wrkMast.getWrkSts() == 7) {
                         // 鍒ゆ柇鏄惁闇�瑕佸皬杞﹀叆搴�
                         if (locMastService.isOutMost(wrkMast.getLocNo())) {
                             // ==> 9.鍏ュ簱瀹屾垚
@@ -2933,7 +3260,10 @@
                             Integer steNo = wrkMast.getSteNo();
                             SteThread steThread = (SteThread) SlaveConnection.get(SlaveType.Ste, steNo);
                             SteProtocol steProtocol = steThread.getSteProtocol();
-                            if (steProtocol == null) { continue; }
+                            if (steProtocol == null) {
+                                continue;
+                            }
+//                            if (steProtocol.loca==0) continue;
                             if (steProtocol.isIdle()) {
                                 // 鍛戒护涓嬪彂鍖� --------------------------------------------------------------------------
                                 SteCommand steCommand = new SteCommand();
@@ -3025,7 +3355,10 @@
                         Integer steNo = wrkMast.getSteNo();
                         SteThread steThread = (SteThread) SlaveConnection.get(SlaveType.Ste, steNo);
                         SteProtocol steProtocol = steThread.getSteProtocol();
-                        if (steProtocol == null) { continue; }
+                        if (steProtocol == null) {
+                            continue;
+                        }
+//                        if (steProtocol.loca==0) continue;
                         // 绌挎杞﹂噸鏂板畾浣嶆帓鍒楀眰
                         if (!steThread.confirmPos()) {
                             News.error("{}鍙风┛姊溅閲嶆柊瀹氫綅澶辫触锛佷綔涓氬伐浣滄。浠诲姟鍙凤細{}", wrkMast.getSteNo(), wrkMast.getWrkNo());
@@ -3055,11 +3388,11 @@
                         }
                         // 绉诲簱 ===>> 鍫嗗灈鏈烘惉鑷崇洰鏍囧簱浣嶇粍 瀹屾垚
                     }
-                // 搴撲綅绉昏浆(楂橀io_type111)
-                } else if(wrkMast.getIoType() == 111) {
+                    // 搴撲綅绉昏浆(楂橀io_type111)
+                } else if (wrkMast.getIoType() == 111) {
                     Date now = new Date();
                     // 鍏ュ簱 ==>> 璐х墿鎼叆搴�
-                    if (wrkMast.getWrkSts() == 7){
+                    if (wrkMast.getWrkSts() == 7) {
                         if (locMastService.isOutMost(wrkMast.getLocNo()) && locMastService.isOutMost(wrkMast.getSourceLocNo())) {
                             // ==> 9.鍏ュ簱瀹屾垚
                             wrkMast.setWrkSts(9L);
@@ -3074,10 +3407,10 @@
                             }
                         }
                     }
-                // 搴撲綅绉昏浆
-                }else {
+                    // 搴撲綅绉昏浆
+                } else {
                     // 鍏ュ簱 ==>> 璐х墿鎼叆搴�
-                    if (wrkMast.getWrkSts() == 7){
+                    if (wrkMast.getWrkSts() == 7) {
                         // 鍒ゆ柇鏄惁闇�瑕佸皬杞﹀叆搴�
                         if (locMastService.isOutMost(wrkMast.getLocNo())) {
                             // ==> 9.鍏ュ簱瀹屾垚
@@ -3097,7 +3430,10 @@
                             Integer steNo = wrkMast.getSteNo();
                             SteThread steThread = (SteThread) SlaveConnection.get(SlaveType.Ste, steNo);
                             SteProtocol steProtocol = steThread.getSteProtocol();
-                            if (steProtocol == null) { continue; }
+                            if (steProtocol == null) {
+                                continue;
+                            }
+//                            if (steProtocol.loca==0) continue;
                             if (steProtocol.isIdle()) {
                                 // 鍛戒护涓嬪彂鍖� --------------------------------------------------------------------------
                                 SteCommand steCommand = new SteCommand();
@@ -3210,7 +3546,7 @@
                             } else {
                                 locSts = "D";
                             }
-                            if(Cools.isEmpty(locSts)){
+                            if (Cools.isEmpty(locSts)) {
                                 News.error("搴撲綅绉昏浆 ===>> 搴撳瓨鐘舵�佷负绌猴紱[婧愬簱浣�={}],[鐩爣搴撲綅={}]", wrkMast.getSourceLocNo(), wrkMast.getLocNo());
                                 continue;
                             }
@@ -3273,7 +3609,7 @@
                             News.error("淇敼宸ヤ綔妗g姸鎬� 4.杩佸叆灏忚溅 => 6.灏忚溅寰呭叆 澶辫触锛侊紒锛屽伐浣滃彿={}", wrkMast.getWrkNo());
                         }
                         // 鍏ュ簱 ===>> 杩佸嚭灏忚溅 瀹屾垚
-                    } else if (wrkMast.getWrkSts() == 7){
+                    } else if (wrkMast.getWrkSts() == 7) {
                         // 鍒ゆ柇鏄惁闇�瑕佸皬杞﹀叆搴�
                         if (locMastService.isOutMost(wrkMast.getLocNo())) {
                             // ==> 9.鍏ュ簱瀹屾垚
@@ -3293,7 +3629,10 @@
                             Integer steNo = wrkMast.getSteNo();
                             SteThread steThread = (SteThread) SlaveConnection.get(SlaveType.Ste, steNo);
                             SteProtocol steProtocol = steThread.getSteProtocol();
-                            if (steProtocol == null) { continue; }
+                            if (steProtocol == null) {
+                                continue;
+                            }
+                            if (steProtocol.loca == 0) continue;
                             if (steProtocol.isIdle()) {
                                 // 鍛戒护涓嬪彂鍖� --------------------------------------------------------------------------
                                 SteCommand steCommand = new SteCommand();
@@ -3322,7 +3661,10 @@
                         Integer steNo = wrkMast.getSteNo();
                         SteThread steThread = (SteThread) SlaveConnection.get(SlaveType.Ste, steNo);
                         SteProtocol steProtocol = steThread.getSteProtocol();
-                        if (steProtocol == null) { continue; }
+                        if (steProtocol == null) {
+                            continue;
+                        }
+                        if (steProtocol.loca == 0) continue;
                         // 绌挎杞﹂噸鏂板畾浣嶆帓鍒楀眰
                         if (!steThread.confirmPos()) {
                             News.error("{}鍙风┛姊溅閲嶆柊瀹氫綅澶辫触锛佷綔涓氬伐浣滄。浠诲姟鍙凤細{}", wrkMast.getSteNo(), wrkMast.getWrkNo());
@@ -3363,8 +3705,12 @@
             // 鑾峰彇绌挎杞︿俊鎭�
             SteThread steThread = (SteThread) SlaveConnection.get(SlaveType.Ste, ste.getId());
             SteProtocol steProtocol = steThread.getSteProtocol();
-            if (steProtocol == null) { continue; }
-            if (steProtocol.getWaiting() && steProtocol.getTaskNo() == 0){
+            if (steProtocol == null) {
+                continue;
+            }
+            if (Cools.isEmpty(steProtocol.loca)) continue;
+            if (steProtocol.loca == 0) continue;
+            if (steProtocol.getWaiting() && steProtocol.getTaskNo() == 0) {
                 News.info("ste[id={}] 鏀跺埌绛夊緟WCS纭淇″彿锛屼絾鏄换鍔″彿(鍦板潃V824)涓�0", steProtocol.getSteNo());
             }
 
@@ -3400,7 +3746,7 @@
                                     steThread.setResetFlag(true);
                                     News.info("ste[id={}]灏忚溅澶嶄綅鏍囪 25.灏忚溅鍘诲厖鐢� ===>> 26.绛夊緟鍏呯數 鎴愬姛锛侊紒锛屽伐浣滃彿={}", steProtocol.getSteNo(), wrkCharge.getWrkNo());
                                 }
-                            }  else if (wrkCharge.getWrkSts() == 32) {
+                            } else if (wrkCharge.getWrkSts() == 32) {
                                 // 32.灏忚溅璧拌 ===>> 33.灏忚溅寰呮惉
                                 wrkCharge.setWrkSts(33L);
                                 if (!wrkChargeService.updateById(wrkCharge)) {
@@ -3420,16 +3766,18 @@
                                 }
                             }
                         }
-                    }else{
+                    } else {
                         News.info("ste[id={}] 鎵ц宸ヤ綔妗e畬鎴愶紝浠诲姟鍙�={}, 绌挎杞︾姸鎬�={}锛屽伐浣滄。鐘舵��={}",
                                 steProtocol.getSteNo(), steProtocol.getTaskNo(), steProtocol.getStatus(), wrkMast.getWrkSts());
                     }
 
-                    if (wrkMast == null) { continue; }
+                    if (wrkMast == null) {
+                        continue;
+                    }
                     switch (wrkMast.getWrkSts().intValue()) {
                         case 2:
                             // 淇敼宸ヤ綔妗g姸鎬� 2.璁惧涓婅蛋 => 3.灏忚溅寰呮惉
-                            if (Cools.isEmpty(wrkMast.getSteNo()) || wrkMast.getSteNo()==0){
+                            if (Cools.isEmpty(wrkMast.getSteNo()) || wrkMast.getSteNo() == 0) {
                                 News.error("淇敼宸ヤ綔妗g姸鎬� 2.璁惧涓婅蛋 => 3.灏忚溅寰呮惉 澶辫触锛侊紒锛屽伐浣滃彿={}   鍘熷洜锛氬伐浣滃彿娌″皬杞�", wrkMast.getWrkNo());
                                 break;
                             }
@@ -3516,7 +3864,7 @@
     /**
      * 鍫嗗灈鏈哄紓甯镐俊鎭褰�
      */
-    private synchronized void recCrnErr(){
+    private synchronized void recCrnErr() {
         Date now = new Date();
         for (CrnSlave crn : slaveProperties.getCrn()) {
             // 鑾峰彇鍫嗗灈鏈轰俊鎭�
@@ -3536,7 +3884,7 @@
                             continue;
                         }
                         BasCrnError crnError = basCrnErrorMapper.selectById(crnProtocol.getAlarm());
-                        String errName = crnError==null? "鏈煡寮傚父":crnError.getErrName();
+                        String errName = crnError == null ? "鏈煡寮傚父" : crnError.getErrName();
                         BasErrLog basErrLog = new BasErrLog(
                                 null,    // 缂栧彿
                                 wrkMast.getWrkNo(),    // 宸ヤ綔鍙�
@@ -3575,7 +3923,7 @@
                         }
                     }
                 }
-            // 鏃犱换鍔�
+                // 鏃犱换鍔�
             } else {
                 BasErrLog latest = basErrLogService.findLatest(crn.getId());
                 // 鏈夊紓甯�
@@ -3583,7 +3931,7 @@
                     // 璁板綍鏂板紓甯�
                     if (latest == null || (latest.getErrCode() != crnProtocol.getAlarm().intValue())) {
                         BasCrnError crnError = basCrnErrorMapper.selectById(crnProtocol.getAlarm());
-                        String errName = crnError==null? "鏈煡寮傚父":crnError.getErrName();
+                        String errName = crnError == null ? "鏈煡寮傚父" : crnError.getErrName();
                         BasErrLog basErrLog = new BasErrLog(
                                 null,    // 缂栧彿
                                 null,    // 宸ヤ綔鍙�
@@ -3598,7 +3946,7 @@
                                 null,    // 婧愮珯
                                 null,    // 婧愬簱浣�
                                 null,    // 鏉$爜
-                                (int)crnProtocol.getAlarm(),    // 寮傚父鐮�
+                                (int) crnProtocol.getAlarm(),    // 寮傚父鐮�
                                 errName,    // 寮傚父
                                 1,    // 寮傚父鎯呭喌
                                 now,    // 娣诲姞鏃堕棿
@@ -3611,7 +3959,7 @@
                             News.error("鍫嗗灈鏈簆lc寮傚父璁板綍澶辫触 ===>> [id:{}] [error:{}]", crn.getId(), errName);
                         }
                     }
-                // 鏃犲紓甯�
+                    // 鏃犲紓甯�
                 } else {
                     // 寮傚父淇
                     if (latest != null && latest.getStatus() == 1) {
@@ -3630,7 +3978,7 @@
     /**
      * 绌挎杞﹀紓甯镐俊鎭褰�
      */
-    private void recSteErr(){
+    private void recSteErr() {
         Date now = new Date();
         for (SteSlave ste : slaveProperties.getSte()) {
             // 鑾峰彇鍫嗗灈鏈轰俊鎭�
@@ -3650,7 +3998,7 @@
                             continue;
                         }
                         BasSteErr steErr = basSteErrService.selectById(steProtocol.getAlarm());
-                        String errName = steErr==null? "鏈煡寮傚父":steErr.getErrName();
+                        String errName = steErr == null ? "鏈煡寮傚父" : steErr.getErrName();
                         BasSteErrLog basSteErrLog = new BasSteErrLog(
                                 null,    // 缂栧彿
                                 wrkMast.getWrkNo(),    // 宸ヤ綔鍙�
@@ -3697,7 +4045,7 @@
                     // 璁板綍鏂板紓甯�
                     if (latest == null || (latest.getErrCode() != steProtocol.getAlarm().intValue())) {
                         BasSteErr steErr = basSteErrService.selectById(steProtocol.getAlarm());
-                        String errName = steErr==null? "鏈煡寮傚父":steErr.getErrName();
+                        String errName = steErr == null ? "鏈煡寮傚父" : steErr.getErrName();
                         BasSteErrLog basSteErrLog = new BasSteErrLog(
                                 null,    // 缂栧彿
                                 null,    // 宸ヤ綔鍙�
@@ -3712,7 +4060,7 @@
                                 null,    // 婧愮珯
                                 null,    // 婧愬簱浣�
                                 null,    // 鏉$爜
-                                (int)steProtocol.getAlarm(),    // 寮傚父鐮�
+                                (int) steProtocol.getAlarm(),    // 寮傚父鐮�
                                 errName,    // 寮傚父
                                 1,    // 寮傚父鎯呭喌
                                 now,    // 娣诲姞鏃堕棿
@@ -3747,7 +4095,7 @@
     /**
      * 绌烘爤鏉垮垵濮嬪寲鍏ュ簱,鍙夎溅鍏ュ簱绔欐斁璐�
      */
-    public synchronized void storeEmptyPlt(){
+    public synchronized void storeEmptyPlt() {
         for (DevpSlave devp : slaveProperties.getDevp()) {
             // 閬嶅巻绌烘澘鍏ュ簱鍙�
             for (DevpSlave.Sta emptyInSta : devp.getEmptyInSta()) {
@@ -3762,22 +4110,40 @@
 
                 //20230201. 2鍙峰爢鍨涙満鏈夊嚭搴撲换鍔℃椂锛岀姝㈡柊鏉垮叆搴�
                 if (staProtocol.isLoading() && staProtocol.getWorkNo() == 9995) {
-                    if ( emptyInSta.getStaNo()==103 && devpThread.ioModeOf1F == IoModeType.PAKOUT_MODE) {
+                    if (emptyInSta.getStaNo() == 103 && devpThread.ioModeOf1F == IoModeType.PAKOUT_MODE) {
                         //鏈夊嚭搴撲换鍔★紝閫�搴撳埌鍏ュ簱鍙�
                         staProtocol.setWorkNo((short) 9999);
-                        staProtocol.setStaNo((short)100);
+                        staProtocol.setStaNo((short) 100);
                         devpThread.setPakMk(staProtocol.getSiteId(), false);
                         boolean result = MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol));
-                        News.error("MainServiceImpl  storeEmptyPlt"+"103涓哄嚭搴撴ā寮忥紝绂佹鍏ュ簱锛岄��鍥炲叆搴撳彛銆傦紒锛侊紒");
+                        News.error("MainServiceImpl  storeEmptyPlt" + "103涓哄嚭搴撴ā寮忥紝绂佹鍏ュ簱锛岄��鍥炲叆搴撳彛銆傦紒锛侊紒");
                         continue;
                     }
-                    if ( emptyInSta.getStaNo()==203 && devpThread.ioModeOf2F == IoModeType.PAKOUT_MODE) {
+                    if (emptyInSta.getStaNo() == 203 && devpThread.ioModeOf2F == IoModeType.PAKOUT_MODE) {
                         //鏈夊嚭搴撲换鍔★紝閫�搴撳埌鍏ュ簱鍙�
                         staProtocol.setWorkNo((short) 9999);
-                        staProtocol.setStaNo((short)200);
+                        staProtocol.setStaNo((short) 200);
                         devpThread.setPakMk(staProtocol.getSiteId(), false);
                         boolean result = MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol));
-                        News.error("MainServiceImpl  storeEmptyPlt"+"203涓哄嚭搴撴ā寮忥紝绂佹鍏ュ簱锛岄��鍥炲叆搴撳彛銆傦紒锛侊紒");
+                        News.error("MainServiceImpl  storeEmptyPlt" + "203涓哄嚭搴撴ā寮忥紝绂佹鍏ュ簱锛岄��鍥炲叆搴撳彛銆傦紒锛侊紒");
+                        continue;
+                    }
+                    if (emptyInSta.getStaNo() == 113 && devpThread.ioModeOf3F == IoModeType.PAKOUT_MODE) {
+                        //鏈夊嚭搴撲换鍔★紝閫�搴撳埌鍏ュ簱鍙�
+                        staProtocol.setWorkNo((short) 9999);
+                        staProtocol.setStaNo((short) 100);
+                        devpThread.setPakMk(staProtocol.getSiteId(), false);
+                        boolean result = MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol));
+                        News.error("MainServiceImpl  storeEmptyPlt" + "113涓哄嚭搴撴ā寮忥紝绂佹鍏ュ簱锛岄��鍥炲叆搴撳彛銆傦紒锛侊紒");
+                        continue;
+                    }
+                    if (emptyInSta.getStaNo() == 213 && devpThread.ioModeOf4F == IoModeType.PAKOUT_MODE) {
+                        //鏈夊嚭搴撲换鍔★紝閫�搴撳埌鍏ュ簱鍙�
+                        staProtocol.setWorkNo((short) 9999);
+                        staProtocol.setStaNo((short) 200);
+                        devpThread.setPakMk(staProtocol.getSiteId(), false);
+                        boolean result = MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol));
+                        News.error("MainServiceImpl  storeEmptyPlt" + "213涓哄嚭搴撴ā寮忥紝绂佹鍏ュ簱锛岄��鍥炲叆搴撳彛銆傦紒锛侊紒");
                         continue;
                     }
                 }
@@ -3795,9 +4161,9 @@
                     BarcodeThread barcodeThread = (BarcodeThread) SlaveConnection.get(SlaveType.Barcode, emptyInSta.getBarcode());
                     if (barcodeThread != null) {
                         String barcode0 = barcodeThread.getBarcode();
-                        if(!Cools.isEmpty(barcode0)) {
+                        if (!Cools.isEmpty(barcode0)) {
 //                            News.info("{}鍙锋潯鐮佹壂鎻忓櫒妫�娴嬫潯鐮佷俊鎭細{}", emptyInSta.getBarcode(), barcode0);
-                            if(!"NG".endsWith(barcode0) && !"NoRead".equals(barcode0) && !"empty".equals(barcode0)) {
+                            if (!"NG".endsWith(barcode0) && !"NoRead".equals(barcode0) && !"empty".equals(barcode0)) {
                                 barcode = barcode0;
                             }
                         }
@@ -3862,109 +4228,118 @@
      */
     public synchronized void ledExecute() {
         for (LedSlave led : slaveProperties.getLed()) {
-            // 鑾峰彇杈撻�佺嚎plc绾跨▼
-            DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, led.getDevpPlcId());
-            // 鍛戒护闆嗗悎
-            List<LedCommand> commands = new ArrayList<>();
-            // 宸ヤ綔妗i泦鍚�
-            List<WrkMast> wrkMasts = new ArrayList<>();
-            for (Integer staNo : led.getStaArr()) {
-                // 鑾峰彇鍙夎溅绔欑偣
-                StaProtocol staProtocol = devpThread.getStation().get(staNo);
-                if (null == staProtocol || null == staProtocol.getWorkNo() || 0 == staProtocol.getWorkNo() || !staProtocol.isLoading()) {
-                    continue;
-                } else {
-                    staProtocol = staProtocol.clone();
-                }
-                // 鑾峰彇宸ヤ綔妗f暟鎹�
-                WrkMast wrkMast = wrkMastMapper.selectById(staProtocol.getWorkNo());
-                if (null == wrkMast || wrkMast.getWrkSts() < 14 || wrkMast.getIoType() < 100) { continue; }
-                wrkMasts.add(wrkMast);
-                // 缁勮鍛戒护
-                LedCommand ledCommand = new LedCommand();
-                ledCommand.setWorkNo(wrkMast.getWrkNo());
-                ledCommand.setIoType(wrkMast.getIoType());
-                // 鍑哄簱妯″紡
-                switch (wrkMast.getIoType()) {
-                    case 101:
-                        ledCommand.setTitle("鍏ㄦ澘鍑哄簱");
-                        break;
-                    case 103:
-                        ledCommand.setTitle("鎷f枡鍑哄簱");
-                        break;
-                    case 104:
-                        ledCommand.setTitle("骞舵澘鍑哄簱");
-                        break;
-                    case 107:
-                        ledCommand.setTitle("鐩樼偣鍑哄簱");
-                        break;
-                    case 110:
-                        ledCommand.setTitle("绌烘澘鍑哄簱");
-                        ledCommand.setEmptyMk(true);
-                        break;
-                    default:
-                        News.error("浠诲姟鍏ュ嚭搴撶被鍨嬮敊璇紒锛侊紒[宸ヤ綔鍙凤細{}] [鍏ュ嚭搴撶被鍨嬶細{}]", wrkMast.getWrkNo(), wrkMast.getIoType());
-                        break;
-                }
-                ledCommand.setSourceLocNo(wrkMast.getSourceLocNo());
-                ledCommand.setStaNo(wrkMast.getStaNo());
-                ledCommand.setBarcode(wrkMast.getBarcode());
-                if (wrkMast.getIoType() != 110) {
-                    List<WrkDetl> wrkDetls = wrkDetlService.findByWorkNo(wrkMast.getWrkNo());
-
-                    wrkDetls.forEach(wrkDetl -> {
-                        Double total = 0.0;
-                        EntityWrapper<LocDetl> wrapper = new EntityWrapper<>();
-                        LocDetl locDetl = locDetlService.selectOne(wrapper.eq("zpallet", wrkDetl.getZpallet()).eq("matnr", wrkDetl.getMatnr()));
-                        if (Cools.isEmpty(locDetl)) {
-                            total = wrkDetl.getAnfme();
-                        } else {
-                            total = locDetl.getAnfme();
-                        }
-                        if (wrkMast.getIoType() == 101) {
-                            ledCommand.getMatDtos().add(new MatDto(wrkDetl.getMatnr(), wrkDetl.getMaktx(), wrkDetl.getBatch(), wrkDetl.getSpecs(), wrkDetl.getManu(), wrkDetl.getMemo(), wrkDetl.getAnfme(),total));
-                        }
-                        if (wrkMast.getIoType() == 103 && (null == wrkDetl.getInspect() || 0 == wrkDetl.getInspect())) {
-                            ledCommand.getMatDtos().add(new MatDto(wrkDetl.getMatnr(), wrkDetl.getMaktx(), wrkDetl.getBatch(), wrkDetl.getSpecs(), wrkDetl.getManu(), wrkDetl.getMemo(), wrkDetl.getAnfme(),total));
-                        }
-                        if (wrkMast.getIoType() == 107) {
-                            ledCommand.getMatDtos().add(new MatDto(wrkDetl.getMatnr(), wrkDetl.getMaktx(), wrkDetl.getBatch(), wrkDetl.getSpecs(), wrkDetl.getManu(), wrkDetl.getMemo(), wrkDetl.getAnfme(),total));
-                        }
-                    });
-                }
-                commands.add(ledCommand);
-            }
-            Set<Integer> workNos = wrkMasts.stream().map(WrkMast::getWrkNo).collect(Collectors.toSet());
-            // 鑾峰彇LED绾跨▼
-            LedThread ledThread = (LedThread) SlaveConnection.get(SlaveType.Led, led.getId());
-            // 鐩稿悓宸ヤ綔鍙烽泦鍚堝垯杩囨护
-            if (CollectionUtils.equals(ledThread.getWorkNos(), workNos)) {
-                continue;
-            }
-            // 鍛戒护涓嬪彂 -------------------------------------------------------------------------------
-            if (!commands.isEmpty()) {
-                if (!MessageQueue.offer(SlaveType.Led, led.getId(), new Task(1, commands))) {
-                    News.error("{}鍙稬ED鍛戒护涓嬪彂澶辫触锛侊紒锛乕ip锛歿}] [port锛歿}]", led.getId(), led.getIp(), led.getPort());
-                    continue;
-                }
-            }
-
             try {
-                // 淇敼涓绘。led鏍囪
-                for (WrkMast wrkMast : wrkMasts) {
-                    wrkMast.setOveMk("Y");
-                    wrkMast.setModiTime(new Date());
-                    if (wrkMastMapper.updateById(wrkMast) == 0) {
-                        throw new CoolException("鏇存柊宸ヤ綔妗eけ璐�");
+                // 鑾峰彇杈撻�佺嚎plc绾跨▼
+                DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, led.getDevpPlcId());
+                // 鍛戒护闆嗗悎
+                List<LedCommand> commands = new ArrayList<>();
+                // 宸ヤ綔妗i泦鍚�
+                List<WrkMast> wrkMasts = new ArrayList<>();
+                for (Integer staNo : led.getStaArr()) {
+                    // 鑾峰彇鍙夎溅绔欑偣
+                    StaProtocol staProtocol = devpThread.getStation().get(staNo);
+                    if (null == staProtocol || null == staProtocol.getWorkNo() || 0 == staProtocol.getWorkNo() || !staProtocol.isLoading()) {
+                        continue;
+                    } else {
+                        staProtocol = staProtocol.clone();
+                    }
+                    // 鑾峰彇宸ヤ綔妗f暟鎹�
+                    WrkMast wrkMast = wrkMastMapper.selectById(staProtocol.getWorkNo());
+                    if (null == wrkMast || wrkMast.getWrkSts() < 14 || wrkMast.getIoType() < 100) {
+                        continue;
+                    }
+                    wrkMasts.add(wrkMast);
+                    // 缁勮鍛戒护
+                    LedCommand ledCommand = new LedCommand();
+                    ledCommand.setWorkNo(wrkMast.getWrkNo());
+                    ledCommand.setIoType(wrkMast.getIoType());
+                    // 鍑哄簱妯″紡
+                    switch (wrkMast.getIoType()) {
+                        case 101:
+                            ledCommand.setTitle("鍏ㄦ澘鍑哄簱");
+                            break;
+                        case 103:
+                            ledCommand.setTitle("鎷f枡鍑哄簱");
+                            break;
+                        case 104:
+                            ledCommand.setTitle("骞舵澘鍑哄簱");
+                            break;
+                        case 107:
+                            ledCommand.setTitle("鐩樼偣鍑哄簱");
+                            break;
+                        case 110:
+                            ledCommand.setTitle("绌烘澘鍑哄簱");
+                            ledCommand.setEmptyMk(true);
+                            break;
+                        default:
+                            News.error("浠诲姟鍏ュ嚭搴撶被鍨嬮敊璇紒锛侊紒[宸ヤ綔鍙凤細{}] [鍏ュ嚭搴撶被鍨嬶細{}]", wrkMast.getWrkNo(), wrkMast.getIoType());
+                            break;
+                    }
+                    ledCommand.setSourceLocNo(wrkMast.getSourceLocNo());
+                    ledCommand.setStaNo(wrkMast.getStaNo());
+                    ledCommand.setBarcode(wrkMast.getBarcode());
+                    if (wrkMast.getIoType() != 110) {
+                        List<WrkDetl> wrkDetls = wrkDetlService.findByWorkNo(wrkMast.getWrkNo());
+
+                        wrkDetls.forEach(wrkDetl -> {
+                            Double total = 0.0;
+                            EntityWrapper<LocDetl> wrapper = new EntityWrapper<>();
+                            LocDetl locDetl = locDetlService.selectOne(wrapper.eq("zpallet", wrkDetl.getZpallet()).eq("matnr", wrkDetl.getMatnr()));
+                            if (Cools.isEmpty(locDetl)) {
+                                total = wrkDetl.getAnfme();
+                            } else {
+                                total = locDetl.getAnfme();
+                            }
+                            if (wrkMast.getIoType() == 101) {
+                                ledCommand.getMatDtos().add(new MatDto(wrkDetl.getMatnr(), wrkDetl.getMaktx(), wrkDetl.getBatch(), wrkDetl.getSpecs(), wrkDetl.getManu(), wrkDetl.getMemo(), wrkDetl.getAnfme(), total));
+                            }
+                            if (wrkMast.getIoType() == 103 && (null == wrkDetl.getInspect() || 0 == wrkDetl.getInspect())) {
+                                ledCommand.getMatDtos().add(new MatDto(wrkDetl.getMatnr(), wrkDetl.getMaktx(), wrkDetl.getBatch(), wrkDetl.getSpecs(), wrkDetl.getManu(), wrkDetl.getMemo(), wrkDetl.getAnfme(), total));
+                            }
+                            if (wrkMast.getIoType() == 107) {
+                                ledCommand.getMatDtos().add(new MatDto(wrkDetl.getMatnr(), wrkDetl.getMaktx(), wrkDetl.getBatch(), wrkDetl.getSpecs(), wrkDetl.getManu(), wrkDetl.getMemo(), wrkDetl.getAnfme(), total));
+                            }
+                        });
+                    }
+                    commands.add(ledCommand);
+                }
+                Set<Integer> workNos = wrkMasts.stream().map(WrkMast::getWrkNo).collect(Collectors.toSet());
+                // 鑾峰彇LED绾跨▼
+                LedThread ledThread = (LedThread) SlaveConnection.get(SlaveType.Led, led.getId());
+                // 鐩稿悓宸ヤ綔鍙烽泦鍚堝垯杩囨护
+                if (CollectionUtils.equals(ledThread.getWorkNos(), workNos)) {
+                    continue;
+                }
+                // 鍛戒护涓嬪彂 -------------------------------------------------------------------------------
+                if (!commands.isEmpty()) {
+                    if (!MessageQueue.offer(SlaveType.Led, led.getId(), new Task(1, commands))) {
+                        News.error("{}鍙稬ED鍛戒护涓嬪彂澶辫触锛侊紒锛乕ip锛歿}] [port锛歿}]", led.getId(), led.getIp(), led.getPort());
+                        continue;
+                    } else {
+                        News.info("{}鍙稬ED鍛戒护涓嬪彂鎴愬姛锛侊紒锛乕ip锛歿}] [port锛歿}]", led.getId(), led.getIp(), led.getPort());
+                        News.info("{}鍙稬ED鍛戒护涓嬪彂鎴愬姛锛侊紒锛乕commands锛歿}]", led.getId(), commands);
                     }
                 }
 
-                // 鏇存柊绾跨▼褰撳墠宸ヤ綔鍙烽泦鍚�
-                ledThread.setWorkNos(workNos);
+                try {
+                    // 淇敼涓绘。led鏍囪
+                    for (WrkMast wrkMast : wrkMasts) {
+                        wrkMast.setOveMk("Y");
+                        wrkMast.setModiTime(new Date());
+                        if (wrkMastMapper.updateById(wrkMast) == 0) {
+                            throw new CoolException("鏇存柊宸ヤ綔妗eけ璐�");
+                        }
+                    }
 
+                    // 鏇存柊绾跨▼褰撳墠宸ヤ綔鍙烽泦鍚�
+                    ledThread.setWorkNos(workNos);
+
+                } catch (Exception e) {
+                    e.printStackTrace();
+                    TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
+                }
             } catch (Exception e) {
-                e.printStackTrace();
-                TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
+                News.error(e.getMessage());
             }
 
         }
@@ -3975,26 +4350,34 @@
      */
     public synchronized void ledReset() {
         for (LedSlave led : slaveProperties.getLed()) {
-            // 鑾峰彇杈撻�佺嚎plc绾跨▼
-            DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, led.getDevpPlcId());
-            // 鍛戒护闆嗗悎
-            boolean reset = true;
-            for (Integer staNo : led.getStaArr()) {
-                // 鑾峰彇鍙夎溅绔欑偣
-                StaProtocol staProtocol = devpThread.getStation().get(staNo);
-                if (staProtocol == null) { continue; }
-                if (staProtocol.getWorkNo() != 0) {
-                    reset = false;
-                    break;
+            try {
+                // 鑾峰彇杈撻�佺嚎plc绾跨▼
+                DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, led.getDevpPlcId());
+                // 鍛戒护闆嗗悎
+                boolean reset = true;
+                for (Integer staNo : led.getStaArr()) {
+                    // 鑾峰彇鍙夎溅绔欑偣
+                    StaProtocol staProtocol = devpThread.getStation().get(staNo);
+                    if (staProtocol == null) {
+                        continue;
+                    }
+                    if (staProtocol.getWorkNo() != 0) {
+                        reset = false;
+                        break;
+                    }
                 }
-            }
-            // 鑾峰彇led绾跨▼
-            LedThread ledThread = (LedThread) SlaveConnection.get(SlaveType.Led, led.getDevpPlcId());
-            // led鏄剧ず榛樿鍐呭
-            if (reset) {
-                if (!MessageQueue.offer(SlaveType.Led, led.getId(), new Task(2, new ArrayList<>()))) {
-                    News.error("{}鍙稬ED鍛戒护涓嬪彂澶辫触锛侊紒锛乕ip锛歿}] [port锛歿}]", led.getId(), led.getIp(), led.getPort());
+                // 鑾峰彇led绾跨▼
+                LedThread ledThread = (LedThread) SlaveConnection.get(SlaveType.Led, led.getDevpPlcId());
+                // led鏄剧ず榛樿鍐呭
+                if (reset) {
+                    if (!MessageQueue.offer(SlaveType.Led, led.getId(), new Task(2, new ArrayList<>()))) {
+                        News.error("{}鍙稬ED澶嶄綅鍛戒护涓嬪彂澶辫触锛侊紒锛乕ip锛歿}] [port锛歿}]", led.getId(), led.getIp(), led.getPort());
+                    } else {
+//                        News.info("{}鍙稬ED澶嶄綅鍛戒护涓嬪彂鎴愬姛锛侊紒锛乕ip锛歿}] [port锛歿}]", led.getId(), led.getIp(), led.getPort());
+                    }
                 }
+            } catch (Exception e) {
+                News.error("LED寮傚父" + led.getId());
             }
         }
     }
@@ -4007,7 +4390,9 @@
             SteThread steThread = (SteThread) SlaveConnection.get(SlaveType.Ste, ste.getId());
             SteProtocol steProtocol = steThread.getSteProtocol();
             BasSte basSte = basSteService.selectById(ste.getId());
-            if (Cools.isEmpty(steProtocol, basSte)) { continue; }
+            if (Cools.isEmpty(steProtocol, basSte)) {
+                continue;
+            }
             try {
                 // 鍦ㄧ嚎 绌洪棽   鏃犱綔涓氭爣璁�   涓嶅湪鍏呯數
                 if (steProtocol.getMode() == 0
@@ -4094,7 +4479,9 @@
                     } else if (wrkCharge.getWrkSts() == 24L) {
                         // 灏忚溅琛岄┒鑷冲厖鐢典綅
                         if (steProtocol.statusType.equals(SteStatusType.IDLE) && steProtocol.getPakMk().equals("N")) {
-                            if (steProtocol.getChargeStatus() == 1) { continue; }
+                            if (steProtocol.getChargeStatus() == 1) {
+                                continue;
+                            }
                             // 鍛戒护涓嬪彂鍖� --------------------------------------------------------------------------
                             SteCommand steCommand = new SteCommand();
                             steCommand.setSteNo(wrkCharge.getSteNo()); // 绌挎杞︾紪鍙�
@@ -4114,7 +4501,9 @@
                             }
                         }
                     } else if (wrkCharge.getWrkSts() == 26) {
-                        if (steProtocol.getChargeStatus() == 0) { continue; }
+                        if (steProtocol.getChargeStatus() == 0) {
+                            continue;
+                        }
                         // 缁欒緭閫佺嚎涓嬪彂鍏呯數浠诲姟
                         SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, 1);
                         SteChargeType steChargeType = SteChargeType.get(wrkCharge.getLocNo());
@@ -4141,9 +4530,13 @@
     }
 
 
-    public List<String> crn1DemoLocs = new ArrayList<String>(); public String crn1LastLoc = "";
-    public List<String> crn2DemoLocs = new ArrayList<String>(); public String crn2LastLoc = "";
-    public List<String> crn3DemoLocs = new ArrayList<String>(); public String crn3LastLoc = "";
+    public List<String> crn1DemoLocs = new ArrayList<String>();
+    public String crn1LastLoc = "";
+    public List<String> crn2DemoLocs = new ArrayList<String>();
+    public String crn2LastLoc = "";
+    public List<String> crn3DemoLocs = new ArrayList<String>();
+    public String crn3LastLoc = "";
+
     public synchronized void demo() {
         if (Cools.isEmpty(crn1DemoLocs)) {
             crn1DemoLocs = locMastService.getDemoNextLoc(1);
@@ -4178,7 +4571,9 @@
                 SteThread steThread = (SteThread) SlaveConnection.get(SlaveType.Ste, steNo);
                 SteProtocol steProtocol = steThread.getSteProtocol();
                 BasSte basSte = basSteService.selectById(steNo);
-                if (Cools.isEmpty(steProtocol, basSte)) { continue; }
+                if (Cools.isEmpty(steProtocol, basSte)) {
+                    continue;
+                }
 
                 // 鍙湁褰撶┛姊溅绌洪棽 骞朵笖 鏃犱换鍔℃椂鎵嶇户缁墽琛�
                 if (steProtocol.isIdle()) {
@@ -4260,7 +4655,9 @@
         }
         SteThread steThread = (SteThread) SlaveConnection.get(SlaveType.Ste, wrkCharge.getSteNo());
         SteProtocol steProtocol = steThread.getSteProtocol();
-        if (null == steProtocol) { return; }
+        if (null == steProtocol) {
+            return;
+        }
         if (steProtocol.isIdle()) {
             // 31.鐢熸垚婕旂ずID
             if (wrkCharge.getWrkSts() == 31L) {
@@ -4270,7 +4667,7 @@
                 if (!wrkChargeService.updateById(wrkCharge)) {
                     News.error("淇敼婕旂ず浠诲姟{}宸ヤ綔妗� 31.鐢熸垚婕旂ずID ==>> 32.灏忚溅璧拌 澶辫触!", wrkCharge.getWrkNo());
                 }
-            // 33.灏忚溅寰呮惉
+                // 33.灏忚溅寰呮惉
             } else if (wrkCharge.getWrkSts() == 33L) {
                 LocMast locMast = locMastService.selectById(wrkCharge.getLocNo());
                 // 鍫嗗灈鏈哄懡浠や笅鍙戝尯 --------------------------------------------------------------------------
@@ -4300,7 +4697,7 @@
                         News.error("淇敼婕旂ず浠诲姟{}宸ヤ綔妗� 33.灏忚溅寰呮惉 => 34.鍚婅溅鎼繍 澶辫触!", wrkCharge.getWrkNo());
                     }
                 }
-            // 35.灏忚溅灏辩华
+                // 35.灏忚溅灏辩华
             } else if (wrkCharge.getWrkSts() == 35L) {
 
                 int steNo = steProtocol.getSteNo().intValue();
@@ -4345,10 +4742,10 @@
     /**
      * 鍥犳繁搴撲綅闃诲锛屽娴呭簱浣嶈繘琛岀Щ杞�
      */
-    private synchronized void moveLocForDeepLoc(CrnSlave crn, LocMast shallowLoc){
+    private synchronized void moveLocForDeepLoc(CrnSlave crn, LocMast shallowLoc) {
         try {
             String rows = "";
-            switch (crn.getId()){
+            switch (crn.getId()) {
                 case 1:
                     rows = "3,4";
                     break;
@@ -4360,15 +4757,92 @@
                     break;
             }
             LocMast loc = null;
-            List<LocMast> locs = locMastService.selectList(new EntityWrapper<LocMast>().eq("crn_no",crn.getId())
-                                                .eq("loc_type1",shallowLoc.getLocType1())
-                                                .eq("loc_type2",shallowLoc.getLocType2())
-                                                .eq("loc_sts","O")
-                                                .last(" and row1 in (" + rows + ") order by bay1,lev1"));
-            for (LocMast one : locs){
-                if(Utils.getGroupRow(one.getLocNo()) != Utils.getGroupRow(shallowLoc.getLocNo())
-                    || Utils.getBay(one.getLocNo()) != Utils.getBay(shallowLoc.getLocNo())
-                    || Utils.getLev(one.getLocNo()) != Utils.getLev(shallowLoc.getLocNo())){
+
+            if (shallowLoc.getLocType2() == 3 || shallowLoc.getLocType2() == 1) {
+                //浣庨娣风洿鎺ュ嚭搴�
+                // 鑾峰彇宸ヤ綔鍙�
+                int workNo = commonService.getWorkNo(0);
+                Date now = new Date();
+                // 淇濆瓨宸ヤ綔妗�
+                WrkMast wrkMast = new WrkMast();
+                wrkMast.setWrkNo(workNo);
+                wrkMast.setIoTime(now);
+                wrkMast.setWrkSts(11L); // 宸ヤ綔鐘舵�侊細11.鐢熸垚鍑哄簱ID
+                wrkMast.setIoType(101); // 鍏ュ嚭搴撶姸鎬侊細 101.鍏ㄦ澘鍑哄簱
+                wrkMast.setIoPri((double) 9999);
+                wrkMast.setCrnNo(crn.getId());
+                wrkMast.setSourceLocNo(shallowLoc.getLocNo()); // 婧愬簱浣�
+                if (shallowLoc.getCrnNo() == 1) {
+                    wrkMast.setStaNo(100);
+                    wrkMast.setSourceStaNo(108);
+                } else if (shallowLoc.getCrnNo() == 2) {
+                    wrkMast.setStaNo(100);
+                    wrkMast.setSourceStaNo(104);
+                } else {
+                    wrkMast.setStaNo(200);
+                    wrkMast.setSourceStaNo(208);
+                }
+
+
+//                wrkMast.setLocNo(loc.getLocNo()); // 鐩爣搴撲綅
+                wrkMast.setFullPlt("Y"); // 婊℃澘
+                wrkMast.setPicking("N"); // 鎷f枡
+                wrkMast.setExitMk("N"); // 閫�鍑�
+                wrkMast.setEmptyMk(shallowLoc.getLocSts().equals("D") ? "Y" : "N"); // 绌烘澘
+                wrkMast.setBarcode(shallowLoc.getBarcode()); // 鎵樼洏鐮�
+                wrkMast.setLinkMis("N");
+                wrkMast.setAppeTime(now);
+                wrkMast.setModiTime(now);
+                int res = wrkMastMapper.insert(wrkMast);
+                if (res == 0) {
+                    throw new CoolException("淇濆瓨宸ヤ綔妗eけ璐�");
+                }
+                // 宸ヤ綔妗f槑缁嗕繚瀛�
+                if (shallowLoc.getLocSts().equals("F")) {
+                    List<LocDetl> locDetls = locDetlService.selectList(new EntityWrapper<LocDetl>().eq("loc_no", shallowLoc.getLocNo()));
+                    for (LocDetl locDetl : locDetls) {
+                        WrkDetl wrkDetl = new WrkDetl();
+                        wrkDetl.sync(locDetl);
+                        wrkDetl.setWrkNo(workNo);
+                        wrkDetl.setIoTime(now);
+                        wrkDetl.setAnfme(locDetl.getAnfme());
+                        wrkDetl.setAppeTime(now);
+                        wrkDetl.setModiTime(now);
+                        if (!wrkDetlService.insert(wrkDetl)) {
+                            throw new CoolException("淇濆瓨宸ヤ綔妗f槑缁嗗け璐�");
+                        }
+                        // 鐢熸垚瀵瑰簲鐨勭粍鎵樻。
+                        WaitPakin waitPakin = new WaitPakin();
+                        waitPakin.sync(wrkDetl);
+                        waitPakin.setModiTime(now);
+                        waitPakin.setAppeTime(now);
+                        waitPakinMapper.insert(waitPakin);
+
+                    }
+                }
+                // 淇敼婧愬簱浣嶇姸鎬�
+                if (shallowLoc.getLocSts().equals("D") || shallowLoc.getLocSts().equals("F")) {
+                    shallowLoc.setLocSts("R"); // R.鍑哄簱棰勭害
+                    shallowLoc.setModiTime(now);
+                    if (!locMastService.updateById(shallowLoc)) {
+                        throw new CoolException("鏇存柊婧愬簱浣嶇姸鎬佸け璐�");
+                    }
+                } else {
+                    throw new CoolException("婧愬簱浣嶅嚭搴撳け璐�");
+                }
+
+                return;
+            }
+
+            List<LocMast> locs = locMastService.selectList(new EntityWrapper<LocMast>().eq("crn_no", crn.getId())
+                    .eq("loc_type1", shallowLoc.getLocType1())
+                    .eq("loc_type2", shallowLoc.getLocType2())
+                    .eq("loc_sts", "O")
+                    .last(" and row1 in (" + rows + ") order by bay1,lev1"));
+            for (LocMast one : locs) {
+                if (Utils.getGroupRow(one.getLocNo()) != Utils.getGroupRow(shallowLoc.getLocNo())
+                        || Utils.getBay(one.getLocNo()) != Utils.getBay(shallowLoc.getLocNo())
+                        || Utils.getLev(one.getLocNo()) != Utils.getLev(shallowLoc.getLocNo())) {
 
                     Integer steNo = this.hasCar(one.getLocNo());
                     if (steNo != null) {
@@ -4395,7 +4869,8 @@
 
             if (null == loc) {
                 News.error("娣卞簱浣嶅嚭搴� --- 娴呭簱浣嶉樆濉炲紓甯革紒 寰呯Щ杞祬搴撲綅锛�" + shallowLoc.getLocNo());
-                throw new CoolException("娣卞簱浣嶅嚭搴� --- 娴呭簱浣嶉樆濉炲紓甯革紒 寰呯Щ杞祬搴撲綅锛�" + shallowLoc.getLocNo());
+                return;
+//                throw new CoolException("娣卞簱浣嶅嚭搴� --- 娴呭簱浣嶉樆濉炲紓甯革紒 寰呯Щ杞祬搴撲綅锛�" + shallowLoc.getLocNo());
             }
 
             // 鑾峰彇宸ヤ綔鍙�
@@ -4476,10 +4951,10 @@
                 SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, devp.getId());
 
                 for (DevpSlave.Sta inSta : devp.getInSta()) {
-                    Integer sourceStaNo = inSta.getStaNo()==103 ? 104 : 204;
+                    Integer sourceStaNo = inSta.getStaNo() == 103 ? 104 : inSta.getStaNo() == 113 ? 104 : 204;
                     WrkMast pakout = wrkMastMapper.selectWorkingPakout(sourceStaNo);
                     switch (inSta.getStaNo()) {
-                        case 103://1F
+                        case 103://1F1
                             if (pakout != null) {
                                 if (devpThread.ioModeOf1F != IoModeType.PAKOUT_MODE) {
                                     // 鍑哄簱鍒囨崲涓�
@@ -4489,7 +4964,7 @@
 //                                            && !devpThread.getStation().get(inSta.getStaNo()+1).isLoading()
 //                                            && devpThread.getStation().get(inSta.getStaNo()+1).getWorkNo()==0) {
 //                                        // 鍑哄簱妯″紡
-                                        devpThread.ioModeOf1F = IoModeType.PAKOUT_MODE;
+                                    devpThread.ioModeOf1F = IoModeType.PAKOUT_MODE;
 //                                    }
                                 }
                             } else {
@@ -4497,7 +4972,7 @@
                                 devpThread.ioModeOf1F = IoModeType.PAKIN_MODE;
                             }
                             break;
-                        case 203://2F
+                        case 203://1F2
                             if (pakout != null) {
                                 if (devpThread.ioModeOf2F != IoModeType.PAKOUT_MODE) {
                                     // 鍑哄簱鍒囨崲涓�
@@ -4507,12 +4982,165 @@
 //                                            && !devpThread.getStation().get(inSta.getStaNo()-1).isLoading()
 //                                            && devpThread.getStation().get(inSta.getStaNo()-1).getWorkNo()==0) {
 //                                        // 鍑哄簱妯″紡
-                                        devpThread.ioModeOf2F = IoModeType.PAKOUT_MODE;
+                                    devpThread.ioModeOf2F = IoModeType.PAKOUT_MODE;
 //                                    }
                                 }
                             } else {
                                 // 鍏ュ簱妯″紡
                                 devpThread.ioModeOf2F = IoModeType.PAKIN_MODE;
+                            }
+                            break;
+//                        case 113://2F1
+//                            if (pakout != null) {
+//                                if (devpThread.ioModeOf3F != IoModeType.PAKOUT_MODE) {
+//                                    // 鍑哄簱鍒囨崲涓�
+////                                    devpThread.ioModeOf2F = IoModeType.PAKOUT_BOOTING;
+////                                    WrkMast pakin = wrkMastMapper.selectWorkingPakin(inSta.getStaNo());
+////                                    if (pakin == null && !devpThread.getStation().get(inSta.getStaNo()).isLoading()
+////                                            && !devpThread.getStation().get(inSta.getStaNo()-1).isLoading()
+////                                            && devpThread.getStation().get(inSta.getStaNo()-1).getWorkNo()==0) {
+////                                        // 鍑哄簱妯″紡
+//                                    devpThread.ioModeOf3F = IoModeType.PAKOUT_MODE;
+////                                    }
+//                                }
+//                            } else {
+//                                // 鍏ュ簱妯″紡
+//                                devpThread.ioModeOf3F = IoModeType.PAKIN_MODE;
+//                            }
+//                            break;
+//                        case 213://2F2
+//                            if (pakout != null) {
+//                                if (devpThread.ioModeOf4F != IoModeType.PAKOUT_MODE) {
+//                                    // 鍑哄簱鍒囨崲涓�
+////                                    devpThread.ioModeOf2F = IoModeType.PAKOUT_BOOTING;
+////                                    WrkMast pakin = wrkMastMapper.selectWorkingPakin(inSta.getStaNo());
+////                                    if (pakin == null && !devpThread.getStation().get(inSta.getStaNo()).isLoading()
+////                                            && !devpThread.getStation().get(inSta.getStaNo()-1).isLoading()
+////                                            && devpThread.getStation().get(inSta.getStaNo()-1).getWorkNo()==0) {
+////                                        // 鍑哄簱妯″紡
+//                                    devpThread.ioModeOf4F = IoModeType.PAKOUT_MODE;
+////                                    }
+//                                }
+//                            } else {
+//                                // 鍏ュ簱妯″紡
+//                                devpThread.ioModeOf4F = IoModeType.PAKIN_MODE;
+//                            }
+//                            break;
+                    }
+                }
+
+            }
+
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+    }
+
+    public synchronized void ioConvert2F() {
+        try {
+            // 鏍规嵁杈撻�佺嚎plc閬嶅巻
+            for (DevpSlave devp : slaveProperties.getDevp()) {
+                if (devp.getId() == 1) {
+                    continue;
+                }
+                SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, devp.getId());
+
+                for (DevpSlave.Sta inSta : devp.getInSta()) {
+                    Integer staNoEnd = inSta.getStaNo() == 113 ? 114 : 214;
+                    WrkMast pakout = wrkMastMapper.selectWorkingPakoutTwoF(staNoEnd);
+                    boolean sign = true;
+                    int[] staNos = new int[3];
+
+                    switch (inSta.getStaNo()) {
+                        case 113://2F1
+                            staNos = new int[]{112, 113, 114};
+                            for (int staNo : staNos) {
+                                StaProtocol staProtocol = devpThread.getStation().get(staNo);
+                                if (Cools.isEmpty(staProtocol)) continue;
+                                if (!staProtocol.isAutoing() || staProtocol.isLoading() || staProtocol.getWorkNo() > 0) {
+                                    sign = false;
+                                }
+                            }
+                            if (sign) {
+                                if (pakout != null) {
+                                    if (devpThread.ioModeOf3F != IoModeType.PAKOUT_MODE) {
+
+                                        // 鍑哄簱鍒囨崲涓�
+//                                    devpThread.ioModeOf2F = IoModeType.PAKOUT_BOOTING;
+//                                    WrkMast pakin = wrkMastMapper.selectWorkingPakin(inSta.getStaNo());
+//                                    if (pakin == null && !devpThread.getStation().get(inSta.getStaNo()).isLoading()
+//                                            && !devpThread.getStation().get(inSta.getStaNo()-1).isLoading()
+//                                            && devpThread.getStation().get(inSta.getStaNo()-1).getWorkNo()==0) {
+//                                        // 鍑哄簱妯″紡
+                                        devpThread.ioModeOf3F = IoModeType.PAKOUT_MODE;
+//                                    }
+                                    }
+                                } else {
+                                    CrnThread crnThread = (CrnThread) SlaveConnection.get(SlaveType.Crn, 1);
+                                    CrnProtocol crnProtocol = crnThread.getCrnProtocol();
+                                    if (crnProtocol != null) {
+                                        if (crnProtocol.getTaskNo() != 0) {
+                                            if (crnProtocol.isStatusEnd()) {
+                                                // 鍑哄簱妯″紡
+                                                devpThread.ioModeOf3F = IoModeType.PAKOUT_MODE;
+                                            } else {
+                                                // 鍏ュ簱妯″紡
+                                                devpThread.ioModeOf3F = IoModeType.PAKIN_MODE;
+                                            }
+                                        } else {
+                                            // 鍏ュ簱妯″紡
+                                            devpThread.ioModeOf3F = IoModeType.PAKIN_MODE;
+                                        }
+                                    } else {
+                                        // 鍏ュ簱妯″紡
+                                        devpThread.ioModeOf3F = IoModeType.PAKIN_MODE;
+                                    }
+                                }
+                            }
+                            break;
+                        case 213://2F2
+                            staNos = new int[]{212, 213, 214};
+                            for (int staNo : staNos) {
+                                StaProtocol staProtocol = devpThread.getStation().get(staNo);
+                                if (Cools.isEmpty(staProtocol)) continue;
+                                if (!staProtocol.isAutoing() || staProtocol.isLoading()) {
+                                    sign = false;
+                                }
+                            }
+                            if (sign) {
+                                if (pakout != null) {
+                                    if (devpThread.ioModeOf4F != IoModeType.PAKOUT_MODE) {
+                                        // 鍑哄簱鍒囨崲涓�
+//                                    devpThread.ioModeOf2F = IoModeType.PAKOUT_BOOTING;
+//                                    WrkMast pakin = wrkMastMapper.selectWorkingPakin(inSta.getStaNo());
+//                                    if (pakin == null && !devpThread.getStation().get(inSta.getStaNo()).isLoading()
+//                                            && !devpThread.getStation().get(inSta.getStaNo()-1).isLoading()
+//                                            && devpThread.getStation().get(inSta.getStaNo()-1).getWorkNo()==0) {
+//                                        // 鍑哄簱妯″紡
+                                        devpThread.ioModeOf4F = IoModeType.PAKOUT_MODE;
+//                                    }
+                                    }
+                                } else {
+                                    CrnThread crnThread = (CrnThread) SlaveConnection.get(SlaveType.Crn, 3);
+                                    CrnProtocol crnProtocol = crnThread.getCrnProtocol();
+                                    if (crnProtocol != null) {
+                                        if (crnProtocol.getTaskNo() != 0) {
+                                            if (crnProtocol.isStatusEnd()) {
+                                                // 鍑哄簱妯″紡
+                                                devpThread.ioModeOf3F = IoModeType.PAKOUT_MODE;
+                                            } else {
+                                                // 鍏ュ簱妯″紡
+                                                devpThread.ioModeOf3F = IoModeType.PAKIN_MODE;
+                                            }
+                                        } else {
+                                            // 鍏ュ簱妯″紡
+                                            devpThread.ioModeOf3F = IoModeType.PAKIN_MODE;
+                                        }
+                                    } else {
+                                        // 鍏ュ簱妯″紡
+                                        devpThread.ioModeOf3F = IoModeType.PAKIN_MODE;
+                                    }
+                                }
                             }
                             break;
                     }
@@ -4525,4 +5153,58 @@
         }
     }
 
+    public synchronized void automaticallyTurnOffCharging() {
+        // 鑾峰彇褰撳墠鏃堕棿鎴�
+        long timestamp = System.currentTimeMillis();
+        Date date = new Date(timestamp);
+        TimeZone timeZone = TimeZone.getTimeZone("Asia/Shanghai");
+        java.util.Calendar calendar = java.util.Calendar.getInstance(timeZone);
+        calendar.setTime(date);
+        int hour = calendar.get(java.util.Calendar.HOUR_OF_DAY);
+        if (hour > 8 && hour < 18) {
+            for (SteSlave ste : slaveProperties.getSte()) {
+                SteThread steThread = (SteThread) SlaveConnection.get(SlaveType.Ste, ste.getId());
+                SteProtocol steProtocol = steThread.getSteProtocol();
+                BasSte basSte = basSteService.selectById(ste.getId());
+                if (Cools.isEmpty(steProtocol, basSte)) {
+                    continue;
+                }
+                try {
+                    // 鍦ㄧ嚎 绌洪棽   鏃犱綔涓氭爣璁�   涓嶅湪鍏呯數
+                    if (steProtocol.getMode() == 0
+                            || !steProtocol.statusType.equals(SteStatusType.IDLE)
+                            || basSte.getPakMk().equals("Y")
+                            || steProtocol.getChargeStatus() == 0
+                    ) {
+                        continue;
+                    }
+                    if (!steProtocol.isEnable()) {
+                        continue;
+                    }
+                    if (steProtocol.getCharge() > Float.parseFloat(basSte.getChargeLine())) {
+                        WrkCharge wrkCharge = wrkChargeService.selectWorking(steProtocol.getSteNo().intValue());
+                        if (wrkCharge == null) {
+                            if (steProtocol.getChargeStatus() == 1) {
+                                SteCommand steCommand = new SteCommand();
+                                steCommand.setSteNo(ste.getId()); // 绌挎杞︾紪鍙�
+                                steCommand.setTaskNo(9999); // 宸ヤ綔鍙�
+                                steCommand.setTaskMode(SteTaskModeType.CLOSE_CHARGE);
+                                if (!MessageQueue.offer(SlaveType.Ste, ste.getId(), new Task(2, steCommand))) {
+                                    News.error("绌挎杞﹀懡浠や笅鍙戝け璐ワ紝绌挎杞﹀彿={}锛屼换鍔℃暟鎹�={}", ste.getId(), JSON.toJSON(steCommand));
+                                }
+                                try {
+                                    Thread.sleep(500);
+                                } catch (Exception e) {
+
+                                }
+                            }
+                        }
+                    }
+                } catch (Exception e) {
+                    News.error("鑷姩鍏抽棴鍏呯數鍑洪敊锛岃仈绯荤鐞嗗憳锛�" + hour + "鐐�;" + ste.getId() + "鍙峰皬杞�;");
+                }
+            }
+        }
+    }
+
 }

--
Gitblit v1.9.1