海外平台-数据全英文化

This commit is contained in:
2025-09-18 14:05:01 +08:00
parent e6b6ccd804
commit 83eff7d1ee
112 changed files with 2151 additions and 344 deletions

View File

@ -31,6 +31,7 @@ import com.ho.flow.vo.req.event.EventWorkOrder;
import com.ho.flow.vo.resp.event.*;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import jodd.util.StringUtil;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.CellType;
import org.apache.poi.ss.usermodel.Row;
@ -101,6 +102,7 @@ public class EventController {
//@LogAnnotation(title = "告警管理", action = "分页查询告警信息")
public DataResult<PageResultMap<EventRespVO>> page(@RequestBody @Valid EventReqPageVO vo, HttpServletRequest
request) {
vo.setLang(request.getHeader(RedisKeyConstant.User.LANG));
//如果有srcIdList ,则根据这个查询deviceType
List<Integer> srcIdList = vo.getSrcIdList();
@ -224,6 +226,7 @@ public class EventController {
//@LogAnnotation(title = "告警管理", action = "分页查询告警历史信息")
public DataResult<PageResultMap<EventRespVO>> hispage(@RequestBody @Valid EventReqPageVO vo, HttpServletRequest
request) {
vo.setLang(request.getHeader(RedisKeyConstant.User.LANG));
DataResult<PageResultMap<EventRespVO>> result = DataResult.success();
String token = request.getHeader(RedisKeyConstant.User.ACCESS_TOKEN);
SimpleUser user = redisService.getSimpleUserByToken(token);
@ -418,6 +421,10 @@ public class EventController {
request) {
String token = request.getHeader(RedisKeyConstant.User.ACCESS_TOKEN);
SimpleUser user = redisService.getSimpleUserByToken(token);
String lang = request.getHeader(RedisKeyConstant.User.LANG);
list.stream().forEach(s->{
s.setLang(lang);
});
List<EventRespVO> eventRespVOList = eventService.dropDownBatchList(user, list);
return DataResult.success(eventRespVOList);
}
@ -517,6 +524,7 @@ public class EventController {
@PostMapping("/exportEvnData")
@ApiOperation(value = "导出实时告警数据")
public void exportEvnData(@RequestBody @Valid EventReqPageVO vo, HttpServletRequest request, HttpServletResponse response) {
vo.setLang(request.getHeader(RedisKeyConstant.User.LANG));
//如果有srcIdList ,则根据这个查询deviceType
List<Integer> srcIdList = vo.getSrcIdList();
if (srcIdList != null && !srcIdList.isEmpty()) {
@ -789,4 +797,17 @@ public class EventController {
return DataResult.success(result);
}
@PostMapping("updatePointNameEn")
@ApiOperation(value = "修改表中点名称英文")
@TokenIgnore
public DataResult updatePointNameEn(String tableName,String name,String nameEn) {
int count = 0;
if(StringUtil.isNotBlank(tableName)
&&StringUtil.isNotBlank(name)
&&StringUtil.isNotBlank(nameEn)){
count = eventService.updatePointNameEn(tableName,name,nameEn);
}
return DataResult.success(count);
}
}

View File

@ -0,0 +1,33 @@
package com.ho.flow.service;
import com.alibaba.fastjson.JSONObject;
import com.ho.common.tools.exception.DataResult;
import com.ho.flow.vo.AlarmConfig;
import com.ho.flow.vo.Event;
import com.ho.flow.vo.req.AlarmConfig.AlarmConfigQueryVo;
import com.ho.flow.vo.req.event.EventAddReq;
import com.ho.flow.vo.resp.StationStatusRespVO;
import com.ho.flow.vo.resp.event.EventTypeAndLevelsReqVO;
import java.util.List;
import java.util.Map;
/**
* @author kerwin flowable-src-1.0.jar原有
*/
public interface FlowOutApiService {
Map<String, List<Event>> matchEventRecords(EventAddReq eventAddReq, JSONObject dataSet, Map<String, AlarmConfig> stationConfigMap, Map<String, AlarmConfig> groupConfigMap);
Boolean isRecoveryDevice(AlarmConfigQueryVo alarmConfigQueryVo);
List<StationStatusRespVO> isNormalStation(AlarmConfigQueryVo alarmConfigQueryVo);
void polymerizationAlarm(EventAddReq eventAddReq, List<AlarmConfig> groupAlarmConfigs, List<AlarmConfig> stationAlarmConfigs);
Event getNotRecovered(AlarmConfigQueryVo stationStatusReq);
EventTypeAndLevelsReqVO getAlarmDataStatistics(AlarmConfigQueryVo stationStatusReq);
DataResult addEvents(List<EventAddReq> list);
}

View File

@ -0,0 +1,711 @@
package com.ho.flow.service.impl;
import cn.hutool.core.date.DateTime;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.lang.Snowflake;
import com.alibaba.fastjson.JSONObject;
import com.ho.business.entity.Station;
import com.ho.business.vo.DeviceTransfer;
import com.ho.common.tools.constant.CommonConstant;
import com.ho.common.tools.entity.UserDetailRespVO;
import com.ho.common.tools.exception.DataResult;
import com.ho.common.tools.service.RedisService;
import com.ho.flow.entity.process.MovementDTO;
import com.ho.flow.feignclient.BusinessFeignClient;
import com.ho.flow.mapper.AlarmConfigMapper;
import com.ho.flow.mapper.EventMapper;
import com.ho.flow.monitor.EventToProcessMonitor;
import com.ho.flow.service.AlarmConfigService;
import com.ho.flow.service.EventService;
import com.ho.flow.service.FlowOutApiService;
import com.ho.flow.service.SendSmsConfigService;
import com.ho.flow.vo.AlarmConfig;
import com.ho.flow.vo.Event;
import com.ho.flow.vo.req.AlarmConfig.AlarmConfigQueryVo;
import com.ho.flow.vo.req.SendSmsConfig.SendSmsConfigQueryReq;
import com.ho.flow.vo.req.event.EventAddReq;
import com.ho.flow.vo.resp.StationStatusRespVO;
import com.ho.flow.vo.resp.event.EventTypeAndLevelsReqVO;
import org.apache.commons.lang.time.DateFormatUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Service;
import java.math.BigDecimal;
import java.text.SimpleDateFormat;
import java.util.*;
import java.util.stream.Collectors;
/**
* @author kerwin 原有flowable-src-1.0.jar
*/
@Service
@ConditionalOnProperty(
name = {"switch.usedDefaultAlarmLogic"},
havingValue = "true",
matchIfMissing = true
)
public class FlowOutApiServiceImpl implements FlowOutApiService {
private static final Logger log = LoggerFactory.getLogger(FlowOutApiServiceImpl.class);
@Autowired
Snowflake snowflake;
@Autowired
RedisService redisService;
@Autowired
EventMapper eventMapper;
@Autowired
AlarmConfigMapper alarmConfigMapper;
@Autowired
BusinessFeignClient businessFeignClient;
@Autowired
SendSmsConfigService sendSmsConfigService;
@Autowired
AlarmConfigService alarmConfigService;
@Autowired
EventService eventService;
@Value("${spring.activiti.flag}")
private Integer flag;
EventToProcessMonitor monitor = new EventToProcessMonitor();
public FlowOutApiServiceImpl() {
}
public Map<String, List<Event>> matchEventRecords(EventAddReq eventAddReq, JSONObject dataSet, Map<String, AlarmConfig> stationConfigMap, Map<String, AlarmConfig> groupConfigMap) {
Map<String, List<Event>> resultMap = this.receiveEvent(eventAddReq, dataSet, stationConfigMap, groupConfigMap);
return resultMap;
}
public Map<String, List<Event>> receiveEvent(EventAddReq eventAddReq, JSONObject dataSet, Map<String, AlarmConfig> stationConfigMap, Map<String, AlarmConfig> groupConfigMap) {
Map<String, List<Event>> resultMap = new HashMap();
List<Event> events = new ArrayList();
List<Event> updateEvents = new ArrayList();
List<Event> updateEventStatus = new ArrayList();
Date date = new Date();
String redisKey = eventAddReq.getDeviceType() + ":" + eventAddReq.getStationId() + ":" + eventAddReq.getSrcId();
Map<Object, Object> hgetall = this.redisService.hgetall(redisKey);
DeviceTransfer deviceTransfer = null;
Iterator var13 = dataSet.entrySet().iterator();
while(true) {
while(true) {
String k;
Object v;
AlarmConfig alarmConfig;
do {
do {
if (!var13.hasNext()) {
resultMap.put("updateEvents", updateEvents);
resultMap.put("events", events);
resultMap.put("updateEventStatus", updateEventStatus);
return resultMap;
}
Map.Entry<String, Object> entry = (Map.Entry)var13.next();
k = (String)entry.getKey();
v = entry.getValue();
} while(v == null);
alarmConfig = null;
if (stationConfigMap.containsKey(k)) {
alarmConfig = (AlarmConfig)stationConfigMap.get(k);
} else if (groupConfigMap.containsKey(k)) {
alarmConfig = (AlarmConfig)groupConfigMap.get(k);
}
} while(alarmConfig == null);
Event event = new Event();
boolean needSave = false;
event.setSensType(alarmConfig.getSensType());
if (CommonConstant.EventSignal.SIGNAL.equals(alarmConfig.getSensType())) {
needSave = true;
Integer value = (Integer)v;
String info = null;
if (eventAddReq.getDeviceType().contains("communicationStatus")) {
if (CommonConstant.ONE.equals(value)) {
info = alarmConfig.getInfo0();
event.setIsRecovery(CommonConstant.ONE);
event.setEventLevel(CommonConstant.EventLevel.notice);
} else {
info = alarmConfig.getInfo1();
event.setIsRecovery(CommonConstant.ZERO);
event.setEventLevel(alarmConfig.getAlarmLevel());
}
} else if ("communicationStatus".equals(k)) {
if (CommonConstant.ZERO.equals(value)) {
info = alarmConfig.getInfo0();
event.setIsRecovery(CommonConstant.ZERO);
event.setEventLevel(alarmConfig.getAlarmLevel());
} else if (CommonConstant.ONE.equals(value)) {
info = alarmConfig.getInfo1();
event.setIsRecovery(CommonConstant.ONE);
event.setEventLevel(CommonConstant.EventLevel.notice);
}
} else if (CommonConstant.ZERO.equals(value)) {
info = alarmConfig.getInfo0();
event.setIsRecovery(CommonConstant.ONE);
event.setEventLevel(CommonConstant.EventLevel.notice);
} else if (value > CommonConstant.ZERO) {
info = alarmConfig.getInfo1();
event.setIsRecovery(CommonConstant.ZERO);
event.setEventLevel(alarmConfig.getAlarmLevel());
}
event.setDescription(info);
event.setDescriptionEn(eventService.getNameEn(event.getDescription()));
} else if (CommonConstant.EventSignal.TELEMETER.equals(alarmConfig.getSensType())) {
BigDecimal lowerLimit = alarmConfig.getLowerLimit();
BigDecimal upperLimit = alarmConfig.getUpperLimit();
BigDecimal value = new BigDecimal(String.valueOf(v));
String desc = alarmConfig.getColName() + "恢复";
if (upperLimit != null && value.compareTo(upperLimit) > 0) {
needSave = true;
desc = alarmConfig.getColName() + " 越上限";
}
if (lowerLimit != null && value.compareTo(lowerLimit) < 0) {
needSave = true;
desc = alarmConfig.getColName() + " 越下限";
}
event.setIsRecovery(CommonConstant.ONE);
event.setEventLevel(CommonConstant.EventLevel.notice);
if (needSave) {
event.setIsRecovery(CommonConstant.ZERO);
event.setEventLevel(CommonConstant.EventLevel.overLimit);
}
event.setDescription(desc);
event.setDescriptionEn(eventService.getNameEn(event.getDescription()));
}
Event eventLast = null;
deviceTransfer = (DeviceTransfer)hgetall.get(k);
if (null != deviceTransfer) {
Long eventId = deviceTransfer.getEventId();
Integer isRecovery = deviceTransfer.getIsRecovery();
if (null != isRecovery && null != eventId) {
eventLast = new Event();
eventLast.setIsRecovery(isRecovery);
eventLast.setId(eventId);
}
}
needSave = true;
long id;
if (CommonConstant.ONE.equals(event.getIsRecovery())) {
if (null != eventLast && !CommonConstant.ONE.equals(eventLast.getIsRecovery())) {
id = this.snowflake.nextId();
log.info("new recovery event snowflake id: {},event_level:{},alarmStationId:{},targetDevice:{},deviceType:{},signal:{}", new Object[]{id, event.getEventLevel(), eventAddReq.getStationId(), eventAddReq.getSrcId(), eventAddReq.getDeviceType(), k});
event.setId(id);
event.setSignal(k);
event.setBeforeEventId(eventLast.getId());
this.generateAlarm(eventAddReq, v, event);
log.info("new recovery event update redis before:{},redisKey:{},k:{}", new Object[]{this.redisService.hget(redisKey, k), redisKey, k});
deviceTransfer.setEventId(event.getId());
deviceTransfer.setIsRecovery(event.getIsRecovery());
this.redisService.hset(redisKey, k, deviceTransfer);
log.info("new recovery event update redis after:{},redisKey:{},k:{}", new Object[]{this.redisService.hget(redisKey, k), redisKey, k});
Event conformEvent = new Event();
conformEvent.setConfirmMan("system");
conformEvent.setConfirmTime(date);
conformEvent.setId(eventLast.getId());
conformEvent.setStatus(CommonConstant.ONE);
this.eventMapper.updateByPrimaryKeySelective(conformEvent);
}
} else if (CommonConstant.ZERO.equals(event.getIsRecovery())) {
if (eventLast != null && CommonConstant.ZERO.equals(eventLast.getIsRecovery())) {
eventLast.setValue(new BigDecimal(String.valueOf(v)));
eventLast.setDescription(event.getDescription());
eventLast.setDescriptionEn(eventService.getNameEn(event.getDescription()));
this.eventMapper.updateBatchById(eventLast);
} else {
id = this.snowflake.nextId();
log.info("new error event snowflake id: {},event_level:{},alarmStationId:{},targetDevice:{},deviceType:{},signal:{}", new Object[]{id, event.getEventLevel(), eventAddReq.getStationId(), eventAddReq.getSrcId(), eventAddReq.getDeviceType(), k});
event.setId(id);
event.setSignal(k);
this.generateAlarm(eventAddReq, v, event);
log.info("new error event update redis before:{},redisKey:{},k:{}", new Object[]{this.redisService.hget(redisKey, k), redisKey, k});
deviceTransfer.setEventId(event.getId());
deviceTransfer.setIsRecovery(event.getIsRecovery());
this.redisService.hset(redisKey, k, deviceTransfer);
log.info("new error event update redis after:{},redisKey:{},k:{}", new Object[]{this.redisService.hget(redisKey, k), redisKey, k});
}
}
}
}
}
private void generateAlarm(EventAddReq eventAddReq, Object v, Event event) {
event.setGroupId(eventAddReq.getGroupId());
event.setStationId(eventAddReq.getStationId());
event.setEventType(CommonConstant.EventType.alarm);
event.setTimeStamp(eventAddReq.getTs());
event.setTargetDevice(eventAddReq.getSrcId());
event.setDeviceType(eventAddReq.getDeviceType());
event.setDeviceTypeId(eventAddReq.getDeviceTypeId());
event.setStatus(CommonConstant.ZERO);
if (CommonConstant.EventLevel.notice.equals(event.getEventLevel()) || CommonConstant.EventLevel.statusChange.equals(event.getEventLevel()) || CommonConstant.ONE.equals(event.getIsRecovery())) {
event.setStatus(CommonConstant.ONE);
event.setConfirmTime(new Date());
event.setConfirmMan("system");
}
event.setValue(new BigDecimal(String.valueOf(v)));
Date now = new Date();
event.setCreateTime(new Date());
event.setUpdateTime(now);
this.eventMapper.insert(event);
}
public Boolean isRecoveryDevice(AlarmConfigQueryVo alarmConfigQueryVo) {
if (null == alarmConfigQueryVo.getStartTime() || null == alarmConfigQueryVo.getEndTime()) {
alarmConfigQueryVo.setStartTime(DateUtil.format(DateUtil.offsetDay(new Date(), -10), "yyyy-MM-dd"));
alarmConfigQueryVo.setEndTime(DateUtil.format(DateUtil.tomorrow(), "yyyy-MM-dd"));
}
List<Event> eventsList = this.eventMapper.selectByTargetDevice(alarmConfigQueryVo);
log.info("isRecoveryDevice. eventsList.size: {} ", eventsList.size());
Map<String, List<Event>> eventList = (Map)eventsList.stream().collect(Collectors.groupingBy(Event::getSignal));
log.info("isRecoveryDevice. eventList.size: {} ", eventList.size());
return this.isNormal(eventList);
}
private boolean isNormal(Map<String, List<Event>> eventList) {
boolean flag = true;
List<Event> events = null;
int eventNum = 0;
int num = 0;
Iterator var6 = eventList.entrySet().iterator();
while(var6.hasNext()) {
Map.Entry<String, List<Event>> map = (Map.Entry)var6.next();
events = (List)map.getValue();
if (null != events && events.size() > 0) {
++eventNum;
if (CommonConstant.ONE.equals(((Event)events.get(0)).getIsRecovery())) {
++num;
}
}
}
log.info("isRecoveryDevice. eventNum: {} ,num:{}", eventNum, num);
if (num < eventNum) {
flag = false;
}
return flag;
}
public List<StationStatusRespVO> isNormalStation(AlarmConfigQueryVo alarmConfigQueryVo) {
List<StationStatusRespVO> resultList = new ArrayList();
if (null == alarmConfigQueryVo.getStartTime() || null == alarmConfigQueryVo.getEndTime()) {
alarmConfigQueryVo.setStartTime(DateUtil.format(DateUtil.offsetDay(new Date(), -10), "yyyy-MM-dd"));
alarmConfigQueryVo.setEndTime(DateUtil.format(DateUtil.tomorrow(), "yyyy-MM-dd"));
}
List<Event> eventsList = this.eventMapper.selectByTargetDevice(alarmConfigQueryVo);
Map<Integer, Boolean> stationStatusMap = new HashMap();
Map<Integer, List<Event>> stationEventMap = (Map)eventsList.stream().collect(Collectors.groupingBy(Event::getStationId));
Iterator var6 = stationEventMap.entrySet().iterator();
List<Event> stationStatusRespVO;
while(var6.hasNext()) {
Map.Entry<Integer, List<Event>> map = (Map.Entry)var6.next();
stationStatusRespVO = map.getValue();
Map<String, List<Event>> deviceSignalEventMap = (Map)stationStatusRespVO.stream().collect(Collectors.groupingBy((s) -> {
return s.getTargetDevice() + "_" + s.getSignal();
}));
stationStatusMap.put(map.getKey(), this.isNormal(deviceSignalEventMap));
}
DataResult<List<Station>> dataResult = this.businessFeignClient.selectByGroupId(alarmConfigQueryVo.getGroupId());
List<Station> stationList = (List)dataResult.getData();
stationStatusRespVO = null;
boolean stationStatus = true;
Iterator var10 = stationList.iterator();
while(var10.hasNext()) {
Station station = (Station)var10.next();
StationStatusRespVO vo = new StationStatusRespVO();
vo.setStationId(station.getId());
stationStatus = stationStatusMap.get(station.getId()) == null || (Boolean)stationStatusMap.get(station.getId());
vo.setStationStatus(stationStatus);
resultList.add(vo);
}
return resultList;
}
public void polymerizationAlarm(EventAddReq eventAddReq, List<AlarmConfig> groupAlarmConfigs, List<AlarmConfig> stationAlarmConfigs) {
String redisKey = eventAddReq.getDeviceType() + ":" + eventAddReq.getStationId() + ":" + eventAddReq.getSrcId();
Map<Object, Object> hgetall = this.redisService.hgetall(redisKey);
Map<String, AlarmConfig> groupMapOne = groupAlarmConfigs == null ? new HashMap() : (Map)groupAlarmConfigs.stream().filter((i) -> {
return i.getAlarmLevel() != null && CommonConstant.ONE.equals(i.getAlarmLevel());
}).collect(Collectors.toMap(AlarmConfig::getCol, (AlarmConfig) -> {
return AlarmConfig;
}));
Map<String, AlarmConfig> stationMapOne = stationAlarmConfigs == null ? new HashMap() : (Map)stationAlarmConfigs.stream().filter((i) -> {
return i.getAlarmLevel() != null && CommonConstant.ONE.equals(i.getAlarmLevel());
}).collect(Collectors.toMap(AlarmConfig::getCol, (AlarmConfig) -> {
return AlarmConfig;
}));
Map<String, AlarmConfig> groupMapTwo = groupAlarmConfigs == null ? new HashMap() : (Map)groupAlarmConfigs.stream().filter((i) -> {
return i.getAlarmLevel() != null && CommonConstant.TWO.equals(i.getAlarmLevel());
}).collect(Collectors.toMap(AlarmConfig::getCol, (AlarmConfig) -> {
return AlarmConfig;
}));
Map<String, AlarmConfig> stationMapTwo = stationAlarmConfigs == null ? new HashMap() : (Map)stationAlarmConfigs.stream().filter((i) -> {
return i.getAlarmLevel() != null && CommonConstant.TWO.equals(i.getAlarmLevel());
}).collect(Collectors.toMap(AlarmConfig::getCol, (AlarmConfig) -> {
return AlarmConfig;
}));
Map<String, AlarmConfig> groupMapThree = groupAlarmConfigs == null ? new HashMap() : (Map)groupAlarmConfigs.stream().filter((i) -> {
return i.getAlarmLevel() != null && CommonConstant.THREE.equals(i.getAlarmLevel());
}).collect(Collectors.toMap(AlarmConfig::getCol, (AlarmConfig) -> {
return AlarmConfig;
}));
Map<String, AlarmConfig> stationMapThree = stationAlarmConfigs == null ? new HashMap() : (Map)stationAlarmConfigs.stream().filter((i) -> {
return i.getAlarmLevel() != null && CommonConstant.THREE.equals(i.getAlarmLevel());
}).collect(Collectors.toMap(AlarmConfig::getCol, (AlarmConfig) -> {
return AlarmConfig;
}));
Event vo = new Event();
vo.setStationId(eventAddReq.getStationId());
vo.setTargetDevice(eventAddReq.getSrcId());
vo.setSignal("polymerization");
vo.setEventLevel(CommonConstant.ONE);
if (((Map)stationMapOne).size() != 0 || ((Map)groupMapOne).size() != 0) {
this.commonPolymerizationAlarm(eventAddReq, (Map)stationMapOne, (Map)groupMapOne, hgetall, vo);
}
vo.setEventLevel(CommonConstant.TWO);
if (((Map)stationMapTwo).size() != 0 || ((Map)groupMapTwo).size() != 0) {
this.commonPolymerizationAlarm(eventAddReq, (Map)stationMapTwo, (Map)groupMapTwo, hgetall, vo);
}
vo.setEventLevel(CommonConstant.THREE);
if (((Map)stationMapThree).size() != 0 || ((Map)groupMapThree).size() != 0) {
this.commonPolymerizationAlarm(eventAddReq, (Map)stationMapThree, (Map)groupMapThree, hgetall, vo);
}
}
private void commonPolymerizationAlarm(EventAddReq eventAddReq, Map<String, AlarmConfig> stationMap, Map<String, AlarmConfig> groupMap, Map<Object, Object> hgetall, Event vo) {
boolean isError = false;
Event event = new Event();
isError = this.isError(stationMap, hgetall, isError, event, eventAddReq);
if (!isError && groupMap.size() > 0) {
isError = this.isError(groupMap, hgetall, isError, event, eventAddReq);
}
String redisKey = "polymerization:" + vo.getStationId() + ":" + vo.getTargetDevice();
DeviceTransfer eventLast = (DeviceTransfer)this.redisService.hget(redisKey, vo.getEventLevel().toString());
Integer level = vo.getEventLevel();
event.setEventLevel(level);
long eventId;
if (null != eventLast) {
if (CommonConstant.ONE.equals(eventLast.getIsRecovery()) && isError) {
event.setStatus(CommonConstant.ZERO);
eventId = this.insertNewEvent(eventAddReq, CommonConstant.ZERO, event);
this.updatePolymerization(redisKey, eventLast, vo.getEventLevel(), CommonConstant.ZERO, eventId);
if (!CommonConstant.THREE.equals(level)) {
this.sendSms(eventAddReq.getStationId(), event.getDescription(), level);
this.sendWorkOrder(event);
}
} else if (CommonConstant.ZERO.equals(eventLast.getIsRecovery()) && !isError) {
List<Long> ids = new ArrayList();
ids.add(eventLast.getEventId());
UserDetailRespVO userDetail = new UserDetailRespVO();
userDetail.setUsername("system");
this.eventMapper.updateByIds(ids, userDetail);
event.setBeforeEventId(eventLast.getEventId());
event.setConfirmMan("system");
event.setStatus(CommonConstant.ONE);
event.setConfirmTime(new Date());
eventId = this.insertNewEvent(eventAddReq, CommonConstant.ONE, event);
this.updatePolymerization(redisKey, eventLast, vo.getEventLevel(), CommonConstant.ONE, eventId);
}
} else if (isError) {
event.setStatus(CommonConstant.ZERO);
eventId = this.insertNewEvent(eventAddReq, CommonConstant.ZERO, event);
eventLast = new DeviceTransfer();
this.updatePolymerization(redisKey, eventLast, vo.getEventLevel(), CommonConstant.ZERO, eventId);
if (!CommonConstant.THREE.equals(level)) {
this.sendSms(eventAddReq.getStationId(), event.getDescription(), level);
this.sendWorkOrder(event);
}
}
}
private void updatePolymerization(String redisKey, DeviceTransfer eventLast, Integer level, Integer recovery, long eventId) {
eventLast.setEventId(eventId);
eventLast.setIsRecovery(recovery);
eventLast.setUpdateTime(new Date());
this.redisService.hset(redisKey, level.toString(), eventLast);
log.info("updatePolymerization redis:{},{},{}", new Object[]{redisKey, level.toString(), eventLast});
}
private void sendWorkOrder(Event event) {
MovementDTO movementDTO = new MovementDTO();
List<Event> events = new ArrayList();
events.add(event);
movementDTO.setEvents(events);
this.monitor.setEvents(movementDTO);
}
private long insertNewEvent(EventAddReq eventAddReq, Integer recoveryStatus, Event event) {
long id = this.snowflake.nextId();
event.setId(id);
event.setGroupId(eventAddReq.getGroupId());
event.setStationId(eventAddReq.getStationId());
event.setEventType(CommonConstant.EventType.alarm);
event.setTimeStamp(eventAddReq.getTs());
event.setTargetDevice(eventAddReq.getSrcId());
event.setDeviceType(eventAddReq.getDeviceType());
event.setDeviceTypeId(eventAddReq.getDeviceTypeId());
event.setSignal("polymerization");
event.setIsRecovery(recoveryStatus);
event.setCreateTime(new Date());
List<Event> list = new ArrayList();
list.add(event);
this.eventMapper.insertBatch(list);
return id;
}
private boolean isError(Map<String, AlarmConfig> alarmMap, Map<Object, Object> hgetall, boolean isError, Event event, EventAddReq eventAddReq) {
String deviceName = eventAddReq.getDeviceName();
Iterator var9 = alarmMap.entrySet().iterator();
while(var9.hasNext()) {
Map.Entry<String, AlarmConfig> entry = (Map.Entry)var9.next();
String k = (String)entry.getKey();
Object obj = hgetall.get(k);
AlarmConfig alarmConfig = (AlarmConfig)entry.getValue();
if (obj != null) {
if (CommonConstant.EventSignal.SIGNAL.equals(alarmConfig.getSensType())) {
int value;
if (obj instanceof DeviceTransfer) {
DeviceTransfer deviceTransfer = (DeviceTransfer)obj;
value = deviceTransfer.getValue().intValue();
} else {
value = Integer.parseInt(String.valueOf(obj));
}
if (eventAddReq.getDeviceType().contains("communicationStatus")) {
if (!CommonConstant.ONE.equals(value)) {
isError = true;
break;
}
} else if ("communicationStatus".equals(k)) {
if (CommonConstant.ZERO.equals(value)) {
isError = true;
break;
}
} else if (value > CommonConstant.ZERO) {
isError = true;
break;
}
} else if (CommonConstant.EventSignal.TELEMETER.equals(alarmConfig.getSensType())) {
BigDecimal lowerLimit = alarmConfig.getLowerLimit();
BigDecimal upperLimit = alarmConfig.getUpperLimit();
DeviceTransfer deviceTransfer = (DeviceTransfer)obj;
BigDecimal value = deviceTransfer.getValue();
if (upperLimit != null && value.compareTo(upperLimit) > 0) {
isError = true;
break;
}
if (lowerLimit != null && value.compareTo(lowerLimit) < 0) {
isError = true;
break;
}
}
event.setEventLevel(alarmConfig.getAlarmLevel());
}
}
event.setDescription(deviceName + "设备告警恢复");
event.setDescriptionEn(eventService.getNameEn(deviceName + "设备告警恢复"));
if (isError) {
event.setDescription(deviceName + "设备告警");
event.setDescriptionEn(eventService.getNameEn(deviceName + "设备告警"));
}
return isError;
}
private void sendSms(Integer stationId, String content, Integer level) {
SendSmsConfigQueryReq vo = new SendSmsConfigQueryReq();
vo.setStationId(stationId);
vo.setSmsType(CommonConstant.ONE);
vo.setAlarmLevel(String.valueOf(level));
JSONObject jsonObject = new JSONObject();
jsonObject.put("siteName", this.getStationName(stationId));
jsonObject.put("content", content);
vo.setParam(jsonObject);
this.sendSmsConfigService.sendSms(vo);
}
private String getStationName(Integer stationId) {
String name = "";
String key = "station:" + stationId;
Station station = null;
if (this.redisService.hasKey(key)) {
station = (Station)this.redisService.get(key);
} else {
DataResult<Station> result = this.businessFeignClient.selectByStationId(stationId);
station = (Station)result.getData();
}
if (null != station) {
name = station.getName();
}
return name;
}
public Event getNotRecovered(AlarmConfigQueryVo stationStatusReq) {
AlarmConfigQueryVo alarmConfigQueryVo = new AlarmConfigQueryVo();
alarmConfigQueryVo.setStationId(stationStatusReq.getStationId());
Event event = this.eventMapper.selectLastTime(alarmConfigQueryVo);
return event;
}
public EventTypeAndLevelsReqVO getAlarmDataStatistics(AlarmConfigQueryVo vo) {
String alarmNum = null;
String alarmUnresolvedNum = null;
EventTypeAndLevelsReqVO eventTypeAndLevelsReqVO = new EventTypeAndLevelsReqVO();
if (!vo.getStationList().isEmpty() && vo.getStationId() == null) {
Iterator var5 = vo.getStationList().iterator();
while(var5.hasNext()) {
Station station = (Station)var5.next();
AlarmConfigQueryVo alarmConfigQueryVo = new AlarmConfigQueryVo();
if (null == vo.getStartTime() && null == vo.getStartTime()) {
DateTime yesterday = DateUtil.yesterday();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String begin = sdf.format(DateUtil.beginOfDay(yesterday));
String endOfDay = sdf.format(DateUtil.endOfDay(yesterday));
alarmConfigQueryVo.setStartTime(begin);
alarmConfigQueryVo.setEndTime(endOfDay);
} else {
alarmConfigQueryVo.setStartTime(vo.getStartTime());
alarmConfigQueryVo.setEndTime(vo.getEndTime());
}
List<Integer> list = new ArrayList();
list.add(CommonConstant.EventLevel.accident);
list.add(CommonConstant.EventLevel.abnormal);
list.add(CommonConstant.EventLevel.overLimit);
alarmConfigQueryVo.setStationId(station.getId());
alarmConfigQueryVo.setEventLevelList(list);
List<Event> events = this.eventMapper.selectByTargetDeviceAsc(alarmConfigQueryVo);
List<Event> recovered = new ArrayList();
List<Event> notRecovered = new ArrayList();
Integer alarmOccurrencesNumber = 0;
Integer alarmUnresolvedNumber = 0;
Iterator var14 = events.iterator();
Event event;
while(var14.hasNext()) {
event = (Event)var14.next();
if (CommonConstant.ZERO.equals(event.getIsRecovery())) {
alarmOccurrencesNumber = alarmOccurrencesNumber + 1;
notRecovered.add(event);
}
if (CommonConstant.ONE.equals(event.getIsRecovery())) {
recovered.add(event);
}
}
var14 = notRecovered.iterator();
while(var14.hasNext()) {
event = (Event)var14.next();
Event beforeEventId = this.eventMapper.selectByBeforeEventId(event.getId());
if (null == beforeEventId) {
alarmUnresolvedNumber = alarmUnresolvedNumber + 1;
}
}
eventTypeAndLevelsReqVO.setAlarmOccurrencesNumber(alarmOccurrencesNumber);
eventTypeAndLevelsReqVO.setAlarmUnresolvedNumber(alarmUnresolvedNumber);
alarmNum = alarmOccurrencesNumber.toString();
alarmUnresolvedNum = alarmUnresolvedNumber.toString();
String redisKey = "dmaintenance:" + station.getId();
JSONObject modifyDataObject = new JSONObject();
modifyDataObject.put("alarmNum", alarmNum);
modifyDataObject.put("alarmUnresolvedNum", alarmUnresolvedNum);
String format = DateFormatUtils.format(new Date(), "yyyy-MM-dd HH:mm:ss");
modifyDataObject.put("updateTime", format);
this.redisService.hmset(redisKey, modifyDataObject);
log.info("elecMeter.insert OK");
}
}
return eventTypeAndLevelsReqVO;
}
@Async("flowThreadPoolExecutor")
public DataResult addEvents(List<EventAddReq> list) {
Iterator var2 = list.iterator();
while(var2.hasNext()) {
EventAddReq eventAddReq = (EventAddReq)var2.next();
List<AlarmConfig> groupAlarmConfigs = this.alarmConfigService.selectListGroupCache(eventAddReq.getGroupId(), com.ho.flow.constant.FlowConstant.AlarmConfig.SCOPE_GROUP, eventAddReq.getDeviceType());
List<AlarmConfig> stationAlarmConfigs = this.alarmConfigService.selectListCompanyCache(eventAddReq.getGroupId(), eventAddReq.getStationId(), com.ho.flow.constant.FlowConstant.AlarmConfig.SCOPE_STATION, eventAddReq.getDeviceType());
Map<String, AlarmConfig> stationConfigMap = (Map)stationAlarmConfigs.stream().collect(Collectors.toMap(AlarmConfig::getCol, (AlarmConfig) -> {
return AlarmConfig;
}));
Map<String, AlarmConfig> groupConfigMap = (Map)groupAlarmConfigs.stream().collect(Collectors.toMap(AlarmConfig::getCol, (AlarmConfig) -> {
return AlarmConfig;
}));
JSONObject dataSet = eventAddReq.getDataSet();
if (dataSet == null) {
return DataResult.success();
}
this.polymerizationAlarm(eventAddReq, groupAlarmConfigs, stationAlarmConfigs);
Map<String, List<Event>> resultMap = this.matchEventRecords(eventAddReq, dataSet, stationConfigMap, groupConfigMap);
try {
List<Event> events = (List)resultMap.get("events");
if (events != null && !events.isEmpty()) {
log.info("电站id{},设备id{}, events. size: {} ", new Object[]{eventAddReq.getStationId(), eventAddReq.getSrcId(), events.size()});
this.eventService.insertEventBatch(events);
MovementDTO movementDTO = new MovementDTO();
movementDTO.setEvents(events);
if (this.flag == 1) {
this.monitor.setEvents(movementDTO);
}
}
List<Event> updateEvents = (List)resultMap.get("updateEvents");
if (updateEvents != null && !updateEvents.isEmpty()) {
log.info("电站id{},设备id{}, updateEvents. size: {} ", new Object[]{eventAddReq.getStationId(), eventAddReq.getSrcId(), updateEvents.size()});
this.eventService.updateEventBatch(updateEvents);
}
List<Event> updateEventStatus = (List)resultMap.get("updateEventStatus");
if (updateEventStatus != null && !updateEventStatus.isEmpty()) {
log.info("电站id{},设备id{}, updateEventStatus. size: {} ", new Object[]{eventAddReq.getStationId(), eventAddReq.getSrcId(), updateEventStatus.size()});
List<Long> ids = (List)updateEventStatus.stream().map(Event::getId).collect(Collectors.toList());
UserDetailRespVO userDetailRespVO = new UserDetailRespVO();
userDetailRespVO.setUsername("system");
this.eventService.updateById(ids, userDetailRespVO);
}
} catch (Exception var15) {
log.error("新增告警入库异常,电站id{},设备id{},dataSet:{},异常信息:{}", new Object[]{eventAddReq.getStationId(), eventAddReq.getSrcId(), eventAddReq.getDataSet(), var15.getMessage()});
}
}
return DataResult.success();
}
}