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 result = new ArrayList<>(); List 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 ls = InitialRunner.modelPowerDetailNewMap.get(InitialRunner.wtNewMap.get(obj.getWindturbine()).getModelId()); Double theoryPower = ls.get(ls.size() - 1).getTheoryPower(); //理论功率 Map map = csvParse(pf);//数据解析 List data = (List) map.get("data"); Object res = PowerTemperatureAlg.temperatureRatedPower(data, theoryPower, (Double) map.get("minT"), (Double) map.get("maxT")); List rp = PowerTemperatureAlg.temperatureRatedPower(data); Map 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 map = new HashMap<>(); Powerfittinganalysis obj = powerService.selectItemById(id); if (obj == null) return map; //实际功率 List sjglList = new ArrayList<>(); List 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 modelPower = InitialRunner.modelPowerDetailNewMap.get(InitialRunner.wtNewMap.get(obj.getWindturbine()).getModelId()); List bzglList = modelPower.stream().sorted(Comparator.comparing(ProBasicModelPower::getSpeed)).map(m -> new double[]{m.getSpeed(), m.getEnsurePower()}).collect(Collectors.toList()); //散点 List scatter = new ArrayList<>(); //散点ID String[] ids = obj.getProcessid().split(","); for (String pid : ids) { Powerfittinganalysis pf = powerService.selectItemById(pid); List 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 csvParse(Powerfittinganalysis obj){ Map map = new HashMap<>(); double minT = 0.0; double maxT = 0.0; List ls = new ArrayList<>(); List 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 temperatureDataShow(String id) { Map map = new HashMap<>(); /** 添加标题 **/ List fxList = AnnotationTool.getFixedVoList(PowerTemperatureData.class); List lt = fxList.stream().filter(f -> f.getRemark().equals("1")) .map(d -> new TableTitle(d.getName(), d.getDes())).collect(Collectors.toList()); /** 添加内容 **/ List 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 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; } }