From 7f8a8351ecb3634f3decb58057daf24e59dd8d49 Mon Sep 17 00:00:00 2001
From: czkh <czkh@163.com>
Date: 星期二, 18 十一月 2025 13:28:35 +0800
Subject: [PATCH] 修复解决双工位堆垛机移库任务下发后瞬间完成问题

---
 src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java |   96 ++++++++++++++++++++++++++++++++++++++----------
 1 files changed, 76 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 eaeb953..6cb4231 100644
--- a/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
@@ -24,6 +24,7 @@
 import com.zy.common.utils.News;
 import com.zy.core.CrnThread;
 import com.zy.core.DevpThread;
+import com.zy.core.ThreadHandler;
 import com.zy.core.cache.MessageQueue;
 import com.zy.core.cache.SlaveConnection;
 import com.zy.core.enums.*;
@@ -59,7 +60,6 @@
  */
 @Slf4j
 @Service("mainService")
-@Transactional
 public class MainServiceImpl {
 
     public static final long COMMAND_TIMEOUT = 5 * 1000;
@@ -453,9 +453,11 @@
                     WrkMast wrkMast = wrkMastMapper.selectPickStep(barcode);
                     if (wrkMast == null) {
                         // 鏃犳嫞鏂欐暟鎹�
+                        log.info("鏃犳嫞鏂欐暟鎹�,鎵樼洏鐮侊細{}",barcode);
                         continue;
                     }
                     if ((wrkMast.getIoType() != 103 && wrkMast.getIoType() != 104 && wrkMast.getIoType() != 107) || Cools.isEmpty(wrkMast.getStaNo()) || Cools.isEmpty(wrkMast.getSourceStaNo())) {
+                        log.info("宸ヤ綔妗e叆鍑哄簱绫诲瀷涓嶇鍚�,鍏ュ嚭搴撶被鍨嬶細{},宸ヤ綔妗g洰鏍囩珯{}锛屽伐浣滄。婧愮珯{}",wrkMast.getIoType(),wrkMast.getStaNo(),wrkMast.getSourceStaNo());
                         continue;
                     }
                     // 鑾峰彇鐩爣绔�
@@ -736,6 +738,12 @@
                     if (crnProtocol.modeType == CrnModeType.AUTO && crnProtocol.getTaskNo().equals(wrkMast.getWrkNo().shortValue()) && crnProtocol.statusType == CrnStatusType.WAITING && crnProtocol.forkPosType == CrnForkPosType.HOME) {
                         log.info("鍫嗗灈鏈哄嚭搴撳畬鎴� - 寮�濮嬫墽琛�");
 
+                        Date date = new Date();
+                        long diffInMillis = date.getTime() - wrkMast.getCrnStrTime().getTime();
+                        if (!(diffInMillis >= 30000)){
+                            continue;
+                        }
+
                         // 鍛戒护涓嬪彂鍖� --------------------------------------------------------------------------
 
                         // 涓嬪彂绔欑偣淇℃伅
@@ -834,6 +842,9 @@
     public synchronized void crnIoExecute(Integer mark) {
 
         for (CrnSlave crn : slaveProperties.getCrn()) {
+            //鑾峰彇鍫嗗灈鏈哄嚭搴撶珯鐨勪笅涓�绔欎俊鎭�
+            SiemensDevpThread devpThread =(SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, crn.getId());
+            StaProtocol staProtocol = devpThread.getStation().get(1002);
             // 鑾峰彇鍫嗗灈鏈轰俊鎭�
             CrnThread crnThread = (CrnThread) SlaveConnection.get(SlaveType.Crn, crn.getId());
             CrnProtocol crnProtocol = crnThread.getCrnProtocol();
@@ -852,10 +863,17 @@
 //            }
 
             // 鍙湁褰撳爢鍨涙満绌洪棽 骞朵笖 鏃犱换鍔℃椂鎵嶇户缁墽琛�
-            if (crnProtocol.getStatusType() == CrnStatusType.IDLE && crnProtocol.getModeType() == CrnModeType.AUTO && crnProtocol.getForkPos() == 0 && crnProtocol.getTaskNo() == 0 && crnProtocol.getTaskNoTwo() == 0) {
+            if (
+                    crnProtocol.getStatusType() == CrnStatusType.IDLE
+                    && crnProtocol.getModeType() == CrnModeType.AUTO
+                    && crnProtocol.getForkPos() == 0
+                    && crnProtocol.getTaskNo() == 0
+                    && crnProtocol.getStatusTypeTwo() == CrnStatusType.IDLE
+                    && crnProtocol.getForkPosTwo() == 0
+                    && crnProtocol.getTaskNoTwo() == 0) {
                 News.warnNoLog("" + mark + " - 0" + " - 寮�濮嬫墽琛屽爢鍨涙満鍏ュ嚭搴撲綔涓氫笅鍙�");
                 if (crnProtocol.getLoaded() == 0 && crnProtocol.getLoadedTwo() == 0) {
-                    News.error("宸ヤ綅1鏃犵墿锛屽伐浣�2鏃犵墿");
+                    //News.error("宸ヤ綅1鏃犵墿锛屽伐浣�2鏃犵墿");
                     //鍫嗗灈鏈烘病鏈夌墿鏂�
                     // 濡傛灉鏈�杩戜竴娆℃槸鍏ュ簱妯″紡
                     if (crnProtocol.getLastIo().equals("I")) {
@@ -881,7 +899,7 @@
                     }
 
                 } else if (crnProtocol.getLoaded() == 1 && crnProtocol.getLoadedTwo() == 1) {
-                    News.error("宸ヤ綅1鏈夌墿锛屽伐浣�2鏈夌墿");
+                    //News.error("宸ヤ綅1鏈夌墿锛屽伐浣�2鏈夌墿");
                     // 鍫嗗灈鏈烘湁鐗╂枡
                     WrkMast wrkMast = wrkMastMapper.selectByPltType(crn.getId(), 1);
                     if (wrkMast != null) {
@@ -894,7 +912,7 @@
                         log.error("" + mark + " - 1" + " - 鏈夌墿鏂欐棤宸ヤ綔妗�  ===銆嬪紓甯�");
                     }
                 } else if (crnProtocol.getLoaded() == 1 && crnProtocol.getLoadedTwo() == 0) {
-                    News.error("宸ヤ綅1鏈夌墿锛屽伐浣�2鏃犵墿");
+                    //News.error("宸ヤ綅1鏈夌墿锛屽伐浣�2鏃犵墿");
                     // 鍫嗗灈鏈哄伐浣�1鏈夌墿鏂�
                     WrkMast wrkMast = wrkMastMapper.selectByPltType(crn.getId(), 1);
                     if (wrkMast != null) {
@@ -903,6 +921,10 @@
                         if (wrkMast.getIoType() >= 100) {
                             WrkMast wrkMast1 = wrkMastMapper.selectPakOutStep1(crn.getId(), wrkMast.getSourceStaNo());
                             if (wrkMast1 != null) {
+                                if (Integer.parseInt(wrkMast1.getSourceLocNo().substring(2,5)) == 1 || (staProtocol.isAutoing()&&staProtocol.isLoading())){
+                                    this.outPut(crn, crnProtocol, mark);
+                                    continue;
+                                }
                                 this.outTake(crn, crnProtocol, 2, mark);
                             } else {
                                 this.outPut(crn, crnProtocol, mark);
@@ -919,7 +941,7 @@
                         log.error("" + mark + " - 1" + " - 鏈夌墿鏂欐棤宸ヤ綔妗�  ===銆嬪紓甯�");
                     }
                 } else if (crnProtocol.getLoaded() == 0 && crnProtocol.getLoadedTwo() == 1) {
-                    News.error("宸ヤ綅1鏃犵墿锛屽伐浣�2鏈夌墿");
+                    //News.error("宸ヤ綅1鏃犵墿锛屽伐浣�2鏈夌墿");
                     // 鍫嗗灈鏈哄伐浣�2鏈夌墿鏂�
                     WrkMast wrkMast = wrkMastMapper.selectByPltType(crn.getId(), 2);
                     if (wrkMast != null) {
@@ -928,6 +950,10 @@
                         if (wrkMast.getIoType() >= 100) {
                             WrkMast wrkMast1 = wrkMastMapper.selectPakOutStep1(crn.getId(), wrkMast.getSourceStaNo());
                             if (wrkMast1 != null) {
+                                if (Integer.parseInt(wrkMast1.getSourceLocNo().substring(2,5)) == 29 || (staProtocol.isAutoing()&&staProtocol.isLoading())){
+                                    this.outPut(crn, crnProtocol, mark);
+                                    continue;
+                                }
                                 this.outTake(crn, crnProtocol, 1, mark);
                             } else {
                                 this.outPut(crn, crnProtocol, mark);
@@ -961,16 +987,17 @@
      * @return
      */
     private Integer getCrnStation(String locNo) {
-        String bay = locNo.substring(2, 5);
+        String bay = locNo.substring(2, 5);//0100203
         if (Integer.parseInt(bay) == 1) {
             return 1;
         } else if (Integer.parseInt(bay) == 29) {
             return 2;
         }
-        if (Integer.parseInt(locNo.substring(0, 2)) >= 14) {
-            return 1;
-        } else {
+//        if (Integer.parseInt(locNo.substring(0, 2)) >= 14) {
+        if (Integer.parseInt(bay) >= 14) {
             return 2;
+        } else {
+            return 1;
         }
     }
 
@@ -1189,6 +1216,8 @@
                 // 鑾峰彇鍫嗗灈鏈哄嚭搴撶珯淇℃伅
                 SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, crnStn.getDevpPlcId());
                 StaProtocol staProtocol = devpThread.getStation().get(crnStn.getStaNo());
+                //鍫嗗灈鏈哄嚭搴撶珯鐐圭殑涓嬩竴绔�
+                StaProtocol staProtocol1 = devpThread.getStation().get(1002);
                 if (staProtocol == null) {
                     News.infoNoLog("" + mark + " - 2" + " - 3" + " - 鍫嗗灈鏈哄嚭搴撶珯淇℃伅(staProtocol!=null缁х画鎵ц,鍚﹀垯寰幆缁堟)锛歴taProtocol=" + staProtocol);
                     break;
@@ -1204,7 +1233,7 @@
                     break;
                 }
                 // 鍒ゆ柇鍫嗗灈鏈哄嚭搴撶珯鐘舵��
-                if (staProtocol.isAutoing() && !staProtocol.isLoading() && staDetl.getCanouting() != null && staDetl.getCanouting().equals("Y") && staProtocol.getWorkNo() == 0 && staProtocol.isOutEnable()) {
+                if (staProtocol.isAutoing() && !staProtocol.isLoading() && staDetl.getCanouting() != null && staDetl.getCanouting().equals("Y") && staProtocol.getWorkNo() == 0 && staProtocol.isOutEnable()&&staProtocol1.isAutoing()&&!staProtocol1.isLoading()) {
                     // 鍛戒护涓嬪彂鍖� --------------------------------------------------------------------------
 
                     // 鍫嗗灈鏈烘帶鍒惰繃婊�
@@ -1983,11 +2012,6 @@
             return;
         }
 
-        // 鍫嗗灈鏈烘帶鍒惰繃婊�
-        if (!crnProtocol.getStatusType().equals(CrnStatusType.IDLE) || crnProtocol.getTaskNo() != 0) {
-            return;
-        }
-
         // 宸茬粡瀛樺湪鍚婅溅鎵ц浠诲姟鏃讹紝鍒欒繃婊�
         if (wrkMastMapper.selectWorking(slave.getId()) != null) {
             return;
@@ -2019,7 +2043,20 @@
             }
         }
 
-
+        if (crnStation == 0) {
+            return;
+        }else if(crnStation == 1) {
+            // 鍫嗗灈鏈烘帶鍒惰繃婊�
+            if (!crnProtocol.getStatusType().equals(CrnStatusType.IDLE) || crnProtocol.getTaskNo() != 0) {
+                return;
+            }
+        }else if(crnStation == 2) {
+            // 鍫嗗灈鏈烘帶鍒惰繃婊�
+            if (!crnProtocol.getStatusTypeTwo().equals(CrnStatusType.IDLE) || crnProtocol.getTaskNoTwo() != 0) {
+                return;
+            }
+        }else {
+            }
 
         News.warnNoLog("" + mark + " - 3" + " - 3" + " - 鍛戒护涓嬪彂 : 宸ヤ綔鍙�={},婧愭帓={},婧愬垪={},婧愬眰={},鐩爣鎺�={},鐩爣鍒�={},鐩爣灞�={}", wrkMast.getWrkNo().shortValue(), sourceSta.getRow1().shortValue(), sourceSta.getBay1().shortValue(), sourceSta.getLev1().shortValue(), sta.getRow1().shortValue(), sta.getBay1().shortValue(), sta.getLev1().shortValue());
 
@@ -2043,6 +2080,7 @@
             // 淇敼宸ヤ綔妗g姸鎬� 11.鐢熸垚鍑哄簱ID => 12.鍚婅溅鍑哄簱涓�
             Date now = new Date();
             wrkMast.setWrkSts(12L);
+            wrkMast.setPltType(crnStation);
             wrkMast.setCrnStrTime(now);
             wrkMast.setModiTime(now);
             if (wrkMastMapper.updateById(wrkMast) == 0) {
@@ -2069,15 +2107,30 @@
             }
             //  鐘舵�侊細绛夊緟纭 骞朵笖  浠诲姟瀹屾垚浣� = 1
             if (crnProtocol.statusType == CrnStatusType.WAITING && crnProtocol.getTaskNo() != 0) {
-                News.warnNoLog("" + mark + " - 0" + " - 寮�濮嬫墽琛屽宸ヤ綔妗g殑瀹屾垚鎿嶄綔锛屼换鍔″彿:" + crnProtocol.getTaskNo());
                 if (crnProtocol.getTaskNo() == 9999) {
                     crnThread.setResetFlag(true);
                     continue;
                 }
+
+                if ((System.currentTimeMillis() - crnProtocol.getLastCommandTime()) < 1000 * 6) {
+                    News.error("" + mark + " - 0" + " - 鍫嗗灈鏈烘寚浠ょ瓑寰呯‘璁ゅ畬鎴愯繃蹇紓甯革紝浠诲姟鍙�:" + crnProtocol.getTaskNo());
+                    continue;
+                }
+
+                News.warnNoLog("" + mark + " - 0" + " - 寮�濮嬫墽琛屽宸ヤ綔妗g殑瀹屾垚鎿嶄綔锛屼换鍔″彿:" + crnProtocol.getTaskNo());
+//                if (crnProtocol.getTaskNo() == 9999) {
+//                    crnThread.setResetFlag(true);
+//                    continue;
+//                }
                 // 鑾峰彇鍏ュ簱寰呯‘璁ゅ伐浣滄。
                 WrkMast wrkMast = wrkMastMapper.selectPakInStep3(crnProtocol.getTaskNo().intValue());
                 if (wrkMast == null) {
                     News.error("" + mark + " - 1" + " - 鍫嗗灈鏈哄浜庣瓑寰呯‘璁や笖浠诲姟瀹屾垚鐘舵�侊紝浣嗘湭鎵惧埌宸ヤ綔妗c�傚爢鍨涙満鍙�={}锛屽伐浣滃彿={}", crn.getId(), crnProtocol.getTaskNo());
+                    continue;
+                }
+                Date date = new Date();
+                long diffInMillis = date.getTime() - wrkMast.getCrnStrTime().getTime();
+                if (!(diffInMillis >= 30000)){
                     continue;
                 }
                 // 鍏ュ簱 + 搴撲綅杞Щ  ==> 4.鍏ュ簱瀹屾垚
@@ -3795,7 +3848,7 @@
             }
 
             if (crnProtocol.getStatusType() == CrnStatusType.IDLE && crnProtocol.getTaskNo() == 0 && crnProtocol.getTaskNoTwo() == 0 && crnProtocol.getModeType() == CrnModeType.AUTO && crnProtocol.getStatusTypeTwo()== CrnStatusType.IDLE) {
-                if (crnProtocol.getCrnNo() == 1 && crnProtocol.getBay() == 11 && crnProtocol.getLevel() == 1) {
+                if (crnProtocol.getBay() == 11 && crnProtocol.getLevel() == 1) {
                     continue;
                 }
                 Page<BasCrnOpt> basCrnOptPage = crnOptService.selectPage(new Page<>(1, 1), new EntityWrapper<BasCrnOpt>().eq("crn_no", crn.getId()).orderBy("send_time", false));
@@ -3852,7 +3905,10 @@
             // 鑾峰彇宸ヤ綔鐘舵�佷负11锛堢敓鎴愬嚭搴揑D锛夌殑鍑哄簱宸ヤ綔妗�
             List<WrkMast> wrkMasts = wrkMastMapper.selectPakOutStep107(slave.getId(), crnStn.getStaNo());
             for (WrkMast wrkMast : wrkMasts) {
-                if (wrkMast == null || wrkMast.getPltType() == 2) {
+//                if (wrkMast == null || wrkMast.getPltType() == 2) {
+//                    continue;
+//                }
+                if (wrkMast == null){
                     continue;
                 }
                 // 宸ヤ綔妗g姸鎬佸垽鏂�

--
Gitblit v1.9.1