From c30548d8d42081f2d487d64e6df3ef0bcaa1e828 Mon Sep 17 00:00:00 2001
From: luxiaotao1123 <t1341870251@163.com>
Date: 星期一, 05 十二月 2022 10:15:59 +0800
Subject: [PATCH] Merge branch 'ynwcs' of http://47.97.1.152:5880/r/zy-wcs into ynwcs

---
 src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java |  169 ++++++++++++++++++++++++++++++++++++++++++--------------
 1 files changed, 126 insertions(+), 43 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 3134932..2d9671b 100644
--- a/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
@@ -173,7 +173,7 @@
                         param.setBarcode(barcode);
                         param.setIoType(1);
                         param.setSourceStaNo(inSta.getStaNo());
-                        param.setLocType1(locTypeDto.getLocType1());
+//                        param.setLocType1(locTypeDto.getLocType1());
                         String response = new HttpHandler.Builder()
                                 .setUri(wmsUrl)
                                 .setPath("/rpc/pakin/loc/v1")
@@ -643,7 +643,7 @@
                     }
                 }
                 // 搴撲綅绉昏浆
-                this.locToLoc(crn, crnProtocol);
+//                this.locToLoc(crn, crnProtocol);
             }
         }
     }
@@ -732,9 +732,9 @@
                                         log.error("璋冩暣宸ヤ綔妗d紭鍏堢骇澶辫触锛佸伐浣滃彿={}", waitWrkMast.getWrkNo());
                                     }
                                     //20220719 Add锛屽鏋滄祬搴撲綅鐘舵�佷负P/R锛屽伐浣滅姸鎬佷负14/15,璇存槑娴呭簱浣嶅凡缁忕┖浜嗭紝鍙互鎵ц鍏ュ簱浠诲姟
-                                    continue;
                                 }
                             }
+                            continue;
                         }
                         if (shallowLoc.getLocSts().equals("F") || shallowLoc.getLocSts().equals("D")) {
                             // 姝ゆ爣璁伴伩鍏嶅娆℃墽琛岀Щ搴撲换鍔�
@@ -777,8 +777,9 @@
                         wrkMast.setModiTime(now);
                         if (wrkMastMapper.updateById(wrkMast) == 0) {
                             log.error("淇敼宸ヤ綔妗g姸鎬� {} => 7.鍚婅溅鍏ュ簱涓� 澶辫触锛侊紒锛屽伐浣滃彿={}", wrkMast.getWrkSts$(), wrkMast.getWrkNo());
+                        } else {
+                            return true;
                         }
-                        return true;
                     }
                 }
             } else {
@@ -793,11 +794,13 @@
                             // 娌℃湁鍏朵粬浠诲姟
                             if (null == wrkMastMapper.selectPakin(slave.getId(), steNo)) {
                                 this.letCarBeReady(wrkMast, steNo, wrkMast.getLocNo());
+                                return true;
                             }
                         }
                         // 灏忚溅鎼蛋
                         if (wrkMast.getWrkSts() == 3L) {
                             this.carMoveOut(wrkMast, steNo, crnProtocol);
+                            return true;
                         }
                         // 娌℃湁灏忚溅
                     } else {
@@ -834,8 +837,9 @@
                                 wrkMast.setModiTime(now);
                                 if (wrkMastMapper.updateById(wrkMast) == 0) {
                                     log.error("淇敼宸ヤ綔妗g姸鎬� {} => 7.鍚婅溅鍏ュ簱涓� 澶辫触锛侊紒锛屽伐浣滃彿={}", wrkMast.getWrkSts$(), wrkMast.getWrkNo());
+                                } else {
+                                    return true;
                                 }
-                                return true;
                             }
                         }
 
@@ -847,11 +851,13 @@
                     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());
+                            } else {
+                                return true;
                             }
                         }
                         // 鍫嗗灈鏈哄皢璐ф斁鑷冲皬杞︿笂 3.灏忚溅寰呮惉锛堝皬杞︿笉鐢ㄦ惉杩愶紝宸茬粡鍦ㄥ綋鍓嶇粍搴撲綅锛� / 6.灏忚溅寰呭叆  ===>> 7.鍚婅溅鍏ュ簱涓�
@@ -888,8 +894,9 @@
                                     wrkMast.setModiTime(now);
                                     if (wrkMastMapper.updateById(wrkMast) == 0) {
                                         log.error("淇敼宸ヤ綔妗g姸鎬� 3.灏忚溅寰呮惉/6.灏忚溅寰呭叆 => 7.鍚婅溅鍏ュ簱涓� 澶辫触锛侊紒锛屽伐浣滃彿={}", wrkMast.getWrkNo());
+                                    } else {
+                                        return true;
                                     }
-                                    return true;
                                 }
                             }
                         }
@@ -903,12 +910,14 @@
                                 if (null == wrkMastMapper.selectPakin(slave.getId(), steNo)) {
                                     // 璁╁皬杞︾瓑寰呮惉杩愬緟缁�
                                     this.letCarBeReady(wrkMast, steThread.getSlave().getId(), wrkMast.getLocNo());
+                                    return true;
                                 }
                             }
                         }
                         // 鍫嗗灈鏈烘惉杩愬皬杞�
                         if (wrkMast.getWrkSts() == 3L) {
                             this.carMoveIn(wrkMast, wrkMast.getSteNo(), crnProtocol);
+                            return true;
                         }
                     }
                 }
@@ -921,7 +930,7 @@
     /**
      * 鍑哄簱  ===>>  搴撲綅鍒板爢鍨涙満绔�
      */
-    public boolean locToCrnStn(CrnSlave slave, CrnProtocol crnProtocol){
+    public synchronized boolean locToCrnStn(CrnSlave slave, CrnProtocol crnProtocol){
         for (CrnSlave.CrnStn crnStn : slave.getCrnOutStn()) {
             // 鑾峰彇宸ヤ綔鐘舵�佷负11锛堢敓鎴愬嚭搴揑D锛夌殑鍑哄簱宸ヤ綔妗�
             WrkMast wrkMast = wrkMastMapper.selectPakOutStep111215(slave.getId(), crnStn.getStaNo());
@@ -970,11 +979,11 @@
                 }
 
                 // 缃《浠诲姟
-                wrkMast.setIoPri((double) 9999);
+                wrkMast.setIoPri((double) 9998);
                 wrkMastMapper.updateById(wrkMast);
 
                 // 鍒ゆ柇鏄惁涓虹┛姊簱
-                if (!locMastService.isShuttle(wrkMast.getLocNo())) {
+                if (!locMastService.isShuttle(wrkMast.getSourceLocNo())) {
 
                     // 鍙屾繁搴撲綅涓旀祬搴撲綅鏈夎揣锛屽垯闇�鍏堝娴呭簱浣嶈繘琛屽簱浣嶇Щ杞�
                     if (Utils.isDeepLoc(slaveProperties, wrkMast.getSourceLocNo())) {
@@ -987,7 +996,7 @@
                                 log.error("{}搴撲綅寮傚父锛屾湭妫�绱㈠埌鐩稿簲宸ヤ綔妗o紒", shallowLocNo);
                             } else {
                                 if(waitWrkMast.getWrkSts() == 11) {
-                                    waitWrkMast.setIoPri(20D);
+                                    waitWrkMast.setIoPri(wrkMast.getIoPri() + 1);
                                     waitWrkMast.setModiTime(new Date());
                                     if (wrkMastMapper.updateById(waitWrkMast) == 0) {
                                         log.error("璋冩暣宸ヤ綔妗d紭鍏堢骇澶辫触锛佸伐浣滃彿={}", waitWrkMast.getWrkNo());
@@ -1035,8 +1044,9 @@
                         wrkMast.setModiTime(now);
                         if (wrkMastMapper.updateById(wrkMast) == 0) {
                             log.error("淇敼宸ヤ綔妗g姸鎬� 11.鐢熸垚鍑哄簱ID => 16.鍚婅溅鍑哄簱涓� 澶辫触锛侊紒锛屽伐浣滃彿={}", wrkMast.getWrkNo());
+                        } else {
+                            return true;
                         }
-                        break;
                     }
 
                 } else {
@@ -1070,8 +1080,9 @@
                             wrkMast.setModiTime(now);
                             if (wrkMastMapper.updateById(wrkMast) == 0) {
                                 log.error("淇敼宸ヤ綔妗g姸鎬� 11.鐢熸垚鍑哄簱ID => 16.鍚婅溅鍑哄簱涓� 澶辫触锛侊紒锛屽伐浣滃彿={}", wrkMast.getWrkNo());
+                            } else {
+                                return true;
                             }
-                            return true;
                         }
                     // 涓嶆槸鏈�澶栧眰搴撲綅锛岄渶瑕佷娇鐢ㄧ┛姊溅鎼繍鍚庯紝鍐嶅爢鍨涙満鍑哄簱
                     } else {
@@ -1106,8 +1117,13 @@
                                         wrkMast.setSteNo(steNo);
                                         wrkMast.setCrnStrTime(now);
                                         wrkMast.setModiTime(now);
+                                        LocMast locMast = locMastService.selectById(wrkMast.getSourceLocNo());
+                                        Integer outCrnNo = locMastService.getOutCrnNo(locMast);
+                                        wrkMast.setCrnNo(outCrnNo);
                                         if (wrkMastMapper.updateById(wrkMast) == 0) {
                                             log.error("淇敼宸ヤ綔妗g姸鎬� 11.鐢熸垚鍑哄簱ID => 14.灏忚溅鎼嚭搴� 澶辫触锛侊紒锛屽伐浣滃彿={}", wrkMast.getWrkNo());
+                                        } else {
+                                            return true;
                                         }
                                     }
                                 }
@@ -1140,8 +1156,9 @@
                                     wrkMast.setModiTime(now);
                                     if (wrkMastMapper.updateById(wrkMast) == 0) {
                                         log.error("淇敼宸ヤ綔妗g姸鎬� 15.绛夊緟鍚婅溅 => 16.鍚婅溅鍑哄簱涓� 澶辫触锛侊紒锛屽伐浣滃彿={}", wrkMast.getWrkNo());
+                                    } else {
+                                        return true;
                                     }
-                                    return true;
                                 }
                             }
 
@@ -1155,12 +1172,14 @@
                                     if (null == wrkMastMapper.selectPakout(slave.getId(), steNo)) {
                                         // 璁╁皬杞︾瓑寰呮惉杩愬緟缁�
                                         this.letCarBeReady(wrkMast, steThread.getSlave().getId(), wrkMast.getSourceLocNo());
+                                        return true;
                                     }
                                 }
                             }
                             // 鍫嗗灈鏈烘惉杩愬皬杞�
                             if (wrkMast.getWrkSts() == 12L) {
                                 this.carMoveIn(wrkMast, wrkMast.getSteNo(), crnProtocol);
+                                return true;
                             }
                         }
                     }
@@ -1174,6 +1193,7 @@
     /**
      * 搴撲綅绉昏浆
      */
+    @Deprecated
     public void locToLoc(CrnSlave slave, CrnProtocol crnProtocol){
         // 鑾峰彇宸ヤ綔妗d俊鎭�
         WrkMast wrkMast = wrkMastMapper.selectLocMove(slave.getId());
@@ -1326,7 +1346,14 @@
             SteProtocol steProtocol = steThread.getSteProtocol();
             if (steProtocol == null) { continue; }
             if (!steProtocol.isIdle()) { continue; }
+            if (steProtocol.getRow() == 1) { continue; }
             String locNo = wrkMast.getWrkSts() < 10 ? wrkMast.getLocNo() : wrkMast.getSourceLocNo();
+            // 濡傛灉鍦ㄥ悓涓�涓簱浣嶇粍
+            if (Utils.getGroupRow(locNo, true).equals(Utils.getGroupRow(steProtocol.getRow().intValue(), true))
+                    && steProtocol.getBay().intValue() == Utils.getBay(locNo)
+                    && steProtocol.getLev().intValue() == Utils.getLev(locNo)) {
+                return steThread;
+            }
             LocMast locMast = locMastService.selectById(locNo);
             int lev = locMast.getLev1();
             int bay = locMast.getBay1();
@@ -1346,8 +1373,7 @@
     }
 
     /**
-     * 璁╁皬杞︿粠 杩滅偣 ====>> 寰呮満
-     *  绛夊緟鍫嗗灈鏈烘惉杩�
+     * 璁╁皬杞﹁璧拌嚦寰呮満浣�
      */
     public void letCarBeWaiting(WrkMast wrkMast, Integer steNo, String locNo) {
         // 鑾峰彇绌挎杞︿俊鎭�
@@ -1356,24 +1382,35 @@
         if (steProtocol == null) { return; }
         if (steProtocol.isIdle()) {
 
-            // 鍛戒护涓嬪彂鍖� --------------------------------------------------------------------------
-            SteCommand steCommand = new SteCommand();
-            steCommand.setSteNo(steNo); // 绌挎杞︾紪鍙�
-            steCommand.setTaskNo(wrkMast.getWrkNo()); // 宸ヤ綔鍙�
-            steCommand.setTaskMode(SteTaskModeType.findWaiting(steProtocol.getRow().intValue())); // 浠诲姟妯″紡:  鍘昏繎鐐� 绛夊緟鍫嗗灈鏈哄弶鍙�
-
-            steCommand.setRow(Utils.getGroupRow(steProtocol.getRow().intValue(), true).shortValue());
-            steCommand.setBay(steProtocol.getBay());
-            steCommand.setLev(steProtocol.getLev());
-
-            if (!MessageQueue.offer(SlaveType.Ste, steNo, new Task(2, steCommand))) {
-                log.error("绌挎杞﹀懡浠や笅鍙戝け璐ワ紝绌挎杞﹀彿={}锛屼换鍔℃暟鎹�={}", steNo, JSON.toJSON(steCommand));
-            } else {
+            // 濡傛灉澶勪簬寰呮満浣�
+            if (steProtocol.locaType.equals(SteLocaType.A_WAITING) || steProtocol.locaType.equals(SteLocaType.B_WAITING)) {
                 // 淇敼宸ヤ綔妗g姸鎬� 缁戝畾绌挎杞�
+                wrkMast.setWrkSts(3L);
                 wrkMast.setSteNo(steNo);
                 wrkMast.setModiTime(new Date());
                 if (wrkMastMapper.updateById(wrkMast) == 0) {
                     log.error("淇敼宸ヤ綔妗g姸鎬� 缁戝畾绌挎杞� 澶辫触锛侊紒锛屽伐浣滃彿={}", wrkMast.getWrkNo());
+                }
+            } else {
+                // 鍛戒护涓嬪彂鍖� --------------------------------------------------------------------------
+                SteCommand steCommand = new SteCommand();
+                steCommand.setSteNo(steNo); // 绌挎杞︾紪鍙�
+                steCommand.setTaskNo(wrkMast.getWrkNo()); // 宸ヤ綔鍙�
+                steCommand.setTaskMode(SteTaskModeType.findWaiting(steProtocol.getRow().intValue())); // 浠诲姟妯″紡:  琛岃蛋鑷冲緟鏈轰綅
+
+                steCommand.setRow(Utils.getGroupRow(steProtocol.getRow().intValue(), true).shortValue());
+                steCommand.setBay(steProtocol.getBay());
+                steCommand.setLev(steProtocol.getLev());
+
+                if (!MessageQueue.offer(SlaveType.Ste, steNo, new Task(2, steCommand))) {
+                    log.error("绌挎杞﹀懡浠や笅鍙戝け璐ワ紝绌挎杞﹀彿={}锛屼换鍔℃暟鎹�={}", steNo, JSON.toJSON(steCommand));
+                } else {
+                    // 淇敼宸ヤ綔妗g姸鎬� 缁戝畾绌挎杞�
+                    wrkMast.setSteNo(steNo);
+                    wrkMast.setModiTime(new Date());
+                    if (wrkMastMapper.updateById(wrkMast) == 0) {
+                        log.error("淇敼宸ヤ綔妗g姸鎬� 缁戝畾绌挎杞� 澶辫触锛侊紒锛屽伐浣滃彿={}", wrkMast.getWrkNo());
+                    }
                 }
             }
         }
@@ -1842,6 +1879,9 @@
                             Date now = new Date();
                             wrkMast.setCrnEndTime(now);
                             wrkMast.setModiTime(now);
+                            LocMast locMast = locMastService.selectById(wrkMast.getSourceLocNo());
+                            Integer outCrnNo = locMastService.getOutCrnNo(locMast);
+                            wrkMast.setCrnNo(outCrnNo);
                             // 淇敼鎴愬姛鍚庡浣嶅爢鍨涙満
                             if (wrkMastMapper.updateById(wrkMast) > 0) {
                                 // 鍫嗗灈鏈哄浣�
@@ -2523,7 +2563,7 @@
                             SteChargeType first = SteChargeType.FIRST;
                             locNo = first.locNo;
                             if (basSteService.hasCarOfLocNo(locNo) == null
-                                && wrkChargeService.selectWorkingOfCharge(first.ssbm) != null) {
+                                && wrkChargeService.selectWorkingOfCharge(first.ssbm) == null) {
                                 steCharge = first;
                                 break;
                             }
@@ -2532,7 +2572,7 @@
                             SteChargeType second = SteChargeType.SECOND;
                             locNo = second.locNo;
                             if (basSteService.hasCarOfLocNo(locNo) == null
-                                && wrkChargeService.selectWorkingOfCharge(second.ssbm) != null) {
+                                && wrkChargeService.selectWorkingOfCharge(second.ssbm) == null) {
                                 steCharge = second;
                                 break;
                             }
@@ -2541,7 +2581,7 @@
                             SteChargeType third = SteChargeType.THIRD;
                             locNo = third.locNo;
                             if (basSteService.hasCarOfLocNo(locNo) == null
-                                && wrkChargeService.selectWorkingOfCharge(third.ssbm) != null) {
+                                && wrkChargeService.selectWorkingOfCharge(third.ssbm) == null) {
                                 steCharge = third;
                                 break;
                             }
@@ -2567,6 +2607,40 @@
                     if (!wrkChargeService.insert(wrkCharge)) {
                         log.error("淇濆瓨{}鍙风┛姊溅鍏呯數浠诲姟澶辫触!!!", ste.getId());
                         continue;
+                    }
+
+                    // 灏忚溅澶勪簬閫氶亾
+                    List<String> channel = slaveProperties.getChannel();
+                    for (String channelLocNo : channel) {
+                        if (steProtocol.getRow().intValue() == Utils.getRow(channelLocNo)
+                                && steProtocol.getBay().intValue() == Utils.getBay(channelLocNo)
+                                && steProtocol.getLev().intValue() == Utils.getLev(channelLocNo)) {
+                            Integer otherSte = existOtherSte(channelLocNo, wrkCharge.getSteNo());
+                            if (null != otherSte) {
+                                log.warn("{}鍙峰皬杞﹀厖鐢甸樆鏂紝鍘熷洜锛氶�氶亾瀛樺湪{}鍙风┛姊溅锛�", wrkCharge.getSteNo(), otherSte);
+                            } else {
+                                // 鍛戒护涓嬪彂鍖� --------------------------------------------------------------------------
+                                SteCommand steCommand = new SteCommand();
+                                steCommand.setSteNo(wrkCharge.getSteNo()); // 绌挎杞︾紪鍙�
+                                steCommand.setTaskNo(wrkCharge.getWrkNo()); // 宸ヤ綔鍙�
+                                steCommand.setTaskMode(SteTaskModeType.GO_ORIGIN);  // 鍘诲彸绔�
+
+                                steCommand.setRow(Utils.getGroupRow(steProtocol.getRow().intValue(), false).shortValue());
+                                steCommand.setBay(steProtocol.getBay());
+                                steCommand.setLev(steProtocol.getLev());
+                                if (!MessageQueue.offer(SlaveType.Ste, wrkCharge.getSteNo(), new Task(2, steCommand))) {
+                                    log.error("绌挎杞﹀懡浠や笅鍙戝け璐ワ紝绌挎杞﹀彿={}锛屼换鍔℃暟鎹�={}", wrkCharge.getSteNo(), JSON.toJSON(steCommand));
+                                } else {
+                                    // 淇敼宸ヤ綔妗g姸鎬� 21.鍑嗗鍏呯數 ===> 25.灏忚溅璧拌
+                                    wrkCharge.setWrkSts(25L);
+                                    Date now = new Date();
+                                    wrkCharge.setModiTime(now);
+                                    if (!wrkChargeService.updateById(wrkCharge)) {
+                                        log.error("淇敼鍏呯數浠诲姟鐘舵�� 21.鍑嗗鍏呯數 ===> 25.灏忚溅璧拌 澶辫触锛侊紒锛屽伐浣滃彿={}", wrkCharge.getWrkNo());
+                                    }
+                                }
+                            }
+                        }
                     }
 
                     // 澶勪簬鍏呯數搴撲綅缁�
@@ -2777,22 +2851,31 @@
                 if (Cools.isEmpty(steProtocol, basSte)) {
                     continue;
                 }
-                // 1鍙峰厖鐢垫々
-                if (value.equals(SteChargeType.FIRST) && devpThread.charge0) {
+                if (steProtocol.getCharge() < 99) {
                     continue;
                 }
-                // 2鍙峰厖鐢垫々
-                if (value.equals(SteChargeType.SECOND) && devpThread.charge1) {
+                if (steProtocol.getMode() == 0) {
                     continue;
                 }
-                // 3鍙峰厖鐢垫々
-                if (value.equals(SteChargeType.THIRD) && devpThread.charge2) {
+                if (!steProtocol.getStatusType().equals(SteStatusType.IDLE)) {
                     continue;
                 }
-                // 灏忚溅鏄惁澶勪簬鍏呯數鐘舵��
-                if (steProtocol.getChargeStatus() == 1) {
-                    continue;
-                }
+//                // 1鍙峰厖鐢垫々
+//                if (value.equals(SteChargeType.FIRST) && devpThread.charge0) {
+//                    continue;
+//                }
+//                // 2鍙峰厖鐢垫々
+//                if (value.equals(SteChargeType.SECOND) && devpThread.charge1) {
+//                    continue;
+//                }
+//                // 3鍙峰厖鐢垫々
+//                if (value.equals(SteChargeType.THIRD) && devpThread.charge2) {
+//                    continue;
+//                }
+//                // 灏忚溅鏄惁澶勪簬鍏呯數鐘舵��
+//                if (steProtocol.getChargeStatus() == 1) {
+//                    continue;
+//                }
                 // case 1 : 鑷姩鍏呯數寮�   棣堢數      脳
                 // case 2 : 鑷姩鍏呯數寮�   婊$數      鉁�
                 // case 3 : 鑷姩鍏呯數鍏�   棣堢數      鉁�
@@ -2862,7 +2945,7 @@
                         crnCommand.setTaskNo(wrkCharge.getWrkNo().shortValue()); // 宸ヤ綔鍙�
                         crnCommand.setAckFinish((short) 0);  // 浠诲姟瀹屾垚纭浣�
                         crnCommand.setTaskMode(CrnTaskModeType.STE_MOVE); // 浠诲姟妯″紡:  搴撲綅绉昏浆
-                        crnCommand.setSourcePosX(Utils.getGroupRow(steProtocol.getRow().intValue(), true).shortValue());     // 婧愬簱浣嶆帓
+                        crnCommand.setSourcePosX(steProtocol.getRow());     // 婧愬簱浣嶆帓
                         crnCommand.setSourcePosY(steProtocol.getBay());     // 婧愬簱浣嶅垪
                         crnCommand.setSourcePosZ(steProtocol.getLev());     // 婧愬簱浣嶅眰
                         crnCommand.setDestinationPosX(Utils.getGroupRow(channelLoc.getLocNo(), false).shortValue());     // 鐩爣搴撲綅鎺�

--
Gitblit v1.9.1