package com.zy.asrs.utils; import com.zy.asrs.entity.param.OrderToLine; import com.zy.asrs.utils.param.ItemUtilParam; import java.util.ArrayList; import java.util.List; import java.util.regex.Pattern; public class ToSortLineUtils { private static final String sign_F = "|F|LABEL_"; public static void main(String[] args) { int itemTypes = 5; List items = new ArrayList<>(); for (int i = 0; i < itemTypes; i++) { String name = i+"a"; int maxCapacity = i*10; int stock = i*11; items.add(new GroupedLockerOptimizerUtils.Item(name, maxCapacity, stock)); } // 使用分组优先算法 GroupedLockerOptimizerUtils.PackingSolution solution = GroupedLockerOptimizerUtils.packItemsWithGrouping(items); for (GroupedLockerOptimizerUtils.Locker locker:solution.lockers) { for (String mantnr : locker.contents.keySet()){ System.out.println(mantnr+"<===>"+locker.contents.get(mantnr)); } } System.out.println("\n" + solution); } public static String MergerParameter(String sku,String po,String upc){ return sku+sign_F+po+sign_F+upc; } public static OrderToLine GetOrderToLine(List items, OrderToLine orderToLine,String sign){ switch (sign){ case "Opt": List itemsOpt = new ArrayList<>(); for (ItemUtilParam.Item item:items){ itemsOpt.add(new OptimizedLockerPackingUtils.Item(item.getName(),item.getMaxCapacity(),item.getStock())); } return GetOrderToLineOpt(itemsOpt,orderToLine); case "Opt3": List itemsOpt3 = new ArrayList<>(); for (ItemUtilParam.Item item:items){ itemsOpt3.add(new OptimizedLockerPacking3Utils.Item(item.getName(),item.getMaxCapacity(),item.getStock())); } return GetOrderToLineOpt3(itemsOpt3,orderToLine); default: return null; } } public static OrderToLine GetOrderToLineOpt(List items,OrderToLine orderToLine){ List matLists = new ArrayList<>(); // 使用分组优先算法 OptimizedLockerPackingUtils.PackingSolution packingSolution = OptimizedLockerPackingUtils.optimizedPacking(items); // System.out.println("\n" + packingSolution); for (OptimizedLockerPackingUtils.Locker locker:packingSolution.lockers) { for (String mantnr : locker.contents.keySet()){ System.out.println(mantnr+"<===>"+locker.contents.get(mantnr)); String[] split = mantnr.split(Pattern.quote(sign_F)); OrderToLine.MatList mat = new OrderToLine.MatList( split[0], // matnr -> sku split[1], // supp -> po -> s1 locker.contents.get(mantnr).doubleValue(), //整料 split[2], //barcode -> upc -> s2 1, null, //origin -> supplier 货源 locker.bindingTags ); matLists.add(mat); } } orderToLine.setMatList(matLists); return orderToLine; } public static OrderToLine GetOrderToLineOpt3(List items,OrderToLine orderToLine){ List matLists = new ArrayList<>(); // 使用分组优先算法 OptimizedLockerPacking3Utils.PackingSolution packingSolution = OptimizedLockerPacking3Utils.optimizedPacking(items); // System.out.println("\n" + packingSolution); for (OptimizedLockerPacking3Utils.Locker locker:packingSolution.lockers) { for (String mantnr : locker.contents.keySet()){ // System.out.println(mantnr+"<===>"+locker.contents.get(mantnr)); String[] split = mantnr.split(Pattern.quote(sign_F)); OrderToLine.MatList mat = new OrderToLine.MatList( split[0], // matnr -> sku split[1], // supp -> po -> s1 locker.contents.get(mantnr).doubleValue(), //整料 split[2], //barcode -> upc -> s2 1, null, //origin -> supplier 货源 locker.bindingTags ); matLists.add(mat); } } orderToLine.setMatList(matLists); return orderToLine; } }