BoxRestControllerNew.java
5.0 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
package com.neotel.webbox.capacitynew;
import com.neotel.webbox.capacity.bean.ReelItem;
import com.neotel.webbox.capacitynew.bean.BoxData;
import com.neotel.webbox.capacitynew.bean.BoxResult;
import com.neotel.webbox.capacitynew.bean.ReelData;
import com.neotel.webbox.capacitynew.bean.RequestItem;
import com.neotel.webbox.capacitynew.data.BaseDataCacheNew;
import com.neotel.webbox.capacitynew.method.AssignMethod;
import com.neotel.webbox.capacitynew.bean.ResultBean;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.*;
@Slf4j
@RestController
@RequestMapping("/box")
public class BoxRestControllerNew {
/**
* 获取料仓基本数据
*
* @return
*/
@RequestMapping("/baseData")
public ResultBean baseData() {
Map<String, Object> map = new HashMap<>();
List<BoxData> boxDataList = new ArrayList<>(BaseDataCacheNew.getBoxDataList());
boxDataList.sort(Comparator.comparing(BoxData::getBoxName));
map.put("boxDataList", boxDataList);
Collection<ReelData> reelNameList = BaseDataCacheNew.getReelDataList();
Map<Integer, List<Integer>> reelSizeMap = new HashMap<>();
for (ReelData reelData : reelNameList) {
int reelSize = reelData.getReelSize();
List<Integer> reelHeightList = reelSizeMap.get(reelSize);
if (reelHeightList == null) {
reelHeightList = new ArrayList<>();
}
int reelHeight = reelData.getReelHeight();
reelHeightList.add(reelHeight);
reelHeightList.sort(new Comparator<Integer>() {
@Override
public int compare(Integer o1, Integer o2) {
return o1 - o2;
}
});
reelSizeMap.put(reelSize, reelHeightList);
}
map.put("reelSizeMap", reelSizeMap);
return ResultBean.newOkResult(map);
}
@RequestMapping("/capacity")
public ResultBean capacityCalculation(@RequestBody Map<String, String> paramMap) {
try {
//获取到料仓数据
String boxName = paramMap.get("boxName");
log.info("收到计算料仓数量请求:" + boxName);
BoxData boxData = BaseDataCacheNew.getBoxData(boxName);
if (boxData == null) {
String msg = "未找到" + boxName + "对应的料仓";
log.warn(msg);
return ResultBean.newErrorResult(101, msg);
}
//获取到料盘数据
List<RequestItem> requestList = new ArrayList<>();
for (Map.Entry<String, String> item : paramMap.entrySet()) {
if (item.getKey().equals("boxName")) {
continue;
}
ReelData reelData = BaseDataCacheNew.getReelData(item.getKey());
if (reelData == null) {
String msg = "未找到" + boxName + "对应的料盘" + item.getKey();
log.warn(msg);
return ResultBean.newErrorResult(102, msg);
}
log.info("料盘需求" + item.getKey() + ":" + item.getValue());
int num = Integer.valueOf(item.getValue());
requestList.add(new RequestItem(num, reelData));
}
if (requestList.isEmpty()) {
String msg = "Params Error";
log.warn(msg);
return ResultBean.newErrorResult(102, msg);
}
BoxResult boxResult = AssignMethod.averageCapacityToBox(boxData, requestList);
log.info("方案一共需要" + boxResult.getBoxList().size() + "个料仓");
for (ReelItem reelItem : boxResult.getReelItemList()) {
log.info(reelItem.getSizeStr() + " 料盘需求:" + reelItem.getNeedNum() + " 容量:" + reelItem.getCapacity());
}
Map<String, Object> resultMap = new HashMap<>();
resultMap.put("boxCount", boxResult.getBoxList().size());
List<Map<String, Object>> capacityItems = new ArrayList<>();
for (ReelItem reelItem : boxResult.getReelItemList()) {
Map<String, Object> dataMap = new HashMap<>();
int needNum = reelItem.getNeedNum();
int capacity = reelItem.getCapacity();
int w = reelItem.getW();
int h = reelItem.getH();
dataMap.put("w", w);
dataMap.put("h", h);
dataMap.put("capacity", capacity);
dataMap.put("needNum", needNum);
capacityItems.add(dataMap);
}
resultMap.put("boxName", boxName);
resultMap.put("capacityItems", capacityItems);
return ResultBean.newOkResult(resultMap);
} catch (Exception e) {
log.error("计算料仓数量时发生异常", e);
return ResultBean.newErrorResult(500, "Error");
}
}
}