zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/entity/LanewayRule.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/entity/enums/ShelvesRuleDetlType.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/service/impl/WorkServiceImpl.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
zy-asrs-wms/src/main/java/com/zy/asrs/wms/utils/CodeBuilder.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
zy-asrs-wms/src/main/java/com/zy/asrs/wms/utils/LocUtils.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
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; } zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/entity/enums/ShelvesRuleDetlType.java
New file @@ -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; } } 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,16 +65,43 @@ @Override public Loc generateEmptyLoc(Long taskType, Integer locTypeHeight) { 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.从库存或任务中匹配相邻库位 for (ShelvesRuleDetl ruleDetl : ruleDetls) { if (ruleDetl.getDetlType().equals(ShelvesRuleDetlType.TASK_OR_LOC.id)) { //从库存或任务中匹配相邻库位 defaultLoc = locUtils.getNeighborEmptyLoc(taskType, locTypeHeight); if (defaultLoc != null) { return defaultLoc; } } //2.获取推荐库位 List<Loc> suggestLoc = locUtils.getSuggestEmptyLoc(taskType, locTypeHeight); if (ruleDetl.getDetlType().equals(ShelvesRuleDetlType.SUGGEST.id)) { //获取推荐库位 List<Loc> suggestLoc = locUtils.getSuggestEmptyLoc(taskType, locTypeHeight, laneRowList); //获取库位 if (!suggestLoc.isEmpty()) { defaultLoc = locUtils.filterLoc(taskType, suggestLoc); @@ -77,14 +109,18 @@ return defaultLoc; } } } //3.从全局库位中获取(完整巷道) List<Loc> globalLoc = locUtils.getGlobalEmptyLoc(taskType, locTypeHeight); 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,16 +145,43 @@ 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.从库存或任务中匹配相邻库位 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 (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); @@ -126,9 +189,11 @@ return defaultLoc; } } } //3.从全局库位中获取(完整巷道) List<Loc> globalLoc = locUtils.getGlobalLoc(taskType, locTypeHeight); if (ruleDetl.getDetlType().equals(ShelvesRuleDetlType.COMPLETE.id)) { //从全局库位中获取(完整巷道) List<Loc> globalLoc = locUtils.getGlobalLoc(taskType, locTypeHeight, laneRowList); //获取库位 if (!globalLoc.isEmpty()) { defaultLoc = locUtils.filterAllLoc(globalLoc); @@ -136,7 +201,8 @@ return defaultLoc; } } } } return defaultLoc; } 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"; 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);