|
@@ -1,5 +1,31 @@
|
|
|
package com.persagy.dmp.alarm.service;
|
|
|
|
|
|
+import java.sql.Timestamp;
|
|
|
+import java.util.ArrayList;
|
|
|
+import java.util.Date;
|
|
|
+import java.util.HashMap;
|
|
|
+import java.util.List;
|
|
|
+import java.util.Map;
|
|
|
+import java.util.Optional;
|
|
|
+import java.util.Set;
|
|
|
+import java.util.UUID;
|
|
|
+
|
|
|
+import javax.persistence.EntityManager;
|
|
|
+import javax.persistence.EntityManagerFactory;
|
|
|
+import javax.persistence.EntityTransaction;
|
|
|
+import javax.persistence.PersistenceUnit;
|
|
|
+import javax.persistence.Query;
|
|
|
+import javax.transaction.Transactional;
|
|
|
+
|
|
|
+import org.hibernate.SQLQuery;
|
|
|
+import org.hibernate.query.internal.NativeQueryImpl;
|
|
|
+import org.hibernate.transform.Transformers;
|
|
|
+import org.springframework.beans.factory.annotation.Autowired;
|
|
|
+import org.springframework.stereotype.Service;
|
|
|
+import org.springframework.util.CollectionUtils;
|
|
|
+import org.springframework.util.StringUtils;
|
|
|
+
|
|
|
+import com.alibaba.fastjson.JSON;
|
|
|
import com.fasterxml.jackson.databind.JsonNode;
|
|
|
import com.fasterxml.jackson.databind.node.ObjectNode;
|
|
|
import com.google.common.collect.Lists;
|
|
@@ -7,12 +33,18 @@ import com.persagy.common.criteria.CriteriaUtils;
|
|
|
import com.persagy.common.criteria.JacksonCriteria;
|
|
|
import com.persagy.common.date.DateUtils;
|
|
|
import com.persagy.common.json.JacksonMapper;
|
|
|
+import com.persagy.common.security.MD5Utils;
|
|
|
import com.persagy.common.web.MapResponse;
|
|
|
import com.persagy.common.web.PagedResponse;
|
|
|
import com.persagy.dmp.alarm.entity.AlarmLog;
|
|
|
import com.persagy.dmp.alarm.entity.AlarmRecord;
|
|
|
import com.persagy.dmp.alarm.entity.QAlarmRecord;
|
|
|
-import com.persagy.dmp.alarm.enumeration.*;
|
|
|
+import com.persagy.dmp.alarm.enumeration.EnumAlarmListType;
|
|
|
+import com.persagy.dmp.alarm.enumeration.EnumAlarmLogType;
|
|
|
+import com.persagy.dmp.alarm.enumeration.EnumAlarmMessageType;
|
|
|
+import com.persagy.dmp.alarm.enumeration.EnumAlarmRecordWithColumns;
|
|
|
+import com.persagy.dmp.alarm.enumeration.EnumAlarmState;
|
|
|
+import com.persagy.dmp.alarm.enumeration.EnumAlarmTreatState;
|
|
|
import com.persagy.dmp.alarm.model.AlarmLogModel;
|
|
|
import com.persagy.dmp.alarm.model.AlarmRecordModel;
|
|
|
import com.persagy.dmp.alarm.model.AlarmRecordModels;
|
|
@@ -21,330 +53,376 @@ import com.persagy.dmp.alarm.util.CheckRequiredParam;
|
|
|
import com.persagy.dmp.config.DmpParameterStorage;
|
|
|
import com.persagy.dmp.rwd.model.DmpMessage;
|
|
|
import com.querydsl.core.types.dsl.BooleanExpression;
|
|
|
-import org.springframework.beans.factory.annotation.Autowired;
|
|
|
-import org.springframework.stereotype.Service;
|
|
|
-import org.springframework.util.CollectionUtils;
|
|
|
-import org.springframework.util.StringUtils;
|
|
|
-
|
|
|
-import javax.transaction.Transactional;
|
|
|
-import java.util.*;
|
|
|
|
|
|
@Service
|
|
|
public class AlarmRecordService extends AlarmBaseService {
|
|
|
|
|
|
- @Autowired
|
|
|
- private AlarmRecordRepository alarmRecordRepository;
|
|
|
- @Autowired
|
|
|
- private AlarmLogService alarmLogService;
|
|
|
- @Autowired
|
|
|
- private CriteriaUtils criteriaUtils;
|
|
|
+ @Autowired
|
|
|
+ private AlarmRecordRepository alarmRecordRepository;
|
|
|
+ @Autowired
|
|
|
+ private AlarmLogService alarmLogService;
|
|
|
+ @Autowired
|
|
|
+ private CriteriaUtils criteriaUtils;
|
|
|
+
|
|
|
+ private List<BooleanExpression> parse(ObjectNode criteria) {
|
|
|
+ List<BooleanExpression> expressions = Lists.newLinkedList();
|
|
|
+ QAlarmRecord qAlarmRecord = QAlarmRecord.alarmRecord;
|
|
|
+ // 获取报警列表的类型
|
|
|
+ JsonNode listTypeNode = criteria.get("listType");
|
|
|
+ // 如果查询条件中不包含列表类型走默认的查询方法
|
|
|
+ if (listTypeNode == null) {
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+ String listType = listTypeNode.textValue();
|
|
|
+ // 如果查询当前报警,查询报警状态为“未恢复”且“报警处理状态”为“未处理“或”处理中”中的报警;
|
|
|
+ if (EnumAlarmListType.CURRENT.name().equals(listType)) {
|
|
|
+ BooleanExpression currentAlarmExpression = qAlarmRecord.state.eq(EnumAlarmState.UN_HANDLE.getType())
|
|
|
+ .and(qAlarmRecord.treatState.eq(EnumAlarmTreatState.UN_HANDLE.getType())
|
|
|
+ .or(qAlarmRecord.treatState.eq(EnumAlarmTreatState.HANDLING.getType())));
|
|
|
+ expressions.add(currentAlarmExpression);
|
|
|
+ }
|
|
|
+
|
|
|
+ // 如果查询历史报警,查询报警状态为“已恢复”和”已过期”的报警,或者【报警状态等于“未恢复”且报警处理状态等于“处理完成”】的报警
|
|
|
+ if (EnumAlarmListType.HISTORY.name().equals(listType)) {
|
|
|
+ BooleanExpression historyAlarmExpression = qAlarmRecord.state.eq(EnumAlarmState.END.getType())
|
|
|
+ .or(qAlarmRecord.state.eq(EnumAlarmState.END.getType()))
|
|
|
+ .or(qAlarmRecord.treatState.eq(EnumAlarmTreatState.DONE.getType()));
|
|
|
+ expressions.add(historyAlarmExpression);
|
|
|
+ }
|
|
|
|
|
|
- private List<BooleanExpression> parse(ObjectNode criteria) {
|
|
|
- List<BooleanExpression> expressions = Lists.newLinkedList();
|
|
|
- QAlarmRecord qAlarmRecord = QAlarmRecord.alarmRecord;
|
|
|
- // 获取报警列表的类型
|
|
|
- JsonNode listTypeNode = criteria.get("listType");
|
|
|
- // 如果查询条件中不包含列表类型走默认的查询方法
|
|
|
- if (listTypeNode == null) {
|
|
|
- return null;
|
|
|
- }
|
|
|
- String listType = listTypeNode.textValue();
|
|
|
- // 如果查询当前报警,查询报警状态为“未恢复”且“报警处理状态”为“未处理“或”处理中”中的报警;
|
|
|
- if (EnumAlarmListType.CURRENT.name().equals(listType)) {
|
|
|
- BooleanExpression currentAlarmExpression = qAlarmRecord.state.eq(EnumAlarmState.UN_HANDLE.getType())
|
|
|
- .and(qAlarmRecord.treatState.eq(EnumAlarmTreatState.UN_HANDLE.getType())
|
|
|
- .or(qAlarmRecord.treatState.eq(EnumAlarmTreatState.HANDLING.getType())));
|
|
|
- expressions.add(currentAlarmExpression);
|
|
|
- }
|
|
|
+ return expressions;
|
|
|
+ }
|
|
|
|
|
|
- // 如果查询历史报警,查询报警状态为“已恢复”和”已过期”的报警,或者【报警状态等于“未恢复”且报警处理状态等于“处理完成”】的报警
|
|
|
- if (EnumAlarmListType.HISTORY.name().equals(listType)) {
|
|
|
- BooleanExpression historyAlarmExpression = qAlarmRecord.state.eq(EnumAlarmState.END.getType())
|
|
|
- .or(qAlarmRecord.state.eq(EnumAlarmState.END.getType()))
|
|
|
- .or(qAlarmRecord.treatState.eq(EnumAlarmTreatState.DONE.getType()));
|
|
|
- expressions.add(historyAlarmExpression);
|
|
|
- }
|
|
|
+ public PagedResponse<AlarmRecordModel> query(JacksonCriteria criteria) {
|
|
|
+ PagedResponse<AlarmRecord> resp = criteriaUtils.query(QAlarmRecord.alarmRecord, this::parse, criteria);
|
|
|
+ PagedResponse<AlarmRecordModel> result = new PagedResponse<>();
|
|
|
+ result.setCount(resp.getCount());
|
|
|
+ List<AlarmRecord> dataList = resp.getData();
|
|
|
+ if (CollectionUtils.isEmpty(dataList)) {
|
|
|
+ return result;
|
|
|
+ }
|
|
|
|
|
|
- return expressions;
|
|
|
- }
|
|
|
+ // 如果需要查询日志相关的信息,需使用withColumns参数
|
|
|
+ Set<String> withColumns = criteria.getWithColumns();
|
|
|
+ boolean withLogInfo = !CollectionUtils.isEmpty(withColumns);
|
|
|
|
|
|
- public PagedResponse<AlarmRecordModel> query(JacksonCriteria criteria) {
|
|
|
- PagedResponse<AlarmRecord> resp = criteriaUtils.query(QAlarmRecord.alarmRecord, this::parse, criteria);
|
|
|
- PagedResponse<AlarmRecordModel> result = new PagedResponse<>();
|
|
|
- result.setCount(resp.getCount());
|
|
|
- List<AlarmRecord> dataList = resp.getData();
|
|
|
- if (CollectionUtils.isEmpty(dataList)) {
|
|
|
- return result;
|
|
|
- }
|
|
|
+ Map<String, List<AlarmLog>> alarmLogListMap = new HashMap<>();
|
|
|
+ // 获取报警日志
|
|
|
+ if (withLogInfo && (withColumns.contains(EnumAlarmRecordWithColumns.ignoreTime.name())
|
|
|
+ || withColumns.contains(EnumAlarmRecordWithColumns.treatEndTime.name()))) {
|
|
|
+ List<String> recordIdList = new ArrayList<>();
|
|
|
+ dataList.forEach(alarmRecord -> recordIdList.add(alarmRecord.getId()));
|
|
|
+ alarmLogListMap = alarmLogService.getAlarmLogMap(recordIdList);
|
|
|
+ }
|
|
|
|
|
|
- // 如果需要查询日志相关的信息,需使用withColumns参数
|
|
|
- Set<String> withColumns = criteria.getWithColumns();
|
|
|
- boolean withLogInfo = !CollectionUtils.isEmpty(withColumns);
|
|
|
+ List<AlarmRecordModel> alarmRecordModels = new ArrayList<>(dataList.size());
|
|
|
+ for (AlarmRecord entity : dataList) {
|
|
|
+ AlarmRecordModel model = entity.toModel();
|
|
|
+ alarmRecordModels.add(model);
|
|
|
|
|
|
- Map<String, List<AlarmLog>> alarmLogListMap = new HashMap<>();
|
|
|
- // 获取报警日志
|
|
|
- if (withLogInfo &&
|
|
|
- (withColumns.contains(EnumAlarmRecordWithColumns.ignoreTime.name())
|
|
|
- || withColumns.contains(EnumAlarmRecordWithColumns.treatEndTime.name())
|
|
|
- )) {
|
|
|
- List<String> recordIdList = new ArrayList<>();
|
|
|
- dataList.forEach(alarmRecord -> recordIdList.add(alarmRecord.getId()));
|
|
|
- alarmLogListMap = alarmLogService.getAlarmLogMap(recordIdList);
|
|
|
- }
|
|
|
+ if (!withLogInfo) {
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ // 如果需要日志信息
|
|
|
+ List<AlarmLog> alarmLogList = new ArrayList<>();
|
|
|
+ if (alarmLogListMap.containsKey(model.getId())) {
|
|
|
+ alarmLogList = alarmLogListMap.get(model.getId());
|
|
|
+ }
|
|
|
+ if (withColumns.contains(EnumAlarmRecordWithColumns.ignoreTime.name())) {
|
|
|
+ Date ignoreAlarmTime = getCreateTime(alarmLogList, EnumAlarmLogType.TREATMODE, 1);
|
|
|
+ model.setIgnoreTime(ignoreAlarmTime);
|
|
|
+ }
|
|
|
+ if (withColumns.contains(EnumAlarmRecordWithColumns.treatEndTime.name())) {
|
|
|
+ Date treatEndTime = getCreateTime(alarmLogList, EnumAlarmLogType.TREATSTATE, 3);
|
|
|
+ model.setTreatEndTime(treatEndTime);
|
|
|
+ }
|
|
|
+ }
|
|
|
|
|
|
- List<AlarmRecordModel> alarmRecordModels = new ArrayList<>(dataList.size());
|
|
|
- for (AlarmRecord entity : dataList) {
|
|
|
- AlarmRecordModel model = entity.toModel();
|
|
|
- alarmRecordModels.add(model);
|
|
|
+ result.setData(alarmRecordModels);
|
|
|
+ return result;
|
|
|
+ }
|
|
|
|
|
|
- if (!withLogInfo) {
|
|
|
- continue;
|
|
|
- }
|
|
|
- // 如果需要日志信息
|
|
|
- List<AlarmLog> alarmLogList = new ArrayList<>();
|
|
|
- if (alarmLogListMap.containsKey(model.getId())) {
|
|
|
- alarmLogList = alarmLogListMap.get(model.getId());
|
|
|
- }
|
|
|
- if (withColumns.contains(EnumAlarmRecordWithColumns.ignoreTime.name())) {
|
|
|
- Date ignoreAlarmTime = getCreateTime(alarmLogList, EnumAlarmLogType.TREATMODE, 1);
|
|
|
- model.setIgnoreTime(ignoreAlarmTime);
|
|
|
- }
|
|
|
- if (withColumns.contains(EnumAlarmRecordWithColumns.treatEndTime.name())) {
|
|
|
- Date treatEndTime = getCreateTime(alarmLogList, EnumAlarmLogType.TREATSTATE, 3);
|
|
|
- model.setTreatEndTime(treatEndTime);
|
|
|
- }
|
|
|
- }
|
|
|
+ public Date getCreateTime(List<AlarmLog> alarmLogList, EnumAlarmLogType type, int after) {
|
|
|
+ Date createTime = null;
|
|
|
+ if (!CollectionUtils.isEmpty(alarmLogList)) {
|
|
|
+ for (AlarmLog alarmLog : alarmLogList) {
|
|
|
+ if (type.equals(alarmLog.getType()) && alarmLog.getAfter() == after) {
|
|
|
+ createTime = alarmLog.getCreateTime();
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return createTime;
|
|
|
+ }
|
|
|
|
|
|
- result.setData(alarmRecordModels);
|
|
|
- return result;
|
|
|
- }
|
|
|
+ @Transactional
|
|
|
+ public MapResponse create(AlarmRecordModel param) {
|
|
|
+ MapResponse response = new MapResponse();
|
|
|
+ AlarmParam alarmParam = prepareParam(response);
|
|
|
+ if (alarmParam == null) {
|
|
|
+ return response;
|
|
|
+ }
|
|
|
+ // 必填项校验
|
|
|
+ String checkResult = CheckRequiredParam.check(param, "itemCode", "objId", "level");
|
|
|
+ ;
|
|
|
+ if (!StringUtils.isEmpty(checkResult)) {
|
|
|
+ response.setFail(checkResult);
|
|
|
+ return response;
|
|
|
+ }
|
|
|
|
|
|
- public Date getCreateTime(List<AlarmLog> alarmLogList, EnumAlarmLogType type, int after) {
|
|
|
- Date createTime = null;
|
|
|
- if (!CollectionUtils.isEmpty(alarmLogList)) {
|
|
|
- for (AlarmLog alarmLog : alarmLogList) {
|
|
|
- if (type.equals(alarmLog.getType()) && alarmLog.getAfter() == after) {
|
|
|
- createTime = alarmLog.getCreateTime();
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- return createTime;
|
|
|
- }
|
|
|
+ String id = UUID.randomUUID().toString();
|
|
|
+ // 如果创建时,入参包含id,则使用入参中的id。但需要先校验id是否已存在
|
|
|
+ if (!StringUtils.isEmpty(param.getId())) {
|
|
|
+ Optional<AlarmRecord> byIdResult = alarmRecordRepository.findById(param.getId());
|
|
|
+ if (byIdResult.isPresent()) {
|
|
|
+ response.setFail("已存在相同id的报警记录!创建失败!");
|
|
|
+ return response;
|
|
|
+ } else {
|
|
|
+ id = param.getId();
|
|
|
+ }
|
|
|
+ }
|
|
|
+ AlarmRecord entity = AlarmRecord.fromModel(param);
|
|
|
+ entity.setId(id);
|
|
|
+ entity.setCreateUser(alarmParam.userId);
|
|
|
+ if (param.getCreateTime() != null) {
|
|
|
+ entity.setCreateTime(param.getCreateTime());
|
|
|
+ } else {
|
|
|
+ entity.setCreateTime(new Date());
|
|
|
+ }
|
|
|
+ // 默认处理状态为未处理
|
|
|
+ if (entity.getTreatState() == null) {
|
|
|
+ entity.setTreatState(1);
|
|
|
+ }
|
|
|
+ entity.setValid(1);
|
|
|
+ entity.setProjectId(alarmParam.projectId);
|
|
|
+ entity.setGroupCode(alarmParam.groupCode);
|
|
|
+ alarmRecordRepository.save(entity);
|
|
|
+ response.add("id", entity.getId());
|
|
|
+ // 推送消息至mq
|
|
|
+ DmpMessage msg = new DmpMessage();
|
|
|
+ msg.setMid(UUID.randomUUID().toString());
|
|
|
+ msg.setType(EnumAlarmMessageType.ALARM_RECORD_CREATE.getValue());
|
|
|
+ msg.setGroupCode(DmpParameterStorage.getGroupCode());
|
|
|
+ msg.setProjectId(DmpParameterStorage.getProjectId());
|
|
|
+ msg.setTargetId(entity.getId());
|
|
|
+ msg.add("obj", JacksonMapper.toSimpleJson(entity));
|
|
|
+ msg.setAppId(DmpParameterStorage.getAppId());
|
|
|
+ msg.setSendTime(DateUtils.format(new Date()));
|
|
|
+ response.add(msg);
|
|
|
+ return response;
|
|
|
+ }
|
|
|
|
|
|
- @Transactional
|
|
|
- public MapResponse create(AlarmRecordModel param) {
|
|
|
- MapResponse response = new MapResponse();
|
|
|
- AlarmParam alarmParam = prepareParam(response);
|
|
|
- if (alarmParam == null) {
|
|
|
- return response;
|
|
|
- }
|
|
|
- // 必填项校验
|
|
|
- String checkResult = CheckRequiredParam.check(param, "itemCode", "objId", "level");
|
|
|
- ;
|
|
|
- if (!StringUtils.isEmpty(checkResult)) {
|
|
|
- response.setFail(checkResult);
|
|
|
- return response;
|
|
|
- }
|
|
|
+ public AlarmRecord get(String id) {
|
|
|
+ Optional<AlarmRecord> result = alarmRecordRepository.findById(id);
|
|
|
+ return result.orElse(null);
|
|
|
+ }
|
|
|
|
|
|
- String id = UUID.randomUUID().toString();
|
|
|
- // 如果创建时,入参包含id,则使用入参中的id。但需要先校验id是否已存在
|
|
|
- if (!StringUtils.isEmpty(param.getId())) {
|
|
|
- Optional<AlarmRecord> byIdResult = alarmRecordRepository.findById(param.getId());
|
|
|
- if (byIdResult.isPresent()) {
|
|
|
- response.setFail("已存在相同id的报警记录!创建失败!");
|
|
|
- return response;
|
|
|
- } else {
|
|
|
- id = param.getId();
|
|
|
- }
|
|
|
- }
|
|
|
- AlarmRecord entity = AlarmRecord.fromModel(param);
|
|
|
- entity.setId(id);
|
|
|
- entity.setCreateUser(alarmParam.userId);
|
|
|
- if (param.getCreateTime() != null) {
|
|
|
- entity.setCreateTime(param.getCreateTime());
|
|
|
- } else {
|
|
|
- entity.setCreateTime(new Date());
|
|
|
- }
|
|
|
- // 默认处理状态为未处理
|
|
|
- if (entity.getTreatState() == null) {
|
|
|
- entity.setTreatState(1);
|
|
|
- }
|
|
|
- entity.setValid(1);
|
|
|
- entity.setProjectId(alarmParam.projectId);
|
|
|
- entity.setGroupCode(alarmParam.groupCode);
|
|
|
- alarmRecordRepository.save(entity);
|
|
|
- response.add("id", entity.getId());
|
|
|
- // 推送消息至mq
|
|
|
- DmpMessage msg = new DmpMessage();
|
|
|
- msg.setMid(UUID.randomUUID().toString());
|
|
|
- msg.setType(EnumAlarmMessageType.ALARM_RECORD_CREATE.getValue());
|
|
|
- msg.setGroupCode(DmpParameterStorage.getGroupCode());
|
|
|
- msg.setProjectId(DmpParameterStorage.getProjectId());
|
|
|
- msg.setTargetId(entity.getId());
|
|
|
- msg.add("obj", JacksonMapper.toSimpleJson(entity));
|
|
|
- msg.setAppId(DmpParameterStorage.getAppId());
|
|
|
- msg.setSendTime(DateUtils.format(new Date()));
|
|
|
- response.add(msg);
|
|
|
- return response;
|
|
|
- }
|
|
|
+ /**
|
|
|
+ * @description: 初始化日志对象
|
|
|
+ * @param: param 报警记录参数
|
|
|
+ * @return: com.persagy.dmp.alarm.model.AlarmLogModel
|
|
|
+ * @exception:
|
|
|
+ * @author: lixing
|
|
|
+ * @company: Persagy Technology Co.,Ltd
|
|
|
+ * @since: 2020/12/8 3:07 下午
|
|
|
+ * @version: V1.0
|
|
|
+ */
|
|
|
+ private AlarmLogModel initAlarmLogModel(AlarmRecordModel param) {
|
|
|
+ AlarmLogModel alarmLogModel = new AlarmLogModel();
|
|
|
+ alarmLogModel.setRecordId(param.getId());
|
|
|
+ alarmLogModel.setCreateTime(new Date());
|
|
|
+ alarmLogModel.setCreateUser(DmpParameterStorage.getUserId());
|
|
|
+ alarmLogModel.setProjectId(DmpParameterStorage.getProjectId());
|
|
|
+ alarmLogModel.setGroupCode(DmpParameterStorage.getGroupCode());
|
|
|
+ return alarmLogModel;
|
|
|
+ }
|
|
|
|
|
|
- public AlarmRecord get(String id) {
|
|
|
- Optional<AlarmRecord> result = alarmRecordRepository.findById(id);
|
|
|
- return result.orElse(null);
|
|
|
- }
|
|
|
+ @Transactional
|
|
|
+ public MapResponse update(AlarmRecordModel param) {
|
|
|
+ MapResponse response = new MapResponse();
|
|
|
+ AlarmRecord alarmRecord = get(param.getId());
|
|
|
+ if (alarmRecord == null) {
|
|
|
+ response.setFail("无法获取到要更新的数据!");
|
|
|
+ return response;
|
|
|
+ }
|
|
|
+ AlarmParam alarmParam = prepareParam(response);
|
|
|
+ if (alarmParam == null) {
|
|
|
+ return response;
|
|
|
+ }
|
|
|
+ if (param.getName() != null && !param.getName().isEmpty()) {
|
|
|
+ alarmRecord.setName(param.getName());
|
|
|
+ }
|
|
|
+ if (param.getRemark() != null && !param.getRemark().isEmpty()) {
|
|
|
+ alarmRecord.setRemark(param.getRemark());
|
|
|
+ }
|
|
|
+ // 状态修改记录日志
|
|
|
+ if (param.getState() != null) {
|
|
|
+ if (!param.getState().equals(alarmRecord.getState())) {
|
|
|
+ AlarmLogModel alarmLogModel = initAlarmLogModel(param);
|
|
|
+ alarmLogModel.setType(EnumAlarmLogType.ALARMSTATE);
|
|
|
+ alarmLogModel.setNature(alarmRecord.getNature());
|
|
|
+ alarmLogModel.setBefore(alarmRecord.getState());
|
|
|
+ alarmLogModel.setAfter(param.getState());
|
|
|
+ alarmLogService.create(alarmLogModel);
|
|
|
+ }
|
|
|
+ alarmRecord.setState(param.getState());
|
|
|
+ }
|
|
|
+ if (param.getNature() != null) {
|
|
|
+ alarmRecord.setNature(param.getNature());
|
|
|
+ }
|
|
|
+ // 处理方式修改记录日志
|
|
|
+ if (param.getTreatMode() != null) {
|
|
|
+ if (!param.getTreatMode().equals(alarmRecord.getTreatMode())) {
|
|
|
+ AlarmLogModel alarmLogModel = initAlarmLogModel(param);
|
|
|
+ alarmLogModel.setType(EnumAlarmLogType.TREATMODE);
|
|
|
+ alarmLogModel.setNature(alarmRecord.getNature());
|
|
|
+ alarmLogModel.setBefore(alarmRecord.getTreatMode());
|
|
|
+ alarmLogModel.setAfter(param.getTreatMode());
|
|
|
+ alarmLogService.create(alarmLogModel);
|
|
|
+ }
|
|
|
+ alarmRecord.setTreatMode(param.getTreatMode());
|
|
|
+ }
|
|
|
+ // 处理状态更改记录日志
|
|
|
+ if (param.getTreatState() != null) {
|
|
|
+ if (!param.getTreatState().equals(alarmRecord.getTreatState())) {
|
|
|
+ AlarmLogModel alarmLogModel = initAlarmLogModel(param);
|
|
|
+ alarmLogModel.setType(EnumAlarmLogType.TREATSTATE);
|
|
|
+ alarmLogModel.setNature(alarmRecord.getNature());
|
|
|
+ alarmLogModel.setBefore(alarmRecord.getTreatState());
|
|
|
+ alarmLogModel.setAfter(param.getTreatState());
|
|
|
+ alarmLogService.create(alarmLogModel);
|
|
|
+ }
|
|
|
+ alarmRecord.setTreatState(param.getTreatState());
|
|
|
+ }
|
|
|
|
|
|
- /**
|
|
|
- * @description: 初始化日志对象
|
|
|
- * @param: param 报警记录参数
|
|
|
- * @return: com.persagy.dmp.alarm.model.AlarmLogModel
|
|
|
- * @exception:
|
|
|
- * @author: lixing
|
|
|
- * @company: Persagy Technology Co.,Ltd
|
|
|
- * @since: 2020/12/8 3:07 下午
|
|
|
- * @version: V1.0
|
|
|
- */
|
|
|
- private AlarmLogModel initAlarmLogModel(AlarmRecordModel param) {
|
|
|
- AlarmLogModel alarmLogModel = new AlarmLogModel();
|
|
|
- alarmLogModel.setRecordId(param.getId());
|
|
|
- alarmLogModel.setCreateTime(new Date());
|
|
|
- alarmLogModel.setCreateUser(DmpParameterStorage.getUserId());
|
|
|
- alarmLogModel.setProjectId(DmpParameterStorage.getProjectId());
|
|
|
- alarmLogModel.setGroupCode(DmpParameterStorage.getGroupCode());
|
|
|
- return alarmLogModel;
|
|
|
- }
|
|
|
+ // 恢复值
|
|
|
+ if (param.getEndInfo() != null) {
|
|
|
+ alarmRecord.setEndInfo(param.getEndInfo());
|
|
|
+ }
|
|
|
+ // 恢复时间
|
|
|
+ if (param.getEndTime() != null) {
|
|
|
+ alarmRecord.setEndTime(param.getEndTime());
|
|
|
+ }
|
|
|
+ // 工单id
|
|
|
+ if (param.getOrderId() != null) {
|
|
|
+ alarmRecord.setOrderId(param.getOrderId());
|
|
|
+ }
|
|
|
+ // 工单状态
|
|
|
+ if (param.getOrderState() != null) {
|
|
|
+ alarmRecord.setOrderState(param.getOrderState());
|
|
|
+ }
|
|
|
+ // 补充说明
|
|
|
+ if (param.getSupplement() != null) {
|
|
|
+ alarmRecord.setSupplement(param.getSupplement());
|
|
|
+ }
|
|
|
+ // 报警等级
|
|
|
+ if (!StringUtils.isEmpty(param.getLevel())) {
|
|
|
+ alarmRecord.setLevel(param.getLevel());
|
|
|
+ }
|
|
|
+ alarmRecord.setUpdateUser(alarmParam.userId);
|
|
|
+ alarmRecord.setUpdateTime(new Date());
|
|
|
+ alarmRecordRepository.save(alarmRecord);
|
|
|
+ response.add("id", alarmRecord.getId());
|
|
|
+ // 推送消息至mq
|
|
|
+ DmpMessage msg = new DmpMessage();
|
|
|
+ msg.setMid(UUID.randomUUID().toString());
|
|
|
+ msg.setType(EnumAlarmMessageType.ALARM_RECORD_UPDATE.getValue());
|
|
|
+ msg.setGroupCode(DmpParameterStorage.getGroupCode());
|
|
|
+ msg.setProjectId(DmpParameterStorage.getProjectId());
|
|
|
+ msg.setTargetId(alarmRecord.getId());
|
|
|
+ msg.add("obj", JacksonMapper.toSimpleJson(alarmRecord));
|
|
|
+ // msg.add("obj", alarmRecord);
|
|
|
+ msg.setAppId(DmpParameterStorage.getAppId());
|
|
|
+ msg.setSendTime(DateUtils.format(new Date()));
|
|
|
+ response.add(msg);
|
|
|
+ return response;
|
|
|
+ }
|
|
|
|
|
|
- @Transactional
|
|
|
- public MapResponse update(AlarmRecordModel param) {
|
|
|
- MapResponse response = new MapResponse();
|
|
|
- AlarmRecord alarmRecord = get(param.getId());
|
|
|
- if (alarmRecord == null) {
|
|
|
- response.setFail("无法获取到要更新的数据!");
|
|
|
- return response;
|
|
|
- }
|
|
|
- AlarmParam alarmParam = prepareParam(response);
|
|
|
- if (alarmParam == null) {
|
|
|
- return response;
|
|
|
- }
|
|
|
- if (param.getName() != null && !param.getName().isEmpty()) {
|
|
|
- alarmRecord.setName(param.getName());
|
|
|
- }
|
|
|
- if (param.getRemark() != null && !param.getRemark().isEmpty()) {
|
|
|
- alarmRecord.setRemark(param.getRemark());
|
|
|
- }
|
|
|
- // 状态修改记录日志
|
|
|
- if (param.getState() != null) {
|
|
|
- if (!param.getState().equals(alarmRecord.getState())) {
|
|
|
- AlarmLogModel alarmLogModel = initAlarmLogModel(param);
|
|
|
- alarmLogModel.setType(EnumAlarmLogType.ALARMSTATE);
|
|
|
- alarmLogModel.setNature(alarmRecord.getNature());
|
|
|
- alarmLogModel.setBefore(alarmRecord.getState());
|
|
|
- alarmLogModel.setAfter(param.getState());
|
|
|
- alarmLogService.create(alarmLogModel);
|
|
|
- }
|
|
|
- alarmRecord.setState(param.getState());
|
|
|
- }
|
|
|
- if (param.getNature() != null) {
|
|
|
- alarmRecord.setNature(param.getNature());
|
|
|
- }
|
|
|
- // 处理方式修改记录日志
|
|
|
- if (param.getTreatMode() != null) {
|
|
|
- if (!param.getTreatMode().equals(alarmRecord.getTreatMode())) {
|
|
|
- AlarmLogModel alarmLogModel = initAlarmLogModel(param);
|
|
|
- alarmLogModel.setType(EnumAlarmLogType.TREATMODE);
|
|
|
- alarmLogModel.setNature(alarmRecord.getNature());
|
|
|
- alarmLogModel.setBefore(alarmRecord.getTreatMode());
|
|
|
- alarmLogModel.setAfter(param.getTreatMode());
|
|
|
- alarmLogService.create(alarmLogModel);
|
|
|
- }
|
|
|
- alarmRecord.setTreatMode(param.getTreatMode());
|
|
|
- }
|
|
|
- // 处理状态更改记录日志
|
|
|
- if (param.getTreatState() != null) {
|
|
|
- if (!param.getTreatState().equals(alarmRecord.getTreatState())) {
|
|
|
- AlarmLogModel alarmLogModel = initAlarmLogModel(param);
|
|
|
- alarmLogModel.setType(EnumAlarmLogType.TREATSTATE);
|
|
|
- alarmLogModel.setNature(alarmRecord.getNature());
|
|
|
- alarmLogModel.setBefore(alarmRecord.getTreatState());
|
|
|
- alarmLogModel.setAfter(param.getTreatState());
|
|
|
- alarmLogService.create(alarmLogModel);
|
|
|
- }
|
|
|
- alarmRecord.setTreatState(param.getTreatState());
|
|
|
- }
|
|
|
+ /**
|
|
|
+ * 批量更新报警记录
|
|
|
+ *
|
|
|
+ * @param param 批量更新参数AlarmRecordModels
|
|
|
+ * @return 是否更新成功
|
|
|
+ * @author lixing
|
|
|
+ * @version V1.0 2021/3/20 11:09 上午
|
|
|
+ */
|
|
|
+ @Transactional
|
|
|
+ public MapResponse batchUpdate(AlarmRecordModels param) {
|
|
|
+ MapResponse response = new MapResponse();
|
|
|
|
|
|
- // 恢复值
|
|
|
- if (param.getEndInfo() != null) {
|
|
|
- alarmRecord.setEndInfo(param.getEndInfo());
|
|
|
- }
|
|
|
- // 恢复时间
|
|
|
- if (param.getEndTime() != null) {
|
|
|
- alarmRecord.setEndTime(param.getEndTime());
|
|
|
- }
|
|
|
- // 工单id
|
|
|
- if (param.getOrderId() != null) {
|
|
|
- alarmRecord.setOrderId(param.getOrderId());
|
|
|
- }
|
|
|
- // 工单状态
|
|
|
- if (param.getOrderState() != null) {
|
|
|
- alarmRecord.setOrderState(param.getOrderState());
|
|
|
- }
|
|
|
- // 补充说明
|
|
|
- if (param.getSupplement() != null) {
|
|
|
- alarmRecord.setSupplement(param.getSupplement());
|
|
|
- }
|
|
|
- // 报警等级
|
|
|
- if (!StringUtils.isEmpty(param.getLevel())) {
|
|
|
- alarmRecord.setLevel(param.getLevel());
|
|
|
- }
|
|
|
- alarmRecord.setUpdateUser(alarmParam.userId);
|
|
|
- alarmRecord.setUpdateTime(new Date());
|
|
|
- alarmRecordRepository.save(alarmRecord);
|
|
|
- response.add("id", alarmRecord.getId());
|
|
|
- // 推送消息至mq
|
|
|
- DmpMessage msg = new DmpMessage();
|
|
|
- msg.setMid(UUID.randomUUID().toString());
|
|
|
- msg.setType(EnumAlarmMessageType.ALARM_RECORD_UPDATE.getValue());
|
|
|
- msg.setGroupCode(DmpParameterStorage.getGroupCode());
|
|
|
- msg.setProjectId(DmpParameterStorage.getProjectId());
|
|
|
- msg.setTargetId(alarmRecord.getId());
|
|
|
- msg.add("obj", JacksonMapper.toSimpleJson(alarmRecord));
|
|
|
- // msg.add("obj", alarmRecord);
|
|
|
- msg.setAppId(DmpParameterStorage.getAppId());
|
|
|
- msg.setSendTime(DateUtils.format(new Date()));
|
|
|
- response.add(msg);
|
|
|
- return response;
|
|
|
- }
|
|
|
+ List<AlarmRecordModel> alarmRecordModelList = param.getAlarmRecordModels();
|
|
|
+ if (CollectionUtils.isEmpty(alarmRecordModelList)) {
|
|
|
+ response.setFail("批量更新报警记录,没有传入需要更新的对象");
|
|
|
+ return response;
|
|
|
+ }
|
|
|
|
|
|
- /**
|
|
|
- * 批量更新报警记录
|
|
|
- *
|
|
|
- * @param param 批量更新参数AlarmRecordModels
|
|
|
- * @return 是否更新成功
|
|
|
- * @author lixing
|
|
|
- * @version V1.0 2021/3/20 11:09 上午
|
|
|
- */
|
|
|
- @Transactional
|
|
|
- public MapResponse batchUpdate(AlarmRecordModels param) {
|
|
|
- MapResponse response = new MapResponse();
|
|
|
+ // 一次最多更新200条数据
|
|
|
+ if (alarmRecordModelList.size() > 200) {
|
|
|
+ response.setFail("一次最多更新200条数据");
|
|
|
+ return response;
|
|
|
+ }
|
|
|
|
|
|
- List<AlarmRecordModel> alarmRecordModelList = param.getAlarmRecordModels();
|
|
|
- if (CollectionUtils.isEmpty(alarmRecordModelList)) {
|
|
|
- response.setFail("批量更新报警记录,没有传入需要更新的对象");
|
|
|
- return response;
|
|
|
- }
|
|
|
+ List<DmpMessage> msgList = new ArrayList<>();
|
|
|
+ alarmRecordModelList.forEach(alarmRecordModel -> {
|
|
|
+ MapResponse updateResponse = update(alarmRecordModel);
|
|
|
+ msgList.addAll(updateResponse.getMessageList());
|
|
|
+ });
|
|
|
+ response.add(msgList);
|
|
|
+ return response;
|
|
|
+ }
|
|
|
|
|
|
- // 一次最多更新200条数据
|
|
|
- if (alarmRecordModelList.size() > 200) {
|
|
|
- response.setFail("一次最多更新200条数据");
|
|
|
- return response;
|
|
|
- }
|
|
|
+ @PersistenceUnit
|
|
|
+ private EntityManagerFactory emf;
|
|
|
|
|
|
- List<DmpMessage> msgList = new ArrayList<>();
|
|
|
- alarmRecordModelList.forEach(alarmRecordModel -> {
|
|
|
- MapResponse updateResponse = update(alarmRecordModel);
|
|
|
- msgList.addAll(updateResponse.getMessageList());
|
|
|
- });
|
|
|
- response.add(msgList);
|
|
|
- return response;
|
|
|
- }
|
|
|
+ @SuppressWarnings("unchecked")
|
|
|
+ public MapResponse deleteData() {
|
|
|
+ EntityManager em = emf.createEntityManager();
|
|
|
+ EntityTransaction tx = null;
|
|
|
+ try {
|
|
|
+ StringBuilder sb = new StringBuilder();
|
|
|
+ while (true) {
|
|
|
+ sb.append(" SELECT * FROM alarm_record WHERE (obj_id,item_code,trigger_time) IN ( ");
|
|
|
+ sb.append(" SELECT t.obj_id,t.item_code,t.trigger_time FROM (SELECT obj_id,item_code,trigger_time ");
|
|
|
+ sb.append(" FROM alarm_record_copy1 WHERE nature IS NULL LIMIT 1) AS t)");
|
|
|
+ sb.append(" ORDER BY create_time ");
|
|
|
+ Query query = em.createNativeQuery(sb.toString(), AlarmRecord.class);
|
|
|
+ List<AlarmRecord> list = query.getResultList();
|
|
|
+ if(null== list || list.isEmpty()) {
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ Map<String, AlarmRecord> map = new HashMap<>();
|
|
|
+ List<String> idDeleteList = new ArrayList<>();
|
|
|
+ for (AlarmRecord alarmRecord : list) {
|
|
|
+ String key = MD5Utils.getSign(alarmRecord.getObjId() + alarmRecord.getObjId()
|
|
|
+ + (null != alarmRecord.getTriggerTime() ? alarmRecord.getTriggerTime().getTime() : ""));
|
|
|
+ map.put(key, alarmRecord);
|
|
|
+ idDeleteList.add(alarmRecord.getId());
|
|
|
+ }
|
|
|
+ sb.setLength(0);
|
|
|
+ tx = em.getTransaction();
|
|
|
+ tx.begin();
|
|
|
+ for (AlarmRecord alarmRecord : map.values()) {
|
|
|
+ alarmRecord.setNature(1);
|
|
|
+ em.persist(alarmRecord);
|
|
|
+ idDeleteList.remove(alarmRecord.getId());
|
|
|
+ }
|
|
|
+ sb.append("DELETE FROM alarm_record WHERE id IN (:ids)");
|
|
|
+ query = em.createNativeQuery(sb.toString(), AlarmRecord.class);
|
|
|
+ query.setParameter("ids", idDeleteList);
|
|
|
+ query.executeUpdate();
|
|
|
+ tx.commit();
|
|
|
+ sb.setLength(0);
|
|
|
+ }
|
|
|
+ } catch (Exception e) {
|
|
|
+ e.printStackTrace();
|
|
|
+ if (null != tx) {
|
|
|
+ tx.rollback();
|
|
|
+ }
|
|
|
+ } finally {
|
|
|
+ if (null != em) {
|
|
|
+ em.close();
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return null;
|
|
|
+ }
|
|
|
|
|
|
}
|