自动化立体仓库 - WCS系统
#
luxiaotao1123
2021-01-27 934c0ddfba7543b59927b2ac0cc44827898198b3
src/main/java/com/zy/common/service/CommonService.java
@@ -113,7 +113,6 @@
            default:
                throw new CoolException("库位排号分配错误, 源站号:" + sourceStaNo);
        }
        startupDto.setWorkNo(workNo);
        RowLastno rowLastno = rowLastnoService.selectById(whsType);
        if (Cools.isEmpty(rowLastno)) {
            throw new CoolException("数据异常,请联系管理员");
@@ -141,10 +140,12 @@
                // 检测目标库位是否为空库位
                LocMast shallowLoc = locMastService.selectById(shallowLocNo);
                if (shallowLoc != null && shallowLoc.getLocSts().equals("O")) {
                    if (basCrnpService.checkSiteError(shallowLoc.getCrnNo(), true)) {
                    if (VersionUtils.locMoveCheckLocType(shallowLoc, locTypeDto)) {
                        locMast = shallowLoc;
                        crnNo = locMast.getCrnNo();
                        break;
                        }
                    }
                }
            }
@@ -162,9 +163,12 @@
                    // 检测目标库位是否为空库位
                    LocMast shallowLoc = locMastService.selectById(shallowLocNo);
                    if (shallowLoc != null && shallowLoc.getLocSts().equals("O")) {
                        if (basCrnpService.checkSiteError(shallowLoc.getCrnNo(), true)) {
                        locMast = shallowLoc;
                        crnNo = locMast.getCrnNo();
                        break;
                        }
                    }
                }
            }
@@ -172,55 +176,56 @@
        // 如果没有相近物料,则按规则轮询货架
        if (null == locMast) {
            Shelves shelves = new Shelves(rowCount, crn_qty);
            // 1-4排
            if (whsType == 1) {
                // 获取目标站所在货架排号
                Shelves shelves = new Shelves(rowCount, crn_qty);
                for (int i = 0; i < shelves.group; i ++) {
                curRow = shelves.start(curRow);
                if (curRow < 0) {
                    throw new CoolException("检索库位失败,请联系管理员");
                }
                for (List<Integer> node : shelves.nodes){
                    if (node.contains(curRow)) {
                        crnNo = shelves.nodes.indexOf(node) + 1;
                    Integer crnNo1 = shelves.get(curRow);
                    if (basCrnpService.checkSiteError(crnNo1, true)) {
                        crnNo = crnNo1;
                        break;
                    }
                }
            // 5-8排
            } else if (whsType == 2) {
                // 获取目标站所在货架排号
                Shelves shelves = new Shelves(rowCount, crn_qty);
                curRow = shelves.start(curRow - 4);
                if (curRow < 0) {
                    throw new CoolException("检索库位失败,请联系管理员");
                }
                for (List<Integer> node : shelves.nodes){
                    if (node.contains(curRow)) {
                        crnNo = shelves.nodes.indexOf(node) + 1;
                        break;
                    }
                }
                // 偏移量补偿
                curRow = curRow + 4;
                crnNo = crnNo + 1;
            // 126空板入 1-8排
            } else {
                // 获取目标站所在货架排号
                Shelves shelves = new Shelves(rowCount, crn_qty);
                curRow = curRow - 4;
                for (int i = 0; i < shelves.group; i ++) {
                curRow = shelves.start(curRow);
                if (curRow < 0) {
                    throw new CoolException("检索库位失败,请联系管理员");
                }
                for (List<Integer> node : shelves.nodes){
                    if (node.contains(curRow)) {
                        crnNo = shelves.nodes.indexOf(node) + 1;
                    Integer crnNo1 = shelves.get(curRow);
                    if (basCrnpService.checkSiteError(crnNo1 + 1, true)) {
                        // 偏移量补偿
                        curRow = curRow + 4;
                        crnNo = crnNo1 + 1;
                        break;
                    }
                }
            // 126空板入 1-8排
            } else {
                for (int i = 0; i < shelves.group; i ++) {
                    curRow = shelves.start(curRow);
                    if (curRow < 0) {
                        throw new CoolException("检索库位失败,请联系管理员");
                    }
                    Integer crnNo1 = shelves.get(curRow);
                    if (basCrnpService.checkSiteError(crnNo1, true)) {
                        crnNo = crnNo1;
                        break;
                    }
                }
            }
        }
        basCrnpService.checkSiteStatus(crnNo);
        if (crnNo == 0) {
            throw new CoolException("没有可用的堆垛机");
        }
        // 获取目标站
        Wrapper<StaDesc> wrapper = new EntityWrapper<StaDesc>()
                .eq("type_no", staDescId)
@@ -228,11 +233,13 @@
                .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());
        int inQty = staNo.getInQty()==null?0:staNo.getInQty();
        if (staNo.getAutoing().equals("Y") && inQty<2) {
        if (!staNo.getAutoing().equals("Y")) {
            throw new CoolException("目标站"+staDesc.getCrnStn()+"不可用");
        }
            // 更新库位排号
            rowLastno.setCurrentRow(curRow);
            rowLastnoService.updateById(rowLastno);
@@ -262,13 +269,11 @@
            String locNo = locMast.getLocNo();
            // 返回dto
        startupDto.setWorkNo(workNo);
            startupDto.setCrnNo(crnNo);
            startupDto.setSourceStaNo(sourceStaNo);
            startupDto.setStaNo(staNo.getDevNo());
            startupDto.setLocNo(locNo);
        } else {
            throw new CoolException("目标站"+staDesc.getCrnStn()+"不可用");
        }
        return startupDto;
    }