123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192 |
- package com.persagy.service.impl;
- import cn.hutool.core.collection.CollectionUtil;
- import cn.hutool.core.util.ObjectUtil;
- import com.alibaba.fastjson.JSONObject;
- import com.persagy.cache.AlarmInfoCache;
- import com.persagy.entity.AlarmDefine;
- import com.persagy.entity.AlarmState;
- import com.persagy.entity.ExpireAlarmMessage;
- import com.persagy.entity.ZktAlarmRecordDO;
- import com.persagy.job.ExpireAlarmQueue;
- import com.persagy.repository.AlarmRecordRepository;
- import com.persagy.service.AlarmDefineService;
- import lombok.extern.slf4j.Slf4j;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.stereotype.Service;
- import java.util.List;
- import java.util.concurrent.ConcurrentHashMap;
- /**
- * @description:报警定义逻辑实现类(项目报警定义全量获取,报警定义添加修改删除同步更新)
- * @author:LuoGuangyi
- * @company:PersagyTechnologyCo.,Ltd
- * @since:2020/10/15 11:24
- * @version:V1.0
- **/
- @Slf4j
- @Service
- public class AlarmDefineServiceImpl implements AlarmDefineService {
- @Autowired
- AlarmInfoCache alarmInfoCache;
- @Autowired
- AlarmRecordRepository alarmRecordRepository;
- @Override
- public List listAllAlarmDefine(List<AlarmDefine> alarmDefineList) {
- // String ad = "{\n" +
- // " \"streamId\": \"\",\n" +
- // " \"opCode\": \"\",\n" +
- // " \"content\": [\n" +
- // " {\n" +
- // " \"id\": 1,\n" +
- // " \"objId\": \"obj1\",\n" +
- // " \"itemCode\": \"1055\",\n" +
- // " \"projectId\": \"xxx\",\n" +
- // " \"name\": \"室内高温\",\n" +
- // " \"dealFunc\": \"point\",\n" +
- // " \"category\": \"环境报警\",\n" +
- // " \"level\": \"B\",\n" +
- // " \"remark\": \"我是备注哈\",\n" +
- // " \"open\": 1,\n" +
- // " \"condition\": {\n" +
- // " \"infoCode\": [\n" +
- // " \"$infoCode1\",\n" +
- // " \"$infoCode1\"\n" +
- // " ],\n" +
- // " \"infoCodeId\": [\n" +
- // " {\n" +
- // " \"infoCode\": \"infoCode1\",\n" +
- // " \"meterId\": \"11\",\n" +
- // " \"funcId\": \"12\"\n" +
- // " },\n" +
- // " {\n" +
- // " \"infoCode\": \"infoCode2\",\n" +
- // " \"meterId\": \"21\",\n" +
- // " \"funcId\": \"22\"\n" +
- // " }\n" +
- // " ],\n" +
- // " \"trigger\": \"($infoCode1 > 10 && $infoCode1 < 20) && ($infoCode2 < 20)\",\n" +
- // " \"end\": \"!($infoCode1 < 20 && $infoCode1 > 10)\",\n" +
- // " \"$triggerUphold\": 10,\n" +
- // " \"$endUphold\": 5,\n" +
- // " \"$time\": {\n" +
- // " \"type\": \"period\",\n" +
- // " \"period\": {\n" +
- // " \"$gt\": \"090000\",\n" +
- // " \"$lt\": \"210000\"\n" +
- // " }\n" +
- // " }\n" +
- // " }\n" +
- // " }\n" +
- // " ]\n" +
- // "}";
- // NettyMessage<AlarmDefine> message = JSONObject.parseObject(ad, new TypeReference<NettyMessage<AlarmDefine>>(){});
- // List<AlarmDefine> alarmDefineList =message.getContent();
- alarmInfoCache.clearAllAlarmDefine();
- for (AlarmDefine alarmDefine : alarmDefineList) {
- alarmInfoCache.putAlarmDefinitionById(alarmDefine);
- }
- log.info(String.valueOf(alarmInfoCache));
- return alarmDefineList;
- }
- /**
- * @param alarmDefineList:
- * @description:批量修改(添加)报警定义 (根据报警条目+对象Id先删除,再添加)
- * @exception:
- * @author: LuoGuangyi
- * @company: Persagy Technology Co.,Ltd
- * @return: void
- * @since: 2020/10/26 20:38
- * @version: V1.0
- */
- @Override
- public void listSomeAlarmDefine(List<AlarmDefine> alarmDefineList) {
- for (AlarmDefine alarmDefine : alarmDefineList) {
- alarmInfoCache.clearAlarmDefine(alarmDefine);
- alarmInfoCache.putAlarmDefinitionById(alarmDefine);
- }
- }
- /**
- * @param alarmDefineList:
- * @description:根据标号功能号删除报警定义
- * @exception:
- * @author: LuoGuangyi
- * @company: Persagy Technology Co.,Ltd
- * @return: void
- * @since: 2020/10/29 18:26
- * @version: V1.0
- */
- @Override
- public void deleteAlarmDefine(List<AlarmDefine> alarmDefineList) {
- for (AlarmDefine alarmDefine : alarmDefineList) {
- alarmInfoCache.clearAlarmDefine(alarmDefine);
- }
- }
- @Override
- public void updateAlarmDefine(List<JSONObject> alarmDefineList) {
- if (CollectionUtil.isNotEmpty(alarmDefineList)) {
- for (JSONObject stateItem : alarmDefineList) {
- String defineId = AlarmInfoCache.getAlarmDefineId(stateItem);
- AlarmState alarmState = new AlarmState(defineId);
- String state = stateItem.getString("state");
- //1:未恢复;2:已恢复;3:已过期
- //报警状态( 0-正常 1-报警)
- String newState = "1".equals(state) ? "1" : "0";
- alarmState.setState(newState);
- alarmInfoCache.setAlarmState(defineId, alarmState);
- ZktAlarmRecordDO zktAlarmRecordDO = alarmRecordRepository.findById(defineId).orElse(new ZktAlarmRecordDO());
- zktAlarmRecordDO.setDefinitionId(defineId);
- zktAlarmRecordDO.setProjectId(stateItem.getString("projectId"));
- zktAlarmRecordDO.setObjId(stateItem.getString("objId"));
- zktAlarmRecordDO.setItemCode(stateItem.getString("itemCode"));
- zktAlarmRecordDO.setItemId(stateItem.getString("itemId"));
- zktAlarmRecordDO.setState(stateItem.getString("state"));
- alarmRecordRepository.save(zktAlarmRecordDO);
- if("2".equals(state)||"3".equals(state)) {
- try {
- ExpireAlarmMessage em = new ExpireAlarmMessage();
- //取消过期消息
- em.setType("2");
- em.setJobName(defineId);
- em.setJobGroupName("expire");
- ExpireAlarmQueue.getExpireAlarmMessageQueue().produce(em);
- //报警恢复,报警状态重置回默认
- alarmState.reset();
- }catch (Exception e){
- log.error("取消过期定时任务失败",e);
- }
- }
- }
- }
- }
- /**
- * @param
- * @description: 更新报警定义,把系统隔离的报警全部移除
- * 因为隔离和屏蔽的报警定义不产生报警,但是要恢复,所以只能实时判断,所有作废
- * @author: LuoGuangyi
- * @createTime: 2021/03/25 18:08
- * @return: void
- * @expression
- */
- @Override
- @Deprecated
- public void updateAlarmDefine() {
- ConcurrentHashMap<String, AlarmDefine> alarmDefineMap = alarmInfoCache.getAlarmDefineMap();
- if (ObjectUtil.isNotEmpty(alarmDefineMap)) {
- return;
- }
- for (AlarmDefine alarmDefine : alarmDefineMap.values()) {
- if (AlarmInfoCache.isolationSystemList.contains(alarmDefine.getSystemCode())) {
- alarmInfoCache.clearAlarmDefine(alarmDefine);
- }
- }
- }
- }
|