package com.zy.asrs.utils; import com.core.common.Arith; import com.core.common.Cools; import com.core.common.SpringUtils; import com.zy.core.model.CrnSlave; import com.zy.core.properties.SlaveProperties; import java.text.DecimalFormat; import java.util.*; /** * Created by vincent on 2020/8/27 */ public class Utils { private static final DecimalFormat fmt = new DecimalFormat("##0.00"); public static String getWmsLocNo(String locNo) { String loc = null; int row = Integer.parseInt(locNo.substring(0, 2)); int bay = Integer.parseInt(locNo.substring(2, 5)) - 1; int lev = Integer.parseInt(locNo.substring(5, 7)); Integer sssc = getRowZ(row); Integer fz = getFZ(row, sssc); Integer fz1 = getFZ1(row, sssc); //System.out.println(sssc + "-" + bay + "-" + lev + "-" + fz + "-" + fz1); loc = String.format("%02d", sssc) + "-" + String.format("%02d", bay) + "-" + String.format("%02d", lev) + "-" + String.format("%02d", fz) + "-" + String.format("%02d", fz1); return loc; } public static Integer getRowZ(int row) { return row < 5 ? 1 : (row + 1) / 4 + 1; } public static Integer getFZ(int row, int crnNo) { List ii = new ArrayList(); if (crnNo == 1) { ii.add(3); ii.add(0); } else { ii.add(2); if (crnNo > 2) ii.add(1); } return ii.contains(row % 4) ? 2 : 1; } public static Integer getFZ1(int row, int crnNo) { if (crnNo == 2) return 1; List ii = new ArrayList(); ii.add(2); ii.add(3); int s = 2; if (ii.contains(row % 4)) { s = 1; } return crnNo == 1 ? s : 3 - s; } //转换wms传输的库位号 public static String getWcsLocNo(String locNo) { String[] split = locNo.split("-"); int[] wcsRow = getWcsRow(split[0]); int[] ints = null; if (split[3].equals("01")) { ints = Arrays.copyOfRange(wcsRow, 0, (wcsRow.length + 2 - 1) / 2); if (split[4].equals("01")) { if (ints.length < 2) { } else { ints = Arrays.copyOfRange(ints, ints.length / 2, ints.length); } } else { if (ints.length < 2) { } else { ints = Arrays.copyOfRange(ints, ints.length / 2 - 1, ints.length - 1); } } } else { ints = Arrays.copyOfRange(wcsRow, (wcsRow.length + 2 - 1) / 2, wcsRow.length); if (split[4].equals("01")) { if (ints.length < 2) { } else { ints = Arrays.copyOfRange(ints, ints.length / 2 - 1, ints.length - 1); } } else { if (ints.length < 2) { } else { ints = Arrays.copyOfRange(ints, ints.length / 2, ints.length); } } } int i = ints[0]; String wcsLocNo = ""; Integer bay = Integer.parseInt(split[1]) + 1; String bay2 = ""; if (bay > 9) { bay2 = bay.toString(); } else { bay2 = "0" + bay; } if (i > 9) { wcsLocNo = i + "0" + bay2 + split[2]; } else { wcsLocNo = "0" + i + "0" + bay2 + split[2]; } return wcsLocNo; } public static int[] getWcsRow(String row) { int[] array = null; switch (row) { case "01": array = new int[]{1, 2, 3, 4}; break; case "02": array = new int[]{5, 6}; break; case "03": array = new int[]{7, 8, 9, 10}; break; case "04": array = new int[]{11, 12, 13, 14}; break; case "05": array = new int[]{15, 16, 17, 18}; break; case "06": array = new int[]{19, 20, 21}; break; default: } return array; } public static float scale(Float f) { if (f == null || f == 0f || Float.isNaN(f)) { return 0f; } return (float) Arith.multiplys(2, f, 1); } //站点号转换 public static String getEquipmentCode(String targetPoint) { return "J-1" + targetPoint; } public static String zerofill(String msg, Integer count) { if (msg.length() == count) { return msg; } else if (msg.length() > count) { return msg.substring(0, 16); } else { StringBuilder msgBuilder = new StringBuilder(msg); for (int i = 0; i < count - msg.length(); i++) { msgBuilder.insert(0, "0"); } return msgBuilder.toString(); } } /** * 判断是否为深库位 */ public static boolean isDeepLoc(SlaveProperties slaveProperties, String locNo) { if (slaveProperties.isDoubleDeep()) { int row = getRow(locNo); return slaveProperties.getDoubleLocs().contains(row); } else { return false; } } /** * 判断是否为深库位 */ public static boolean isDeepLoc(SlaveProperties slaveProperties, Integer row) { if (slaveProperties.isDoubleDeep()) { return slaveProperties.getDoubleLocs().contains(row); } else { return false; } } /** * 判断是否为浅库位 */ public static boolean isShallowLoc(SlaveProperties slaveProperties, String locNo) { if (slaveProperties.isDoubleDeep()) { int row = getRow(locNo); return !slaveProperties.getDoubleLocs().contains(row); } else { return false; } } /** * 判断是否为浅库位 */ public static boolean isShallowLoc(SlaveProperties slaveProperties, Integer row) { if (slaveProperties.isDoubleDeep()) { return !slaveProperties.getDoubleLocs().contains(row); } else { return false; } } /** * 获取 深库位对应的浅库位号 */ public static String getShallowLoc(SlaveProperties slaveProperties, String deepLoc) { int row = getRow(deepLoc); // int remainder = (int) Arith.remainder(row, slaveProperties.getGroupCount()); int shallowRow = getShallowRow(row); return zerofill(String.valueOf(shallowRow), 2) + deepLoc.substring(2); } public static int getShallowRow(Integer row) { Map map = new HashMap<>(); map.put(1, 2); map.put(4, 3); map.put(7, 8); map.put(10, 9); map.put(11, 12); map.put(14, 13); map.put(15, 16); map.put(18, 17); map.put(19, 20); return map.get(row); } /** * 获取 深库位排对应的浅库位排 */ public static Integer getShallowRow(SlaveProperties slaveProperties, Integer deepRow) { int remainder = (int) Arith.remainder(deepRow, slaveProperties.getGroupCount()); return remainder == 1 ? (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); } /** * 获取 浅库位排对应的深库位排 */ 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; } /** * 通过库位号获取 排 */ public static int getRow(String locNo) { if (!Cools.isEmpty(locNo)) { return Integer.parseInt(locNo.substring(0, 2)); } throw new RuntimeException("库位解析异常"); } public static Short getRowShort(String locNo) { if (!Cools.isEmpty(locNo)) { return Short.valueOf(locNo.substring(0, 2)); } throw new RuntimeException("库位解析异常"); } /** * 通过库位号获取 列 */ public static int getBay(String locNo) { if (!Cools.isEmpty(locNo)) { return Integer.parseInt(locNo.substring(2, 5)); } throw new RuntimeException("库位解析异常"); } /** * 通过库位号获取 层 */ public static int getLev(String locNo) { if (!Cools.isEmpty(locNo)) { return Integer.parseInt(locNo.substring(5, 7)); } throw new RuntimeException("库位解析异常"); } /** * 通过库位号获取 列 */ public static short getBayShort(String locNo) { if (!Cools.isEmpty(locNo)) { return Short.parseShort(locNo.substring(2, 5)); } throw new RuntimeException("库位解析异常"); } /** * 通过库位号获取 层 */ public static short getLevShort(String locNo) { if (!Cools.isEmpty(locNo)) { return Short.parseShort(locNo.substring(5, 7)); } throw new RuntimeException("库位解析异常"); } /** * 当检索到双深库位的浅库位时,如果深库位无货,则放入对应的深库位 */ public static void toDeepIfEmptyByShallow(String shallowLoc) { int row = getRow(shallowLoc); int remainder = (int) Arith.remainder(row, 4); int targetRow = 0; if (remainder == 2) { targetRow = row - 1; } else if (remainder == 3) { targetRow = row + 1; } else { throw new RuntimeException(shallowLoc + "不是浅库位,系统繁忙"); } String targetLoc = zerofill(String.valueOf(targetRow), 2) + shallowLoc.substring(2); } public static CrnSlave.CrnStn getCrnStnByStaNo(Integer staNo, Boolean pakIn) { SlaveProperties slaveProperties = SpringUtils.getBean(SlaveProperties.class); for (CrnSlave crn : slaveProperties.getCrn()) { List crnInStn = null; if (pakIn) { crnInStn = crn.getCrnInStn(); } else { crnInStn = crn.getCrnOutStn(); } for (CrnSlave.CrnStn crnStn : crnInStn) { if (crnStn.getStaNo().equals(staNo)) { return crnStn; } } } return null; } public static void main(String[] args) { // SlaveProperties slaveProperties = new SlaveProperties(); // slaveProperties.setDoubleDeep(true); // List list = new ArrayList<>(); // list.add(1);list.add(4);list.add(5);list.add(8);list.add(9);list.add(12); // slaveProperties.setDoubleLocs(list); // slaveProperties.setGroupCount(4); // Integer deepRow = getDeepRow(slaveProperties, 6); // System.out.println(deepRow); String wcsLocNo = getWcsLocNo("01-01-01-01-01"); System.out.println(wcsLocNo); } public static Integer StaNoCrnNo(Integer staNo) { switch (staNo) { case 100: case 101: return 1; case 102: case 103: return 2; case 104: case 105: return 3; case 106: case 107: return 4; default: return 0; } } public static boolean locNoRowBoolean(Integer row) { switch (row) { case 1: case 2: case 4: case 5: case 8: case 9: case 11: case 12: return true; case 3: case 6: case 7: case 10: case 13: default: return false; } } public static String Fusion(int x, int y, int z) { String locNo = "0" + x; if (z >= 10) { locNo = locNo + "0" + z; } else { locNo = locNo + "00" + z; } if (y >= 10) { locNo = locNo + y; } else { locNo = locNo + "0" + y; } return locNo; } }