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