JavaFunctionJobHandler2.java 27 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388
  1. package com.ruoyi.web.controller;
  2. import cn.hutool.core.date.DateTime;
  3. import cn.hutool.core.date.DateUtil;
  4. import cn.hutool.core.util.NumberUtil;
  5. import com.baomidou.mybatisplus.extension.service.IService;
  6. import com.ruoyi.ucp.entity.PointData;
  7. import com.ruoyi.ucp.entity.PointInfo;
  8. import com.ruoyi.ucp.entity.TurbineInfoDay;
  9. import com.ruoyi.ucp.feign.AdapterApi;
  10. import com.ruoyi.ucp.util.CalcCache;
  11. import com.ruoyi.web.runner.ServiceGroup;
  12. import lombok.Delegate;
  13. import org.slf4j.Logger;
  14. import org.slf4j.LoggerFactory;
  15. import org.springframework.stereotype.Service;
  16. import javax.annotation.Resource;
  17. import java.util.*;
  18. import java.util.stream.Collectors;
  19. //@Service
  20. @Service
  21. public class JavaFunctionJobHandler2 {
  22. public static final Logger logger = LoggerFactory.getLogger(JavaFunctionJobHandler.class);
  23. @Resource
  24. private AdapterApi adapter;
  25. @Resource
  26. private ServiceGroup serviceGroup;
  27. @Delegate
  28. @Resource
  29. private JavaFunctionJobHandler handler;
  30. //场站上网购网厂用综合场用日发电量累加推送
  31. public void calcStationSwGwCyZhcyRfdlLjTs(DateTime begin, DateTime end) {
  32. if (end.equals(DateUtil.beginOfDay(end))) return;
  33. List<PointInfo> entity = getEntity("AI121", "turbine");
  34. List<PointInfo> swdlEt = getEntity("Z-ZXYG-CX", "meter");
  35. List<PointInfo> gwdlEt = getEntity("Z-FXYG-CX", "meter");
  36. List<PointInfo> cydlEt = getEntity("B-ZXYG-ZDB1", "meter");
  37. getRawDataByEntity(entity, goldenUri(), begin, end);
  38. Map<String, Map<String, List<PointInfo>>> stationLineMap = entity.stream().collect(Collectors.groupingBy(PointInfo::getStationId, Collectors.groupingBy(PointInfo::getLineId)));
  39. Map<String, PointInfo> swdlMap = getRawDataByEntity(swdlEt, goldenUri(), begin, end, PointInfo::getStationId);
  40. Map<String, PointInfo> gwdlMap = getRawDataByEntity(gwdlEt, goldenUri(), begin, end, PointInfo::getStationId);
  41. Map<String, PointInfo> cydlMap = getRawDataByEntity(cydlEt, goldenUri(), begin, end, PointInfo::getStationId);
  42. swdlMap.forEach((stId, info) -> {
  43. Map<String, List<PointInfo>> lineMap = stationLineMap.get(stId);
  44. lineMap.forEach((lineId, pis) -> {
  45. double rfdl = out2Zero(pis.stream().mapToDouble(pi -> calcHaDl(pi)).sum(), 0, 6000000);
  46. getDataForZbs2(end, CalcCache.oneMap.get(lineId + "-日风机发电量"), rfdl, 0.001);
  47. });
  48. double rfdl = out2Zero(entity.stream().mapToDouble(pi -> calcHaDl(pi)).sum(), 0, 6000000) / 1000;
  49. double swdl = out2Zero(calcHaDl2w(info), 0, 6000000) / 1000;
  50. double gwdl = out2Zero(calcHaDl(gwdlMap.get(stId)), 0, 6000000) / 1000;
  51. double cydl = out2Zero(calcHaDl(cydlMap.get(stId)), 0, 6000000) / 1000;
  52. getDataForZbs2(end, "区域集控.惠安风场.光耀计算.日发电量", rfdl);
  53. getDataForZbs2(end, "区域集控.惠安风场.光耀计算.日上网电量", swdl);
  54. getDataForZbs2(end, "区域集控.惠安风场.光耀计算.日购网电量", gwdl);
  55. getDataForZbs2(end, "区域集控.惠安风场.光耀计算.日场用电量", cydl);
  56. double zhcydl = rfdl + gwdl - swdl;
  57. getDataForZb(end, "区域集控.惠安风场.光耀计算.日综合场用电量", zhcydl);
  58. getDataForZb(end, "区域集控.惠安风场.光耀计算.月综合场用电量", tsSub(tsAdd("月发电量", "月购网电量"), "月上网电量"));
  59. getDataForZb(end, "区域集控.惠安风场.光耀计算.年综合场用电量", tsSub(tsAdd("年发电量", "年购网电量"), "年上网电量"));
  60. getDataForZb(end, "区域集控.惠安风场.光耀计算.日场用电率", cydl / rfdl * 100);
  61. getDataForZb(end, "区域集控.惠安风场.光耀计算.日综合场用电率", zhcydl / rfdl * 100);
  62. getDataForZb(end, "区域集控.惠安风场.光耀计算.月场用电率", tsDiv("月场用电量", "月发电量") * 100);
  63. getDataForZb(end, "区域集控.惠安风场.光耀计算.月综合场用电率", tsDiv("月综合场用电量", "月发电量") * 100);
  64. getDataForZb(end, "区域集控.惠安风场.光耀计算.年场用电率", tsDiv("年场用电量", "年发电量") * 100);
  65. getDataForZb(end, "区域集控.惠安风场.光耀计算.年综合场用电率", tsDiv("年综合场用电量", "年发电量") * 100);
  66. });
  67. }
  68. //场站五项损失累加推送,依赖calcStationSwGwCyZhcyRfdlLjTs计算的日发电量
  69. public void calcStation5sLjTs(DateTime begin, DateTime end, double ssxs) {
  70. if (end.equals(DateUtil.beginOfDay(end))) return;
  71. List<PointInfo> isFubing = getIsFubing(begin, end);
  72. Map<String, List<PointData>> isFubingMap = isFubing.stream().collect(Collectors.toMap(PointInfo::getTurbineId, PointInfo::getPointDatas));
  73. //风速
  74. List<PointInfo> entityFs = CalcCache.pointInfosMap.get("推送-turbine-风速-snap15s");
  75. Map<String, Map<String, List<PointData>>> fsMapMap = pointInfos2MapMap(entityFs);
  76. //功率
  77. List<PointInfo> entityGl = CalcCache.pointInfosMap.get("推送-turbine-功率-snap15s");
  78. Map<String, Map<String, List<PointData>>> glMapMap = pointInfos2MapMap(entityGl);
  79. //状态
  80. List<PointInfo> ztMapMap = CalcCache.pointInfosMap.get("推送-turbine-状态-snap15s");
  81. Map<String, Map<String, PointInfo>> ztMapMapInfos = pointInfos2MapMap2(ztMapMap);
  82. Map<String, TurbineInfoDay> dayMap = getTurbineinfoMap(begin, entityFs);
  83. ztMapMapInfos.forEach((stId, ztMapInfo) -> ztMapInfo.forEach((wtId, ztInfo) -> {
  84. //0 待机,1 手动停机,2 正常发电,3 发电降出力,4 故障,5 故障受累,6 检修,7 检修受累,8 限电降出力,
  85. // 9 限电停机,10 电网受累,11 环境受累,12 通讯中断,13 设备离线
  86. TurbineInfoDay infoDay = dayMap.get(wtId);
  87. Map<String, Double> loss = getTurbinePowerLoss2(isFubingMap.get(wtId), ztInfo, fsMapMap.get(stId).get(wtId), glMapMap.get(stId).get(wtId));
  88. infoDay.setJhjxss(loss.get("jxss") * ssxs);
  89. infoDay.setFjhjxss(loss.get("gzss") * ssxs + loss.get("fdjcl") * ssxs + loss.get("sdtj") * ssxs);
  90. infoDay.setXdss(loss.get("xdjcl") * ssxs + loss.get("xdtj") * ssxs);
  91. infoDay.setSlss(loss.get("slss") * ssxs);
  92. infoDay.setDjss(loss.get("xdtj") * ssxs);
  93. infoDay.setGzss(loss.get("gzss") * ssxs);
  94. infoDay.setXnss(loss.get("xnss") * ssxs + loss.get("djss") * ssxs);
  95. //infoDay.setLlfdl(infoDay.getRfdl() + infoDay.getJhjxss() + infoDay.getFjhjxss() + infoDay.getXdss() + infoDay.getSlss() + infoDay.getXnss());
  96. }));
  97. //AGC
  98. List<PointInfo> entityAgc = CalcCache.pointInfosMap.get("推送-booster-AGC-snap15s");
  99. //出线
  100. List<PointInfo> entityCx = CalcCache.pointInfosMap.get("推送-booster-出线-snap15s");
  101. //可用功率
  102. List<PointData> kyglpds = CalcCache.pointDatasMap.get("推送-booster-可用功率-snap15s");
  103. PointInfo cxPi = entityCx.get(0);
  104. List<PointData> cxPds = cxPi.getPointDatas();
  105. List<PointData> czxd = calcStationXd2(entityAgc.get(0), cxPds, kyglpds, 0.01);
  106. List<Double> xdl = new ArrayList<>();
  107. //总损失电量
  108. List<Double> zssdl = new ArrayList<>();
  109. int min = findMin(cxPds, kyglpds, czxd);
  110. for (int i = 0; i < min; i++) {
  111. double v = kyglpds.get(i).getValue() * 1000 - cxPds.get(i).getValue() * cxPi.getCoef();
  112. if (v < 0) v = 0;
  113. if (czxd.get(i).isBooleanValue()) {
  114. xdl.add(v);
  115. } else {
  116. xdl.add(0d);
  117. zssdl.add(v);
  118. }
  119. }
  120. //可用功率算的限电量
  121. double sumxdl = xdl.stream().mapToDouble(Double::doubleValue).sum() / 2400 / 1000;
  122. //adapter.writeHistoryBatch(mqttUri(), getDataForZbs2(end, "区域集控.惠安风场.光耀计算.日限电量", sumxdl));
  123. getDataForZbs2(end, "区域集控.惠安风场.光耀计算.日限电量", sumxdl);
  124. getDataForZb(end, "区域集控.惠安风场.光耀计算.日限电率", sumxdl / tsAdd(sumxdl, "日发电量") * 100);
  125. getDataForZb(end, "区域集控.惠安风场.光耀计算.月限电率", tsDiv("月限电量", tsAdd("月限电量", "月发电量")) * 100);
  126. getDataForZb(end, "区域集控.惠安风场.光耀计算.年限电率", tsDiv("年限电量", tsAdd("年限电量", "年发电量")) * 100);
  127. getDataForZb(end, "区域集控.惠安风场.光耀计算.日限电率", CalcCache.pointDataMap.get("区域集控.惠安风场.光耀计算.日限电率").getValue());
  128. getDataForZb(end, "区域集控.惠安风场.光耀计算.月限电率", CalcCache.pointDataMap.get("区域集控.惠安风场.光耀计算.月限电率").getValue());
  129. getDataForZb(end, "区域集控.惠安风场.光耀计算.年限电率", CalcCache.pointDataMap.get("区域集控.惠安风场.光耀计算.年限电率").getValue());
  130. Collection<TurbineInfoDay> values = dayMap.values();
  131. //可用功率算的总损失电量(除限电)
  132. double sumZssdl = zssdl.stream().mapToDouble(Double::doubleValue).sum() / 2400 / 1000;
  133. //理论功率算的总损失电量(除限电) xd + fjh + jh + xn + sl
  134. double zsssum = values.stream().mapToDouble(tid -> tid.getFjhjxss() + tid.getJhjxss() + tid.getXnss() + tid.getSlss()).sum();
  135. double xdsum = values.stream().mapToDouble(TurbineInfoDay::getXdss).sum();
  136. //可用功率算的限电
  137. double sum = xdl.stream().mapToDouble(Double::doubleValue).sum() / 2400;
  138. double xdxs = xdsum == 0d ? 0d : sum / xdsum;
  139. double zssXs = zsssum == 0d ? 0d : sumZssdl / zsssum;
  140. double jhjxss = 0, fjhjxss = 0, xnss = 0, djss = 0, gzss = 0, slss = 0;
  141. for (TurbineInfoDay tid : values) {
  142. tid.setXdss((tid.getXdss() - tid.getDjss()) * xdxs);
  143. //
  144. tid.setJhjxss(tid.getJhjxss() * zssXs);
  145. tid.setFjhjxss(tid.getFjhjxss() * zssXs);
  146. tid.setXnss(tid.getXnss() * zssXs);
  147. tid.setDjss(tid.getDjss() * zssXs);
  148. tid.setGzss(tid.getGzss() * zssXs);
  149. tid.setSlss(tid.getSlss() * zssXs);
  150. tid.setLlfdl(tid.getRfdl() + tid.getXdss() + tid.getFjhjxss() + tid.getJhjxss() + tid.getXnss());
  151. jhjxss += tid.getJhjxss();
  152. fjhjxss += tid.getFjhjxss();
  153. xnss += tid.getXnss();
  154. djss += tid.getDjss();
  155. gzss += tid.getGzss();
  156. slss += tid.getSlss();
  157. }
  158. IService<TurbineInfoDay> service = serviceGroup.getService(TurbineInfoDay.class);
  159. //service.saveOrUpdateBatch(values);
  160. getDataForZbs2(end, "区域集控.惠安风场.光耀计算.日故障损失电量", gzss * zssXs);
  161. getDataForZbs2(end, "区域集控.惠安风场.光耀计算.日计划检修损失电量", jhjxss * zssXs);
  162. getDataForZbs2(end, "区域集控.惠安风场.光耀计算.日受累损失电量", (djss + slss) * zssXs);
  163. getDataForZb(end, "区域集控.惠安风场.光耀计算.日损失电量", sumZssdl);
  164. getDataForZbs2(end, "区域集控.惠安风场.光耀计算.日限电损失电量", sumxdl);
  165. getDataForZbs2(end, "区域集控.惠安风场.光耀计算.日性能损失电量", xnss * zssXs);
  166. getDataForZb(end, "区域集控.惠安风场.光耀计算.日性能损失率", (xnss * zssXs) / tsAdd("日性能损失电量", "日发电量") * 100);
  167. getDataForZb(end, "区域集控.惠安风场.光耀计算.月性能损失率", tsDiv("月限电量", tsAdd("月限电量", "月发电量")) * 100);
  168. getDataForZb(end, "区域集控.惠安风场.光耀计算.年性能损失率", tsDiv("年限电量", tsAdd("年限电量", "年发电量")) * 100);
  169. getDataForZb(end, "区域集控.惠安风场.光耀计算.月损失电量", tsAdd("月限电量", "月计划检修损失电量", "月故障损失电量", "月性能损失电量", "月受累损失电量"));
  170. getDataForZb(end, "区域集控.惠安风场.光耀计算.年损失电量", tsAdd("年限电量", "年计划检修损失电量", "年故障损失电量", "年性能损失电量", "年受累损失电量"));
  171. getDataForZb(end, "区域集控.惠安风场.光耀计算.日理论发电量", tsAdd("日发电量", "日损失电量"));
  172. getDataForZb(end, "区域集控.惠安风场.光耀计算.月理论发电量", tsAdd("月发电量", "月损失电量"));
  173. getDataForZb(end, "区域集控.惠安风场.光耀计算.年理论发电量", tsAdd("年发电量", "年损失电量"));
  174. getDataForZb(end, "区域集控.惠安风场.光耀计算.日风能利用率", tsDiv("日发电量", "日理论发电量") * 100);
  175. getDataForZb(end, "区域集控.惠安风场.光耀计算.月风能利用率", tsDiv("月发电量", "月理论发电量") * 100);
  176. getDataForZb(end, "区域集控.惠安风场.光耀计算.年风能利用率", tsDiv("年发电量", "年理论发电量") * 100);
  177. }
  178. //线路发电量耗电量主变发电量累加推送
  179. public void calcXlZbFdlLjTs(DateTime begin, DateTime end) {
  180. if (end.equals(DateUtil.beginOfDay(end))) return;
  181. DateTime begin0 = DateUtil.offsetDay(begin, -1);
  182. List<PointInfo> entity0 = getEntity("Z-ZXYG-JX", "meter");
  183. filterList(entity0, pi -> "".equals(pi.getProjectId()));
  184. getRawDataByEntity(entity0, goldenUri(), begin0, begin);
  185. List<PointInfo> entity = getEntity("Z-ZXYG-JX", "meter");
  186. filterList(entity, pi -> "".equals(pi.getProjectId()));
  187. getRawDataByEntity(entity, goldenUri(), begin, end);
  188. //线路耗电量
  189. List<PointInfo> entityHdl = getEntity("Z-FXYG-JX", "meter");
  190. filterList(entityHdl, pi -> "".equals(pi.getProjectId()));
  191. getRawDataByEntity(entityHdl, goldenUri(), begin, end);
  192. Map<String, PointInfo> fdlMap0 = list2Map(entity0, PointInfo::getLineId);
  193. Map<String, PointInfo> fdlMap = list2Map(entity, PointInfo::getLineId);
  194. Map<String, PointInfo> hdlMap = list2Map(entityHdl, PointInfo::getLineId);
  195. for (PointInfo day : entity) {
  196. String lineId = day.getLineId();
  197. double fdl = 0;
  198. try {
  199. double pdsfdl0 = fdlMap0.get(lineId).getPointDatas().stream().mapToDouble(PointData::getValue).max().orElse(0);
  200. double pdsfdl = day.getPointDatas().stream().mapToDouble(PointData::getValue).max().orElse(0);
  201. fdl = out2Zero(NumberUtil.round((pdsfdl - pdsfdl0), 2).doubleValue() * day.getCoef(), 0, 90000);
  202. } catch (Exception e) {
  203. e.printStackTrace();
  204. }
  205. double hdl = out2Zero(calcHaDl(hdlMap.get(lineId)), 0, 90000);
  206. getDataForZbs2(end, CalcCache.oneMap.get(lineId + "-日发电量"), fdl * 0.001);
  207. getDataForZbs2(end, CalcCache.oneMap.get(lineId + "-日耗电量"), hdl * 0.001);
  208. }
  209. getDataForZb(end, "区域集控.惠安风场.光耀计算.集电线日发电量", tsAdd("集电一线日发电量", "集电二线日发电量", "集电三线日发电量", "集电四线日发电量"));
  210. getDataForZb(end, "区域集控.惠安风场.光耀计算.集电线月发电量", tsAdd("集电一线月发电量", "集电二线月发电量", "集电三线月发电量", "集电四线月发电量"));
  211. getDataForZb(end, "区域集控.惠安风场.光耀计算.集电线年发电量", tsAdd("集电一线年发电量", "集电二线年发电量", "集电三线年发电量", "集电四线年发电量"));
  212. getDataForZb(end, "区域集控.惠安风场.光耀计算.日线路损耗", tsSub("日发电量", "集电线日发电量"));
  213. getDataForZb(end, "区域集控.惠安风场.光耀计算.月线路损耗", tsSub("月发电量", "集电线月发电量"));
  214. getDataForZb(end, "区域集控.惠安风场.光耀计算.年线路损耗", tsSub("年发电量", "集电线年发电量"));
  215. System.out.println();
  216. }
  217. //风机平均风速累加推送
  218. public void calcStationPjfsLjTs(DateTime begin, DateTime end) {
  219. if (end.equals(DateUtil.beginOfDay(end))) return;
  220. List<PointInfo> fsEntity = getEntity("AI066", "turbine");
  221. getRawDataByEntity(fsEntity, goldenUri(), begin, end);
  222. double yf = fsEntity.stream().mapToLong(e -> calcMatchDuration(e.getPointDatas(), pd -> pd.getValue() > 3 && pd.getValue() < 18)).average().orElse(0.0);
  223. yf = yf / (1000 * 60 * 60d);
  224. double fs = fsEntity.stream().mapToDouble(e -> averagePd(e.getPointDatas())).average().orElse(0);
  225. getDataForZbs2(end, "区域集控.惠安风场.光耀计算.日平均风速", fs);
  226. getDataForZbs2(end, "区域集控.惠安风场.光耀计算.日有效风时数", yf);
  227. }
  228. //场站利用小时累加推送
  229. public void calcStationLyxsLjTs(DateTime begin, DateTime end) {
  230. //装机容量
  231. List<PointInfo> entityAiZt = getEntity("AI422", "state");
  232. double zjrl = entityAiZt.stream().mapToDouble(pi -> pi.getSpare2() * pi.getCoef()).sum() / 1000;
  233. getDataForZbs2(end, "区域集控.惠安风场.光耀计算.日利用小时", tsDiv("日发电量", zjrl));
  234. }
  235. //场站运行小时累加推送
  236. public void calcStationYxxsLjTs(DateTime begin, DateTime end) {
  237. //状态测点
  238. List<PointInfo> entityMxzt = getEntity("MXZT", "turbine");
  239. getRawDataByEntity(entityMxzt, taosUri(), begin, end);
  240. double yxxs = 0, gzxs = 0, jxxs = 0, djxs = 0, tjxs = 0, gzcs = 0;
  241. double klyl = 0;
  242. for (PointInfo info : entityMxzt) {
  243. //统计
  244. Map<String, Map<Double, Long>> dlmm = calcStateDurationFrequency(info.getPointDatas());
  245. Map<Double, Long> durations = dlmm.get("duration");
  246. Map<Double, Long> frequency = dlmm.get("frequency");
  247. yxxs += durations.getOrDefault(2.0, 0L);
  248. Long gzt = durations.getOrDefault(4.0, 0L);
  249. gzxs += gzt;
  250. jxxs += durations.getOrDefault(6.0, 0L);
  251. djxs += durations.getOrDefault(0.0, 0L);
  252. tjxs += durations.getOrDefault(1.0, 0L);
  253. gzcs += frequency.getOrDefault(4.0, 0L);
  254. klyl += (24 - gzt / (1000 * 60 * 60d)) / 24;
  255. }
  256. getDataForZbs2(end, "区域集控.惠安风场.光耀计算.日运行小时", yxxs / (1000 * 60 * 60d) / entityMxzt.size());
  257. getDataForZbs2(end, "区域集控.惠安风场.光耀计算.日风电机组故障停运时长", gzxs / (1000 * 60 * 60d) / entityMxzt.size());
  258. getDataForZbs2(end, "区域集控.惠安风场.光耀计算.日计划停机时长", jxxs / (1000 * 60 * 60d) / entityMxzt.size());
  259. getDataForZbs2(end, "区域集控.惠安风场.光耀计算.日技术待机时长", djxs / (1000 * 60 * 60d) / entityMxzt.size());
  260. getDataForZbs2(end, "区域集控.惠安风场.光耀计算.日平均停机时长", tjxs / (1000 * 60 * 60d) / entityMxzt.size());
  261. getDataForZb(end, "区域集控.惠安风场.光耀计算.日自然因素停运时长", 0);
  262. getDataForZb(end, "区域集控.惠安风场.光耀计算.月自然因素停运时长", 0);
  263. getDataForZb(end, "区域集控.惠安风场.光耀计算.年日自然因素停运时长", 0);
  264. getDataForZbs2(end, "区域集控.惠安风场.光耀计算.日风电机组故障停运次数", gzcs);
  265. getDataForZbs5(end, "区域集控.惠安风场.光耀计算.日风电机组设备可利用率", klyl / entityMxzt.size() * 100);
  266. getDataForZb(end, "区域集控.惠安风场.光耀计算.日运行暴露率", tsDiv("日运行小时", 24d - tsAdd("日风电机组故障停运时长", "日计划停机时长")) * 100);
  267. getDataForZb(end, "区域集控.惠安风场.光耀计算.月运行暴露率", tsDiv("月运行小时", 24d * end.dayOfMonth() - tsAdd("月风电机组故障停运时长", "月计划停机时长")) * 100);
  268. getDataForZb(end, "区域集控.惠安风场.光耀计算.年运行暴露率", tsDiv("年运行小时", 24d * end.dayOfYear() - tsAdd("年风电机组故障停运时长", "年计划停机时长")) * 100);
  269. }
  270. //场站空气密度平均气温累加推送
  271. public void calcStationKqmdLjTs(DateTime begin, DateTime end) {
  272. //环境温度
  273. List<PointInfo> entityHjwd = getEntity("AI072", "turbine");
  274. getRawDataByEntity(entityHjwd, goldenUri(), begin, end);
  275. Map<String, List<PointInfo>> hjwdsMap = entityHjwd.stream().collect(Collectors.groupingBy(PointInfo::getStationId));
  276. //测风塔温度
  277. List<PointInfo> wdEt = getEntity("FCCFTWD", "station");
  278. List<PointInfo> yqEt = getEntity("FCCFTYQ", "station");
  279. Map<String, PointInfo> rawWd = getRawDataByEntity(wdEt, goldenUri(), begin, end, PointInfo::getStationId);
  280. Map<String, PointInfo> secYq = getRawDataByEntity(yqEt, goldenUri(), begin, end, PointInfo::getStationId);
  281. hjwdsMap.forEach((stId, pis) -> {
  282. //环境温度
  283. List<PointInfo> hjwdInfos = hjwdsMap.get(stId);
  284. List<Double> hjwds = new ArrayList<>();
  285. for (PointInfo wd : hjwdInfos) {
  286. double v = wd.getPointDatas().stream().filter(p -> p.getValue() != 0.0).mapToDouble(PointData::getValue).average().orElse(0.0);
  287. if (v > 0 && v < 83) hjwds.add(v);
  288. }
  289. double hjwd = hjwds.stream().mapToDouble(Double::doubleValue).average().orElse(0.0);
  290. //测风塔温度
  291. List<PointData> wdData = rawWd.get(stId).getPointDatas();
  292. List<PointData> yqData = secYq.get(stId).getPointDatas();
  293. double wd = wdData.stream().mapToDouble(PointData::getValue).average().orElse(0d);
  294. double yq = yqData.stream().mapToDouble(PointData::getValue).average().orElse(0d);
  295. double kqmd = 1.293 * (yq * 100 / 101325) * (273.15 / (wd + 273.15));
  296. getDataForZbs4(end, "区域集控.惠安风场.光耀计算.日平均气温", hjwd);
  297. getDataForZbs4(end, "区域集控.惠安风场.光耀计算.日平均空气密度", kqmd);
  298. });
  299. }
  300. //主变耗电量累加推送
  301. public void calcMeterDlHdlLjTs(DateTime begin, DateTime end) {
  302. //1号SVG B-ZXYG-SVG1 B-FXYG-SVG1
  303. double svg1Hdl = calcMeterSimple("B-ZXYG-SVG1", begin, end);
  304. getDataForZbs2(end, "区域集控.惠安风场.光耀计算.1号SVG日耗电量", svg1Hdl);
  305. //2号SVG B-ZXYG-SVG2 B-FXYG-SVG2
  306. double svg2Hdl = calcMeterSimple("B-ZXYG-SVG2", begin, end);
  307. getDataForZbs2(end, "区域集控.惠安风场.光耀计算.2号SVG日耗电量", svg2Hdl);
  308. //1号接地变兼站用变 B-ZXYG-ZDB1 B-FXYG-ZDB1
  309. double zyb1Hdl = calcMeterSimple("B-ZXYG-ZDB1", begin, end);
  310. getDataForZbs2(end, "区域集控.惠安风场.光耀计算.1号站用变日耗电量", zyb1Hdl);
  311. //2号接地变 B-ZXYG-ZDB1 B-FXYG-ZDB1
  312. double jdb2Hdl = calcMeterSimple("B-ZXYG-ZDB2", begin, end);
  313. getDataForZbs2(end, "区域集控.惠安风场.光耀计算.2号接地变日耗电量", jdb2Hdl);
  314. //1号主变低压侧正向有功
  315. double zbdyc1Hdl = calcMeterSimple("B-ZXYG-ZBDYC1", begin, end);
  316. double zbdyc1Fdl = calcMeterSimple("B-FXYG-ZBDYC1", begin, end);
  317. getDataForZbs2(end, "区域集控.惠安风场.光耀计算.1号主变低压侧日发电量", zbdyc1Fdl);
  318. getDataForZbs2(end, "区域集控.惠安风场.光耀计算.1号主变低压侧日耗电量", zbdyc1Hdl);
  319. //1号主变高压侧正向有功 B-ZXYG-ZBGYC1
  320. getDataForZbs2(end, "区域集控.惠安风场.光耀计算.1号主变高压侧日发电量", 0);
  321. getDataForZbs2(end, "区域集控.惠安风场.光耀计算.1号主变高压侧日耗电量", 0);
  322. //2号主变低压侧正向有功
  323. double zbdyc2Hdl = calcMeterSimple("B-ZXYG-ZBDYC2", begin, end);
  324. double zbdyc2Fdl = calcMeterSimple("B-FXYG-ZBDYC2", begin, end);
  325. getDataForZbs2(end, "区域集控.惠安风场.光耀计算.2号主变低压侧日发电量", zbdyc2Hdl*10);
  326. getDataForZbs2(end, "区域集控.惠安风场.光耀计算.2号主变低压侧日耗电量", zbdyc2Hdl/10,10);
  327. //2号主变高压侧正向有功
  328. double zbgyc2Hdl = calcMeterSimple("B-ZXYG-ZBGYC2", begin, end);
  329. double zbgyc2Fdl = calcMeterSimple("B-FXYG-ZBGYC2", begin, end);
  330. getDataForZbs2(end, "区域集控.惠安风场.光耀计算.2号主变高压侧日发电量", zbgyc2Fdl);
  331. getDataForZbs2(end, "区域集控.惠安风场.光耀计算.2号主变高压侧日耗电量", zbgyc2Hdl);
  332. getDataForZb(end, "区域集控.惠安风场.光耀计算.1号主变日损耗电量", tsSub("1号主变低压侧日发电量", "1号主变高压侧日发电量"));
  333. getDataForZb(end, "区域集控.惠安风场.光耀计算.2号主变日损耗电量", tsSub("2号主变低压侧日耗电量", "2号主变高压侧日发电量"));
  334. getDataForZb(end, "区域集控.惠安风场.光耀计算.主变日损耗合计", tsAdd("1号主变日损耗电量", "2号主变日损耗电量"));
  335. getDataForZb(end, "区域集控.惠安风场.光耀计算.1号主变月损耗电量", tsSub("1号主变低压侧月发电量", "1号主变高压侧月发电量"));
  336. getDataForZb(end, "区域集控.惠安风场.光耀计算.2号主变月损耗电量", tsSub("2号主变低压侧月耗电量", "2号主变高压侧月发电量"));
  337. getDataForZb(end, "区域集控.惠安风场.光耀计算.主变月损耗合计", tsAdd("1号主变月损耗电量", "2号主变月损耗电量"));
  338. getDataForZb(end, "区域集控.惠安风场.光耀计算.1号主变年损耗电量", tsSub("1号主变低压侧年发电量", "1号主变高压侧年发电量"));
  339. getDataForZb(end, "区域集控.惠安风场.光耀计算.2号主变年损耗电量", tsSub("2号主变低压侧年耗电量", "2号主变高压侧年发电量"));
  340. getDataForZb(end, "区域集控.惠安风场.光耀计算.主变年损耗合计", tsAdd("1号主变年损耗电量", "2号主变年损耗电量"));
  341. }
  342. //风机平均风速实时推送
  343. public void calcStationPjfsSsTs() {
  344. List<PointInfo> fsEntity = getEntity("AI066", "turbine");
  345. getLatestByEntity(fsEntity, goldenUri());
  346. double fs = fsEntity.stream().mapToDouble(e -> e.getPointDatas().get(0).getValue()).average().orElse(0);
  347. PointData zb = getDataForZb(DateUtil.date(), "区域集控.惠安风场.光耀计算.平均风速", fs);
  348. adapter.writeHistoryBatch(mqttUri(), Collections.singletonList(zb));
  349. }
  350. public void setDatas(DateTime begin, DateTime end) {
  351. List<PointData> dataList = CalcCache.pointDataMap.values().stream().filter(pd -> pd.getTagName().startsWith("区域集控.惠安风场.光耀计算.")).collect(Collectors.toList());
  352. adapter.writeHistoryBatch(mqttUri(), dataList);
  353. System.out.println();
  354. }
  355. }