From fc12e6bbc12d0346076fefe7320e99fd14d13193 Mon Sep 17 00:00:00 2001
From: pang.jiabao <pang_jiabao@163.com>
Date: 星期二, 14 四月 2026 11:10:39 +0800
Subject: [PATCH] wms初始化

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

diff --git a/src/main/java/com/zy/common/service/CommonService.java b/src/main/java/com/zy/common/service/CommonService.java
index 0398d40..f6f6785 100644
--- a/src/main/java/com/zy/common/service/CommonService.java
+++ b/src/main/java/com/zy/common/service/CommonService.java
@@ -20,8 +20,8 @@
 import org.springframework.transaction.annotation.Transactional;
 
 import javax.annotation.Resource;
-import java.util.List;
-import java.util.Optional;
+import java.util.*;
+import java.util.stream.Collectors;
 
 /**
  * 璐ф灦鏍稿績鍔熻兘
@@ -448,7 +448,7 @@
         // 鐢熸垚宸ヤ綔鍙�
         int workNo = getWorkNo(0);
         // 杩斿洖dto
-        startupDto.setTaskNo(workNo);
+        startupDto.setWorkNo(workNo);
         startupDto.setCrnNo(crnNo);
         startupDto.setSourceStaNo(sourceStaNo);
         startupDto.setLocNo(locNo);
@@ -893,7 +893,7 @@
         // 鐢熸垚宸ヤ綔鍙�
         int workNo = getWorkNo(0);
         // 杩斿洖dto
-        startupDto.setTaskNo(workNo);
+        startupDto.setWorkNo(workNo);
         startupDto.setCrnNo(crnNo);
         startupDto.setSourceStaNo(sourceStaNo);
         startupDto.setLocNo(locNo);
@@ -1006,7 +1006,7 @@
         // 鐢熸垚宸ヤ綔鍙�
         int workNo = getWorkNo(0);
         // 杩斿洖dto
-        startupDto.setTaskNo(workNo);
+        startupDto.setWorkNo(workNo);
         startupDto.setCrnNo(crnNo);
         startupDto.setSourceStaNo(sourceStaNo);
         startupDto.setLocNo(locNo);
@@ -1034,56 +1034,113 @@
         // 瀵绘壘鍒扮殑搴撲綅
         LocMast locMast = null;
 
-        // 鎸夊簱浣嶇被鍨嬭幏鍙栧簱浣�
-        List<LocMast> locMasts = locMastMapper.selectLocByTypeAndRowsToList(locType,rows);
-
-        // todo 濡傛灉褰撳墠绫诲瀷搴撲綅鍓╀綑涓嶅锛屾槸涓�鐩存斁婊★紝杩樻槸鍏煎鍒颁笅涓�绉嶅簱浣嶇被鍨�
-        // 鑰冭檻绉诲簱闇�瑕佸悓绫诲瀷搴撲綅锛岃繖閲岄檺鍒朵笉鑳芥斁婊★紝鍏煎涓嬩竴绉嶅簱浣嶇被鍨�
-        if (locMasts.size() <= 4) {
-            switch (locType) {
-                case 0:
-                    return getLocNoNew(ioType, sourceStaNo, 1,rows);
-                case 1:
-                    return getLocNoNew(ioType, sourceStaNo, 2,rows);
-                case 2:
-                    return getLocNoNew(ioType, sourceStaNo, 3,rows);
-                case 3:
-                    log.warn("褰撳墠搴撲綅鎺掞細{}锛屽墿浣檣}涓敤浜庣Щ搴擄紝鏃犳硶鍗犵敤",rows,locMasts.size());
-                    return null;
-                default:
-            }
+        // 鍙敤鍫嗗灈鏈�
+        List<BasCrnp> basCrnps = basCrnpService.selectList(new EntityWrapper<BasCrnp>().eq("crn_sts", 3).eq("crn_err", 0).eq("in_enable","Y"));
+        if (basCrnps.size() == 0) {
+            log.error("鍏ュ簱璇锋眰搴撲綅澶辫触锛屾病鏈夎仈鏈哄爢鍨涙満鎴栧爢鍨涙満寮傚父");
+            throw new CoolException("鍏ュ簱璇锋眰搴撲綅澶辫触锛屾病鏈夎仈鏈哄爢鍨涙満鎴栧爢鍨涙満寮傚父");
         }
 
-        // 鍏堝彇娣卞簱浣�
-        Optional<LocMast> first = locMasts.stream().filter(o -> o.getRow1() == 1 || o.getRow1() == 4 || o.getRow1() == 5 || o.getRow1() == 8|| o.getRow1() == 9 || o.getRow1() == 12).findFirst();
-        if (first.isPresent()) {
-            locMast = first.get();
-        } else {
-            // 娣卞簱浣嶉噷闈㈡病鏈変粠娴呭簱浣嶉噷闈㈠彇
-            Optional<LocMast> first2 = locMasts.stream().filter(o -> o.getRow1() == 2 || o.getRow1() == 3 || o.getRow1() == 6 || o.getRow1() == 7 || o.getRow1() == 10 || o.getRow1() == 11).findFirst();
-            if(first2.isPresent()) {
-                locMast = first2.get();
+        // 涓�娆℃煡鎵�鏈夊爢鍨涙満浠诲姟鏁帮紙group by锛�
+        List<Map<String, Object>> countList = locMastMapper.selectMaps(
+                new EntityWrapper<LocMast>()
+                        .setSqlSelect("crn_no, COUNT(*) AS cnt")
+                        .eq("loc_sts", "S")
+                        .in("crn_no", basCrnps.stream().map(BasCrnp::getCrnNo).collect(Collectors.toList()))
+                        .groupBy("crn_no")
+        );
+
+        // 鍫嗗灈鏈哄搴斾换鍔℃暟
+        Map<Integer, Integer> countMap = countList.stream()
+                .collect(Collectors.toMap(
+                        m -> (Integer) m.get("crn_no"),
+                        m -> ((Number) m.get("cnt")).intValue()
+                ));
+
+        // 鎵�鏈夋弧瓒虫潯浠剁殑搴撲綅
+        List<LocMast> allLocs = locMastMapper.selectList(
+                new EntityWrapper<LocMast>()
+                        .eq("loc_type1", locType)
+                        .eq("loc_sts" ,'O')
+                        .in("crn_no", basCrnps.stream().map(BasCrnp::getCrnNo).collect(Collectors.toList()))
+                        .last("ORDER BY CASE WHEN row1 IN (1,4,5,8,9,12) THEN 0 ELSE 1 END, lev1, bay1, row1")
+        );
+
+        // 鎸夊爢鍨涙満鍒嗙粍
+        Map<Integer, List<LocMast>> locMap = allLocs.stream()
+                .collect(Collectors.groupingBy(LocMast::getCrnNo));
+
+        // 鍫嗗灈鏈哄搴斿簱浣嶇被鍨嬬殑鍓╀綑搴撲綅鏁板ぇ浜�4涓殑鍫嗗灈鏈轰繚鐣�
+        List<BasCrnp> availableCrn = basCrnps.stream()
+                .filter(c -> locMap.containsKey(c.getCrnNo()) && locMap.get(c.getCrnNo()).size() > 4)
+                .collect(Collectors.toList());
+
+        if (availableCrn.isEmpty()) {
+            // 閫掑綊鍏煎
+            if (locType >= 3) return null;
+            return getLocNoNew(ioType, sourceStaNo, locType + 1, rows);
+        }
+
+        availableCrn.sort(Comparator.comparing(c -> countMap.getOrDefault(c.getCrnNo(), 0)));
+
+        for (BasCrnp crnp : availableCrn) {
+
+            List<LocMast> locs = locMap.get(crnp.getCrnNo());
+            if (locs == null || locs.isEmpty()) {
+                continue;
+            }
+            Map<String, LocMast> locNoMap = locs.stream()
+                    .collect(Collectors.toMap(LocMast::getLocNo, e -> e));
+            for(LocMast locMast1: locs) {
+                String locNo = locMast1.getLocNo();
+                // 鏄繁搴撲綅
+                if(Utils.isDeepLoc(slaveProperties,locMast1.getLocNo())){
+                    // 鑾峰彇娴呭簱浣�
+                    String shallowLoc = Utils.getShallowLoc(slaveProperties, locNo);
+                    LocMast shallow = locNoMap.get(shallowLoc);
+                    // 娴呭簱浣嶆棤璐�
+                    if (shallow == null) {
+                        locMast = locMast1;
+                        break;
+                    }
+                } else { // 鏄祬搴撲綅锛屽垽鏂繁搴撲綅鏄惁涓虹┖,鏄垯鏀撅紝涓嶆槸鍒欒烦杩�
+                    // 鑾峰彇娣卞簱浣�
+                    String deepLoc = Utils.getDeepLoc(slaveProperties, locNo);
+                    LocMast deep = locNoMap.get(deepLoc);
+                    // 娣卞簱浣嶄笉绌烘斁娣卞簱浣�
+                    if (deep != null) {
+                        locMast = deep;
+                        break;
+                    } else {
+                        locMast = locMast1;
+                        break;
+                    }
+                }
+            }
+            if (locMast != null) {
+                break;
             }
         }
 
         if (locMast == null) {
-            return null;
+            if (locType >= 3) return null;
+            return getLocNoNew(ioType, sourceStaNo, locType + 1, rows);
         }
 
         // 鏍规嵁鍏ュ簱绫诲瀷鍜屾簮绔欑偣鑾峰彇宸ヤ綔璺緞
-//        StaDesc staDesc = staDescService.selectOne(new EntityWrapper<StaDesc>().eq("type_no", ioType).eq("stn_no", sourceStaNo).eq("crn_no",locMast.getCrnNo()));
-//        if (staDesc == null) {
-//            log.error("鑾峰彇宸ヤ綔璺緞寮傚父,绫诲瀷锛歿}锛屾簮绔欑偣锛歿}锛屽簱浣嶏細{}",ioType,sourceStaNo,locMast.getLocNo());
-//            return null;
-//        }
+        StaDesc staDesc = staDescService.selectOne(new EntityWrapper<StaDesc>().eq("type_no", ioType).eq("stn_no", sourceStaNo).eq("crn_no",locMast.getCrnNo()));
+        if (staDesc == null) {
+            log.error("鑾峰彇宸ヤ綔璺緞寮傚父,绫诲瀷锛歿}锛屾簮绔欑偣锛歿}锛屽簱浣嶏細{}",ioType,sourceStaNo,locMast.getLocNo());
+            throw new CoolException("鑾峰彇宸ヤ綔璺緞寮傚父");
+        }
         // 鐢熸垚宸ヤ綔鍙�
         int workNo = getWorkNo(0);
         // 杩斿洖dto
         StartupDto startupDto = new StartupDto();
-        startupDto.setTaskNo(workNo);
+        startupDto.setWorkNo(workNo);
         startupDto.setCrnNo(locMast.getCrnNo());
         startupDto.setSourceStaNo(sourceStaNo);
-        startupDto.setStaNo(0);
+        startupDto.setStaNo(staDesc.getCrnStn());
         startupDto.setLocNo(locMast.getLocNo());
         startupDto.setTaskPri(13D);
 

--
Gitblit v1.9.1