|
@@ -1,19 +1,22 @@
|
|
|
package com.jiayue.ipfcst.service;
|
|
|
|
|
|
-import cn.hutool.core.io.IoUtil;
|
|
|
-import cn.hutool.poi.excel.ExcelUtil;
|
|
|
+import cn.hutool.core.collection.CollUtil;
|
|
|
import cn.hutool.poi.excel.ExcelWriter;
|
|
|
+import com.jiayue.ipfcst.common.data.entity.CutOutSpeedSpecifyInfo;
|
|
|
+import com.jiayue.ipfcst.common.data.entity.FanUnitInfo;
|
|
|
import com.jiayue.ipfcst.common.data.entity.WindSpeedPointInfo;
|
|
|
+import com.jiayue.ipfcst.common.data.entity.WindTurbinePowerCurve;
|
|
|
+import com.jiayue.ipfcst.common.data.repository.CutOutSpeedSpecifyInfoRepository;
|
|
|
+import com.jiayue.ipfcst.common.data.repository.FanUnitInfoRepository;
|
|
|
import com.jiayue.ipfcst.common.data.repository.WindSpeedPointInfoRepository;
|
|
|
+import com.jiayue.ipfcst.common.data.repository.WindTurbinePowerCurveRepository;
|
|
|
import com.jiayue.ipfcst.common.data.service.BaseService;
|
|
|
+import lombok.extern.slf4j.Slf4j;
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
|
|
|
-import javax.servlet.ServletOutputStream;
|
|
|
import javax.servlet.http.HttpServletResponse;
|
|
|
-import java.io.IOException;
|
|
|
-import java.util.ArrayList;
|
|
|
-import java.util.List;
|
|
|
+import java.util.*;
|
|
|
import java.util.stream.Collectors;
|
|
|
|
|
|
/**
|
|
@@ -21,30 +24,277 @@ import java.util.stream.Collectors;
|
|
|
* @since 2022-07-25
|
|
|
*/
|
|
|
@Service
|
|
|
+@Slf4j
|
|
|
public class ExportToExcelService extends BaseService {
|
|
|
@Autowired
|
|
|
private WindSpeedPointInfoRepository windSpeedPointInfoRepository;
|
|
|
@Autowired
|
|
|
- HttpServletResponse response;
|
|
|
+ CutOutSpeedSpecifyInfoRepository cutOutSpeedSpecifyInfoRepository;
|
|
|
+ @Autowired
|
|
|
+ private FanUnitInfoRepository fanUnitInfoRepository;
|
|
|
+ @Autowired
|
|
|
+ private WindTurbinePowerCurveRepository windTurbinePowerCurveRepository;
|
|
|
|
|
|
- public void fanUnitInfoToExcel() throws IOException {
|
|
|
- List<Float> list = new ArrayList<>();
|
|
|
- List<List<Float>> lists = new ArrayList<>();
|
|
|
+ /**
|
|
|
+ * 导出风速点表
|
|
|
+ */
|
|
|
+ public void fanUnitInfoToExcel(){
|
|
|
+ log.info("开始导出");
|
|
|
+ //初始化时定义表名
|
|
|
+ ExcelWriter writer = new ExcelWriter("d:/aaa.xls", "北风");
|
|
|
List<WindSpeedPointInfo> windSpeedPointInfoList = windSpeedPointInfoRepository.findAll();
|
|
|
- List<WindSpeedPointInfo> windSpeedPointInfos = windSpeedPointInfoList.stream().filter(w -> w.getWind() == 1).collect(Collectors.toList());
|
|
|
- List<WindSpeedPointInfo> belongList = windSpeedPointInfos.stream().filter(n -> n.getBelong() == 1).collect(Collectors.toList());
|
|
|
- for(WindSpeedPointInfo w: belongList){
|
|
|
- list.add(Float.parseFloat(w.getBelong().toString()));
|
|
|
- list.add(w.getSpeed());
|
|
|
+ for( int i = 1; i < 9; i++){
|
|
|
+ List<List<Float>> lists = new ArrayList<>();
|
|
|
+ switch (i){
|
|
|
+ case 1:
|
|
|
+ writer = new ExcelWriter("d:/aaa.xls", "北风");
|
|
|
+ break;
|
|
|
+ case 2:
|
|
|
+ writer = new ExcelWriter("d:/aaa.xls", "东北风");
|
|
|
+ break;
|
|
|
+ case 3:
|
|
|
+ writer = new ExcelWriter("d:/aaa.xls", "东风");
|
|
|
+ break;
|
|
|
+ case 4:
|
|
|
+ writer = new ExcelWriter("d:/aaa.xls", "东南风");
|
|
|
+ break;
|
|
|
+ case 5:
|
|
|
+ writer = new ExcelWriter("d:/aaa.xls", "南风");
|
|
|
+ break;
|
|
|
+ case 6:
|
|
|
+ writer = new ExcelWriter("d:/aaa.xls", "西南风");
|
|
|
+ break;
|
|
|
+ case 7:
|
|
|
+ writer = new ExcelWriter("d:/aaa.xls", "西风");
|
|
|
+ break;
|
|
|
+ case 8:
|
|
|
+ writer = new ExcelWriter("d:/aaa.xls", "西北风");
|
|
|
+ break;
|
|
|
+
|
|
|
+ }
|
|
|
+ log.info("第 "+ i + "次for");
|
|
|
+ List<Float> list = new ArrayList<>();
|
|
|
+ List<WindSpeedPointInfo> windSpeedPointInfoList1 = new ArrayList<>();
|
|
|
+ List<WindSpeedPointInfo> windSpeedPointInfoList2 = new ArrayList<>();
|
|
|
+ for(WindSpeedPointInfo w: windSpeedPointInfoList){
|
|
|
+ if(w.getWind() == i){
|
|
|
+ windSpeedPointInfoList1.add(w);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ Integer belong = windSpeedPointInfoList1.stream().map(WindSpeedPointInfo::getBelong).collect(Collectors.reducing(Integer::max)).get();
|
|
|
+ log.info("belong大小" + belong);
|
|
|
+ for(int j = 1; j <= belong; j++){
|
|
|
+ for(WindSpeedPointInfo ws: windSpeedPointInfoList1){
|
|
|
+ if(ws.getBelong() == j){
|
|
|
+ windSpeedPointInfoList2.add(ws);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ for(int k = 0; k < windSpeedPointInfoList2.size(); k++){
|
|
|
+ if(k == 0){
|
|
|
+ list.add(Float.parseFloat(windSpeedPointInfoList2.get(k).getBelong().toString()));
|
|
|
+ }
|
|
|
+ list.add(windSpeedPointInfoList2.get(k).getSpeed());
|
|
|
+ }
|
|
|
+ lists.add(list);
|
|
|
+ list = new ArrayList<>();
|
|
|
+ windSpeedPointInfoList2 = new ArrayList<>();
|
|
|
+
|
|
|
+ }
|
|
|
+ //一次性写出内容,强制输出标题
|
|
|
+ writer.write(lists, true);
|
|
|
+ log.info("写excel");
|
|
|
+ //关闭writer,释放内存
|
|
|
+ writer.close();
|
|
|
}
|
|
|
- lists.add(list);
|
|
|
-//通过工具类创建writer
|
|
|
- ExcelWriter writer = ExcelUtil.getWriter("d:/writeTest.xlsx");
|
|
|
+ log.info("导出结束");
|
|
|
+ }
|
|
|
+
|
|
|
|
|
|
+ /**
|
|
|
+ * 导出风速点表
|
|
|
+ */
|
|
|
+ public void windSpeedExport(){
|
|
|
+ log.info("开始导出风速点表数据" );
|
|
|
+ //初始化时定义表名
|
|
|
+ ExcelWriter writer = new ExcelWriter("d:/baa.xls", "北风");
|
|
|
+ List<WindSpeedPointInfo> windSpeedPointInfoList = windSpeedPointInfoRepository.findAll();
|
|
|
+ // 八个风向
|
|
|
+ for( int i = 1; i < 9; i++) {
|
|
|
+ switch (i) {
|
|
|
+ case 1:
|
|
|
+ writer = new ExcelWriter("d:/baa.xls", "北风");
|
|
|
+ break;
|
|
|
+ case 2:
|
|
|
+ writer = new ExcelWriter("d:/baa.xls", "东北风");
|
|
|
+ break;
|
|
|
+ case 3:
|
|
|
+ writer = new ExcelWriter("d:/baa.xls", "东风");
|
|
|
+ break;
|
|
|
+ case 4:
|
|
|
+ writer = new ExcelWriter("d:/baa.xls", "东南风");
|
|
|
+ break;
|
|
|
+ case 5:
|
|
|
+ writer = new ExcelWriter("d:/baa.xls", "南风");
|
|
|
+ break;
|
|
|
+ case 6:
|
|
|
+ writer = new ExcelWriter("d:/baa.xls", "西南风");
|
|
|
+ break;
|
|
|
+ case 7:
|
|
|
+ writer = new ExcelWriter("d:/baa.xls", "西风");
|
|
|
+ break;
|
|
|
+ case 8:
|
|
|
+ writer = new ExcelWriter("d:/baa.xls", "西北风");
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ //获取当前风向的所有集合并写出excel
|
|
|
+ List<List<String>> lists = getWindSpeed(windSpeedPointInfoList, i);
|
|
|
+ //一次性写出内容,强制输出标题
|
|
|
+ writer.write(lists, true);
|
|
|
+ log.info("写excel");
|
|
|
+ //关闭writer,释放内存
|
|
|
+ writer.close();
|
|
|
+ log.info("写excel结束");
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 获取当前风向sheet页数据
|
|
|
+ * @param windSpeedPointInfoList
|
|
|
+ * @param wind
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ public List<List<String>> getWindSpeed(List<WindSpeedPointInfo> windSpeedPointInfoList,Integer wind){
|
|
|
+ log.info("读取第"+ wind + "风向的数据");
|
|
|
+ List<WindSpeedPointInfo> windSpeedPointInfos = windSpeedPointInfoList.stream().filter(w -> w.getWind() == wind).collect(Collectors.toList());
|
|
|
+ log.info("读取最大行数");
|
|
|
+ Integer belong = windSpeedPointInfos.stream().map(WindSpeedPointInfo::getBelong).collect(Collectors.reducing(Integer::max)).get();
|
|
|
+ List<List<String>> lists = new ArrayList<>();
|
|
|
+
|
|
|
+ for(int i = 1; i <= belong; i++){
|
|
|
+ Map<String, List<String>> resultMap = getRowList(windSpeedPointInfos, i);
|
|
|
+ List<String> title = resultMap.get("title");
|
|
|
+ List<String> row = resultMap.get("row");
|
|
|
+// List<String> rowList = getRowList(windSpeedPointInfos, i);
|
|
|
+ if(i == 1){
|
|
|
+ lists.add(title);
|
|
|
+ }
|
|
|
+ lists.add(row);
|
|
|
+ }
|
|
|
+ return lists;
|
|
|
+ }
|
|
|
|
|
|
-//一次性写出内容,强制输出标题
|
|
|
+ /**
|
|
|
+ * 获取行数据
|
|
|
+ * @param windSpeedPointInfos 整个sheet页数据
|
|
|
+ * @param belong 第几行
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ public Map<String,List<String>> getRowList(List<WindSpeedPointInfo> windSpeedPointInfos,Integer belong ){
|
|
|
+ Map<String,List<String>> map = new HashMap<>();
|
|
|
+ log.info("读取第"+ belong + "行的数据");
|
|
|
+ List<WindSpeedPointInfo> belongList = windSpeedPointInfos.stream().filter(n -> n.getBelong().intValue() == belong).collect(Collectors.toList());
|
|
|
+ List<String> collect = belongList.stream().map(WindSpeedPointInfo::getFanNumber).collect(Collectors.toList());
|
|
|
+ collect.add(0,"序号");
|
|
|
+ List<Float> rowListInt = belongList.stream().map(WindSpeedPointInfo::getSpeed).collect(Collectors.toList());
|
|
|
+// rowList.add(0,Float.parseFloat(belong.toString()));
|
|
|
+ List<String> rowList = new ArrayList<>();
|
|
|
+ rowList.add(0,String.valueOf(belong));
|
|
|
+ for(Float r: rowListInt){
|
|
|
+ rowList.add(String.valueOf(r));
|
|
|
+ }
|
|
|
+ map.put("title",collect);
|
|
|
+ map.put("row",rowList);
|
|
|
+ return map;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 机组信息导出
|
|
|
+ */
|
|
|
+ public void fanUnitInfoExport(){
|
|
|
+ ExcelWriter writer = new ExcelWriter("d:/baa.xls", "机组信息");
|
|
|
+ List<String> list = new ArrayList<>();
|
|
|
+ List<List<String>> lists = new ArrayList<>();
|
|
|
+ List<FanUnitInfo> fanUnitInfoList = fanUnitInfoRepository.findAll();
|
|
|
+ String[] lead = {"序号", "机组名称", "风机容量KW", "满发风速(m/s)", "切除停机风速(m/s)", "标杆风机编号", "风机编号(多个风机使用竖线分割)"};
|
|
|
+ lists.add(Arrays.asList(lead));
|
|
|
+ for(FanUnitInfo f: fanUnitInfoList){
|
|
|
+ list.add(String.valueOf(f.getFanId()));
|
|
|
+ list.add(String.valueOf(f.getFanName()));
|
|
|
+ list.add(String.valueOf(f.getFanUnitCapacity()));
|
|
|
+ list.add(String.valueOf(f.getFullWindSpeed()));
|
|
|
+ list.add(String.valueOf(f.getCutOutSpeed()));
|
|
|
+ list.add(String.valueOf(f.getBenchmarkFan()));
|
|
|
+ list.add(String.valueOf(f.getFanNumArrs()));
|
|
|
+ lists.add(list);
|
|
|
+ list = new ArrayList<>();
|
|
|
+ }
|
|
|
+ //一次性写出内容,强制输出标题
|
|
|
writer.write(lists, true);
|
|
|
-//关闭writer,释放内存
|
|
|
+ //关闭writer,释放内存
|
|
|
+ writer.close();
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 切出风速导出
|
|
|
+ */
|
|
|
+ public void cutOutSpeedSpecifyInfoExport(){
|
|
|
+ ExcelWriter writer = new ExcelWriter("d:/baa.xls", "应切出未停机发电");
|
|
|
+ List<CutOutSpeedSpecifyInfo> cutOutSpeedSpecifyInfos = cutOutSpeedSpecifyInfoRepository.findAll();
|
|
|
+ writer.addHeaderAlias("id", "序号");
|
|
|
+ writer.addHeaderAlias("lowerWindSpeedLimit", "风速下限(包含)m/s");
|
|
|
+ writer.addHeaderAlias("highWindSpeedLimit", "风速上限(不包含)m/s");
|
|
|
+ writer.addHeaderAlias("powerGeneration", "发电功率kW");
|
|
|
+ writer.addHeaderAlias("fanId", "所属机组");
|
|
|
+ //一次性写出内容,强制输出标题
|
|
|
+ writer.write(cutOutSpeedSpecifyInfos, true);
|
|
|
+ //关闭writer,释放内存
|
|
|
writer.close();
|
|
|
}
|
|
|
+
|
|
|
+ public void windTurbinePowerCurveExport(){
|
|
|
+ //初始化时定义表名
|
|
|
+ ExcelWriter writer = new ExcelWriter("d:/baa.xls", "1-号机组风功率曲线");
|
|
|
+ List<WindTurbinePowerCurve> windTurbinePowerCurves = windTurbinePowerCurveRepository.findAll();
|
|
|
+ for(int i = 1; i <= 5; i++){
|
|
|
+ switch (i) {
|
|
|
+ case 1:
|
|
|
+ writer = new ExcelWriter("d:/baa.xls", "1-号机组风功率曲线");
|
|
|
+ break;
|
|
|
+ case 2:
|
|
|
+ writer = new ExcelWriter("d:/baa.xls", "2-号机组风功率曲线");
|
|
|
+ break;
|
|
|
+ case 3:
|
|
|
+ writer = new ExcelWriter("d:/baa.xls", "3-号机组风功率曲线");
|
|
|
+ break;
|
|
|
+ case 4:
|
|
|
+ writer = new ExcelWriter("d:/baa.xls", "4-号机组风功率曲线");
|
|
|
+ break;
|
|
|
+ case 5:
|
|
|
+ writer = new ExcelWriter("d:/baa.xls", "5-号机组风功率曲线");
|
|
|
+ break;
|
|
|
+ default:
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ int fanId = i;
|
|
|
+ List<WindTurbinePowerCurve> collect = windTurbinePowerCurves.stream().filter(w -> w.getFanId() == fanId).collect(Collectors.toList());
|
|
|
+
|
|
|
+ List<List<String>> lists = new ArrayList<>();
|
|
|
+ List<String> list = new ArrayList<>();
|
|
|
+ list.add("风速m/s");
|
|
|
+ list.add("功率(kW)");
|
|
|
+ lists.add(list);
|
|
|
+ for(WindTurbinePowerCurve w: collect){
|
|
|
+ list = new ArrayList<>();
|
|
|
+ list.add(String.valueOf(w.getSpeed()));
|
|
|
+ list.add(String.valueOf(w.getPower()));
|
|
|
+ lists.add(list);
|
|
|
+ }
|
|
|
+ //一次性写出内容,强制输出标题
|
|
|
+ writer.write(lists, true);
|
|
|
+ //关闭writer,释放内存
|
|
|
+ writer.close();
|
|
|
+ lists = new ArrayList<>();
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|