| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167 |
- package com.gyee.power.fitting.service.custom.temperature;
- import com.gyee.power.fitting.common.alg.PowerTemperatureAlg;
- import com.gyee.power.fitting.common.spring.InitialRunner;
- import com.gyee.power.fitting.common.util.FileUtil;
- import com.gyee.power.fitting.model.Powerfittinganalysis;
- import com.gyee.power.fitting.model.ProBasicModelPower;
- import com.gyee.power.fitting.model.anno.AnnotationTool;
- import com.gyee.power.fitting.model.anno.FixedVo;
- import com.gyee.power.fitting.model.custom.*;
- import com.gyee.power.fitting.service.PowerfittinganalysisService;
- import org.springframework.stereotype.Service;
- import javax.annotation.Resource;
- import java.util.*;
- import java.util.stream.Collectors;
- @Service
- public class PowerTemperatureService {
- @Resource
- private PowerfittinganalysisService powerService;
- /**
- * 与温度有关的额定功率
- * @param ids
- */
- public Object ratedPower(String ids) {
- List<Object> result = new ArrayList<>();
- List<Powerfittinganalysis> list = powerService.selectListByIds(ids);
- if (list == null || list.size() == 0)
- return result;
- for (Powerfittinganalysis obj : list){
- String[] pids = obj.getProcessid().split(",");
- for (String id : pids){
- Powerfittinganalysis pf = powerService.selectItemById(id);
- List<ProBasicModelPower> ls = InitialRunner.modelPowerDetailNewMap.get(InitialRunner.wtNewMap.get(obj.getWindturbine()).getModelId());
- Double theoryPower = ls.get(ls.size() - 1).getTheoryPower(); //理论功率
- Map<String, Object> map = csvParse(pf);//数据解析
- List<PowerPointData> data = (List<PowerPointData>) map.get("data");
- Object res = PowerTemperatureAlg.temperatureRatedPower(data, theoryPower, (Double) map.get("minT"), (Double) map.get("maxT"));
- List<int[]> rp = PowerTemperatureAlg.temperatureRatedPower(data);
- Map<String, Object> mp = new HashMap<>();
- mp.put("wt", pf.getWindturbine());
- mp.put("power", InitialRunner.equipmentNewMap.get(InitialRunner.wtNewMap.get(pf.getWindturbine()).getModelId()));
- mp.put("res1", res); //额定功率vs.温度分析
- mp.put("res2", rp); //额定功率vs.温度分析
- result.add(mp);
- }
- }
- return result;
- }
- public Object curveAnalysis(String id) {
- Map<String, Object> map = new HashMap<>();
- Powerfittinganalysis obj = powerService.selectItemById(id);
- if (obj == null)
- return map;
- //实际功率
- List<Object> sjglList = new ArrayList<>();
- List<String> ls = FileUtil.readFile(obj.getPath(), true);
- for (int i = 1; i < ls.size(); i++){
- PowerFittingData data = new PowerFittingData(ls.get(i).split(","));
- sjglList.add(new double[]{Double.valueOf(data.getSpeed()), data.getNhdata()});
- }
- //保证功率
- List<ProBasicModelPower> modelPower = InitialRunner.modelPowerDetailNewMap.get(InitialRunner.wtNewMap.get(obj.getWindturbine()).getModelId());
- List<Object> bzglList = modelPower.stream().sorted(Comparator.comparing(ProBasicModelPower::getSpeed)).map(m -> new double[]{m.getSpeed(), m.getEnsurePower()}).collect(Collectors.toList());
- //散点
- List<Object[]> scatter = new ArrayList<>();
- //散点ID
- String[] ids = obj.getProcessid().split(",");
- for (String pid : ids) {
- Powerfittinganalysis pf = powerService.selectItemById(pid);
- List<String> lp = FileUtil.readFile(pf.getPath(), true); //数据解析
- for (int i = 1; i < lp.size(); i++){
- String[] split = lp.get(i).split(",");
- PowerPointData pd = new PowerPointData(split, true);
- if (pd.getSpeed() < 0 || pd.getPower() < 0)
- continue;
- Object[] temp = new Object[3];
- temp[0] = pd.getSpeed();
- temp[1] = pd.getPower();
- temp[2] = pd.getHjwd();
- scatter.add(temp);
- }
- }
- map.put("sjgl", sjglList); //实际功率
- map.put("llgl", bzglList); //保证功率
- map.put("scatter", scatter); //散点
- map.put("obj", obj); //对象
- return map;
- }
- /**
- * csv 文件解析成对象
- * @param obj
- * @return
- */
- private Map<String, Object> csvParse(Powerfittinganalysis obj){
- Map<String, Object> map = new HashMap<>();
- double minT = 0.0;
- double maxT = 0.0;
- List<PowerPointData> ls = new ArrayList<>();
- List<String> content = FileUtil.readFile(obj.getPath(), true);
- for (int i = 1; i < content.size(); i++){
- String[] split = content.get(i).split(",");
- PowerPointData data = new PowerPointData(split, true);
- if (data.getSpeed() < 0 || data.getPower() < 0)
- continue;
- data.setWtId(obj.getWindturbine());
- minT = data.getHjwd() < minT ? data.getHjwd() : minT;
- maxT = data.getHjwd() > maxT ? data.getHjwd() : maxT;
- ls.add(data);
- }
- map.put("data", ls);
- map.put("minT", minT);
- map.put("maxT", maxT);
- return map;
- }
- /**
- * 组装表格数据
- * @param id
- * @return
- */
- public Map<String, Object> temperatureDataShow(String id) {
- Map<String, Object> map = new HashMap<>();
- /** 添加标题 **/
- List<FixedVo> fxList = AnnotationTool.getFixedVoList(PowerTemperatureData.class);
- List<TableTitle> lt = fxList.stream().filter(f -> f.getRemark().equals("1"))
- .map(d -> new TableTitle(d.getName(), d.getDes())).collect(Collectors.toList());
- /** 添加内容 **/
- List<PowerPointData> list = new ArrayList<>();
- Powerfittinganalysis obj = powerService.selectItemById(id);
- if (obj == null)
- return map;
- String[] ids = obj.getProcessid().split(",");
- Powerfittinganalysis item = powerService.selectItemById(ids[0]);
- List<String> ls = FileUtil.readFile(item.getPath(), false);
- for (int i = 1; i < ls.size(); i++){
- PowerPointData data = new PowerPointData(ls.get(i).split(","), false);
- list.add(data);
- }
- map.put("title", lt);
- map.put("data", list);
- return map;
- }
- }
|