From 76f2a20dc351d9966c70d4873eb2ff30bf1a0b18 Mon Sep 17 00:00:00 2001
From: tqs <56479841@qq.com>
Date: 星期三, 15 三月 2023 13:18:03 +0800
Subject: [PATCH] #

---
 src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java |  220 +++++++++++++++++++++++++++++++-----------------------
 1 files changed, 125 insertions(+), 95 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 36f2230..9f043ee 100644
--- a/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
@@ -689,12 +689,45 @@
 
     /**
      * 鍏ュ簱  ===>>  鍫嗗灈鏈虹珯鍒板簱浣�
-     * 鏍规嵁浼樺厛绾э紝鍏ュ簱鏃堕棿杩涜鎺掑簭鍏ュ簱
+     * 鏍规嵁鍏ュ簱鏃堕棿杩涜鎺掑簭鍏ュ簱,鍚屼竴鍫嗗灈鏈哄厛鏌ヨ鎵�鏈夊伐浣滄。浠诲姟鍙凤紝鍐嶆牴鎹紭鍏堢骇銆佹椂闂存帓搴忥紝纭繚鍏堣繘鍏堝嚭
      */
     public synchronized void crnStnToLoc(CrnSlave slave, CrnProtocol crnProtocol) {
         String methodName = Thread.currentThread().getStackTrace()[1].getMethodName();
-        List<Integer> wrkMasts= new ArrayList<>();
+
+        //寰楀埌鍫嗗灈鏈哄叆搴撶珯宸ヤ綔浠诲姟LIST
+        List<Integer> wrkNos= new ArrayList<>();
         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();
+            }
+
+            WrkMast wrkMast1 = wrkMastMapper.selectPakInStep2(slave.getId(), staProtocol.getWorkNo().intValue(), crnStn.getStaNo());
+            wrkNos.add(wrkMast1.getWrkNo());
+        }
+
+        List<WrkMast> wrkMasts=wrkMastService.selectWaitPakIn(wrkNos);
+
+        for(WrkMast wrkMast : wrkMasts) {
+            CrnSlave.CrnStn crnStn = null;
+            for (CrnSlave.CrnStn crnStn1 : slave.getCrnInStn()){
+                if(crnStn1.getStaNo() == wrkMast.getStaNo()){
+                    crnStn = crnStn1;
+                    break;
+                } else {
+                    continue;
+                }
+            }
+            if(Cools.isEmpty(crnStn)){
+                continue;
+            }
+
+            boolean flag = false;
             // 鑾峰彇鍫嗗灈鏈哄叆搴撶珯淇℃伅
             DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, crnStn.getDevpPlcId());
             StaProtocol staProtocol = devpThread.getStation().get(crnStn.getStaNo());
@@ -709,107 +742,102 @@
                 News.error(methodName + ":鍏ュ簱 ===>> 鍫嗗灈鏈虹珯鐐瑰湪鏁版嵁搴撲笉瀛樺湪, 绔欑偣缂栧彿={}", crnStn.getStaNo());
                 continue;
             }
-            if (staProtocol.isAutoing() && staProtocol.isLoading() && staProtocol.getWorkNo() >= 9990  && staProtocol.isInEnable()
+            if (staProtocol.isAutoing() && staProtocol.isLoading() && staProtocol.getWorkNo() > 0 && staProtocol.isInEnable()
                     && staDetl.getCanining() != null && staDetl.getCanining().equals("Y")) {
-                // 鑾峰彇宸ヤ綔鐘舵�佷负2锛堣澶囦笂璧帮級鐨勫叆搴撳伐浣滄。
-                WrkMast wrkMast = wrkMastMapper.selectPakInStep2(slave.getId(), staProtocol.getWorkNo().intValue(), crnStn.getStaNo());
-                if (null == wrkMast) {
-//                News.error("鏌ヨ鏃犲緟鍏ュ簱鏁版嵁--wrk_sts=2, 宸ヤ綔鍙�={}", staProtocol.getWorkNo());
-                    continue;
-                }
-                wrkMasts.add(wrkMast.getWrkNo());
+                flag = true;
             }
-        }
-                WrkMast wrkMast=wrkMastService.selectTop1(wrkMasts);
-
+            if (!flag) {
+                continue;
+            }
 
             // 鑾峰彇搴撲綅淇℃伅
             LocMast locMast = locMastService.selectById(wrkMast.getLocNo());
-            if (locMast != null) {
-                if (locMast.getLocSts().equals("S") && locMast.getLocSts().equals("Q")) {
-                    // 鍫嗗灈鏈烘帶鍒惰繃婊�
-                    if (crnProtocol.getStatusType().equals(CrnStatusType.IDLE) || crnProtocol.getTaskNo() == 0) {
-                        // 宸茬粡瀛樺湪鍚婅溅鎵ц浠诲姟鏃讹紝鍒欒繃婊�
-                        if (wrkMastMapper.selectWorking(slave.getId()) == null) {
-//                            // 鍙屾繁搴撲綅涓旀祬搴撲綅鏈夎揣锛屽垯闇�鍏堝娴呭簱浣嶈繘琛屽簱浣嶇Щ杞�
-                   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) {
-////                                News.error(methodName + ":{}搴撲綅寮傚父锛屾湭妫�绱㈠埌鐩稿簲宸ヤ綔妗o紒", shallowLocNo);
-////                            } else {
-////                                waitWrkMast.setIoPri(15D);
-////                                waitWrkMast.setModiTime(new Date());
-////                                if (wrkMastMapper.updateById(waitWrkMast) == 0) {
-////                                    News.error(methodName + ":璋冩暣宸ヤ綔妗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(crnStn1.getRow().shortValue());     // 婧愬簱浣嶆帓
-//                            crnCommand.setSourcePosY(crnStn1.getBay().shortValue());     // 婧愬簱浣嶅垪
-//                            crnCommand.setSourcePosZ(crnStn1.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))) {
-//                                News.error(methodName + ":鍫嗗灈鏈哄懡浠や笅鍙戝け璐ワ紝鍫嗗灈鏈哄彿={}锛屼换鍔℃暟鎹�={}", 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) {
-//                                    News.error(methodName + ":淇敼宸ヤ綔妗g姸鎬� 2.璁惧涓婅蛋 => 3.鍚婅溅鍏ュ簱涓� 澶辫触锛侊紒锛屽伐浣滃彿={}", wrkMast.getWrkNo());
-//                                }
-                            }
+            if (locMast == null) {
+                News.error(methodName + ":鏌ヨ搴撳瓨鏃犳暟鎹�--搴撲綅鍙穥}", wrkMast.getLocNo());
+                continue;
+            }
+            if (!locMast.getLocSts().equals("S") && !locMast.getLocSts().equals("Q")) {
+                News.error(methodName + ":鍏ュ簱鎿嶄綔搴撲綅鐘舵�佷笉绗﹀悎--鐘舵��, 搴撲綅鍙�={}锛屽簱浣嶇姸鎬�={}", 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) {
+                        News.error(methodName + ":{}搴撲綅寮傚父锛屾湭妫�绱㈠埌鐩稿簲宸ヤ綔妗o紒", shallowLocNo);
+                    } else {
+                        waitWrkMast.setIoPri(15D);
+                        waitWrkMast.setModiTime(new Date());
+                        if (wrkMastMapper.updateById(waitWrkMast) == 0) {
+                            News.error(methodName + ":璋冩暣宸ヤ綔妗d紭鍏堢骇澶辫触锛佸伐浣滃彿={}", waitWrkMast.getWrkNo());
                         }
+                        continue;
                     }
-                }else News.error(methodName + ":鍏ュ簱鎿嶄綔搴撲綅鐘舵�佷笉绗﹀悎--鐘舵��, 搴撲綅鍙�={}锛屽簱浣嶇姸鎬�={}", wrkMast.getLocNo(), locMast.getLocSts());
-            }else News.error(methodName + ":鏌ヨ搴撳瓨鏃犳暟鎹�--搴撲綅鍙穥}", wrkMast.getLocNo());
+
+                } 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))) {
+                News.error(methodName + ":鍫嗗灈鏈哄懡浠や笅鍙戝け璐ワ紝鍫嗗灈鏈哄彿={}锛屼换鍔℃暟鎹�={}", wrkMast.getCrnNo(), JSON.toJSON(crnCommand));
+            } else {
+
+                // 淇敼宸ヤ綔妗g姸鎬� 2.璁惧涓婅蛋 => 3.鍚婅溅鍏ュ簱涓�
+                Date now = new Date();
+                wrkMast.setWrkSts(3L);
+                wrkMast.setCrnStrTime(now);
+                wrkMast.setModiTime(now);
+                if (wrkMastMapper.updateById(wrkMast) == 0) {
+                    News.error(methodName + ":淇敼宸ヤ綔妗g姸鎬� 2.璁惧涓婅蛋 => 3.鍚婅溅鍏ュ簱涓� 澶辫触锛侊紒锛屽伐浣滃彿={}", wrkMast.getWrkNo());
+                }
+            }
+
         }
+
+    }
 
     /**
      * 鍏ュ簱  ===>>  鍫嗗灈鏈虹珯鍒板簱浣�
@@ -861,6 +889,8 @@
                 continue;
             }
         }
+
+
             if(!Cools.isEmpty(wrkMasts)){
             wrkMast=wrkMasts.get(i);
             // 鑾峰彇搴撲綅淇℃伅

--
Gitblit v1.9.1