AlarmDefineServiceImpl.java 8.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192
  1. package com.persagy.service.impl;
  2. import cn.hutool.core.collection.CollectionUtil;
  3. import cn.hutool.core.util.ObjectUtil;
  4. import com.alibaba.fastjson.JSONObject;
  5. import com.persagy.cache.AlarmInfoCache;
  6. import com.persagy.entity.AlarmDefine;
  7. import com.persagy.entity.AlarmState;
  8. import com.persagy.entity.ExpireAlarmMessage;
  9. import com.persagy.entity.ZktAlarmRecordDO;
  10. import com.persagy.job.ExpireAlarmQueue;
  11. import com.persagy.repository.AlarmRecordRepository;
  12. import com.persagy.service.AlarmDefineService;
  13. import lombok.extern.slf4j.Slf4j;
  14. import org.springframework.beans.factory.annotation.Autowired;
  15. import org.springframework.stereotype.Service;
  16. import java.util.List;
  17. import java.util.concurrent.ConcurrentHashMap;
  18. /**
  19. * @description:报警定义逻辑实现类(项目报警定义全量获取,报警定义添加修改删除同步更新)
  20. * @author:LuoGuangyi
  21. * @company:PersagyTechnologyCo.,Ltd
  22. * @since:2020/10/15 11:24
  23. * @version:V1.0
  24. **/
  25. @Slf4j
  26. @Service
  27. public class AlarmDefineServiceImpl implements AlarmDefineService {
  28. @Autowired
  29. AlarmInfoCache alarmInfoCache;
  30. @Autowired
  31. AlarmRecordRepository alarmRecordRepository;
  32. @Override
  33. public List listAllAlarmDefine(List<AlarmDefine> alarmDefineList) {
  34. // String ad = "{\n" +
  35. // " \"streamId\": \"\",\n" +
  36. // " \"opCode\": \"\",\n" +
  37. // " \"content\": [\n" +
  38. // " {\n" +
  39. // " \"id\": 1,\n" +
  40. // " \"objId\": \"obj1\",\n" +
  41. // " \"itemCode\": \"1055\",\n" +
  42. // " \"projectId\": \"xxx\",\n" +
  43. // " \"name\": \"室内高温\",\n" +
  44. // " \"dealFunc\": \"point\",\n" +
  45. // " \"category\": \"环境报警\",\n" +
  46. // " \"level\": \"B\",\n" +
  47. // " \"remark\": \"我是备注哈\",\n" +
  48. // " \"open\": 1,\n" +
  49. // " \"condition\": {\n" +
  50. // " \"infoCode\": [\n" +
  51. // " \"$infoCode1\",\n" +
  52. // " \"$infoCode1\"\n" +
  53. // " ],\n" +
  54. // " \"infoCodeId\": [\n" +
  55. // " {\n" +
  56. // " \"infoCode\": \"infoCode1\",\n" +
  57. // " \"meterId\": \"11\",\n" +
  58. // " \"funcId\": \"12\"\n" +
  59. // " },\n" +
  60. // " {\n" +
  61. // " \"infoCode\": \"infoCode2\",\n" +
  62. // " \"meterId\": \"21\",\n" +
  63. // " \"funcId\": \"22\"\n" +
  64. // " }\n" +
  65. // " ],\n" +
  66. // " \"trigger\": \"($infoCode1 > 10 && $infoCode1 < 20) && ($infoCode2 < 20)\",\n" +
  67. // " \"end\": \"!($infoCode1 < 20 && $infoCode1 > 10)\",\n" +
  68. // " \"$triggerUphold\": 10,\n" +
  69. // " \"$endUphold\": 5,\n" +
  70. // " \"$time\": {\n" +
  71. // " \"type\": \"period\",\n" +
  72. // " \"period\": {\n" +
  73. // " \"$gt\": \"090000\",\n" +
  74. // " \"$lt\": \"210000\"\n" +
  75. // " }\n" +
  76. // " }\n" +
  77. // " }\n" +
  78. // " }\n" +
  79. // " ]\n" +
  80. // "}";
  81. // NettyMessage<AlarmDefine> message = JSONObject.parseObject(ad, new TypeReference<NettyMessage<AlarmDefine>>(){});
  82. // List<AlarmDefine> alarmDefineList =message.getContent();
  83. alarmInfoCache.clearAllAlarmDefine();
  84. for (AlarmDefine alarmDefine : alarmDefineList) {
  85. alarmInfoCache.putAlarmDefinitionById(alarmDefine);
  86. }
  87. log.info(String.valueOf(alarmInfoCache));
  88. return alarmDefineList;
  89. }
  90. /**
  91. * @param alarmDefineList:
  92. * @description:批量修改(添加)报警定义 (根据报警条目+对象Id先删除,再添加)
  93. * @exception:
  94. * @author: LuoGuangyi
  95. * @company: Persagy Technology Co.,Ltd
  96. * @return: void
  97. * @since: 2020/10/26 20:38
  98. * @version: V1.0
  99. */
  100. @Override
  101. public void listSomeAlarmDefine(List<AlarmDefine> alarmDefineList) {
  102. for (AlarmDefine alarmDefine : alarmDefineList) {
  103. alarmInfoCache.clearAlarmDefine(alarmDefine);
  104. alarmInfoCache.putAlarmDefinitionById(alarmDefine);
  105. }
  106. }
  107. /**
  108. * @param alarmDefineList:
  109. * @description:根据标号功能号删除报警定义
  110. * @exception:
  111. * @author: LuoGuangyi
  112. * @company: Persagy Technology Co.,Ltd
  113. * @return: void
  114. * @since: 2020/10/29 18:26
  115. * @version: V1.0
  116. */
  117. @Override
  118. public void deleteAlarmDefine(List<AlarmDefine> alarmDefineList) {
  119. for (AlarmDefine alarmDefine : alarmDefineList) {
  120. alarmInfoCache.clearAlarmDefine(alarmDefine);
  121. }
  122. }
  123. @Override
  124. public void updateAlarmDefine(List<JSONObject> alarmDefineList) {
  125. if (CollectionUtil.isNotEmpty(alarmDefineList)) {
  126. for (JSONObject stateItem : alarmDefineList) {
  127. String defineId = AlarmInfoCache.getAlarmDefineId(stateItem);
  128. AlarmState alarmState = new AlarmState(defineId);
  129. String state = stateItem.getString("state");
  130. //1:未恢复;2:已恢复;3:已过期
  131. //报警状态( 0-正常 1-报警)
  132. String newState = "1".equals(state) ? "1" : "0";
  133. alarmState.setState(newState);
  134. alarmInfoCache.setAlarmState(defineId, alarmState);
  135. ZktAlarmRecordDO zktAlarmRecordDO = alarmRecordRepository.findById(defineId).orElse(new ZktAlarmRecordDO());
  136. zktAlarmRecordDO.setDefinitionId(defineId);
  137. zktAlarmRecordDO.setProjectId(stateItem.getString("projectId"));
  138. zktAlarmRecordDO.setObjId(stateItem.getString("objId"));
  139. zktAlarmRecordDO.setItemCode(stateItem.getString("itemCode"));
  140. zktAlarmRecordDO.setItemId(stateItem.getString("itemId"));
  141. zktAlarmRecordDO.setState(stateItem.getString("state"));
  142. alarmRecordRepository.save(zktAlarmRecordDO);
  143. if("2".equals(state)||"3".equals(state)) {
  144. try {
  145. ExpireAlarmMessage em = new ExpireAlarmMessage();
  146. //取消过期消息
  147. em.setType("2");
  148. em.setJobName(defineId);
  149. em.setJobGroupName("expire");
  150. ExpireAlarmQueue.getExpireAlarmMessageQueue().produce(em);
  151. //报警恢复,报警状态重置回默认
  152. alarmState.reset();
  153. }catch (Exception e){
  154. log.error("取消过期定时任务失败",e);
  155. }
  156. }
  157. }
  158. }
  159. }
  160. /**
  161. * @param
  162. * @description: 更新报警定义,把系统隔离的报警全部移除
  163. * 因为隔离和屏蔽的报警定义不产生报警,但是要恢复,所以只能实时判断,所有作废
  164. * @author: LuoGuangyi
  165. * @createTime: 2021/03/25 18:08
  166. * @return: void
  167. * @expression
  168. */
  169. @Override
  170. @Deprecated
  171. public void updateAlarmDefine() {
  172. ConcurrentHashMap<String, AlarmDefine> alarmDefineMap = alarmInfoCache.getAlarmDefineMap();
  173. if (ObjectUtil.isNotEmpty(alarmDefineMap)) {
  174. return;
  175. }
  176. for (AlarmDefine alarmDefine : alarmDefineMap.values()) {
  177. if (AlarmInfoCache.isolationSystemList.contains(alarmDefine.getSystemCode())) {
  178. alarmInfoCache.clearAlarmDefine(alarmDefine);
  179. }
  180. }
  181. }
  182. }