package com.zy.asrs.utils; import com.baomidou.mybatisplus.mapper.EntityWrapper; import com.core.common.Arith; import com.core.common.Cools; import com.core.common.SpringUtils; import com.zy.asrs.entity.LocMast; import com.zy.asrs.service.LocMastService; import com.zy.core.properties.SlaveProperties; import java.text.DecimalFormat; import java.util.ArrayList; import java.util.Collections; import java.util.List; /** * Created by vincent on 2020/8/27 */ public class Utils { 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 getShallowLocs(String locNo){ int row = getRow(locNo); switch (row){ case 1: return new ArrayList() {{ add(zerofill(String.valueOf(2), 2) + locNo.substring(2)); add(zerofill(String.valueOf(3), 2) + locNo.substring(2)); }}; case 2: return new ArrayList() {{ add(zerofill(String.valueOf(3), 2) + locNo.substring(2)); }}; case 3: case 4: return null; case 5: return new ArrayList() {{ add(zerofill(String.valueOf(4), 2) + locNo.substring(2)); }}; case 6: return new ArrayList() {{ add(zerofill(String.valueOf(5), 2) + locNo.substring(2)); add(zerofill(String.valueOf(4), 2) + locNo.substring(2)); }}; case 7: return new ArrayList() {{ add(zerofill(String.valueOf(6), 2) + locNo.substring(2)); add(zerofill(String.valueOf(5), 2) + locNo.substring(2)); add(zerofill(String.valueOf(4), 2) + locNo.substring(2)); }}; case 8: return new ArrayList() {{ add(zerofill(String.valueOf(9), 2) + locNo.substring(2)); add(zerofill(String.valueOf(10), 2) + locNo.substring(2)); add(zerofill(String.valueOf(11), 2) + locNo.substring(2)); }}; case 9: return new ArrayList() {{ add(zerofill(String.valueOf(10), 2) + locNo.substring(2)); add(zerofill(String.valueOf(11), 2) + locNo.substring(2)); }}; case 10: return new ArrayList() {{ add(zerofill(String.valueOf(11), 2) + locNo.substring(2)); }}; case 11: case 12: return null; case 13: return new ArrayList() {{ add(zerofill(String.valueOf(12), 2) + locNo.substring(2)); }}; case 14: return new ArrayList() {{ add(zerofill(String.valueOf(13), 2) + locNo.substring(2)); add(zerofill(String.valueOf(12), 2) + locNo.substring(2)); }}; case 15: return new ArrayList() {{ add(zerofill(String.valueOf(16), 2) + locNo.substring(2)); add(zerofill(String.valueOf(17), 2) + locNo.substring(2)); add(zerofill(String.valueOf(18), 2) + locNo.substring(2)); }}; case 16: return new ArrayList() {{ add(zerofill(String.valueOf(17), 2) + locNo.substring(2)); add(zerofill(String.valueOf(18), 2) + locNo.substring(2)); }}; case 17: return new ArrayList() {{ add(zerofill(String.valueOf(18), 2) + locNo.substring(2)); }}; case 18: case 19: return null; case 20: return new ArrayList() {{ add(zerofill(String.valueOf(19), 2) + locNo.substring(2)); }}; case 21: return new ArrayList() {{ add(zerofill(String.valueOf(20), 2) + locNo.substring(2)); add(zerofill(String.valueOf(19), 2) + locNo.substring(2)); }}; default: throw new RuntimeException("库位解析异常"); } // String[] locsArr = null; // String locs=""; // int row = getRow(deepLoc); // switch (row){ // case 1: // locs += zerofill(String.valueOf(row+2),2) + deepLoc.substring(2); // locs += "," + zerofill(String.valueOf(row+1),2) + deepLoc.substring(2); // break; // case 2: // locs += zerofill(String.valueOf(row+1),2) + deepLoc.substring(2); // break; // case 5: // case 20: // locs += zerofill(String.valueOf(row-1),2) + deepLoc.substring(2); // break; // case 6: // case 14: // case 21: // locs += zerofill(String.valueOf(row-2),2) + deepLoc.substring(2); // locs += "," + zerofill(String.valueOf(row-1),2) + deepLoc.substring(2); // break; // case 7: // locs += zerofill(String.valueOf(row-3),2) + deepLoc.substring(2); // locs += "," + zerofill(String.valueOf(row-2),2) + deepLoc.substring(2); // locs += "," + zerofill(String.valueOf(row-1),2) + deepLoc.substring(2); // break; // case 8: // case 15: // locs += zerofill(String.valueOf(row+3),2) + deepLoc.substring(2); // locs += "," + zerofill(String.valueOf(row+2),2) + deepLoc.substring(2); // locs += "," + zerofill(String.valueOf(row+1),2) + deepLoc.substring(2); // break; // case 9: // case 16: // locs += zerofill(String.valueOf(row+2),2) + deepLoc.substring(2); // locs += "," + zerofill(String.valueOf(row+1),2) + deepLoc.substring(2); // break; // case 10: // case 17: // locs += zerofill(String.valueOf(row+1),2) + deepLoc.substring(2); // break; // case 13: // locs += zerofill(String.valueOf(row-1),2) + deepLoc.substring(2); // break; // } // if(!Cools.isEmpty(locs)){ // locsArr = locs.split(","); // } // return locsArr; } /** * 获取当前库位巷道最外侧库位号 */ public static String getGroupOutermostLoc(String locNo) { int row = getRow(locNo); switch (row) { case 1: case 2: case 3: return zerofill(String.valueOf(3), 2) + locNo.substring(2); case 4: case 5: case 6: case 7: return zerofill(String.valueOf(4), 2) + locNo.substring(2); case 8: case 9: case 10: case 11: return zerofill(String.valueOf(11), 2) + locNo.substring(2); case 12: case 13: case 14: return zerofill(String.valueOf(12), 2) + locNo.substring(2); case 15: case 16: case 17: case 18: return zerofill(String.valueOf(18), 2) + locNo.substring(2); case 19: case 20: case 21: return zerofill(String.valueOf(19), 2) + locNo.substring(2); default: throw new RuntimeException("库位解析异常"); } } /** * 获取 浅库位对应的深库位组 */ public static String[] getDeepLocs(String shallowLoc){ String[] locsArr = null; String locs=""; int row = getRow(shallowLoc); switch (row){ case 2: case 9: case 16: locs += zerofill(String.valueOf(row-1),2) + shallowLoc.substring(2); break; case 3: case 10: case 17: locs += zerofill(String.valueOf(row-2),2) + shallowLoc.substring(2); locs += "," + zerofill(String.valueOf(row-1),2) + shallowLoc.substring(2); break; case 4: locs += zerofill(String.valueOf(row+3),2) + shallowLoc.substring(2); locs += "," + zerofill(String.valueOf(row+2),2) + shallowLoc.substring(2); locs += "," + zerofill(String.valueOf(row+1),2) + shallowLoc.substring(2); break; case 5: case 12: case 19: locs += zerofill(String.valueOf(row+2),2) + shallowLoc.substring(2); locs += "," + zerofill(String.valueOf(row+1),2) + shallowLoc.substring(2); break; case 6: case 13: case 20: locs += zerofill(String.valueOf(row+1),2) + shallowLoc.substring(2); break; case 11: case 18: locs += zerofill(String.valueOf(row-3),2) + shallowLoc.substring(2); locs += "," + zerofill(String.valueOf(row-2),2) + shallowLoc.substring(2); locs += "," + zerofill(String.valueOf(row-1),2) + shallowLoc.substring(2); break; } if(!Cools.isEmpty(locs)){ locsArr = locs.split(","); } return locsArr; } /** * 当检索到双深库位的浅库位时,如果深库位无货,则放入对应的深库位 */ 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 String getLocNo(Number row, Number bay, Number lev) { return zerofill(String.valueOf(row), 2) + zerofill(String.valueOf(bay), 3) + zerofill(String.valueOf(lev), 2); } public static void main(String[] args) { // String shallowLocs = getShallowLocs("2100203"); // String deepLocs = getDeepLocs("2100203"); // System.out.println("shallowLocs ==>> " + shallowLocs); // System.out.println("deepLocs ==>> " + deepLocs); // String[] shallowArr = getShallowLocs("0300504"); List shallowLocs = getShallowLocs("2100404"); String[] deepArr = getDeepLocs("1700203"); String outermostLoc = getGroupOutermostLoc("0701703"); // if (shallowLocs.indexOf(',') >= 0) { // shallowArr = shallowLocs.split(","); // } // if (deepLocs.indexOf(',') >= 0) { // deepArr = deepLocs.split(","); // } for(String str : deepArr){ System.out.println(str); } 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); } public static List getGroupInsideLoc(String locNo){ int row = getRow(locNo); switch (row) { case 1: case 21: case 14: case 15: case 7: case 8: return new ArrayList<>(); case 2: return new ArrayList() {{ add(zerofill(String.valueOf(1), 2) + locNo.substring(2)); }}; case 3: return new ArrayList() {{ add(zerofill(String.valueOf(1), 2) + locNo.substring(2)); add(zerofill(String.valueOf(2), 2) + locNo.substring(2)); }}; case 4: return new ArrayList() {{ add(zerofill(String.valueOf(7), 2) + locNo.substring(2)); add(zerofill(String.valueOf(6), 2) + locNo.substring(2)); add(zerofill(String.valueOf(5), 2) + locNo.substring(2)); }}; case 5: return new ArrayList() {{ add(zerofill(String.valueOf(7), 2) + locNo.substring(2)); add(zerofill(String.valueOf(6), 2) + locNo.substring(2)); }}; case 6: return new ArrayList() {{ add(zerofill(String.valueOf(7), 2) + locNo.substring(2)); }}; case 9: return new ArrayList() {{ add(zerofill(String.valueOf(8), 2) + locNo.substring(2)); }}; case 10: return new ArrayList() {{ add(zerofill(String.valueOf(8), 2) + locNo.substring(2)); add(zerofill(String.valueOf(9), 2) + locNo.substring(2)); }}; case 11: return new ArrayList() {{ add(zerofill(String.valueOf(8), 2) + locNo.substring(2)); add(zerofill(String.valueOf(9), 2) + locNo.substring(2)); add(zerofill(String.valueOf(10), 2) + locNo.substring(2)); }}; case 12: return new ArrayList() {{ add(zerofill(String.valueOf(14), 2) + locNo.substring(2)); add(zerofill(String.valueOf(13), 2) + locNo.substring(2)); }}; case 13: return new ArrayList() {{ add(zerofill(String.valueOf(14), 2) + locNo.substring(2)); }}; case 16: return new ArrayList() {{ add(zerofill(String.valueOf(15), 2) + locNo.substring(2)); }}; case 17: return new ArrayList() {{ add(zerofill(String.valueOf(15), 2) + locNo.substring(2)); add(zerofill(String.valueOf(16), 2) + locNo.substring(2)); }}; case 18: return new ArrayList() {{ add(zerofill(String.valueOf(15), 2) + locNo.substring(2)); add(zerofill(String.valueOf(16), 2) + locNo.substring(2)); add(zerofill(String.valueOf(17), 2) + locNo.substring(2)); }}; case 19: return new ArrayList() {{ add(zerofill(String.valueOf(21), 2) + locNo.substring(2)); add(zerofill(String.valueOf(20), 2) + locNo.substring(2)); }}; case 20: return new ArrayList() {{ add(zerofill(String.valueOf(21), 2) + locNo.substring(2)); }}; default: throw new RuntimeException("库位解析异常"); } } /** * 检测当前库位内侧其他库位是否为D、F、X * 返回true表示内侧库位不是DFX,返回false表示内侧库位是DFX */ public static boolean checkInsideLocIsDFX(String locNo) { LocMastService locMastService = SpringUtils.getBean(LocMastService.class); List insideLoc = Utils.getGroupInsideLoc(locNo); if (insideLoc.size() > 0) { List insideLocMast = locMastService.selectByLocNos(insideLoc); for (LocMast mast : insideLocMast) { if (!mast.getLocSts().equals("D") && !mast.getLocSts().equals("F") && !mast.getLocSts().equals("X")) { //D、F、X(不能选定这个外侧库位) return true; } } } return false; } /** * 检测当前库位内侧其他库位是否为D、F、X、O * 返回true表示内侧库位不是DFXO,返回false表示内侧库位是DFXO */ public static boolean checkInsideLocIsDFXO(String locNo) { LocMastService locMastService = SpringUtils.getBean(LocMastService.class); List insideLoc = Utils.getGroupInsideLoc(locNo); if (insideLoc.size() > 0) { List insideLocMast = locMastService.selectByLocNos(insideLoc); for (LocMast mast : insideLocMast) { if (!mast.getLocSts().equals("D") && !mast.getLocSts().equals("F") && !mast.getLocSts().equals("X") && !mast.getLocSts().equals("O")) { //D、F、X(不能选定这个外侧库位) return true; } } } Integer row = selectInSide(Utils.getRow(locNo)); if (row==0){ return true; } LocMast locMast = locMastService.selectOne(new EntityWrapper().eq("row1", row).eq("bay1", Utils.getBay(locNo)).eq("lev1", Utils.getLev(locNo))); if (Cools.isEmpty(locMast)) { if (row==7 && Utils.getBay(locNo)<4){ locMast = locMastService.selectOne(new EntityWrapper().eq("row1", 6).eq("bay1", Utils.getBay(locNo)).eq("lev1", Utils.getLev(locNo))); if (Cools.isEmpty(locMast)) { return false; } }else { return false; } } // if (!locMast.getLocSts().equals("F") && !locMast.getLocSts().equals("D") ){ // if (locMast.getLocSts().equals("X")){ // row = selectInSide2(row); // if (row==0){ // return true; // } // LocMast locMast1 = locMastService.selectOne(new EntityWrapper().eq("row1", row).eq("bay1", Utils.getBay(locNo)).eq("lev1", Utils.getLev(locNo))); // if (!locMast1.getLocSts().equals("F") && !locMast1.getLocSts().equals("D") ){ // return true; // } // } else { // return true; // } // } return false; } public static Integer selectInSide(Integer row){ switch (row){ case 1: case 2: case 3: row = 1; break; case 4: case 5: case 6: case 7: row = 7; break; case 8: case 9: case 10: case 11: row = 8; break; case 12: case 13: case 14: row = 14; break; case 15: case 16: case 17: case 18: row = 15; break; case 19: case 20: case 21: row = 21; break; default: row = 0; break; } return row; } public static Integer selectInSide2(Integer row){ switch (row){ case 1: row = 2; break; case 7: row = 6; break; case 8: row = 9; break; case 14: row = 13; break; case 15: row = 16; break; case 21: row = 20; break; default: row = 0; break; } return row; } }