Selaa lähdekoodia

规则监听问题修复

xiwa 3 vuotta sitten
vanhempi
commit
edde8b16a6

+ 1 - 1
dao/src/main/java/cc/iotkit/dao/ThingModelMessageDao.java

@@ -35,7 +35,7 @@ public class ThingModelMessageDao {
             builder.must(QueryBuilders.matchPhraseQuery("identifier", identifier));
         }
         NativeSearchQuery query = new NativeSearchQueryBuilder().withQuery(builder)
-                .withPageable(PageRequest.of(page, size, Sort.by(Sort.Order.desc("time"))))
+                .withPageable(PageRequest.of(page-1, size, Sort.by(Sort.Order.desc("time"))))
                 .build();
         SearchHits<ThingModelMessage> result = template.search(query, ThingModelMessage.class);
         return new Paging<>(result.getTotalHits(), result.getSearchHits().stream()

+ 3 - 2
dao/src/main/java/cc/iotkit/dao/config/ElasticsearchConfiguration.java

@@ -47,10 +47,11 @@ public class DeviceCondition {
             if ("*".equals(identifier)) {
                 return true;
             }
-            //任意匹配
-            if ("*".equals(comparator)) {
+            //存在参数,值任意匹配
+            if (parameter.containsKey(identifier) && "*".equals(comparator)) {
                 return true;
             }
+
             Object left = parameter.get(identifier);
             if (left == null) {
                 return false;

+ 15 - 0
rule-engine/src/main/java/cc/iotkit/ruleengine/listener/DeviceListener.java

@@ -26,7 +26,22 @@ public class DeviceListener implements Listener<DeviceCondition> {
     public boolean execute(ThingModelMessage message) {
         String identifier = message.getIdentifier();
         Map<String, Object> mapData = message.dataToMap();
+        String pk = message.getProductKey();
+        String dn = message.getDeviceName();
         for (DeviceCondition condition : this.conditions) {
+            String condPkDn = condition.getDevice();
+            String[] pkAndDn = condPkDn.split("/");
+            String condPk = pkAndDn[0];
+            String condDn = pkAndDn[1];
+            //判断产品是否匹配
+            if (!pk.equals(condPk)) {
+                continue;
+            }
+            //判断设备是否匹配
+            if (!"#".equals(condDn) && !dn.equals(condDn)) {
+                continue;
+            }
+
             if (condition.matches(message.getType(), identifier, mapData)) {
                 return true;
             }

+ 4 - 0
rule-engine/src/main/java/cc/iotkit/ruleengine/rule/RuleManager.java

@@ -59,6 +59,10 @@ public class RuleManager {
                     1000, Sort.by(Sort.Order.desc("createAt"))));
             rules.get().forEach(rule -> {
                 try {
+                    //不添加停止的规则
+                    if (RuleInfo.STATE_STOPPED.equals(rule.getState())) {
+                        return;
+                    }
                     log.info("got rule {} to init", rule.getId());
                     add(rule);
                 } catch (Throwable e) {

+ 0 - 0
standalone-package/pom.xml