自动化立体仓库 - WMS系统
LSH
2023-07-19 b64f451f37fafdaac2262972d3711d2370b72480
src/main/java/com/zy/common/service/CommonService.java
@@ -97,37 +97,8 @@
     */
    @Transactional
    public StartupDto getLocNo(Integer whsType, Integer staDescId, Integer sourceStaNo, List<String> matNos, LocTypeDto locTypeDto, int times) {
//        whsType = getWhsType(sourceStaNo, times);
        switch (sourceStaNo){
            case 101:
            case 109:
            case 117:
                whsType=1;  //1-8货架
                slaveProperties.setDoubleDeep(false);
                slaveProperties.setGroupCount(2);
                break;
            case 201:
                slaveProperties.setDoubleDeep(true);
                slaveProperties.setGroupCount(4);
                whsType=2;  //9-12货架
                break;
            case 207:
                whsType=3;  //13-14货架
                slaveProperties.setDoubleDeep(false);
                slaveProperties.setGroupCount(2);
                break;
            case 213:
                slaveProperties.setDoubleDeep(true);
                slaveProperties.setGroupCount(4);
                whsType=4;  //15-18货架
                break;
            default:
                throw new CoolException("根据入库站获取库位排号分配失败,入库站:" + sourceStaNo);
        }
        whsType = 1;
        StartupDto startupDto = new StartupDto();
        RowLastno rowLastno = rowLastnoService.selectById(whsType);
        if (Cools.isEmpty(rowLastno)) {
@@ -140,8 +111,7 @@
        int eRow = rowLastno.geteRow();
        int crn_qty = rowLastno.getCrnQty();
        int rowCount = eRow - sRow + 1;
        // 目标堆垛机号
        int crnNo = 0;
        // 目标库位
        LocMast locMast = null;
@@ -159,7 +129,6 @@
                    if (VersionUtils.locMoveCheckLocType(shallowLoc, locTypeDto)) {
                        if (basCrnpService.checkSiteError(shallowLoc.getCrnNo(), true)) {
                            locMast = shallowLoc;
                            crnNo = locMast.getCrnNo();
                            break;
                        }
                    }
@@ -181,7 +150,6 @@
                    if (shallowLoc != null && shallowLoc.getLocSts().equals("O")) {
                        if (basCrnpService.checkSiteError(shallowLoc.getCrnNo(), true)) {
                            locMast = shallowLoc;
                            crnNo = locMast.getCrnNo();
                            break;
                        }
                    }
@@ -192,61 +160,6 @@
        // 如果没有相近物料,则按规则轮询货架
        if (null == locMast){
            curRow = getCurRow(curRow);
            if (curRow == 0){
                crnNo = 0;
            }else if( curRow <= 8 && curRow > 0){
                crnNo=(curRow+1)/2;
            }else if (curRow <= 12 && curRow >= 9){
                crnNo=5;
            }else if (curRow <= 14 && curRow >= 13){
                crnNo=6;
            }else if (curRow <= 18 && curRow >= 15){
                crnNo=7;
            }
            if (curRow!=0 && !basCrnpService.checkSiteError(crnNo, true)) {
                crnNo = 0;
            }
        }
//        // 如果没有相近物料,则按规则轮询货架
//        if (null == locMast) {
//            Shelves shelves = new Shelves(rowCount, crn_qty);
//            int divides = (int) Arith.divides(1, curRow - 1, 4);
//            curRow = (int) Arith.remainder(curRow, 4);
//            if (curRow == 0) {
//                curRow = 4;
//            }
//            for (int i = 0; i < shelves.group; i ++) {
//                curRow = shelves.start(curRow);
//                if (curRow < 0) {
//                    throw new CoolException("检索库位失败,请联系管理员");
//                }
//                Integer crnNo1 = shelves.get(curRow);
//                crnNo1 = crnNo1 + divides*1;
//                if (basCrnpService.checkSiteError(crnNo1, true)) {
//                    crnNo = crnNo1;
//                    curRow = curRow + divides*4;
//                    break;
//                }
//            }
//        }
        if (crnNo == 0) {
            throw new CoolException("没有可用的堆垛机");
        }
        // 获取目标站
        Wrapper<StaDesc> wrapper = new EntityWrapper<StaDesc>()
                .eq("type_no", staDescId)
                .eq("stn_no", sourceStaNo)
                .eq("crn_no", crnNo);
        StaDesc staDesc = staDescService.selectOne(wrapper);
        if (Cools.isEmpty(staDesc)) {
            log.error("type_no={},stn_no={},crn_no={}", staDescId, sourceStaNo, crnNo);
            throw new CoolException("入库路径不存在");
        }
        BasDevp staNo = basDevpService.selectById(staDesc.getCrnStn());
        if (!staNo.getAutoing().equals("Y")) {
            throw new CoolException("目标站"+staDesc.getCrnStn()+"不可用");
        }
        // 更新库位排号
@@ -288,49 +201,33 @@
                }
            }
        }
        //20230203添加  lfd料箱库根据输送线筛选入库
        if (!Cools.isEmpty(locMast) && locMast.getCrnNo()<5){
            int wrkMastsC0 = wrkMastService.selectCount(new EntityWrapper<WrkMast>().eq("crn_no", locMast.getCrnNo()).eq("io_type",1));
            if (wrkMastsC0>3){
                BasCrnp basCrnp1 = basCrnpService.selectById(1);
                if (basCrnp1.getInEnable().equals("Y") && basCrnp1.getCrnSts().equals(3)){
                    int wrkMastsC1 = wrkMastService.selectCount(new EntityWrapper<WrkMast>().eq("crn_no", 1).eq("io_type",1));
                    if (wrkMastsC0>wrkMastsC1){
                        locMast=null;
                    }
        Integer crnNo = 0;
        BasDevp staNo =null;
        boolean sign=false;
        if (!Cools.isEmpty(locMast)){
            try{
                crnNo = locMast.getCrnNo();
                // 获取目标站
                Wrapper<StaDesc> wrapper = new EntityWrapper<StaDesc>()
                        .eq("type_no", staDescId)
                        .eq("stn_no", sourceStaNo)
                        .eq("crn_no", crnNo);
                StaDesc staDesc = staDescService.selectOne(wrapper);
                if (Cools.isEmpty(staDesc)) {
                    log.error("type_no={},stn_no={},crn_no={}", staDescId, sourceStaNo, crnNo);
                    throw new CoolException("入库路径不存在");
                }
                if (!Cools.isEmpty(locMast)){
                    BasCrnp basCrnp2 = basCrnpService.selectById(2);
                    if (basCrnp2.getInEnable().equals("Y") && basCrnp2.getCrnSts().equals(3)){
                        int wrkMastsC2 = wrkMastService.selectCount(new EntityWrapper<WrkMast>().eq("crn_no", 2).eq("io_type",1));
                        if (wrkMastsC0>wrkMastsC2){
                            locMast=null;
                        }
                    }
                staNo = basDevpService.selectById(staDesc.getCrnStn());
                if (!staNo.getAutoing().equals("Y")) {
                    throw new CoolException("目标站"+staDesc.getCrnStn()+"不可用");
                }
                if (!Cools.isEmpty(locMast)){
                    BasCrnp basCrnp3 = basCrnpService.selectById(3);
                    if (basCrnp3.getInEnable().equals("Y") && basCrnp3.getCrnSts().equals(3)){
                        int wrkMastsC3 = wrkMastService.selectCount(new EntityWrapper<WrkMast>().eq("crn_no", 3).eq("io_type",1));
                        if (wrkMastsC0>wrkMastsC3){
                            locMast=null;
                        }
                    }
                }
                if (!Cools.isEmpty(locMast)){
                    BasCrnp basCrnp4 = basCrnpService.selectById(4);
                    if (basCrnp4.getInEnable().equals("Y") && basCrnp4.getCrnSts().equals(3)){
                        int wrkMastsC4 = wrkMastService.selectCount(new EntityWrapper<WrkMast>().eq("crn_no", 4).eq("io_type",1));
                        if (wrkMastsC0>wrkMastsC4){
                            locMast=null;
                        }
                    }
                }
            }catch (Exception e){
                sign=true;
            }
        }
        // 2.库位当前所属尺寸无空库位时,调整尺寸参数,向上兼容检索库位
        if (Cools.isEmpty(locMast)) {
        if (Cools.isEmpty(locMast) || sign) {
            // 当前巷道无空库位时,递归调整至下一巷道,检索全部巷道无果后,跳出递归
            if (times < rowCount) {
                times = times + 1;
@@ -377,52 +274,12 @@
     * 根据入库站获取库位排号分配
     */
    private Integer getCurRow(Integer curRow) {
        boolean sign=false;
        int count=0;
        while (!sign){
            count=count+1;
            if (count==5){
                return 0;
            }
            switch (curRow){
                case 1:
                case 3:
                case 5:
                case 2:
                case 4:
                case 6:
                    curRow=curRow+2;
                    break;
                case 7:
                    curRow=2;
                    break;
                case 8:
                    curRow=1;
                    break;
                case 13:
                    return 14;
                case 14:
                    return 13;
                case 9:
                    return 12;
                case 10:
                    return 11;
                case 11:
                    return 9;
                case 12:
                    return 10;
                case 15:
                    return 18;
                case 16:
                    return 17;
                case 17:
                    return 15;
                case 18:
                    return 16;
                default:
                    throw new CoolException("库位排号异常:排号:"+curRow);
            }
            sign = basCrnpService.checkSiteError((curRow+1)/2, true);
        if (Utils.isDeepLocLeft(slaveProperties,curRow)){
            curRow=curRow+3;
        }else if (Utils.isDeepLocLeft(slaveProperties,curRow-1)){
            curRow=curRow+1;
        }else {
            curRow=curRow-2;
        }
        return curRow;
    }