package com.zy.asrs.utils.param; import lombok.Data; import java.util.HashMap; import java.util.HashSet; import java.util.Map; import java.util.Set; @Data public class ItemUtilParam { @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 + "个)"; } } static class Locker { int id; double remainingSpace; long bindingTags; Map contents; Set 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 entry : contents.entrySet()) { sb.append(" ").append(entry.getKey()).append(": ").append(entry.getValue()).append("个\n"); } return sb.toString(); } } }