Browse Source

Merge remote-tracking branch 'origin/v2.0.0' into v2.0.0

lijie 3 years ago
parent
commit
2222c60ddc

+ 4 - 0
dmp-alarm/src/main/java/com/persagy/dmp/alarm/controller/AlarmRecordController.java

@@ -41,5 +41,9 @@ public class AlarmRecordController {
 //	public MapResponse delete(@RequestBody AlarmRecordModel param){
 //		return service.delete(param);
 //	}
+	@RequestMapping("/deleteData")
+	public MapResponse delete(){
+		return service.deleteData();
+	}
 	
 }

+ 1 - 1
dmp-alarm/src/main/java/com/persagy/dmp/alarm/enumeration/EnumAlarmMessageType.java

@@ -10,7 +10,7 @@ import lombok.Getter;
  * @version: V1.0
  **/
 public enum EnumAlarmMessageType {
-    ALARM_CONFIGS_CHANGE("alarmConfigsChange", "报警定义变动"),
+    ALARM_CONFIGS_CHANGE("alarm_configs_change", "报警定义变动"),
     ALARM_TARGET_UPDATE("alarmTargetUpdate", "报警匹配条件更新"),
     ALARM_TARGET_CREATE("alarmTargetCreate", "新增报警匹配条件"),
     ALARM_TARGET_DELETE("alarmTargetDelete", "删除报警匹配条件"),

+ 12 - 4
dmp-alarm/src/main/java/com/persagy/dmp/alarm/jms/MessageProcesser.java

@@ -2,7 +2,6 @@ package com.persagy.dmp.alarm.jms;
 
 import com.persagy.common.json.JacksonMapper;
 import com.persagy.dmp.alarm.enumeration.EnumAlarmMessageType;
-import com.persagy.dmp.alarm.jms.executor.AlarmTargetUpdateExecutor;
 import com.persagy.dmp.common.SpringUtils;
 import com.persagy.dmp.config.DmpParameterStorage;
 import com.persagy.dmp.rwd.model.DmpMessage;
@@ -28,15 +27,24 @@ public class MessageProcesser {
 	private String exchange;
 
 	@Value("${persagy.dmp.alarm.routingKey}")
-	private String rwdRoutingKey;
+	private String dmpAlarmRoutingKey;
+
+	/**
+	 * 报警定义的routingKey
+	 */
+	private static final String alarmConfigRoutingKey = "alarm-config-routing-key";
 
 	@Autowired
 	private RabbitTemplate rabbitTemplate;
 
 	public void convertAndSend(DmpMessage message) {
 		log.info("向rabbitMQ发送消息,message:" + JacksonMapper.toSimpleJson(message));
-//		rabbitTemplate.convertAndSend(exchange, rwdRoutingKey, JacksonMapper.toSimpleJson(message));
-		rabbitTemplate.convertAndSend(exchange, rwdRoutingKey, message);
+		// 如果是报警定义的变化,通过报警定义的routingKey发送,否则用报警公用的routingKey发送
+		if (EnumAlarmMessageType.ALARM_CONFIGS_CHANGE.getValue().equals(message.getType())) {
+			rabbitTemplate.convertAndSend(exchange, alarmConfigRoutingKey, message);
+		} else {
+			rabbitTemplate.convertAndSend(exchange, dmpAlarmRoutingKey, message);
+		}
 	}
 
 	private static final Set<String> beanNames = new HashSet<>();

+ 371 - 310
dmp-alarm/src/main/java/com/persagy/dmp/alarm/service/AlarmRecordService.java

@@ -7,6 +7,7 @@ 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;
@@ -21,342 +22,402 @@ 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 lombok.extern.slf4j.Slf4j;
+
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.util.CollectionUtils;
 import org.springframework.util.StringUtils;
 
+import javax.persistence.*;
 import javax.transaction.Transactional;
 import java.util.*;
-import java.util.stream.Collectors;
-
+@Slf4j
 @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);
-        }
+	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);
-        }
+		// 如果查询历史报警,查询报警状态为“已恢复”和”已过期”的报警,或者【报警状态等于“未恢复”且报警处理状态等于“处理完成”】的报警
+		if (EnumAlarmListType.HISTORY.name().equals(listType)) {
+			BooleanExpression historyAlarmExpression = qAlarmRecord.state.eq(EnumAlarmState.END.getType())
+					.or(qAlarmRecord.state.eq(EnumAlarmState.EXPIRE.getType()))
+					.or(qAlarmRecord.treatState.eq(EnumAlarmTreatState.DONE.getType()));
+			expressions.add(historyAlarmExpression);
+		}
 
-        return expressions;
-    }
+		return expressions;
+	}
 
-    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();
-        // 如果需要查询日志相关的信息,需使用withColumns参数
-        Set<String> withColumns = criteria.getWithColumns();
-        if (dataList != null && dataList.size() > 0) {
-            //获取报警记录id列表
-            List<String> recordIdList = new ArrayList<>();
-            dataList.forEach(alarmRecord -> recordIdList.add(alarmRecord.getId()));
-            //批量获取报警日志集合信息
-            Map<String, List<AlarmLog>> alarmLogListMap = alarmLogService.getAlarmLogMap(recordIdList);
+	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;
+		}
 
-            List<AlarmRecordModel> collect = dataList.stream().map(entity -> {
-                AlarmRecordModel model = entity.toModel();
-                List<AlarmLog> alarmLogList = new ArrayList<>();
-                if (alarmLogListMap.containsKey(model.getId())) {
-                    alarmLogList = alarmLogListMap.get(model.getId());
-                }
-                if (withColumns != null && withColumns.contains(EnumAlarmRecordWithColumns.ignoreTime.name())) {
-                    //                  Date ignoreAlarmTime = alarmLogService.getIgnoreAlarmTime(model.getId());
-                    Date ignoreAlarmTime = getCreateTime(alarmLogList, EnumAlarmLogType.TREATMODE, 1);
-                    model.setIgnoreTime(ignoreAlarmTime);
-                }
-                if (withColumns != null && withColumns.contains(EnumAlarmRecordWithColumns.treatEndTime.name())) {
-                    //                  Date treatEndTime = alarmLogService.getTreatEndTime(model.getId());
-                    Date treatEndTime = getCreateTime(alarmLogList, EnumAlarmLogType.TREATSTATE, 3);
-                    model.setTreatEndTime(treatEndTime);
-                }
-                return model;
-            }).collect(Collectors.toList());
-            result.setData(collect);
-        }
-        return result;
-    }
+		// 如果需要查询日志相关的信息,需使用withColumns参数
+		Set<String> withColumns = criteria.getWithColumns();
+		boolean withLogInfo = !CollectionUtils.isEmpty(withColumns);
 
-    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;
-    }
+		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);
+		}
 
-    @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;
-        }
+		List<AlarmRecordModel> alarmRecordModels = new ArrayList<>(dataList.size());
+		for (AlarmRecord entity : dataList) {
+			AlarmRecordModel model = entity.toModel();
+			alarmRecordModels.add(model);
 
-        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;
-    }
+			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 AlarmRecord get(String id) {
-        Optional<AlarmRecord> result = alarmRecordRepository.findById(id);
-        return result.orElse(null);
-    }
+		result.setData(alarmRecordModels);
+		return result;
+	}
 
+	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;
+	}
 
-    /**
-     * @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;
-    }
+	@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;
+		}
 
-    @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());
-        }
+		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;
+	}
 
-        // 恢复值
-        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;
-    }
+	public AlarmRecord get(String id) {
+		Optional<AlarmRecord> result = alarmRecordRepository.findById(id);
+		return result.orElse(null);
+	}
 
-    /**
-     * 批量更新报警记录
-     *
-     * @param param 批量更新参数AlarmRecordModels
-     * @return 是否更新成功
-     * @author lixing
-     * @version V1.0 2021/3/20 11:09 上午
-     */
-    @Transactional
-    public MapResponse batchUpdate(AlarmRecordModels param) {
-        MapResponse response = new MapResponse();
+	/**
+	 * @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;
+	}
 
-        List<AlarmRecordModel> alarmRecordModelList = param.getAlarmRecordModels();
-        if (CollectionUtils.isEmpty(alarmRecordModelList)) {
-            response.setFail("批量更新报警记录,没有传入需要更新的对象");
-            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());
+		}
 
-        // 一次最多更新200条数据
-        if (alarmRecordModelList.size() > 200) {
-            response.setFail("一次最多更新200条数据");
-            return response;
-        }
+		// 恢复值
+		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<DmpMessage> msgList = new ArrayList<>();
-        alarmRecordModelList.forEach(alarmRecordModel -> {
-            MapResponse updateResponse = update(alarmRecordModel);
-            msgList.addAll(updateResponse.getMessageList());
-        });
-        response.add(msgList);
-        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();
 
-    //	@Transactional
-    //	public MapResponse delete(AlarmRecordModel param) {
-    //		MapResponse response = new MapResponse();
-    //		// TODO
-    //		alarmRecordRepository.deleteById(param.getId());
-    //		return response;
-    //	}
-}
+		List<AlarmRecordModel> alarmRecordModelList = param.getAlarmRecordModels();
+		if (CollectionUtils.isEmpty(alarmRecordModelList)) {
+			response.setFail("批量更新报警记录,没有传入需要更新的对象");
+			return response;
+		}
+
+		// 一次最多更新200条数据
+		if (alarmRecordModelList.size() > 200) {
+			response.setFail("一次最多更新200条数据");
+			return response;
+		}
 
+		List<DmpMessage> msgList = new ArrayList<>();
+		alarmRecordModelList.forEach(alarmRecordModel -> {
+			MapResponse updateResponse = update(alarmRecordModel);
+			msgList.addAll(updateResponse.getMessageList());
+		});
+		response.add(msgList);
+		return response;
+	}
+
+	@PersistenceUnit
+	private EntityManagerFactory emf;
+
+	@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 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()) {
+					log.info("deleteData 执行完成");
+					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());
+				}
+				tx = em.getTransaction();
+				tx.begin();
+				for (AlarmRecord alarmRecord : map.values()) {
+					alarmRecord.setNature(1);
+					em.persist(alarmRecord);
+					idDeleteList.remove(alarmRecord.getId());
+				}
+				int pageSize = 500;
+				if (idDeleteList.size() > pageSize) {
+					while (idDeleteList.size() > pageSize) {
+						List<String> ids = idDeleteList.subList(0, pageSize);
+						String idsString = "'"+StringUtils.collectionToDelimitedString(ids,"','")+"'";
+						sb.setLength(0);
+						sb.append(" DELETE FROM alarm_record WHERE id IN (").append(idsString).append(")");
+						log.info("sql {}",sb.toString());
+						query = em.createNativeQuery(sb.toString(), AlarmRecord.class);
+						query.executeUpdate();
+						idDeleteList.removeAll(ids);
+					}
+				}
+				sb.setLength(0);
+				String idsString = "'"+StringUtils.collectionToDelimitedString(idDeleteList,"','")+"'";
+				sb.append(" DELETE FROM alarm_record WHERE id IN (").append(idsString).append(")");
+				log.info("sql {}",sb.toString());
+				query = em.createNativeQuery(sb.toString(), AlarmRecord.class);
+				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;
+	}
+}

+ 8 - 0
dmp-alarm/src/main/resources/bootstrap.yml

@@ -10,6 +10,12 @@ spring:
   jpa:
     properties:
       hibernate:
+        query:
+          in_clause_parameter_padding: true
+          plan_cache_max_size: 64
+          plan_parameter_metadata_max_size: 32
+          plan_cache_max_soft_references: 1024
+          plan_cache_max_strong_references: 64
         jdbc:
           batch_size: 20
         order_inserts: true
@@ -25,3 +31,5 @@ management:
   endpoint:
     health:
       enabled: true
+
+

+ 7 - 2
dmp-alarm/src/main/resources/logback-spring.xml

@@ -46,11 +46,16 @@
     </logger>
 
     <springProfile name="dev">
-        <logger name="org.hibernate.SQL" level="${LOG_LEVEL}"/>
-        <logger name="org.hibernate.type.descriptor.sql.BasicBinder" level="${LOG_LEVEL}"/>
+<!--        <logger name="org.hibernate.SQL" level="${LOG_LEVEL}"/>-->
+<!--        <logger name="org.hibernate.type.descriptor.sql.BasicBinder" level="${LOG_LEVEL}"/>-->
+        <logger name="org.hibernate.SQL" level="DEBUG"/>
+        <logger name="org.hibernate.type.descriptor.sql.BasicBinder" level="DEBUG"/>
         <root level="info">
             <appender-ref ref="stdout"/>
         </root>
+        <root level="${LOG_LEVEL}">
+            <appender-ref ref="file"/>
+        </root>
     </springProfile>
 
     <springProfile name="test">

+ 1 - 1
docker/dockerfiles/dmp-alarm/Dockerfile

@@ -1,5 +1,5 @@
 #构建此镜像的基础镜像
-FROM java:8-jre
+FROM java:8-jdk
 #指定作者名称
 MAINTAINER lijie<lijie@persagy.com>