From 5509bb7a46ae4bf26a7b00e9d9f17ab7a0ab94dd Mon Sep 17 00:00:00 2001
From: pang.jiabao <pang_jiabao@163.com>
Date: 星期日, 20 七月 2025 22:14:38 +0800
Subject: [PATCH] 成品库出入库优化堆垛机分配

---
 src/main/resources/mapper/LocMastMapper.xml            |   15 -------
 src/main/java/com/zy/asrs/mapper/LocMastMapper.java    |    7 ---
 src/main/java/com/zy/common/web/WcsController.java     |   55 ++++++++++++++++++++++++---
 src/main/java/com/zy/common/service/CommonService.java |   19 ++++++++-
 4 files changed, 66 insertions(+), 30 deletions(-)

diff --git a/src/main/java/com/zy/asrs/mapper/LocMastMapper.java b/src/main/java/com/zy/asrs/mapper/LocMastMapper.java
index fcabff3..80c9b20 100644
--- a/src/main/java/com/zy/asrs/mapper/LocMastMapper.java
+++ b/src/main/java/com/zy/asrs/mapper/LocMastMapper.java
@@ -63,11 +63,4 @@
      */
     String findFirstFrozenLocNo(@Param("locNoList") List<String> locNoList);
 
-    /**
-     * 鏍规嵁鎸囧畾搴撲綅鎺掑彿鍜屽簱浣嶇姸鎬佽幏鍙栦竴涓弧瓒虫潯浠剁殑搴撲綅
-     * @param rowList 鎺掑彿闆嗗悎(涓虹┖鍒欐煡璇㈡墍鏈夋帓)
-     * @param locType 绌烘嫋绫诲瀷
-     * @return 搴撲綅
-     */
-    LocMast queryLocMasterByLocStsAndRow(@Param("rowList") List<Integer> rowList,@Param("locType") String locType);
 }
diff --git a/src/main/java/com/zy/common/service/CommonService.java b/src/main/java/com/zy/common/service/CommonService.java
index 8c149c2..4a39889 100644
--- a/src/main/java/com/zy/common/service/CommonService.java
+++ b/src/main/java/com/zy/common/service/CommonService.java
@@ -329,7 +329,7 @@
             // 鍏ユ垚鍝佸簱鎽嗘斁瑙勫垯 鍒ゆ柇鍙敤鍫嗗灈鏈鸿嚜鍔�-鏃犳姤璀� 鎸夊眰鍒楁帓椤哄簭浠庝笅寰�涓婏紝浠庡墠寰�鍚庢帓 鍏堟繁搴撲綅鍦ㄦ祬搴撲綅 鏈�涓婇潰涓�灞傚彧鑳芥斁208L妗�(鍓╀綑搴撲綅杈惧埌涓�涓槇鍊�208L灏卞厛浠庢渶涓婇潰寮�濮嬫斁锛屼笅闈㈢暀缁欏叾浠栬揣鐗�-鍚庣画浼樺寲)
 
             List<BasCrnp> basCrnps = basCrnpService.selectList(new EntityWrapper<BasCrnp>().eq("crn_sts", 3).eq("crn_err", 0).in("crn_no",1,2,3)
-                    .eq("in_enable","Y").orderBy("crn_no",false));
+                    .eq("in_enable","Y"));
             if (basCrnps.size() == 0) {
                 log.error("鍏ュ簱璇锋眰搴撲綅澶辫触锛屾病鏈夎仈鏈哄爢鍨涙満鎴栧爢鍨涙満寮傚父");
                 throw new CoolException("鍏ュ簱璇锋眰搴撲綅澶辫触锛屾病鏈夎仈鏈哄爢鍨涙満鎴栧爢鍨涙満寮傚父");
@@ -342,7 +342,12 @@
                 basCrnpList.add(basCrnp);
             }
 
-            basCrnpList = basCrnpList.stream().sorted(Comparator.comparing(BasCrnp::getWrkNo)).collect(Collectors.toList());
+            basCrnpList = basCrnpList.stream().sorted(Comparator.comparing(BasCrnp::getWrkNo).thenComparing(BasCrnp::getCrnNo,((o1, o2) -> {
+                // 瀹氫箟 2 鈫� 3 鈫� 1 鐨勪紭鍏堢骇
+                int order1 = getCustomOrder(o1);
+                int order2 = getCustomOrder(o2);
+                return Integer.compare(order1, order2);
+            }))).collect(Collectors.toList());
 
             // 鍏ュ簱妗跺瀷
             String model = findLocNoAttributeVo.getModel();
@@ -414,6 +419,16 @@
         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; // 鍏朵粬鍊兼帓鏈�鍚庯紙濡傛灉鏈夛級
+        }
+    }
+
     @Transactional(propagation = Propagation.REQUIRED)
     public StartupDto getLocNo(SearchLocParam param, Integer staNo) {
 
diff --git a/src/main/java/com/zy/common/web/WcsController.java b/src/main/java/com/zy/common/web/WcsController.java
index 5953a14..1f22cba 100644
--- a/src/main/java/com/zy/common/web/WcsController.java
+++ b/src/main/java/com/zy/common/web/WcsController.java
@@ -10,6 +10,7 @@
 import com.zy.asrs.entity.param.EmptyPlateOutParam;
 import com.zy.asrs.entity.param.StockOutParam;
 import com.zy.asrs.entity.result.FindLocNoAttributeVo;
+import com.zy.asrs.mapper.BasCrnpMapper;
 import com.zy.asrs.mapper.LocMastMapper;
 import com.zy.asrs.mapper.WrkMastMapper;
 import com.zy.asrs.service.*;
@@ -28,6 +29,7 @@
 
 import javax.annotation.Resource;
 import java.util.*;
+import java.util.stream.Collectors;
 
 /**
  * Created by vincent on 2020/10/30
@@ -67,6 +69,18 @@
 
     @Resource
     private WrkMastMapper wrkMastMapper;
+
+    @Resource
+    private BasCrnpMapper basCrnpMapper;
+
+    public static final Map<Integer,ArrayList<Integer>> crnOutSite;
+
+    static {
+        crnOutSite = new HashMap<>();
+        crnOutSite.put(1,new ArrayList<Integer>(){{add(1091);add(1092);add(1093);}});
+        crnOutSite.put(2,new ArrayList<Integer>(){{add(1097);add(1098);add(1099);}});
+        crnOutSite.put(3,new ArrayList<Integer>(){{add(1105);add(1106);add(1107);}});
+    }
 
     @PostMapping("/pakin/loc/v1")
     @ResponseBody
@@ -698,14 +712,43 @@
         // 鍑哄簱绔欑偣
         Integer site = Integer.valueOf(emptyPalletSite.get("site"));
 
-        LocMast locMast;
+        LocMast locMast = null;
 
-        // 鍏堟壘娴呭簱浣�
-        locMast = locMastMapper.queryLocMasterByLocStsAndRow(Arrays.asList(2,3,5,6,7,8), type);
+        List<BasCrnp> basCrnps = basCrnpMapper.selectList(new EntityWrapper<BasCrnp>().eq("crn_sts", 3).eq("crn_err", 0).in("crn_no",1,2,3)
+                .eq("out_enable","Y"));
+        if (basCrnps.size() == 0) {
+            log.error("绌烘嫋鍑哄簱璇锋眰搴撲綅澶辫触锛屾病鏈夎仈鏈哄爢鍨涙満鎴栧爢鍨涙満寮傚父");
+            throw new CoolException("绌烘嫋鍑哄簱璇锋眰搴撲綅澶辫触锛屾病鏈夎仈鏈哄爢鍨涙満鎴栧爢鍨涙満寮傚父");
+        }
 
-        // 娴呭簱浣嶆病鏈夊垯鏌ヨ鎵�鏈�
-        if (locMast == null) {
-            locMast = locMastMapper.queryLocMasterByLocStsAndRow(null, type);
+        List<BasCrnp> basCrnpList = new ArrayList<>();
+        for(BasCrnp basCrnp: basCrnps) {
+            List<BasDevp> devps = basDevpService.selectList(new EntityWrapper<BasDevp>().in("dev_no", crnOutSite.get(basCrnp.getCrnNo())).ne("wrk_no", 0));
+            long count = devps.stream().map(BasDevp::getWrkNo).distinct().count();
+            basCrnp.setWrkNo(count + basCrnp.getWrkNo() >= 5001 && basCrnp.getWrkNo() <= 9000 ? 1 : 0);
+            basCrnpList.add(basCrnp);
+        }
+
+        basCrnpList = basCrnpList.stream().sorted(Comparator.comparing(BasCrnp::getWrkNo).thenComparing(BasCrnp::getCrnNo,Comparator.reverseOrder())).collect(Collectors.toList());
+
+        for(BasCrnp basCrnp:basCrnpList) {
+            Integer crnNo = basCrnp.getCrnNo();
+            Wrapper<LocMast> wrapper = new EntityWrapper<LocMast>().eq("loc_sts", type)
+                    .eq("crn_no", crnNo).orderBy("lev1").orderBy("bay1").orderBy("row1");
+            if (crnNo == 1) {
+                wrapper.in("row1", 1, 4);
+            }
+            locMast = locMastService.selectOne(wrapper);
+            if (locMast != null) {
+                break;
+            }
+            // 娣卞簱浣嶆病鏈変簡鍒欒幏鍙栦竴涓祬搴撲綅
+            if (crnNo == 1) {
+                locMast = locMastService.selectOne(wrapper.in("row1", 2, 3));
+                if (locMast != null) {
+                    break;
+                }
+            }
         }
 
         if (locMast == null) {
diff --git a/src/main/resources/mapper/LocMastMapper.xml b/src/main/resources/mapper/LocMastMapper.xml
index 65bb57f..cae15d0 100644
--- a/src/main/resources/mapper/LocMastMapper.xml
+++ b/src/main/resources/mapper/LocMastMapper.xml
@@ -203,20 +203,5 @@
             #{item}
         </foreach>
     </select>
-    <select id="queryLocMasterByLocStsAndRow" resultMap="BaseResultMap">
-        select
-        top 1 *
-        from
-        asr_loc_mast alm inner join asr_bas_crnp abc on alm.crn_no = abc.crn_no
-        where
-        alm.loc_sts = #{locType} and abc.crn_err = 0 and abc.crn_sts = 3
-        <if test="rowList != null and !rowList.isEmpty()">
-            and alm.row1 in
-            <foreach collection="rowList" item="item" open="(" close=")" separator=",">
-                #{item}
-            </foreach>
-        </if>
-        order by alm.crn_no desc,lev1,bay1,row1
-    </select>
 
 </mapper>

--
Gitblit v1.9.1