自动化立体仓库 - WMS系统
*
yxFwq
2025-02-25 9c7e5bc10f242b71f3d94e2c700cb7de79feda17
src/main/java/com/zy/asrs/utils/Utils.java
@@ -94,139 +94,196 @@
    }
    /**
     * 判断是否为浅库位
     * 判断是否为浅库位  并存在深库位
     */
    public static boolean isShallowLoc(SlaveProperties slaveProperties, String locNo) {
        if (slaveProperties.isDoubleDeep()) {
            int row = getRow(locNo);
            return !slaveProperties.getDoubleLocs().contains(row);
        } else {
            return false;
            if (!slaveProperties.getDoubleLocs().contains(row)){
                boolean deepLocLeft = isDeepLocLeft(slaveProperties, row-1);//判断是否为左浅库位
                if (deepLocLeft){
                    return true;
                }
                return isDeepLocRight(slaveProperties, row+1);//判断是否为右浅库位
            }
        }
        return false;
    }
    /**
     * 判断是否为浅库位
     * 判断是否为浅库位  并存在深库位
     */
    public static boolean isShallowLoc(SlaveProperties slaveProperties, Integer row) {
        if (slaveProperties.isDoubleDeep()) {
            return !slaveProperties.getDoubleLocs().contains(row);
        } else {
            return false;
            if (!slaveProperties.getDoubleLocs().contains(row)){
                boolean deepLocLeft = isDeepLocLeft(slaveProperties, row-1);//判断是否为左浅库位
                if (deepLocLeft){
                    return true;
                }
                return isDeepLocRight(slaveProperties, row+1);//判断是否为右浅库位
            }
        }
        return false;
    }
    /**
     * 获取 深库位对应的浅库位号
     */
    public static String getShallowLoc(SlaveProperties slaveProperties, String deepLoc) {
//        int row = getRow(deepLoc);
//        int remainder = (int) Arith.remainder(row, slaveProperties.getGroupCount());
//        int shallowRow = remainder == 1 ? (row + 1) : (row - 1);
//        return zerofill(String.valueOf(shallowRow), 2) + deepLoc.substring(2);
        int row = getRow(deepLoc);
        int remainder = (int) Arith.remainder(row, slaveProperties.getGroupCount());
        int shallowRow = remainder == 1 ? (row + 1) : (row - 1);
        boolean deepLocLeft = isDeepLocLeft(slaveProperties, row);//判断是否为左深库位
        int shallowRow = deepLocLeft? (row + 1) : (row - 1);
        return zerofill(String.valueOf(shallowRow), 2) + deepLoc.substring(2);
    }
    /**
     * 获取 深库位对应的浅库位号   双伸+单双伸  煜星定制
     */
    public static String getShallowLoc5(SlaveProperties slaveProperties, String deepLoc,Integer whsType) {
        if (whsType==9){
            int row = getRow(deepLoc);
            int shallowRow;
            if (row == 21) {
                shallowRow = row + 1;
            } else if (row == 24) {
                shallowRow = row - 1;
            } else if (row == 25) {
                shallowRow = row;
            } else if (row == 27) {
                shallowRow = row - 1;
            } else {
                throw new RuntimeException(row + "不是深库位,系统繁忙");
            }
            return zerofill(String.valueOf(shallowRow), 2) + deepLoc.substring(2);
        }else {
            int row = getRow(deepLoc);
            int remainder = (int) Arith.remainder(row, slaveProperties.getGroupCount());
            int shallowRow = remainder == 1 ? (row + 1) : (row - 1);
            return zerofill(String.valueOf(shallowRow), 2) + deepLoc.substring(2);
        }
    }
//    /**
//     * 获取 深库位对应的浅库位号   双伸+单双伸  煜星定制
//     */
//    public static String getShallowLoc5(SlaveProperties slaveProperties, String deepLoc,Integer whsType) {
//        if (whsType==9){
//            int row = getRow(deepLoc);
//            int shallowRow;
//            if (row == 21) {
//                shallowRow = row + 1;
//            } else if (row == 24) {
//                shallowRow = row - 1;
//            } else if (row == 25) {
//                shallowRow = row;
//            } else if (row == 27) {
//                shallowRow = row - 1;
//            } else {
//                throw new RuntimeException(row + "不是深库位,系统繁忙");
//            }
//            return zerofill(String.valueOf(shallowRow), 2) + deepLoc.substring(2);
//        }else {
//            int row = getRow(deepLoc);
//            int remainder = (int) Arith.remainder(row, slaveProperties.getGroupCount());
//            int shallowRow = remainder == 1 ? (row + 1) : (row - 1);
//            return zerofill(String.valueOf(shallowRow), 2) + deepLoc.substring(2);
//        }
//    }
    /**
     * 获取 深库位排对应的浅库位排
     */
    public static Integer getShallowRow(SlaveProperties slaveProperties, Integer deepRow) {
        int remainder = (int) Arith.remainder(deepRow, slaveProperties.getGroupCount());
        return remainder == 1 ? (deepRow + 1) : (deepRow - 1);
//        int remainder = (int) Arith.remainder(deepRow, slaveProperties.getGroupCount());
        boolean deepLocLeft = isDeepLocLeft(slaveProperties, deepRow);//判断是否为左深库位
        return deepLocLeft ? (deepRow + 1) : (deepRow - 1);
    }
    /**
     * 获取 浅库位对应的深库位号
     */
    public static String getDeepLoc(SlaveProperties slaveProperties, String shallowLoc) {
//        int row = getRow(shallowLoc);
//        int remainder = (int) Arith.remainder(row, slaveProperties.getGroupCount());
//        int targetRow;
//        if (remainder == 2) {
//            targetRow = row - 1;
//        } else if (remainder == 3) {
//            targetRow = row + 1;
//        } else {
//            throw new RuntimeException(shallowLoc + "不是浅库位,系统繁忙");
//        }
//        return zerofill(String.valueOf(targetRow), 2) + shallowLoc.substring(2);
        int row = getRow(shallowLoc);
        int remainder = (int) Arith.remainder(row, slaveProperties.getGroupCount());
        int targetRow;
        if (remainder == 2) {
            targetRow = row - 1;
        } else if (remainder == 3) {
            targetRow = row + 1;
        } else {
            throw new RuntimeException(shallowLoc + "不是浅库位,系统繁忙");
        }
        return zerofill(String.valueOf(targetRow), 2) + shallowLoc.substring(2);
        boolean deepLocLeft = isDeepLocLeft(slaveProperties, row-1);//判断是否为左浅库位
        int shallowRow = deepLocLeft? (row - 1) : (row + 1);
        return zerofill(String.valueOf(shallowRow), 2) + shallowLoc.substring(2);
    }
    /**
     * 获取 浅库位对应的深库位号  双伸+单双伸  煜星定制
     */
    public static String getDeepLoc5(SlaveProperties slaveProperties, String shallowLoc,Integer whsType) {
        if (whsType==9){
            int row = getRow(shallowLoc);
            int targetRow;
            if (row == 22) {
                targetRow = row - 1;
            } else if (row == 23) {
                targetRow = row + 1;
            } else if (row == 25) {
                targetRow = row;
            } else if (row == 26) {
                targetRow = row + 1;
            } else {
                throw new RuntimeException(shallowLoc + "不是浅库位,系统繁忙");
            }
            return zerofill(String.valueOf(targetRow), 2) + shallowLoc.substring(2);
        } else {
            int row = getRow(shallowLoc);
            int remainder = (int) Arith.remainder(row, slaveProperties.getGroupCount());
            int targetRow;
            if (remainder == 2) {
                targetRow = row - 1;
            } else if (remainder == 3) {
                targetRow = row + 1;
            } else {
                throw new RuntimeException(shallowLoc + "不是浅库位,系统繁忙");
            }
            return zerofill(String.valueOf(targetRow), 2) + shallowLoc.substring(2);
        }
    }
//    /**
//     * 获取 浅库位对应的深库位号  双伸+单双伸  煜星定制
//     */
//    public static String getDeepLoc5(SlaveProperties slaveProperties, String shallowLoc,Integer whsType) {
//        if (whsType==9){
//            int row = getRow(shallowLoc);
//            int targetRow;
//            if (row == 22) {
//                targetRow = row - 1;
//            } else if (row == 23) {
//                targetRow = row + 1;
//            } else if (row == 25) {
//                targetRow = row;
//            } else if (row == 26) {
//                targetRow = row + 1;
//            } else {
//                throw new RuntimeException(shallowLoc + "不是浅库位,系统繁忙");
//            }
//            return zerofill(String.valueOf(targetRow), 2) + shallowLoc.substring(2);
//        } else {
//            int row = getRow(shallowLoc);
//            int remainder = (int) Arith.remainder(row, slaveProperties.getGroupCount());
//            int targetRow;
//            if (remainder == 2) {
//                targetRow = row - 1;
//            } else if (remainder == 3) {
//                targetRow = row + 1;
//            } else {
//                throw new RuntimeException(shallowLoc + "不是浅库位,系统繁忙");
//            }
//            return zerofill(String.valueOf(targetRow), 2) + shallowLoc.substring(2);
//        }
//    }
    /**
     * 获取 浅库位排对应的深库位排
     */
    public static Integer getDeepRow(SlaveProperties slaveProperties, Integer shallowRow) {
        int remainder = (int) Arith.remainder(shallowRow, slaveProperties.getGroupCount());
        int targetRow;
        if (remainder == 2) {
            targetRow = shallowRow - 1;
        } else if (remainder == 3) {
            targetRow = shallowRow + 1;
        } else {
            throw new RuntimeException(shallowRow + "不是浅库位排,系统繁忙");
        }
        return targetRow;
//        int remainder = (int) Arith.remainder(shallowRow, slaveProperties.getGroupCount());
//        int targetRow;
//        if (remainder == 2) {
//            targetRow = shallowRow - 1;
//        } else if (remainder == 3) {
//            targetRow = shallowRow + 1;
//        } else {
//            throw new RuntimeException(shallowRow + "不是浅库位排,系统繁忙");
//        }
//        return targetRow;
        boolean deepLocLeft = isDeepLocLeft(slaveProperties, shallowRow-1);//判断是否为左浅库位
        return deepLocLeft? (shallowRow - 1) : (shallowRow + 1);
    }
    /**
     * 获取 小料库位对应的深获浅库位
     */
    public static String singleLoc(String locNo) {
        int row = getRow(locNo);
        int rowOther = 0;
        switch (row){
            case 1:
                rowOther = 2;
                break;
            case 2:
                rowOther = 1;
                break;
            case 3:
                rowOther = 4;
                break;
            case 4:
                rowOther = 3;
                break;
            case 5:
                rowOther = 6;
                break;
            case 6:
                rowOther = 5;
                break;
            case 7:
                rowOther = 8;
                break;
            case 8:
                rowOther = 7;
                break;
            default:
                return null;
        }
        return zerofill(String.valueOf(rowOther), 2) + locNo.substring(2);
    }
    /**
     * 通过库位号获取 排
     */
@@ -554,7 +611,7 @@
                }
                if ((curRow - sRow) % 4 == 0) {
                    necessaryParameters[1] = curRow;    //curRow   最深库位排
                    necessaryParameters[2] = (curRow - sRow + 2) / 4 + sCrnNo - 1;     //crnNo     堆垛机号
                    necessaryParameters[2] = (curRow - sRow + 2) / 4 + sCrnNo;     //crnNo     堆垛机号
                    necessaryParameters[3] = curRow + 1;    //nearRow  最浅库位排
                } else if ((curRow - sRow + 1) % 4 == 0) {
                    necessaryParameters[1] = curRow;    //curRow   最深库位排