自动化立体仓库 - WMS系统
skyouc
11 小时以前 1bd6ba2af0bbc44bb12b2e8c1cd1529610c56ee9
no message
1个文件已修改
99 ■■■■■ 已修改文件
src/main/java/com/zy/common/service/CommonService.java 99 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/common/service/CommonService.java
@@ -244,9 +244,9 @@
    public StartupDto getDoubleLocNoRun(Integer whsType, Integer staDescId, Integer sourceStaNo, FindLocNoAttributeVo findLocNoAttributeVo, Integer moveCrnNo, LocTypeDto locTypeDto, int times) {
        // 初始化参数
        int crnNo = 6;      //堆垛机号
        int nearRow = 11;    //最浅库位排
        int curRow = 14;     //最深库位排
        int rowCount = 0;   //轮询轮次
        int nearRow = 12;    //浅库位排 (与11对应)
        int curRow = 11;     //深库位排
        int rowCount = 2;   //轮询轮次 (12/11 对 和 13/14 对)
        LocMast locMast = null;     // 目标库位
        StartupDto startupDto = new StartupDto();
@@ -261,6 +261,15 @@
        int sRow = rowLastno.getsRow();
        int eRow = rowLastno.geteRow();
        int crnNumber = rowLastno.getCrnQty();
        // 根据轮询次数切换排 (优先深库位排 11, 14)
        if (times % 2 == 0) {
            nearRow = 12;
            curRow = 11;
        } else {
            nearRow = 13;
            curRow = 14;
        }
        // ===============>>>> 开始执行
@@ -438,63 +447,43 @@
        // 开始查找库位 ==============================>>
        // 1.按规则查找库位
        if (Cools.isEmpty(locMast) && crnNo != 0) {
            List<LocMast> locMasts = locMastService.selectList(new EntityWrapper<LocMast>()
                    .eq("row1", nearRow)
            // 首先尝试查找对应的深库位排 (11 或 14)
            List<LocMast> deepLocMasts = locMastService.selectList(new EntityWrapper<LocMast>()
                    .eq("row1", curRow)
                    .eq("loc_sts", "O").eq("crn_no", crnNo)
                    .orderBy("lev1", true).orderBy("bay1", true));
//            for (LocMast locMast1 : locMasts) {
//                if (!VersionUtils.locMoveCheckLocTypeComplete(locMast1, locTypeDto)) {
//                    continue;
//                }
//                if (Utils.BooleanWhsTypeStaIoType(rowLastno)) {
//                    String shallowLoc = Utils.getDeepLoc(slaveProperties, locMast1.getLocNo());
//                    LocMast locMast2 = locMastService.selectOne(new EntityWrapper<LocMast>()
//                            .eq("loc_no", shallowLoc).eq("loc_sts", "O").eq("crn_no", crnNo));
//                    if (!Cools.isEmpty(locMast2)) {
//                        locMast = locMast2;
//                        break;
//                    }
//                } else {
//                    if (!Cools.isEmpty(locMast1)) {
//                        locMast = locMast1;
//                        break;
//                    }
//                }
//            }
            if (Cools.isEmpty(locMast) && Utils.BooleanWhsTypeStaIoType(rowLastno)) {
                for (LocMast locMast1 : locMasts) {
                    if (!VersionUtils.locMoveCheckLocTypeComplete(locMast1, locTypeDto)) {
            for (LocMast deepLoc : deepLocMasts) {
                if (!VersionUtils.locMoveCheckLocTypeComplete(deepLoc, locTypeDto)) {
                    continue;
                }
                // 获取对应的浅库位,确保浅库位不挡住入库
                String shallowLocNo = Utils.getShallowLoc(slaveProperties, deepLoc.getLocNo());
                LocMast shallowLoc = locMastService.selectOne(new EntityWrapper<LocMast>()
                        .eq("loc_no", shallowLocNo).eq("crn_no", crnNo));
                // 只有浅库位为空,或者浅库位已经有货(且不是挡住入库的状态,这里简单判断为空即可放入深库位)
                // 实际上,双深入库时,如果深库位为空且浅库位为空,应优先入深库位
                if (!Cools.isEmpty(shallowLoc) && (shallowLoc.getLocSts().equals("O") || shallowLoc.getLocSts().equals("F"))) {
                    locMast = deepLoc;
                    break;
                }
            }
            // 如果没找到深库位,再尝试找浅库位排 (12 或 13)
            if (Cools.isEmpty(locMast)) {
                List<LocMast> shallowLocMasts = locMastService.selectList(new EntityWrapper<LocMast>()
                        .eq("row1", nearRow)
                        .eq("loc_sts", "O").eq("crn_no", crnNo)
                        .orderBy("lev1", true).orderBy("bay1", true));
                for (LocMast shallowLoc : shallowLocMasts) {
                    if (!VersionUtils.locMoveCheckLocTypeComplete(shallowLoc, locTypeDto)) {
                        continue;
                    }
                    if (Utils.BooleanWhsTypeStaIoType(rowLastno)) {
                        String shallowLoc = Utils.getDeepLoc(slaveProperties, locMast1.getLocNo());
                        LocMast locMast2 = locMastService.selectOne(new EntityWrapper<LocMast>()
                                .eq("loc_no", shallowLoc).eq("loc_sts", "O").eq("crn_no", crnNo));
                        if (!Cools.isEmpty(locMast2)) {
                            locMast = locMast2;
                            break;
                        } else {
                            locMast2 = locMastService.selectOne(new EntityWrapper<LocMast>()
                                    .eq("loc_no", shallowLoc).eq("loc_sts", "F").eq("crn_no", crnNo));
                            if (!Cools.isEmpty(locMast2)) {
                                locMast = locMast1;
                                break;
                            } else {
                                locMast2 = locMastService.selectOne(new EntityWrapper<LocMast>()
                                        .eq("loc_no", shallowLoc).eq("loc_sts", "D").eq("crn_no", crnNo));
                                if (!Cools.isEmpty(locMast2)) {
                                    locMast = locMast1;
                                    break;
                                }
                            }
                        }
                    } else {
                        if (!Cools.isEmpty(locMast1)) {
                            locMast = locMast1;
                            break;
                        }
                    }
                    // 浅库位入库的前提是深库位已经满了,或者有特殊要求。这里直接允许入浅库位。
                    locMast = shallowLoc;
                    break;
                }
            }
        }