TaskPerformance.java 7.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157
  1. package com.gyee.impala.schdule;
  2. import com.gyee.impala.common.config.GyeeConfig;
  3. import com.gyee.impala.common.constant.Constants;
  4. import com.gyee.impala.common.feign.RemoteServiceBuilder;
  5. import com.gyee.impala.common.spring.InitialRunner;
  6. import com.gyee.impala.common.util.DateUtil;
  7. import com.gyee.impala.common.util.GyeeUtil;
  8. import com.gyee.impala.common.util.SnowFlakeUtil;
  9. import com.gyee.impala.model.custom.TsDoubleData;
  10. import com.gyee.impala.model.master.Caseperformance;
  11. import com.gyee.impala.model.master.Windturbine;
  12. import com.gyee.impala.model.master.Windturbinepoint;
  13. import com.gyee.impala.service.master.CaseperformanceService;
  14. import com.gyee.impala.service.master.WindturbinepointService;
  15. import lombok.extern.slf4j.Slf4j;
  16. import org.apache.commons.lang3.StringUtils;
  17. import org.springframework.beans.factory.annotation.Autowired;
  18. import org.springframework.scheduling.annotation.Scheduled;
  19. import org.springframework.stereotype.Component;
  20. import java.util.ArrayList;
  21. import java.util.Calendar;
  22. import java.util.Date;
  23. import java.util.List;
  24. /**
  25. * 基于欠发矩阵的统计
  26. */
  27. @Component
  28. @Slf4j
  29. public class TaskPerformance {
  30. /** 等间隔查询 秒 **/
  31. private final Integer interval = 1;
  32. @Autowired
  33. private GyeeConfig gyeeConfig;
  34. @Autowired
  35. private RemoteServiceBuilder remoteService;
  36. @Autowired
  37. private WindturbinepointService windturbinepointService;
  38. @Autowired
  39. private CaseperformanceService performanceService;
  40. // @Scheduled(initialDelay = 10 * 1000, fixedRate = 2 * 86400000 * 1000)
  41. // @Scheduled(cron = "0 40 2 * * ?")
  42. public void performanceNSS(){
  43. if (InitialRunner.wpMap.size() == 0)
  44. return;
  45. Calendar cal = Calendar.getInstance();
  46. InitialRunner.wpMap.forEach((k, v) -> v.stream().forEach(wt ->{
  47. try{
  48. /********************** 关系库获取测点名 ******************************/
  49. List<Windturbinepoint> wp_zs = windturbinepointService.getItemByWtIdAndUniformCode(wt.getId(), Constants.AI_FDJZS);
  50. List<Windturbinepoint> wp_zt = windturbinepointService.getItemByWtIdAndUniformCode(wt.getId(), Constants.DI_FJMXZT);
  51. List<Windturbinepoint> wp_qf = windturbinepointService.getItemByWtIdAndUniformCode(wt.getId(), Constants.DI_RSSQFZT);
  52. List<Windturbinepoint> wp_jy = windturbinepointService.getItemByWtIdAndUniformCode(wt.getId(), Constants.AI_JYJD);
  53. List<Windturbinepoint> wp_xd = windturbinepointService.getItemByWtIdAndUniformCode(wt.getId(), Constants.DI_XDZT);
  54. /********************** 关系库获取测点名 ******************************/
  55. long time = DateUtil.covertDateTimestamp(gyeeConfig.getInitTime());
  56. Caseperformance item = performanceService.getOneMaxTimeByWtId(wt.getId());
  57. if (item != null)
  58. time = DateUtil.covertDateTimestamp(item.getEndtime());
  59. long currentTime = System.currentTimeMillis();
  60. while(time < currentTime){
  61. long st = time;
  62. cal.setTime(new Date(time));
  63. cal.add(Calendar.DATE, 30);
  64. long et = cal.getTimeInMillis();
  65. if (wp_zs.size() > 0 || wp_zt.size() > 0 && wp_qf.size() > 0 && wp_jy.size()>0 && wp_xd.size() > 0){
  66. /********************** Golden读取原始数据 ******************************/
  67. List<TsDoubleData> zsData = remoteService.adapter().getHistorySnapAI(wp_zs.get(0).getPoint(), st, et, interval);
  68. List<TsDoubleData> ztData = remoteService.adapter().getHistorySnapAI(wp_zt.get(0).getPoint(), st, et, interval);
  69. List<TsDoubleData> qfData = remoteService.adapter().getHistorySnapAI(wp_qf.get(0).getPoint(), st, et, interval);
  70. List<TsDoubleData> jdData = remoteService.adapter().getHistorySnapAI(wp_jy.get(0).getPoint(), st, et, interval);
  71. List<TsDoubleData> xdData = remoteService.adapter().getHistorySnapAI(wp_xd.get(0).getPoint(), st, et, interval);
  72. /********************** Golden读取原始数据 ******************************/
  73. /** 分析保存至kudu*/
  74. saveCasePerformance(wt, k, zsData, ztData, qfData, jdData, xdData);
  75. time = et;
  76. try {
  77. Thread.sleep(5000);
  78. } catch (InterruptedException e) {
  79. e.printStackTrace();
  80. }
  81. }
  82. }
  83. } catch (Exception e){
  84. log.error(e.getMessage());
  85. }
  86. }));
  87. }
  88. private void saveCasePerformance(Windturbine wt, String station, List<TsDoubleData> zsData, List<TsDoubleData> ztData,
  89. List<TsDoubleData> qfData, List<TsDoubleData> jdData, List<TsDoubleData> xdData ){
  90. List<Caseperformance> list = new ArrayList<>();
  91. List<String> lt = new ArrayList<>();
  92. List<String> ls = new ArrayList<>();
  93. for (int j = 0; j < zsData.size(); j++) {
  94. /**性能差**/
  95. if (GyeeUtil.convertNum(wt, zsData.get(j).getDoubleValue()) >= 1400
  96. && ztData.get(j).getDoubleValue() == 2
  97. && qfData.get(j).getDoubleValue() > 3
  98. && jdData.get(j).getDoubleValue() == 0
  99. && xdData.get(j).getDoubleValue() == 0) {
  100. lt.add(DateUtil.format(zsData.get(j).getTs(), DateUtil.DATE_TIME_PATTERN));
  101. }
  102. /**性能好**/
  103. if(GyeeUtil.convertNum(wt, zsData.get(j).getDoubleValue()) >= 1400
  104. && ztData.get(j).getDoubleValue() == 2
  105. && qfData.get(j).getDoubleValue() <= 2
  106. && jdData.get(j).getDoubleValue() == 0
  107. && xdData.get(j).getDoubleValue() == 0){
  108. ls.add(DateUtil.format(zsData.get(j).getTs(), DateUtil.DATE_TIME_PATTERN));
  109. }
  110. /**数据整理保存至kudu**/
  111. if (lt.size() > 1 || ls.size() > 1){
  112. Caseperformance obj = new Caseperformance();
  113. // 统计欠发
  114. if (lt.size() > 1) {
  115. obj.setTag(0);
  116. obj.setStarttime(lt.get(0));
  117. obj.setEndtime(lt.get(lt.size() - 1));
  118. obj.setIntervals(Double.valueOf(String.format("%.1f",(double)(lt.size() * interval) / 3600)));
  119. lt.clear();
  120. }
  121. // 统计不欠发
  122. if (ls.size() > 1) {
  123. obj.setTag(1);
  124. obj.setStarttime(ls.get(0));
  125. obj.setEndtime(ls.get(lt.size() - 1));
  126. obj.setIntervals(Double.valueOf(String.format("%.1f",(double)(ls.size() * interval) / 3600)));
  127. ls.clear();
  128. }
  129. obj.setId(SnowFlakeUtil.generateId());
  130. obj.setStationen(station);
  131. obj.setWindturbineid(wt.getId());
  132. obj.setAlgtype("QFMX");
  133. obj.setModel(wt.getModel());
  134. obj.setStationcn(InitialRunner.stationMap.get(station));
  135. obj.setManufacturer(InitialRunner.wpList.get(InitialRunner.wpList.indexOf(station)).getManufacturer());
  136. list.add(obj);
  137. }
  138. }
  139. performanceService.insertBatch(list);
  140. }
  141. public static void main(String[] args){
  142. }
  143. }