|
|
@@ -5,11 +5,9 @@ import cn.hutool.json.JSONUtil;
|
|
|
import org.apache.commons.collections.CollectionUtils;
|
|
|
import org.hswebframework.web.bean.FastBeanCopier;
|
|
|
import org.jetlinks.community.rule.engine.device.DeviceAlarmRule;
|
|
|
-import org.jetlinks.community.rule.engine.entity.RuleInstanceEntity;
|
|
|
import org.jetlinks.community.rule.engine.entity.RuleSceneEntity;
|
|
|
import org.jetlinks.community.rule.engine.executor.DeviceMessageSendTaskExecutorProvider;
|
|
|
import org.jetlinks.core.message.DeviceMessage;
|
|
|
-import org.jetlinks.rule.engine.api.model.RuleEngineModelParser;
|
|
|
import org.jetlinks.rule.engine.api.model.RuleLink;
|
|
|
import org.jetlinks.rule.engine.api.model.RuleModel;
|
|
|
import org.jetlinks.rule.engine.api.model.RuleNodeModel;
|
|
|
@@ -45,98 +43,27 @@ public class RuleSceneModelParser implements RuleModelParserStrategy {
|
|
|
model.setId(format+":"+rule.getId());
|
|
|
model.setName(rule.getName());
|
|
|
List<RuleSceneEntity.Trigger> triggers = rule.getTriggers();
|
|
|
-// //执行动作
|
|
|
-// List<Action> actions = rule.getActions();
|
|
|
-// //处理定时触发
|
|
|
-// {
|
|
|
-// List<DeviceAlarmRule.Trigger> timerTriggers = triggers.stream()
|
|
|
-// .filter(trigger -> trigger.getTrigger() == DeviceAlarmRule.TriggerType.timer)
|
|
|
-// .collect(Collectors.toList());
|
|
|
-// int index = 0;
|
|
|
-// for (DeviceAlarmRule.Trigger trigger : timerTriggers) {
|
|
|
-// DeviceMessage msg = trigger.getType().createMessage(trigger).orElse(null);
|
|
|
-// if (msg == null) {
|
|
|
-// throw new UnsupportedOperationException("不支持定时条件类型:" + trigger.getType());
|
|
|
-// }
|
|
|
-// RuleNodeModel timer = new RuleNodeModel();
|
|
|
-// timer.setId("timer:" + (++index));
|
|
|
-// timer.setName("定时发送设备消息");
|
|
|
-// timer.setExecutor("timer");
|
|
|
-// timer.setConfiguration(Collections.singletonMap("cron", trigger.getCron()));
|
|
|
-//
|
|
|
-// DeviceMessageSendTaskExecutorProvider.Config senderConfig = new DeviceMessageSendTaskExecutorProvider.Config();
|
|
|
-// senderConfig.setAsync(true);
|
|
|
-// senderConfig.setDeviceId(trigger.getDeviceId());
|
|
|
-// senderConfig.setProductId(trigger.getProductId());
|
|
|
-// senderConfig.setMessage(msg.toJson());
|
|
|
-//
|
|
|
-// RuleNodeModel messageSender = new RuleNodeModel();
|
|
|
-// messageSender.setId("message-sender:" + (++index));
|
|
|
-// messageSender.setName("定时发送设备消息");
|
|
|
-// messageSender.setExecutor("device-message-sender");
|
|
|
-// messageSender.setConfiguration(FastBeanCopier.copy(senderConfig, new HashMap<>()));
|
|
|
-//
|
|
|
-// RuleLink link = new RuleLink();
|
|
|
-// link.setId(timer.getId().concat(":").concat(messageSender.getId()));
|
|
|
-// link.setName("执行动作:" + index);
|
|
|
-// link.setSource(timer);
|
|
|
-// link.setTarget(messageSender);
|
|
|
-// timer.getOutputs().add(link);
|
|
|
-// messageSender.getInputs().add(link);
|
|
|
-// model.getNodes().add(timer);
|
|
|
-// model.getNodes().add(messageSender);
|
|
|
-// }
|
|
|
-// }
|
|
|
-// RuleNodeModel conditionNode = new RuleNodeModel();
|
|
|
-// conditionNode.setId("conditions");
|
|
|
-// conditionNode.setName("预警条件");
|
|
|
-// conditionNode.setExecutor("device-message-sender");
|
|
|
-// conditionNode.addConfiguration("rule", rule.getTriggers());
|
|
|
-//// conditionNode.setConfiguration(Collections.singletonMap("rule", rule.getTriggers()));
|
|
|
-// model.getNodes().add(conditionNode);
|
|
|
-// if (CollectionUtils.isNotEmpty(actions)) {
|
|
|
-// int index = 0;
|
|
|
-// for (Action operation : actions) {
|
|
|
-// if (!StringUtils.hasText(operation.getExecutor())) {
|
|
|
-// continue;
|
|
|
-// }
|
|
|
-// index++;
|
|
|
-// RuleNodeModel action = new RuleNodeModel();
|
|
|
-// action.setId("device-message-sender:" + index);
|
|
|
-// action.setName("执行动作:" + index);
|
|
|
-// action.setExecutor(operation.getExecutor());
|
|
|
-// action.setConfiguration(operation.getConfiguration());
|
|
|
-//
|
|
|
-// RuleLink link = new RuleLink();
|
|
|
-// link.setId(action.getId().concat(":").concat(conditionNode.getId()));
|
|
|
-// link.setName("执行动作:" + index);
|
|
|
-// link.setSource(conditionNode);
|
|
|
-// link.setTarget(action);
|
|
|
-// model.getNodes().add(action);
|
|
|
-// action.getInputs().add(link);
|
|
|
-// conditionNode.getOutputs().add(link);
|
|
|
-// }
|
|
|
-// }
|
|
|
- return model;
|
|
|
- }
|
|
|
|
|
|
-
|
|
|
- /**
|
|
|
- * 设备触发
|
|
|
- */
|
|
|
- private void handlerDeviceTrigger(List<DeviceAlarmRule.Trigger> deviceTriggers,RuleModel model){
|
|
|
- if(!CollectionUtil.isEmpty(deviceTriggers)){
|
|
|
+ //执行动作
|
|
|
+ List<Action> actions = rule.getActions();
|
|
|
+ //处理定时触发
|
|
|
+ {
|
|
|
+ List<RuleSceneEntity.Trigger> timerTriggers = triggers.stream()
|
|
|
+ .filter(trigger -> trigger.getTrigger() == DeviceAlarmRule.TriggerType.timer)
|
|
|
+ .collect(Collectors.toList());
|
|
|
int index = 0;
|
|
|
- for (DeviceAlarmRule.Trigger trigger : deviceTriggers) {
|
|
|
+
|
|
|
+ for (RuleSceneEntity.Trigger triggerMix : timerTriggers) {
|
|
|
+ RuleSceneEntity.DeviceTrigger trigger = triggerMix.getDevice();
|
|
|
DeviceMessage msg = trigger.getType().createMessage(trigger).orElse(null);
|
|
|
if (msg == null) {
|
|
|
throw new UnsupportedOperationException("不支持定时条件类型:" + trigger.getType());
|
|
|
}
|
|
|
- RuleNodeModel node = new RuleNodeModel();
|
|
|
- node.setId("device:" + (++index));
|
|
|
- node.setName("设备触发发送消息");
|
|
|
- node.setExecutor("device_alarm");
|
|
|
- node.setConfiguration(Collections.singletonMap("rule", trigger.getCron()));
|
|
|
+ RuleNodeModel timer = new RuleNodeModel();
|
|
|
+ timer.setId("timer:" + (++index));
|
|
|
+ timer.setName("定时发送设备消息");
|
|
|
+ timer.setExecutor("timer");
|
|
|
+ timer.setConfiguration(Collections.singletonMap("cron", triggerMix.getCron()));
|
|
|
|
|
|
DeviceMessageSendTaskExecutorProvider.Config senderConfig = new DeviceMessageSendTaskExecutorProvider.Config();
|
|
|
senderConfig.setAsync(true);
|
|
|
@@ -145,71 +72,55 @@ public class RuleSceneModelParser implements RuleModelParserStrategy {
|
|
|
senderConfig.setMessage(msg.toJson());
|
|
|
|
|
|
RuleNodeModel messageSender = new RuleNodeModel();
|
|
|
- messageSender.setId("device_alarm_action:" + (++index));
|
|
|
- messageSender.setName("设备触发发送消息");
|
|
|
+ messageSender.setId("message-sender:" + (++index));
|
|
|
+ messageSender.setName("定时发送设备消息");
|
|
|
messageSender.setExecutor("device-message-sender");
|
|
|
messageSender.setConfiguration(FastBeanCopier.copy(senderConfig, new HashMap<>()));
|
|
|
|
|
|
RuleLink link = new RuleLink();
|
|
|
- link.setId(node.getId().concat(":").concat(messageSender.getId()));
|
|
|
+ link.setId(timer.getId().concat(":").concat(messageSender.getId()));
|
|
|
link.setName("执行动作:" + index);
|
|
|
- link.setSource(node);
|
|
|
+ link.setSource(timer);
|
|
|
link.setTarget(messageSender);
|
|
|
- node.getOutputs().add(link);
|
|
|
+ timer.getOutputs().add(link);
|
|
|
messageSender.getInputs().add(link);
|
|
|
- model.getNodes().add(node);
|
|
|
+ model.getNodes().add(timer);
|
|
|
model.getNodes().add(messageSender);
|
|
|
}
|
|
|
}
|
|
|
- }
|
|
|
-
|
|
|
|
|
|
- /**
|
|
|
- * 产品触发
|
|
|
- */
|
|
|
- private void handlerProductTrigger(List<DeviceAlarmRule.Trigger> productTriggers,RuleModel model){
|
|
|
- if(!CollectionUtil.isEmpty(productTriggers)){
|
|
|
- if(!CollectionUtil.isEmpty(productTriggers)){
|
|
|
- int index = 0;
|
|
|
- for (DeviceAlarmRule.Trigger trigger : productTriggers) {
|
|
|
- DeviceMessage msg = trigger.getType().createMessage(trigger).orElse(null);
|
|
|
- if (msg == null) {
|
|
|
- throw new UnsupportedOperationException("不支持定时条件类型:" + trigger.getType());
|
|
|
- }
|
|
|
- RuleNodeModel node = new RuleNodeModel();
|
|
|
- node.setId("device:" + (++index));
|
|
|
- node.setName("产品触发发送消息");
|
|
|
- node.setExecutor("device_alarm");
|
|
|
- node.setConfiguration(Collections.singletonMap("rule", trigger.getCron()));
|
|
|
|
|
|
- DeviceMessageSendTaskExecutorProvider.Config senderConfig = new DeviceMessageSendTaskExecutorProvider.Config();
|
|
|
- senderConfig.setAsync(true);
|
|
|
- senderConfig.setDeviceId(trigger.getDeviceId());
|
|
|
- senderConfig.setProductId(trigger.getProductId());
|
|
|
- senderConfig.setMessage(msg.toJson());
|
|
|
|
|
|
- RuleNodeModel messageSender = new RuleNodeModel();
|
|
|
- messageSender.setId("device_alarm_action:" + (++index));
|
|
|
- messageSender.setName("设备触发发送消息");
|
|
|
- messageSender.setExecutor("device-message-sender");
|
|
|
- messageSender.setConfiguration(FastBeanCopier.copy(senderConfig, new HashMap<>()));
|
|
|
+ RuleNodeModel conditionNode = new RuleNodeModel();
|
|
|
+ conditionNode.setId("conditions");
|
|
|
+ conditionNode.setName("联动条件");
|
|
|
+ conditionNode.setExecutor("rule_scene");
|
|
|
+ conditionNode.addConfiguration("rule", rule);
|
|
|
+ model.getNodes().add(conditionNode);
|
|
|
|
|
|
- RuleLink link = new RuleLink();
|
|
|
- link.setId(node.getId().concat(":").concat(messageSender.getId()));
|
|
|
- link.setName("执行动作:" + index);
|
|
|
- link.setSource(node);
|
|
|
- link.setTarget(messageSender);
|
|
|
- node.getOutputs().add(link);
|
|
|
- messageSender.getInputs().add(link);
|
|
|
- model.getNodes().add(node);
|
|
|
- model.getNodes().add(messageSender);
|
|
|
+ if (CollectionUtils.isNotEmpty(actions)) {
|
|
|
+ int index = 0;
|
|
|
+ for (Action operation : actions) {
|
|
|
+ if (!StringUtils.hasText(operation.getExecutor())) {
|
|
|
+ continue;
|
|
|
}
|
|
|
+ index++;
|
|
|
+ RuleNodeModel action = new RuleNodeModel();
|
|
|
+ action.setId("device-message-sender:" + index);
|
|
|
+ action.setName("执行动作:" + index);
|
|
|
+ action.setExecutor(operation.getExecutor());
|
|
|
+ action.setConfiguration(operation.getConfiguration());
|
|
|
+
|
|
|
+ RuleLink link = new RuleLink();
|
|
|
+ link.setId(action.getId().concat(":").concat(conditionNode.getId()));
|
|
|
+ link.setName("执行动作:" + index);
|
|
|
+ link.setSource(conditionNode);
|
|
|
+ link.setTarget(action);
|
|
|
+ model.getNodes().add(action);
|
|
|
+ action.getInputs().add(link);
|
|
|
+ conditionNode.getOutputs().add(link);
|
|
|
}
|
|
|
}
|
|
|
- }
|
|
|
-
|
|
|
-
|
|
|
- private void handlerTrigger(){
|
|
|
-
|
|
|
+ return model;
|
|
|
}
|
|
|
}
|