#
Junjie
2024-08-17 b591d3396c94e0ca3496d2bac280d106438c75e9
#
4个文件已修改
1个文件已添加
156 ■■■■ 已修改文件
zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/entity/LanewayRule.java 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/entity/enums/ShelvesRuleDetlType.java 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/service/impl/WorkServiceImpl.java 88 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-wms/src/main/java/com/zy/asrs/wms/utils/CodeBuilder.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-wms/src/main/java/com/zy/asrs/wms/utils/LocUtils.java 28 ●●●● 补丁 | 查看 | 原始文档 | 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);