PowerTemperatureService.java 6.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167
  1. package com.gyee.power.fitting.service.custom.temperature;
  2. import com.gyee.power.fitting.common.alg.PowerTemperatureAlg;
  3. import com.gyee.power.fitting.common.spring.InitialRunner;
  4. import com.gyee.power.fitting.common.util.FileUtil;
  5. import com.gyee.power.fitting.model.Powerfittinganalysis;
  6. import com.gyee.power.fitting.model.ProBasicModelPower;
  7. import com.gyee.power.fitting.model.anno.AnnotationTool;
  8. import com.gyee.power.fitting.model.anno.FixedVo;
  9. import com.gyee.power.fitting.model.custom.*;
  10. import com.gyee.power.fitting.service.PowerfittinganalysisService;
  11. import org.springframework.stereotype.Service;
  12. import javax.annotation.Resource;
  13. import java.util.*;
  14. import java.util.stream.Collectors;
  15. @Service
  16. public class PowerTemperatureService {
  17. @Resource
  18. private PowerfittinganalysisService powerService;
  19. /**
  20. * 与温度有关的额定功率
  21. * @param ids
  22. */
  23. public Object ratedPower(String ids) {
  24. List<Object> result = new ArrayList<>();
  25. List<Powerfittinganalysis> list = powerService.selectListByIds(ids);
  26. if (list == null || list.size() == 0)
  27. return result;
  28. for (Powerfittinganalysis obj : list){
  29. String[] pids = obj.getProcessid().split(",");
  30. for (String id : pids){
  31. Powerfittinganalysis pf = powerService.selectItemById(id);
  32. List<ProBasicModelPower> ls = InitialRunner.modelPowerDetailNewMap.get(InitialRunner.wtNewMap.get(obj.getWindturbine()).getModelId());
  33. Double theoryPower = ls.get(ls.size() - 1).getTheoryPower(); //理论功率
  34. Map<String, Object> map = csvParse(pf);//数据解析
  35. List<PowerPointData> data = (List<PowerPointData>) map.get("data");
  36. Object res = PowerTemperatureAlg.temperatureRatedPower(data, theoryPower, (Double) map.get("minT"), (Double) map.get("maxT"));
  37. List<int[]> rp = PowerTemperatureAlg.temperatureRatedPower(data);
  38. Map<String, Object> mp = new HashMap<>();
  39. mp.put("wt", pf.getWindturbine());
  40. mp.put("power", InitialRunner.equipmentNewMap.get(InitialRunner.wtNewMap.get(pf.getWindturbine()).getModelId()));
  41. mp.put("res1", res); //额定功率vs.温度分析
  42. mp.put("res2", rp); //额定功率vs.温度分析
  43. result.add(mp);
  44. }
  45. }
  46. return result;
  47. }
  48. public Object curveAnalysis(String id) {
  49. Map<String, Object> map = new HashMap<>();
  50. Powerfittinganalysis obj = powerService.selectItemById(id);
  51. if (obj == null)
  52. return map;
  53. //实际功率
  54. List<Object> sjglList = new ArrayList<>();
  55. List<String> ls = FileUtil.readFile(obj.getPath(), true);
  56. for (int i = 1; i < ls.size(); i++){
  57. PowerFittingData data = new PowerFittingData(ls.get(i).split(","));
  58. sjglList.add(new double[]{Double.valueOf(data.getSpeed()), data.getNhdata()});
  59. }
  60. //保证功率
  61. List<ProBasicModelPower> modelPower = InitialRunner.modelPowerDetailNewMap.get(InitialRunner.wtNewMap.get(obj.getWindturbine()).getModelId());
  62. List<Object> bzglList = modelPower.stream().sorted(Comparator.comparing(ProBasicModelPower::getSpeed)).map(m -> new double[]{m.getSpeed(), m.getEnsurePower()}).collect(Collectors.toList());
  63. //散点
  64. List<Object[]> scatter = new ArrayList<>();
  65. //散点ID
  66. String[] ids = obj.getProcessid().split(",");
  67. for (String pid : ids) {
  68. Powerfittinganalysis pf = powerService.selectItemById(pid);
  69. List<String> lp = FileUtil.readFile(pf.getPath(), true); //数据解析
  70. for (int i = 1; i < lp.size(); i++){
  71. String[] split = lp.get(i).split(",");
  72. PowerPointData pd = new PowerPointData(split, true);
  73. if (pd.getSpeed() < 0 || pd.getPower() < 0)
  74. continue;
  75. Object[] temp = new Object[3];
  76. temp[0] = pd.getSpeed();
  77. temp[1] = pd.getPower();
  78. temp[2] = pd.getHjwd();
  79. scatter.add(temp);
  80. }
  81. }
  82. map.put("sjgl", sjglList); //实际功率
  83. map.put("llgl", bzglList); //保证功率
  84. map.put("scatter", scatter); //散点
  85. map.put("obj", obj); //对象
  86. return map;
  87. }
  88. /**
  89. * csv 文件解析成对象
  90. * @param obj
  91. * @return
  92. */
  93. private Map<String, Object> csvParse(Powerfittinganalysis obj){
  94. Map<String, Object> map = new HashMap<>();
  95. double minT = 0.0;
  96. double maxT = 0.0;
  97. List<PowerPointData> ls = new ArrayList<>();
  98. List<String> content = FileUtil.readFile(obj.getPath(), true);
  99. for (int i = 1; i < content.size(); i++){
  100. String[] split = content.get(i).split(",");
  101. PowerPointData data = new PowerPointData(split, true);
  102. if (data.getSpeed() < 0 || data.getPower() < 0)
  103. continue;
  104. data.setWtId(obj.getWindturbine());
  105. minT = data.getHjwd() < minT ? data.getHjwd() : minT;
  106. maxT = data.getHjwd() > maxT ? data.getHjwd() : maxT;
  107. ls.add(data);
  108. }
  109. map.put("data", ls);
  110. map.put("minT", minT);
  111. map.put("maxT", maxT);
  112. return map;
  113. }
  114. /**
  115. * 组装表格数据
  116. * @param id
  117. * @return
  118. */
  119. public Map<String, Object> temperatureDataShow(String id) {
  120. Map<String, Object> map = new HashMap<>();
  121. /** 添加标题 **/
  122. List<FixedVo> fxList = AnnotationTool.getFixedVoList(PowerTemperatureData.class);
  123. List<TableTitle> lt = fxList.stream().filter(f -> f.getRemark().equals("1"))
  124. .map(d -> new TableTitle(d.getName(), d.getDes())).collect(Collectors.toList());
  125. /** 添加内容 **/
  126. List<PowerPointData> list = new ArrayList<>();
  127. Powerfittinganalysis obj = powerService.selectItemById(id);
  128. if (obj == null)
  129. return map;
  130. String[] ids = obj.getProcessid().split(",");
  131. Powerfittinganalysis item = powerService.selectItemById(ids[0]);
  132. List<String> ls = FileUtil.readFile(item.getPath(), false);
  133. for (int i = 1; i < ls.size(); i++){
  134. PowerPointData data = new PowerPointData(ls.get(i).split(","), false);
  135. list.add(data);
  136. }
  137. map.put("title", lt);
  138. map.put("data", list);
  139. return map;
  140. }
  141. }