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/java/com/zy/common/web/WcsController.java |   55 +++++++++++++++++++++++++++++++++++++++++++++++++------
 1 files changed, 49 insertions(+), 6 deletions(-)

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) {

--
Gitblit v1.9.1