From 462e0f4475665ec5596965bfb2a91b19badba446 Mon Sep 17 00:00:00 2001
From: luxiaotao1123 <t1341870251@63.com>
Date: 星期三, 09 三月 2022 14:40:45 +0800
Subject: [PATCH] #

---
 src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java |  260 +++++++++++++++++++++++++++++++++++++++++++++++----
 1 files changed, 239 insertions(+), 21 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 19460b6..ff465be 100644
--- a/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
@@ -26,17 +26,16 @@
 import com.zy.core.cache.MessageQueue;
 import com.zy.core.cache.SlaveConnection;
 import com.zy.core.enums.*;
-import com.zy.core.model.CrnSlave;
-import com.zy.core.model.DevpSlave;
-import com.zy.core.model.LedSlave;
-import com.zy.core.model.Task;
+import com.zy.core.model.*;
 import com.zy.core.model.command.CrnCommand;
 import com.zy.core.model.command.LedCommand;
 import com.zy.core.model.protocol.CrnProtocol;
 import com.zy.core.model.protocol.StaProtocol;
+import com.zy.core.model.protocol.SteProtocol;
 import com.zy.core.properties.SlaveProperties;
 import com.zy.core.thread.BarcodeThread;
 import com.zy.core.thread.LedThread;
+import com.zy.core.thread.SteThread;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
@@ -86,6 +85,8 @@
     private BasErrLogService basErrLogService;
     @Autowired
     private BasCrnErrorMapper basCrnErrorMapper;
+    @Autowired
+    private BasSteService basSteService;
     @Value("${wms.url}")
     private String wmsUrl;
 
@@ -298,11 +299,25 @@
     /**
      * 鎷f枡銆佸苟鏉裤�佺洏鐐瑰啀鍏ュ簱
      */
-    @Async
-    public void stnToCrnStnPick(){
+    public synchronized void stnToCrnStnPick(){
         for (DevpSlave devp : slaveProperties.getDevp()) {
             // 閬嶅巻鎷f枡鍏ュ簱鍙�
             for (DevpSlave.Sta pickSta : devp.getPickSta()) {
+                // 鑾峰彇鏉$爜鎵弿浠俊鎭�
+                BarcodeThread barcodeThread = (BarcodeThread) SlaveConnection.get(SlaveType.Barcode, pickSta.getBarcode());
+                if (barcodeThread == null) {
+                    continue;
+                }
+                String barcode = barcodeThread.getBarcode();
+                if(!Cools.isEmpty(barcode)) {
+                    log.info("{}鍙锋潯鐮佹壂鎻忓櫒妫�娴嬫潯鐮佷俊鎭細{}", pickSta.getBarcode(), barcode);
+                    if("NG".endsWith(barcode) || "NoRead".equals(barcode)) {
+                        continue;
+                    }
+                } else {
+                    continue;
+                }
+
                 // 鑾峰彇鎷f枡鍏ュ簱绔欎俊鎭�
                 DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, devp.getId());
                 StaProtocol staProtocol = devpThread.getStation().get(pickSta.getStaNo());
@@ -311,9 +326,8 @@
                 } else {
                     staProtocol = staProtocol.clone();
                 }
-                if (staProtocol.isAutoing() && staProtocol.isLoading() && staProtocol.isInEnable()
-                    && staProtocol.getWorkNo() > 0 && staProtocol.isPakMk()){
-                    WrkMast wrkMast = wrkMastMapper.selectPickStep(staProtocol.getWorkNo().intValue());
+                if (staProtocol.isAutoing() && staProtocol.isLoading() && staProtocol.isInEnable() && staProtocol.isPakMk()){
+                    WrkMast wrkMast = wrkMastMapper.selectPickStep(barcode);
                     if (wrkMast == null) {
                         // 鏃犳嫞鏂欐暟鎹�
                         continue;
@@ -549,10 +563,63 @@
             if (!crnProtocol.getStatusType().equals(CrnStatusType.IDLE) || crnProtocol.getTaskNo() != 0) {
                 continue;
             }
+            // todo锛氬皬杞﹁縼鍏ュ嚭
+            // 鏈�澶栧眰搴撲綅
+            if (locMastService.isOutMost(wrkMast.getLocNo())) {
+                // 鍒ゆ柇灏忚溅鏄惁鍦ㄦ渶澶栧眰搴撲綅锛屽鏋滄槸鍒欐惉璧帮紝濡傛灉涓嶆槸锛屽垯鐩存帴鍫嗗灈鏈哄叆搴�
+                Integer steNo = this.hasCarOfIdle(wrkMast.getLocNo());
+                if (steNo != null) {
+                    // 灏忚溅鎼蛋
+
+
+
+                } else {
+                    // 鍫嗗灈鏈哄叆搴�
+                }
+
+            // 闈炴渶澶栧眰搴撲綅
+            } else {
+                // 鍒ゆ柇灏忚溅鏄惁鍦ㄥ綋鍓嶇粍搴撲綅锛屽鏋滄槸鍒欏爢鍨涙満灏嗚揣鐗╂斁缃皬杞︿笂锛屽鏋滀笉鏄紝鍒欑洿鎺ュ爢鍨涙満鎼Щ灏忚溅鑷冲綋鍓嶇粍鐨勬渶澶栧眰搴撲綅
+
+            }
+
+
+            this.carMoveIn(wrkMast);
+
 
             // 宸茬粡瀛樺湪鍚婅溅鎵ц浠诲姟鏃讹紝鍒欒繃婊�
             if (wrkMastMapper.selectWorking(slave.getId()) != null) {
                 return;
+            }
+
+            // 鍙屾繁搴撲綅涓旀祬搴撲綅鏈夎揣锛屽垯闇�鍏堝娴呭簱浣嶈繘琛屽簱浣嶇Щ杞�
+            if (Utils.isDeepLoc(slaveProperties, wrkMast.getLocNo())) {
+                String shallowLocNo = Utils.getShallowLoc(slaveProperties, wrkMast.getLocNo());
+                LocMast shallowLoc = locMastService.selectById(shallowLocNo);
+                // O.绌哄簱浣嶃�丵.鎷f枡/鐩樼偣/骞舵澘鍐嶅叆搴撱�丼.鍏ュ簱棰勭害銆乆.绂佺敤 鐩存帴鎼紒
+                if (shallowLoc.getLocSts().equals("P") || shallowLoc.getLocSts().equals("R")) {
+                    WrkMast waitWrkMast = wrkMastMapper.selectByLocNo(shallowLocNo);
+                    if (null == waitWrkMast) {
+                        log.error("{}搴撲綅寮傚父锛屾湭妫�绱㈠埌鐩稿簲宸ヤ綔妗o紒", shallowLocNo);
+                    } else {
+                        waitWrkMast.setIoPri(15D);
+                        waitWrkMast.setModiTime(new Date());
+                        if (wrkMastMapper.updateById(waitWrkMast) == 0) {
+                            log.error("璋冩暣宸ヤ綔妗d紭鍏堢骇澶辫触锛佸伐浣滃彿={}", waitWrkMast.getWrkNo());
+                        }
+                    }
+                    continue;
+                } else if (shallowLoc.getLocSts().equals("F") || shallowLoc.getLocSts().equals("D")) {
+                    // 姝ゆ爣璁伴伩鍏嶅娆℃墽琛岀Щ搴撲换鍔�
+                    if (Cools.isEmpty(wrkMast.getUpdMk()) || "N".equals(wrkMast.getUpdMk())) {
+                        wrkMast.setUpdMk("Y");
+                        wrkMast.setIoPri(14D);
+                        wrkMastMapper.updateById(wrkMast);
+                        // 鐢熸垚宸ヤ綔妗c�佹敼鍙樻祬搴撲綅鐨勬簮搴�/鐩爣搴� 搴撲綅鐘舵�併�佷笅鍙戝爢鍨涙満鍛戒护锛堢珛椹墽琛�)
+                        moveLocForDeepLocPakin(slave, shallowLoc, wrkMast);
+                    }
+                    continue;
+                }
             }
 
             // 鍛戒护涓嬪彂鍖� --------------------------------------------------------------------------
@@ -571,18 +638,6 @@
                 log.error("鍫嗗灈鏈哄懡浠や笅鍙戝け璐ワ紝鍫嗗灈鏈哄彿={}锛屼换鍔℃暟鎹�={}", wrkMast.getCrnNo(), JSON.toJSON(crnCommand));
             } else {
 
-//                long startTime = System.currentTimeMillis();
-//                while ((System.currentTimeMillis() - startTime) < COMMAND_TIMEOUT) {
-//
-//                    if (true) {
-//                        break;
-//                    }
-//
-//                    try{
-//                        Thread.sleep(500);
-//                    }catch(Exception ignore){}
-//                }
-
                 // 淇敼宸ヤ綔妗g姸鎬� 2.璁惧涓婅蛋 => 3.鍚婅溅鍏ュ簱涓�
                 Date now = new Date();
                 wrkMast.setWrkSts(3L);
@@ -594,6 +649,65 @@
             }
         }
     }
+
+    /**
+     * 褰撳墠搴撲綅缁勬槸鍚﹀瓨鍦ㄧ┖闂插皬杞�
+     * @param locNo
+     * @return
+     */
+    public Integer hasCarOfIdle(String locNo) {
+        for (SteSlave ste : slaveProperties.getSte()) {
+            // 鑾峰彇鍫嗗灈鏈轰俊鎭�
+            SteThread steThread = (SteThread) SlaveConnection.get(SlaveType.Ste, ste.getId());
+            SteProtocol steProtocol = steThread.getSteProtocol();
+            if (steProtocol == null) { continue; }
+            if (steProtocol.getStatusType().equals(SteStatusType.IDLE)) {
+                if (steProtocol.getRow() == Utils.getRow(locNo) && steProtocol.getBay() == Utils.getBay(locNo) && steProtocol.getLev() == Utils.getLev(locNo)) {
+                    return steProtocol.getSteNo().intValue();
+                }
+            }
+        }
+        return null;
+    }
+
+    /**
+     * 鍏ュ簱  ===>>  鍫嗗灈鏈烘惉鍏ュ皬杞�
+     */
+    public void carMoveIn(WrkMast wrkMast) {
+        for (SteSlave ste : slaveProperties.getSte()) {
+            // 鑾峰彇鍫嗗灈鏈轰俊鎭�
+            SteThread steThread = (SteThread) SlaveConnection.get(SlaveType.Ste, ste.getId());
+            SteProtocol steProtocol = steThread.getSteProtocol();
+            if (steProtocol == null) { continue; }
+            if (steProtocol.getStatusType().equals(SteStatusType.IDLE)) {
+
+
+
+            }
+
+
+        }
+    }
+
+    /**
+     * 鍏ュ簱  ===>>  鍫嗗灈鏈烘惉鍑哄皬杞�
+     */
+    public void carMoveOut(WrkMast wrkMast) {
+        for (SteSlave ste : slaveProperties.getSte()) {
+            // 鑾峰彇鍫嗗灈鏈轰俊鎭�
+            SteThread steThread = (SteThread) SlaveConnection.get(SlaveType.Ste, ste.getId());
+            SteProtocol steProtocol = steThread.getSteProtocol();
+            if (steProtocol == null) { continue; }
+            if (steProtocol.getStatusType().equals(SteStatusType.IDLE)) {
+
+
+
+            }
+
+
+        }
+    }
+
 
     /**
      * 鍑哄簱  ===>>  搴撲綅鍒板爢鍨涙満绔�
@@ -1115,6 +1229,8 @@
                 if (!MessageQueue.offer(SlaveType.Led, led.getId(), new Task(1, commands))) {
                     log.error("{}鍙稬ED鍛戒护涓嬪彂澶辫触锛侊紒锛乕ip锛歿}] [port锛歿}]", led.getId(), led.getIp(), led.getPort());
                     continue;
+                } else {
+                    ledThread.setLedMk(false);
                 }
             }
 
@@ -1144,6 +1260,33 @@
      */
     @Async
     public void ledReset() {
+//        for (LedSlave led : slaveProperties.getLed()) {
+//            // 鑾峰彇杈撻�佺嚎plc绾跨▼
+//            DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, led.getDevpPlcId());
+//            // 鍛戒护闆嗗悎
+//            boolean reset = true;
+//            for (Integer staNo : led.getStaArr()) {
+//                // 鑾峰彇鍙夎溅绔欑偣
+//                StaProtocol staProtocol = devpThread.getStation().get(staNo);
+//                if (staProtocol == null) {
+//                    continue;
+//                } else {
+//                    staProtocol = staProtocol.clone();
+//                }
+//                if (staProtocol.getWorkNo() != 0) {
+//                    reset = false;
+//                    break;
+//                }
+//            }
+//            // 鑾峰彇led绾跨▼
+//            LedThread ledThread = (LedThread) SlaveConnection.get(SlaveType.Led, led.getDevpPlcId());
+//            // led鏄剧ず榛樿鍐呭
+//            if (reset) {
+//                if (!MessageQueue.offer(SlaveType.Led, led.getId(), new Task(2, new ArrayList<>()))) {
+//                    log.error("{}鍙稬ED鍛戒护涓嬪彂澶辫触锛侊紒锛乕ip锛歿}] [port锛歿}]", led.getId(), led.getIp(), led.getPort());
+//                }
+//            }
+//        }
         for (LedSlave led : slaveProperties.getLed()) {
             // 鑾峰彇杈撻�佺嚎plc绾跨▼
             DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, led.getDevpPlcId());
@@ -1175,6 +1318,81 @@
     }
 
     /**
+     * 鍥犲弻娣卞簱浣嶉樆濉烇紝瀵规祬搴撲綅杩涜绉昏浆锛堝叆搴撶増)
+     * tip锛氬悓姝�
+     */
+    @Transactional
+    public synchronized void moveLocForDeepLocPakin(CrnSlave crn, LocMast shallowLoc, WrkMast pakinWrkMast){
+        LocMast loc = locMastService.selectById(pakinWrkMast.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(15D);
+        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.setCtnNo("Y");  // 鍏ュ簱闃诲搴撲綅绉昏浆鏍囪
+        wrkMast.setAppeTime(new Date());
+        wrkMast.setModiTime(new Date());
+        int res = wrkMastMapper.insert(wrkMast);
+        if (res == 0) {
+            throw new CoolException("淇濆瓨宸ヤ綔妗eけ璐�");
+        }
+        // 宸ヤ綔妗f槑缁嗕繚瀛�
+        if (shallowLoc.getLocSts().equals("F")) {
+            List<LocDetl> locDetls = locDetlService.selectList(new EntityWrapper<LocDetl>().eq("loc_no", shallowLoc.getLocNo()));
+            for (LocDetl locDetl : locDetls) {
+                WrkDetl wrkDetl = new WrkDetl();
+                wrkDetl.setWrkNo(workNo);
+                wrkDetl.setIoTime(new Date());
+                wrkDetl.setQty(locDetl.getQty());
+                VersionUtils.setWrkDetl(wrkDetl, locDetl); // 鐗堟湰鎺у埗
+                wrkDetl.setAppeTime(new Date());
+                wrkDetl.setModiTime(new Date());
+                if (!wrkDetlService.insert(wrkDetl)) {
+                    throw new CoolException("淇濆瓨宸ヤ綔妗f槑缁嗗け璐�");
+                }
+            }
+        }
+        // 淇敼婧愬簱浣嶇姸鎬�
+        if (shallowLoc.getLocSts().equals("D") || shallowLoc.getLocSts().equals("F")) {
+            shallowLoc.setLocSts("S"); // S.鍏ュ簱棰勭害锛屽叆搴撻樆濉炲簱浣嶇Щ杞�
+            shallowLoc.setModiTime(new Date());
+            if (!locMastService.updateById(shallowLoc)){
+                throw new CoolException("鏇存柊婧愬簱浣嶇姸鎬佸け璐�");
+            }
+        } else {
+            throw new CoolException("婧愬簱浣嶅嚭搴撳け璐�");
+        }
+//        // 淇敼鐩爣搴撲綅鐘舵��
+//        if (loc.getLocSts().equals("O")) {
+//            loc.setLocSts("S"); // S.鍏ュ簱棰勭害
+//            loc.setModiTime(new Date());
+//            if (!locMastService.updateById(loc)) {
+//                throw new CoolException("鏇存柊鐩爣搴撲綅鐘舵�佸け璐�");
+//            }
+//        } else {
+//            throw new CoolException("绉昏浆澶辫触");
+//        }
+        wrkMast.setLocNo(shallowLoc.getLocNo());
+        if (wrkMastMapper.updateById(wrkMast) == 0) {
+            throw new CoolException("淇敼闃诲鍏ュ簱浠诲姟澶辫触");
+        }
+    }
+
+    /**
      * 鍥犲弻娣卞簱浣嶉樆濉烇紝瀵规祬搴撲綅杩涜绉昏浆锛堢珛鍗虫墽琛岀増)
      * tip锛氬悓姝�
      */

--
Gitblit v1.9.1