PowerCurveFittingModelService.java 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. package com.gyee.generation.service;
  2. import com.gyee.generation.init.CacheContext;
  3. import com.gyee.generation.model.auto.ProBasicModelPower;
  4. import com.gyee.generation.model.auto.ProBasicModelPowerRd;
  5. import com.gyee.generation.model.vo.PointVo;
  6. import com.gyee.generation.service.auto.IProBasicModelPowerRdService;
  7. import com.gyee.generation.util.StringUtils;
  8. import com.gyee.generation.util.realtimesource.math.LineUtil;
  9. import org.springframework.beans.factory.annotation.Value;
  10. import org.springframework.stereotype.Service;
  11. import javax.annotation.Resource;
  12. import java.util.*;
  13. import java.util.stream.Collectors;
  14. @Service
  15. public class PowerCurveFittingModelService {
  16. // private static final Logger logger = LoggerFactory.getLogger(PowerCurveFittingModelService.class);
  17. @Value("${curvefitting.dimension}")
  18. private Integer dimension;
  19. @Value("${curvefitting.scale}")
  20. private Double scale;
  21. @Resource
  22. private IProBasicModelPowerRdService proBasicModelPowerRdService;
  23. public void cureFittingModel() {
  24. Map<String, List<ProBasicModelPower>> modelpmap = new TreeMap<>();
  25. for (ProBasicModelPower mp : CacheContext.mpls) {
  26. if (modelpmap.containsKey(mp.getModelId())) {
  27. List<ProBasicModelPower> ls = modelpmap.get(mp.getModelId());
  28. ls.add(mp);
  29. } else {
  30. List<ProBasicModelPower> ls = new ArrayList<>();
  31. ls.add(mp);
  32. modelpmap.put(mp.getModelId(), ls);
  33. }
  34. }
  35. for (String key : modelpmap.keySet()) {
  36. List<ProBasicModelPower> ls = modelpmap.get(key);
  37. if (!ls.isEmpty()) {
  38. ls = ls.stream().sorted(Comparator.comparing(ProBasicModelPower::getSpeed)).collect(Collectors.toList());
  39. //理论功率拟合
  40. List<PointVo> llls = LineUtil.buildLine(ls.stream().mapToDouble(ProBasicModelPower::getSpeed).toArray(), ls.stream().mapToDouble(ProBasicModelPower::getTheoryPower).toArray(), ls.size(), dimension, scale);
  41. //保证功率拟合
  42. List<PointVo> bzls = LineUtil.buildLine(ls.stream().mapToDouble(ProBasicModelPower::getSpeed).toArray(), ls.stream().mapToDouble(ProBasicModelPower::getEnsurePower).toArray(), ls.size(), dimension, scale);
  43. if (!llls.isEmpty() && !bzls.isEmpty() && llls.size() == bzls.size()) {
  44. double value=0.00;
  45. for (int i = 0; i < 100; i++) {
  46. ProBasicModelPowerRd rd = new ProBasicModelPowerRd();
  47. rd.setModelId(ls.get(0).getModelId());
  48. rd.setWindpowerstationId(ls.get(0).getWindpowerstationId());
  49. rd.setEnsurePower(0.0);
  50. rd.setTheoryPower(0.0);
  51. rd.setSpeed(value);
  52. proBasicModelPowerRdService.save(rd);
  53. value=value+0.01;
  54. }
  55. for (int i = 0; i < llls.size(); i++) {
  56. ProBasicModelPowerRd rd = new ProBasicModelPowerRd();
  57. rd.setModelId(ls.get(0).getModelId());
  58. rd.setWindpowerstationId(ls.get(0).getWindpowerstationId());
  59. rd.setEnsurePower(StringUtils.round(bzls.get(i).getY(),2));
  60. rd.setTheoryPower(StringUtils.round(llls.get(i).getY(),2));
  61. rd.setSpeed(StringUtils.round(llls.get(i).getX(),2));
  62. proBasicModelPowerRdService.save(rd);
  63. }
  64. }
  65. }
  66. }
  67. }
  68. }