From 946143efb7cedfd12e82205cd8149e465f22466e Mon Sep 17 00:00:00 2001
From: pjb <pjb123456>
Date: 星期二, 29 七月 2025 09:16:29 +0800
Subject: [PATCH] 空托盘出库修复

---
 src/main/java/com/zy/service/impl/MainServiceImpl.java |  152 ++++++++++++++++++++++++++++++--------------------
 1 files changed, 91 insertions(+), 61 deletions(-)

diff --git a/src/main/java/com/zy/service/impl/MainServiceImpl.java b/src/main/java/com/zy/service/impl/MainServiceImpl.java
index 4f37a5a..20e548c 100644
--- a/src/main/java/com/zy/service/impl/MainServiceImpl.java
+++ b/src/main/java/com/zy/service/impl/MainServiceImpl.java
@@ -118,6 +118,9 @@
     private WaitPakinMapper waitPakinMapper;
     @Autowired
     private LocMastService locMastService;
+
+    @Resource
+    private LocMastMapper locMastMapper;
     @Autowired
     private StaDescService staDescService;
     @Autowired
@@ -177,34 +180,34 @@
                 // 灏哄妫�娴嬪紓甯�
                 boolean back = false;
                 String errMsg = "";
-//                if (staProtocol.isFrontErr()) {
-//                    errMsg = "鍓嶈秴闄�";
-//                    back = true;
-//                }
-//                if (!back && staProtocol.isBackErr()) {
-//                    errMsg = "鍚庤秴闄�";
-//                    back = true;
-//                }
-//                if (!back && staProtocol.isHighErr()) {
-//                    errMsg = "楂樿秴闄�";
-//                    back = true;
-//                }
-//                if (!back && staProtocol.isLeftErr()) {
-//                    errMsg = "宸﹁秴闄�";
-//                    back = true;
-//                }
-//                if (!back && staProtocol.isRightErr()) {
-//                    errMsg = "鍙宠秴闄�";
-//                    back = true;
-//                }
-//                if (!back && staProtocol.isWeightErr()) {
-//                    errMsg = "瓒呴噸";
-//                    back = true;
-//                }
-//                if (!back && staProtocol.isBarcodeErr()) {
-//                    errMsg = "鎵爜澶辫触";
-//                    back = true;
-//                }
+                if (staProtocol.isFrontErr()) {
+                    errMsg = "鍓嶈秴闄�";
+                    back = true;
+                }
+                if (!back && staProtocol.isBackErr()) {
+                    errMsg = "鍚庤秴闄�";
+                    back = true;
+                }
+                if (!back && staProtocol.isHighErr()) {
+                    errMsg = "楂樿秴闄�";
+                    back = true;
+                }
+                if (!back && staProtocol.isLeftErr()) {
+                    errMsg = "宸﹁秴闄�";
+                    back = true;
+                }
+                if (!back && staProtocol.isRightErr()) {
+                    errMsg = "鍙宠秴闄�";
+                    back = true;
+                }
+                if (!back && staProtocol.isWeightErr()) {
+                    errMsg = "瓒呴噸";
+                    back = true;
+                }
+                if (!back && staProtocol.isBarcodeErr()) {
+                    errMsg = "鎵爜澶辫触";
+                    back = true;
+                }
                 // 閫�鍥�
                 if (back && staProtocol.isInEnable() && staProtocol.isLoading() && staProtocol.getWorkNo() == 0) {
                     MessageQueue.offer(SlaveType.Led, inSta.getLed(), new Task(3, errMsg));
@@ -731,7 +734,7 @@
                         continue;
                     }
 
-                } else if (shallowLoc.getLocSts().equals("F") || shallowLoc.getLocSts().equals("D")) {
+                } else if (shallowLoc.getLocSts().equals("F") || shallowLoc.getLocSts().equals("M")|| shallowLoc.getLocSts().equals("Z")) {
                     News.warnNoLog(""+mark+" - 1"+" - 12"+" - // F銆丏  搴撲綅鐘舵��={}",shallowLoc.getLocSts());
                     // 姝ゆ爣璁伴伩鍏嶅娆℃墽琛岀Щ搴撲换鍔�
                     if (Cools.isEmpty(wrkMast.getUpdMk()) || "N".equals(wrkMast.getUpdMk())) {
@@ -819,6 +822,11 @@
      */
     public synchronized void locToCrnStn(CrnSlave slave, CrnProtocol crnProtocol,Integer mark) {
         News.warnNoLog(""+mark+" - 2"+" - 0"+" - 鍫嗗灈鏈哄叆鍑哄簱浣滀笟涓嬪彂锛氭墽琛屽嚭搴�");
+        boolean crnAvailableOut = false;
+        Config config = configService.selectOne(new EntityWrapper<Config>().eq("code","removeCrnAvailableOut"));
+        if (config != null && config.getStatus() == 1) {
+            crnAvailableOut = true;
+        }
         for (CrnSlave.CrnStn crnStn : slave.getCrnOutStn()) {
             // 鑾峰彇宸ヤ綔鐘舵�佷负11锛堢敓鎴愬嚭搴揑D锛夌殑鍑哄簱宸ヤ綔妗�
             List<WrkMast> wrkMasts = wrkMastMapper.selectPakOutStep11(slave.getId(), crnStn.getStaNo());
@@ -855,9 +863,8 @@
                 }
 
                 // 鍒ゆ柇鍫嗗灈鏈哄嚭搴撶珯鐘舵��
-                if ((staProtocol.isAutoing() && !staProtocol.isLoading() && staDetl.getCanouting() != null && staDetl.getCanouting().equals("Y")
-                        && staProtocol.getWorkNo() == 0 && staProtocol.isOutEnable())
-                        || (staProtocol.getSiteId() == 1056 && staProtocol.isAutoing() && staDetl.getCanouting() != null && staDetl.getCanouting().equals("Y"))) {
+                if (staProtocol.isAutoing() && staDetl.getCanouting() != null && staDetl.getCanouting().equals("Y") &&
+                        (crnAvailableOut || !staProtocol.isLoading() && staProtocol.getWorkNo() == 0 && staProtocol.isOutEnable())) {
                     // 鍫嗗灈鏈烘帶鍒惰繃婊�
                     if (!crnProtocol.getStatusType().equals(CrnStatusType.IDLE) || crnProtocol.getTaskNo() != 0) {
                         break;
@@ -894,7 +901,7 @@
 
                                 }
                             }
-                        } else if (shallowLoc.getLocSts().equals("F") || shallowLoc.getLocSts().equals("D")) {
+                        } else if (shallowLoc.getLocSts().equals("F") || shallowLoc.getLocSts().equals("M")|| shallowLoc.getLocSts().equals("Z")) {
                             News.warnNoLog(""+mark+" - 2"+" - 9"+" - // F銆丏  搴撲綅鐘舵��={}",shallowLoc.getLocSts());
 //                            WrkMast waitWrkMast = wrkMastMapper.selectByLocNo(shallowLocNo);
                             //2022-08-16 modify,涓嶆牴鎹畊pdmk鏍囪绉诲簱浠诲姟(瀹规槗琚彇娑堝鑷村牭濉�)锛屾煡璇㈠伐浣滄。鏄惁瀛樺湪浠诲姟
@@ -1148,21 +1155,23 @@
                     // 绌烘《鍏ュ簱瀹屾垚锛屽厛瀹屾垚瀵瑰簲搴撲綅缁勪换鍔�
                     if(wrkMast.getWorkNoOther() != 0 ){
                         WrkMast wrkMast1 = wrkMastService.selectByWrkNo(wrkMast.getWorkNoOther());
-                        // 浜ゆ崲搴撲綅鍙�
-                        String locNo = wrkMast.getLocNo();
-                        wrkMast.setLocNo(wrkMast1.getLocNo());
-                        // 浜ゆ崲鍏ュ簱鏃堕棿锛屾彁鍙栧簱瀛樻椂鎸夐『搴忓厛娴呭悗娣�
-                        Date ioTime = wrkMast.getIoTime();
-                        if(locNo.startsWith("10")) {
-                            wrkMast.setIoTime(wrkMast1.getIoTime());
-                            wrkMast1.setIoTime(ioTime);
+                        if (wrkMast1 != null) {
+                            // 浜ゆ崲搴撲綅鍙�
+                            String locNo = wrkMast.getLocNo();
+                            wrkMast.setLocNo(wrkMast1.getLocNo());
+                            // 浜ゆ崲鍏ュ簱鏃堕棿锛屾彁鍙栧簱瀛樻椂鎸夐『搴忓厛娴呭悗娣�
+                            Date ioTime = wrkMast.getIoTime();
+                            if(locNo.startsWith("10")) {
+                                wrkMast.setIoTime(wrkMast1.getIoTime());
+                                wrkMast1.setIoTime(ioTime);
+                            }
+                            wrkMast1.setLocNo(locNo);
+                            wrkMast1.setCrnEndTime(now);
+                            wrkMast1.setModiTime(now);
+                            wrkMast1.setWrkSts(4L);
+                            wrkMast1.setWorkNoOther(0);
+                            wrkMastMapper.updateById(wrkMast1);
                         }
-                        wrkMast1.setLocNo(locNo);
-                        wrkMast1.setCrnEndTime(now);
-                        wrkMast1.setModiTime(now);
-                        wrkMast1.setWrkSts(4L);
-                        wrkMast1.setWorkNoOther(0);
-                        wrkMastMapper.updateById(wrkMast1);
                     }
                     wrkMast.setCrnEndTime(now);
                     wrkMast.setModiTime(now);
@@ -1189,6 +1198,9 @@
             // 鑾峰彇鍫嗗灈鏈轰俊鎭�
             CrnThread crnThread = (CrnThread) SlaveConnection.get(SlaveType.Crn, crn.getId());
             CrnProtocol crnProtocol = crnThread.getCrnProtocol();
+            if(crnProtocol == null) {
+                continue;
+            }
             if (crnProtocol.getStatusType() == CrnStatusType.IDLE && crnProtocol.getTaskNo() == 0 && crnProtocol.getModeType() == CrnModeType.AUTO
                     && crnProtocol.getLoaded() == 0 && crnProtocol.getForkPos() == 0) {
                 // 鍒ゆ柇鏄笉鏄凡鍦ㄥ師鐐�
@@ -1203,8 +1215,13 @@
                 Date now = new Date();
                 Date modiTime = basCrnp.getModiTime();
                 long diffInMillis = now.getTime()-modiTime.getTime();
-                if(diffInMillis < 3 * 60 * 1000) {
+                if(diffInMillis < 10 * 1000) { // 绌洪棽灏忎簬10绉掑垯璺宠繃
                     continue;
+                } else {  // 鏈夊叆搴撲换鍔℃垨澶т簬2鍒嗛挓锛屽洖鍘熺偣
+                    int count = wrkMastService.selectCount(new EntityWrapper<WrkMast>().eq("io_type", 1).eq("crn_no", crn.getId()).in("wrk_sts", 2, 9, 10));
+                    if(count == 0 && diffInMillis < 2 * 60 * 1000) {
+                        continue;
+                    }
                 }
 
                 // 鏈夊悐杞﹀叆搴撴垨鍚婅溅鍑哄簱浠诲姟
@@ -1230,7 +1247,7 @@
                     basCrnpService.updateById(basCrnp); // 璁剧疆鏇存柊鏃堕棿锛岄伩鍏嶉噸澶嶄笅鍙戝洖鍘熺偣
                     log.info("{}鍙峰爢鍨涙満鍥炲師鐐逛换鍔′笅鍙戞垚鍔燂細{}", crn.getId(), JSON.toJSON(crnCommand));
                 }
-                Thread.sleep(2000);
+                Thread.sleep(3000);
             }
         }
     }
@@ -1514,13 +1531,25 @@
      */
     private synchronized void moveLocForDeepLoc(CrnSlave crn, LocMast shallowLoc,Integer mark) {
 
+        // 鍙湁208L鑳芥斁11灞�
+        String model = null;
+        if(shallowLoc.getLocSts().equals("F")) {
+            LocDetl locDetl = locDetlService.selectOne(new EntityWrapper<LocDetl>().eq("loc_no", shallowLoc.getLocNo()));
+            if(locDetl != null && locDetl.getModel() != null) {
+                String matModel = locMastMapper.selectMatMatnrByMaktx(locDetl.getModel());
+                if(matModel != null && matModel.equals("208L")) {
+                    model = "208L";
+                }
+            }
+        }
         try {
             News.warnNoLog(""+mark+"moveLocForDeepLoc"+" - 0"+" - 寮�濮嬫墽琛�:鍥犲弻娣卞簱浣嶉樆濉烇紝瀵规祬搴撲綅杩涜绉昏浆锛堢珛鍗虫墽琛岀増)");
             List<Integer> rows = locMastService.queryDistinctRow(crn.getId());
             LocMast loc = null;
             for (Integer row : rows) {
                 if (Utils.isDeepLoc(slaveProperties, row)) {
-                    loc = locMastService.queryFreeLocMast(row, shallowLoc.getLocType2());
+//                    loc = locMastService.queryFreeLocMast(row, shallowLoc.getLocType2());
+                    loc = locMastMapper.queryFreeLocMastNew(row,model);
 
                     if (loc != null) {
                         if (Utils.isDeepLoc(slaveProperties, loc.getLocNo())) {
@@ -1539,12 +1568,12 @@
             if (null == loc) {
                 for (Integer row : rows) {
                     if (Utils.isShallowLoc(slaveProperties, row)) {
-                        loc = locMastService.queryFreeLocMast(row, shallowLoc.getLocType2());
-
+//                        loc = locMastService.queryFreeLocMast(row, shallowLoc.getLocType2());
+                        loc = locMastMapper.queryFreeLocMastNew(row,model);
                         if (null != loc) {//瀵瑰簲娣卞簱浣嶉潪鍦ㄥ簱鐘舵��,涓嶈兘绉诲簱
                             String deepLoc = Utils.getDeepLoc(slaveProperties, loc.getLocNo());
                             LocMast deepLoc1 = locMastService.selectById(deepLoc);
-                            if (!deepLoc1.getLocSts().equals("F") && !deepLoc1.getLocSts().equals("D")) {
+                            if (!deepLoc1.getLocSts().equals("F") && !deepLoc1.getLocSts().equals("M")&& !deepLoc1.getLocSts().equals("Z")) {
                                 loc = null;
                             }
                         }
@@ -1576,7 +1605,7 @@
                 wrkMast.setFullPlt(shallowLoc.getLocSts().equals("F") ? "Y" : "N"); // 婊℃澘
                 wrkMast.setPicking("N"); // 鎷f枡
                 wrkMast.setExitMk("N"); // 閫�鍑�
-                wrkMast.setEmptyMk(shallowLoc.getLocSts().equals("D") ? "Y" : "N"); // 绌烘澘
+                wrkMast.setEmptyMk(shallowLoc.getLocSts().equals("M") ? "M" : shallowLoc.getLocSts().equals("Z") ? "Z" : "N"); // 绌烘澘
                 wrkMast.setBarcode(shallowLoc.getBarcode()); // 鎵樼洏鐮�
                 wrkMast.setLinkMis("N");
                 wrkMast.setAppeTime(new Date());
@@ -1604,7 +1633,7 @@
                     }
                 }
                 // 淇敼婧愬簱浣嶇姸鎬�
-                if (shallowLoc.getLocSts().equals("D") || shallowLoc.getLocSts().equals("F")) {
+                if (shallowLoc.getLocSts().equals("F") || shallowLoc.getLocSts().equals("M") || shallowLoc.getLocSts().equals("Z")) {
                     shallowLoc.setLocSts("R"); // R.鍑哄簱棰勭害
                     shallowLoc.setModiTime(new Date());
                     if (!locMastService.updateById(shallowLoc)) {
@@ -1725,8 +1754,8 @@
                 staProtocol = staProtocol.clone();
             }
             if (staProtocol.isAutoing() && staProtocol.isLoading() && (staProtocol.isInEnable() || staProtocol.isOutEnable() && site == 1090) && staProtocol.getWorkNo() != 0 && staProtocol.getWorkNo() < 9000) {
-                if (staProtocol.getWorkNo() == 1034 && !staProtocol.isHigh()) { // 1034绌烘瘝鎷栧洖娴佷换鍔¢渶瑕侀珮淇″彿
-                    return;
+                if (staProtocol.getSiteId() == 1034 && !staProtocol.isHigh()) { // 1034绌烘瘝鎷栧洖娴佷换鍔¢渶瑕侀珮淇″彿
+                    continue;
                 }
                 // 鏌ヨ宸ヤ綔妗�
                 WrkMast wrkMast = wrkMastMapper.selectByWrkNo(staProtocol.getWorkNo());
@@ -1796,7 +1825,7 @@
     /**
      * rgv鏀捐揣瀹屾垚锛岀粰杈撻�佺嚎涓嬪彂浠诲姟
      */
-    public synchronized void rgvToDev() {
+    public synchronized void rgvToDev() throws InterruptedException {
         for (Integer site : rgvConnectionSiteList) {
             // 杈撻�佺嚎plc缂栧彿
             Integer devpPlcId = site < 1044 ? 1 : site <= 1090 ? 2 : 3;
@@ -1834,7 +1863,7 @@
                     wrkMast.setWrkSts(15L);
                     wrkMast.setModiTime(new Date());
                     wrkMastService.updateById(wrkMast);
-                } else if(wrkMast.getIoType() == 110 && (wrkMast.getStaNo() == 1002 || wrkMast.getStaNo() == 1020 ||wrkMast.getStaNo() == 1035)) {
+                } else if(wrkMast.getIoType() == 110 && (wrkMast.getStaNo() == 1002 || wrkMast.getStaNo() == 1020 ||wrkMast.getStaNo() == 1035 || wrkMast.getStaNo() == 1024)) {
                     if(wrkMast.getWrkSts() != 2 ){
                         log.warn("rgv鏀捐揣瀹屾垚110锛宺gv鏈浣�:rgv鍙穥}锛屼换鍔″彿锛歿}锛屼换鍔$姸鎬亄}",wrkMast.getRgvNo(),wrkMast.getWrkNo(),wrkMast.getWrkSts());
                         continue;
@@ -1848,10 +1877,11 @@
                 staProtocol.setWorkNo(staProtocol.getHideWorkNo());
                 staProtocol.setStaNo(wrkMast.getStaNo().shortValue());
                 if (!MessageQueue.offer(SlaveType.Devp, devpPlcId, new Task(2, staProtocol))) {
-                    log.info("rgv鎼繍瀹屾垚缁欒緭閫佺嚎涓嬪彂鍛戒护澶辫触!,plc id:{},绔欑偣{}锛屼换鍔″彿锛歿}锛岀洰鏍囩珯锛歿}", devpPlcId,staProtocol.getStaNo(), staProtocol.getWorkNo(), staProtocol.getStaNo());
+                    log.info("rgv鎼繍瀹屾垚缁欒緭閫佺嚎涓嬪彂鍛戒护澶辫触!,plc id:{},绔欑偣{}锛屼换鍔″彿锛歿}锛岀洰鏍囩珯锛歿}", devpPlcId,staProtocol.getSiteId(), staProtocol.getWorkNo(), staProtocol.getStaNo());
                 } else {
-                    log.info("rgv鎼繍瀹屾垚缁欒緭閫佺嚎涓嬪彂鍛戒护鎴愬姛plc id:{}!,绔欑偣{}锛屼换鍔″彿锛歿}锛岀洰鏍囩珯锛歿}", devpPlcId,staProtocol.getStaNo(), staProtocol.getWorkNo(), staProtocol.getStaNo());
+                    log.info("rgv鎼繍瀹屾垚缁欒緭閫佺嚎涓嬪彂鍛戒护鎴愬姛plc id:{}!,绔欑偣{}锛屼换鍔″彿锛歿}锛岀洰鏍囩珯锛歿}", devpPlcId,staProtocol.getSiteId(), staProtocol.getWorkNo(), staProtocol.getStaNo());
                 }
+                Thread.sleep(300);
             }
         }
     }

--
Gitblit v1.9.1