自动化立体仓库 - WMS系统
whycq
2024-05-27 1efaa37727a8d70a6bc0b0f70532649c16bfab35
src/main/java/com/zy/common/service/AgvCommonService.java
@@ -27,6 +27,12 @@
    private AgvLocRuleService agvLocRuleService;
    @Autowired
    private AgvLocMastService agvLocMastService;
    @Autowired
    private MatService matService;
    @Autowired
    private LocRuleService locRuleService;
    @Autowired
    AgvBasDevpService agvBasDevpService;
    public int getWorkNo(Integer wrkMk) {
        AgvWrkLastno wrkLastno = agvWrkLastnoService.selectById(wrkMk);
@@ -67,33 +73,46 @@
     * 检索库位号
     * @return locNo 检索到的库位号
     */
    public AgvLocMast getLocNo(List<AgvWaitPakin> agvWaitPakinList, int floor) {
    public AgvLocMast getLocNo(int type, int floor) {
        // 目标库位
        AgvLocMast locMast = null;
//        if(Cools.isEmpty(agvWaitPakinList)){
//            return getLocNoRule(type); // 1. 随机库位
//        }
        //库位规则
        locMast = getLocByLocRule(agvWaitPakinList.get(0),floor);
        if(!Cools.isEmpty(locMast)){
            return locMast;
        }
        // 靠近摆放规则 --- 相同订单号, 同天同规格物料
        locMast = getLocByProximityRule();
        if (locMast != null) {
            //找到库位,返回dto
            //return getLocNoStep6(staDescId, sourceStaNo, locMast);//返回dto
        }
//
//        // 靠近摆放规则 --- 空托
//        locMast = getLocNoStep4(staDescId, locTypeDto);
//        if (locMast != null) {
//            //找到库位,返回dto
//            return getLocNoStep6(staDescId, sourceStaNo, locMast);//返回dto
//        //库位规则
//        locMast = getLocByLocRule(agvWaitPakinList.get(0),floor); // 2. 按库位规则搜索
//        if(!Cools.isEmpty(locMast)){
//            return locMast;
//        }
//
//        // 如果没有相近物料,则按规则轮询货架
//
//        //库位编码规则
//        locMast = getLocByLocCodeRule(agvWaitPakinList.get(0),floor);
//        if(!Cools.isEmpty(locMast)){
//            return locMast;
//        }
//
//        // 靠近摆放规则 --- 相同订单号, 同天同规格物料
//        locMast = getLocByProximityRule();
//        if (locMast != null) {
//            //找到库位,返回dto
//            //return getLocNoStep6(staDescId, sourceStaNo, locMast);//返回dto
//        }
//
//        //根据物料频率搜索库位,频率高则搜索离缓存货架最近库位,频率低则搜索最远库位
//        Mat mat = matService.selectByMatnr(agvWaitPakinList.get(0).getMatnr());
//        if(Cools.isEmpty(mat.getBeBatch())){
//            mat.setBeBatch(0);
//        }
//        locMast = getLocByFre(mat.getBeBatch(), floor);
//        if (locMast != null) {
//            return locMast;
//        }
        // 开始查找库位 ==============================>>
        locMast = getLocNoRule(floor);
        locMast = getLocNoRule(type,floor);
        if (locMast != null) {
            return locMast;
        }
@@ -137,21 +156,138 @@
    }
    /*
    库位规则查找
     */
    private AgvLocMast getLocByLocCodeRule(AgvWaitPakin agvWaitPakin, int floor) {
        /*if(Cools.isEmpty(agvWaitPakin.getBrand())){
            return null;
        }
        //库区
        String other = "agv-" + floor;
        List<LocRule> locRules = locRuleService.findCode(agvWaitPakin.getMatnr(), other);
        if(Cools.isEmpty(locRules)){
            return null;
        }
        for (LocRule agvLocRule : locRules) {
            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;
            }
        }*/
        return null;
    }
    /*
    靠近摆放规则
     */
    private AgvLocMast getLocByProximityRule(){
        //to do
        return null;
    }
    //随机取一个货位
    private AgvLocMast getLocNoRule(int floor){
        return agvLocMastService.selectOne(new EntityWrapper<AgvLocMast>()
                .eq("floor",floor)
                .eq("loc_sts","O")
                .eq(false,"loc_type2",1));
    /*
    根据物料频率查找
     */
    private AgvLocMast getLocByFre(int fre, int floor){
        if(floor == 1){
            if(fre == 1){
                return agvLocMastService.selectOne(new EntityWrapper<AgvLocMast>()
                        .eq("floor",floor)
                        .eq("loc_sts","O")
                        .orderBy("bay1",false));
            }else{
                return agvLocMastService.selectOne(new EntityWrapper<AgvLocMast>()
                        .eq("floor",floor)
                        .eq("loc_sts","O")
                        .orderBy("bay1"));
            }
        }
        if(floor == 3){
            if(fre == 1){
                return agvLocMastService.selectOne(new EntityWrapper<AgvLocMast>()
                        .eq("floor",floor)
                        .eq("loc_sts","O")
                        .orderBy("row1",false));
            }else{
                return agvLocMastService.selectOne(new EntityWrapper<AgvLocMast>()
                        .eq("floor",floor)
                        .eq("loc_sts","O")
                        .orderBy("row1"));
            }
        }
        throw new CoolException("搜索库位时,楼层出错。");
    }
    //随机取一个货位
    private AgvLocMast getLocNoRule(int type,int floor){
        return agvLocMastService.selectOne(new EntityWrapper<AgvLocMast>()
                .eq("loc_sts","O")
                .eq("floor",floor)
                .eq("loc_type1",type));
    }
    /**
     * 检索库位号
     * @return locNo 检索到的库位号
     */
    public AgvBasDevp getDevpNo(int type, int floor) {
        // 目标库位
        AgvBasDevp basDevp = null;
        // 开始查找库位 ==============================>>
        basDevp = getDevpNoRule(type,floor);
        if (basDevp != null) {
            return basDevp;
        }
        //找不到库位,抛出异常
        throw new CoolException("该楼层没有空接驳位");
    }
    /**
     * 检索库位号
     * @return locNo 检索到的库位号
     */
    public AgvBasDevp getDevpNo(int type, int floor, String auto) {
        // 目标库位
        AgvBasDevp basDevp = null;
        // 开始查找库位 ==============================>>
        basDevp = getDevpNoAuto(type,floor,auto);
        if (basDevp != null) {
            return basDevp;
        }
        //找不到库位,抛出异常
        throw new CoolException("该楼层没有空接驳位");
    }
    //随机取一个货位
    private AgvBasDevp getDevpNoRule(int type,int floor){
        return agvBasDevpService.selectOne(new EntityWrapper<AgvBasDevp>()
                .eq("loc_sts","O")
                .eq("floor",floor)
                .eq("loc_type1",type)
                .like("dev_no","DB"));
    }
    //随机取一个货位
    private AgvBasDevp getDevpNoAuto(int type,int floor,String auto){
        return agvBasDevpService.selectOne(new EntityWrapper<AgvBasDevp>()
                .eq("loc_sts","O")
                .eq("floor",floor)
                .eq("loc_type1",type)
                .eq("autoing",auto)
                .like("dev_no","DB"));
    }
}