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};
|
}
|
|
}
|