|
|
@@ -75,13 +75,14 @@ public class RuleEngineUtil {
|
|
|
baseLogs.add(baseLog);
|
|
|
ruleEngineLog.setTenantId(deviceControlAction.getDevices().get(0).getTenantId());
|
|
|
} else if (ActionTypeEnum.ALARM_EVENT.getType().equals(ruleEngineAction.getType())) {
|
|
|
- this.generateAlarmEvent(ruleEngineId, ruleEngineName, Collections.singletonList(ruleEngineAction));
|
|
|
+ List<SimpleVO> triggerDevices = extractDeviceTriggerLogDevices(ruleEngineDetail);
|
|
|
+ this.generateAlarmEvent(ruleEngineId, ruleEngineName, ((DeviceTriggerLog) ruleEngineDetail.getTriggers().get(0).getDetail()).getProductCode(), triggerDevices, Collections.singletonList(ruleEngineAction));
|
|
|
deviceActionTypes.add("alarmEvent");
|
|
|
BaseLog baseLog = new BaseLog();
|
|
|
baseLog.setType(ActionTypeEnum.ALARM_EVENT.getType());
|
|
|
- baseLog.setDetail(getAlarmActionLog(now, (AlarmEventAction)ruleEngineAction));
|
|
|
+ baseLog.setDetail(getAlarmActionLog(now, triggerDevices, (AlarmEventAction)ruleEngineAction));
|
|
|
baseLogs.add(baseLog);
|
|
|
- ruleEngineLog.setTenantId(((AlarmEventAction) ruleEngineAction).getDevices().get(0).getTenantId());
|
|
|
+ ruleEngineLog.setTenantId(triggerDevices.get(0).getTenantId());
|
|
|
}
|
|
|
}
|
|
|
|
|
|
@@ -106,13 +107,13 @@ public class RuleEngineUtil {
|
|
|
}
|
|
|
|
|
|
@NotNull
|
|
|
- private static AlarmActionLog getAlarmActionLog(LocalDateTime now, AlarmEventAction ruleEngineAction) {
|
|
|
+ private static AlarmActionLog getAlarmActionLog(LocalDateTime now, List<SimpleVO> triggerDevices, AlarmEventAction ruleEngineAction) {
|
|
|
AlarmActionLog alarmActionLog = new AlarmActionLog();
|
|
|
List<AlarmEventLog> alarmEventLogs = new ArrayList();
|
|
|
alarmActionLog.setAlarms(alarmEventLogs);
|
|
|
alarmActionLog.setTime(DateTimeUtil.format(now));
|
|
|
AlarmEventLog alarmEventLog = new AlarmEventLog();
|
|
|
- alarmEventLog.setNotifiers(ruleEngineAction.getDevices());
|
|
|
+ alarmEventLog.setNotifiers(triggerDevices);
|
|
|
alarmEventLog.setLevel(String.valueOf(ruleEngineAction.getAlarmGrade()));
|
|
|
alarmEventLog.setMethod(ruleEngineAction.getAlarmAttribute());
|
|
|
alarmEventLogs.add(alarmEventLog);
|
|
|
@@ -125,11 +126,10 @@ public class RuleEngineUtil {
|
|
|
* @param ruleEngineName
|
|
|
* @param actions
|
|
|
*/
|
|
|
- public void generateAlarmEvent(Long ruleEngineId, String ruleEngineName, List<RuleEngineAction> actions) {
|
|
|
+ public void generateAlarmEvent(Long ruleEngineId, String ruleEngineName, String productCode, List<SimpleVO> triggerDevices, List<RuleEngineAction> actions) {
|
|
|
for(RuleEngineAction ruleEngineAction : actions) {
|
|
|
AlarmEventAction alarmEventAction = (AlarmEventAction)ruleEngineAction;
|
|
|
- List<AlarmSimpleVO> devices = alarmEventAction.getDevices();
|
|
|
- if (devices != null && !devices.isEmpty()) {
|
|
|
+ if (!triggerDevices.isEmpty()) {
|
|
|
JSONObject jsonObject = new JSONObject();
|
|
|
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
|
|
|
LocalDateTime now = LocalDateTime.now();
|
|
|
@@ -140,11 +140,11 @@ public class RuleEngineUtil {
|
|
|
jsonObject.put("alarmAttribute",alarmEventAction.getAlarmAttribute());
|
|
|
jsonObject.put("alarmContent",alarmEventAction.getAlarmAttribute());
|
|
|
jsonObject.put("alarmGrade",alarmEventAction.getAlarmGrade());
|
|
|
- jsonObject.put("productCode",alarmEventAction.getProductCode());
|
|
|
- for (AlarmSimpleVO device : devices) {
|
|
|
- jsonObject.put("deviceId",device.getDeviceId());
|
|
|
- jsonObject.put("alarmObject",device.getName());
|
|
|
- jsonObject.put("alarmAddress",device.getCommAddress());
|
|
|
+ jsonObject.put("productCode", productCode);
|
|
|
+ for (SimpleVO device : triggerDevices) {
|
|
|
+ jsonObject.put("deviceId", device.getId());
|
|
|
+ jsonObject.put("alarmObject", device.getName());
|
|
|
+ jsonObject.put("alarmAddress", device.getCommAddress());
|
|
|
|
|
|
HttpClientUtils.doPostJson(alarmUrl,jsonObject.toJSONString());
|
|
|
}
|
|
|
@@ -153,6 +153,28 @@ public class RuleEngineUtil {
|
|
|
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * 从规则执行日志的触发器明细中取出设备触发记录里的设备列表({@link DeviceTriggerLog#getDevices()})。
|
|
|
+ */
|
|
|
+ private static List<SimpleVO> extractDeviceTriggerLogDevices(RuleEngineDetailLog ruleEngineDetail) {
|
|
|
+ if (ruleEngineDetail == null || ruleEngineDetail.getTriggers() == null) {
|
|
|
+ return Collections.emptyList();
|
|
|
+ }
|
|
|
+ for (BaseLog triggerLog : ruleEngineDetail.getTriggers()) {
|
|
|
+ if (triggerLog == null) {
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ Object detail = triggerLog.getDetail();
|
|
|
+ if (detail instanceof DeviceTriggerLog) {
|
|
|
+ List<SimpleVO> devices = ((DeviceTriggerLog) detail).getDevices();
|
|
|
+ if (devices != null && !devices.isEmpty()) {
|
|
|
+ return devices;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return Collections.emptyList();
|
|
|
+ }
|
|
|
+
|
|
|
/**
|
|
|
* 从 JSON 数组字符串中,根据 value 值获取对应的 name 值
|
|
|
* @param jsonArrayStr JSON数组字符串(如:[{"name":"开","value":"1"},{"name":"关","value":"2"}])
|