| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151 |
- package com.gyee.power.fitting.service.custom.curve;
- import com.gyee.power.fitting.common.alg.PowerProcessALG;
- import com.gyee.power.fitting.common.alg.WindDirectionALG;
- import com.gyee.power.fitting.common.config.GyeeConfig;
- import com.gyee.power.fitting.common.constants.Constants;
- import com.gyee.power.fitting.common.spring.InitialRunner;
- import com.gyee.power.fitting.common.util.FileUtil;
- import com.gyee.power.fitting.common.util.PowerFittingUtil;
- import com.gyee.power.fitting.common.util.SnowFlakeUtil;
- import com.gyee.power.fitting.model.ProBasicModelPower;
- import com.gyee.power.fitting.model.ProEconPowerFittingAnalySis;
- import com.gyee.power.fitting.model.anno.AnnotationTool;
- import com.gyee.power.fitting.model.anno.FixedVo;
- import com.gyee.power.fitting.model.custom.PowerPointData;
- import com.gyee.power.fitting.model.custom.TableTitle;
- import com.gyee.power.fitting.service.ProEconPowerFittingAnalySisService;
- import org.apache.commons.lang3.StringUtils;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.stereotype.Service;
- import java.util.ArrayList;
- import java.util.HashMap;
- import java.util.List;
- import java.util.Map;
- import java.util.stream.Collectors;
- @Service
- public class DataProcessService {
- @Autowired
- private GyeeConfig config;
- @Autowired
- private ProEconPowerFittingAnalySisService powerService;
- /**
- * 数据预处理
- *
- * @param ids 预处理数据的ID
- * @param maxs 最大风速
- * @param mins 最小风速
- * @param maxp 最大功率
- * @param minp 最小功率
- * @param isfbw 是否并网
- * @param isfhl 是否合理值
- * @param isbw 并网后10分钟
- * @param istj 停机前10分钟
- * @param isglpc 功率曲线偏差
- * @param isqfh 是否欠符合
- * @param qfhdj 欠符合等级
- * @return
- */
- public void dataProcess(List<String> ids, Double maxs, Double mins, Double maxp, Double minp, Boolean isfbw,
- Boolean isfhl, Boolean isbw, Boolean istj, Boolean isglpc, Boolean isqfh, Integer qfhdj) {
- ids.forEach(id -> {
- ProEconPowerFittingAnalySis obj = powerService.selectItemById(id);
- if (obj == null)
- return;
- /** 读取csv数据 转换成对象数组 **/
- List<PowerPointData> eis = new ArrayList<>();
- List<String> list = FileUtil.readFile(obj.getPath(), true);
- for (int i = 1; i < list.size(); i++) {
- eis.add(new PowerPointData(list.get(i).split(","), false));
- }
- /** 风速 -> 保证功率 来自数据库 **/
- List<ProBasicModelPower> modelPowerList = InitialRunner.modelPowerDetailNewMap.get(InitialRunner.wtNewMap.get(obj.getWindturbineId()).getModelId());
- Map<Double, Double> modelPowerMap = modelPowerList.stream().collect(Collectors.toMap(ProBasicModelPower::getSpeed, ProBasicModelPower::getEnsurePower));
- /** 数据预处理 **/
- List<PowerPointData> data = PowerProcessALG.dataProcess(eis, modelPowerMap, maxs, mins, maxp, minp, isfbw, isfhl, isbw, istj, isglpc, isqfh, qfhdj);
- /** 静风频率 **/
- List<Double> ls = WindDirectionALG.frequency(data.stream().map(PowerPointData::getSpeed).collect(Collectors.toList()), 3);
- double frequency = ls.get(0);
- double speed = ls.get(1);
- String content = assemble(data);
- String fileName = config.getFilePathProcess() + obj.getStation() + "_" + obj.getCode() + "_" + SnowFlakeUtil.generateIdL() / 100000 + ".csv";
- boolean flag = FileUtil.writeFile(fileName, content);
- if (flag) { // TODO 保存数据库
- obj.setPath(fileName);
- obj.setFrequency(frequency);
- obj.setSpeedavg(speed);
- obj.setType(Constants.DATA_PROCESS);
- powerService.insertItem(obj);
- }
- System.out.println("功率曲线拟合数据预处理完成:" + obj.getWindturbineId());
- });
- }
- /**
- * 数据预处理模块展示 tree
- *
- * @return
- */
- public List<Object> dataProcessTree() {
- List<ProEconPowerFittingAnalySis> list = powerService.selectList(Constants.DATA_PROCESS);
- List<Object> ls = PowerFittingUtil.powerDataTree(list, Constants.DATA_PROCESS);
- return ls;
- }
- /**
- * 组装表格数据
- * @param id
- * @return
- */
- public Map<String, Object> dataProcessShow(String id){
- Map<String, Object> map = new HashMap<>();
- /** 添加标题 **/
- List<FixedVo> fxList = AnnotationTool.getFixedVoList(PowerPointData.class);
- List<TableTitle> lt = fxList.stream().map(d -> new TableTitle(d.getName(), d.getDes())).collect(Collectors.toList());
- /** 添加内容 读取前500行 **/
- List<PowerPointData> list = new ArrayList<>();
- ProEconPowerFittingAnalySis obj = powerService.selectItemById(id);
- List<String> ls = FileUtil.readFile(obj.getPath(), false);
- for (int i = 1; i < ls.size(); i++){
- String[] split = ls.get(i).split(",");
- PowerPointData data = new PowerPointData(split, true);
- list.add(data);
- }
- map.put("title", lt);
- map.put("data", list);
- return map;
- }
- private String assemble(List<PowerPointData> list) {
- StringBuilder sb = setTitle();
- for (PowerPointData obj : list){
- List<FixedVo> ls = AnnotationTool.getValueList(obj);
- String data = ls.stream().filter(f -> !StringUtils.isEmpty(f.getRemark())).map(FixedVo::getKey).collect(Collectors.joining(","));
- sb.append(data).append("\n");
- }
- return sb.toString();
- }
- private StringBuilder setTitle() {
- StringBuilder sb = new StringBuilder();
- List<FixedVo> list = AnnotationTool.getFixedVoList(PowerPointData.class);
- String columnName = list.stream().map(FixedVo::getDes).collect(Collectors.joining(","));
- sb.append(columnName).append("\n");
- return sb;
- }
- }
|