WarningService.java 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. package com.gyee.impala.service.custom;
  2. import com.alibaba.fastjson.JSONArray;
  3. import com.alibaba.fastjson.JSONObject;
  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.model.custom.AlertHistory;
  8. import com.gyee.impala.model.master.Casewarning;
  9. import lombok.extern.slf4j.Slf4j;
  10. import org.apache.commons.lang3.StringUtils;
  11. import org.springframework.beans.factory.annotation.Autowired;
  12. import org.springframework.stereotype.Service;
  13. import java.util.*;
  14. import java.util.stream.Collectors;
  15. @Slf4j
  16. @Service
  17. public class WarningService {
  18. @Autowired
  19. private RemoteServiceBuilder remoteService;
  20. /**
  21. * 通过sharding获取时间内的报警数据
  22. * @param category 报警分类 DI scada:windturbine 自定义:custom
  23. * @param station
  24. * @param wtId
  25. * @param time
  26. * @return
  27. */
  28. public List<Object> resolveWarn(String category, String station, String wtId, List<String> time){
  29. if (StringUtils.isEmpty(station) || StringUtils.isEmpty(wtId) || time.size() == 0)
  30. return null;
  31. List<Object> result = new ArrayList<>();
  32. List<Casewarning> list = new ArrayList<>();
  33. Calendar cal = Calendar.getInstance();
  34. /**将时间按照天分开**/
  35. Map<String, List<String>> map = time.stream().collect(Collectors.groupingBy(item -> DateUtil.format(item, DateUtil.YYYY_MM_DD)));
  36. try{
  37. map.forEach((k, v) -> {
  38. if (v.size() < 10)
  39. return;
  40. String max = v.stream().max(String::compareTo).get();
  41. /**提前30分钟**/
  42. String min = DateUtil.format(DateUtil.covertDateTimestamp(v.stream().min(String::compareTo).get()) - 30000, DateUtil.YYYY_MM_DD_HH_MM_SS);
  43. cal.setTime(DateUtil.parseStrtoDate(k));
  44. cal.set(Calendar.HOUR_OF_DAY, cal.getActualMinimum(Calendar.HOUR_OF_DAY));
  45. String st = DateUtil.format(cal.getTime(), DateUtil.YYYY_MM_DD);
  46. cal.add(cal.DATE,1);
  47. String et = DateUtil.format(cal.getTime(), DateUtil.YYYY_MM_DD);
  48. JSONObject data = remoteService.sharding().getAlertHistory(category, st, et, station, wtId);
  49. JSONObject json = data.getJSONObject("data");
  50. if (json == null)
  51. return;
  52. String records = json.getJSONArray("records").toJSONString();
  53. List<AlertHistory> ls = JSONArray.parseArray(records, AlertHistory.class);
  54. ls.stream().forEach(obj -> {
  55. if (StringUtils.isNotEmpty(obj.getCategory1()) && StringUtils.isNotEmpty(obj.getCategory2())
  56. && obj.getAlertTime().compareTo(min) > 0 && obj.getAlertTime().compareTo(max) < 0){
  57. Casewarning warn = (Casewarning) new Casewarning().toData(obj);
  58. list.add(warn);
  59. }
  60. });
  61. });
  62. }catch (Exception e){
  63. e.getStackTrace();
  64. log.error(e.getMessage());
  65. }
  66. /**按照报警类型分类**/
  67. Map<String, List<Casewarning>> collect = list.stream().sorted(Comparator.comparing(Casewarning::getWarntime))
  68. .filter(obj -> StringUtils.isNotEmpty(obj.getWarncode()))
  69. .collect(Collectors.groupingBy(Casewarning::getWarncode));
  70. collect.forEach((k, v) -> {
  71. Map<String, Object> mp = new HashMap<>();
  72. mp.put("label", InitialRunner.scadaWarnMap.get(k.toUpperCase()));
  73. mp.put("value", k);
  74. mp.put("children", v);
  75. result.add(mp);
  76. });
  77. return result;
  78. }
  79. }