package com.zy.asrs.utils; import com.core.common.Arith; import com.core.common.Cools; import com.core.exception.CoolException; import com.zy.asrs.entity.RowLastno; import com.zy.common.properties.SlaveProperties; import java.text.DecimalFormat; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.List; /** * Created by vincent on 2020/8/27 */ public class Utils { public static final List FIRST_GROUP_ROW_LIST = new ArrayList() {{ add(1);add(2); }}; public static final List SECOND_GROUP_ROW_LIST = new ArrayList() {{ add(3);add(4); }}; public static final List FIRST_GROUP_ROW_LIST2 = new ArrayList() {{ add(5);add(6); }}; public static final List SECOND_GROUP_ROW_LIST2 = new ArrayList() {{ add(7);add(8); }}; public static final List FIRST_GROUP_ROW_LIST3 = new ArrayList() {{ add(9); }}; public static final List SECOND_GROUP_ROW_LIST3 = new ArrayList() {{ add(10); }}; //库位排号分配 public static int[] LocNecessaryParameters(Integer whsType, Integer curRow, Integer crnNumber) { switch (whsType){ case 1://经典双伸库位 return LocNecessaryParametersDoubleExtension(whsType, curRow, crnNumber); default: return LocNecessaryParametersMove(whsType, curRow, crnNumber);//moveCrnNo } } public static boolean BooleanWhsTypeSta(Integer whsType) { if (whsType == 1) { return true; } return false; } //经典双伸库位移库 public static int[] LocNecessaryParametersMove(Integer whsType, Integer curRow, Integer moveCrnNo) { int[] necessaryParameters = new int[]{0, 0, 0, 0}; necessaryParameters[0] = 2; // 轮询次数 if (curRow.equals(moveCrnNo*4-2)){ necessaryParameters[1] = curRow+2; //curRow 最深库位排 necessaryParameters[2] = moveCrnNo; //crnNo 堆垛机号 necessaryParameters[3] = curRow+1; //nearRow 最浅库位排 }else { necessaryParameters[1] = curRow-2; //curRow 最深库位排 necessaryParameters[2] = moveCrnNo; //crnNo 堆垛机号 necessaryParameters[3] = curRow-1; //nearRow 最浅库位排 } return necessaryParameters; } //经典双伸库位 public static int[] LocNecessaryParametersDoubleExtension(Integer whsType, Integer curRow, Integer crnNumber) { int[] necessaryParameters = new int[]{0, 0, 0, 0}; if (BooleanWhsTypeSta(whsType)) { necessaryParameters[0] = crnNumber; // 轮询次数 //满板正常入库 if (curRow.equals(crnNumber * 4)) { necessaryParameters[1] = 1; //curRow 最深库位排 necessaryParameters[2] = 1; //crnNo 堆垛机号 necessaryParameters[3] = 2; //nearRow 最浅库位排 } else if (curRow.equals(crnNumber * 4 - 3)) { necessaryParameters[1] = 4; //curRow 最深库位排 necessaryParameters[2] = 1; //crnNo 堆垛机号 necessaryParameters[3] = 3; //nearRow 最浅库位排 } else { curRow = curRow + 4; if (curRow < 1 || curRow > (crnNumber * 4)) { throw new CoolException("库位排号异常:排号:" + curRow); } if ((curRow - 1) % 4 == 0) { necessaryParameters[1] = curRow; //curRow 最深库位排 necessaryParameters[2] = (curRow + 3) / 4; //crnNo 堆垛机号 necessaryParameters[3] = curRow + 1; //nearRow 最浅库位排 } else if (curRow % 4 == 0) { necessaryParameters[1] = curRow; //curRow 最深库位排 necessaryParameters[2] = curRow / 4; //crnNo 堆垛机号 necessaryParameters[3] = curRow - 1; //nearRow 最浅库位排 } else { throw new CoolException("库位排号异常:排号:" + curRow); } } } return necessaryParameters; } public static boolean BooleanWhsTypeStaIoType(RowLastno rowLastno) { //查询相似物料开关 return true; } public static List getGroupLocNo(String locNo, Boolean pakIn) { int row = getRow(locNo); List result = new ArrayList<>(); if (FIRST_GROUP_ROW_LIST.contains(row)) { for (Integer groupRow : FIRST_GROUP_ROW_LIST) { result.add(zerofill(String.valueOf(groupRow), 2) + locNo.substring(2)); } } else if (SECOND_GROUP_ROW_LIST.contains(row)) { List clone = Arrays.asList(new Integer[SECOND_GROUP_ROW_LIST.size()]); Collections.copy(clone, SECOND_GROUP_ROW_LIST); Collections.reverse(clone); for (Integer integer : clone) { result.add(zerofill(String.valueOf(integer), 2) + locNo.substring(2)); } }else if (FIRST_GROUP_ROW_LIST2.contains(row)) { for (Integer groupRow : FIRST_GROUP_ROW_LIST2) { result.add(zerofill(String.valueOf(groupRow), 2) + locNo.substring(2)); } } else if (SECOND_GROUP_ROW_LIST2.contains(row)) { List clone = Arrays.asList(new Integer[SECOND_GROUP_ROW_LIST2.size()]); Collections.copy(clone, SECOND_GROUP_ROW_LIST2); Collections.reverse(clone); for (Integer integer : clone) { result.add(zerofill(String.valueOf(integer), 2) + locNo.substring(2)); } }else if (FIRST_GROUP_ROW_LIST3.contains(row)) { for (Integer groupRow : FIRST_GROUP_ROW_LIST3) { result.add(zerofill(String.valueOf(groupRow), 2) + locNo.substring(2)); } } else if (SECOND_GROUP_ROW_LIST3.contains(row)) { List clone = Arrays.asList(new Integer[SECOND_GROUP_ROW_LIST3.size()]); Collections.copy(clone, SECOND_GROUP_ROW_LIST3); Collections.reverse(clone); for (Integer integer : clone) { result.add(zerofill(String.valueOf(integer), 2) + locNo.substring(2)); } } if (!pakIn) { //出库,反转数据 Collections.reverse(result); } return result; } private static final DecimalFormat fmt = new DecimalFormat("##0.00"); 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 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 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); } }