自动化立体仓库 - WCS系统
#
Junjie
2023-07-31 4315668f4de2ab2bf8a24ac206d71f072dd00357
src/main/java/com/zy/common/utils/NavigatePositionConvert.java
@@ -5,6 +5,8 @@
import com.zy.asrs.entity.LocMast;
import com.zy.asrs.service.BasDevpService;
import com.zy.asrs.service.LocMastService;
import com.zy.asrs.utils.Utils;
import com.zy.common.model.NavigateNode;
/**
 * 库位编号和A*算法的xy轴转换工具类
@@ -21,30 +23,52 @@
        return newPosition;
    }
    //xy轴转坐标编号
    public static Short xyToPosition(int x, int y) {
        StringBuffer sb = new StringBuffer();
        sb.append(x);
        if (x < 10) {
            sb.append("00");
        } else if (x < 100) {
            sb.append("0");
        }
        sb.append(y);
        return Short.parseShort(sb.toString());
    //WCS系统库位号转路径算法节点
    public static NavigateNode locNoToNode(String locNo) {
        int col = Integer.parseInt(locNo.substring(0, 2));
        int row = Integer.parseInt(locNo.substring(2, 5));
        int[] newPosition = coverPosition(col,row);
        NavigateNode node = new NavigateNode(col, row);
        node.setZ(Utils.getLev(locNo));
        return node;
    }
    //牛眼坐标转WCS库位号
    public static String xyzToLocNo(int x, int y, int z) {
        int[] ints = NyXyzToWCSXyz(x, y, z);
        String locNo = Utils.getLocNo(ints[0],ints[1],ints[2]);
        return locNo;
    }
    //WCS系统坐标转牛眼坐标
    public static int[] WCSXyzToNyXyz(int x, int y, int z) {
        //WCS系统Y轴 => 牛眼X轴转换公式
        int x1 = Math.abs(y - 61) + 11;
        //WCS系统X轴 => 牛眼Y轴转换公式
        int y1 = x + 10;
        return new int[]{x1, y1, z};
    }
    //牛眼坐标转WCS系统坐标
    public static int[] NyXyzToWCSXyz(int x, int y, int z) {
        //牛眼X轴 => WCS系统Y轴公式
        int y1 = Math.abs(x - 11 - 61);
        //牛眼Y轴 => WCS系统X轴公式
        int x1 = y - 10;
        return new int[]{x1, y1, z};
    }
    //xyz轴转坐标编号
    public static Short xyToPosition(int x, int y, int z) {
        StringBuffer sb = new StringBuffer();
        sb.append(x);
        if (x < 10) {
            sb.append("00");
        } else if (x < 100) {
            sb.append("0");
        }
        sb.append(x);
        if (y < 10) {
            sb.append("00");
        }else if (y < 100) {
            sb.append("0");
        }
        sb.append(y);
@@ -68,15 +92,6 @@
            return Short.parseShort(basDevp.getQrCodeValue());
        }
        return Short.parseShort(locMast.getQrCodeValue());
    }
    //转换行号,实际中最底层可能是第一行,在数组中最底层是最后一行,因此需要进行转换才可以匹配数据
    public static int covertRow(int row) {
        NavigateMapData mapData = new NavigateMapData();
        int[][] data = mapData.getData();
        //实际行数
        int realRow = data.length - 1;
        return realRow - row;
    }
    public static int[] coverPosition(int col,int row) {