From 5d48d59ca16cdca92c55195144f8e280914cfc05 Mon Sep 17 00:00:00 2001
From: Junjie <540245094@qq.com>
Date: 星期二, 12 十二月 2023 09:56:01 +0800
Subject: [PATCH] #找库位V2

---
 src/main/java/com/zy/common/service/CommonService.java |  164 ++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 164 insertions(+), 0 deletions(-)

diff --git a/src/main/java/com/zy/common/service/CommonService.java b/src/main/java/com/zy/common/service/CommonService.java
index 2718933..e18606e 100644
--- a/src/main/java/com/zy/common/service/CommonService.java
+++ b/src/main/java/com/zy/common/service/CommonService.java
@@ -503,4 +503,168 @@
         return startupDto;
     }
 
+    /**
+     * 鍥涘悜搴撹幏鍙栧簱浣�
+     */
+    public StartupDto getShuttleLocNo(Integer staDescId, Integer sourceStaNo, List<String> matNos, LocTypeDto locTypeDto) {
+        // 鐩爣搴撲綅
+        LocMast locMast = null;
+
+        // 闈犺繎鎽嗘斁瑙勫垯 --- 绌烘墭
+        locMast = getShuttleEmptyLocNo(staDescId, locTypeDto);
+        if (locMast != null) {
+            //鎵惧埌搴撲綅锛岃繑鍥瀌to
+            return getLocNoStep6(staDescId, sourceStaNo, locMast);//杩斿洖dto
+        }
+
+        //鍗曞搧鐗╂枡 闈犺繎鎽嗘斁瑙勫垯 --- 鐩稿悓璁㈠崟鍙�, 鍚屽ぉ鍚岃鏍肩墿鏂�
+        locMast = getShuttleSingleLocNo(matNos, locTypeDto);
+        if (locMast != null) {
+            //鎵惧埌搴撲綅锛岃繑鍥瀌to
+            return getLocNoStep6(staDescId, sourceStaNo, locMast);//杩斿洖dto
+        }
+
+        // 闈犺繎鎽嗘斁瑙勫垯 --- 鐩稿悓璁㈠崟鍙�, 鍚屽ぉ鍚岃鏍肩墿鏂�
+        locMast = getShuttleMixedLocNo(matNos, locTypeDto);
+        if (locMast != null) {
+            //鎵惧埌搴撲綅锛岃繑鍥瀌to
+            return getLocNoStep6(staDescId, sourceStaNo, locMast);//杩斿洖dto
+        }
+
+        throw new CoolException("鏈壘鍒板彲鐢ㄥ簱浣�");
+    }
+
+    //鎼滅储绌烘墭鐩樺簱浣�
+    private LocMast getShuttleEmptyLocNo(Integer staDescId, LocTypeDto locTypeDto) {
+        LocMast locMast = null;
+        // 闈犺繎鎽嗘斁瑙勫垯 --- 绌烘墭
+        if (staDescId == 10) {
+            //鍏堝垽鏂伐浣滄。锛屾煡鎵句富妗OType=1锛� wrkSts < 10鐨勫伐浣滄槑缁嗭紝鏂欏彿鐩稿悓鐨勬槑缁嗗簱浣�
+            List<WrkMast> wrkMasts = wrkMastService.selectList(new EntityWrapper<WrkMast>().eq("io_type",10));
+            for (WrkMast wrkMast : wrkMasts) {
+                LocMast locMast0 = locMastService.findNearloc(wrkMast.getLocNo());
+                if (null != locMast0) {
+                    // 娴呭簱浣嶇鍚堝昂瀵告娴�
+                    if (VersionUtils.checkLocType(locMast0, locTypeDto)) {
+                        locMast = locMast0;
+                        break;
+                    }
+                }
+            }
+            if (Cools.isEmpty(locMast)){
+                List<LocMast> locMasts = locMastService.selectList(new EntityWrapper<LocMast>()
+                        .eq("loc_sts", "O").orderBy("row1,bay1,lev1"));
+                if (!locMasts.isEmpty()) {
+                    for (LocMast loc : locMasts) {
+                        LocMast locMast0 = locMastService.findNearloc(loc.getLocNo());
+                        if (null != locMast0) {
+                            // 娴呭簱浣嶇鍚堝昂瀵告娴�
+                            if (VersionUtils.checkLocType(locMast0, locTypeDto)) {
+                                locMast = locMast0;
+                                break;
+                            }
+                        }
+                    }
+                }
+            }
+        }
+
+        return locMast;
+    }
+
+    //娣锋斁鐗╂枡
+    private LocMast getShuttleMixedLocNo(List<String> matNos, LocTypeDto locTypeDto) {
+        LocMast locMast = null;
+        if (matNos.size() > 1) {
+            List<LocMast> locMasts = locMastService.selectAreaEmpty(locTypeDto.getLocType1(), 1);//鎼滅储娣锋斁搴撲綅
+            //娣锋斁鍖哄煙鐩存帴鍙栫涓�涓嵆鍙�
+            for (LocMast mast : locMasts) {
+                // 娴呭簱浣嶇鍚堝昂瀵告娴�
+                if (VersionUtils.checkLocType(mast, locTypeDto)) {
+                    locMast = mast;
+                    break;
+                }
+            }
+        }
+        return locMast;
+    }
+
+    //鍗曞搧鐗╂枡 闈犺繎鎽嗘斁瑙勫垯 --- 鐩稿悓璁㈠崟鍙�, 鍚屽ぉ鍚岃鏍肩墿鏂�
+    private LocMast getShuttleSingleLocNo(List<String> matNos, LocTypeDto locTypeDto) {
+        LocMast locMast = null;
+        if (matNos.size() == 1) {
+            String matNo = matNos.get(0);//鐗╂枡鍙�
+            //鍏堝垽鏂伐浣滄。锛屾煡鎵句富妗OType=1锛� wrkSts < 10鐨勫伐浣滄槑缁嗭紝鏂欏彿鐩稿悓鐨勬槑缁嗗簱浣�
+            List<WrkMast> wrkMasts = wrkMastService.selectSameMatnrs(matNo);
+            for (WrkMast wrkMast : wrkMasts) {
+                LocMast locMast0 = locMastService.findNearloc(wrkMast.getLocNo());
+                if (null != locMast0) {
+                    // 娴呭簱浣嶇鍚堝昂瀵告娴�
+                    if (VersionUtils.checkLocType(locMast0, locTypeDto)) {
+                        locMast = locMast0;
+                    }
+                }
+            }
+            if (Cools.isEmpty(locMast)) {
+                //鍐嶅垽鏂簱瀛樻槑缁嗘。锛屾枡鍙风浉鍚岀殑鏄庣粏搴撲綅
+                List<String> locNos = locDetlService.getSameDetl(matNo);
+                for (String locNo : locNos) {
+                    LocMast locMast0 = locMastService.findInnerLoc(locNo);
+                    if (null != locMast0) {
+                        // 娴呭簱浣嶇鍚堝昂瀵告娴�
+                        if (VersionUtils.checkLocType(locMast0, locTypeDto)) {
+                            locMast = locMast0;
+                            break;
+                        }
+                    }
+                }
+            }
+            if (Cools.isEmpty(locMast)) {
+                //鎵炬柊搴撲綅
+                List<LocMast> locMasts = locMastService.selectAreaEmpty(locTypeDto.getLocType1(), 2);//鎼滅储鍗曞搧搴撲綅
+                for (LocMast mast : locMasts) {
+                    List<String> groupLoc = Utils.getGroupLoc(mast.getLocNo());
+                    if (!locMastService.checkAllLocEmpty(groupLoc)) {
+                        continue;
+                    }
+
+                    LocMast tmp = null;
+                    for (String loc : groupLoc) {
+                        LocMast locMast1 = locMastService.selectByLoc(loc);
+                        if (locMast1 == null) {
+                            continue;
+                        }
+
+                        if (!locMast1.getLocSts().equals("O")) {
+                            continue;
+                        }
+
+                        // 娴呭簱浣嶇鍚堝昂瀵告娴�
+                        if (VersionUtils.checkLocType(locMast1, locTypeDto)) {
+                            tmp = locMast1;
+                            break;
+                        }
+                    }
+                    if (!Cools.isEmpty(tmp)) {
+                        locMast = tmp;
+                        break;
+                    }
+                }
+            }
+            if (Cools.isEmpty(locMast)) {
+                //鍗曞搧鎵句笉鍒板簱浣嶏紝鍏佽灏濊瘯浠庢贩鏀惧尯鍩熶腑杩涜鎼滅储
+                List<LocMast> locMasts2 = locMastService.selectAreaEmpty(locTypeDto.getLocType1(), 1);//鎼滅储娣锋斁搴撲綅
+                //娣锋斁鍖哄煙鐩存帴鍙栫涓�涓嵆鍙�
+                for (LocMast mast : locMasts2) {
+                    // 娴呭簱浣嶇鍚堝昂瀵告娴�
+                    if (VersionUtils.checkLocType(mast, locTypeDto)) {
+                        locMast = mast;
+                        break;
+                    }
+                }
+            }
+        }
+        return locMast;
+    }
+
 }

--
Gitblit v1.9.1