ActivePowerService.java 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151
  1. package com.gyee.generation.service;
  2. import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
  3. import com.gyee.generation.init.CacheContext;
  4. import com.gyee.generation.model.auto.*;
  5. import com.gyee.generation.service.auto.IProEconActivePowerDataService;
  6. import com.gyee.generation.service.auto.IProEconEquipmentInfo15minuteService;
  7. import com.gyee.generation.util.DateUtils;
  8. import com.gyee.generation.util.StringUtils;
  9. import org.springframework.stereotype.Service;
  10. import javax.annotation.Resource;
  11. import java.util.*;
  12. @Service
  13. public class ActivePowerService {
  14. // private static final Logger logger = LoggerFactory.getLogger(ActivePowerService.class);
  15. // @Resource
  16. // private IEdosUtil edosUtil;
  17. @Resource
  18. private IProEconEquipmentInfo15minuteService proEconEquipmentInfo15minuteService;
  19. @Resource
  20. private IProEconActivePowerDataService proEconActivePowerDataService;
  21. public void calcActivePowerData(Date currentDate) {
  22. Calendar c = Calendar.getInstance();
  23. c.setTime(currentDate);
  24. Date beginDate = DateUtils.truncate(currentDate);
  25. c.add(Calendar.DAY_OF_MONTH,1);
  26. Date endDate=c.getTime();
  27. for (ProBasicPowerstation station : CacheContext.wpls) {
  28. QueryWrapper<ProEconInOrOutSpeedTotal> queryWrapper = new QueryWrapper<>();
  29. queryWrapper.ge("record_date",beginDate)
  30. .le("record_date",endDate)
  31. .eq("windPowerStation_Id",station.getId());
  32. List<ProEconEquipmentInfo15minute> ei15ls = proEconEquipmentInfo15minuteService.list();
  33. // .stream()
  34. // .filter(i -> i.getWindpowerstationId().equals(station.getId())
  35. // && ( i.getRecordDate().compareTo(beginDate)==0 || i.getRecordDate().after(beginDate))
  36. // && (i.getRecordDate().compareTo(endDate)==0 || i.getRecordDate().before(endDate))
  37. // ).collect(Collectors.toList());
  38. Map<String/*风机编号*/, Map<Double/*风速*/, List<Double>>> map =
  39. new HashMap<>();
  40. Map<Double/*风速*/, List<Double>> speedMap;
  41. for (ProEconEquipmentInfo15minute item : ei15ls) {
  42. if (map.containsKey(item.getWindturbineId())) {
  43. speedMap = map.get(item.getWindturbineId());
  44. } else {
  45. speedMap = new HashMap<>();
  46. map.put(item.getWindturbineId(), speedMap);
  47. }
  48. Double speed = StringUtils.round(item.getFpjfs(), 2);
  49. if (speed > item.getFpjfs()) {
  50. if (speed - item.getFpjfs() > 0.25) {
  51. speed -= 0.5;
  52. } else if (speed - item.getFpjfs() > 0.175) {
  53. speed -= 0.25;
  54. }
  55. } else if (speed < item.getFpjfs()) {
  56. if (item.getFpjfs() - speed > 0.25) {
  57. speed += 0.5;
  58. } else if (item.getFpjfs() - speed > 0.175) {
  59. speed += 0.25;
  60. }
  61. }
  62. if ((item.getFpjgl() > 0 && item.getFpjfs() >= 3) || (item.getFpjfs() <= 3)) {
  63. List<Double> powers;
  64. if (speedMap.containsKey(speed)) {
  65. powers = speedMap.get(speed);
  66. } else {
  67. powers = new ArrayList<>();
  68. speedMap.put(speed, powers);
  69. }
  70. powers.add(item.getFpjgl());
  71. }
  72. }
  73. for (String windturbineId : map.keySet()) {
  74. // List<ProEconActivePowerData> dataList = new ArrayList<>();
  75. Map<Double/*风速*/, List<Double>> intnalMap = map.get(windturbineId);
  76. for (Double speed : intnalMap.keySet()) {
  77. List<Double> powers = intnalMap.get(speed);
  78. QueryWrapper<ProEconActivePowerData> queryWrapper2 = new QueryWrapper<>();
  79. queryWrapper2.eq("record_date",beginDate)
  80. .eq("windturbine_id",windturbineId).eq("speed",speed);
  81. Optional<ProEconActivePowerData> data = proEconActivePowerDataService.list(queryWrapper2)
  82. .stream().findFirst();
  83. ProEconActivePowerData apdata;
  84. if (!data.isPresent()) {
  85. QueryWrapper<ProEconActivePowerData> wrapper = new QueryWrapper<>();
  86. wrapper.eq("id", data.get().getId());
  87. proEconActivePowerDataService.remove(wrapper);
  88. }
  89. apdata = new ProEconActivePowerData();
  90. buildActivePowerData(beginDate, station.getId(), windturbineId, speed, powers, apdata);
  91. proEconActivePowerDataService.save(apdata);
  92. // dataList.add(apdata);
  93. }
  94. }
  95. }
  96. }
  97. private void buildActivePowerData(Date beginDate, String station, String windturbineId, Double speed, List<Double> powers, ProEconActivePowerData data) {
  98. data.setWindturbineId(windturbineId);
  99. data.setWindpowerstationId(station);
  100. DoubleSummaryStatistics summaryStatistics = powers.stream().mapToDouble(n -> n).summaryStatistics();
  101. data.setPower(summaryStatistics.getAverage());
  102. data.setSpeed(speed);
  103. data.setFrequency(powers.size());
  104. data.setRecordDate(beginDate);
  105. if (CacheContext.wtmap.containsKey(windturbineId)) {
  106. ProBasicEquipment wt = CacheContext.wtmap.get(windturbineId);
  107. data.setModelId(wt.getModelId());
  108. data.setWindturbineCode(wt.getNemCode());
  109. }
  110. if (StringUtils.notEmp(data.getModelId()) && CacheContext.modelMap.containsKey(data.getModelId())) {
  111. ProEconEquipmentmodel em = CacheContext.modelMap.get(data.getModelId());
  112. data.setModelName(em.getName());
  113. }
  114. }
  115. }