Box.java
5.2 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
package com.neotel.webbox.capacitynew.box;
import com.neotel.webbox.capacity.bean.ReelItem;
import com.neotel.webbox.capacitynew.bean.BoxData;
import com.neotel.webbox.capacitynew.bean.BoxSpecialColumnContent;
import com.neotel.webbox.capacitynew.bean.RequestItem;
import lombok.Getter;
import lombok.Setter;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@Getter
@Setter
public class Box {
/**
* 标准列数量
*/
private int columnCount;
/**
* 标准列
*/
private Column column;
/**
* 特殊列
*/
private Map<String, Column> specialColumnMap;
/**
* 特殊列上部
*/
private Map<String, Column> specialColumnUpMap;
public static Box newBox(BoxData boxData, List<RequestItem> requestList, int maxPressHeight) {
int validColumnHeight = boxData.getColumnValidHeight(maxPressHeight);
Box box = new Box();
//每台机器可用的高度是一样的,只取第一条即可
Map<String, Column> specialColumnMap = getSpecialColumnMap(boxData, requestList.get(0));
box.setSpecialColumnMap(specialColumnMap);
Map<String, Column> specialColumnUpMap = getSpecialColumnUpMap(boxData, requestList, maxPressHeight);
box.setSpecialColumnUpMap(specialColumnUpMap);
Column column = new Column(validColumnHeight);
box.setColumn(column);
return box;
}
private static Map<String, Column> getSpecialColumnUpMap(BoxData boxData, List<RequestItem> requestList, int maxPressHeight) {
Map<String, Column> specialColumnUpMap = new HashMap<>();
Map<String, List<BoxSpecialColumnContent>> boxSpecialColumnMap = boxData.getBoxSpecialColumnMap();
//开始对特殊列进行遍历,取特殊列最上方最小的
if (boxSpecialColumnMap != null && boxSpecialColumnMap.size() > 0) {
for (Map.Entry<String, List<BoxSpecialColumnContent>> entry : boxSpecialColumnMap.entrySet()) {
int boxSpecialColumnUpHeight = boxData.getBoxHeight();
for (RequestItem requestItem : requestList) {
boxSpecialColumnMap = boxData.boxFillSpecialColumnHeight(boxSpecialColumnMap, requestItem.getReelData());
List<BoxSpecialColumnContent> boxSpecialColumnContentList = entry.getValue();
int boxSpecialColumnHeightTotal = boxSpecialColumnContentList.stream().mapToInt(BoxSpecialColumnContent::getHeight).sum();
int boxSpecialColumnUpValidHeight = boxData.getBoxSpecialColumnUpHeightTotal(boxSpecialColumnHeightTotal, maxPressHeight);
if (boxSpecialColumnUpHeight > boxSpecialColumnUpValidHeight) {
boxSpecialColumnUpHeight = boxSpecialColumnUpValidHeight;
}
}
if (boxSpecialColumnUpHeight != 0) {
specialColumnUpMap.put(entry.getKey(), new Column(boxSpecialColumnUpHeight));
}
}
}
return specialColumnUpMap;
}
public static Map<String, Column> getSpecialColumnMap(BoxData boxData, RequestItem requestItem) {
Map<String, Column> specialColumnMap = new HashMap<>();
Map<String, List<BoxSpecialColumnContent>> boxSpecialColumnMap = boxData.getBoxSpecialColumnMap();
if (boxSpecialColumnMap != null && boxSpecialColumnMap.size() >0) {
boxSpecialColumnMap = boxData.boxFillSpecialColumnHeight(boxSpecialColumnMap, requestItem.getReelData());
for (Map.Entry<String, List<BoxSpecialColumnContent>> entry : boxSpecialColumnMap.entrySet()) {
int boxSpecialColumnValidHeight = boxData.getBoxSingleSpecialColumnHeight(entry.getValue());
specialColumnMap.put(entry.getKey(), new Column(boxSpecialColumnValidHeight));
}
}
return specialColumnMap;
}
/**
* 获取料仓的容量明细
*/
public Map<String, ReelItem> getCapacity() {
Map<String, ReelItem> capacityMap = new HashMap<>();
for (int i = 0; i < getColumnCount(); i++) {
capacityMap = addToMap(capacityMap, column.getColumnCapacity());
}
for (Map.Entry<String, Column> entry : specialColumnMap.entrySet()) {
capacityMap = addToMap(capacityMap, entry.getValue().getColumnCapacity());
}
for (Map.Entry<String, Column> entry : specialColumnUpMap.entrySet()) {
capacityMap = addToMap(capacityMap, entry.getValue().getColumnCapacity());
}
return capacityMap;
}
private Map<String, ReelItem> addToMap(Map<String, ReelItem> capacityMap, Map<String, ReelItem> columnMap) {
for (Map.Entry<String, ReelItem> entry : columnMap.entrySet()) {
String sizeStr = entry.getKey();
ReelItem capacityItem = capacityMap.get(sizeStr);
if (capacityItem == null) {
capacityItem = new ReelItem();
capacityItem.setW(entry.getValue().getW());
capacityItem.setH(entry.getValue().getH());
}
int capacity = capacityItem.getCapacity() + entry.getValue().getCapacity();
capacityItem.setCapacity(capacity);
capacityMap.put(sizeStr, capacityItem);
}
return capacityMap;
}
}