Преглед на файлове

add webhook 通知配置

18339543638 преди 4 години
родител
ревизия
feed5000ff

+ 4 - 1
jetlinks-manager/rule-engine-manager/src/main/java/org/jetlinks/community/rule/engine/device/DeviceAlarmRule.java

@@ -181,7 +181,10 @@ public class DeviceAlarmRule implements Serializable {
         timer(Arrays.asList(
             MessageType.properties,
             MessageType.function
-        ));
+        )),
+        product(Arrays.asList(
+            MessageType.values()
+        )),;
 
         final List<MessageType> supportMessageTypes;
 

+ 101 - 7
jetlinks-manager/rule-engine-manager/src/main/java/org/jetlinks/community/rule/engine/model/RuleSceneModelParser.java

@@ -1,12 +1,15 @@
 package org.jetlinks.community.rule.engine.model;
 
+import cn.hutool.core.collection.CollectionUtil;
 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;
@@ -29,6 +32,7 @@ import java.util.stream.Collectors;
 @Component
 public class RuleSceneModelParser implements RuleModelParserStrategy {
     public static String format = "rule_scene";
+
     @Override
     public String getFormat() {
         return format;
@@ -36,11 +40,12 @@ public class RuleSceneModelParser implements RuleModelParserStrategy {
 
     @Override
     public RuleModel parse(String modelDefineString) {
-        RuleSceneEntity rule= JSONUtil.toBean(modelDefineString,RuleSceneEntity.class);
+        DeviceAlarmRule rule= JSONUtil.toBean(modelDefineString, DeviceAlarmRule.class);
         RuleModel model = new RuleModel();
         model.setId(format+":"+rule.getId());
         model.setName(rule.getName());
         List<DeviceAlarmRule.Trigger> triggers = rule.getTriggers();
+        //执行动作
         List<Action> actions = rule.getActions();
         //处理定时触发
         {
@@ -52,10 +57,6 @@ public class RuleSceneModelParser implements RuleModelParserStrategy {
                 DeviceMessage msg = trigger.getType().createMessage(trigger).orElse(null);
                 if (msg == null) {
                     throw new UnsupportedOperationException("不支持定时条件类型:" + trigger.getType());
-                }
-                if (DeviceAlarmRule.TriggerType.timer.equals(trigger.getTrigger())) {
-
-
                 }
                 RuleNodeModel timer = new RuleNodeModel();
                 timer.setId("timer:" + (++index));
@@ -86,12 +87,12 @@ public class RuleSceneModelParser implements RuleModelParserStrategy {
                 model.getNodes().add(messageSender);
             }
         }
-
         RuleNodeModel conditionNode = new RuleNodeModel();
         conditionNode.setId("conditions");
         conditionNode.setName("预警条件");
         conditionNode.setExecutor("device-message-sender");
-//        conditionNode.setConfiguration(Collections.singletonMap("rule", rule.getAlarmRule()));
+        conditionNode.addConfiguration("rule", rule.getTriggers());
+//        conditionNode.setConfiguration(Collections.singletonMap("rule", rule.getTriggers()));
         model.getNodes().add(conditionNode);
         if (CollectionUtils.isNotEmpty(actions)) {
             int index = 0;
@@ -118,4 +119,97 @@ public class RuleSceneModelParser implements RuleModelParserStrategy {
         }
         return model;
     }
+
+
+    /**
+     * 设备触发
+     */
+    private void handlerDeviceTrigger(List<DeviceAlarmRule.Trigger> deviceTriggers,RuleModel model){
+        if(!CollectionUtil.isEmpty(deviceTriggers)){
+            int index = 0;
+            for (DeviceAlarmRule.Trigger trigger : deviceTriggers) {
+                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<>()));
+
+                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);
+            }
+        }
+    }
+
+
+    /**
+     * 产品触发
+     */
+    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<>()));
+
+                    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);
+                }
+            }
+        }
+    }
+
+
+    private void handlerTrigger(){
+
+    }
 }

+ 1 - 1
jetlinks-manager/rule-engine-manager/src/main/java/org/jetlinks/community/rule/engine/web/RuleInstanceController.java

@@ -32,7 +32,7 @@ import reactor.core.publisher.Flux;
 import reactor.core.publisher.Mono;
 
 @RestController
-@RequestMapping("rule-engine/instance")
+@RequestMapping({"rule-engine/instance","rule-engine/scene"})
 @Resource(id = "rule-instance", name = "规则引擎-实例")
 @Tag(name = "规则实例")
 public class RuleInstanceController implements ReactiveServiceCrudController<RuleInstanceEntity, String> {