From 9f140c3a0ed4de378046781e185e97562da09d3a Mon Sep 17 00:00:00 2001
From: czkh <czkh@163.com>
Date: 星期三, 24 十二月 2025 12:06:14 +0800
Subject: [PATCH] #1

---
 src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java |  216 +++++++++++++++++++++++++++++++++--------------------
 1 files changed, 135 insertions(+), 81 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 23ee297..bbd566d 100644
--- a/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
@@ -47,6 +47,7 @@
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Propagation;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.transaction.interceptor.TransactionAspectSupport;
 
@@ -60,7 +61,6 @@
  */
 @Slf4j
 @Service("mainService")
-@Transactional
 public class MainServiceImpl {
 
     public static final long COMMAND_TIMEOUT = 5 * 1000;
@@ -101,6 +101,8 @@
     private BasRgvMapService basRgvMapService;
     @Autowired
     private BasCrnOptService crnOptService;
+    @Autowired
+    private MainServiceImpl mainService;
 
     @Value("${wms.url}")
     private String wmsUrl;
@@ -484,9 +486,10 @@
 
                     try {
                         // 淇濆瓨宸ヤ綔鏄庣粏妗e巻鍙叉。
+                        if (wrkMast.getIoType() != 104){
                         if (wrkMastMapper.saveWrkDetlLog(wrkMast.getWrkNo()) == 0) {
                             throw new CoolException("淇濆瓨宸ヤ綔鏄庣粏妗e巻鍙叉。澶辫触");
-                        }
+                        }}
                         // 淇濆瓨宸ヤ綔涓绘。鍘嗗彶妗�
                         if (wrkMastMapper.saveWrkMastLog(wrkMast.getWrkNo()) == 0) {
                             throw new CoolException("淇濆瓨宸ヤ綔涓绘。鍘嗗彶妗eけ璐�");
@@ -739,6 +742,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;
+                        }
+
                         // 鍛戒护涓嬪彂鍖� --------------------------------------------------------------------------
 
                         // 涓嬪彂绔欑偣淇℃伅
@@ -858,7 +867,14 @@
 //            }
 
             // 鍙湁褰撳爢鍨涙満绌洪棽 骞朵笖 鏃犱换鍔℃椂鎵嶇户缁墽琛�
-            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鏃犵墿");
@@ -1200,6 +1216,15 @@
                 if (!sourceSta.getLocSts().equals("R") && !sourceSta.getLocSts().equals("P")) {
                     News.error("" + mark + " - 2" + " - 2" + " - 鍑哄簱鎿嶄綔搴撲綅鐘舵�佷笉绗﹀悎--鐘舵��, 搴撲綅鍙�={}锛屽簱浣嶇姸鎬�={}", wrkMast.getLocNo(), sourceSta.getLocSts());
                     continue;
+                }
+                //鑾峰彇娴呭簱浣嶄俊鎭�
+                if (Utils.isDeepLoc(slaveProperties, wrkMast.getSourceLocNo())) {
+                    String shallowLoc1 = Utils.getShallowLoc(slaveProperties, wrkMast.getSourceLocNo());
+                    LocMast locMast = locMastService.selectById(shallowLoc1);
+                    if (shallowLoc1 != null && (locMast.getLocSts().equals("P") || locMast.getLocSts().equals("Q") || locMast.getLocSts().equals("R") || locMast.getLocSts().equals("S"))) {
+                        News.error(wrkMast.getSourceLocNo() + "瀵瑰簲鐨勬祬搴撲綅涓篜/Q/R/S锛屾殏鏃朵笉鍑烘繁搴撲綅");
+                        continue;
+                    }
                 }
                 // 鑾峰彇鍫嗗灈鏈哄嚭搴撶珯淇℃伅
                 SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, crnStn.getDevpPlcId());
@@ -2000,11 +2025,6 @@
             return;
         }
 
-        // 鍫嗗灈鏈烘帶鍒惰繃婊�
-        if (!crnProtocol.getStatusType().equals(CrnStatusType.IDLE) || crnProtocol.getTaskNo() != 0) {
-            return;
-        }
-
         // 宸茬粡瀛樺湪鍚婅溅鎵ц浠诲姟鏃讹紝鍒欒繃婊�
         if (wrkMastMapper.selectWorking(slave.getId()) != null) {
             return;
@@ -2036,7 +2056,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());
 
@@ -2087,15 +2120,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.鍏ュ簱瀹屾垚
@@ -2684,7 +2732,7 @@
                 if (Utils.isDeepLoc(slaveProperties, row)) {
                     if (shallowLoc.getBay1() == 1) {
                         loc = locMastService.queryFreeLocMast2(row, shallowLoc.getLocType1(), 29);
-                    } else if (shallowLoc.getRow1() == 29) {
+                    } else if (shallowLoc.getBay1() == 29) {
                         loc = locMastService.queryFreeLocMast2(row, shallowLoc.getLocType1(), 1);
                     } else {
                         loc = locMastService.queryFreeLocMast(row, shallowLoc.getLocType1());
@@ -2710,7 +2758,7 @@
                     if (Utils.isShallowLoc(slaveProperties, row)) {
                         if (shallowLoc.getBay1() == 1) {
                             loc = locMastService.queryFreeLocMast2(row, shallowLoc.getLocType1(), 29);
-                        } else if (shallowLoc.getRow1() == 29) {
+                        } else if (shallowLoc.getBay1() == 29) {
                             loc = locMastService.queryFreeLocMast2(row, shallowLoc.getLocType1(), 1);
                         } else {
                             loc = locMastService.queryFreeLocMast(row, shallowLoc.getLocType1());
@@ -2734,79 +2782,85 @@
 
             if (null == loc) {
                 News.error("" + mark + "moveLocForDeepLoc" + " - 1" + " - 鍙屾繁搴撲綅 --- 娴呭簱浣嶉樆濉炲紓甯革紒 寰呯Щ杞祬搴撲綅锛�" + shallowLoc.getLocNo());
-                throw new CoolException("鍙屾繁搴撲綅 --- 娴呭簱浣嶉樆濉炲紓甯革紒 寰呯Щ杞祬搴撲綅锛�" + shallowLoc.getLocNo());
+//                throw new CoolException("鍙屾繁搴撲綅 --- 娴呭簱浣嶉樆濉炲紓甯革紒 寰呯Щ杞祬搴撲綅锛�" + shallowLoc.getLocNo());
+            }else {
+                mainService.createMoveWrkMast(crn, shallowLoc, loc);
             }
 
-            // 鑾峰彇宸ヤ綔鍙�
-            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(13D);
-            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.setAppeTime(new Date());
-            wrkMast.setModiTime(new Date());
-            int res = wrkMastMapper.insert(wrkMast);
-            if (res == 0) {
-                News.errorNoLog("" + mark + "moveLocForDeepLoc" + " - 2" + " - 淇濆瓨宸ヤ綔妗eけ璐�");
-                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.setAnfme(locDetl.getAnfme());
-                    VersionUtils.setWrkDetl(wrkDetl, locDetl); // 鐗堟湰鎺у埗
-                    wrkDetl.setAppeTime(new Date());
-                    wrkDetl.setModiTime(new Date());
-                    if (!wrkDetlService.insert(wrkDetl)) {
-                        News.errorNoLog("" + mark + "moveLocForDeepLoc" + " - 3" + " - 淇濆瓨宸ヤ綔妗f槑缁嗗け璐�");
-                        throw new CoolException("淇濆瓨宸ヤ綔妗f槑缁嗗け璐�");
-                    }
-                }
-            }
-            // 淇敼婧愬簱浣嶇姸鎬�
-            if (shallowLoc.getLocSts().equals("D") || shallowLoc.getLocSts().equals("F")) {
-                shallowLoc.setLocSts("R"); // R.鍑哄簱棰勭害
-                shallowLoc.setModiTime(new Date());
-                if (!locMastService.updateById(shallowLoc)) {
-                    News.errorNoLog("" + mark + "moveLocForDeepLoc" + " - 4" + " - 鏇存柊婧愬簱浣嶇姸鎬佸け璐�");
-                    throw new CoolException("鏇存柊婧愬簱浣嶇姸鎬佸け璐�");
-                }
-            } else {
-                News.errorNoLog("" + mark + "moveLocForDeepLoc" + " - 5" + " - 婧愬簱浣嶅嚭搴撳け璐�");
-                throw new CoolException("婧愬簱浣嶅嚭搴撳け璐�");
-            }
-            // 淇敼鐩爣搴撲綅鐘舵��
-            if (loc.getLocSts().equals("O")) {
-                loc.setLocSts("S"); // S.鍏ュ簱棰勭害
-                loc.setModiTime(new Date());
-                if (!locMastService.updateById(loc)) {
-                    News.errorNoLog("" + mark + "moveLocForDeepLoc" + " - 6" + " - 鏇存柊鐩爣搴撲綅鐘舵�佸け璐�");
-                    throw new CoolException("鏇存柊鐩爣搴撲綅鐘舵�佸け璐�");
-                }
-            } else {
-                News.errorNoLog("" + mark + "moveLocForDeepLoc" + " - 7" + " - 绉昏浆澶辫触");
-                throw new CoolException("绉昏浆澶辫触");
-            }
+
         } catch (Exception e) {
             News.error("" + mark + "moveLocForDeepLoc" + " - 8" + " - 鍙屾繁搴撲綅闃诲锛屽娴呭簱浣嶈繘琛岀Щ杞け璐�", e);
-            e.printStackTrace();
-            TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
+
+        }
+    }
+
+    @Transactional(rollbackFor = Exception.class,propagation = Propagation.REQUIRES_NEW)
+    public void createMoveWrkMast(CrnSlave crn, LocMast shallowLoc, LocMast loc) {
+        // 鑾峰彇宸ヤ綔鍙�
+        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(13D);
+        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.setAppeTime(new Date());
+        wrkMast.setModiTime(new Date());
+        int res = wrkMastMapper.insert(wrkMast);
+        if (res == 0) {
+            News.errorNoLog(""  + "moveLocForDeepLoc" + " - 2" + " - 淇濆瓨宸ヤ綔妗eけ璐�");
+            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.setAnfme(locDetl.getAnfme());
+                VersionUtils.setWrkDetl(wrkDetl, locDetl); // 鐗堟湰鎺у埗
+                wrkDetl.setAppeTime(new Date());
+                wrkDetl.setModiTime(new Date());
+                if (!wrkDetlService.insert(wrkDetl)) {
+                    News.errorNoLog(""  + "moveLocForDeepLoc" + " - 3" + " - 淇濆瓨宸ヤ綔妗f槑缁嗗け璐�");
+                    throw new CoolException("淇濆瓨宸ヤ綔妗f槑缁嗗け璐�");
+                }
+            }
+        }
+        // 淇敼婧愬簱浣嶇姸鎬�
+        if (shallowLoc.getLocSts().equals("D") || shallowLoc.getLocSts().equals("F")) {
+            shallowLoc.setLocSts("R"); // R.鍑哄簱棰勭害
+            shallowLoc.setModiTime(new Date());
+            if (!locMastService.updateById(shallowLoc)) {
+                News.errorNoLog(""  + "moveLocForDeepLoc" + " - 4" + " - 鏇存柊婧愬簱浣嶇姸鎬佸け璐�");
+                throw new CoolException("鏇存柊婧愬簱浣嶇姸鎬佸け璐�");
+            }
+        } else {
+            News.errorNoLog(""  + "moveLocForDeepLoc" + " - 5" + " - 婧愬簱浣嶅嚭搴撳け璐�");
+            throw new CoolException("婧愬簱浣嶅嚭搴撳け璐�");
+        }
+        // 淇敼鐩爣搴撲綅鐘舵��
+        if (loc.getLocSts().equals("O")) {
+            loc.setLocSts("S"); // S.鍏ュ簱棰勭害
+            loc.setModiTime(new Date());
+            if (!locMastService.updateById(loc)) {
+                News.errorNoLog(""  + "moveLocForDeepLoc" + " - 6" + " - 鏇存柊鐩爣搴撲綅鐘舵�佸け璐�");
+                throw new CoolException("鏇存柊鐩爣搴撲綅鐘舵�佸け璐�");
+            }
+        } else {
+            News.errorNoLog(""  + "moveLocForDeepLoc" + " - 7" + " - 绉昏浆澶辫触");
+            throw new CoolException("绉昏浆澶辫触");
         }
     }
 

--
Gitblit v1.9.1