From 736706fb6254b43b16b285e2f40880c21c41cd57 Mon Sep 17 00:00:00 2001
From: tqs <56479841@qq.com>
Date: 星期五, 02 十二月 2022 07:59:54 +0800
Subject: [PATCH] #

---
 src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java |  247 +++++++++++++++++++++++++++++++++++++++++++++----
 1 files changed, 227 insertions(+), 20 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 72d06fc..701cd6c 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.RgvProtocol;
 import com.zy.core.model.protocol.StaProtocol;
 import com.zy.core.properties.SlaveProperties;
 import com.zy.core.thread.BarcodeThread;
 import com.zy.core.thread.LedThread;
+import com.zy.core.thread.RgvThread;
 import com.zy.core.thread.SiemensDevpThread;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -46,10 +45,7 @@
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.transaction.interceptor.TransactionAspectSupport;
 
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.List;
-import java.util.Set;
+import java.util.*;
 import java.util.stream.Collectors;
 
 /**
@@ -80,6 +76,8 @@
     @Autowired
     private BasCrnpService basCrnpService;
     @Autowired
+    private BasRgvService basRgvService;
+    @Autowired
     private BasDevpService basDevpService;
     @Autowired
     private LocDetlService locDetlService;
@@ -106,6 +104,9 @@
                     continue;
                 }
                 String barcode = barcodeThread.getBarcode();
+
+                barcode = "80011105";
+
                 if (!Cools.isEmpty(barcode)) {
                     log.info("{}鍙锋潯鐮佹壂鎻忓櫒妫�娴嬫潯鐮佷俊鎭細{}", inSta.getBarcode(), barcode);
                     if ("NG".endsWith(barcode) || "NoRead".equals(barcode)) {
@@ -116,6 +117,7 @@
                 }
 
                 // 鑾峰彇鍏ュ簱绔欎俊鎭�
+//                SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, devp.getId());
                 SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, devp.getId());
                 StaProtocol staProtocol = devpThread.getStation().get(inSta.getStaNo());
                 if (staProtocol == null) {
@@ -126,14 +128,16 @@
 
                 // 鍏ュ嚭搴撴ā寮忓垽鏂�
 //                if ( inSta.getStaNo()==203 && devpThread.ioModeOf2F != IoModeType.PAKIN_MODE) { continue; }
-                if (inSta.getStaNo() == 203 && devpThread.ioModeOf2F == IoModeType.PAKOUT_MODE) {
-                    continue;
-                }
+//                if (inSta.getStaNo() == 203 && devpThread.ioModeOf2F == IoModeType.PAKOUT_MODE) {
+//                    continue;
+//                }
 
                 // 鍒ゆ柇鏄惁婊¤冻鍏ュ簱鏉′欢
-                if (staProtocol.isAutoing() && staProtocol.isLoading()
+                if (staProtocol.isAutoing()
+                        && staProtocol.isLoading()
                         && staProtocol.isInEnable()
-                        && !staProtocol.isEmptyMk() && (staProtocol.getWorkNo() == 0 || staProtocol.getWorkNo() > 9990)
+                        && !staProtocol.isEmptyMk()
+                        && (staProtocol.getWorkNo() == 0 || staProtocol.getWorkNo() > 9990)
                         && staProtocol.isPakMk()) {// && !Cools.isEmpty(barcode)) {
 
 //                    if(Cools.isEmpty(barcode) || "NG".endsWith(barcode) || "NoRead".equals(barcode)) {
@@ -526,14 +530,12 @@
                 continue;
             }
 
-//            //鍫嗗灈鏈哄洖鍘熺偣浠诲姟涓�
-//            if(crnThread.isBackHpFlag()){
-//                continue;
-//            }
-
             // 鍙湁褰撳爢鍨涙満绌洪棽 骞朵笖 鏃犱换鍔℃椂鎵嶇户缁墽琛�
-            if (crnProtocol.getStatusType() == CrnStatusType.IDLE && crnProtocol.getTaskNo() == 0 && crnProtocol.getModeType() == CrnModeType.AUTO
-                    && crnProtocol.getLoaded() == 0 && crnProtocol.getForkPos() == 0) {
+            if (crnProtocol.getStatusType() == CrnStatusType.IDLE
+                    && crnProtocol.getTaskNo() == 0
+                    && crnProtocol.getModeType() == CrnModeType.AUTO
+                    && crnProtocol.getLoaded() == 0
+                    && crnProtocol.getForkPos() == 0) {
                 // 濡傛灉鏈�杩戜竴娆℃槸鍏ュ簱妯″紡
                 if (crnProtocol.getLastIo().equals("I")) {
                     if (basCrnp.getInEnable().equals("Y")) {
@@ -559,6 +561,53 @@
             this.locToLoc(crn, crnProtocol);
 //            this.crnRebackHp(crnProtocol, crnThread);
 
+        }
+    }
+
+    /**
+     * 鍏ュ嚭搴�  ===>>  RGV鍏ュ嚭搴撲綔涓氫笅鍙�
+     */
+    public synchronized void rgvIoExecute() {
+        for (RgvSlave rgv : slaveProperties.getRgv()) {
+            // 鑾峰彇RGV淇℃伅
+            RgvThread rgvThread = (RgvThread) SlaveConnection.get(SlaveType.Rgv, rgv.getId());
+            RgvProtocol rgvProtocol = rgvThread.getRgvProtocol();
+            if (rgvProtocol == null) {
+                continue;
+            }
+            BasRgv basRgv = basRgvService.selectById(rgv.getId());
+            if (basRgv == null) {
+                log.error("{}鍙稲GV灏氭湭鍦ㄦ暟鎹簱杩涜缁存姢锛�", rgv.getId());
+                continue;
+            }
+
+            // 鍙湁褰揜GV绌洪棽銆佽嚜鍔�, 骞朵笖鏃犱换鍔°�佹棤鐗╂椂鎵嶇户缁墽琛�
+            if (rgvProtocol.getStatusType() == RgvStatusType.IDLE
+                    && rgvProtocol.getModeType() == RgvModeType.AUTO
+                    && rgvProtocol.getTaskNo1() == 0 && rgvProtocol.getTaskNo2() == 0
+                    && rgvProtocol.getLoaded1() == 0 && rgvProtocol.getLoaded2() == 0
+                    ) {
+                // 濡傛灉鏈�杩戜竴娆℃槸鍏ュ簱妯″紡
+                if (rgvProtocol.getLastIo().equals("I")) {
+                    if (basRgv.getInEnable().equals("Y")) {
+//                        this.rgvInStnToLoc(rgv, rgvProtocol); //  鍏ュ簱
+                        rgvProtocol.setLastIo("O");
+                    } else if (basRgv.getOutEnable().equals("Y")) {
+//                        this.locToCrnStn(rgv, crnProtocol); //  鍑哄簱
+                        rgvProtocol.setLastIo("I");
+                    }
+                }
+                // 濡傛灉鏈�杩戜竴娆℃槸鍑哄簱妯″紡
+                else if (rgvProtocol.getLastIo().equals("O")) {
+                    if (basRgv.getOutEnable().equals("Y")) {
+//                        this.locToCrnStn(rgv, crnProtocol); //  鍑哄簱
+                        rgvProtocol.setLastIo("I");
+                    } else if (basRgv.getInEnable().equals("Y")) {
+//                        this.rgvInStnToLoc(rgv, rgvProtocol); //  鍏ュ簱
+                        rgvProtocol.setLastIo("O");
+                    }
+                }
+            }
         }
     }
 
@@ -1006,6 +1055,164 @@
 //    }
 
     /**
+     * 鍏ュ簱  ===>>  RGV鍏ュ簱绔欏埌绔�
+     */
+    public synchronized void rgvInStn(RgvSlave slave, RgvProtocol rgvProtocol) {
+        // 鑾峰彇宸ヤ綔鐘舵�佷负2锛堣澶囦笂璧帮級,涓旇揣鐗╁湪RGV鍏ュ簱鎺ラ┏绔欑殑鍏ュ簱宸ヤ綔妗�,鏌ユ壘鏈�澶�2绗�
+        List<Integer> staNos = new ArrayList<>();
+        for (RgvSlave.RgvStn rgvStn : slave.getRgvInStn()) {
+            staNos.add(rgvStn.getStaNo());
+        }
+        List<WrkMast> wrkMasts1 = new ArrayList<>();
+        List<WrkMast> wrkMasts = wrkMastMapper.selectRgvInStep1(slave.getId(), staNos);
+        for(WrkMast wrkMast : wrkMasts){
+            Integer plcId = 0;
+            for (RgvSlave.RgvStn rgvStn : slave.getRgvInStn()) {
+                if(rgvStn.getStaNo() == wrkMast.getRgvSstaNo()){
+                    plcId = rgvStn.getDevpPlcId();
+                    break;
+                }
+            }
+
+            DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, plcId);
+            StaProtocol staProtocol = devpThread.getStation().get(wrkMast.getRgvSstaNo());
+            if (staProtocol == null) {
+                continue;
+            } else {
+                staProtocol = staProtocol.clone();
+            }
+        }
+
+//        WrkMast wrkMast = wrkMastMapper.selectPakInStep2(slave.getId(), staProtocol.getWorkNo().intValue(), crnStn.getStaNo());
+//        for (CrnSlave.CrnStn crnStn : slave.getCrnInStn()) {
+//            boolean flag = false;
+//            // 鑾峰彇鍫嗗灈鏈哄叆搴撶珯淇℃伅
+//            DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, crnStn.getDevpPlcId());
+//            StaProtocol staProtocol = devpThread.getStation().get(crnStn.getStaNo());
+//            if (staProtocol == null) {
+//                continue;
+//            } else {
+//                staProtocol = staProtocol.clone();
+//            }
+//            // 鏌ヨ绔欑偣璇︾粏淇℃伅
+//            BasDevp staDetl = basDevpService.selectById(crnStn.getStaNo());
+//            if (staDetl == null) {
+//                log.error("鍏ュ簱 ===>> 鍫嗗灈鏈虹珯鐐瑰湪鏁版嵁搴撲笉瀛樺湪, 绔欑偣缂栧彿={}", crnStn.getStaNo());
+//                continue;
+//            }
+//            if (staProtocol.isAutoing() && staProtocol.isLoading() && staProtocol.getWorkNo() > 0 && staProtocol.isInEnable()
+//                    && staDetl.getCanining() != null && staDetl.getCanining().equals("Y")) {
+//                flag = true;
+//            }
+//            if (!flag) {
+//                continue;
+//            }
+//            // 鑾峰彇宸ヤ綔鐘舵�佷负2锛堣澶囦笂璧帮級鐨勫叆搴撳伐浣滄。
+//            WrkMast wrkMast = wrkMastMapper.selectPakInStep2(slave.getId(), staProtocol.getWorkNo().intValue(), crnStn.getStaNo());
+//            if (null == wrkMast) {
+////                log.error("鏌ヨ鏃犲緟鍏ュ簱鏁版嵁--wrk_sts=2, 宸ヤ綔鍙�={}", staProtocol.getWorkNo());
+//                continue;
+//            }
+//            // 鑾峰彇搴撲綅淇℃伅
+//            LocMast locMast = locMastService.selectById(wrkMast.getLocNo());
+//            if (locMast == null) {
+//                log.error("鏌ヨ搴撳瓨鏃犳暟鎹�--搴撲綅鍙穥}", wrkMast.getLocNo());
+//                continue;
+//            }
+//            if (!locMast.getLocSts().equals("S") && !locMast.getLocSts().equals("Q")) {
+//                log.error("鍏ュ簱鎿嶄綔搴撲綅鐘舵�佷笉绗﹀悎--鐘舵��, 搴撲綅鍙�={}锛屽簱浣嶇姸鎬�={}", wrkMast.getLocNo(), locMast.getLocSts());
+//                continue;
+//            }
+//
+//            // 鍫嗗灈鏈烘帶鍒惰繃婊�
+//            if (!crnProtocol.getStatusType().equals(CrnStatusType.IDLE) || crnProtocol.getTaskNo() != 0) {
+//                continue;
+//            }
+//
+//            // 宸茬粡瀛樺湪鍚婅溅鎵ц浠诲姟鏃讹紝鍒欒繃婊�
+//            if (wrkMastMapper.selectWorking(slave.getId()) != null) {
+//                continue;
+//            }
+//
+//            // 鍙屾繁搴撲綅涓旀祬搴撲綅鏈夎揣锛屽垯闇�鍏堝娴呭簱浣嶈繘琛屽簱浣嶇Щ杞�
+//            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);
+//                        // 鐢熸垚宸ヤ綔妗�,灏嗘祬搴撲綅绉昏浆鍒版柊鐨勫簱浣嶄腑
+//                        moveLocForDeepLoc(slave, shallowLoc);
+//                        // 鐢熸垚宸ヤ綔妗c�佹敼鍙樻祬搴撲綅鐨勬簮搴�/鐩爣搴� 搴撲綅鐘舵�併�佷笅鍙戝爢鍨涙満鍛戒护锛堢珛椹墽琛�)
+////                        moveLocForDeepLocPakin(slave, shallowLoc, wrkMast);
+//                    }
+//                    continue;
+//                } else if (shallowLoc.getLocSts().equals("Q")) {
+//                    WrkMast waitWrkMast = wrkMastMapper.selectByLocNo(shallowLocNo);
+//                    if (null != waitWrkMast && waitWrkMast.getWrkSts() == 4) {
+//                        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 {
+//
+////                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);
+//                wrkMast.setCrnStrTime(now);
+//                wrkMast.setModiTime(now);
+//                if (wrkMastMapper.updateById(wrkMast) == 0) {
+//                    log.error("淇敼宸ヤ綔妗g姸鎬� 2.璁惧涓婅蛋 => 3.鍚婅溅鍏ュ簱涓� 澶辫触锛侊紒锛屽伐浣滃彿={}", wrkMast.getWrkNo());
+//                }
+//            }
+//        }
+    }
+
+    /**
      * 搴撲綅绉昏浆
      */
     public void locToLoc(CrnSlave slave, CrnProtocol crnProtocol) {

--
Gitblit v1.9.1