From 5144715ea4f275375c439cc3fe59253202425198 Mon Sep 17 00:00:00 2001
From: pang.jiabao <pang_jiabao@163.com>
Date: 星期二, 28 四月 2026 16:17:06 +0800
Subject: [PATCH] 1号堆垛机摆放逻辑先深后浅改为正常层列排递增

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

diff --git a/src/main/java/com/zy/common/service/CommonService.java b/src/main/java/com/zy/common/service/CommonService.java
index dce1bc3..e43f03f 100644
--- a/src/main/java/com/zy/common/service/CommonService.java
+++ b/src/main/java/com/zy/common/service/CommonService.java
@@ -166,12 +166,14 @@
         return null;
     }
 
+    private final Object locLock = new Object();
+
     @Transactional(propagation = Propagation.REQUIRED)
     public StartupDto getLocNoNew(Integer staDescId, Integer sourceStaNo, FindLocNoAttributeVo findLocNoAttributeVo, int locArea) {
 
         // 鐩爣搴撲綅
         LocMast locMast;
-
+        synchronized (locLock) {
         // 鍏ョ┖妗跺簱
         if (staDescId == 1 && locArea == 2) {
             Config config = configService.selectOne(new EntityWrapper<Config>().eq("code", "emptyBucketInCacheCount").eq("status", 1));
@@ -192,7 +194,12 @@
 
 //            if (wrkMastList.size() == 0) {
                 // 鍙栨柊搴撲綅缁勭殑绗竴涓簱浣�
-                List<LocMast> locMasts = locMastService.selectList(new EntityWrapper<LocMast>().eq("crn_no", 4).eq("loc_sts", "O"));
+            Wrapper<LocMast> wrapper = new EntityWrapper<LocMast>().eq("crn_no", 4).eq("loc_sts", "O");
+            String model = findLocNoAttributeVo.getModel(); // 褰撳墠妗剁被鍨�
+            if (model.equals("IBC")) { // 鏈�涓婇潰涓�灞傚彧鑳芥斁208L
+                wrapper.ne("lev1", 11);
+            }
+            List<LocMast> locMasts = locMastService.selectList(wrapper);
                 List<LocMast> collect = locMasts.stream().filter(locMast1 -> locMast1.getRow1() == 9 || locMast1.getRow1() == 11).collect(Collectors.toList());
                 List<LocMast> collect1 = locMasts.stream().filter(locMast1 -> locMast1.getRow1() == 10 || locMast1.getRow1() == 12).collect(Collectors.toList()); // 绗竴涓厛鏀捐繖涓ゆ帓
                 if (collect.size() - wrkMastList.size() <= 0 && collect1.size()  - wrkMastList.size() <= 0) {
@@ -362,11 +369,18 @@
                 basCrnp.setWrkNo(count);
                 basCrnpList.add(basCrnp);
             }
+            final String sortByType;
+            Config config = configService.selectOne(new EntityWrapper<Config>().eq("code", "inLocCrn1PriorityAssign").eq("status", 1));
+            if (!Cools.isEmpty(config.getValue()) && config.getValue().equals("Y")) {
+                sortByType = "asc"; // 瀹氫箟 1 鈫� 2 鈫� 3 鐨勪紭鍏堢骇
+            } else {
+                sortByType = "other"; // 瀹氫箟 2 鈫� 3 鈫� 1 鐨勪紭鍏堢骇
+            }
 
             basCrnpList = basCrnpList.stream().sorted(Comparator.comparing(BasCrnp::getWrkNo).thenComparing(BasCrnp::getCrnNo,((o1, o2) -> {
                 // 瀹氫箟 2 鈫� 3 鈫� 1 鐨勪紭鍏堢骇
-                int order1 = getCustomOrder(o1);
-                int order2 = getCustomOrder(o2);
+                int order1 = getCustomOrder(o1,sortByType);
+                int order2 = getCustomOrder(o2,sortByType);
                 return Integer.compare(order1, order2);
             }))).collect(Collectors.toList());
 
@@ -383,25 +397,29 @@
                 if (model == null || !model.equals("208L")) {
                     wrapper.ne("lev1", 11);
                 }
-                if (crnNo == 1) {
-                    wrapper.in("row1", 1, 4);
+//                if (crnNo == 1) {
+//                    wrapper.in("row1", 1, 4);
+//                }
+                int count = locMastService.selectCount(wrapper);
+                if (crnNo == 1 && count <= 4) {
+                    continue;
                 }
                 locMast = locMastService.selectOne(wrapper);
                 if (locMast != null) {
                     break;
                 }
                 // 娣卞簱浣嶆病鏈変簡鍒欒幏鍙栦竴涓祬搴撲綅
-                if (crnNo == 1) {
-                    locMast = locMastService.selectOne(wrapper.in("row1", 2, 3));
-                    if (locMast != null) {
-                        int count = locMastService.selectCount(wrapper);
-                        if (count <= 10) {
-                            locMast = null;
-                        } else {
-                            break;
-                        }
-                    }
-                }
+//                if (crnNo == 1) {
+//                    locMast = locMastService.selectOne(wrapper.in("row1", 2, 3));
+//                    if (locMast != null) {
+//                        int count = locMastService.selectCount(wrapper);
+//                        if (count <= 10) {
+//                            locMast = null;
+//                        } else {
+//                            break;
+//                        }
+//                    }
+//                }
             }
 
             if (locMast == null) {
@@ -438,15 +456,26 @@
         startupDto.setSourceStaNo(sourceStaNo);
         startupDto.setLocNo(locMast.getLocNo());
         return startupDto;
+        }
     }
 
     // 杈呭姪鏂规硶锛氬畾涔� crn_no 鐨勬帓搴忎紭鍏堢骇
-    private static int getCustomOrder(Integer crnNo) {
-        switch (crnNo) {
-            case 2: return 1;  // 2 鎺掔涓�
-            case 3: return 2;  // 3 鎺掔浜�
-            case 1: return 3;  // 1 鎺掔涓�
-            default: return 4; // 鍏朵粬鍊兼帓鏈�鍚庯紙濡傛灉鏈夛級
+    private static int getCustomOrder(Integer crnNo, String sort) {
+        switch (sort) {
+            case "other":
+                switch (crnNo) {
+                    case 2:
+                        return 1;  // 2 鎺掔涓�
+                    case 3:
+                        return 2;  // 3 鎺掔浜�
+                    case 1:
+                        return 3;  // 1 鎺掔涓�
+                    default:
+                        return 4; // 鍏朵粬鍊兼帓鏈�鍚庯紙濡傛灉鏈夛級
+                }
+            case "asc":
+            default:
+                return crnNo;
         }
     }
 

--
Gitblit v1.9.1