自动化立体仓库 - WMS系统
skyouc
13 小时以前 1dca57c0f15c3cdfbebf14ad1e9e04d8c84e775c
src/main/java/com/zy/common/service/CommonService.java
@@ -127,12 +127,13 @@
//            /**
//             * 库型 1: 标准堆垛机库 2: 平库 3: 穿梭板 4: 四向车 5: AGV 0: 未知
//             */
            if (rowLastnoType.getType() == 3) {
                return getDoubleLocNoRun(whsType, staDescId, sourceStaNo, findLocNoAttributeVo,
                        4, locTypeDto, 0);
            } else {
                return getLocNoRun(whsType, staDescId, sourceStaNo, findLocNoAttributeVo, 0, locTypeDto, 0);
            }
//            if (rowLastnoType.getType() == 3) {
//                return getDoubleLocNoRun(whsType, staDescId, sourceStaNo, findLocNoAttributeVo,
//                        4, locTypeDto, 0);
//            } else {
//
//            }
            return getLocNoRun(whsType, staDescId, sourceStaNo, findLocNoAttributeVo, 0, locTypeDto, 0);
        } catch (Exception e) {
            log.error("站点={} 未查询到对应的规则", sourceStaNo);
        }
@@ -152,7 +153,7 @@
     * @return locNo 检索到的库位号
     */
    @Transactional
    public StartupDto getLocNoRun(Integer staDescId, Integer whsType, Integer sourceStaNo,
    public StartupDto getLocNoRun(Integer whsType, Integer staDescId, Integer sourceStaNo,
                                  FindLocNoAttributeVo findLocNoAttributeVo, Integer moveCrnNo, LocTypeDto locTypeDto, int times) {
        staDescId = 1;
        // 初始化参数
@@ -165,28 +166,60 @@
            throw new CoolException("数据异常,请联系管理员===>库位规则未知");
        }
        // 均衡分布堆垛机
        int minCount = Integer.MAX_VALUE;
        for (int i = rowLastno.getsCrnNo(); i <= rowLastno.geteCrnNo(); i++) {
            int count = wrkMastService.selectCount(new EntityWrapper<WrkMast>().eq("crn_no", i));
            if (count < minCount) {
                minCount = count;
                crnNo = i;
        if (whsType == 2) {
            if (locTypeDto.getLocType1() == 2) {
                // 均衡分布堆垛机
                for (int i = 4; i <= 5; i++) {
                    int count = wrkMastService.selectCount(new EntityWrapper<WrkMast>().eq("crn_no", i));
                    if (count < minCount) {
                        minCount = count;
                        crnNo = i;
                    }
                }
            } else {
                for (int i = 4; i <= 6; i++) {
                    int count = wrkMastService.selectCount(new EntityWrapper<WrkMast>().eq("crn_no", i));
                    if (count < minCount) {
                        minCount = count;
                        crnNo = 6;
                    }
                }
                if (crnNo == 6) {
                    return getDoubleLocNoRun(3, 1, sourceStaNo, findLocNoAttributeVo, null, locTypeDto, times);
                }
            }
        } else {
            // 均衡分布堆垛机
            for (int i = rowLastno.getsCrnNo(); i <= rowLastno.geteCrnNo(); i++) {
                int count = wrkMastService.selectCount(new EntityWrapper<WrkMast>().eq("crn_no", i));
                if (count < minCount) {
                    minCount = count;
                    crnNo = i;
                }
            }
        }
        StartupDto startupDto = new StartupDto();
        locMast = locMastService.selectOne(new EntityWrapper<LocMast>()
                .ge("row1", rowLastno.getsRow())
                .le("row1", rowLastno.geteRow())
                .eq("crn_no", crnNo)
//                .eq("move_status", 0)
                .eq("loc_type1", locTypeDto.getLocType1())
                .eq("loc_sts", "O")
                .orderAsc(Arrays.asList("lev1", "row1", "bay1")));
        // int crnCountO = wrkMastService.selectCount(new
        // EntityWrapper<WrkMast>().eq("crn_no", crnNo).le("io_type", 100));
        // 生成工作号
        int workNo = getWorkNo(0);
        int workNo;
        if (whsType == 2) {
            // 生成工作号
            workNo = getWorkNo(3);
        } else {
            // 生成工作号
            workNo = getWorkNo(0);
        }
        // 返回dto
        startupDto.setWorkNo(workNo);
        startupDto.setCrnNo(locMast.getCrnNo());
@@ -210,9 +243,9 @@
     */
    public StartupDto getDoubleLocNoRun(Integer whsType, Integer staDescId, Integer sourceStaNo, FindLocNoAttributeVo findLocNoAttributeVo, Integer moveCrnNo, LocTypeDto locTypeDto, int times) {
        // 初始化参数
        int crnNo = 0;      //堆垛机号
        int nearRow = 0;    //最浅库位排
        int curRow = 0;     //最深库位排
        int crnNo = 6;      //堆垛机号
        int nearRow = 11;    //最浅库位排
        int curRow = 14;     //最深库位排
        int rowCount = 0;   //轮询轮次
        LocMast locMast = null;     // 目标库位
@@ -242,28 +275,28 @@
            }
        }
        //此程序用于优化堆垛机异常时的运行时间
        for (int i = times; i < crnNumber * 2; i++) {
            int[] locNecessaryParameters = Utils.LocNecessaryParameters(rowLastno, curRow, crnNumber);
            curRow = locNecessaryParameters[1];
            crnNo = locNecessaryParameters[2];
            if (basCrnpService.checkSiteError(crnNo, true)) {
                rowCount = locNecessaryParameters[0];
                nearRow = locNecessaryParameters[3];
                List<LocMast> locMasts = locMastService.selectList(new EntityWrapper<LocMast>()
                        .eq("row1", nearRow).eq("loc_sts", "O").eq("whs_type", rowLastnoType.getType().longValue()));
                int crnCountO = wrkMastService.selectCount(new EntityWrapper<WrkMast>().eq("crn_no", crnNo).le("io_type", 100));
                if (locMasts.size() - crnCountO <= 2) {
                    log.error(crnNo + "号堆垛机没有空库位!!! 尺寸规格: {}, 轮询次数:{}", JSON.toJSONString(locTypeDto), times);
                    nearRow = 0;
                    times++;
                    continue;
                }
                break;
            } else {
                times++;
            }
        }
//        //此程序用于优化堆垛机异常时的运行时间
//        for (int i = times; i < crnNumber * 2; i++) {
//            int[] locNecessaryParameters = Utils.LocNecessaryParameters(rowLastno, curRow, crnNumber);
//            curRow = locNecessaryParameters[1];
//            crnNo = locNecessaryParameters[2];
//            if (basCrnpService.checkSiteError(crnNo, true)) {
//                rowCount = locNecessaryParameters[0];
//                nearRow = locNecessaryParameters[3];
//                List<LocMast> locMasts = locMastService.selectList(new EntityWrapper<LocMast>()
//                        .eq("row1", nearRow).eq("loc_sts", "O").eq("whs_type", rowLastnoType.getType().longValue()));
//                int crnCountO = wrkMastService.selectCount(new EntityWrapper<WrkMast>().eq("crn_no", crnNo).le("io_type", 100));
//                if (locMasts.size() - crnCountO <= 2) {
//                    log.error(crnNo + "号堆垛机没有空库位!!! 尺寸规格: {}, 轮询次数:{}", JSON.toJSONString(locTypeDto), times);
//                    nearRow = 0;
//                    times++;
//                    continue;
//                }
//                break;
//            } else {
//                times++;
//            }
//        }
        if (nearRow == 0) {
            throw new CoolException("无可用堆垛机");
        }
@@ -290,7 +323,7 @@
        if (signRule1) {
            if (nearRow != curRow) {
                List<LocMast> locMasts = locMastService.selectList(new EntityWrapper<LocMast>()
                        .eq("row1", nearRow).eq("loc_sts", "O").eq("whs_type", rowLastnoType.getType().longValue()));
                        .eq("row1", nearRow).eq("loc_sts", "O").eq("crn_no", crnNo));
                for (LocMast locMast1 : locMasts) {
                    //获取巷道
//                    List<String> groupOutsideLocCrn = Utils.getGroupOutLocCrn(curRow,nearRow,locMast1.getLocNo(), curRow>nearRow);
@@ -407,27 +440,27 @@
        if (Cools.isEmpty(locMast) && crnNo != 0) {
            List<LocMast> locMasts = locMastService.selectList(new EntityWrapper<LocMast>()
                    .eq("row1", nearRow)
                    .eq("loc_sts", "O").eq("whs_type", rowLastnoType.getType().longValue())
                    .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("whs_type", rowLastnoType.getType().longValue()));
                    if (!Cools.isEmpty(locMast2)) {
                        locMast = locMast2;
                        break;
                    }
                } else {
                    if (!Cools.isEmpty(locMast1)) {
                        locMast = locMast1;
                        break;
                    }
                }
            }
//            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) {
@@ -437,19 +470,19 @@
                    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("whs_type", rowLastnoType.getType().longValue()));
                                .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("whs_type", rowLastnoType.getType().longValue()));
                                    .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("whs_type", rowLastnoType.getType().longValue()));
                                        .eq("loc_no", shallowLoc).eq("loc_sts", "D").eq("crn_no", crnNo));
                                if (!Cools.isEmpty(locMast2)) {
                                    locMast = locMast1;
                                    break;