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() .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}; } }