BaseDataCache.java
6.3 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
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
package com.neotel.webbox.capacity.data;
import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.ExcelReader;
import com.alibaba.excel.context.AnalysisContext;
import com.alibaba.excel.read.listener.ReadListener;
import com.alibaba.excel.read.metadata.ReadSheet;
import com.neotel.webbox.capacity.bean.*;
import com.neotel.webbox.capacity.method.AssignMethod1;
import com.neotel.webbox.capacity.method.AssignMethod2;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
import org.springframework.util.ResourceUtils;
import javax.annotation.PostConstruct;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.InputStream;
import java.net.URL;
import java.util.*;
@Slf4j
@Component
public class BaseDataCache {
/**
* 料仓基础数据
*/
private static Map<String,BoxData> boxDataMap = new HashMap<>();
/**
* 料盘单元基础数据
*/
private static Map<String, ReelData> reelDataMap = new HashMap<>();
@PostConstruct
public void readExcel() {
try {
InputStream fileStream = null;
File file = new File("data.xlsx");
if(file.exists()){
log.info("加载包外数据文件:" + file.getAbsolutePath());
fileStream = new FileInputStream(file);
}else{
URL baseDir = ResourceUtils.getURL("classpath:data.xlsx");
fileStream = baseDir.openStream();
log.info("加载默认数据文件:" + baseDir.getPath());
}
// 写法1
try(ExcelReader excelReader = EasyExcel.read(fileStream).build()) {
// 这里为了简单 所以注册了 同样的head 和Listener 自己使用功能必须不同的Listener
ReadSheet readSheet1 =
EasyExcel.readSheet(0).head(BoxData.class).registerReadListener(new ReadListener<BoxData>(){
@Override
public void invoke(BoxData data, AnalysisContext analysisContext) {
if(data.isValid()){
log.info("加载到料仓{}数据",data.getBoxName());
boxDataMap.put(data.getBoxName(),data);
}else{
log.error("料仓表第{}行数据{}异常,忽略", analysisContext.getCurrentRowNum(),data.getBoxName());
}
}
@Override
public void doAfterAllAnalysed(AnalysisContext analysisContext) {
log.info("料仓数据加载完成,共加载" + boxDataMap.size() +"条有效数据");
}
}).build();
ReadSheet readSheet2 = EasyExcel.readSheet(1).head(ReelData.class).registerReadListener(new ReadListener<ReelData>() {
@Override
public void invoke(ReelData reelData, AnalysisContext analysisContext) {
if(reelData.isValid()){
log.info("加载到盘{}数据",reelData.getReelSizeStr());
reelDataMap.put(reelData.getReelSizeStr(),reelData);
}else{
log.error("料仓表第{}行数据{}异常,忽略", analysisContext.getCurrentRowNum(),reelData.getReelSizeStr());
}
}
@Override
public void doAfterAllAnalysed(AnalysisContext analysisContext) {
log.info("料盘数据加载完成,共加载" + reelDataMap.size() +"条有效数据");
}
}).build();
// 这里注意 一定要把sheet1 sheet2 一起传进去,不然有个问题就是03版的excel 会读取多次,浪费性能
excelReader.read(readSheet1, readSheet2);
}
// BoxData boxData = getBoxData("SISO1");
// List<RequestItem> testList = testData();
// BoxResult boxResult = AssignMethod1.averageAssignToBox(boxData,testList);
// log.info("方案一共需要"+boxResult.getBoxList().size()+"个料仓");
// for (ReelItem reelItem : boxResult.getReelItemList()) {
// log.info(reelItem.getSizeStr()+" 料盘需求:" + reelItem.getNeedNum() + " 容量:" + reelItem.getCapacity());
// }
//testList = testData();
// boxResult = AssignMethod2.assignToBox(boxData,testList);
// log.info("方案二共需要"+boxResult.getBoxList().size()+"个料仓");
// for (ReelItem reelItem : boxResult.getReelItemList()) {
// log.info(reelItem.getSizeStr()+" 料盘需求:" + reelItem.getNeedNum() + " 容量:" + reelItem.getCapacity());
// }
} catch (FileNotFoundException e) {
log.error("未找到数据文件",e);
} catch (Exception ex){
log.error("读取数据异常",ex);
}
}
private static List<RequestItem> testData(){
List<RequestItem> requestList = new ArrayList<>();
ReelData reelData = getReelData("7 x 8");
ReelData reelData2 = getReelData("13 x 24");
ReelData reelData3 = getReelData("13 x 12");
ReelData reelData4 = getReelData("7 x 12");
RequestItem item2 = new RequestItem(100,reelData2);
requestList.add(item2);
RequestItem item = new RequestItem(3300,reelData);
requestList.add(item);
RequestItem item3 = new RequestItem(150,reelData3);
requestList.add(item3);
RequestItem item4 = new RequestItem(1250,reelData4);
requestList.add(item4);
return requestList;
}
public static Collection<ReelData> getReelDataList(){
return reelDataMap.values();
}
public static Collection<BoxData> getBoxDataList(){
return boxDataMap.values();
}
public static BoxData getBoxData(String boxName){
return boxDataMap.get(boxName);
}
public static ReelData getReelData(String reelSizeStr){
return reelDataMap.get(reelSizeStr);
}
}