Browse Source

fixed RuleScene

18339543638 4 years ago
parent
commit
c8b78440ce

+ 11 - 6
jetlinks-manager/rule-engine-manager/src/main/java/org/jetlinks/community/rule/engine/entity/RuleSceneEntity.java

@@ -10,17 +10,15 @@ import org.hswebframework.ezorm.rdb.mapping.annotation.EnumCodec;
 import org.hswebframework.ezorm.rdb.mapping.annotation.JsonCodec;
 import org.hswebframework.web.api.crud.entity.GenericEntity;
 import org.hswebframework.web.api.crud.entity.RecordCreationEntity;
-import org.hswebframework.web.api.crud.entity.RecordModifierEntity;
 import org.hswebframework.web.validator.CreateGroup;
 import org.jetlinks.community.rule.engine.device.DeviceAlarmRule;
-import org.jetlinks.community.rule.engine.enums.AlarmState;
 import org.jetlinks.community.rule.engine.enums.RuleSceneState;
 import org.jetlinks.community.rule.engine.model.Action;
-
 import javax.persistence.Column;
 import javax.persistence.GeneratedValue;
 import javax.persistence.Table;
 import javax.validation.constraints.Pattern;
+import java.io.Serializable;
 import java.sql.JDBCType;
 import java.util.*;
 /**
@@ -64,15 +62,15 @@ public class RuleSceneEntity  extends GenericEntity<String> implements RecordCre
 
     @Column(nullable = false)
     @JsonCodec
-    @ColumnType(jdbcType = JDBCType.CLOB, javaType = List.class)
+    @ColumnType(jdbcType = JDBCType.CLOB, javaType = String.class)
     @Schema(description = "执行行动")
     private List<Action> actions;
 
     @Column(nullable = false)
     @JsonCodec
-    @ColumnType(jdbcType = JDBCType.CLOB, javaType = List.class)
+    @ColumnType(jdbcType = JDBCType.CLOB, javaType = String.class)
     @Schema(description = "触发器")
-    private List<DeviceAlarmRule.Trigger> triggers;
+    private List<Trigger> triggers;
 
     @Column(name = "create_time")
     @Schema(description = "创建时间")
@@ -81,4 +79,11 @@ public class RuleSceneEntity  extends GenericEntity<String> implements RecordCre
     @Column(name = "creator_id")
     @Schema(description = "创建者ID")
     private String creatorId;
+
+
+    @Data
+    public static class Trigger implements Serializable{
+        private DeviceAlarmRule.Trigger device;
+        private DeviceAlarmRule.TriggerType trigger;
+    }
 }

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

@@ -40,83 +40,83 @@ public class RuleSceneModelParser implements RuleModelParserStrategy {
 
     @Override
     public RuleModel parse(String modelDefineString) {
-        DeviceAlarmRule rule= JSONUtil.toBean(modelDefineString, DeviceAlarmRule.class);
+        RuleSceneEntity rule= JSONUtil.toBean(modelDefineString, RuleSceneEntity.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();
-        //处理定时触发
-        {
-            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);
-            }
-        }
+        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;
     }