Column.java 2.6 KB
package com.neotel.webbox.capacity.box;

import com.neotel.webbox.capacity.bean.ReelData;
import com.neotel.webbox.capacity.bean.ReelItem;
import lombok.Getter;
import lombok.Setter;
import org.apache.commons.compress.utils.Lists;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

@Getter
@Setter
public class Column {

    public Column(int validHeight) {
        this.validHeight = validHeight;
        this.remainHeight = validHeight;
    }

    private int validHeight;

    private int remainHeight;

    private List<SlotUnit> slotUnitList = Lists.newArrayList();

    public SlotUnit getSlotUnit(ReelData reelData){
        for (SlotUnit slotUnit : slotUnitList) {
            if(slotUnit.getReelData().equals(reelData)){
                return slotUnit;
            }
        }
        return null;
    }


    public SlotUnit mergeSlotUnit(SlotUnit newSlotUnit){
        if(newSlotUnit == null){
            return null;
        }
        SlotUnit existSlotUnit = getSlotUnit(newSlotUnit.getReelData());
        if(existSlotUnit != null){
            int mergeCount = newSlotUnit.getReelCount() + existSlotUnit.getReelCount();
            newSlotUnit.setReelCount(mergeCount);
            remainHeight = remainHeight + existSlotUnit.getSlotHeight();
            slotUnitList.remove(existSlotUnit);
        }
        return addSlotUnit(newSlotUnit);
    }

    /**
     * 将模组加入列中, 返回加入结果,如果没放入返回null
     */
    public SlotUnit addSlotUnit(SlotUnit slotUnit){
        if(slotUnit == null){
            return null;
        }
        int slotHeight = slotUnit.getSlotHeight();
        if(slotHeight > remainHeight){
            return null;
        }
        remainHeight = remainHeight - slotHeight;
        slotUnitList.add(slotUnit);
        return slotUnit;
    }

    public Map<String,ReelItem> getColumnCapacity(){
        Map<String,ReelItem> capacityMap = new HashMap<>();
        for (SlotUnit slotUnit : getSlotUnitList()) {
            String reelSizeStr = slotUnit.getReelData().getReelSizeStr();
            ReelItem capacityItem = capacityMap.get(reelSizeStr);
            if(capacityItem == null){
                capacityItem = new ReelItem();
                capacityItem.setW(slotUnit.getReelData().getReelSize());
                capacityItem.setH(slotUnit.getReelData().getReelHeight());
            }
            int columnCapacity = slotUnit.getReelCount();
            int capacity = capacityItem.getCapacity() + columnCapacity;
            capacityItem.setCapacity(capacity);
            capacityMap.put(reelSizeStr,capacityItem);
        }
        return capacityMap;
    }
}