From b591d3396c94e0ca3496d2bac280d106438c75e9 Mon Sep 17 00:00:00 2001
From: Junjie <540245094@qq.com>
Date: 星期六, 17 八月 2024 09:37:35 +0800
Subject: [PATCH] #

---
 zy-asrs-wms/src/main/java/com/zy/asrs/wms/utils/CodeBuilder.java                     |    4 
 zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/service/impl/WorkServiceImpl.java     |  154 +++++++++++++++++++++++++++-----------
 zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/entity/enums/ShelvesRuleDetlType.java |   19 ++++
 zy-asrs-wms/src/main/java/com/zy/asrs/wms/utils/LocUtils.java                        |   28 ++++++-
 zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/entity/LanewayRule.java               |   17 ++-
 5 files changed, 166 insertions(+), 56 deletions(-)

diff --git a/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/entity/LanewayRule.java b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/entity/LanewayRule.java
index 2939aae..6b39ea5 100644
--- a/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/entity/LanewayRule.java
+++ b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/entity/LanewayRule.java
@@ -3,7 +3,7 @@
 import com.alibaba.fastjson.JSON;
 import com.baomidou.mybatisplus.annotation.TableLogic;
 import java.text.SimpleDateFormat;
-import java.util.Date;
+import java.util.*;
 
 import com.zy.asrs.wms.system.entity.Host;
 import com.zy.asrs.wms.system.entity.User;
@@ -26,7 +26,6 @@
 
 import java.io.Serializable;
 import java.util.Date;
-import java.util.List;
 
 @Data
 @TableName("strategy_laneway_rule")
@@ -139,19 +138,25 @@
 //    );
 
     public List<Integer> getLaneX$() {
-        if (null == this.laneX){ return null; }
+        if (null == this.laneX){ return new ArrayList<>(); }
+        if (Cools.isEmpty(this.laneX)) {
+            return new ArrayList<>();
+        }
         List<Integer> list = JSON.parseArray(this.laneX, Integer.class);
         if (list.isEmpty()) {
-            return null;
+            return new ArrayList<>();
         }
         return list;
     }
 
     public List<Integer> getLaneY$() {
-        if (null == this.laneY){ return null; }
+        if (null == this.laneY){ return new ArrayList<>(); }
+        if (Cools.isEmpty(this.laneY)) {
+            return new ArrayList<>();
+        }
         List<Integer> list = JSON.parseArray(this.laneY, Integer.class);
         if (list.isEmpty()) {
-            return null;
+            return new ArrayList<>();
         }
         return list;
     }
diff --git a/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/entity/enums/ShelvesRuleDetlType.java b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/entity/enums/ShelvesRuleDetlType.java
new file mode 100644
index 0000000..4ae473b
--- /dev/null
+++ b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/entity/enums/ShelvesRuleDetlType.java
@@ -0,0 +1,19 @@
+package com.zy.asrs.wms.asrs.entity.enums;
+
+public enum ShelvesRuleDetlType {
+
+    TASK_OR_LOC(1, "搴撳瓨鎴栦换鍔′腑鍖归厤鐩搁偦搴撲綅"),
+    SUGGEST(2, "鎺ㄨ崘鍖哄煙"),
+    COMPLETE(3, "瀹屾暣宸烽亾"),
+    ;
+
+
+    public Integer id;
+    public String desc;
+
+    ShelvesRuleDetlType(Integer id, String desc) {
+        this.id = id;
+        this.desc = desc;
+    }
+
+}
diff --git a/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/service/impl/WorkServiceImpl.java b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/service/impl/WorkServiceImpl.java
index 1c6c199..e015d14 100644
--- a/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/service/impl/WorkServiceImpl.java
+++ b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/service/impl/WorkServiceImpl.java
@@ -5,6 +5,7 @@
 import com.zy.asrs.wms.asrs.entity.*;
 import com.zy.asrs.wms.asrs.entity.enums.LocStsType;
 import com.zy.asrs.wms.asrs.entity.enums.OrderSettleType;
+import com.zy.asrs.wms.asrs.entity.enums.ShelvesRuleDetlType;
 import com.zy.asrs.wms.asrs.entity.param.GeneratePakInParam;
 import com.zy.asrs.wms.asrs.service.*;
 import com.zy.asrs.wms.utils.LocUtils;
@@ -45,6 +46,10 @@
     private TaskDetlFieldLogService taskDetlFieldLogService;
     @Autowired
     private LocUtils locUtils;
+    @Autowired
+    private ShelvesRuleService shelvesRuleService;
+    @Autowired
+    private LanewayRuleService lanewayRuleService;
 
     @Override
     public String generateTaskNo(Long taskType) {
@@ -60,31 +65,62 @@
 
     @Override
     public Loc generateEmptyLoc(Long taskType, Integer locTypeHeight) {
-        Loc defaultLoc = null;
-
-        //1.浠庡簱瀛樻垨浠诲姟涓尮閰嶇浉閭诲簱浣�
-        defaultLoc = locUtils.getNeighborEmptyLoc(taskType, locTypeHeight);
-        if (defaultLoc != null) {
-            return defaultLoc;
+        List<ShelvesRule> shelvesRules = shelvesRuleService.list(new LambdaQueryWrapper<ShelvesRule>().eq(ShelvesRule::getStatus, 1).orderByDesc(ShelvesRule::getCreateTime));
+        if(shelvesRules.isEmpty()) {
+            throw new CoolException("鏈厤缃笂鏋惰鍒�");
         }
-
-        //2.鑾峰彇鎺ㄨ崘搴撲綅
-        List<Loc> suggestLoc = locUtils.getSuggestEmptyLoc(taskType, locTypeHeight);
-        //鑾峰彇搴撲綅
-        if (!suggestLoc.isEmpty()) {
-            defaultLoc = locUtils.filterLoc(taskType, suggestLoc);
-            if(defaultLoc != null) {
-                return defaultLoc;
+        ShelvesRule shelvesRule = shelvesRules.get(0);
+        //鍙敤宸烽亾
+        List<Long> laneList = shelvesRule.getLaneList();
+        //鍙敤宸烽亾Row
+        List<Integer> laneRowList = new ArrayList<>();
+        if (laneList != null) {
+            //鑾峰彇宸烽亾
+            List<LanewayRule> lanewayRules = lanewayRuleService.listByIds(laneList);
+            for (LanewayRule lanewayRule : lanewayRules) {
+                laneRowList.addAll(lanewayRule.getLaneX$());
+                laneRowList.addAll(lanewayRule.getLaneY$());
             }
         }
 
-        //3.浠庡叏灞�搴撲綅涓幏鍙�(瀹屾暣宸烽亾)
-        List<Loc> globalLoc = locUtils.getGlobalEmptyLoc(taskType, locTypeHeight);
-        //鑾峰彇搴撲綅
-        if (!globalLoc.isEmpty()) {
-            defaultLoc = locUtils.filterAllLoc(globalLoc);
-            if(defaultLoc != null) {
-                return defaultLoc;
+        List<ShelvesRuleDetl> ruleDetls = shelvesRule.getRuleDetl$();
+        if(ruleDetls.isEmpty()) {
+            throw new CoolException("鏈厤缃笂鏋惰鍒欐槑缁�");
+        }
+
+        Loc defaultLoc = null;
+
+        for (ShelvesRuleDetl ruleDetl : ruleDetls) {
+            if (ruleDetl.getDetlType().equals(ShelvesRuleDetlType.TASK_OR_LOC.id)) {
+                //浠庡簱瀛樻垨浠诲姟涓尮閰嶇浉閭诲簱浣�
+                defaultLoc = locUtils.getNeighborEmptyLoc(taskType, locTypeHeight);
+                if (defaultLoc != null) {
+                    return defaultLoc;
+                }
+            }
+
+            if (ruleDetl.getDetlType().equals(ShelvesRuleDetlType.SUGGEST.id)) {
+                //鑾峰彇鎺ㄨ崘搴撲綅
+                List<Loc> suggestLoc = locUtils.getSuggestEmptyLoc(taskType, locTypeHeight, laneRowList);
+                //鑾峰彇搴撲綅
+                if (!suggestLoc.isEmpty()) {
+                    defaultLoc = locUtils.filterLoc(taskType, suggestLoc);
+                    if(defaultLoc != null) {
+                        return defaultLoc;
+                    }
+                }
+            }
+
+            if (ruleDetl.getDetlType().equals(ShelvesRuleDetlType.COMPLETE.id)) {
+                //浠庡叏灞�搴撲綅涓幏鍙�(瀹屾暣宸烽亾)
+                List<Loc> globalLoc = locUtils.getGlobalEmptyLoc(taskType, locTypeHeight, laneRowList);
+                //鑾峰彇搴撲綅
+                if (!globalLoc.isEmpty()) {
+                    defaultLoc = locUtils.filterAllLoc(globalLoc);
+                    if(defaultLoc != null) {
+                        return defaultLoc;
+                    }
+                }
             }
         }
 
@@ -109,34 +145,64 @@
             throw new CoolException("鍟嗗搧涓嶅瓨鍦�");
         }
 
+        List<ShelvesRule> shelvesRules = shelvesRuleService.list(new LambdaQueryWrapper<ShelvesRule>().eq(ShelvesRule::getStatus, 1).orderByDesc(ShelvesRule::getCreateTime));
+        if(shelvesRules.isEmpty()) {
+            throw new CoolException("鏈厤缃笂鏋惰鍒�");
+        }
+        ShelvesRule shelvesRule = shelvesRules.get(0);
+        //鍙敤宸烽亾
+        List<Long> laneList = shelvesRule.getLaneList();
+        //鍙敤宸烽亾Row
+        List<Integer> laneRowList = new ArrayList<>();
+        if (laneList != null) {
+            //鑾峰彇宸烽亾
+            List<LanewayRule> lanewayRules = lanewayRuleService.listByIds(laneList);
+            for (LanewayRule lanewayRule : lanewayRules) {
+                laneRowList.addAll(lanewayRule.getLaneX$());
+                laneRowList.addAll(lanewayRule.getLaneY$());
+            }
+        }
+
+        List<ShelvesRuleDetl> ruleDetls = shelvesRule.getRuleDetl$();
+        if(ruleDetls.isEmpty()) {
+            throw new CoolException("鏈厤缃笂鏋惰鍒欐槑缁�");
+        }
+
         Loc defaultLoc = null;
 
-        //1.浠庡簱瀛樻垨浠诲姟涓尮閰嶇浉閭诲簱浣�
-        defaultLoc = locUtils.getNeighborLoc(taskType, detl, locTypeHeight);
-        if (defaultLoc != null) {
-            return defaultLoc;
-        }
+        for (ShelvesRuleDetl ruleDetl : ruleDetls) {
+            if (ruleDetl.getDetlType().equals(ShelvesRuleDetlType.TASK_OR_LOC.id)) {
+                //浠庡簱瀛樻垨浠诲姟涓尮閰嶇浉閭诲簱浣�
+                defaultLoc = locUtils.getNeighborLoc(taskType, detl, locTypeHeight);
+                if (defaultLoc != null) {
+                    return defaultLoc;
+                }
+            }
 
-        //2.鑾峰彇鎺ㄨ崘搴撲綅
-        List<Loc> suggestLoc = locUtils.getSuggestLoc(taskType, mat.getId(), detl.getBatch(), locTypeHeight);
-        //鑾峰彇搴撲綅
-        if (!suggestLoc.isEmpty()) {
-            defaultLoc = locUtils.filterLoc(taskType, suggestLoc);
-            if(defaultLoc != null) {
-                return defaultLoc;
+            if (ruleDetl.getDetlType().equals(ShelvesRuleDetlType.SUGGEST.id)) {
+                //鑾峰彇鎺ㄨ崘搴撲綅
+                List<Loc> suggestLoc = locUtils.getSuggestLoc(taskType, mat.getId(), detl.getBatch(), locTypeHeight, laneRowList);
+                //鑾峰彇搴撲綅
+                if (!suggestLoc.isEmpty()) {
+                    defaultLoc = locUtils.filterLoc(taskType, suggestLoc);
+                    if(defaultLoc != null) {
+                        return defaultLoc;
+                    }
+                }
+            }
+
+            if (ruleDetl.getDetlType().equals(ShelvesRuleDetlType.COMPLETE.id)) {
+                //浠庡叏灞�搴撲綅涓幏鍙�(瀹屾暣宸烽亾)
+                List<Loc> globalLoc = locUtils.getGlobalLoc(taskType, locTypeHeight, laneRowList);
+                //鑾峰彇搴撲綅
+                if (!globalLoc.isEmpty()) {
+                    defaultLoc = locUtils.filterAllLoc(globalLoc);
+                    if(defaultLoc != null) {
+                        return defaultLoc;
+                    }
+                }
             }
         }
-
-        //3.浠庡叏灞�搴撲綅涓幏鍙�(瀹屾暣宸烽亾)
-        List<Loc> globalLoc = locUtils.getGlobalLoc(taskType, locTypeHeight);
-        //鑾峰彇搴撲綅
-        if (!globalLoc.isEmpty()) {
-            defaultLoc = locUtils.filterAllLoc(globalLoc);
-            if(defaultLoc != null) {
-                return defaultLoc;
-            }
-        }
-
         return defaultLoc;
     }
 
diff --git a/zy-asrs-wms/src/main/java/com/zy/asrs/wms/utils/CodeBuilder.java b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/utils/CodeBuilder.java
index 0964bf1..bb802d2 100644
--- a/zy-asrs-wms/src/main/java/com/zy/asrs/wms/utils/CodeBuilder.java
+++ b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/utils/CodeBuilder.java
@@ -22,8 +22,8 @@
 //        generator.username="sa";
 //        generator.password="Zoneyung@zy56$";
 
-        generator.table="strategy_shelves_rule";
-        generator.tableName="涓婃灦瑙勫垯";
+        generator.table="strategy_shelves_rule_detl";
+        generator.tableName="涓婃灦瑙勫垯鏄庣粏";
         generator.rootPackagePath="com.zy.asrs.wms";
         generator.packagePath="com.zy.asrs.wms.asrs";
 
diff --git a/zy-asrs-wms/src/main/java/com/zy/asrs/wms/utils/LocUtils.java b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/utils/LocUtils.java
index 06d9e13..1312609 100644
--- a/zy-asrs-wms/src/main/java/com/zy/asrs/wms/utils/LocUtils.java
+++ b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/utils/LocUtils.java
@@ -80,7 +80,7 @@
     }
 
     //鑾峰彇鎺ㄨ崘搴撲綅(婊℃墭鐩�)
-    public List<Loc> getSuggestLoc(Long taskType, Long matId, String batch, Integer locTypeHeight) {
+    public List<Loc> getSuggestLoc(Long taskType, Long matId, String batch, Integer locTypeHeight, List<Integer> laneRowList) {
         //婊℃墭鐩�
         List<Loc> locs = new ArrayList<>();
         LocTypeHeightType locTypeHeightType = LocTypeHeightType.get(locTypeHeight);
@@ -109,6 +109,11 @@
             queryWrapper.le(Loc::getLev1, suggestLocRule.getTargetLev());
             queryWrapper.eq(Loc::getLocStsId, LocStsType.O.val());
             queryWrapper.in(Loc::getId, locIdList);
+
+            if (laneRowList != null && !laneRowList.isEmpty()) {
+                queryWrapper.in(Loc::getRow1, laneRowList);
+            }
+
             List<Loc> list = locService.list(queryWrapper);
             if (!list.isEmpty()) {
                 locs.addAll(list);
@@ -118,7 +123,7 @@
     }
 
     //鑾峰彇鍏ㄥ眬搴撲綅(瀹屾暣宸烽亾)
-    public List<Loc> getGlobalLoc(Long taskType, Integer locTypeHeight) {
+    public List<Loc> getGlobalLoc(Long taskType, Integer locTypeHeight, List<Integer> laneRowList) {
         List<Loc> locs = new ArrayList<>();
         LocTypeHeightType locTypeHeightType = LocTypeHeightType.get(locTypeHeight);
         if (locTypeHeightType == null) {
@@ -132,6 +137,11 @@
         LambdaQueryWrapper<Loc> queryWrapper = new LambdaQueryWrapper<>();
         queryWrapper.eq(Loc::getLocStsId, LocStsType.O.val());
         queryWrapper.in(Loc::getId, locIdList);
+
+        if (laneRowList != null && !laneRowList.isEmpty()) {
+            queryWrapper.in(Loc::getRow1, laneRowList);
+        }
+
         List<Loc> list = locService.list(queryWrapper);
         if (!list.isEmpty()) {
             locs.addAll(list);
@@ -270,7 +280,7 @@
     }
 
     //鑾峰彇鎺ㄨ崘搴撲綅(绌烘墭鐩�)
-    public List<Loc> getSuggestEmptyLoc(Long taskType, Integer locTypeHeight) {
+    public List<Loc> getSuggestEmptyLoc(Long taskType, Integer locTypeHeight, List<Integer> laneRowList) {
         List<Loc> locs = new ArrayList<>();
         //绌烘墭鐩�
         List<SuggestLocRule> suggestLocRules = suggestLocRuleService.list(new LambdaQueryWrapper<SuggestLocRule>().eq(SuggestLocRule::getLocType, 0));
@@ -283,6 +293,11 @@
             queryWrapper.ge(Loc::getLev1, suggestLocRule.getStartLev());
             queryWrapper.le(Loc::getLev1, suggestLocRule.getTargetLev());
             queryWrapper.eq(Loc::getLocStsId, LocStsType.O.val());
+
+            if (laneRowList != null && !laneRowList.isEmpty()) {
+                queryWrapper.in(Loc::getRow1, laneRowList);
+            }
+
             List<Loc> list = locService.list(queryWrapper);
             if (!list.isEmpty()) {
                 locs.addAll(list);
@@ -292,7 +307,7 @@
     }
 
     //鑾峰彇鍏ㄥ眬搴撲綅(瀹屾暣宸烽亾)
-    public List<Loc> getGlobalEmptyLoc(Long taskType, Integer locTypeHeight) {
+    public List<Loc> getGlobalEmptyLoc(Long taskType, Integer locTypeHeight, List<Integer> laneRowList) {
         List<Loc> locs = new ArrayList<>();
         LocTypeHeightType locTypeHeightType = LocTypeHeightType.get(locTypeHeight);
         if (locTypeHeightType == null) {
@@ -306,6 +321,11 @@
         LambdaQueryWrapper<Loc> queryWrapper = new LambdaQueryWrapper<>();
         queryWrapper.eq(Loc::getLocStsId, LocStsType.O.val());
         queryWrapper.in(Loc::getId, locIdList);
+
+        if (laneRowList != null && !laneRowList.isEmpty()) {
+            queryWrapper.in(Loc::getRow1, laneRowList);
+        }
+
         List<Loc> list = locService.list(queryWrapper);
         if (!list.isEmpty()) {
             locs.addAll(list);

--
Gitblit v1.9.1