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

---
 src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java |  374 +++++++++++++++++++++++++++++++++++++++++------------
 1 files changed, 289 insertions(+), 85 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 cf4cc06..2d1b045 100644
--- a/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
@@ -718,92 +718,116 @@
 
             if (!locMastService.isShuttle(wrkMast.getLocNo())) {
 
-            }
+                // 闈炵┛姊簱鍏ュ簱 銆� 鍫嗗灈鏈虹洿鎺ュ叆搴� 銆�
+                if (wrkMast.getWrkSts() == 2) {
 
-            // 鐩爣搴撲綅 ===>> 鏈�澶栧眰搴撲綅
-            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 (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.selectByLocNo(shallowLocNo);
+                                if (null == waitWrkMast || (waitWrkMast.getIoType() == 101 && waitWrkMast.getWrkSts() >= 14L)) {
+                                    log.error("{}搴撲綅寮傚父锛屾湭妫�绱㈠埌鐩稿簲宸ヤ綔妗o紒", shallowLocNo);
+                                } else {
+                                    waitWrkMast.setIoPri(15D);
+                                    waitWrkMast.setModiTime(new Date());
+                                    if (wrkMastMapper.updateById(waitWrkMast) == 0) {
+                                        log.error("璋冩暣宸ヤ綔妗d紭鍏堢骇澶辫触锛佸伐浣滃彿={}", waitWrkMast.getWrkNo());
+                                    }
+                                    //20220719 Add锛屽鏋滄祬搴撲綅鐘舵�佷负P/R锛屽伐浣滅姸鎬佷负14/15,璇存槑娴呭簱浣嶅凡缁忕┖浜嗭紝鍙互鎵ц鍏ュ簱浠诲姟
+                                    if (waitWrkMast.getWrkSts() < 14L) {
+                                        continue;
+                                    }
+                                }
+                                break;
                             }
-                            return true;
+                            case "F":
+                            case "D":
+                                // 姝ゆ爣璁伴伩鍏嶅娆℃墽琛岀Щ搴撲换鍔�
+                                if (Cools.isEmpty(wrkMast.getUpdMk()) || "N".equals(wrkMast.getUpdMk())) {
+                                    wrkMast.setUpdMk("Y");
+                                    wrkMast.setIoPri(14D);
+                                    wrkMastMapper.updateById(wrkMast);
+                                    // 鐢熸垚宸ヤ綔妗c�佹敼鍙樻祬搴撲綅鐨勬簮搴�/鐩爣搴� 搴撲綅鐘舵�併�佷笅鍙戝爢鍨涙満鍛戒护锛堢珛椹墽琛�)
+                                    moveLocForDeepLoc(slave, shallowLoc);
+                                }
+                                continue;
+                            case "Q": {
+                                WrkMast waitWrkMast = wrkMastMapper.selectByLocNo(shallowLocNo);
+                                if (null != waitWrkMast && waitWrkMast.getWrkSts() == 4) {
+                                    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()); // 鍫嗗灈鏈虹紪鍙�
@@ -813,40 +837,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);
+                        }
                     }
                 }
             }
@@ -2920,5 +2999,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