123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990 |
- package com.gyee.impala.service.custom;
- import com.alibaba.fastjson.JSONArray;
- import com.alibaba.fastjson.JSONObject;
- import com.gyee.impala.common.feign.RemoteServiceBuilder;
- import com.gyee.impala.common.spring.InitialRunner;
- import com.gyee.impala.common.util.DateUtil;
- import com.gyee.impala.model.custom.AlertHistory;
- import com.gyee.impala.model.master.Casewarning;
- import lombok.extern.slf4j.Slf4j;
- import org.apache.commons.lang3.StringUtils;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.stereotype.Service;
- import java.util.*;
- import java.util.stream.Collectors;
- @Slf4j
- @Service
- public class WarningService {
- @Autowired
- private RemoteServiceBuilder remoteService;
- /**
- * 通过sharding获取时间内的报警数据
- * @param category 报警分类 DI scada:windturbine 自定义:custom
- * @param station
- * @param wtId
- * @param time
- * @return
- */
- public List<Object> resolveWarn(String category, String station, String wtId, List<String> time){
- if (StringUtils.isEmpty(station) || StringUtils.isEmpty(wtId) || time.size() == 0)
- return null;
- List<Object> result = new ArrayList<>();
- List<Casewarning> list = new ArrayList<>();
- Calendar cal = Calendar.getInstance();
- /**将时间按照天分开**/
- Map<String, List<String>> map = time.stream().collect(Collectors.groupingBy(item -> DateUtil.format(item, DateUtil.YYYY_MM_DD)));
- try{
- map.forEach((k, v) -> {
- if (v.size() < 10)
- return;
- String max = v.stream().max(String::compareTo).get();
- /**提前30分钟**/
- String min = DateUtil.format(DateUtil.covertDateTimestamp(v.stream().min(String::compareTo).get()) - 30000, DateUtil.YYYY_MM_DD_HH_MM_SS);
- cal.setTime(DateUtil.parseStrtoDate(k));
- cal.set(Calendar.HOUR_OF_DAY, cal.getActualMinimum(Calendar.HOUR_OF_DAY));
- String st = DateUtil.format(cal.getTime(), DateUtil.YYYY_MM_DD);
- cal.add(cal.DATE,1);
- String et = DateUtil.format(cal.getTime(), DateUtil.YYYY_MM_DD);
- JSONObject data = remoteService.sharding().getAlertHistory(category, st, et, station, wtId);
- JSONObject json = data.getJSONObject("data");
- if (json == null)
- return;
- String records = json.getJSONArray("records").toJSONString();
- List<AlertHistory> ls = JSONArray.parseArray(records, AlertHistory.class);
- ls.stream().forEach(obj -> {
- if (StringUtils.isNotEmpty(obj.getCategory1()) && StringUtils.isNotEmpty(obj.getCategory2())
- && obj.getAlertTime().compareTo(min) > 0 && obj.getAlertTime().compareTo(max) < 0){
- Casewarning warn = (Casewarning) new Casewarning().toData(obj);
- list.add(warn);
- }
- });
- });
- }catch (Exception e){
- e.getStackTrace();
- log.error(e.getMessage());
- }
- /**按照报警类型分类**/
- Map<String, List<Casewarning>> collect = list.stream().sorted(Comparator.comparing(Casewarning::getWarntime))
- .filter(obj -> StringUtils.isNotEmpty(obj.getWarncode()))
- .collect(Collectors.groupingBy(Casewarning::getWarncode));
- collect.forEach((k, v) -> {
- Map<String, Object> mp = new HashMap<>();
- mp.put("label", InitialRunner.scadaWarnMap.get(k.toUpperCase()));
- mp.put("value", k);
- mp.put("children", v);
- result.add(mp);
- });
- return result;
- }
- }
|