#
Junjie
2024-03-26 47ecbab8adfc9f02bff571c3b608812f7051f652
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
package com.zy.asrs.wcs.core.utils;
 
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.zy.asrs.framework.common.SpringUtils;
import com.zy.asrs.wcs.core.entity.Loc;
import com.zy.asrs.wcs.core.model.NavigateNode;
import com.zy.asrs.wcs.core.service.LocService;
 
/**
 * 库位编号和A*算法的xy轴转换工具类
 */
public class NavigatePositionConvert {
 
    public static String xyToPosition(int x, int y, int z, Long hostId) {
        StringBuffer sb = new StringBuffer();
        if (x < 10) {
            sb.append("0");
        }
        sb.append(x);
 
        if (y < 10) {
            sb.append("00");
        } else if (y < 100) {
            sb.append("0");
        }
        sb.append(y);
 
        if (z < 10) {
            sb.append("0");
        }
        sb.append(z);
        String position = sb.toString();//库位号
 
        //库位号转小车二维码
        LocService locMastService = SpringUtils.getBean(LocService.class);
        Loc locMast = locMastService.getOne(new LambdaQueryWrapper<Loc>()
                .eq(Loc::getLocNo, position)
                .eq(Loc::getHostId, hostId));
        if (locMast == null) {
//            //当前库位号查不到,可能是站点库位号
//            BasDevpService basDevpService = SpringUtils.getBean(BasDevpService.class);
//            BasDevp basDevp = basDevpService.queryByLocNo(position);
//            if (basDevp == null) {
//                return null;
//            }
//            return Short.parseShort(basDevp.getQrCodeValue());
            return null;
        }
        return locMast.getCode();
    }
 
    //坐标编号转xy轴
    public static int[] positionToXY(String position) {
        int col = Integer.parseInt(position.substring(0, 2));
        int row = Integer.parseInt(position.substring(2, 5));
        int[] newPosition = coverPosition(col,row);
        //返回x和y
//        return new int[]{row, col};
        return newPosition;
    }
 
    //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 nodeToLocNo(NavigateNode node) {
        return xyzToLocNo(node.getX(), node.getY(), node.getZ());
    }
 
    //WCS坐标转WCS库位号
    public static String xyzToLocNo(int x, int y, int z) {
        String locNo = Utils.getLocNo(x, y, z);
        return locNo;
    }
 
    //牛眼坐标转WCS库位号
    public static String nyXyzToLocNo(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};
    }
 
    public static int[] coverPosition(int col,int row) {
        return new int[]{col, row};
    }
 
}