自动化立体仓库 - WMS系统
zhang
2025-06-11 5701eb6693c654d53f1bba460eb3a417d495b344
src/main/java/com/zy/common/service/AgvCommonService.java
@@ -6,6 +6,8 @@
import com.zy.asrs.entity.*;
import com.zy.asrs.service.*;
import com.zy.asrs.utils.LocUtils;
import com.zy.system.entity.Config;
import com.zy.system.service.ConfigService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@@ -35,6 +37,9 @@
    private LocRuleService locRuleService;
    @Autowired
    AgvBasDevpService agvBasDevpService;
    @Autowired
    private ConfigService configService;
    @Autowired
    private LocUtils locUtils;
@@ -129,7 +134,7 @@
//            } else {
//                //不动这个逻辑
            if (type == 6) {
                locMast = locUtils.getLocNoRuleByFloor(type, floor);
                locMast = locUtils.getLocNoRuleByFloor6(type, floor);
            } else {
                locMast = getLocNoRule(type, floor, isEmpty, isCurrLev);
            }
@@ -143,6 +148,93 @@
        //找不到库位,抛出异常
        throw new CoolException(floor + "楼;该楼层没有空库位");
    }
    /**
     * 库位规则查找,会预留20个库位
     */
    public synchronized AgvLocMast getLocByLocRule20(int type, int floor, String factory, boolean flag) {
        try {
            EntityWrapper<AgvLocMast> wrapper = new EntityWrapper<>();
            wrapper.eq("loc_sts", "O").eq("loc_type1", type);
            List<AgvLocMast> agvLocMasts = new ArrayList<>();
            List<AgvLocMast> all1 = new ArrayList<>();
            List<AgvLocMast> all2 = new ArrayList<>();
            //不是空板优先找2层
            if (Cools.isEmpty(factory)) {
                wrapper.eq("floor", floor).orderBy("lev1", true);
            } else {
                //B是二厂,G是三厂
                if (factory.equals("B")) {
                    wrapper.eq("floor", floor).orderBy("lev1", false).orderBy("row1", flag);
                } else {
                    wrapper.eq("floor", floor).orderBy("lev1", true);
                }
            }
            int num = 20;
            int num2 = 20;
            Config config = configService.selectOne(new EntityWrapper<Config>().eq("code", "LOC_3_NUM"));
            Config config2 = configService.selectOne(new EntityWrapper<Config>().eq("code", "LOC_3_NUM2"));
            if (config != null && !Cools.isEmpty(config.getValue())) {
                num = Integer.parseInt(config.getValue());
            }
            if (config2 != null && !Cools.isEmpty(config2.getValue())) {
                num2 = Integer.parseInt(config2.getValue());
            }
            agvLocMasts = agvLocMastService.selectList(wrapper);
            for (AgvLocMast agvLocMast : agvLocMasts) {
                if (agvLocMast.getLev1() == 2) {
                    all2.add(agvLocMast);
                } else if (agvLocMast.getLev1() == 1) {
                    all1.add(agvLocMast);
                }
            }
            if (factory != null && factory.equalsIgnoreCase("B")) {
                if (all2.size() > num2) {
                    for (AgvLocMast agvLocMast : all2) {
                        AgvLocMast agvLocMast1 = agvLocMastService.selectOne(new EntityWrapper<AgvLocMast>().eq("loc_no", agvLocMast.getLocNo()));
                        if (agvLocMast1.getLocSts().equals("O")) {
                            return agvLocMast1;
                        }
                    }
                } else if (all1.size() > num) {
                    for (AgvLocMast agvLocMast : all1) {
                        AgvLocMast agvLocMast1 = agvLocMastService.selectOne(new EntityWrapper<AgvLocMast>().eq("loc_no", agvLocMast.getLocNo()));
                        if (agvLocMast1.getLocSts().equals("O")) {
                            return agvLocMast1;
                        }
                    }
                } else {
                    throw new CoolException("搜索库位时,未找到可入库库位。");
                }
            } else {
                if (all1.size() > num) {
                    for (AgvLocMast agvLocMast : all1) {
                        AgvLocMast agvLocMast1 = agvLocMastService.selectOne(new EntityWrapper<AgvLocMast>().eq("loc_no", agvLocMast.getLocNo()));
                        if (agvLocMast1.getLocSts().equals("O")) {
                            return agvLocMast1;
                        }
                    }
                } else if (all2.size() > num2) {
                    for (AgvLocMast agvLocMast : all2) {
                        AgvLocMast agvLocMast1 = agvLocMastService.selectOne(new EntityWrapper<AgvLocMast>().eq("loc_no", agvLocMast.getLocNo()));
                        if (agvLocMast1.getLocSts().equals("O")) {
                            return agvLocMast1;
                        }
                    }
                } else {
                    throw new CoolException("搜索库位时,未找到可入库库位。");
                }
            }
            throw new CoolException("搜索库位时,未找到可入库库位。");
        } catch (Exception e) {
            throw new CoolException("搜索库位时,未找到可入库库位。");
        }
    }
    /**
@@ -195,8 +287,51 @@
        try {
            EntityWrapper<AgvLocMast> wrapper = new EntityWrapper<>();
            wrapper.eq("loc_sts", "O").eq("loc_type1", type);
            wrapper.eq("floor", floor).eq("lev1", lev1).orderBy("bay1", false);
            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 getLocByLocRule2(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);
            if (lev1 == 2) {
                int num = 20;
                Config config = configService.selectOne(new EntityWrapper<Config>().eq("code", "LOC_3_NUM2"));
                if (config != null && !Cools.isEmpty(config.getValue())) {
                    num = Integer.parseInt(config.getValue());
                }
                int er = agvLocMasts.size();
                if (er < num) {
                    throw new CoolException("搜索库位时,未找到可入库库位。2");
                }
            } else if (lev1 == 1) {
                int num = 8;
                Config config = configService.selectOne(new EntityWrapper<Config>().eq("code", "LOC_3_NUM"));
                if (config != null && !Cools.isEmpty(config.getValue())) {
                    num = Integer.parseInt(config.getValue());
                }
                int er = agvLocMasts.size();
                if (er < num) {
                    throw new CoolException("搜索库位时,未找到可入库库位。1");
                }
            }
            for (AgvLocMast agvLocMast : agvLocMasts) {
                AgvLocMast agvLocMast1 = agvLocMastService.selectOne(new EntityWrapper<AgvLocMast>().eq("loc_no", agvLocMast.getLocNo()));
                if (agvLocMast1.getLocSts().equals("O")) {
@@ -217,15 +352,16 @@
        try {
            EntityWrapper<AgvLocMast> wrapper = new EntityWrapper<>();
            wrapper.eq("loc_sts", "O").eq("loc_type1", type);
            wrapper.eq("floor", floor).eq("lev1", lev1);
            wrapper.eq("floor", floor).eq("lev1", lev1).orderBy("bay1", true);
            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("搜索库位时,未找到可入库库位。");
@@ -345,6 +481,31 @@
        return null;
    }
    public AgvLocMast getLocNoOnXiSuer20(int type, int floor) {
        EntityWrapper<AgvLocMast> wrapper = new EntityWrapper<>();
        wrapper.eq("loc_sts", "O").eq("loc_type1", type);
        wrapper.eq("floor", floor).eq("lev1", 2);
        List<AgvLocMast> agvLocMasts = agvLocMastService.selectList(wrapper);
        if (Cools.isEmpty(agvLocMasts)) {
            return null;
        } else {
            int num = 15;
            Config config = configService.selectOne(new EntityWrapper<Config>().eq("code", "LOC_6_NUM"));
            if (config != null && !Cools.isEmpty(config.getValue())) {
                num = Integer.parseInt(config.getValue());
            }
            if (agvLocMasts.size() > num) {
                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;
    }
    //随机取一个货位
    private AgvLocMast getLocNoRule(int type, int floor, boolean isEmpty, boolean isCurrLev) {