TaskCasefaultReplenish.java 9.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199
  1. package com.gyee.impala.schdule;
  2. import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
  3. import com.gyee.impala.common.feign.RemoteServiceBuilder;
  4. import com.gyee.impala.common.util.DateUtil;
  5. import com.gyee.impala.mapper.master.CasefaultMapper;
  6. import com.gyee.impala.mapper.master.CasefaultalgMapper;
  7. import com.gyee.impala.mapper.slave.FaulthistoryMapper;
  8. import com.gyee.impala.mapper.slave.Windturbinetestingpointai2Mapper;
  9. import com.gyee.impala.model.custom.TsDoubleData;
  10. import com.gyee.impala.model.custom.diagnose.FaultInfo;
  11. import com.gyee.impala.model.master.Casefault;
  12. import com.gyee.impala.model.master.Casefaultalg;
  13. import com.gyee.impala.model.slave.Windturbinetestingpointai2;
  14. import com.gyee.impala.service.master.CasefaultService;
  15. import com.gyee.impala.service.master.CasefaultalgService;
  16. import org.apache.commons.lang3.StringUtils;
  17. import org.springframework.scheduling.annotation.Scheduled;
  18. import org.springframework.stereotype.Component;
  19. import javax.annotation.Resource;
  20. import java.util.*;
  21. import java.util.concurrent.TimeUnit;
  22. import java.util.function.Function;
  23. import java.util.stream.Collectors;
  24. @Component
  25. public class TaskCasefaultReplenish {
  26. @Resource
  27. private CasefaultalgMapper casefaultalgMapper;
  28. @Resource
  29. private CasefaultMapper casefaultMapper;
  30. @Resource
  31. private FaulthistoryMapper faulthistoryMapper;
  32. @Resource
  33. private Windturbinetestingpointai2Mapper windturbinetestingpointai2Mapper;
  34. @Resource
  35. private CasefaultalgService casefaultalgService;
  36. @Resource
  37. private CasefaultService casefaultService;
  38. @Resource
  39. private RemoteServiceBuilder remoteServiceBuilder;
  40. /**
  41. * 计算故障解除时间和故障时长
  42. */
  43. @Scheduled(cron = "0 15 3 * * ?")
  44. public void creatEndtime(){
  45. Calendar instance = Calendar.getInstance();
  46. instance.add(Calendar.DATE, -8);
  47. //获取报警信息,用此信息计算故障解除时间
  48. List<FaultInfo> faultInfos = faulthistoryMapper.queryFaultInfo(null, instance.getTime(), new Date());
  49. List<Casefaultalg> casefaultalgList = new ArrayList<>();
  50. List<Casefault> casefaultList = new ArrayList<>();
  51. QueryWrapper<Casefaultalg> cfawrapper = new QueryWrapper<>();
  52. cfawrapper.eq("endtime","").or().isNull("endtime").or().apply("starttime=endtime").orderByDesc("starttime").last("limit 5000");
  53. //查找没有更新故障解除时间的记录,
  54. List<Casefaultalg> casefaultalgs = casefaultalgMapper.selectList(cfawrapper);
  55. //faultid、Casefaultalg
  56. Map<Long, Casefaultalg> casefaultalgMap = casefaultalgs.stream().collect(Collectors.toMap(Casefaultalg::getFaultid, Function.identity(),(key1,key2)->key2));
  57. List<String> cfaturbines = casefaultalgs.stream().map(Casefaultalg::getWindturbineid).distinct().collect(Collectors.toList());
  58. for (String turbine : cfaturbines) {
  59. List<FaultInfo> collect = faultInfos.stream().filter(fis -> fis.getWindturbineId().equals(turbine)).collect(Collectors.toList());
  60. Long k = 0L;//报警faultid
  61. //遍历当前风机的报警信息
  62. for (FaultInfo faultInfo : collect) {
  63. if(faultInfo.getMessageType()==3){
  64. if(!k.equals(0L)){
  65. Casefaultalg casefaultalg = new Casefaultalg();
  66. casefaultalg.setId(casefaultalgMap.get(k).getId());
  67. casefaultalg.setEndtime(faultInfo.getFaultTime());
  68. casefaultalgList.add(casefaultalg);
  69. k = 0L;
  70. }
  71. }else {
  72. //用faultid查找样本库有没有这条报警信息
  73. Casefaultalg casefaultalg = casefaultalgMap.get(faultInfo.getId());
  74. if(casefaultalg!=null){
  75. k = casefaultalg.getFaultid();
  76. }else {
  77. k = 0L;
  78. }
  79. }
  80. }
  81. }
  82. //批量更新endtime
  83. casefaultalgService.updateBatchById(casefaultalgList,300);
  84. QueryWrapper<Casefault> cfwrapper = new QueryWrapper<>();
  85. cfwrapper.eq("endtime","").or().isNull("endtime").or().apply("starttime=endtime").orderByDesc("starttime").last("limit 2000");
  86. List<Casefault> casefaults = casefaultMapper.selectList(cfwrapper);
  87. Map<Long, Casefault> casefaultMap = casefaults.stream().collect(Collectors.toMap(Casefault::getFaultid, Function.identity(),(key1,key2)->key2));
  88. List<String> cfturbines = casefaults.stream().map(Casefault::getWindturbineid).distinct().collect(Collectors.toList());
  89. for (String turbine : cfturbines) {
  90. List<FaultInfo> collect = faultInfos.stream().filter(fis -> fis.getWindturbineId().equals(turbine)).collect(Collectors.toList());
  91. Long k = 0L;
  92. for (FaultInfo faultInfo : collect) {
  93. if(faultInfo.getMessageType()==3){
  94. if(!k.equals(0L)){
  95. Casefault casefault = new Casefault();
  96. casefault.setId(casefaultMap.get(k).getId());
  97. casefault.setEndtime(faultInfo.getFaultTime());
  98. casefaultList.add(casefault);
  99. k = 0L;
  100. }
  101. }else {
  102. Casefault casefault = casefaultMap.get(faultInfo.getId());
  103. if(casefault!=null){
  104. k = casefault.getFaultid();
  105. }else {
  106. k = 0L;
  107. }
  108. }
  109. }
  110. }
  111. casefaultService.updateBatchById(casefaultList,300);
  112. }
  113. /**
  114. * 计算损失电量
  115. */
  116. @Scheduled(cron = "0 35 3 * * ?")
  117. public void creatPowerloss(){
  118. List<Casefaultalg> casefaultalgList = new ArrayList<>();
  119. List<Casefault> casefaultList = new ArrayList<>();
  120. QueryWrapper<Casefaultalg> cfawrapper = new QueryWrapper<>();
  121. cfawrapper.isNull("faultsecond").apply("starttime!=endtime");
  122. List<Casefaultalg> casefaultalgs = casefaultalgMapper.selectList(cfawrapper);
  123. QueryWrapper<Casefault> cfwrapper = new QueryWrapper<>();
  124. cfwrapper.isNull("faultsecond").ne("endtime","").apply("starttime!=endtime");
  125. List<Casefault> casefaults = casefaultMapper.selectList(cfwrapper);
  126. QueryWrapper<Windturbinetestingpointai2> wpwrapper = new QueryWrapper<>();
  127. wpwrapper.eq("UNIFORMCODE", "RFDLLL").likeLeft("WINDPOWERSTATIONID", "FDC");
  128. List<Windturbinetestingpointai2> windturbinetestingpointai2s = windturbinetestingpointai2Mapper.selectList(wpwrapper);
  129. //风机id、理论日发电量
  130. Map<String, Windturbinetestingpointai2> collect = windturbinetestingpointai2s.stream().collect(Collectors.toMap(Windturbinetestingpointai2::getWindturbineid, Function.identity()));
  131. for (Casefaultalg casefaultalg : casefaultalgs) {
  132. String starttime = casefaultalg.getStarttime();
  133. String endtime = casefaultalg.getEndtime();
  134. if(StringUtils.isEmpty(starttime)||StringUtils.isEmpty(endtime)) return;
  135. long startl = DateUtil.str2DateTime(starttime).getTime();
  136. long endl = DateUtil.str2DateTime(endtime).getTime();
  137. long l = endl - startl;
  138. String pointAi = collect.get(casefaultalg.getWindturbineid()).getId();
  139. Map<String,TsDoubleData> startLlgl = remoteServiceBuilder.adapter().getHistorySection(pointAi, startl);
  140. try {
  141. Thread.sleep(30);
  142. } catch (InterruptedException e) {
  143. e.printStackTrace();
  144. }
  145. Map<String,TsDoubleData> endLlgl = remoteServiceBuilder.adapter().getHistorySection(pointAi, endl);
  146. double v = endLlgl.entrySet().iterator().next().getValue().getDoubleValue() - startLlgl.entrySet().iterator().next().getValue().getDoubleValue();
  147. Casefaultalg cf = new Casefaultalg();
  148. cf.setId(casefaultalg.getId());
  149. cf.setFaultsecond((int) TimeUnit.MILLISECONDS.toSeconds(l));
  150. cf.setPowerloos((float) v);
  151. casefaultalgList.add(cf);
  152. }
  153. casefaultalgService.updateBatchById(casefaultalgList,300);
  154. for (Casefault casefault : casefaults) {
  155. String starttime = casefault.getStarttime();
  156. String endtime = casefault.getEndtime();
  157. if(StringUtils.isEmpty(starttime)||StringUtils.isEmpty(endtime)) continue;
  158. long startl = DateUtil.str2DateTime(starttime).getTime();
  159. long endl = DateUtil.str2DateTime(endtime).getTime();
  160. long l = endl - startl;
  161. String pointAi = collect.get(casefault.getWindturbineid()).getId();
  162. Map<String,TsDoubleData> startLlgl = remoteServiceBuilder.adapter().getHistorySection(pointAi, startl);
  163. try {
  164. Thread.sleep(30);
  165. } catch (InterruptedException e) {
  166. e.printStackTrace();
  167. }
  168. Map<String,TsDoubleData> endLlgl = remoteServiceBuilder.adapter().getHistorySection(pointAi, endl);
  169. double v = endLlgl.entrySet().iterator().next().getValue().getDoubleValue() - startLlgl.entrySet().iterator().next().getValue().getDoubleValue();
  170. Casefault cf = new Casefault();
  171. cf.setId(casefault.getId());
  172. cf.setFaultsecond((int) TimeUnit.MILLISECONDS.toSeconds(l));
  173. cf.setPowerloos((float) v);
  174. casefaultList.add(cf);
  175. }
  176. casefaultService.updateBatchById(casefaultList, 300);
  177. }
  178. }