自动化立体仓库 - WMS系统
zhangc
2025-02-28 7c46678401674f3ce4ec1c6bfe304f0d868aa643
src/main/java/com/zy/common/service/AgvCommonService.java
@@ -76,9 +76,10 @@
    /**
     * 检索库位号
     *
     * @return locNo 检索到的库位号
     */
    public AgvLocMast getLocNo(int type, int floor, boolean isEmpty, boolean isCurrLev, String factory) {
    public AgvLocMast getLocNo(int type, int floor, boolean isEmpty, boolean isCurrLev) {
        // 目标库位
        AgvLocMast locMast = null;
//        if(Cools.isEmpty(agvWaitPakinList)){
@@ -118,18 +119,21 @@
        try {
            // 开始查找库位 ==============================>>
            // 四期项目:需要改查找库位逻辑
            // 箱壳入库
            if (type == 3 && factory != null) {
                //优先入库吸塑1楼,在2楼
                locMast = locUtils.getLocNoRuleByFactory(type, isEmpty, factory);
            } else if (type == 6) {
                //半成品箱壳入库,入到吸塑2楼的370个库位里
                locMast = locUtils.getLocNoRuleByFloor(type, floor, isEmpty, 2);
//            if (type == 3 && factory != null) {
//                //优先入库吸塑1楼,在2楼
//                locMast = locUtils.getLocNoRuleByFactory(type, isEmpty, factory);
//            } else if (type == 6) {
//                //半成品箱壳入库,入到吸塑2楼的370个库位里
//                locMast = locUtils.getLocNoRuleByFloor(type, floor, isEmpty, 2);
//            } else {
//                //不动这个逻辑
            if (type == 6) {
                locMast = locUtils.getLocNoRuleByFloor(type, floor);
            } else {
                //不动这个逻辑
                locMast = getLocNoRule(type, floor, isEmpty, isCurrLev);
            }
//            }
            if (locMast != null) {
                return locMast;
            }
@@ -141,38 +145,89 @@
        throw new CoolException(floor + "楼;该楼层没有空库位");
    }
    /*
    库位规则查找
    /**
     * 库位规则查找
     */
    private AgvLocMast getLocByLocRule(AgvWaitPakin agvWaitPakin, int floor) {
        List<AgvLocRule> agvLocRules = null;
        agvLocRules = agvLocRuleService.selectList(new EntityWrapper<AgvLocRule>()
                .eq("matnr", agvWaitPakin.getMatnr())
                .eq("batch", agvWaitPakin.getModel())
                .eq("floor", floor));
        if (Cools.isEmpty(agvLocRules)) {
            agvLocRules = agvLocRuleService.selectList(new EntityWrapper<AgvLocRule>()
                    .eq("matnr", agvWaitPakin.getMatnr())
                    .eq("floor", floor));
        }
        if (Cools.isEmpty(agvLocRules)) {
            return null;
        }
    public AgvLocMast getLocByLocRule(int type, int floor, String factory) {
        for (AgvLocRule agvLocRule : agvLocRules) {
        try {
            EntityWrapper<AgvLocMast> wrapper = new EntityWrapper<>();
            wrapper.between("row1", agvLocRule.getRowBeg(), agvLocRule.getRowEnd())
                    .between("bay1", agvLocRule.getBayBeg(), agvLocRule.getBayEnd())
                    .between("lev1", agvLocRule.getLevBeg(), agvLocRule.getLevEnd())
                    .eq("floor", floor)
                    .eq("loc_sts", "O");
            AgvLocMast agvLocMast = agvLocMastService.selectOne(wrapper);
            if (!Cools.isEmpty(agvLocMast)) {
                return agvLocMast;
            wrapper.eq("loc_sts", "O").eq("loc_type1", type);
            List<AgvLocMast> agvLocMasts = new ArrayList<>();
            //不是空板优先找2层
            if (Cools.isEmpty(factory)) {
                wrapper.eq("floor", floor).orderBy("lev1", true);
            } else {
                //B是二厂,G是三厂
                switch (factory) {
                    case "B":
                        wrapper.eq("floor", floor).orderBy("lev1", false);
                        break;
                    case "G":
                        wrapper.eq("floor", floor).orderBy("lev1", true);
                        break;
                    default:
                        wrapper.eq("floor", floor).orderBy("lev1", true);
                        break;
                }
            }
        }
        return null;
            agvLocMasts = agvLocMastService.selectList(wrapper);
            for (AgvLocMast agvLocMast : agvLocMasts) {
                AgvLocMast agvLocMast1 = agvLocMastService.selectOne(new EntityWrapper<AgvLocMast>().eq("loc_no", agvLocMast.getLocNo()));
                if (agvLocMast1.getLocSts().equals("O")) {
                    return agvLocMast1;
                }
            }
            throw new CoolException("搜索库位时,未找到可入库库位。");
        } catch (Exception e) {
            throw new CoolException("搜索库位时,未找到可入库库位。");
        }
    }
    /**
     * 库位规则查找
     */
    public AgvLocMast getLocByLocRule(int type, int floor, int lev1) {
        try {
            EntityWrapper<AgvLocMast> wrapper = new EntityWrapper<>();
            wrapper.eq("loc_sts", "O").eq("loc_type1", type);
            wrapper.eq("floor", floor).eq("lev1", lev1);
            List<AgvLocMast> agvLocMasts = agvLocMastService.selectList(wrapper);
            for (AgvLocMast agvLocMast : agvLocMasts) {
                AgvLocMast agvLocMast1 = agvLocMastService.selectOne(new EntityWrapper<AgvLocMast>().eq("loc_no", agvLocMast.getLocNo()));
                if (agvLocMast1.getLocSts().equals("O")) {
                    return agvLocMast1;
                }
            }
            throw new CoolException("搜索库位时,未找到可入库库位。");
        } catch (Exception e) {
            throw new CoolException("搜索库位时,未找到可入库库位。");
        }
    }
    /*
  库位规则查找
   */
    public AgvLocMast getLocByFloorAndLev1(int type, int floor, int lev1) {
        try {
            EntityWrapper<AgvLocMast> wrapper = new EntityWrapper<>();
            wrapper.eq("loc_sts", "O").eq("loc_type1", type);
            wrapper.eq("floor", floor).eq("lev1", lev1);
            List<AgvLocMast> agvLocMasts = agvLocMastService.selectList(wrapper);
            for (AgvLocMast agvLocMast : agvLocMasts) {
                AgvLocMast agvLocMast1 = agvLocMastService.selectOne(new EntityWrapper<AgvLocMast>().eq("loc_no", agvLocMast.getLocNo()));
                if (agvLocMast1.getLocSts().equals("O")) {
                    return agvLocMast1;
                }
            }
            return null;
        } catch (Exception e) {
            throw new CoolException("搜索库位时,未找到可入库库位。");
        }
    }
    /*
@@ -306,6 +361,7 @@
    /**
     * 检索库位号
     *
     * @return locNo 检索到的库位号
     */
    public AgvBasDevp getDevpNo(int type, int floor) {
@@ -325,6 +381,7 @@
    /**
     * 检索库位号
     *
     * @return locNo 检索自动接驳位
     */
    public AgvBasDevp getDevpNo(int type, int floor, String auto) {
@@ -343,6 +400,7 @@
    /**
     * 检索库位号
     *
     * @return locNo 检索可入接驳位
     */
    public AgvBasDevp getDevpNo(int type, int floor, String auto, String inEable) {