自动化立体仓库 - WMS系统
*
lsh
2 天以前 bbf11a79fce0131aa95905c09b00f25e7696d20b
src/main/java/com/zy/asrs/utils/param/ItemUtilParam.java
@@ -2,24 +2,78 @@
import lombok.Data;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
@Data
public class ItemUtilParam {
    String name;
    double unitSpace;
    int maxCapacity;
    int stock;
    int remaining;
    public ItemUtilParam(String name, int maxCapacity, int stock) {
        this.name = name;
        this.maxCapacity = maxCapacity;
        this.unitSpace = 1.0 / maxCapacity;
        this.stock = stock;
        this.remaining = stock;
    @Data
    public static class Item {
        String name;
        double unitSpace;
        int maxCapacity;
        int stock;
        int remaining;
        public Item(String name, int maxCapacity, int stock) {
            this.name = name;
            this.maxCapacity = maxCapacity;
            this.unitSpace = 1.0 / maxCapacity;
            this.stock = stock;
            this.remaining = stock;
        }
        @Override
        public String toString() {
            return name + "(单放" + maxCapacity + "个, 库存" + stock + "个)";
        }
    }
    @Override
    public String toString() {
        return name + "(单放" + maxCapacity + "个, 库存" + stock + "个)";
    static class Locker {
        int id;
        double remainingSpace;
        long bindingTags;
        Map<String, Integer> contents;
        Set<String> itemTypes;
        public Locker(int id) {
            this.id = id;
            this.remainingSpace = 1.0;
            this.contents = new HashMap<>();
            this.itemTypes = new HashSet<>();
            this.bindingTags = System.currentTimeMillis();
        }
        public boolean canAdd(ItemUtilParam.Item item, int quantity) {
            return remainingSpace >= quantity * item.unitSpace;
        }
        public void addItem(ItemUtilParam.Item item, int quantity) {
            double spaceUsed = quantity * item.unitSpace;
            remainingSpace -= spaceUsed;
            contents.put(item.name, contents.getOrDefault(item.name, 0) + quantity);
            itemTypes.add(item.name);
            item.remaining -= quantity;
        }
        public boolean containsItemType(String itemName) {
            return itemTypes.contains(itemName);
        }
        @Override
        public String toString() {
            StringBuilder sb = new StringBuilder();
            sb.append("储物柜").append(id).append(": ");
            sb.append(String.format("剩余空间%.4f", remainingSpace)).append("\n");
            for (Map.Entry<String, Integer> entry : contents.entrySet()) {
                sb.append("  ").append(entry.getKey()).append(": ").append(entry.getValue()).append("个\n");
            }
            return sb.toString();
        }
    }
}