From 3e5020488be33166d7a55db4abdd1ae4834c5b06 Mon Sep 17 00:00:00 2001
From: pjb <pjb123456>
Date: 星期五, 18 七月 2025 09:46:45 +0800
Subject: [PATCH] 判断启动时线程未初始化

---
 src/main/java/com/zy/service/impl/MainServiceImpl.java |  169 ++++++++++++++++++++++++++++++++++++++++++++++++++++----
 1 files changed, 156 insertions(+), 13 deletions(-)

diff --git a/src/main/java/com/zy/service/impl/MainServiceImpl.java b/src/main/java/com/zy/service/impl/MainServiceImpl.java
index e7c5a67..87481b1 100644
--- a/src/main/java/com/zy/service/impl/MainServiceImpl.java
+++ b/src/main/java/com/zy/service/impl/MainServiceImpl.java
@@ -327,6 +327,11 @@
 
         SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, 2);
         StaProtocol staProtocol = devpThread.getStation().get(siteNew);
+        if(staProtocol == null) {
+            return;
+        } else {
+            staProtocol = staProtocol.clone();
+        }
 
         int count = staProtocol.getWantBucketCount();
 
@@ -335,6 +340,8 @@
             log.error("鑷姩鍑虹┖妗跺噺灏戠綈瑁呯嚎瑕佹《鏁板紓甯革紝绔欑偣锛歿}锛屽噺灏戝墠锛歿}锛屽噺灏戞暟锛歿}锛屽墿浣欒妗舵暟锛歿}", site, count, decrease, remaining);
             return;
         }
+
+        staProtocol.setWantBucketCount(remaining);
 
         boolean offer = MessageQueue.offer(SlaveType.Devp, inGzxSiteList.indexOf(site) + 4, new Task(6, staProtocol));
         if (offer) {
@@ -812,6 +819,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());
@@ -848,9 +860,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;
@@ -1182,6 +1193,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) {
                 // 鍒ゆ柇鏄笉鏄凡鍦ㄥ師鐐�
@@ -1718,6 +1732,9 @@
                 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;
+                }
                 // 鏌ヨ宸ヤ綔妗�
                 WrkMast wrkMast = wrkMastMapper.selectByWrkNo(staProtocol.getWorkNo());
                 if (wrkMast == null) {
@@ -1863,7 +1880,7 @@
             if (wrkMast == null) {
                 log.error("寮傚父鍙e叆搴撲换鍔″彿鏃犱换鍔�:{}", staProtocol.getWorkNo());
                 return;
-            } else if (wrkMast.getLocNo() != null) {
+            } else if (wrkMast.getLocNo() != null && wrkMast.getLocNo().length() == 7) {
 //                log.info("寮傚父鍙e叆搴撳簱浣嶅凡鍒嗛厤:{}", wrkMast.getLocNo());
                 return;
             } else if(wrkMast.getStaNo() != 1090) {
@@ -1997,7 +2014,7 @@
     }
 
     public synchronized void autoOutEmptyBucket() {
-        Config config = configService.selectOne(new EntityWrapper<Config>().eq("code","autoOutEmptyBucket").eq("status",1));
+        Config config = configService.selectOne(new EntityWrapper<Config>().eq("code", "autoOutEmptyBucket").eq("status", 1));
         if (config == null || Cools.isEmpty(config.getValue())) {
             return;
         }
@@ -2006,21 +2023,106 @@
         String[] split = config.getValue().split("=");
 
         for (SearchLocParam.WantBucket wantBucket : getWantBucketFlag()) {
-            if (wantBucket.getBucketType() != 0 && wantBucket.getWantBucketCount() >= 2) { // 缃愯绾挎湁瑕佹《淇″彿
+            if (wantBucket.getBucketType() != 0 && wantBucket.getWantBucketCount() > 0) { // 缃愯绾挎湁瑕佹《淇″彿+瑕佹墭鏁颁笉涓�0
                 boolean flag = true; // 鏄惁闇�瑕佽嚜鍔ㄨˉ锛宼rue涓嶉渶瑕侊紝false闇�瑕�
-                for(String item: split) {
-                    if(String.valueOf(wantBucket.getSite()).equals(item)) {
+                for (String item : split) {
+                    if (String.valueOf(wantBucket.getSite()).equals(item)) {
                         flag = false;
                         break;
                     }
                 }
-                if(flag) {
+                if (flag) {
                     return;
                 }
                 // <4 < 2 < 4
                 int count = wrkMastMapper.selectInGzxCount(wantBucket.getSite());
-                if (wantBucket.getSite() == 1071 && count <= 2 || wantBucket.getSite() == 1064 && count == 0 || wantBucket.getSite() == 1078 && count <= 2) {
-                    log.info("{}鑷姩琛ョ┖妗讹紝缃愯绾胯妗跺瀷淇℃伅锛歿},姝e湪鎵ц浠诲姟鏁帮細{}",wantBucket.getSite(), wantBucket.getBucketType(),count);
+
+                if (wantBucket.getWantBucketCount() == 1) { // 鏈�鍚庡墿涓�鎷栫殑鏃跺��
+                    log.info("{}鑷姩琛ョ┖妗跺墿鏈�鍚庝竴鎵橈紝缃愯绾胯妗跺瀷淇℃伅锛歿},姝e湪鎵ц浠诲姟鏁帮細{}", wantBucket.getSite(), wantBucket.getBucketType(), count);
+                    if (wantBucket.getSite() == 1071 && count <= 3 || wantBucket.getSite() == 1064 && count <= 1 || wantBucket.getSite() == 1078 && count <= 3) { // 鍙互鍑轰竴涓�
+                        List<LocDetl> locDetlList = locDetlService.selectListByMatnr(wantBucket.getBucketType());
+                        if (locDetlList.size() == 0) {
+                            log.warn("鑷姩鍑虹┖妗舵渶鍚庝竴涓紝搴撳瓨鏃犳暟鎹�");
+                            break;
+                        }
+                        Map<String, LocDetl> locDetlMap = locDetlList.stream().collect(Collectors.toMap(LocDetl::getLocNo, locDetl -> locDetl));
+                        LocDetl locDetlSta = null;
+                        for (LocDetl locDetl : locDetlList) {
+                            String loc1 = locDetl.getLocNo(); // 褰撳墠搴撲綅
+                            String row = loc1.substring(0, 2);
+                            String rowNew = ""; // 瀵瑰簲搴撲綅
+                            switch (row) {
+                                case "09":
+                                    rowNew = "10";
+                                    break;
+                                case "10":
+                                    rowNew = "09";
+                                    break;
+                                case "11":
+                                    rowNew = "12";
+                                    break;
+                                case "12":
+                                    rowNew = "11";
+                                    break;
+                                default:
+                            }
+                            String locNoNew = rowNew + loc1.substring(2);
+                            LocDetl locDetl1 = locDetlMap.get(locNoNew);
+                            if (locDetl1 == null) {
+                                locDetlSta = locDetl;
+                                break;
+                            }
+                        }
+                        // 娌℃湁鍗曠殑锛屾繁娴呭簱浣嶉兘鏈夛紝鍏堝彇娴呭簱浣�
+                        if (locDetlSta == null) {
+                            Optional<LocDetl> first = locDetlList.stream().filter(locDetl -> locDetl.getLocNo().startsWith("10") || locDetl.getLocNo().startsWith("11")).findFirst();
+                            if (first.isPresent()) {
+                                locDetlSta = first.get();
+                            }
+                        }
+                        if (locDetlSta != null) {
+                            try {
+                                StockOutParam param = new StockOutParam();
+                                param.setOutSite(wantBucket.getSite());
+                                List<StockOutParam.LocDetl> locDetls = new ArrayList<>();
+                                StockOutParam.LocDetl locDetl2 = new StockOutParam.LocDetl();
+                                locDetl2.setLocNo(locDetlSta.getLocNo());
+                                locDetl2.setMatnr(locDetlSta.getMatnr());
+                                locDetl2.setBatch(locDetlSta.getBatch());
+                                locDetl2.setBrand(locDetlSta.getBrand());
+                                locDetl2.setCount(locDetlSta.getAnfme());
+                                locDetl2.setBoxType1(locDetlSta.getBoxType1());
+                                locDetl2.setBoxType2(locDetlSta.getBoxType2());
+                                locDetl2.setBoxType3(locDetlSta.getBoxType3());
+                                locDetl2.setStandby1(locDetlSta.getStandby1());
+                                locDetl2.setStandby2(locDetlSta.getStandby2());
+                                locDetl2.setStandby3(locDetlSta.getStandby3());
+                                locDetls.add(locDetl2);
+                                param.setLocDetls(locDetls);
+                                String response = new HttpHandler.Builder()
+                                        .setUri(wmsUrl)
+                                        .setPath("/rpc/autoOutEmptyBucket")
+                                        .setJson(JSON.toJSONString(param))
+                                        .build()
+                                        .doPost();
+                                log.info("鏈�鍚庝竴涓嚜鍔ㄥ嚭绌烘《璇锋眰wms鍘熷杩斿洖锛�" + response);
+                                JSONObject jsonObject = JSON.parseObject(response);
+                                if (jsonObject.getInteger("code").equals(200)) {
+                                    decreaseWantBucketCount(wantBucket.getSite(), 1);
+                                    log.info("鏈�鍚庝竴涓嚜鍔ㄥ嚭绌烘《鎴愬姛:{}", wantBucket.getSite());
+                                    return;
+                                } else {
+                                    News.error("鏈�鍚庝竴涓嚜鍔ㄧ┖妗跺嚭搴�" + ":璇锋眰鎺ュ彛澶辫触锛侊紒锛乽rl锛歿}锛況equest锛歿}锛況esponse锛歿}", wmsUrl + "/rpc/autoOutEmptyBucket", JSON.toJSONString(param), response);
+                                }
+                            } catch (Exception e) {
+                                e.printStackTrace();
+                                TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
+                            }
+                        }
+
+                    }
+                } else if (wantBucket.getSite() == 1071 && count <= 2 || wantBucket.getSite() == 1064 && count == 0 || wantBucket.getSite() == 1078 && count <= 2) { // 鍙互鍑轰袱涓�
+                    log.info("{}鑷姩琛ョ┖妗讹紝缃愯绾胯妗跺瀷淇℃伅锛歿},姝e湪鎵ц浠诲姟鏁帮細{}", wantBucket.getSite(), wantBucket.getBucketType(), count);
                     // 鍒ゆ柇搴撻噷鏈夋棤绌烘《缁�
                     List<LocDetl> locDetlList = locDetlService.selectListByMatnr(wantBucket.getBucketType());
                     for (int i = 0; i < locDetlList.size(); i++) {
@@ -2082,8 +2184,8 @@
                                     log.info("鑷姩鍑虹┖妗惰姹倃ms鍘熷杩斿洖锛�" + response);
                                     JSONObject jsonObject = JSON.parseObject(response);
                                     if (jsonObject.getInteger("code").equals(200)) {
-                                        decreaseWantBucketCount(wantBucket.getSite(),2);
-                                        log.info("鑷姩鍑虹┖妗舵垚鍔�:{}",wantBucket.getSite());
+                                        decreaseWantBucketCount(wantBucket.getSite(), 2);
+                                        log.info("鑷姩鍑虹┖妗舵垚鍔�:{}", wantBucket.getSite());
                                         return;
                                     } else {
                                         News.error("鑷姩绌烘《鍑哄簱" + ":璇锋眰鎺ュ彛澶辫触锛侊紒锛乽rl锛歿}锛況equest锛歿}锛況esponse锛歿}", wmsUrl + "/rpc/autoOutEmptyBucket", JSON.toJSONString(param), response);
@@ -2095,6 +2197,47 @@
                             }
                         }
                     }
+                    if (locDetlList.size() > 0) {
+                        log.info("娌℃湁鎴愬鐨勭┖妗剁粍锛屽彧鑳戒竴涓竴涓嚭");
+                        try {
+                            LocDetl locDetl = locDetlList.get(0);
+                            StockOutParam param = new StockOutParam();
+                            param.setOutSite(wantBucket.getSite());
+                            List<StockOutParam.LocDetl> locDetls = new ArrayList<>();
+                            StockOutParam.LocDetl locDetl2 = new StockOutParam.LocDetl();
+                            locDetl2.setLocNo(locDetl.getLocNo());
+                            locDetl2.setMatnr(locDetl.getMatnr());
+                            locDetl2.setBatch(locDetl.getBatch());
+                            locDetl2.setBrand(locDetl.getBrand());
+                            locDetl2.setCount(locDetl.getAnfme());
+                            locDetl2.setBoxType1(locDetl.getBoxType1());
+                            locDetl2.setBoxType2(locDetl.getBoxType2());
+                            locDetl2.setBoxType3(locDetl.getBoxType3());
+                            locDetl2.setStandby1(locDetl.getStandby1());
+                            locDetl2.setStandby2(locDetl.getStandby2());
+                            locDetl2.setStandby3(locDetl.getStandby3());
+                            locDetls.add(locDetl2);
+                            param.setLocDetls(locDetls);
+                            String response = new HttpHandler.Builder()
+                                    .setUri(wmsUrl)
+                                    .setPath("/rpc/autoOutEmptyBucket")
+                                    .setJson(JSON.toJSONString(param))
+                                    .build()
+                                    .doPost();
+                            log.info("鑷姩鍑虹┖妗惰姹倃ms鍘熷杩斿洖锛�" + response);
+                            JSONObject jsonObject = JSON.parseObject(response);
+                            if (jsonObject.getInteger("code").equals(200)) {
+                                decreaseWantBucketCount(wantBucket.getSite(), 1);
+                                log.info("鑷姩鍑虹┖妗舵垚鍔�:{}", wantBucket.getSite());
+                                return;
+                            } else {
+                                News.error("鑷姩绌烘《鍑哄簱" + ":璇锋眰鎺ュ彛澶辫触锛侊紒锛乽rl锛歿}锛況equest锛歿}锛況esponse锛歿}", wmsUrl + "/rpc/autoOutEmptyBucket", JSON.toJSONString(param), response);
+                            }
+                        } catch (Exception e) {
+                            e.printStackTrace();
+                            TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
+                        }
+                    }
                 }
             }
         }

--
Gitblit v1.9.1