From a315e29b913babd2e6f8005e2af75ae8484751aa Mon Sep 17 00:00:00 2001
From: luxiaotao1123 <t1341870251@63.com>
Date: 星期二, 25 十月 2022 10:20:09 +0800
Subject: [PATCH] #

---
 src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java |  457 +++++++++++++++++++++++++++++++++++++++++---------------
 1 files changed, 334 insertions(+), 123 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 c725877..a9e6816 100644
--- a/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
@@ -3,7 +3,6 @@
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.mapper.EntityWrapper;
-import com.baomidou.mybatisplus.mapper.Wrapper;
 import com.core.common.Cools;
 import com.core.exception.CoolException;
 import com.zy.asrs.entity.*;
@@ -642,7 +641,7 @@
                     }
                 }
                 // 搴撲綅绉昏浆
-                this.locToLoc(crn, crnProtocol);
+//                this.locToLoc(crn, crnProtocol);
                 // 婕旂ず浠诲姟
                 this.steMoveDemo(crn, crnProtocol);
             }
@@ -696,18 +695,6 @@
             }
 
             // 妫�娴嬫槸鍚﹀瓨鍦ㄥ嚭搴撲换鍔�
-//            WrkMast pakoutWrkMast = wrkMastMapper.selectPakout(slave.getId(), null);
-//            if (null != pakoutWrkMast) {
-//                if ((pakoutWrkMast.getIoType() == 103 || pakoutWrkMast.getIoType() == 104 || pakoutWrkMast.getIoType() == 107)
-//                        && pakoutWrkMast.getWrkSts() == 17
-//                        && basDevpService.selectByWrkNo(pakoutWrkMast.getWrkNo()) != null
-//                ) {
-//
-//                } else {
-//                    log.error("{}鍏ュ簱浠诲姟鏃犳硶浣滀笟锛屽洜瀛樺湪鍑哄簱涓换鍔�!", wrkMast.getWrkNo());
-//                    continue;
-//                }
-//            }
             if (null != wrkMastMapper.selectPakout(slave.getId(), null)) {
                 log.error("{}鍏ュ簱浠诲姟鏃犳硶浣滀笟锛屽洜瀛樺湪鍑哄簱涓换鍔�!", wrkMast.getWrkNo());
                 continue;
@@ -717,90 +704,119 @@
             wrkMast.setIoPri((double) 9999);
             wrkMastMapper.updateById(wrkMast);
 
-            // 鐩爣搴撲綅 ===>> 鏈�澶栧眰搴撲綅
-            if (locMastService.isOutMost(wrkMast.getLocNo())) {
-                // 鍒ゆ柇灏忚溅鏄惁鍦ㄦ渶澶栧眰搴撲綅锛屽鏋滄槸鍒欐惉璧帮紝濡傛灉涓嶆槸锛屽垯鐩存帴鍫嗗灈鏈哄叆搴�
-                Integer steNo = this.hasCar(wrkMast.getLocNo());
-                // 鏈夊皬杞�
-                if (steNo != null) {
-                    // 灏忚溅琛岃蛋鍒板爢鍨涙満寰呮惉绉荤偣
-                    if (wrkMast.getWrkSts() == 2L && wrkMast.getSteNo() == null) {
-                        // 娌℃湁鍏朵粬浠诲姟
-                        if (null == wrkMastMapper.selectPakin(slave.getId(), steNo)) {
-                            this.letCarBeReady(wrkMast, steNo, wrkMast.getLocNo());
-                        }
+            // 鍒ゆ柇鏄惁涓虹┛姊簱
+            if (!locMastService.isShuttle(wrkMast.getLocNo())) {
+
+                // 闈炵┛姊簱鍏ュ簱 銆� 鍫嗗灈鏈虹洿鎺ュ叆搴� 銆�
+                if (wrkMast.getWrkSts() == 2) {
+
+                    // 宸茬粡瀛樺湪鍚婅溅鎵ц浠诲姟鏃讹紝鍒欒繃婊�
+                    if (wrkMastMapper.selectWorking(slave.getId()) != null) {
+                        continue;
                     }
-                    // 灏忚溅鎼蛋
-                    if (wrkMast.getWrkSts() == 3L) {
-                        this.carMoveOut(wrkMast, steNo, crnProtocol);
-                    }
-                // 娌℃湁灏忚溅
-                } else {
 
-                    // 褰撳墠鍏ュ簱搴撲綅缁勬病鏈夊皬杞� 鍫嗗灈鏈哄垯鍘荤珯鐐瑰彇璐у叆搴�
-                    // case 1锛氫粠濮嬭嚦缁堝簱浣嶇粍閮芥病鏈夊皬杞︼紝娌℃湁杩佸嚭灏忚溅鍔ㄤ綔锛屾墍浠ュ伐浣滅姸鎬� = 2
-                    // case 2锛氬爢鍨涙満宸茬粡鎼嚭灏忚溅锛屾湁杩佸嚭灏忚溅鍔ㄤ綔锛屾墍浠ュ伐浣滅姸鎬� = 6
-                    if ((wrkMast.getWrkSts() == 2L && wrkMast.getSteNo() == null) || wrkMast.getWrkSts() == 6L) {
-
-                        // 宸茬粡瀛樺湪鍚婅溅鎵ц浠诲姟鏃讹紝鍒欒繃婊�
-                        if (wrkMastMapper.selectWorking(slave.getId()) != null) {
-                            continue;
-                        }
-
-                        // 鍫嗗灈鏈哄叆搴� 鍛戒护涓嬪彂鍖� --------------------------------------------------------------------------
-                        CrnCommand crnCommand = new CrnCommand();
-                        crnCommand.setCrnNo(slave.getId()); // 鍫嗗灈鏈虹紪鍙�
-                        crnCommand.setTaskNo(wrkMast.getWrkNo().shortValue()); // 宸ヤ綔鍙�
-                        crnCommand.setAckFinish((short) 0);  // 浠诲姟瀹屾垚纭浣�
-                        crnCommand.setTaskMode(CrnTaskModeType.LOC_MOVE); // 浠诲姟妯″紡:  搴撲綅绉昏浆
-                        crnCommand.setSourcePosX(crnStn.getRow().shortValue());     // 婧愬簱浣嶆帓
-                        crnCommand.setSourcePosY(crnStn.getBay().shortValue());     // 婧愬簱浣嶅垪
-                        crnCommand.setSourcePosZ(crnStn.getLev().shortValue());     // 婧愬簱浣嶅眰
-                        crnCommand.setDestinationPosX(locMast.getRow1().shortValue());     // 鐩爣搴撲綅鎺�
-                        crnCommand.setDestinationPosY(locMast.getBay1().shortValue());     // 鐩爣搴撲綅鍒�
-                        crnCommand.setDestinationPosZ(locMast.getLev1().shortValue());     // 鐩爣搴撲綅灞�
-                        if (!MessageQueue.offer(SlaveType.Crn, wrkMast.getCrnNo(), new Task(2, crnCommand))) {
-                            log.error("鍫嗗灈鏈哄懡浠や笅鍙戝け璐ワ紝鍫嗗灈鏈哄彿={}锛屼换鍔℃暟鎹�={}", wrkMast.getCrnNo(), JSON.toJSON(crnCommand));
-                        } else {
-                            // 淇敼宸ヤ綔妗g姸鎬�  7.鍚婅溅鍏ュ簱涓�
-                            Date now = new Date();
-                            wrkMast.setWrkSts(7L);
-                            wrkMast.setCrnStrTime(now);
-                            wrkMast.setModiTime(now);
-                            if (wrkMastMapper.updateById(wrkMast) == 0) {
-                                log.error("淇敼宸ヤ綔妗g姸鎬� {} => 7.鍚婅溅鍏ュ簱涓� 澶辫触锛侊紒锛屽伐浣滃彿={}", wrkMast.getWrkSts$(), wrkMast.getWrkNo());
+                    // 鍙屾繁搴撲綅涓旀祬搴撲綅鏈夎揣锛屽垯闇�鍏堝娴呭簱浣嶈繘琛屽簱浣嶇Щ杞�
+                    if (Utils.isDeepLoc(slaveProperties, wrkMast.getLocNo())) {
+                        String shallowLocNo = Utils.getShallowLoc(slaveProperties, wrkMast.getLocNo());
+                        LocMast shallowLoc = locMastService.selectById(shallowLocNo);
+                        // O.绌哄簱浣嶃�丵.鎷f枡/鐩樼偣/骞舵澘鍐嶅叆搴撱�丼.鍏ュ簱棰勭害銆乆.绂佺敤 鐩存帴鎼紒
+                        switch (shallowLoc.getLocSts()) {
+                            case "P":
+                            case "R": {
+                                WrkMast waitWrkMast = wrkMastMapper.selectBySourceLocNo(shallowLocNo);
+                                if (null == waitWrkMast) {
+                                    log.error("{}搴撲綅寮傚父锛屾湭妫�绱㈠埌鐩稿簲宸ヤ綔妗o紒", shallowLocNo);
+                                } else {
+                                    if (waitWrkMast.getWrkSts() < 17) {
+                                        waitWrkMast.setIoPri(20D);
+                                        waitWrkMast.setModiTime(new Date());
+                                        if (wrkMastMapper.updateById(waitWrkMast) == 0) {
+                                            log.error("璋冩暣宸ヤ綔妗d紭鍏堢骇澶辫触锛佸伐浣滃彿={}", waitWrkMast.getWrkNo());
+                                        }
+                                        //20220719 Add锛屽鏋滄祬搴撲綅鐘舵�佷负P/R锛屽伐浣滅姸鎬佷负14/15,璇存槑娴呭簱浣嶅凡缁忕┖浜嗭紝鍙互鎵ц鍏ュ簱浠诲姟
+                                        continue;
+                                    }
+                                }
+                                break;
                             }
-                            return true;
+                            case "F":
+                            case "D":
+                                // 姝ゆ爣璁伴伩鍏嶅娆℃墽琛岀Щ搴撲换鍔�
+                                if (Cools.isEmpty(wrkMast.getUpdMk()) || "N".equals(wrkMast.getUpdMk())) {
+                                    wrkMast.setUpdMk("Y");
+                                    wrkMast.setIoPri(20D);
+                                    wrkMastMapper.updateById(wrkMast);
+                                    // 鐢熸垚宸ヤ綔妗c�佹敼鍙樻祬搴撲綅鐨勬簮搴�/鐩爣搴� 搴撲綅鐘舵�併�佷笅鍙戝爢鍨涙満鍛戒护锛堢珛椹墽琛�)
+                                    moveLocForDeepLoc(slave, shallowLoc);
+                                }
+                                continue;
+                            case "Q": {
+                                WrkMast waitWrkMast = wrkMastMapper.selectBySourceLocNo(shallowLocNo);
+                                if (null != waitWrkMast && waitWrkMast.getWrkSts() == 9) {
+                                    continue;
+                                }
+                                break;
+                            }
                         }
                     }
 
+                    // 鍫嗗灈鏈哄叆搴� 鍛戒护涓嬪彂鍖� --------------------------------------------------------------------------
+                    CrnCommand crnCommand = new CrnCommand();
+                    crnCommand.setCrnNo(slave.getId()); // 鍫嗗灈鏈虹紪鍙�
+                    crnCommand.setTaskNo(wrkMast.getWrkNo().shortValue()); // 宸ヤ綔鍙�
+                    crnCommand.setAckFinish((short) 0);  // 浠诲姟瀹屾垚纭浣�
+                    crnCommand.setTaskMode(CrnTaskModeType.LOC_MOVE); // 浠诲姟妯″紡:  搴撲綅绉昏浆
+                    crnCommand.setSourcePosX(crnStn.getRow().shortValue());     // 婧愬簱浣嶆帓
+                    crnCommand.setSourcePosY(crnStn.getBay().shortValue());     // 婧愬簱浣嶅垪
+                    crnCommand.setSourcePosZ(crnStn.getLev().shortValue());     // 婧愬簱浣嶅眰
+                    crnCommand.setDestinationPosX(locMast.getRow1().shortValue());     // 鐩爣搴撲綅鎺�
+                    crnCommand.setDestinationPosY(locMast.getBay1().shortValue());     // 鐩爣搴撲綅鍒�
+                    crnCommand.setDestinationPosZ(locMast.getLev1().shortValue());     // 鐩爣搴撲綅灞�
+                    if (!MessageQueue.offer(SlaveType.Crn, wrkMast.getCrnNo(), new Task(2, crnCommand))) {
+                        log.error("鍫嗗灈鏈哄懡浠や笅鍙戝け璐ワ紝鍫嗗灈鏈哄彿={}锛屼换鍔℃暟鎹�={}", wrkMast.getCrnNo(), JSON.toJSON(crnCommand));
+                    } else {
+                        // 淇敼宸ヤ綔妗g姸鎬�  7.鍚婅溅鍏ュ簱涓�
+                        Date now = new Date();
+                        wrkMast.setWrkSts(7L);
+                        wrkMast.setCrnStrTime(now);
+                        wrkMast.setModiTime(now);
+                        if (wrkMastMapper.updateById(wrkMast) == 0) {
+                            log.error("淇敼宸ヤ綔妗g姸鎬� {} => 7.鍚婅溅鍏ュ簱涓� 澶辫触锛侊紒锛屽伐浣滃彿={}", wrkMast.getWrkSts$(), wrkMast.getWrkNo());
+                        }
+                        return true;
+                    }
                 }
-
-            // 鐩爣搴撲綅 ===>> 闈炴渶澶栧眰搴撲綅
             } else {
-                // 鍒ゆ柇灏忚溅鏄惁鍦ㄥ綋鍓嶇粍搴撲綅锛屽鏋滄槸鍒欏皢绌挎杞︾Щ鑷虫渶澶栧眰锛岀瓑寰呭爢鍨涙満鏀捐揣锛涘鏋滀笉鏄紝鍒欏爢鍨涙満瀵绘壘绌挎杞︼紝骞舵斁缃綋鍓嶇粍鏈�澶栧眰
-                Integer steNo = this.hasCarOfIdle(wrkMast.getLocNo());
-                // 鏈夊皬杞�
-                if (steNo != null) {
-                    // 灏忚溅琛岃蛋鍒板爢鍨涙満寰呮惉绉荤偣
-                    if (wrkMast.getWrkSts() == 2L && wrkMast.getSteNo() == null) {
-                        // 娌℃湁鍏朵粬浠诲姟
-                        if (null == wrkMastMapper.selectPakin(slave.getId(), steNo)) {
-                            this.letCarBeWaiting(wrkMast, steNo, wrkMast.getLocNo());
+                // 鐩爣搴撲綅 ===>> 鏈�澶栧眰搴撲綅
+                if (locMastService.isOutMost(wrkMast.getLocNo())) {
+                    // 鍒ゆ柇灏忚溅鏄惁鍦ㄦ渶澶栧眰搴撲綅锛屽鏋滄槸鍒欐惉璧帮紝濡傛灉涓嶆槸锛屽垯鐩存帴鍫嗗灈鏈哄叆搴�
+                    Integer steNo = this.hasCar(wrkMast.getLocNo());
+                    // 鏈夊皬杞�
+                    if (steNo != null) {
+                        // 灏忚溅琛岃蛋鍒板爢鍨涙満寰呮惉绉荤偣
+                        if (wrkMast.getWrkSts() == 2L && wrkMast.getSteNo() == null) {
+                            // 娌℃湁鍏朵粬浠诲姟
+                            if (null == wrkMastMapper.selectPakin(slave.getId(), steNo)) {
+                                this.letCarBeReady(wrkMast, steNo, wrkMast.getLocNo());
+                            }
                         }
-                    }
-                    // 鍫嗗灈鏈哄皢璐ф斁鑷冲皬杞︿笂 3.灏忚溅寰呮惉锛堝皬杞︿笉鐢ㄦ惉杩愶紝宸茬粡鍦ㄥ綋鍓嶇粍搴撲綅锛� / 6.灏忚溅寰呭叆  ===>> 7.鍚婅溅鍏ュ簱涓�
-                    if (wrkMast.getWrkSts() == 3L || wrkMast.getWrkSts() == 6L) {
-                        // 灏忚溅澶勪簬绌洪棽
-                        SteThread steThread = (SteThread) SlaveConnection.get(SlaveType.Ste, steNo);
-                        SteProtocol steProtocol = steThread.getSteProtocol();
-                        if (steProtocol == null) { continue; }
-                        if (steProtocol.isIdle()) {
+                        // 灏忚溅鎼蛋
+                        if (wrkMast.getWrkSts() == 3L) {
+                            this.carMoveOut(wrkMast, steNo, crnProtocol);
+                        }
+                        // 娌℃湁灏忚溅
+                    } else {
+
+                        // 褰撳墠鍏ュ簱搴撲綅缁勬病鏈夊皬杞� 鍫嗗灈鏈哄垯鍘荤珯鐐瑰彇璐у叆搴�
+                        // case 1锛氫粠濮嬭嚦缁堝簱浣嶇粍閮芥病鏈夊皬杞︼紝娌℃湁杩佸嚭灏忚溅鍔ㄤ綔锛屾墍浠ュ伐浣滅姸鎬� = 2
+                        // case 2锛氬爢鍨涙満宸茬粡鎼嚭灏忚溅锛屾湁杩佸嚭灏忚溅鍔ㄤ綔锛屾墍浠ュ伐浣滅姸鎬� = 6
+                        if ((wrkMast.getWrkSts() == 2L && wrkMast.getSteNo() == null) || wrkMast.getWrkSts() == 6L) {
 
                             // 宸茬粡瀛樺湪鍚婅溅鎵ц浠诲姟鏃讹紝鍒欒繃婊�
                             if (wrkMastMapper.selectWorking(slave.getId()) != null) {
                                 continue;
                             }
+
                             // 鍫嗗灈鏈哄叆搴� 鍛戒护涓嬪彂鍖� --------------------------------------------------------------------------
                             CrnCommand crnCommand = new CrnCommand();
                             crnCommand.setCrnNo(slave.getId()); // 鍫嗗灈鏈虹紪鍙�
@@ -810,40 +826,95 @@
                             crnCommand.setSourcePosX(crnStn.getRow().shortValue());     // 婧愬簱浣嶆帓
                             crnCommand.setSourcePosY(crnStn.getBay().shortValue());     // 婧愬簱浣嶅垪
                             crnCommand.setSourcePosZ(crnStn.getLev().shortValue());     // 婧愬簱浣嶅眰
-                            crnCommand.setDestinationPosX(Utils.getGroupRow(locMast.getLocNo()).shortValue());     // 鐩爣搴撲綅鎺�
+                            crnCommand.setDestinationPosX(locMast.getRow1().shortValue());     // 鐩爣搴撲綅鎺�
                             crnCommand.setDestinationPosY(locMast.getBay1().shortValue());     // 鐩爣搴撲綅鍒�
                             crnCommand.setDestinationPosZ(locMast.getLev1().shortValue());     // 鐩爣搴撲綅灞�
                             if (!MessageQueue.offer(SlaveType.Crn, wrkMast.getCrnNo(), new Task(2, crnCommand))) {
                                 log.error("鍫嗗灈鏈哄懡浠や笅鍙戝け璐ワ紝鍫嗗灈鏈哄彿={}锛屼换鍔℃暟鎹�={}", wrkMast.getCrnNo(), JSON.toJSON(crnCommand));
                             } else {
-                                // 淇敼宸ヤ綔妗g姸鎬�  3.灏忚溅寰呮惉 ===>> 7.鍚婅溅鍏ュ簱涓�
+                                // 淇敼宸ヤ綔妗g姸鎬�  7.鍚婅溅鍏ュ簱涓�
                                 Date now = new Date();
                                 wrkMast.setWrkSts(7L);
                                 wrkMast.setCrnStrTime(now);
                                 wrkMast.setModiTime(now);
                                 if (wrkMastMapper.updateById(wrkMast) == 0) {
-                                    log.error("淇敼宸ヤ綔妗g姸鎬� 3.灏忚溅寰呮惉/6.灏忚溅寰呭叆 => 7.鍚婅溅鍏ュ簱涓� 澶辫触锛侊紒锛屽伐浣滃彿={}", wrkMast.getWrkNo());
+                                    log.error("淇敼宸ヤ綔妗g姸鎬� {} => 7.鍚婅溅鍏ュ簱涓� 澶辫触锛侊紒锛屽伐浣滃彿={}", wrkMast.getWrkSts$(), wrkMast.getWrkNo());
                                 }
                                 return true;
                             }
                         }
+
                     }
-                // 娌℃湁灏忚溅
+
+                    // 鐩爣搴撲綅 ===>> 闈炴渶澶栧眰搴撲綅
                 } else {
-                    if (wrkMast.getWrkSts() == 2L && wrkMast.getSteNo() == null) {
-                        // 瀵绘壘褰撳墠鍫嗗灈鏈哄搴旂殑灏忚溅
-                        SteThread steThread = queryIdleCar(wrkMast);
-                        if (steThread != null) {
+                    // 鍒ゆ柇灏忚溅鏄惁鍦ㄥ綋鍓嶇粍搴撲綅锛屽鏋滄槸鍒欏皢绌挎杞︾Щ鑷虫渶澶栧眰锛岀瓑寰呭爢鍨涙満鏀捐揣锛涘鏋滀笉鏄紝鍒欏爢鍨涙満瀵绘壘绌挎杞︼紝骞舵斁缃綋鍓嶇粍鏈�澶栧眰
+                    Integer steNo = this.hasCarOfIdle(wrkMast.getLocNo());
+                    // 鏈夊皬杞�
+                    if (steNo != null) {
+                        // 灏忚溅琛岃蛋鍒板爢鍨涙満寰呮惉绉荤偣
+                        if (wrkMast.getWrkSts() == 2L && wrkMast.getSteNo() == null) {
                             // 娌℃湁鍏朵粬浠诲姟
                             if (null == wrkMastMapper.selectPakin(slave.getId(), steNo)) {
-                                // 璁╁皬杞︾瓑寰呮惉杩愬緟缁�
-                                this.letCarBeReady(wrkMast, steThread.getSlave().getId(), wrkMast.getLocNo());
+                                this.letCarBeWaiting(wrkMast, steNo, wrkMast.getLocNo());
                             }
                         }
-                    }
-                    // 鍫嗗灈鏈烘惉杩愬皬杞�
-                    if (wrkMast.getWrkSts() == 3L) {
-                        this.carMoveIn(wrkMast, wrkMast.getSteNo(), crnProtocol);
+                        // 鍫嗗灈鏈哄皢璐ф斁鑷冲皬杞︿笂 3.灏忚溅寰呮惉锛堝皬杞︿笉鐢ㄦ惉杩愶紝宸茬粡鍦ㄥ綋鍓嶇粍搴撲綅锛� / 6.灏忚溅寰呭叆  ===>> 7.鍚婅溅鍏ュ簱涓�
+                        if (wrkMast.getWrkSts() == 3L || wrkMast.getWrkSts() == 6L) {
+                            // 灏忚溅澶勪簬绌洪棽
+                            SteThread steThread = (SteThread) SlaveConnection.get(SlaveType.Ste, steNo);
+                            SteProtocol steProtocol = steThread.getSteProtocol();
+                            if (steProtocol == null) { continue; }
+                            if (steProtocol.isIdle()) {
+
+                                // 宸茬粡瀛樺湪鍚婅溅鎵ц浠诲姟鏃讹紝鍒欒繃婊�
+                                if (wrkMastMapper.selectWorking(slave.getId()) != null) {
+                                    continue;
+                                }
+                                // 鍫嗗灈鏈哄叆搴� 鍛戒护涓嬪彂鍖� --------------------------------------------------------------------------
+                                CrnCommand crnCommand = new CrnCommand();
+                                crnCommand.setCrnNo(slave.getId()); // 鍫嗗灈鏈虹紪鍙�
+                                crnCommand.setTaskNo(wrkMast.getWrkNo().shortValue()); // 宸ヤ綔鍙�
+                                crnCommand.setAckFinish((short) 0);  // 浠诲姟瀹屾垚纭浣�
+                                crnCommand.setTaskMode(CrnTaskModeType.LOC_MOVE); // 浠诲姟妯″紡:  搴撲綅绉昏浆
+                                crnCommand.setSourcePosX(crnStn.getRow().shortValue());     // 婧愬簱浣嶆帓
+                                crnCommand.setSourcePosY(crnStn.getBay().shortValue());     // 婧愬簱浣嶅垪
+                                crnCommand.setSourcePosZ(crnStn.getLev().shortValue());     // 婧愬簱浣嶅眰
+                                crnCommand.setDestinationPosX(Utils.getGroupRow(locMast.getLocNo()).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 {
+                                    // 淇敼宸ヤ綔妗g姸鎬�  3.灏忚溅寰呮惉 ===>> 7.鍚婅溅鍏ュ簱涓�
+                                    Date now = new Date();
+                                    wrkMast.setWrkSts(7L);
+                                    wrkMast.setCrnStrTime(now);
+                                    wrkMast.setModiTime(now);
+                                    if (wrkMastMapper.updateById(wrkMast) == 0) {
+                                        log.error("淇敼宸ヤ綔妗g姸鎬� 3.灏忚溅寰呮惉/6.灏忚溅寰呭叆 => 7.鍚婅溅鍏ュ簱涓� 澶辫触锛侊紒锛屽伐浣滃彿={}", wrkMast.getWrkNo());
+                                    }
+                                    return true;
+                                }
+                            }
+                        }
+                        // 娌℃湁灏忚溅
+                    } else {
+                        if (wrkMast.getWrkSts() == 2L && wrkMast.getSteNo() == null) {
+                            // 瀵绘壘褰撳墠鍫嗗灈鏈哄搴旂殑灏忚溅
+                            SteThread steThread = queryIdleCar(wrkMast);
+                            if (steThread != null) {
+                                // 娌℃湁鍏朵粬浠诲姟
+                                if (null == wrkMastMapper.selectPakin(slave.getId(), steNo)) {
+                                    // 璁╁皬杞︾瓑寰呮惉杩愬緟缁�
+                                    this.letCarBeReady(wrkMast, steThread.getSlave().getId(), wrkMast.getLocNo());
+                                }
+                            }
+                        }
+                        // 鍫嗗灈鏈烘惉杩愬皬杞�
+                        if (wrkMast.getWrkSts() == 3L) {
+                            this.carMoveIn(wrkMast, wrkMast.getSteNo(), crnProtocol);
+                        }
                     }
                 }
             }
@@ -1717,8 +1788,7 @@
                 if (wrkMast.getIoType() != 11) {
                     // 鍏ュ簱 ==>> 璐х墿鎼叆搴�
                     if (wrkMast.getWrkSts() == 7){
-                        // 鍒ゆ柇鏄惁闇�瑕佸皬杞﹀叆搴�
-                        if (locMastService.isOutMost(wrkMast.getLocNo())) {
+                        if (!locMastService.isShuttle(wrkMast.getLocNo())) {
                             // ==> 9.鍏ュ簱瀹屾垚
                             wrkMast.setWrkSts(9L);
                             Date now = new Date();
@@ -1732,35 +1802,51 @@
                                 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));
+                            // 鍒ゆ柇鏄惁闇�瑕佸皬杞﹀叆搴�
+                            if (locMastService.isOutMost(wrkMast.getLocNo())) {
+                                // ==> 9.鍏ュ簱瀹屾垚
+                                wrkMast.setWrkSts(9L);
+                                Date now = new Date();
+                                wrkMast.setCrnEndTime(now);
+                                wrkMast.setModiTime(now);
+                                // 淇敼鎴愬姛鍚庡浣嶅爢鍨涙満
+                                if (wrkMastMapper.updateById(wrkMast) > 0) {
+                                    // 鍫嗗灈鏈哄浣�
+                                    crnThread.setResetFlag(true);
                                 } 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);
+                                    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 {
-                                        log.error("淇敼宸ヤ綔妗g姸鎬� 7.鍚婅溅鍏ュ簱涓� => 8.灏忚溅鎼叆搴� 澶辫触锛侊紒锛屽伐浣滃彿={}", wrkMast.getWrkNo());
+                                        // 淇敼宸ヤ綔妗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() == 4) {
                         // 4.杩佸叆灏忚溅 ==> 6.灏忚溅寰呭叆
                         wrkMast.setWrkSts(6L);
@@ -2917,5 +3003,130 @@
 
     }
 
+    /**
+     * 鍥犲弻娣卞簱浣嶉樆濉烇紝瀵规祬搴撲綅杩涜绉昏浆锛堝嚭搴撶増)
+     * tip锛氬悓姝�
+     */
+    private void moveLocForDeepLoc(CrnSlave crn, LocMast shallowLoc){
+        try {
+            List<Integer> rows = locMastService.queryDistinctRow(crn.getId());
+            LocMast loc = null;
+            for (Integer row : rows) {
+                if (Utils.isDeepLoc(slaveProperties, row)) {
+                    loc = locMastService.queryFreeLocMast(row, shallowLoc.getLocType1());
+
+                    if (loc != null) {
+                        if (Utils.isDeepLoc(slaveProperties, loc.getLocNo())) {
+                            String shallowLocNo = Utils.getShallowLoc(slaveProperties, loc.getLocNo());
+                            LocMast shallowLoc1 = locMastService.selectById(shallowLocNo);
+                            if (!shallowLoc1.getLocSts().equals("O")) {
+                                loc = null;
+                            }
+                        }
+                    }
+
+
+                    if (null != loc) {
+                        break;
+                    }
+                }
+            }
+            if (null == loc) {
+                for (Integer row : rows) {
+                    if (Utils.isShallowLoc(slaveProperties, row)) {
+                        loc = locMastService.queryFreeLocMast(row, shallowLoc.getLocType1());
+
+                        if (null != loc) {//瀵瑰簲娣卞簱浣嶉潪鍦ㄥ簱鐘舵��,涓嶈兘绉诲簱
+                            String deepLoc = Utils.getDeepLoc(slaveProperties, loc.getLocNo());
+                            LocMast deepLoc1 = locMastService.selectById(deepLoc);
+                            if (!deepLoc1.getLocSts().equals("F") && !deepLoc1.getLocSts().equals("D")) {
+                                loc = null;
+                            }
+                        }
+
+                        if (null != loc) {
+                            break;
+                        }
+                    }
+                }
+            }
+            if (null == loc) {
+                log.error("鍙屾繁搴撲綅 --- 娴呭簱浣嶉樆濉炲紓甯革紒 寰呯Щ杞祬搴撲綅锛�" + shallowLoc.getLocNo());
+                throw new CoolException("鍙屾繁搴撲綅 --- 娴呭簱浣嶉樆濉炲紓甯革紒 寰呯Щ杞祬搴撲綅锛�" + shallowLoc.getLocNo());
+            }
+
+            // 鑾峰彇宸ヤ綔鍙�
+            int workNo = commonService.getWorkNo(0);
+            // 淇濆瓨宸ヤ綔妗�
+            WrkMast wrkMast = new WrkMast();
+            wrkMast.setWrkNo(workNo);
+            wrkMast.setIoTime(new Date());
+            wrkMast.setWrkSts(11L); // 宸ヤ綔鐘舵�侊細11.鐢熸垚鍑哄簱ID
+            wrkMast.setIoType(11); // 鍏ュ嚭搴撶姸鎬侊細 11.搴撴牸绉昏浇
+            wrkMast.setIoPri(13D);
+            wrkMast.setCrnNo(crn.getId());
+            wrkMast.setSourceLocNo(shallowLoc.getLocNo()); // 婧愬簱浣�
+            wrkMast.setLocNo(loc.getLocNo()); // 鐩爣搴撲綅
+            wrkMast.setFullPlt(shallowLoc.getFullPlt()); // 婊℃澘
+            wrkMast.setPicking("N"); // 鎷f枡
+            wrkMast.setExitMk("N"); // 閫�鍑�
+            wrkMast.setEmptyMk(shallowLoc.getLocSts().equals("D") ? "Y" : "N"); // 绌烘澘
+            wrkMast.setBarcode(shallowLoc.getBarcode()); // 鎵樼洏鐮�
+            wrkMast.setLinkMis("N");
+            wrkMast.setAppeTime(new Date());
+            wrkMast.setModiTime(new Date());
+            int res = wrkMastMapper.insert(wrkMast);
+            if (res == 0) {
+                log.error("鍙屾繁搴撲綅 --- 淇濆瓨宸ヤ綔妗eけ璐ワ紒 寰呯Щ杞祬搴撲綅锛�" + shallowLoc.getLocNo());
+                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(new Date());
+                    wrkDetl.setAnfme(locDetl.getAnfme());
+                    wrkDetl.setAppeTime(new Date());
+                    wrkDetl.setModiTime(new Date());
+                    if (!wrkDetlService.insert(wrkDetl)) {
+                        log.error("鍙屾繁搴撲綅 --- 淇濆瓨宸ヤ綔妗f槑缁嗗け璐ワ紒 寰呯Щ杞祬搴撲綅锛�" + shallowLoc.getLocNo());
+                        throw new CoolException("淇濆瓨宸ヤ綔妗f槑缁嗗け璐�");
+                    }
+                }
+            }
+            // 淇敼婧愬簱浣嶇姸鎬�
+            if (shallowLoc.getLocSts().equals("D") || shallowLoc.getLocSts().equals("F")) {
+                shallowLoc.setLocSts("R"); // R.鍑哄簱棰勭害
+                shallowLoc.setModiTime(new Date());
+                if (!locMastService.updateById(shallowLoc)) {
+                    log.error("鍙屾繁搴撲綅 --- 鏇存柊婧愬簱浣嶇姸鎬佸け璐ワ紒 寰呯Щ杞祬搴撲綅锛�" + shallowLoc.getLocNo());
+                    throw new CoolException("鏇存柊婧愬簱浣嶇姸鎬佸け璐�");
+                }
+            } else {
+                log.error("鍙屾繁搴撲綅 --- 婧愬簱浣嶅嚭搴撳け璐ワ紒 寰呯Щ杞祬搴撲綅锛�" + shallowLoc.getLocNo());
+                throw new CoolException("婧愬簱浣嶅嚭搴撳け璐�");
+            }
+            // 淇敼鐩爣搴撲綅鐘舵��
+            if (loc.getLocSts().equals("O")) {
+                loc.setLocSts("S"); // S.鍏ュ簱棰勭害
+                loc.setModiTime(new Date());
+                if (!locMastService.updateById(loc)) {
+                    log.error("鍙屾繁搴撲綅 --- 鏇存柊鐩爣搴撲綅鐘舵�佸け璐ワ紒 寰呯Щ杞祬搴撲綅锛�" + shallowLoc.getLocNo());
+                    throw new CoolException("鏇存柊鐩爣搴撲綅鐘舵�佸け璐�");
+                }
+            } else {
+                log.error("鍙屾繁搴撲綅 --- 绉昏浆澶辫触锛� 寰呯Щ杞祬搴撲綅锛�" + shallowLoc.getLocNo());
+                throw new CoolException("绉昏浆澶辫触");
+            }
+        } catch (Exception e) {
+            log.error("鍙屾繁搴撲綅闃诲锛屽娴呭簱浣嶈繘琛岀Щ杞け璐�", e);
+            e.printStackTrace();
+            TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
+        }
+    }
+
 
 }

--
Gitblit v1.9.1