From 5875bad1254965cbb921e0c64776043d344f5548 Mon Sep 17 00:00:00 2001
From: luxiaotao1123 <t1341870251@63.com>
Date: 星期四, 27 十月 2022 13:41:53 +0800
Subject: [PATCH] #

---
 src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java |  285 ++++++++++++++++++++++++--------------------------------
 1 files changed, 124 insertions(+), 161 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 275afd2..e78cd7b 100644
--- a/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
@@ -3,6 +3,7 @@
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.mapper.EntityWrapper;
+import com.core.annotations.ManagerAuth;
 import com.core.common.Cools;
 import com.core.exception.CoolException;
 import com.zy.asrs.entity.*;
@@ -94,7 +95,6 @@
      * 缁勬墭
      * 鍏ュ簱绔欙紝鏍规嵁鏉$爜鎵弿鐢熸垚鍏ュ簱宸ヤ綔妗o紝宸ヤ綔鐘舵�� 2
      */
-    @Async
     public void generateStoreWrkFile() {
         // 鏍规嵁杈撻�佺嚎plc閬嶅巻
         for (DevpSlave devp : slaveProperties.getDevp()) {
@@ -225,7 +225,6 @@
      * wms鍏ュ簱
      * 鍏ュ簱绔欙紝鏍规嵁鏉$爜鎵弿鐢熸垚鍏ュ簱宸ヤ綔妗o紝宸ヤ綔鐘舵�� 1 ==>> 2
      */
-    @Async
     public void generateStoreWrkFile0() {
         // 鏍规嵁杈撻�佺嚎plc閬嶅巻
         for (DevpSlave devp : slaveProperties.getDevp()) {
@@ -846,7 +845,7 @@
 
                     }
 
-                    // 鐩爣搴撲綅 ===>> 闈炴渶澶栧眰搴撲綅
+                // 鐩爣搴撲綅 ===>> 闈炴渶澶栧眰搴撲綅
                 } else {
                     // 鍒ゆ柇灏忚溅鏄惁鍦ㄥ綋鍓嶇粍搴撲綅锛屽鏋滄槸鍒欏皢绌挎杞︾Щ鑷虫渶澶栧眰锛岀瓑寰呭爢鍨涙満鏀捐揣锛涘鏋滀笉鏄紝鍒欏爢鍨涙満瀵绘壘绌挎杞︼紝骞舵斁缃綋鍓嶇粍鏈�澶栧眰
                     Integer steNo = this.hasCarOfIdle(wrkMast.getLocNo());
@@ -898,7 +897,7 @@
                                 }
                             }
                         }
-                        // 娌℃湁灏忚溅
+                    // 娌℃湁灏忚溅
                     } else {
                         if (wrkMast.getWrkSts() == 2L && wrkMast.getSteNo() == null) {
                             // 瀵绘壘褰撳墠鍫嗗灈鏈哄搴旂殑灏忚溅
@@ -992,15 +991,13 @@
                                 log.error("{}搴撲綅寮傚父锛屾湭妫�绱㈠埌鐩稿簲宸ヤ綔妗o紒", shallowLocNo);
                             } else {
                                 if(waitWrkMast.getWrkSts() == 11) {
-                                    waitWrkMast.setIoPri(15D);
+                                    waitWrkMast.setIoPri(20D);
                                     waitWrkMast.setModiTime(new Date());
                                     if (wrkMastMapper.updateById(waitWrkMast) == 0) {
                                         log.error("璋冩暣宸ヤ綔妗d紭鍏堢骇澶辫触锛佸伐浣滃彿={}", waitWrkMast.getWrkNo());
                                     }
-                                    continue;
-                                } else {
-
                                 }
+                                continue;
                             }
                         } else if (shallowLoc.getLocSts().equals("F") || shallowLoc.getLocSts().equals("D")) {
                             // 姝ゆ爣璁伴伩鍏嶅娆℃墽琛岀Щ搴撲换鍔�
@@ -1029,9 +1026,9 @@
                     crnCommand.setSourcePosX(sourceSta.getRow1().shortValue());     // 婧愬簱浣嶆帓
                     crnCommand.setSourcePosY(sourceSta.getBay1().shortValue());     // 婧愬簱浣嶅垪
                     crnCommand.setSourcePosZ(sourceSta.getLev1().shortValue());     // 婧愬簱浣嶅眰
-//                crnCommand.setDestinationPosX(crnStn.getRow().shortValue());     // 鐩爣搴撲綅鎺�
-//                crnCommand.setDestinationPosY(crnStn.getBay().shortValue());     // 鐩爣搴撲綅鍒�
-//                crnCommand.setDestinationPosZ(crnStn.getLev().shortValue());     // 鐩爣搴撲綅灞�
+                    crnCommand.setDestinationPosX(crnStn.getRow().shortValue());     // 鐩爣搴撲綅鎺�
+                    crnCommand.setDestinationPosY(crnStn.getBay().shortValue());     // 鐩爣搴撲綅鍒�
+                    crnCommand.setDestinationPosZ(crnStn.getLev().shortValue());     // 鐩爣搴撲綅灞�
                     if (!MessageQueue.offer(SlaveType.Crn, wrkMast.getCrnNo(), new Task(2, crnCommand))) {
                         log.error("鍫嗗灈鏈哄懡浠や笅鍙戝け璐ワ紝鍫嗗灈鏈哄彿={}锛屼换鍔℃暟鎹�={}", wrkMast.getCrnNo(), JSON.toJSON(crnCommand));
                     } else {
@@ -1080,7 +1077,7 @@
                             }
                             return true;
                         }
-                        // 涓嶆槸鏈�澶栧眰搴撲綅锛岄渶瑕佷娇鐢ㄧ┛姊溅鎼繍鍚庯紝鍐嶅爢鍨涙満鍑哄簱
+                    // 涓嶆槸鏈�澶栧眰搴撲綅锛岄渶瑕佷娇鐢ㄧ┛姊溅鎼繍鍚庯紝鍐嶅爢鍨涙満鍑哄簱
                     } else {
                         // 褰撳墠缁勫簱浣嶆槸鍚︽湁绌挎杞�
                         Integer steNo = this.hasCarOfIdle(wrkMast.getSourceLocNo());
@@ -1100,7 +1097,7 @@
                                     steCommand.setTaskNo(wrkMast.getWrkNo()); // 宸ヤ綔鍙�
                                     steCommand.setTaskMode(SteTaskModeType.findOutByLoc(wrkMast.getSourceLocNo())); // 浠诲姟妯″紡:  鍘昏繎鐐� 绛夊緟鍫嗗灈鏈哄弶鍙�
 
-                                    steCommand.setRow(Utils.getGroupRow(steProtocol.getRow().intValue()).shortValue());
+                                    steCommand.setRow(Utils.getGroupRow(steProtocol.getRow().intValue(), false).shortValue());
                                     steCommand.setBay(steProtocol.getBay());
                                     steCommand.setLev(steProtocol.getLev());
 
@@ -1131,7 +1128,7 @@
                                 crnCommand.setTaskNo(wrkMast.getWrkNo().shortValue()); // 宸ヤ綔鍙�
                                 crnCommand.setAckFinish((short) 0);  // 浠诲姟瀹屾垚纭浣�
                                 crnCommand.setTaskMode(CrnTaskModeType.LOC_MOVE); // 浠诲姟妯″紡:  搴撲綅绉昏浆
-                                crnCommand.setSourcePosX(Utils.getGroupRow(sourceSta.getRow1()).shortValue());     // 婧愬簱浣嶆帓
+                                crnCommand.setSourcePosX(Utils.getGroupRow(sourceSta.getRow1(), false).shortValue());     // 婧愬簱浣嶆帓
                                 crnCommand.setSourcePosY(sourceSta.getBay1().shortValue());     // 婧愬簱浣嶅垪
                                 crnCommand.setSourcePosZ(sourceSta.getLev1().shortValue());     // 婧愬簱浣嶅眰
                                 crnCommand.setDestinationPosX(crnStn.getRow().shortValue());     // 鐩爣搴撲綅鎺�
@@ -1152,7 +1149,7 @@
                                 }
                             }
 
-                            // 娌℃湁灏忚溅
+                        // 娌℃湁灏忚溅
                         } else {
                             if (wrkMast.getWrkSts() == 11L && wrkMast.getSteNo() == null) {
                                 // 瀵绘壘鏈�杩戠殑灏忚溅
@@ -1259,11 +1256,44 @@
             SteThread steThread = (SteThread) SlaveConnection.get(SlaveType.Ste, ste.getId());
             SteProtocol steProtocol = steThread.getSteProtocol();
             if (steProtocol == null) { continue; }
-            if (Utils.getGroupRow(locNo).equals(Utils.getGroupRow(steProtocol.getRow().intValue())) && steProtocol.getBay() == Utils.getBay(locNo) && steProtocol.getLev() == Utils.getLev(locNo)) {
+            if (Utils.getGroupRow(locNo, true).equals(Utils.getGroupRow(steProtocol.getRow().intValue(), true))
+                    && steProtocol.getBay() == Utils.getBay(locNo)
+                    && steProtocol.getLev() == Utils.getLev(locNo)) {
                 return steProtocol.getSteNo().intValue();
             }
         }
         return null;
+    }
+
+    /**
+     * 褰撳墠搴撲綅缁勬槸鍚﹀瓨鍦ㄥ叾浠栧皬杞�
+     */
+    public Integer existOtherSte(String locNo, Integer steNo) {
+        Integer otherSteNo = null;
+        for (SteSlave ste : slaveProperties.getSte()) {
+            if (ste.getId().equals(steNo)) { continue; }
+            // 鑾峰彇鍫嗗灈鏈轰俊鎭�
+            SteThread steThread = (SteThread) SlaveConnection.get(SlaveType.Ste, ste.getId());
+            SteProtocol steProtocol = steThread.getSteProtocol();
+            if (steProtocol == null) { continue; }
+            if (steProtocol.isEnable()) {
+                BasSte basSte = basSteService.selectById(ste.getId());
+                if (basSte != null) {
+                    if ((Utils.getGroupRow(locNo, true).equals(Utils.getGroupRow(basSte.getRow(), true))
+                            && basSte.getBay() == Utils.getBay(locNo)
+                            && basSte.getLev() == Utils.getLev(locNo))
+                        ||
+                        (Utils.getGroupRow(locNo, true).equals(Utils.getGroupRow(steProtocol.getRow().intValue(), true))
+                                && steProtocol.getBay() == Utils.getBay(locNo)
+                                && steProtocol.getLev() == Utils.getLev(locNo))
+                    ) {
+                        otherSteNo = ste.getId();
+                        break;
+                    }
+                }
+            }
+        }
+        return otherSteNo;
     }
 
     /**
@@ -1276,7 +1306,9 @@
             SteProtocol steProtocol = steThread.getSteProtocol();
             if (steProtocol == null) { continue; }
             if (steProtocol.isIdle()) {
-                if (Utils.getGroupRow(locNo).equals(Utils.getGroupRow(steProtocol.getRow().intValue())) && steProtocol.getBay() == Utils.getBay(locNo) && steProtocol.getLev() == Utils.getLev(locNo)) {
+                if (Utils.getGroupRow(locNo, true).equals(Utils.getGroupRow(steProtocol.getRow().intValue(), true))
+                        && steProtocol.getBay() == Utils.getBay(locNo)
+                        && steProtocol.getLev() == Utils.getLev(locNo)) {
                     return steProtocol.getSteNo().intValue();
                 }
             }
@@ -1288,17 +1320,32 @@
      * 鏌ユ壘褰撳墠搴撲綅鏈�閫傚悎鐨勭┛姊溅鏉ヤ綔涓�
      */
     public SteThread queryIdleCar(WrkMast wrkMast) {
-        Integer crnNo = wrkMast.getCrnNo();
-        BasSte basSte = basSteService.findByCrnNo(crnNo);
-        // 鑾峰彇绌挎杞︿俊鎭�
-        SteThread steThread = (SteThread) SlaveConnection.get(SlaveType.Ste, basSte.getSteNo());
-        SteProtocol steProtocol = steThread.getSteProtocol();
-        if (steProtocol != null) {
-            if (steProtocol.isIdle()) {
-                return steThread;
+        List<BasSte> basStes = basSteService.selectList(new EntityWrapper<>());
+        int val = 0;
+        SteThread result = null;
+        for (BasSte basSte : basStes) {
+            // 鑾峰彇绌挎杞︿俊鎭�
+            SteThread steThread = (SteThread) SlaveConnection.get(SlaveType.Ste, basSte.getSteNo());
+            SteProtocol steProtocol = steThread.getSteProtocol();
+            if (steProtocol == null) { continue; }
+            if (!steProtocol.isIdle()) { continue; }
+            String locNo = wrkMast.getWrkSts() < 10 ? wrkMast.getLocNo() : wrkMast.getSourceLocNo();
+            LocMast locMast = locMastService.selectById(locNo);
+            int lev = locMast.getLev1();
+            int bay = locMast.getBay1();
+            int levAbs = Math.abs(lev - steProtocol.getLev());
+            int bayAbs = Math.abs(bay - steProtocol.getBay());
+            if (val == 0) {
+                val = levAbs + bayAbs;
+                result = steThread;
+            } else {
+                if ((levAbs + bayAbs) < val) {
+                    val = levAbs + bayAbs;
+                    result = steThread;
+                }
             }
         }
-        return null;
+        return result;
     }
 
     /**
@@ -1318,7 +1365,7 @@
             steCommand.setTaskNo(wrkMast.getWrkNo()); // 宸ヤ綔鍙�
             steCommand.setTaskMode(SteTaskModeType.findWaiting(steProtocol.getRow().intValue())); // 浠诲姟妯″紡:  鍘昏繎鐐� 绛夊緟鍫嗗灈鏈哄弶鍙�
 
-            steCommand.setRow(Utils.getGroupRow(steProtocol.getRow().intValue()).shortValue());
+            steCommand.setRow(Utils.getGroupRow(steProtocol.getRow().intValue(), true).shortValue());
             steCommand.setBay(steProtocol.getBay());
             steCommand.setLev(steProtocol.getLev());
 
@@ -1350,7 +1397,7 @@
         SteCommand steCommand = new SteCommand();
         steCommand.setSteNo(steNo); // 绌挎杞︾紪鍙�
         steCommand.setTaskNo(wrkCharge.getWrkNo()); // 宸ヤ綔鍙�
-        steCommand.setTaskMode(SteTaskModeType.findOriginByLoc(steProtocol.getRow())); // 浠诲姟妯″紡:  鍘昏繎鐐� 绛夊緟鍫嗗灈鏈哄弶鍙�
+        steCommand.setTaskMode(SteTaskModeType.findOriginByLoc(steProtocol.getRow().intValue())); // 浠诲姟妯″紡:  鍘昏繎鐐� 绛夊緟鍫嗗灈鏈哄弶鍙�
 
         steCommand.setRow(Utils.getGroupRow(steProtocol.getRow().intValue()).shortValue());
         steCommand.setBay(steProtocol.getBay());
@@ -1385,7 +1432,7 @@
             steCommand.setTaskNo(wrkMast.getWrkNo()); // 宸ヤ綔鍙�
             steCommand.setTaskMode(SteTaskModeType.findOriginByLoc(steProtocol)); // 浠诲姟妯″紡:  鍘昏繎鐐� 绛夊緟鍫嗗灈鏈哄弶鍙�
 
-            steCommand.setRow(Utils.getGroupRow(steProtocol.getRow().intValue()).shortValue());
+            steCommand.setRow(Utils.getGroupRow(steProtocol.getRow().intValue(), true).shortValue());
             steCommand.setBay(steProtocol.getBay());
             steCommand.setLev(steProtocol.getLev());
 
@@ -1450,6 +1497,14 @@
                 LocMast locMast;
                 // 鍏ュ簱鎼�
                 if (wrkMast.getWrkSts() <= 10) {
+
+                    // 鍒ゆ柇琚Щ搴撲綅鏄惁瀛樺湪鍏朵粬灏忚溅
+                    Integer otherSte = existOtherSte(wrkMast.getLocNo(), steNo);
+                    if (otherSte != null) {
+                        log.warn("{}鍙峰皬杞︾Щ鍏}搴撲綅缁勫け璐ワ紝鍘熷洜锛氬瓨鍦▄}鍙风┛姊溅锛�", steNo, wrkMast.getLocNo(), otherSte);
+                        return;
+                    }
+
                     locMast = locMastService.selectById(wrkMast.getLocNo());
                     // 鍫嗗灈鏈哄懡浠や笅鍙戝尯 --------------------------------------------------------------------------
                     CrnCommand crnCommand = new CrnCommand();
@@ -1457,17 +1512,17 @@
                     crnCommand.setTaskNo(wrkMast.getWrkNo().shortValue()); // 宸ヤ綔鍙�
                     crnCommand.setAckFinish((short) 0);  // 浠诲姟瀹屾垚纭浣�
                     crnCommand.setTaskMode(CrnTaskModeType.STE_MOVE); // 浠诲姟妯″紡:  搴撲綅绉昏浆
-                    crnCommand.setSourcePosX(Utils.getGroupRow(steProtocol.getRow().intValue()).shortValue());     // 婧愬簱浣嶆帓
+                    crnCommand.setSourcePosX(Utils.getGroupRow(steProtocol.getRow().intValue(), true).shortValue());     // 婧愬簱浣嶆帓
                     crnCommand.setSourcePosY(steProtocol.getBay());     // 婧愬簱浣嶅垪
                     crnCommand.setSourcePosZ(steProtocol.getLev());     // 婧愬簱浣嶅眰
-                    crnCommand.setDestinationPosX(Utils.getGroupRow(locMast.getLocNo()).shortValue());     // 鐩爣搴撲綅鎺�
+                    crnCommand.setDestinationPosX(Utils.getGroupRow(locMast.getLocNo(), true).shortValue());     // 鐩爣搴撲綅鎺�
                     crnCommand.setDestinationPosY(locMast.getBay1().shortValue());     // 鐩爣搴撲綅鍒�
                     crnCommand.setDestinationPosZ(locMast.getLev1().shortValue());     // 鐩爣搴撲綅灞�
                     if (!MessageQueue.offer(SlaveType.Crn, wrkMast.getCrnNo(), new Task(2, crnCommand))) {
                         log.error("鍫嗗灈鏈哄懡浠や笅鍙戝け璐ワ紝鍫嗗灈鏈哄彿={}锛屼换鍔℃暟鎹�={}", wrkMast.getCrnNo(), JSON.toJSON(crnCommand));
                     } else {
                         // 淇敼绌挎杞﹁繍琛屼腑鎺掑垪灞�
-                        steThread.modifyPos(Utils.getGroupRow(locMast.getLocNo()), locMast.getBay1(), locMast.getLev1());
+                        steThread.modifyPos(Utils.getGroupRow(locMast.getLocNo(), true), locMast.getBay1(), locMast.getLev1());
                         // 淇敼宸ヤ綔妗g姸鎬� 3.灏忚溅寰呮惉 => 4.杩佸叆灏忚溅
                         Date now = new Date();
                         wrkMast.setWrkSts(4L);
@@ -1479,6 +1534,13 @@
                     }
                 // 鍑哄簱鎼�
                 } else {
+                    // 鍒ゆ柇琚Щ搴撲綅鏄惁瀛樺湪鍏朵粬灏忚溅
+                    Integer otherSte = existOtherSte(wrkMast.getSourceLocNo(), steNo);
+                    if (otherSte != null) {
+                        log.warn("{}鍙峰皬杞︾Щ鍏}搴撲綅缁勫け璐ワ紝鍘熷洜锛氬瓨鍦▄}鍙风┛姊溅锛�", steNo, wrkMast.getSourceLocNo(), otherSte);
+                        return;
+                    }
+
                     locMast = locMastService.selectById(wrkMast.getSourceLocNo());
                     // 鍫嗗灈鏈哄懡浠や笅鍙戝尯 --------------------------------------------------------------------------
                     CrnCommand crnCommand = new CrnCommand();
@@ -1486,17 +1548,17 @@
                     crnCommand.setTaskNo(wrkMast.getWrkNo().shortValue()); // 宸ヤ綔鍙�
                     crnCommand.setAckFinish((short) 0);  // 浠诲姟瀹屾垚纭浣�
                     crnCommand.setTaskMode(CrnTaskModeType.STE_MOVE); // 浠诲姟妯″紡:  搴撲綅绉昏浆
-                    crnCommand.setSourcePosX(Utils.getGroupRow(steProtocol.getRow().intValue()).shortValue());     // 婧愬簱浣嶆帓
+                    crnCommand.setSourcePosX(Utils.getGroupRow(steProtocol.getRow().intValue(), true).shortValue());     // 婧愬簱浣嶆帓
                     crnCommand.setSourcePosY(steProtocol.getBay());     // 婧愬簱浣嶅垪
                     crnCommand.setSourcePosZ(steProtocol.getLev());     // 婧愬簱浣嶅眰
-                    crnCommand.setDestinationPosX(Utils.getGroupRow(locMast.getLocNo()).shortValue());     // 鐩爣搴撲綅鎺�
+                    crnCommand.setDestinationPosX(Utils.getGroupRow(locMast.getLocNo(), true).shortValue());     // 鐩爣搴撲綅鎺�
                     crnCommand.setDestinationPosY(locMast.getBay1().shortValue());     // 鐩爣搴撲綅鍒�
                     crnCommand.setDestinationPosZ(locMast.getLev1().shortValue());     // 鐩爣搴撲綅灞�
                     if (!MessageQueue.offer(SlaveType.Crn, wrkMast.getCrnNo(), new Task(2, crnCommand))) {
                         log.error("鍫嗗灈鏈哄懡浠や笅鍙戝け璐ワ紝鍫嗗灈鏈哄彿={}锛屼换鍔℃暟鎹�={}", wrkMast.getCrnNo(), JSON.toJSON(crnCommand));
                     } else {
                         // 淇敼绌挎杞﹁繍琛屼腑鎺掑垪灞�
-                        steThread.modifyPos(Utils.getGroupRow(locMast.getLocNo()), locMast.getBay1(), locMast.getLev1());
+                        steThread.modifyPos(Utils.getGroupRow(locMast.getLocNo(), true), locMast.getBay1(), locMast.getLev1());
                         // 淇敼宸ヤ綔妗g姸鎬� 12.灏忚溅寰呮惉 => 13.杩佸叆灏忚溅
                         Date now = new Date();
                         wrkMast.setWrkSts(13L);
@@ -1530,7 +1592,15 @@
                     log.error("{}鍙风┛姊溅鍦ㄦ暟鎹簱涓嶅瓨鍦紒锛侊紒", steNo);
                     return;
                 }
+
                 String idleLocNo = basSte.getIdleLoc();
+
+                // 鍒ゆ柇琚Щ搴撲綅鏄惁瀛樺湪鍏朵粬灏忚溅
+                Integer otherSte = existOtherSte(idleLocNo, steNo);
+                if (otherSte != null) {
+                    log.warn("{}鍙峰皬杞︾Щ鍏}搴撲綅缁勫け璐ワ紝鍘熷洜锛氬瓨鍦▄}鍙风┛姊溅锛�", steNo, idleLocNo, otherSte);
+                    return;
+                }
 
                 // 鍫嗗灈鏈哄懡浠や笅鍙戝尯 --------------------------------------------------------------------------
                 CrnCommand crnCommand = new CrnCommand();
@@ -1538,17 +1608,17 @@
                 crnCommand.setTaskNo(wrkMast.getWrkNo().shortValue()); // 宸ヤ綔鍙�
                 crnCommand.setAckFinish((short) 0);  // 浠诲姟瀹屾垚纭浣�
                 crnCommand.setTaskMode(CrnTaskModeType.STE_MOVE); // 浠诲姟妯″紡:  搴撲綅绉昏浆
-                crnCommand.setSourcePosX(Utils.getGroupRow(steProtocol.getRow().intValue()).shortValue());     // 婧愬簱浣嶆帓
+                crnCommand.setSourcePosX(Utils.getGroupRow(steProtocol.getRow().intValue(), true).shortValue());     // 婧愬簱浣嶆帓
                 crnCommand.setSourcePosY(steProtocol.getBay());     // 婧愬簱浣嶅垪
                 crnCommand.setSourcePosZ(steProtocol.getLev());     // 婧愬簱浣嶅眰
-                crnCommand.setDestinationPosX(Utils.getGroupRow(idleLocNo).shortValue());     // 鐩爣搴撲綅鎺�
+                crnCommand.setDestinationPosX(Utils.getGroupRow(idleLocNo, true).shortValue());     // 鐩爣搴撲綅鎺�
                 crnCommand.setDestinationPosY((short) Utils.getBay(idleLocNo));     // 鐩爣搴撲綅鍒�
                 crnCommand.setDestinationPosZ((short) Utils.getLev(idleLocNo));     // 鐩爣搴撲綅灞�
                 if (!MessageQueue.offer(SlaveType.Crn, wrkMast.getCrnNo(), new Task(2, crnCommand))) {
                     log.error("鍫嗗灈鏈哄懡浠や笅鍙戝け璐ワ紝鍫嗗灈鏈哄彿={}锛屼换鍔℃暟鎹�={}", wrkMast.getCrnNo(), JSON.toJSON(crnCommand));
                 } else {
                     // 淇敼绌挎杞﹁繍琛屼腑鎺掑垪灞�
-                    steThread.modifyPos(Utils.getGroupRow(idleLocNo), Utils.getBay(idleLocNo), Utils.getLev(idleLocNo));
+                    steThread.modifyPos(Utils.getGroupRow(idleLocNo, true), Utils.getBay(idleLocNo), Utils.getLev(idleLocNo));
                     // 淇敼宸ヤ綔妗g姸鎬� 3.灏忚溅寰呮惉 => 5.杩佸嚭灏忚溅
                     Date now = new Date();
                     wrkMast.setWrkSts(5L);
@@ -1638,7 +1708,7 @@
                             }
                         } else {
                             // 鍒ゆ柇鏄惁闇�瑕佸皬杞﹀叆搴�
-                            if (locMastService.isOutMost(wrkMast.getLocNo())) {
+                            if (locMastService.isOutMost(wrkMast.getLocNo(), true)) {
                                 // ==> 9.鍏ュ簱瀹屾垚
                                 wrkMast.setWrkSts(9L);
                                 Date now = new Date();
@@ -1779,128 +1849,16 @@
                     }
                 // 搴撲綅绉昏浆
                 } else {
-                    if (wrkMast.getWrkSts() == 16) {
-                        Date now = new Date();
-                        if (locMastService.isOutMost(wrkMast.getLocNo())) {
-                            // 16.鍚婅溅鍑哄簱涓� ==> 9.鍏ュ簱瀹屾垚
-                            wrkMast.setWrkSts(9L);
-                            wrkMast.setCrnEndTime(now);
-                        } else {
-                            // 16.鍚婅溅鍑哄簱涓� ==> 9.鍏ュ簱瀹屾垚
-                            wrkMast.setWrkSts(9L);
-                        }
-                        wrkMast.setModiTime(now);
-                        // 淇敼鎴愬姛鍚庡浣嶅爢鍨涙満
-                        if (wrkMastMapper.updateById(wrkMast) > 0) {
-                            // 鍫嗗灈鏈哄浣�
-                            crnThread.setResetFlag(true);
-                        } else {
-                            log.error("淇敼宸ヤ綔妗g姸鎬� 16.鍚婅溅鍑哄簱涓� 澶辫触锛侊紒锛屽伐浣滃彿={}", wrkMast.getWrkNo());
-                        }
-                    } else if (wrkMast.getWrkSts() == 4) {
-                        // 4.杩佸叆灏忚溅 ==> 6.灏忚溅寰呭叆
-                        wrkMast.setWrkSts(6L);
-                        Date now = new Date();
-                        wrkMast.setCrnEndTime(now);
-                        wrkMast.setModiTime(now);
-                        // 淇敼鎴愬姛鍚庡浣嶅爢鍨涙満
-                        if (wrkMastMapper.updateById(wrkMast) > 0) {
-                            // 鍫嗗灈鏈哄浣�
-                            crnThread.setResetFlag(true);
-                            // 绌挎杞﹂噸鏂板畾浣嶆帓鍒楀眰
-                            SteThread steThread = (SteThread) SlaveConnection.get(SlaveType.Ste, wrkMast.getSteNo());
-                            if (!steThread.confirmPos()) {
-                                log.error("{}鍙风┛姊溅閲嶆柊瀹氫綅澶辫触锛佷綔涓氬伐浣滄。浠诲姟鍙凤細{}", wrkMast.getSteNo(), wrkMast.getWrkNo());
-                            }
-                            // 绌挎杞﹀幓寰呮満浣�
-                            BasSte basSte = basSteService.selectById(wrkMast.getSteNo());
-                            SteCommand steCommand = new SteCommand();
-                            steCommand.setSteNo(wrkMast.getSteNo()); // 绌挎杞︾紪鍙�
-                            steCommand.setTaskNo(9999); // 宸ヤ綔鍙�
-                            steCommand.setTaskMode(SteTaskModeType.findWaiting(basSte.getRow())); // 浠诲姟妯″紡:  鍘昏繎鐐� 绛夊緟鍫嗗灈鏈哄弶鍙�
-//                        steCommand.setRow(Utils.getGroupRow(steProtocol.getRow().intValue()).shortValue());
-//                        steCommand.setBay(steProtocol.getBay());
-//                        steCommand.setLev(steProtocol.getLev());
-                            if (!MessageQueue.offer(SlaveType.Ste, wrkMast.getSteNo(), new Task(2, steCommand))) {
-                                log.error("绌挎杞﹀緟鏈轰綅鍛戒护涓嬪彂澶辫触锛岀┛姊溅鍙�={}锛屼换鍔℃暟鎹�={}", wrkMast.getSteNo(), JSON.toJSON(steCommand));
-                            }
-                        } else {
-                            log.error("淇敼宸ヤ綔妗g姸鎬� 4.杩佸叆灏忚溅 => 6.灏忚溅寰呭叆 澶辫触锛侊紒锛屽伐浣滃彿={}", wrkMast.getWrkNo());
-                        }
-                        // 鍏ュ簱 ===>> 杩佸嚭灏忚溅 瀹屾垚
-                    } else if (wrkMast.getWrkSts() == 7){
-                        // 鍒ゆ柇鏄惁闇�瑕佸皬杞﹀叆搴�
-                        if (locMastService.isOutMost(wrkMast.getLocNo())) {
-                            // ==> 9.鍏ュ簱瀹屾垚
-                            wrkMast.setWrkSts(9L);
-                            Date now = new Date();
-                            wrkMast.setCrnEndTime(now);
-                            wrkMast.setModiTime(now);
-                            // 淇敼鎴愬姛鍚庡浣嶅爢鍨涙満
-                            if (wrkMastMapper.updateById(wrkMast) > 0) {
-                                // 鍫嗗灈鏈哄浣�
+                    if (!locMastService.isShuttle(wrkMast.getLocNo())) {
+                        if (wrkMast.getWrkSts() == 16 && wrkMast.getIoType() == 11){
+                            // 鏇存柊宸ヤ綔妗g姸鎬佷负 17.鍑哄簱瀹屾垚
+                            wrkMast.setWrkSts(17L);
+                            wrkMast.setCrnEndTime(new Date());
+                            if (wrkMastMapper.updateById(wrkMast) != 0) {
+                                // 澶嶄綅鍫嗗灈鏈�
                                 crnThread.setResetFlag(true);
                             } else {
-                                log.error("淇敼宸ヤ綔妗g姸鎬� 7.鍚婅溅鍏ュ簱涓� => 9.鍏ュ簱瀹屾垚 澶辫触锛侊紒锛屽伐浣滃彿={}", wrkMast.getWrkNo());
-                            }
-                        } else {
-                            // 缁欑┛姊溅涓嬪彂鍛戒护
-                            Integer steNo = wrkMast.getSteNo();
-                            SteThread steThread = (SteThread) SlaveConnection.get(SlaveType.Ste, steNo);
-                            SteProtocol steProtocol = steThread.getSteProtocol();
-                            if (steProtocol == null) { continue; }
-                            if (steProtocol.isIdle()) {
-                                // 鍛戒护涓嬪彂鍖� --------------------------------------------------------------------------
-                                SteCommand steCommand = new SteCommand();
-                                steCommand.setSteNo(steNo); // 绌挎杞︾紪鍙�
-                                steCommand.setTaskNo(wrkMast.getWrkNo()); // 宸ヤ綔鍙�
-                                steCommand.setTaskMode(SteTaskModeType.findInByLoc(wrkMast.getLocNo())); // 浠诲姟妯″紡: 鎼叆搴�
-                                if (!MessageQueue.offer(SlaveType.Ste, steNo, new Task(2, steCommand))) {
-                                    log.error("绌挎杞﹀懡浠や笅鍙戝け璐ワ紝绌挎杞﹀彿={}锛屼换鍔℃暟鎹�={}", steNo, JSON.toJSON(steCommand));
-                                } else {
-                                    // 淇敼宸ヤ綔妗g姸鎬� 7.鍚婅溅鍏ュ簱涓� => 8.灏忚溅鎼叆搴�
-                                    wrkMast.setWrkSts(8L);
-                                    Date now = new Date();
-                                    wrkMast.setCrnEndTime(now);
-                                    wrkMast.setModiTime(now);
-                                    if (wrkMastMapper.updateById(wrkMast) > 0) {
-                                        // 鍫嗗灈鏈哄浣�
-                                        crnThread.setResetFlag(true);
-                                    } else {
-                                        log.error("淇敼宸ヤ綔妗g姸鎬� 7.鍚婅溅鍏ュ簱涓� => 8.灏忚溅鎼叆搴� 澶辫触锛侊紒锛屽伐浣滃彿={}", wrkMast.getWrkNo());
-                                    }
-                                }
-                            }
-                        }
-                    } else if (wrkMast.getWrkSts() == 13) {
-                        // 缁欑┛姊溅涓嬪彂鍛戒护
-                        Integer steNo = wrkMast.getSteNo();
-                        SteThread steThread = (SteThread) SlaveConnection.get(SlaveType.Ste, steNo);
-                        SteProtocol steProtocol = steThread.getSteProtocol();
-                        if (steProtocol == null) { continue; }
-                        // 绌挎杞﹂噸鏂板畾浣嶆帓鍒楀眰
-                        if (!steThread.confirmPos()) {
-                            log.error("{}鍙风┛姊溅閲嶆柊瀹氫綅澶辫触锛佷綔涓氬伐浣滄。浠诲姟鍙凤細{}", wrkMast.getSteNo(), wrkMast.getWrkNo());
-                        }
-                        // 鍛戒护涓嬪彂鍖� --------------------------------------------------------------------------
-                        SteCommand steCommand = new SteCommand();
-                        steCommand.setSteNo(steNo); // 绌挎杞︾紪鍙�
-                        steCommand.setTaskNo(wrkMast.getWrkNo()); // 宸ヤ綔鍙�
-                        steCommand.setTaskMode(SteTaskModeType.findOutByLoc(wrkMast.getSourceLocNo())); // 浠诲姟妯″紡:  鎼嚭搴�
-                        if (!MessageQueue.offer(SlaveType.Ste, steNo, new Task(2, steCommand))) {
-                            log.error("绌挎杞﹀懡浠や笅鍙戝け璐ワ紝绌挎杞﹀彿={}锛屼换鍔℃暟鎹�={}", steNo, JSON.toJSON(steCommand));
-                        } else {
-                            // 13.杩佸叆灏忚溅 ==> 14.灏忚溅鎼嚭搴�
-                            wrkMast.setWrkSts(14L);
-                            Date now = new Date();
-                            wrkMast.setCrnEndTime(now);
-                            wrkMast.setModiTime(now);
-                            // 淇敼鎴愬姛鍚庡浣嶅爢鍨涙満
-                            if (wrkMastMapper.updateById(wrkMast) > 0) {
-                                // 鍫嗗灈鏈哄浣�
-                                crnThread.setResetFlag(true);
-                            } else {
-                                log.error("淇敼宸ヤ綔妗g姸鎬� 13.杩佸叆灏忚溅 ==> 14.灏忚溅鎼嚭搴� 澶辫触锛侊紒锛屽伐浣滃彿={}", wrkMast.getWrkNo());
+                                log.error("鏇存柊宸ヤ綔妗g殑宸ヤ綔鐘舵�佷负 17.鍑哄簱瀹屾垚 澶辫触锛侊紒锛� [宸ヤ綔鍙�:{}]", wrkMast.getWrkNo());
                             }
                         }
                     }
@@ -1999,7 +1957,9 @@
                                 } else {
                                     if (wrkMast.getMk().equals("I")) {
                                         String locNo = wrkMast.getLocNo();
-                                        if (Utils.getGroupRow(locNo).equals(Utils.getGroupRow(steProtocol.getRow().intValue())) && steProtocol.getBay() == Utils.getBay(locNo) && steProtocol.getLev() == Utils.getLev(locNo)) {
+                                        if (Utils.getGroupRow(locNo, false).equals(Utils.getGroupRow(steProtocol.getRow().intValue(), false))
+                                                && steProtocol.getBay() == Utils.getBay(locNo)
+                                                && steProtocol.getLev() == Utils.getLev(locNo)) {
                                             // 淇敼宸ヤ綔妗g姸鎬� 11.鐢熸垚鍑哄簱ID => 6.灏忚溅寰呭叆
                                             wrkMast.setWrkSts(6L);
                                         } else {
@@ -2502,6 +2462,9 @@
      * 灏忚溅鐢甸噺妫�娴� ===>> 鍙戣捣鍏呯數
      */
     public synchronized void loopSteCharge() {
+        SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, 1);
+        SteChargeType steChargeType = SteChargeType.get(wrkCharge.getLocNo());
+
         for (SteSlave ste : slaveProperties.getSte()) {
             SteThread steThread = (SteThread) SlaveConnection.get(SlaveType.Ste, ste.getId());
             SteProtocol steProtocol = steThread.getSteProtocol();
@@ -2809,7 +2772,7 @@
                 SteCommand steCommand = new SteCommand();
                 steCommand.setSteNo(steNo); // 绌挎杞︾紪鍙�
                 steCommand.setTaskNo(wrkCharge.getWrkNo()); // 宸ヤ綔鍙�
-                SteTaskModeType originByLoc = SteTaskModeType.findOriginByLoc(steProtocol.getRow());
+                SteTaskModeType originByLoc = SteTaskModeType.findOriginByLoc(steProtocol.getRow().intValue());
                 if (originByLoc.equals(SteTaskModeType.GO_ORIGIN)) {
                     originByLoc = SteTaskModeType.BACK_ORIGIN;
                 } else if (originByLoc.equals(SteTaskModeType.BACK_ORIGIN)) {

--
Gitblit v1.9.1