Browse Source

启动服务时自动启动场景

ayan 2 years ago
parent
commit
29bc67e3a4

+ 19 - 1
jetlinks-manager/rule-engine-manager/src/main/java/org/jetlinks/community/rule/engine/service/SceneService.java

@@ -1,6 +1,7 @@
 package org.jetlinks.community.rule.engine.service;
 
 import lombok.AllArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
 import org.hswebframework.web.crud.events.EntityCreatedEvent;
 import org.hswebframework.web.crud.events.EntityDeletedEvent;
 import org.hswebframework.web.crud.events.EntityModifyEvent;
@@ -13,6 +14,7 @@ import org.jetlinks.community.rule.engine.scene.SceneRule;
 import org.jetlinks.community.rule.engine.web.request.SceneExecuteRequest;
 import org.jetlinks.rule.engine.api.RuleData;
 import org.jetlinks.rule.engine.api.RuleEngine;
+import org.springframework.boot.CommandLineRunner;
 import org.springframework.context.event.EventListener;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
@@ -27,7 +29,8 @@ import java.util.Map;
 
 @Service
 @AllArgsConstructor
-public class SceneService extends GenericReactiveCrudService<SceneEntity, String> {
+@Slf4j
+public class SceneService extends GenericReactiveCrudService<SceneEntity, String> implements CommandLineRunner {
 
     private final RuleEngine ruleEngine;
 
@@ -164,4 +167,19 @@ public class SceneService extends GenericReactiveCrudService<SceneEntity, String
         );
     }
 
+    @Override
+    public void run(String... args) {
+        createQuery()
+            .where()
+            .is(SceneEntity::getState, RuleInstanceState.started)
+            .fetch()
+            .flatMap(e -> Mono
+                .defer(() -> ruleEngine.startRule(e.getId(), e.toRule().getModel()).then())
+                .onErrorResume(err -> {
+                    log.warn("启动场景[{}]失败", e.getName(), err);
+                    return Mono.empty();
+                }))
+            .subscribe();
+    }
+
 }