From 7fb8a9add101ffff09fb9194d89ac7bd3747679c Mon Sep 17 00:00:00 2001
From: pjb <pjb123456>
Date: 星期四, 17 七月 2025 15:44:07 +0800
Subject: [PATCH] 自动出空桶优化

---
 src/main/java/com/zy/service/impl/MainServiceImpl.java |  167 +++++++++++++++++++++++++++++++++++++++++++++++++++----
 1 files changed, 154 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 afdfb38..4f37a5a 100644
--- a/src/main/java/com/zy/service/impl/MainServiceImpl.java
+++ b/src/main/java/com/zy/service/impl/MainServiceImpl.java
@@ -314,7 +314,7 @@
     /**
      * 缃愯绾胯妗舵暟閲忓噺灏�
      */
-    private void decreaseWantBucketCount(int site, int decrease) {
+    private void decreaseWantBucketCount(int site, int decrease) throws InterruptedException {
 
         int siteNew;
         switch (site) {
@@ -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();
 
@@ -336,7 +341,7 @@
             return;
         }
 
-        staProtocol.setWantBucketCount(remaining); // 璁剧疆鍓╀綑瑕佹《鏁�
+        staProtocol.setWantBucketCount(remaining);
 
         boolean offer = MessageQueue.offer(SlaveType.Devp, inGzxSiteList.indexOf(site) + 4, new Task(6, staProtocol));
         if (offer) {
@@ -1178,7 +1183,7 @@
     /**
      * 鍫嗗灈鏈哄洖鍘熺偣
      */
-    public synchronized void originGo() {
+    public synchronized void originGo() throws InterruptedException {
 
         for (CrnSlave crn : slaveProperties.getCrn()) {
             // 鑾峰彇鍫嗗灈鏈轰俊鎭�
@@ -1202,6 +1207,12 @@
                     continue;
                 }
 
+                // 鏈夊悐杞﹀叆搴撴垨鍚婅溅鍑哄簱浠诲姟
+                int count = wrkMastService.selectCount(new EntityWrapper<WrkMast>().eq("crn_no", crnProtocol.getCrnNo()).in("wrk_sts", 3, 12));
+                if(count != 0) {
+                    continue;
+                }
+
                 CrnCommand crnCommand = new CrnCommand();
                 crnCommand.setCrnNo(crn.getId()); // 鍫嗗灈鏈虹紪鍙�
                 crnCommand.setTaskNo((short) 9999); // 宸ヤ綔鍙�
@@ -1219,6 +1230,7 @@
                     basCrnpService.updateById(basCrnp); // 璁剧疆鏇存柊鏃堕棿锛岄伩鍏嶉噸澶嶄笅鍙戝洖鍘熺偣
                     log.info("{}鍙峰爢鍨涙満鍥炲師鐐逛换鍔′笅鍙戞垚鍔燂細{}", crn.getId(), JSON.toJSON(crnCommand));
                 }
+                Thread.sleep(2000);
             }
         }
     }
@@ -1713,6 +1725,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) {
@@ -1858,7 +1873,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) {
@@ -1992,7 +2007,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;
         }
@@ -2001,21 +2016,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++) {
@@ -2077,8 +2177,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);
@@ -2090,6 +2190,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