Преглед изворни кода

时序数据接口es实现

xiwa пре 2 година
родитељ
комит
9726ca3903
82 измењених фајлова са 900 додато и 635 уклоњено
  1. 1 0
      .gitignore
  2. 0 18
      data/init/deviceInfo.json
  3. BIN
      data/iotkit.mv.db
  4. 5 5
      iot-auth-server/pom.xml
  5. 5 0
      iot-components/iot-component-base/pom.xml
  6. 0 5
      iot-components/iot-component-server/pom.xml
  7. 0 3
      iot-components/iot-component-server/src/main/java/cc/iotkit/comps/service/DevicePropertyConsumer.java
  8. 0 6
      iot-components/iot-emqx-component/dependency-reduced-pom.xml
  9. 0 5
      iot-components/iot-emqx-component/pom.xml
  10. 9 0
      iot-components/iot-emqx-component/src/main/java/cc/iotkit/comp/emqx/IScripter.java
  11. 9 0
      iot-components/iot-emqx-component/src/main/java/cc/iotkit/comp/emqx/LuaScripter.java
  12. 1 3
      iot-components/iot-emqx-component/src/main/java/cc/iotkit/comp/emqx/TransparentConverter.java
  13. 9 0
      iot-components/iot-emqx-component/src/main/java/cc/iotkit/comp/emqx/TransparentMsg.java
  14. 0 99
      iot-components/iot-mqtt-component/dependency-reduced-pom.xml
  15. 0 5
      iot-components/iot-mqtt-component/pom.xml
  16. 0 1
      iot-components/iot-mqtt-component/src/main/java/cc/iotkit/comp/mqtt/TransparentConverter.java
  17. BIN
      iot-data/iot-dao/.DS_Store
  18. 0 43
      iot-data/iot-dao/pom.xml
  19. 0 121
      iot-data/iot-dao/src/main/java/cc/iotkit/dao/DeviceDao.java
  20. 0 34
      iot-data/iot-dao/src/main/java/cc/iotkit/dao/SpaceCache.java
  21. 9 0
      iot-data/iot-data-cache/src/main/java/cc/iotkit/data/cache/CategoryCacheEvict.java
  22. 9 0
      iot-data/iot-data-cache/src/main/java/cc/iotkit/data/cache/DeviceInfoCachePut.java
  23. 11 0
      iot-data/iot-data-cache/src/main/java/cc/iotkit/data/cache/OauthClientCacheEvict.java
  24. 8 2
      iot-data/iot-data-cache/src/main/java/cc/iotkit/data/service/CategoryDataCache.java
  25. 9 0
      iot-data/iot-data-cache/src/main/java/cc/iotkit/data/service/OauthClientDataCache.java
  26. 9 0
      iot-data/iot-data-cache/src/main/java/cc/iotkit/data/service/ProductDataCache.java
  27. 0 2
      iot-data/iot-data-service/src/main/java/cc/iotkit/data/IRuleInfoData.java
  28. 32 0
      iot-data/iot-es-temporal-service/pom.xml
  29. 16 0
      iot-data/iot-es-temporal-service/src/main/java/cc/iotkit/temporal/es/config/ElasticsearchConfiguration.java
  30. 23 0
      iot-data/iot-es-temporal-service/src/main/java/cc/iotkit/temporal/es/dao/RuleLogRepository.java
  31. 23 0
      iot-data/iot-es-temporal-service/src/main/java/cc/iotkit/temporal/es/dao/TaskLogRepository.java
  32. 4 6
      iot-data/iot-es-temporal-service/src/main/java/cc/iotkit/temporal/es/dao/ThingModelMessageRepository.java
  33. 21 0
      iot-data/iot-es-temporal-service/src/main/java/cc/iotkit/temporal/es/dao/VirtualDeviceLogRepository.java
  34. 23 0
      iot-data/iot-es-temporal-service/src/main/java/cc/iotkit/temporal/es/document/DevicePropertyMapper.java
  35. 10 13
      iot-data/iot-es-temporal-service/src/main/java/cc/iotkit/temporal/es/document/DocDeviceProperty.java
  36. 40 0
      iot-data/iot-es-temporal-service/src/main/java/cc/iotkit/temporal/es/document/DocRuleLog.java
  37. 11 15
      iot-data/iot-es-temporal-service/src/main/java/cc/iotkit/temporal/es/document/DocTaskLog.java
  38. 53 0
      iot-data/iot-es-temporal-service/src/main/java/cc/iotkit/temporal/es/document/DocThingModelMessage.java
  39. 47 0
      iot-data/iot-es-temporal-service/src/main/java/cc/iotkit/temporal/es/document/DocVirtualDeviceLog.java
  40. 9 9
      iot-data/iot-es-temporal-service/src/main/java/cc/iotkit/temporal/es/document/RuleLogMapper.java
  41. 23 0
      iot-data/iot-es-temporal-service/src/main/java/cc/iotkit/temporal/es/document/TaskLogMapper.java
  42. 23 0
      iot-data/iot-es-temporal-service/src/main/java/cc/iotkit/temporal/es/document/ThingModelMessageMapper.java
  43. 23 0
      iot-data/iot-es-temporal-service/src/main/java/cc/iotkit/temporal/es/document/VirtualDeviceLogMapper.java
  44. 14 4
      iot-data/iot-es-temporal-service/src/main/java/cc/iotkit/temporal/es/service/DevicePropertyDataImpl.java
  45. 27 3
      iot-data/iot-es-temporal-service/src/main/java/cc/iotkit/temporal/es/service/RuleLogDataImpl.java
  46. 27 3
      iot-data/iot-es-temporal-service/src/main/java/cc/iotkit/temporal/es/service/TaskLogDataImpl.java
  47. 53 6
      iot-data/iot-es-temporal-service/src/main/java/cc/iotkit/temporal/es/service/ThingModelMessageDataImpl.java
  48. 28 2
      iot-data/iot-es-temporal-service/src/main/java/cc/iotkit/temporal/es/service/VirtualDeviceLogDataImpl.java
  49. 0 5
      iot-data/iot-model/pom.xml
  50. 0 7
      iot-data/iot-model/src/main/java/cc/iotkit/model/device/VirtualDeviceLog.java
  51. 0 7
      iot-data/iot-model/src/main/java/cc/iotkit/model/rule/RuleLog.java
  52. 0 7
      iot-data/iot-model/src/main/java/cc/iotkit/model/rule/TaskLog.java
  53. 7 7
      iot-data/iot-rdb-data-service/pom.xml
  54. 9 0
      iot-data/iot-rdb-data-service/src/main/java/cc/iotkit/data/dao/CategoryRepository.java
  55. 9 0
      iot-data/iot-rdb-data-service/src/main/java/cc/iotkit/data/dao/DeviceConfigRepository.java
  56. 9 0
      iot-data/iot-rdb-data-service/src/main/java/cc/iotkit/data/dao/DeviceGroupRepository.java
  57. 9 0
      iot-data/iot-rdb-data-service/src/main/java/cc/iotkit/data/dao/DeviceTagRepository.java
  58. 9 0
      iot-data/iot-rdb-data-service/src/main/java/cc/iotkit/data/dao/OauthClientRepository.java
  59. 9 0
      iot-data/iot-rdb-data-service/src/main/java/cc/iotkit/data/dao/ProtocolConverterRepository.java
  60. 9 0
      iot-data/iot-rdb-data-service/src/main/java/cc/iotkit/data/dao/SpaceRepository.java
  61. 9 0
      iot-data/iot-rdb-data-service/src/main/java/cc/iotkit/data/model/DeviceIdGroup.java
  62. 9 0
      iot-data/iot-rdb-data-service/src/main/java/cc/iotkit/data/model/OauthClientMapper.java
  63. 9 0
      iot-data/iot-rdb-data-service/src/main/java/cc/iotkit/data/model/RuleInfoMapper.java
  64. 9 1
      iot-data/iot-rdb-data-service/src/main/java/cc/iotkit/data/model/SpaceMapper.java
  65. 9 0
      iot-data/iot-rdb-data-service/src/main/java/cc/iotkit/data/model/TbOauthClient.java
  66. 9 0
      iot-data/iot-rdb-data-service/src/main/java/cc/iotkit/data/model/TbProduct.java
  67. 9 0
      iot-data/iot-rdb-data-service/src/main/java/cc/iotkit/data/model/TbProtocolConverter.java
  68. 9 0
      iot-data/iot-rdb-data-service/src/main/java/cc/iotkit/data/model/TbVirtualDeviceMapping.java
  69. 49 5
      iot-data/iot-rdb-data-service/src/main/java/cc/iotkit/data/service/DeviceInfoDataImpl.java
  70. 0 69
      iot-data/iot-rdb-data-service/src/main/resources/ddl.sql
  71. 9 0
      iot-data/iot-temporal-service/src/main/java/cc/iotkit/temporal/IThingModelMessageData.java
  72. 0 1
      iot-data/pom.xml
  73. 0 5
      iot-rule-engine/pom.xml
  74. 0 5
      iot-standalone/pom.xml
  75. 4 8
      iot-standalone/src/main/java/cc/iotkit/manager/config/EmbeddedElasticSearchConfig.java
  76. 4 1
      iot-standalone/src/main/java/cc/iotkit/manager/controller/DeviceController.java
  77. 0 3
      iot-standalone/src/main/java/cc/iotkit/manager/service/ExampleDataInit.java
  78. 34 34
      iot-standalone/src/main/resources/application-dev.yml
  79. 33 33
      iot-standalone/src/main/resources/application.yml
  80. 1 1
      iot-test-tool/iot-test-mqtt/src/main/java/cc/iotkit/test/mqtt/performance/ReportTest.java
  81. 0 5
      iot-virtual-device/pom.xml
  82. 0 18
      pom.xml

+ 1 - 0
.gitignore

@@ -26,3 +26,4 @@ target
 log
 data/elasticsearch
 .init
+*.db

+ 0 - 18
data/init/deviceInfo.json

@@ -1293,24 +1293,6 @@
     },
     "createAt": 1650171261224
   },
-  {
-    "id": "164951142660200010000000000000034",
-    "deviceId": "164951142660200010000000000000034",
-    "productKey": "KdJYpTp5ywNhmrmC",
-    "deviceName": "001",
-    "uid": "fa1c5eaa-de6e-48b6-805e-8f091c7bb831",
-    "state": {
-      "online": false
-    },
-    "createAt": 1649511426602,
-    "tag": {
-      "aligenie": {
-        "id": "aligenie",
-        "name": "天猫精灵接入",
-        "value": "是"
-      }
-    }
-  },
   {
     "id": "164785263238900cefafcfeeab0000125",
     "deviceId": "164785263238900cefafcfeeab0000125",

BIN
data/iotkit.mv.db


+ 5 - 5
iot-auth-server/pom.xml

@@ -43,17 +43,17 @@
             <artifactId>lombok</artifactId>
         </dependency>
 
-        <dependency>
-            <groupId>cc.iotkit</groupId>
-            <artifactId>iot-dao</artifactId>
-        </dependency>
-
         <dependency>
             <groupId>junit</groupId>
             <artifactId>junit</artifactId>
             <scope>test</scope>
         </dependency>
 
+        <dependency>
+            <groupId>cc.iotkit</groupId>
+            <artifactId>iot-data-service</artifactId>
+        </dependency>
+
     </dependencies>
 
 </project>

+ 5 - 0
iot-components/iot-component-base/pom.xml

@@ -18,6 +18,11 @@
 
     <dependencies>
 
+        <dependency>
+            <groupId>org.springframework</groupId>
+            <artifactId>spring-context</artifactId>
+        </dependency>
+
         <dependency>
             <groupId>org.projectlombok</groupId>
             <artifactId>lombok</artifactId>

+ 0 - 5
iot-components/iot-component-server/pom.xml

@@ -77,11 +77,6 @@
             <artifactId>iot-model</artifactId>
         </dependency>
 
-        <dependency>
-            <groupId>cc.iotkit</groupId>
-            <artifactId>iot-dao</artifactId>
-        </dependency>
-
         <dependency>
             <groupId>cc.iotkit</groupId>
             <artifactId>iot-component-base</artifactId>

+ 0 - 3
iot-components/iot-component-server/src/main/java/cc/iotkit/comps/service/DevicePropertyConsumer.java

@@ -11,7 +11,6 @@ package cc.iotkit.comps.service;
 
 import cc.iotkit.common.Constants;
 import cc.iotkit.common.utils.JsonUtil;
-import cc.iotkit.dao.DeviceDao;
 import cc.iotkit.data.IDeviceInfoData;
 import cc.iotkit.model.device.message.DeviceProperty;
 import cc.iotkit.model.device.message.ThingModelMessage;
@@ -38,8 +37,6 @@ public class DevicePropertyConsumer implements ConsumerHandler<ThingModelMessage
     @Autowired
     private MqConsumer<ThingModelMessage> thingModelMessageMqConsumer;
     @Autowired
-    private DeviceDao deviceDao;
-    @Autowired
     private IDevicePropertyData devicePropertyData;
     @Autowired
     @Qualifier("deviceInfoDataCache")

+ 0 - 6
iot-components/iot-emqx-component/dependency-reduced-pom.xml

@@ -85,12 +85,6 @@
       <version>0.4.0-SNAPSHOT</version>
       <scope>compile</scope>
     </dependency>
-    <dependency>
-      <groupId>cc.iotkit</groupId>
-      <artifactId>iot-dao</artifactId>
-      <version>0.4.0-SNAPSHOT</version>
-      <scope>compile</scope>
-    </dependency>
     <dependency>
       <groupId>cc.iotkit</groupId>
       <artifactId>iot-common</artifactId>

+ 0 - 5
iot-components/iot-emqx-component/pom.xml

@@ -38,11 +38,6 @@
             <artifactId>iot-model</artifactId>
         </dependency>
 
-        <dependency>
-            <groupId>cc.iotkit</groupId>
-            <artifactId>iot-dao</artifactId>
-        </dependency>
-
         <dependency>
             <groupId>cc.iotkit</groupId>
             <artifactId>iot-common</artifactId>

+ 9 - 0
iot-components/iot-emqx-component/src/main/java/cc/iotkit/comp/emqx/IScripter.java

@@ -1,3 +1,12 @@
+/*
+ * +----------------------------------------------------------------------
+ * | Copyright (c) 奇特物联 2021-2022 All rights reserved.
+ * +----------------------------------------------------------------------
+ * | Licensed 未经许可不能去掉「奇特物联」相关版权
+ * +----------------------------------------------------------------------
+ * | Author: xw2sy@163.com
+ * +----------------------------------------------------------------------
+ */
 package cc.iotkit.comp.emqx;
 
 import cc.iotkit.common.thing.ThingService;

+ 9 - 0
iot-components/iot-emqx-component/src/main/java/cc/iotkit/comp/emqx/LuaScripter.java

@@ -1,3 +1,12 @@
+/*
+ * +----------------------------------------------------------------------
+ * | Copyright (c) 奇特物联 2021-2022 All rights reserved.
+ * +----------------------------------------------------------------------
+ * | Licensed 未经许可不能去掉「奇特物联」相关版权
+ * +----------------------------------------------------------------------
+ * | Author: xw2sy@163.com
+ * +----------------------------------------------------------------------
+ */
 package cc.iotkit.comp.emqx;
 
 import cc.iotkit.common.thing.ThingService;

+ 1 - 3
iot-components/iot-emqx-component/src/main/java/cc/iotkit/comp/emqx/TransparentConverter.java

@@ -10,13 +10,11 @@
 package cc.iotkit.comp.emqx;
 
 
+import cc.iotkit.common.thing.ThingService;
 import cc.iotkit.comp.utils.SpringUtils;
 import cc.iotkit.converter.Device;
 import cc.iotkit.converter.DeviceMessage;
-import cc.iotkit.common.thing.ThingService;
-import cc.iotkit.dao.ProductCache;
 import cc.iotkit.data.IDeviceInfoData;
-import cc.iotkit.data.IProductData;
 import cc.iotkit.data.IProductModelData;
 import cc.iotkit.model.device.DeviceInfo;
 import cc.iotkit.model.device.message.ThingModelMessage;

+ 9 - 0
iot-components/iot-emqx-component/src/main/java/cc/iotkit/comp/emqx/TransparentMsg.java

@@ -1,3 +1,12 @@
+/*
+ * +----------------------------------------------------------------------
+ * | Copyright (c) 奇特物联 2021-2022 All rights reserved.
+ * +----------------------------------------------------------------------
+ * | Licensed 未经许可不能去掉「奇特物联」相关版权
+ * +----------------------------------------------------------------------
+ * | Author: xw2sy@163.com
+ * +----------------------------------------------------------------------
+ */
 package cc.iotkit.comp.emqx;
 
 import lombok.Data;

+ 0 - 99
iot-components/iot-mqtt-component/dependency-reduced-pom.xml

@@ -1,99 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
-  <parent>
-    <artifactId>iot-components</artifactId>
-    <groupId>cc.iotkit</groupId>
-    <version>0.4.0-SNAPSHOT</version>
-  </parent>
-  <modelVersion>4.0.0</modelVersion>
-  <artifactId>iot-mqtt-component</artifactId>
-  <build>
-    <plugins>
-      <plugin>
-        <artifactId>maven-shade-plugin</artifactId>
-        <version>3.2.4</version>
-        <executions>
-          <execution>
-            <phase>package</phase>
-            <goals>
-              <goal>shade</goal>
-            </goals>
-          </execution>
-        </executions>
-        <configuration>
-          <artifactSet>
-            <includes>
-              <include>io.vertx:vertx-core</include>
-              <include>io.vertx:vertx-mqtt</include>
-              <include>io.netty:netty-codec-mqtt</include>
-              <include>org.luaj:luaj-jse</include>
-            </includes>
-          </artifactSet>
-        </configuration>
-      </plugin>
-      <plugin>
-        <artifactId>maven-compiler-plugin</artifactId>
-        <configuration>
-          <source>11</source>
-          <target>11</target>
-        </configuration>
-      </plugin>
-    </plugins>
-  </build>
-  <dependencies>
-    <dependency>
-      <groupId>io.vertx</groupId>
-      <artifactId>vertx-core</artifactId>
-      <version>4.2.2</version>
-      <scope>provided</scope>
-    </dependency>
-    <dependency>
-      <groupId>io.vertx</groupId>
-      <artifactId>vertx-mqtt</artifactId>
-      <version>4.2.2</version>
-      <scope>provided</scope>
-    </dependency>
-    <dependency>
-      <groupId>io.netty</groupId>
-      <artifactId>netty-codec-mqtt</artifactId>
-      <version>4.1.72.Final</version>
-      <scope>provided</scope>
-    </dependency>
-    <dependency>
-      <groupId>org.projectlombok</groupId>
-      <artifactId>lombok</artifactId>
-      <version>1.18.22</version>
-      <scope>compile</scope>
-    </dependency>
-    <dependency>
-      <groupId>org.slf4j</groupId>
-      <artifactId>slf4j-api</artifactId>
-      <version>1.7.32</version>
-      <scope>compile</scope>
-    </dependency>
-    <dependency>
-      <groupId>org.luaj</groupId>
-      <artifactId>luaj-jse</artifactId>
-      <version>3.0.1</version>
-      <scope>provided</scope>
-    </dependency>
-    <dependency>
-      <groupId>cc.iotkit</groupId>
-      <artifactId>iot-common</artifactId>
-      <version>0.4.0-SNAPSHOT</version>
-      <scope>compile</scope>
-    </dependency>
-    <dependency>
-      <groupId>cc.iotkit</groupId>
-      <artifactId>iot-component-base</artifactId>
-      <version>0.4.0-SNAPSHOT</version>
-      <scope>compile</scope>
-    </dependency>
-    <dependency>
-      <groupId>cc.iotkit</groupId>
-      <artifactId>iot-dao</artifactId>
-      <version>0.4.0-SNAPSHOT</version>
-      <scope>compile</scope>
-    </dependency>
-  </dependencies>
-</project>

+ 0 - 5
iot-components/iot-mqtt-component/pom.xml

@@ -53,11 +53,6 @@
             <artifactId>iot-component-base</artifactId>
         </dependency>
 
-        <dependency>
-            <groupId>cc.iotkit</groupId>
-            <artifactId>iot-dao</artifactId>
-        </dependency>
-
     </dependencies>
 
     <build>

+ 0 - 1
iot-components/iot-mqtt-component/src/main/java/cc/iotkit/comp/mqtt/TransparentConverter.java

@@ -14,7 +14,6 @@ import cc.iotkit.comp.utils.SpringUtils;
 import cc.iotkit.converter.Device;
 import cc.iotkit.converter.DeviceMessage;
 import cc.iotkit.common.thing.ThingService;
-import cc.iotkit.dao.ProductCache;
 import cc.iotkit.data.IDeviceInfoData;
 import cc.iotkit.data.IProductModelData;
 import cc.iotkit.model.device.DeviceInfo;

BIN
iot-data/iot-dao/.DS_Store


+ 0 - 43
iot-data/iot-dao/pom.xml

@@ -1,43 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project xmlns="http://maven.apache.org/POM/4.0.0"
-         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-    <parent>
-        <artifactId>iot-data</artifactId>
-        <groupId>cc.iotkit</groupId>
-        <version>0.4.0-SNAPSHOT</version>
-    </parent>
-    <modelVersion>4.0.0</modelVersion>
-
-    <artifactId>iot-dao</artifactId>
-
-    <dependencies>
-
-        <dependency>
-            <groupId>jakarta.annotation</groupId>
-            <artifactId>jakarta.annotation-api</artifactId>
-        </dependency>
-
-        <dependency>
-            <groupId>cn.hutool</groupId>
-            <artifactId>hutool-core</artifactId>
-        </dependency>
-
-        <dependency>
-            <groupId>org.projectlombok</groupId>
-            <artifactId>lombok</artifactId>
-        </dependency>
-
-        <dependency>
-            <groupId>cc.iotkit</groupId>
-            <artifactId>iot-model</artifactId>
-        </dependency>
-
-        <dependency>
-            <groupId>cc.iotkit</groupId>
-            <artifactId>iot-data-service</artifactId>
-        </dependency>
-
-    </dependencies>
-
-</project>

+ 0 - 121
iot-data/iot-dao/src/main/java/cc/iotkit/dao/DeviceDao.java

@@ -1,121 +0,0 @@
-/*
- * +----------------------------------------------------------------------
- * | Copyright (c) 奇特物联 2021-2022 All rights reserved.
- * +----------------------------------------------------------------------
- * | Licensed 未经许可不能去掉「奇特物联」相关版权
- * +----------------------------------------------------------------------
- * | Author: xw2sy@163.com
- * +----------------------------------------------------------------------
- */
-package cc.iotkit.dao;
-
-import cc.iotkit.data.ICategoryData;
-import cc.iotkit.data.IProductData;
-import cc.iotkit.model.device.DeviceInfo;
-import cc.iotkit.model.product.Category;
-import cc.iotkit.model.product.Product;
-import cc.iotkit.model.stats.DataItem;
-import org.apache.commons.lang3.StringUtils;
-import org.elasticsearch.index.query.BoolQueryBuilder;
-import org.elasticsearch.index.query.QueryBuilders;
-import org.elasticsearch.search.aggregations.AggregationBuilders;
-import org.elasticsearch.search.aggregations.bucket.terms.ParsedStringTerms;
-import org.elasticsearch.search.aggregations.bucket.terms.Terms;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.beans.factory.annotation.Qualifier;
-import org.springframework.data.elasticsearch.core.ElasticsearchRestTemplate;
-import org.springframework.data.elasticsearch.core.clients.elasticsearch7.ElasticsearchAggregations;
-import org.springframework.data.elasticsearch.core.query.NativeSearchQuery;
-import org.springframework.data.elasticsearch.core.query.NativeSearchQueryBuilder;
-import org.springframework.stereotype.Repository;
-
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-@Repository
-public class DeviceDao {
-
-    @Autowired
-    private ElasticsearchRestTemplate elasticsearchRestTemplate;
-
-    @Autowired
-    @Qualifier("productDataCache")
-    private IProductData productData;
-    @Autowired
-    private ICategoryData categoryData;
-
-    /**
-     * 获取按品类统计的用户设备数
-     */
-    public List<DataItem> getDeviceStatsByCategory(String uid) {
-        BoolQueryBuilder queryBuilder = QueryBuilders.boolQuery();
-        if (StringUtils.isNotBlank(uid)) {
-            queryBuilder =
-                    queryBuilder.must(QueryBuilders.termQuery("uid.keyword", uid));
-        }
-
-        //先按产品分组统计
-        NativeSearchQuery query = new NativeSearchQueryBuilder()
-                .withQuery(queryBuilder)
-                .withAggregations(
-                        AggregationBuilders.terms("countByPk").field("productKey.keyword")
-                                .size(1000)
-                                .subAggregation(AggregationBuilders.count("count").field("productKey.keyword"))
-                )
-                .build();
-
-        ElasticsearchAggregations result = (ElasticsearchAggregations) elasticsearchRestTemplate
-                .search(query, DeviceInfo.class).getAggregations();
-        ParsedStringTerms terms = result.aggregations().get("countByPk");
-        List<? extends Terms.Bucket> buckets = terms.getBuckets();
-        Map<String, Long> productCount = new HashMap<>();
-        for (Terms.Bucket bucket : buckets) {
-            productCount.put(bucket.getKeyAsString(), bucket.getDocCount());
-        }
-
-        //取用户下产品列表
-        Iterable<Product> products;
-        if (StringUtils.isNotBlank(uid)) {
-            products = productData.findByUid(uid);
-        } else {
-            products = productData.findAll();
-        }
-        Map<String, String> pkCateMap = new HashMap<>();
-        for (Product product : products) {
-            pkCateMap.put(product.getId(), product.getCategory());
-        }
-
-        //取品类列表
-        Map<String, String> cateNames = new HashMap<>();
-        for (Category category : categoryData.findAll()) {
-            cateNames.put(category.getId(), category.getName());
-        }
-
-        Map<String, Long> cateStats = new HashMap<>();
-        productCount.forEach((key, val) -> {
-            String cateName = cateNames.get(pkCateMap.get(key));
-            //按品类汇总
-            long total = cateStats.getOrDefault(cateName, 0L);
-            total += val;
-            cateStats.put(cateName, total);
-        });
-
-        List<DataItem> items = new ArrayList<>();
-        cateStats.forEach((key, val) -> {
-            items.add(new DataItem(key, val));
-        });
-
-        return items;
-    }
-
-    /**
-     * 获取按品类统计的设备数
-     */
-    public List<DataItem> getDeviceStatsByCategory() {
-        return getDeviceStatsByCategory(null);
-    }
-
-
-}

+ 0 - 34
iot-data/iot-dao/src/main/java/cc/iotkit/dao/SpaceCache.java

@@ -1,34 +0,0 @@
-package cc.iotkit.dao;
-
-import cc.iotkit.common.Constants;
-import cc.iotkit.data.ISpaceData;
-import cc.iotkit.model.space.Space;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.cache.annotation.Cacheable;
-import org.springframework.stereotype.Repository;
-
-import javax.annotation.PostConstruct;
-
-@Repository
-public class SpaceCache {
-
-    @Autowired
-    private ISpaceData spaceData;
-
-    private static SpaceCache INSTANCE;
-
-    @PostConstruct
-    public void init() {
-        INSTANCE = this;
-    }
-
-    public static SpaceCache getInstance() {
-        return INSTANCE;
-    }
-
-    @Cacheable(value = Constants.CACHE_SPACE, key = "#spaceId")
-    public Space getSpace(String spaceId) {
-        return spaceData.findById(spaceId);
-    }
-
-}

+ 9 - 0
iot-data/iot-data-cache/src/main/java/cc/iotkit/data/cache/CategoryCacheEvict.java

@@ -1,3 +1,12 @@
+/*
+ * +----------------------------------------------------------------------
+ * | Copyright (c) 奇特物联 2021-2022 All rights reserved.
+ * +----------------------------------------------------------------------
+ * | Licensed 未经许可不能去掉「奇特物联」相关版权
+ * +----------------------------------------------------------------------
+ * | Author: xw2sy@163.com
+ * +----------------------------------------------------------------------
+ */
 package cc.iotkit.data.cache;
 
 import cc.iotkit.common.Constants;

+ 9 - 0
iot-data/iot-data-cache/src/main/java/cc/iotkit/data/cache/DeviceInfoCachePut.java

@@ -1,3 +1,12 @@
+/*
+ * +----------------------------------------------------------------------
+ * | Copyright (c) 奇特物联 2021-2022 All rights reserved.
+ * +----------------------------------------------------------------------
+ * | Licensed 未经许可不能去掉「奇特物联」相关版权
+ * +----------------------------------------------------------------------
+ * | Author: xw2sy@163.com
+ * +----------------------------------------------------------------------
+ */
 package cc.iotkit.data.cache;
 
 import cc.iotkit.common.Constants;

+ 11 - 0
iot-data/iot-data-cache/src/main/java/cc/iotkit/data/cache/OauthClientCacheEvict.java

@@ -1,3 +1,12 @@
+/*
+ * +----------------------------------------------------------------------
+ * | Copyright (c) 奇特物联 2021-2022 All rights reserved.
+ * +----------------------------------------------------------------------
+ * | Licensed 未经许可不能去掉「奇特物联」相关版权
+ * +----------------------------------------------------------------------
+ * | Author: xw2sy@163.com
+ * +----------------------------------------------------------------------
+ */
 package cc.iotkit.data.config;
 
 import cc.iotkit.common.Constants;
@@ -34,6 +43,8 @@ public class CacheConfig {
                 Constants.CACHE_DEVICE_INFO, config,
                 Constants.CACHE_PRODUCT, config,
                 Constants.CACHE_OAUTH_CLIENT, config,
+                Constants.CACHE_CATEGORY, config,
+                //统计缓存5分钟
                 Constants.CACHE_DEVICE_STATS, config.entryTtl(Duration.ofMinutes(5))
         );
 

+ 8 - 2
iot-data/iot-data-cache/src/main/java/cc/iotkit/data/service/CategoryDataCache.java

@@ -86,12 +86,18 @@ public class DeviceInfoDataCache implements IDeviceInfoData, SmartInitializingSi
 
     @Override
     public void saveProperties(String deviceId, Map<String, Object> properties) {
-        redisTemplate.opsForValue().set(getPropertyCacheKey(deviceId), JsonUtil.toJsonString(properties));
+        Map<String, Object> old = getProperties(deviceId);
+        old.putAll(properties);
+        redisTemplate.opsForValue().set(getPropertyCacheKey(deviceId), JsonUtil.toJsonString(old));
     }
 
     @Override
     public Map<String, Object> getProperties(String deviceId) {
-        return JsonUtil.parse(redisTemplate.opsForValue().get(getPropertyCacheKey(deviceId)), Map.class);
+        String json = redisTemplate.opsForValue().get(getPropertyCacheKey(deviceId));
+        if (StringUtils.isBlank(json)) {
+            return new HashMap<>();
+        }
+        return JsonUtil.parse(json, Map.class);
     }
 
     @Override

+ 9 - 0
iot-data/iot-data-cache/src/main/java/cc/iotkit/data/service/OauthClientDataCache.java

@@ -1,3 +1,12 @@
+/*
+ * +----------------------------------------------------------------------
+ * | Copyright (c) 奇特物联 2021-2022 All rights reserved.
+ * +----------------------------------------------------------------------
+ * | Licensed 未经许可不能去掉「奇特物联」相关版权
+ * +----------------------------------------------------------------------
+ * | Author: xw2sy@163.com
+ * +----------------------------------------------------------------------
+ */
 package cc.iotkit.data.service;
 
 import cc.iotkit.common.Constants;

+ 9 - 0
iot-data/iot-data-cache/src/main/java/cc/iotkit/data/service/ProductDataCache.java

@@ -1,3 +1,12 @@
+/*
+ * +----------------------------------------------------------------------
+ * | Copyright (c) 奇特物联 2021-2022 All rights reserved.
+ * +----------------------------------------------------------------------
+ * | Licensed 未经许可不能去掉「奇特物联」相关版权
+ * +----------------------------------------------------------------------
+ * | Author: xw2sy@163.com
+ * +----------------------------------------------------------------------
+ */
 package cc.iotkit.data;
 
 import cc.iotkit.model.OauthClient;

+ 0 - 2
iot-data/iot-data-service/src/main/java/cc/iotkit/data/IRuleInfoData.java

@@ -2,8 +2,6 @@ package cc.iotkit.data;
 
 import cc.iotkit.model.Paging;
 import cc.iotkit.model.rule.RuleInfo;
-import org.springframework.data.domain.Page;
-import org.springframework.data.domain.Pageable;
 
 import java.util.List;
 

+ 32 - 0
iot-data/iot-es-temporal-service/pom.xml

@@ -29,6 +29,11 @@
             <artifactId>jackson-annotations</artifactId>
         </dependency>
 
+        <dependency>
+            <groupId>org.mapstruct</groupId>
+            <artifactId>mapstruct</artifactId>
+        </dependency>
+
         <dependency>
             <groupId>cc.iotkit</groupId>
             <artifactId>iot-temporal-service</artifactId>
@@ -36,4 +41,31 @@
 
     </dependencies>
 
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-compiler-plugin</artifactId>
+                <version>3.8.1</version>
+                <configuration>
+                    <source>11</source> <!-- depending on your project -->
+                    <target>11</target> <!-- depending on your project -->
+                    <annotationProcessorPaths>
+                        <path>
+                            <groupId>org.projectlombok</groupId>
+                            <artifactId>lombok</artifactId>
+                            <version>1.18.24</version>
+                        </path>
+                        <path>
+                            <groupId>org.mapstruct</groupId>
+                            <artifactId>mapstruct-processor</artifactId>
+                            <version>1.4.2.Final</version>
+                        </path>
+                        <!-- other annotation processors -->
+                    </annotationProcessorPaths>
+                </configuration>
+            </plugin>
+        </plugins>
+    </build>
+
 </project>

+ 16 - 0
iot-data/iot-es-temporal-service/src/main/java/cc/iotkit/temporal/es/config/ElasticsearchConfiguration.java

@@ -0,0 +1,16 @@
+package cc.iotkit.temporal.es.config;
+
+
+import org.springframework.context.annotation.ComponentScan;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.context.annotation.FilterType;
+import org.springframework.context.annotation.Lazy;
+import org.springframework.data.elasticsearch.repository.ElasticsearchRepository;
+import org.springframework.data.elasticsearch.repository.config.EnableElasticsearchRepositories;
+
+@Lazy
+@Configuration
+@EnableElasticsearchRepositories(basePackages = "cc.iotkit.temporal.es.dao", includeFilters =
+@ComponentScan.Filter(type = FilterType.ASSIGNABLE_TYPE, value = ElasticsearchRepository.class))
+public class ElasticsearchConfiguration {
+}

+ 23 - 0
iot-data/iot-es-temporal-service/src/main/java/cc/iotkit/temporal/es/dao/RuleLogRepository.java

@@ -0,0 +1,23 @@
+/*
+ * +----------------------------------------------------------------------
+ * | Copyright (c) 奇特物联 2021-2022 All rights reserved.
+ * +----------------------------------------------------------------------
+ * | Licensed 未经许可不能去掉「奇特物联」相关版权
+ * +----------------------------------------------------------------------
+ * | Author: xw2sy@163.com
+ * +----------------------------------------------------------------------
+ */
+package cc.iotkit.temporal.es.dao;
+
+import cc.iotkit.temporal.es.document.DocRuleLog;
+import org.springframework.data.domain.Page;
+import org.springframework.data.domain.Pageable;
+import org.springframework.data.elasticsearch.repository.ElasticsearchRepository;
+
+public interface RuleLogRepository extends ElasticsearchRepository<DocRuleLog, String> {
+
+    void deleteByRuleId(String ruleId);
+
+    Page<DocRuleLog> findByRuleId(String ruleId, Pageable pageable);
+
+}

+ 23 - 0
iot-data/iot-es-temporal-service/src/main/java/cc/iotkit/temporal/es/dao/TaskLogRepository.java

@@ -0,0 +1,23 @@
+/*
+ * +----------------------------------------------------------------------
+ * | Copyright (c) 奇特物联 2021-2022 All rights reserved.
+ * +----------------------------------------------------------------------
+ * | Licensed 未经许可不能去掉「奇特物联」相关版权
+ * +----------------------------------------------------------------------
+ * | Author: xw2sy@163.com
+ * +----------------------------------------------------------------------
+ */
+package cc.iotkit.temporal.es.dao;
+
+import cc.iotkit.temporal.es.document.DocTaskLog;
+import org.springframework.data.domain.Page;
+import org.springframework.data.domain.Pageable;
+import org.springframework.data.elasticsearch.repository.ElasticsearchRepository;
+
+public interface TaskLogRepository extends ElasticsearchRepository<DocTaskLog, String> {
+
+    void deleteByTaskId(String taskId);
+
+    Page<DocTaskLog> findByTaskId(String taskId, Pageable pageable);
+
+}

+ 4 - 6
iot-data/iot-model/src/main/java/cc/iotkit/model/SendCmd.java → iot-data/iot-es-temporal-service/src/main/java/cc/iotkit/temporal/es/dao/ThingModelMessageRepository.java

@@ -7,12 +7,10 @@
  * | Author: xw2sy@163.com
  * +----------------------------------------------------------------------
  */
-package cc.iotkit.model;
-
-import lombok.Data;
-
-@Data
-public class SendCmd {
+package cc.iotkit.temporal.es.dao;
 
+import cc.iotkit.temporal.es.document.DocThingModelMessage;
+import org.springframework.data.elasticsearch.repository.ElasticsearchRepository;
 
+public interface ThingModelMessageRepository extends ElasticsearchRepository<DocThingModelMessage, String> {
 }

+ 21 - 0
iot-data/iot-es-temporal-service/src/main/java/cc/iotkit/temporal/es/dao/VirtualDeviceLogRepository.java

@@ -0,0 +1,21 @@
+/*
+ * +----------------------------------------------------------------------
+ * | Copyright (c) 奇特物联 2021-2022 All rights reserved.
+ * +----------------------------------------------------------------------
+ * | Licensed 未经许可不能去掉「奇特物联」相关版权
+ * +----------------------------------------------------------------------
+ * | Author: xw2sy@163.com
+ * +----------------------------------------------------------------------
+ */
+package cc.iotkit.temporal.es.dao;
+
+import cc.iotkit.temporal.es.document.DocVirtualDeviceLog;
+import org.springframework.data.domain.Page;
+import org.springframework.data.domain.Pageable;
+import org.springframework.data.elasticsearch.repository.ElasticsearchRepository;
+
+public interface VirtualDeviceLogRepository extends ElasticsearchRepository<DocVirtualDeviceLog, String> {
+
+    Page<DocVirtualDeviceLog> findByVirtualDeviceId(String virtualDeviceId, Pageable pageable);
+
+}

+ 23 - 0
iot-data/iot-es-temporal-service/src/main/java/cc/iotkit/temporal/es/document/DevicePropertyMapper.java

@@ -0,0 +1,23 @@
+/*
+ * +----------------------------------------------------------------------
+ * | Copyright (c) 奇特物联 2021-2022 All rights reserved.
+ * +----------------------------------------------------------------------
+ * | Licensed 未经许可不能去掉「奇特物联」相关版权
+ * +----------------------------------------------------------------------
+ * | Author: xw2sy@163.com
+ * +----------------------------------------------------------------------
+ */
+package cc.iotkit.temporal.es.document;
+
+import cc.iotkit.model.device.message.DeviceProperty;
+import org.mapstruct.Mapper;
+import org.mapstruct.factory.Mappers;
+
+@Mapper
+public interface DevicePropertyMapper {
+    DevicePropertyMapper M = Mappers.getMapper(DevicePropertyMapper.class);
+
+    DeviceProperty toDto(DocDeviceProperty vo);
+
+    DocDeviceProperty toVo(DeviceProperty dto);
+}

+ 10 - 13
iot-data/iot-es-temporal-service/src/main/java/cc/iotkit/temporal/es/document/DevicePropertyDoc.java → iot-data/iot-es-temporal-service/src/main/java/cc/iotkit/temporal/es/document/DocDeviceProperty.java

@@ -1,6 +1,14 @@
+/*
+ * +----------------------------------------------------------------------
+ * | Copyright (c) 奇特物联 2021-2022 All rights reserved.
+ * +----------------------------------------------------------------------
+ * | Licensed 未经许可不能去掉「奇特物联」相关版权
+ * +----------------------------------------------------------------------
+ * | Author: xw2sy@163.com
+ * +----------------------------------------------------------------------
+ */
 package cc.iotkit.temporal.es.document;
 
-import cc.iotkit.model.device.message.DeviceProperty;
 import lombok.AllArgsConstructor;
 import lombok.Builder;
 import lombok.Data;
@@ -15,7 +23,7 @@ import org.springframework.data.elasticsearch.annotations.FieldType;
 @AllArgsConstructor
 @Builder
 @Document(indexName = "device_property")
-public class DevicePropertyDoc {
+public class DocDeviceProperty {
 
     @Id
     private String id;
@@ -29,15 +37,4 @@ public class DevicePropertyDoc {
     @Field(type = FieldType.Date)
     private Long time;
 
-    public DeviceProperty de() {
-        return new DeviceProperty(id, deviceId, name, value, time);
-    }
-
-    public DevicePropertyDoc(DeviceProperty raw) {
-        this.id = raw.getId();
-        this.deviceId = raw.getDeviceId();
-        this.name = raw.getName();
-        this.value = raw.getValue();
-        this.time = raw.getTime();
-    }
 }

+ 40 - 0
iot-data/iot-es-temporal-service/src/main/java/cc/iotkit/temporal/es/document/DocRuleLog.java

@@ -0,0 +1,40 @@
+/*
+ * +----------------------------------------------------------------------
+ * | Copyright (c) 奇特物联 2021-2022 All rights reserved.
+ * +----------------------------------------------------------------------
+ * | Licensed 未经许可不能去掉「奇特物联」相关版权
+ * +----------------------------------------------------------------------
+ * | Author: xw2sy@163.com
+ * +----------------------------------------------------------------------
+ */
+package cc.iotkit.temporal.es.document;
+
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import org.springframework.data.annotation.Id;
+import org.springframework.data.elasticsearch.annotations.Document;
+import org.springframework.data.elasticsearch.annotations.Field;
+import org.springframework.data.elasticsearch.annotations.FieldType;
+
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+@Builder
+@Document(indexName = "rule_log")
+public class DocRuleLog {
+    @Id
+    private String id;
+
+    private String ruleId;
+
+    private String state;
+
+    private String content;
+
+    private Boolean success;
+
+    @Field(type = FieldType.Date)
+    private Long logAt;
+}

+ 11 - 15
iot-data/iot-model/src/main/java/cc/iotkit/model/AppInfo.java → iot-data/iot-es-temporal-service/src/main/java/cc/iotkit/temporal/es/document/DocTaskLog.java

@@ -7,7 +7,7 @@
  * | Author: xw2sy@163.com
  * +----------------------------------------------------------------------
  */
-package cc.iotkit.model;
+package cc.iotkit.temporal.es.document;
 
 import lombok.AllArgsConstructor;
 import lombok.Builder;
@@ -15,29 +15,25 @@ import lombok.Data;
 import lombok.NoArgsConstructor;
 import org.springframework.data.annotation.Id;
 import org.springframework.data.elasticsearch.annotations.Document;
-import org.springframework.stereotype.Component;
-
+import org.springframework.data.elasticsearch.annotations.Field;
+import org.springframework.data.elasticsearch.annotations.FieldType;
 
 @Data
-@Builder
 @NoArgsConstructor
 @AllArgsConstructor
-@Document(indexName = "category")
-public class AppInfo {
+@Builder
+@Document(indexName = "task_log")
+public class DocTaskLog {
 
     @Id
     private String id;
 
-    private String appName;
-
-    private String packageName;
+    private String taskId;
 
-    private String version;
+    private String content;
 
-    private String buildNumber;
+    private Boolean success;
 
-    /**
-     * 安装包下载路径
-     */
-    private String packageUrl;
+    @Field(type = FieldType.Date)
+    private Long logAt;
 }

+ 53 - 0
iot-data/iot-es-temporal-service/src/main/java/cc/iotkit/temporal/es/document/DocThingModelMessage.java

@@ -0,0 +1,53 @@
+/*
+ * +----------------------------------------------------------------------
+ * | Copyright (c) 奇特物联 2021-2022 All rights reserved.
+ * +----------------------------------------------------------------------
+ * | Licensed 未经许可不能去掉「奇特物联」相关版权
+ * +----------------------------------------------------------------------
+ * | Author: xw2sy@163.com
+ * +----------------------------------------------------------------------
+ */
+package cc.iotkit.temporal.es.document;
+
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import org.springframework.data.annotation.Id;
+import org.springframework.data.elasticsearch.annotations.Document;
+import org.springframework.data.elasticsearch.annotations.Field;
+import org.springframework.data.elasticsearch.annotations.FieldType;
+
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+@Builder
+@Document(indexName = "thing_model_message")
+public class DocThingModelMessage {
+
+    @Id
+    private String id;
+
+    private String mid;
+
+    private String deviceId;
+
+    private String productKey;
+
+    private String deviceName;
+
+    private String type;
+
+    private String identifier;
+
+    private int code;
+
+    private Object data;
+
+    @Field(type = FieldType.Date)
+    private Long occurred;
+
+    @Field(type = FieldType.Date)
+    private Long time;
+
+}

+ 47 - 0
iot-data/iot-es-temporal-service/src/main/java/cc/iotkit/temporal/es/document/DocVirtualDeviceLog.java

@@ -0,0 +1,47 @@
+package cc.iotkit.temporal.es.document;
+
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import org.springframework.data.annotation.Id;
+import org.springframework.data.elasticsearch.annotations.Document;
+import org.springframework.data.elasticsearch.annotations.Field;
+import org.springframework.data.elasticsearch.annotations.FieldType;
+
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+@Builder
+@Document(indexName = "virtual_device_log")
+public class DocVirtualDeviceLog {
+
+    @Id
+    private String id;
+
+    /**
+     * 虚拟设备id
+     */
+    private String virtualDeviceId;
+
+    /**
+     * 虚拟设备名称
+     */
+    private String virtualDeviceName;
+
+    /**
+     * 关联设备数量
+     */
+    private int deviceTotal;
+
+    /**
+     * 虚拟设备执行结果
+     */
+    private String result;
+
+    /**
+     * 创建时间
+     */
+    @Field(type = FieldType.Date)
+    private Long logAt = System.currentTimeMillis();
+}

+ 9 - 9
iot-data/iot-model/src/main/java/cc/iotkit/model/Role.java → iot-data/iot-es-temporal-service/src/main/java/cc/iotkit/temporal/es/document/RuleLogMapper.java

@@ -7,17 +7,17 @@
  * | Author: xw2sy@163.com
  * +----------------------------------------------------------------------
  */
-package cc.iotkit.model;
+package cc.iotkit.temporal.es.document;
 
-import lombok.Data;
-import org.springframework.data.elasticsearch.annotations.Document;
+import cc.iotkit.model.rule.RuleLog;
+import org.mapstruct.Mapper;
+import org.mapstruct.factory.Mappers;
 
-@Data
-@Document(indexName = "role")
-public class Role {
+@Mapper
+public interface RuleLogMapper {
+    RuleLogMapper M = Mappers.getMapper(RuleLogMapper.class);
 
-    private String id;
-
-    private String name;
+    RuleLog toDto(DocRuleLog vo);
 
+    DocRuleLog toVo(RuleLog dto);
 }

+ 23 - 0
iot-data/iot-es-temporal-service/src/main/java/cc/iotkit/temporal/es/document/TaskLogMapper.java

@@ -0,0 +1,23 @@
+/*
+ * +----------------------------------------------------------------------
+ * | Copyright (c) 奇特物联 2021-2022 All rights reserved.
+ * +----------------------------------------------------------------------
+ * | Licensed 未经许可不能去掉「奇特物联」相关版权
+ * +----------------------------------------------------------------------
+ * | Author: xw2sy@163.com
+ * +----------------------------------------------------------------------
+ */
+package cc.iotkit.temporal.es.document;
+
+import cc.iotkit.model.rule.TaskLog;
+import org.mapstruct.Mapper;
+import org.mapstruct.factory.Mappers;
+
+@Mapper
+public interface TaskLogMapper {
+    TaskLogMapper M = Mappers.getMapper(TaskLogMapper.class);
+
+    TaskLog toDto(DocTaskLog vo);
+
+    DocTaskLog toVo(TaskLog dto);
+}

+ 23 - 0
iot-data/iot-es-temporal-service/src/main/java/cc/iotkit/temporal/es/document/ThingModelMessageMapper.java

@@ -0,0 +1,23 @@
+/*
+ * +----------------------------------------------------------------------
+ * | Copyright (c) 奇特物联 2021-2022 All rights reserved.
+ * +----------------------------------------------------------------------
+ * | Licensed 未经许可不能去掉「奇特物联」相关版权
+ * +----------------------------------------------------------------------
+ * | Author: xw2sy@163.com
+ * +----------------------------------------------------------------------
+ */
+package cc.iotkit.temporal.es.document;
+
+import cc.iotkit.model.device.message.ThingModelMessage;
+import org.mapstruct.Mapper;
+import org.mapstruct.factory.Mappers;
+
+@Mapper
+public interface ThingModelMessageMapper {
+    ThingModelMessageMapper M = Mappers.getMapper(ThingModelMessageMapper.class);
+
+    ThingModelMessage toDto(DocThingModelMessage vo);
+
+    DocThingModelMessage toVo(ThingModelMessage dto);
+}

+ 23 - 0
iot-data/iot-es-temporal-service/src/main/java/cc/iotkit/temporal/es/document/VirtualDeviceLogMapper.java

@@ -0,0 +1,23 @@
+/*
+ * +----------------------------------------------------------------------
+ * | Copyright (c) 奇特物联 2021-2022 All rights reserved.
+ * +----------------------------------------------------------------------
+ * | Licensed 未经许可不能去掉「奇特物联」相关版权
+ * +----------------------------------------------------------------------
+ * | Author: xw2sy@163.com
+ * +----------------------------------------------------------------------
+ */
+package cc.iotkit.temporal.es.document;
+
+import cc.iotkit.model.device.VirtualDeviceLog;
+import org.mapstruct.Mapper;
+import org.mapstruct.factory.Mappers;
+
+@Mapper
+public interface VirtualDeviceLogMapper {
+    VirtualDeviceLogMapper M = Mappers.getMapper(VirtualDeviceLogMapper.class);
+
+    VirtualDeviceLog toDto(DocVirtualDeviceLog vo);
+
+    DocVirtualDeviceLog toVo(VirtualDeviceLog dto);
+}

+ 14 - 4
iot-data/iot-es-temporal-service/src/main/java/cc/iotkit/temporal/es/service/DevicePropertyDataImpl.java

@@ -1,8 +1,18 @@
+/*
+ * +----------------------------------------------------------------------
+ * | Copyright (c) 奇特物联 2021-2022 All rights reserved.
+ * +----------------------------------------------------------------------
+ * | Licensed 未经许可不能去掉「奇特物联」相关版权
+ * +----------------------------------------------------------------------
+ * | Author: xw2sy@163.com
+ * +----------------------------------------------------------------------
+ */
 package cc.iotkit.temporal.es.service;
 
 import cc.iotkit.model.device.message.DeviceProperty;
 import cc.iotkit.temporal.IDevicePropertyData;
-import cc.iotkit.temporal.es.document.DevicePropertyDoc;
+import cc.iotkit.temporal.es.document.DevicePropertyMapper;
+import cc.iotkit.temporal.es.document.DocDeviceProperty;
 import org.elasticsearch.index.query.QueryBuilders;
 import org.elasticsearch.search.sort.FieldSortBuilder;
 import org.elasticsearch.search.sort.SortOrder;
@@ -33,15 +43,15 @@ public class DevicePropertyDataImpl implements IDevicePropertyData {
                 )
                 .withSorts(new FieldSortBuilder("time").order(SortOrder.ASC))
                 .build();
-        SearchHits<DevicePropertyDoc> result = template.search(query, DevicePropertyDoc.class);
+        SearchHits<DocDeviceProperty> result = template.search(query, DocDeviceProperty.class);
         return result.getSearchHits().stream()
-                .map(h -> h.getContent().de())
+                .map(h -> DevicePropertyMapper.M.toDto(h.getContent()))
                 .collect(Collectors.toList());
     }
 
     @Override
     public void addProperties(List<DeviceProperty> properties) {
-        template.save(properties.stream().map(DevicePropertyDoc::new)
+        template.save(properties.stream().map(DevicePropertyMapper.M::toVo)
                 .collect(Collectors.toList()));
     }
 

+ 27 - 3
iot-data/iot-es-temporal-service/src/main/java/cc/iotkit/temporal/es/service/RuleLogDataImpl.java

@@ -1,24 +1,48 @@
+/*
+ * +----------------------------------------------------------------------
+ * | Copyright (c) 奇特物联 2021-2022 All rights reserved.
+ * +----------------------------------------------------------------------
+ * | Licensed 未经许可不能去掉「奇特物联」相关版权
+ * +----------------------------------------------------------------------
+ * | Author: xw2sy@163.com
+ * +----------------------------------------------------------------------
+ */
 package cc.iotkit.temporal.es.service;
 
 import cc.iotkit.model.Paging;
 import cc.iotkit.model.rule.RuleLog;
 import cc.iotkit.temporal.IRuleLogData;
+import cc.iotkit.temporal.es.dao.RuleLogRepository;
+import cc.iotkit.temporal.es.document.DocRuleLog;
+import cc.iotkit.temporal.es.document.RuleLogMapper;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.domain.Page;
+import org.springframework.data.domain.Pageable;
 import org.springframework.stereotype.Service;
 
+import java.util.stream.Collectors;
+
 @Service
 public class RuleLogDataImpl implements IRuleLogData {
+
+    @Autowired
+    private RuleLogRepository ruleLogRepository;
+
     @Override
     public void deleteByRuleId(String ruleId) {
-
+        ruleLogRepository.deleteByRuleId(ruleId);
     }
 
     @Override
     public Paging<RuleLog> findByRuleId(String ruleId, int page, int size) {
-        return null;
+        Page<DocRuleLog> paged = ruleLogRepository.findByRuleId(ruleId, Pageable.ofSize(size).withPage(page - 1));
+        return new Paging<>(paged.getTotalElements(),
+                paged.getContent().stream().map(RuleLogMapper.M::toDto)
+                        .collect(Collectors.toList()));
     }
 
     @Override
     public void add(RuleLog log) {
-
+        ruleLogRepository.save(RuleLogMapper.M.toVo(log));
     }
 }

+ 27 - 3
iot-data/iot-es-temporal-service/src/main/java/cc/iotkit/temporal/es/service/TaskLogDataImpl.java

@@ -1,24 +1,48 @@
+/*
+ * +----------------------------------------------------------------------
+ * | Copyright (c) 奇特物联 2021-2022 All rights reserved.
+ * +----------------------------------------------------------------------
+ * | Licensed 未经许可不能去掉「奇特物联」相关版权
+ * +----------------------------------------------------------------------
+ * | Author: xw2sy@163.com
+ * +----------------------------------------------------------------------
+ */
 package cc.iotkit.temporal.es.service;
 
 import cc.iotkit.model.Paging;
 import cc.iotkit.model.rule.TaskLog;
 import cc.iotkit.temporal.ITaskLogData;
+import cc.iotkit.temporal.es.dao.TaskLogRepository;
+import cc.iotkit.temporal.es.document.DocTaskLog;
+import cc.iotkit.temporal.es.document.TaskLogMapper;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.domain.Page;
+import org.springframework.data.domain.Pageable;
 import org.springframework.stereotype.Service;
 
+import java.util.stream.Collectors;
+
 @Service
 public class TaskLogDataImpl implements ITaskLogData {
+
+    @Autowired
+    private TaskLogRepository taskLogRepository;
+
     @Override
     public void deleteByTaskId(String taskId) {
-
+        taskLogRepository.deleteByTaskId(taskId);
     }
 
     @Override
     public Paging<TaskLog> findByTaskId(String taskId, int page, int size) {
-        return null;
+        Page<DocTaskLog> paged = taskLogRepository.findByTaskId(taskId, Pageable.ofSize(size).withPage(page - 1));
+        return new Paging<>(paged.getTotalElements(),
+                paged.getContent().stream().map(TaskLogMapper.M::toDto)
+                        .collect(Collectors.toList()));
     }
 
     @Override
     public void add(TaskLog log) {
-
+        taskLogRepository.save(TaskLogMapper.M.toVo(log));
     }
 }

+ 53 - 6
iot-data/iot-es-temporal-service/src/main/java/cc/iotkit/temporal/es/service/ThingModelMessageDataImpl.java

@@ -1,22 +1,39 @@
+/*
+ * +----------------------------------------------------------------------
+ * | Copyright (c) 奇特物联 2021-2022 All rights reserved.
+ * +----------------------------------------------------------------------
+ * | Licensed 未经许可不能去掉「奇特物联」相关版权
+ * +----------------------------------------------------------------------
+ * | Author: xw2sy@163.com
+ * +----------------------------------------------------------------------
+ */
 package cc.iotkit.temporal.es.service;
 
 import cc.iotkit.model.Paging;
 import cc.iotkit.model.device.message.ThingModelMessage;
 import cc.iotkit.model.stats.TimeData;
 import cc.iotkit.temporal.IThingModelMessageData;
+import cc.iotkit.temporal.es.dao.ThingModelMessageRepository;
+import cc.iotkit.temporal.es.document.DocThingModelMessage;
+import cc.iotkit.temporal.es.document.ThingModelMessageMapper;
 import org.apache.commons.lang3.StringUtils;
 import org.elasticsearch.index.query.BoolQueryBuilder;
 import org.elasticsearch.index.query.QueryBuilders;
+import org.elasticsearch.search.aggregations.AggregationBuilders;
+import org.elasticsearch.search.aggregations.bucket.histogram.DateHistogramInterval;
+import org.elasticsearch.search.aggregations.bucket.histogram.Histogram;
+import org.elasticsearch.search.aggregations.bucket.histogram.ParsedDateHistogram;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.data.domain.PageRequest;
 import org.springframework.data.domain.Sort;
 import org.springframework.data.elasticsearch.core.ElasticsearchRestTemplate;
-import org.springframework.data.elasticsearch.core.SearchHit;
 import org.springframework.data.elasticsearch.core.SearchHits;
+import org.springframework.data.elasticsearch.core.clients.elasticsearch7.ElasticsearchAggregations;
 import org.springframework.data.elasticsearch.core.query.NativeSearchQuery;
 import org.springframework.data.elasticsearch.core.query.NativeSearchQueryBuilder;
 import org.springframework.stereotype.Service;
 
+import java.time.ZonedDateTime;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.stream.Collectors;
@@ -26,6 +43,8 @@ public class ThingModelMessageDataImpl implements IThingModelMessageData {
 
     @Autowired
     private ElasticsearchRestTemplate template;
+    @Autowired
+    private ThingModelMessageRepository thingModelMessageRepository;
 
     public Paging<ThingModelMessage> findByTypeAndIdentifier(String deviceId, String type,
                                                              String identifier,
@@ -41,23 +60,51 @@ public class ThingModelMessageDataImpl implements IThingModelMessageData {
         NativeSearchQuery query = new NativeSearchQueryBuilder().withQuery(builder)
                 .withPageable(PageRequest.of(page - 1, size, Sort.by(Sort.Order.desc("time"))))
                 .build();
-        SearchHits<ThingModelMessage> result = template.search(query, ThingModelMessage.class);
+        SearchHits<DocThingModelMessage> result = template.search(query, DocThingModelMessage.class);
         return new Paging<>(result.getTotalHits(), result.getSearchHits().stream()
-                .map(SearchHit::getContent).collect(Collectors.toList()));
+                .map(m -> ThingModelMessageMapper.M.toDto(m.getContent()))
+                .collect(Collectors.toList()));
     }
 
     @Override
     public List<TimeData> getDeviceMessageStatsWithUid(String uid, long start, long end) {
-        return new ArrayList<>();
+        BoolQueryBuilder queryBuilder = QueryBuilders.boolQuery()
+                .must(QueryBuilders.rangeQuery("time")
+                        .from(start, true).to(end, true));
+        if (uid != null) {
+            queryBuilder =
+                    queryBuilder.must(QueryBuilders.termQuery("uid", uid));
+        }
+
+        NativeSearchQuery query = new NativeSearchQueryBuilder()
+                .withQuery(queryBuilder)
+                .withAggregations(AggregationBuilders.dateHistogram("agg")
+                        .field("time")
+                        .calendarInterval(DateHistogramInterval.HOUR)
+                        .calendarInterval(DateHistogramInterval.hours(1))
+                )
+                .build();
+
+        ElasticsearchAggregations result = (ElasticsearchAggregations) template
+                .search(query, DocThingModelMessage.class).getAggregations();
+        ParsedDateHistogram histogram = result.aggregations().get("agg");
+
+        List<TimeData> data = new ArrayList<>();
+        for (Histogram.Bucket bucket : histogram.getBuckets()) {
+            long seconds = ((ZonedDateTime) bucket.getKey()).toInstant().getEpochSecond();
+            data.add(new TimeData(seconds * 1000, bucket.getDocCount()));
+        }
+
+        return data;
     }
 
     @Override
     public void add(ThingModelMessage msg) {
-
+        thingModelMessageRepository.save(ThingModelMessageMapper.M.toVo(msg));
     }
 
     @Override
     public long count() {
-        return 0;
+        return thingModelMessageRepository.count();
     }
 }

+ 28 - 2
iot-data/iot-es-temporal-service/src/main/java/cc/iotkit/temporal/es/service/VirtualDeviceLogDataImpl.java

@@ -1,19 +1,45 @@
+/*
+ * +----------------------------------------------------------------------
+ * | Copyright (c) 奇特物联 2021-2022 All rights reserved.
+ * +----------------------------------------------------------------------
+ * | Licensed 未经许可不能去掉「奇特物联」相关版权
+ * +----------------------------------------------------------------------
+ * | Author: xw2sy@163.com
+ * +----------------------------------------------------------------------
+ */
 package cc.iotkit.temporal.es.service;
 
 import cc.iotkit.model.Paging;
 import cc.iotkit.model.device.VirtualDeviceLog;
 import cc.iotkit.temporal.IVirtualDeviceLogData;
+import cc.iotkit.temporal.es.dao.VirtualDeviceLogRepository;
+import cc.iotkit.temporal.es.document.DocVirtualDeviceLog;
+import cc.iotkit.temporal.es.document.VirtualDeviceLogMapper;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.domain.Page;
+import org.springframework.data.domain.Pageable;
 import org.springframework.stereotype.Service;
 
+import java.util.stream.Collectors;
+
 @Service
 public class VirtualDeviceLogDataImpl implements IVirtualDeviceLogData {
+
+    @Autowired
+    private VirtualDeviceLogRepository virtualDeviceLogRepository;
+
     @Override
     public Paging<VirtualDeviceLog> findByVirtualDeviceId(String virtualDeviceId, int page, int size) {
-        return null;
+        Page<DocVirtualDeviceLog> paged = virtualDeviceLogRepository
+                .findByVirtualDeviceId(virtualDeviceId,
+                        Pageable.ofSize(size).withPage(page - 1));
+        return new Paging<>(paged.getTotalElements(), paged.getContent().stream()
+                .map(VirtualDeviceLogMapper.M::toDto)
+                .collect(Collectors.toList()));
     }
 
     @Override
     public void add(VirtualDeviceLog log) {
-
+        virtualDeviceLogRepository.save(VirtualDeviceLogMapper.M.toVo(log));
     }
 }

+ 0 - 5
iot-data/iot-model/pom.xml

@@ -20,11 +20,6 @@
             <scope>provided</scope>
         </dependency>
 
-        <dependency>
-            <groupId>org.springframework.data</groupId>
-            <artifactId>spring-data-elasticsearch</artifactId>
-        </dependency>
-
         <dependency>
             <groupId>com.fasterxml.jackson.core</groupId>
             <artifactId>jackson-annotations</artifactId>

+ 0 - 7
iot-data/iot-model/src/main/java/cc/iotkit/model/device/VirtualDeviceLog.java

@@ -13,10 +13,6 @@ import lombok.AllArgsConstructor;
 import lombok.Builder;
 import lombok.Data;
 import lombok.NoArgsConstructor;
-import org.springframework.data.annotation.Id;
-import org.springframework.data.elasticsearch.annotations.Document;
-import org.springframework.data.elasticsearch.annotations.Field;
-import org.springframework.data.elasticsearch.annotations.FieldType;
 
 
 /**
@@ -26,10 +22,8 @@ import org.springframework.data.elasticsearch.annotations.FieldType;
 @NoArgsConstructor
 @AllArgsConstructor
 @Builder
-@Document(indexName = "virtual_device_log")
 public class VirtualDeviceLog {
 
-    @Id
     private String id;
 
     /**
@@ -55,6 +49,5 @@ public class VirtualDeviceLog {
     /**
      * 创建时间
      */
-    @Field(type = FieldType.Date)
     private Long logAt = System.currentTimeMillis();
 }

+ 0 - 7
iot-data/iot-model/src/main/java/cc/iotkit/model/rule/RuleLog.java

@@ -12,15 +12,10 @@ package cc.iotkit.model.rule;
 import lombok.AllArgsConstructor;
 import lombok.Data;
 import lombok.NoArgsConstructor;
-import org.springframework.data.annotation.Id;
-import org.springframework.data.elasticsearch.annotations.Document;
-import org.springframework.data.elasticsearch.annotations.Field;
-import org.springframework.data.elasticsearch.annotations.FieldType;
 
 @Data
 @NoArgsConstructor
 @AllArgsConstructor
-@Document(indexName = "rule_log")
 public class RuleLog {
 
     public static final String STATE_MATCHED_LISTENER = "matched_listener";
@@ -28,7 +23,6 @@ public class RuleLog {
     public static final String STATE_UNMATCHED_FILTER = "unmatched_filter";
     public static final String STATE_EXECUTED_ACTION = "executed_action";
 
-    @Id
     private String id;
 
     private String ruleId;
@@ -39,6 +33,5 @@ public class RuleLog {
 
     private Boolean success;
 
-    @Field(type = FieldType.Date)
     private Long logAt;
 }

+ 0 - 7
iot-data/iot-model/src/main/java/cc/iotkit/model/rule/TaskLog.java

@@ -13,19 +13,13 @@ import lombok.AllArgsConstructor;
 import lombok.Builder;
 import lombok.Data;
 import lombok.NoArgsConstructor;
-import org.springframework.data.annotation.Id;
-import org.springframework.data.elasticsearch.annotations.Document;
-import org.springframework.data.elasticsearch.annotations.Field;
-import org.springframework.data.elasticsearch.annotations.FieldType;
 
 @Data
 @NoArgsConstructor
 @AllArgsConstructor
 @Builder
-@Document(indexName = "task_log")
 public class TaskLog {
 
-    @Id
     private String id;
 
     private String taskId;
@@ -34,6 +28,5 @@ public class TaskLog {
 
     private Boolean success;
 
-    @Field(type = FieldType.Date)
     private Long logAt;
 }

+ 7 - 7
iot-data/iot-rdb-data-service/pom.xml

@@ -19,16 +19,16 @@
             <artifactId>spring-boot-starter-data-jpa</artifactId>
         </dependency>
 
-<!--        <dependency>-->
-<!--            <groupId>com.h2database</groupId>-->
-<!--            <artifactId>h2</artifactId>-->
-<!--        </dependency>-->
-
         <dependency>
-            <groupId>mysql</groupId>
-            <artifactId>mysql-connector-java</artifactId>
+            <groupId>com.h2database</groupId>
+            <artifactId>h2</artifactId>
         </dependency>
 
+<!--        <dependency>-->
+<!--            <groupId>mysql</groupId>-->
+<!--            <artifactId>mysql-connector-java</artifactId>-->
+<!--        </dependency>-->
+
         <dependency>
             <groupId>commons-io</groupId>
             <artifactId>commons-io</artifactId>

+ 9 - 0
iot-data/iot-rdb-data-service/src/main/java/cc/iotkit/data/dao/CategoryRepository.java

@@ -1,3 +1,12 @@
+/*
+ * +----------------------------------------------------------------------
+ * | Copyright (c) 奇特物联 2021-2022 All rights reserved.
+ * +----------------------------------------------------------------------
+ * | Licensed 未经许可不能去掉「奇特物联」相关版权
+ * +----------------------------------------------------------------------
+ * | Author: xw2sy@163.com
+ * +----------------------------------------------------------------------
+ */
 package cc.iotkit.data.dao;
 
 import cc.iotkit.data.model.TbCategory;

+ 9 - 0
iot-data/iot-rdb-data-service/src/main/java/cc/iotkit/data/dao/DeviceConfigRepository.java

@@ -1,3 +1,12 @@
+/*
+ * +----------------------------------------------------------------------
+ * | Copyright (c) 奇特物联 2021-2022 All rights reserved.
+ * +----------------------------------------------------------------------
+ * | Licensed 未经许可不能去掉「奇特物联」相关版权
+ * +----------------------------------------------------------------------
+ * | Author: xw2sy@163.com
+ * +----------------------------------------------------------------------
+ */
 package cc.iotkit.data.dao;
 
 import cc.iotkit.data.model.TbDeviceConfig;

+ 9 - 0
iot-data/iot-rdb-data-service/src/main/java/cc/iotkit/data/dao/DeviceGroupRepository.java

@@ -1,3 +1,12 @@
+/*
+ * +----------------------------------------------------------------------
+ * | Copyright (c) 奇特物联 2021-2022 All rights reserved.
+ * +----------------------------------------------------------------------
+ * | Licensed 未经许可不能去掉「奇特物联」相关版权
+ * +----------------------------------------------------------------------
+ * | Author: xw2sy@163.com
+ * +----------------------------------------------------------------------
+ */
 package cc.iotkit.data.dao;
 
 import cc.iotkit.data.model.TbDeviceGroup;

+ 9 - 0
iot-data/iot-rdb-data-service/src/main/java/cc/iotkit/data/dao/DeviceTagRepository.java

@@ -1,3 +1,12 @@
+/*
+ * +----------------------------------------------------------------------
+ * | Copyright (c) 奇特物联 2021-2022 All rights reserved.
+ * +----------------------------------------------------------------------
+ * | Licensed 未经许可不能去掉「奇特物联」相关版权
+ * +----------------------------------------------------------------------
+ * | Author: xw2sy@163.com
+ * +----------------------------------------------------------------------
+ */
 package cc.iotkit.data.dao;
 
 import cc.iotkit.data.model.TbDeviceTag;

+ 9 - 0
iot-data/iot-rdb-data-service/src/main/java/cc/iotkit/data/dao/OauthClientRepository.java

@@ -1,3 +1,12 @@
+/*
+ * +----------------------------------------------------------------------
+ * | Copyright (c) 奇特物联 2021-2022 All rights reserved.
+ * +----------------------------------------------------------------------
+ * | Licensed 未经许可不能去掉「奇特物联」相关版权
+ * +----------------------------------------------------------------------
+ * | Author: xw2sy@163.com
+ * +----------------------------------------------------------------------
+ */
 package cc.iotkit.data.dao;
 
 import cc.iotkit.data.model.TbOauthClient;

+ 9 - 0
iot-data/iot-rdb-data-service/src/main/java/cc/iotkit/data/dao/ProtocolConverterRepository.java

@@ -1,3 +1,12 @@
+/*
+ * +----------------------------------------------------------------------
+ * | Copyright (c) 奇特物联 2021-2022 All rights reserved.
+ * +----------------------------------------------------------------------
+ * | Licensed 未经许可不能去掉「奇特物联」相关版权
+ * +----------------------------------------------------------------------
+ * | Author: xw2sy@163.com
+ * +----------------------------------------------------------------------
+ */
 package cc.iotkit.data.dao;
 
 import cc.iotkit.data.model.TbProtocolConverter;

+ 9 - 0
iot-data/iot-rdb-data-service/src/main/java/cc/iotkit/data/dao/SpaceRepository.java

@@ -1,3 +1,12 @@
+/*
+ * +----------------------------------------------------------------------
+ * | Copyright (c) 奇特物联 2021-2022 All rights reserved.
+ * +----------------------------------------------------------------------
+ * | Licensed 未经许可不能去掉「奇特物联」相关版权
+ * +----------------------------------------------------------------------
+ * | Author: xw2sy@163.com
+ * +----------------------------------------------------------------------
+ */
 package cc.iotkit.data.dao;
 
 import cc.iotkit.data.model.TbSpace;

+ 9 - 0
iot-data/iot-rdb-data-service/src/main/java/cc/iotkit/data/model/DeviceIdGroup.java

@@ -1,3 +1,12 @@
+/*
+ * +----------------------------------------------------------------------
+ * | Copyright (c) 奇特物联 2021-2022 All rights reserved.
+ * +----------------------------------------------------------------------
+ * | Licensed 未经许可不能去掉「奇特物联」相关版权
+ * +----------------------------------------------------------------------
+ * | Author: xw2sy@163.com
+ * +----------------------------------------------------------------------
+ */
 package cc.iotkit.data.model;
 
 import lombok.AllArgsConstructor;

+ 9 - 0
iot-data/iot-rdb-data-service/src/main/java/cc/iotkit/data/model/OauthClientMapper.java

@@ -1,3 +1,12 @@
+/*
+ * +----------------------------------------------------------------------
+ * | Copyright (c) 奇特物联 2021-2022 All rights reserved.
+ * +----------------------------------------------------------------------
+ * | Licensed 未经许可不能去掉「奇特物联」相关版权
+ * +----------------------------------------------------------------------
+ * | Author: xw2sy@163.com
+ * +----------------------------------------------------------------------
+ */
 package cc.iotkit.data.model;
 
 import cc.iotkit.model.OauthClient;

+ 9 - 0
iot-data/iot-rdb-data-service/src/main/java/cc/iotkit/data/model/RuleInfoMapper.java

@@ -1,3 +1,12 @@
+/*
+ * +----------------------------------------------------------------------
+ * | Copyright (c) 奇特物联 2021-2022 All rights reserved.
+ * +----------------------------------------------------------------------
+ * | Licensed 未经许可不能去掉「奇特物联」相关版权
+ * +----------------------------------------------------------------------
+ * | Author: xw2sy@163.com
+ * +----------------------------------------------------------------------
+ */
 package cc.iotkit.data.model;
 
 import cc.iotkit.common.utils.JsonUtil;

+ 9 - 1
iot-data/iot-rdb-data-service/src/main/java/cc/iotkit/data/model/SpaceMapper.java

@@ -1,6 +1,14 @@
+/*
+ * +----------------------------------------------------------------------
+ * | Copyright (c) 奇特物联 2021-2022 All rights reserved.
+ * +----------------------------------------------------------------------
+ * | Licensed 未经许可不能去掉「奇特物联」相关版权
+ * +----------------------------------------------------------------------
+ * | Author: xw2sy@163.com
+ * +----------------------------------------------------------------------
+ */
 package cc.iotkit.data.model;
 
-import cc.iotkit.model.protocol.ProtocolComponent;
 import cc.iotkit.model.space.Space;
 import org.mapstruct.Mapper;
 import org.mapstruct.factory.Mappers;

+ 9 - 0
iot-data/iot-rdb-data-service/src/main/java/cc/iotkit/data/model/TbOauthClient.java

@@ -1,3 +1,12 @@
+/*
+ * +----------------------------------------------------------------------
+ * | Copyright (c) 奇特物联 2021-2022 All rights reserved.
+ * +----------------------------------------------------------------------
+ * | Licensed 未经许可不能去掉「奇特物联」相关版权
+ * +----------------------------------------------------------------------
+ * | Author: xw2sy@163.com
+ * +----------------------------------------------------------------------
+ */
 package cc.iotkit.data.model;
 
 import lombok.Data;

+ 9 - 0
iot-data/iot-rdb-data-service/src/main/java/cc/iotkit/data/model/TbProduct.java

@@ -1,3 +1,12 @@
+/*
+ * +----------------------------------------------------------------------
+ * | Copyright (c) 奇特物联 2021-2022 All rights reserved.
+ * +----------------------------------------------------------------------
+ * | Licensed 未经许可不能去掉「奇特物联」相关版权
+ * +----------------------------------------------------------------------
+ * | Author: xw2sy@163.com
+ * +----------------------------------------------------------------------
+ */
 package cc.iotkit.data.model;
 
 import lombok.Data;

+ 9 - 0
iot-data/iot-rdb-data-service/src/main/java/cc/iotkit/data/model/TbProtocolConverter.java

@@ -1,3 +1,12 @@
+/*
+ * +----------------------------------------------------------------------
+ * | Copyright (c) 奇特物联 2021-2022 All rights reserved.
+ * +----------------------------------------------------------------------
+ * | Licensed 未经许可不能去掉「奇特物联」相关版权
+ * +----------------------------------------------------------------------
+ * | Author: xw2sy@163.com
+ * +----------------------------------------------------------------------
+ */
 package cc.iotkit.data.model;
 
 import lombok.Data;

+ 9 - 0
iot-data/iot-rdb-data-service/src/main/java/cc/iotkit/data/model/TbVirtualDeviceMapping.java

@@ -1,3 +1,12 @@
+/*
+ * +----------------------------------------------------------------------
+ * | Copyright (c) 奇特物联 2021-2022 All rights reserved.
+ * +----------------------------------------------------------------------
+ * | Licensed 未经许可不能去掉「奇特物联」相关版权
+ * +----------------------------------------------------------------------
+ * | Author: xw2sy@163.com
+ * +----------------------------------------------------------------------
+ */
 package cc.iotkit.data.model;
 
 import lombok.AllArgsConstructor;

+ 49 - 5
iot-data/iot-rdb-data-service/src/main/java/cc/iotkit/data/service/DeviceInfoDataImpl.java

@@ -1,14 +1,19 @@
 package cc.iotkit.data.service;
 
 import cc.iotkit.common.utils.ReflectUtil;
+import cc.iotkit.data.ICategoryData;
 import cc.iotkit.data.IDeviceInfoData;
+import cc.iotkit.data.IProductData;
 import cc.iotkit.data.dao.*;
 import cc.iotkit.data.model.*;
 import cc.iotkit.model.Paging;
 import cc.iotkit.model.device.DeviceInfo;
+import cc.iotkit.model.product.Category;
+import cc.iotkit.model.product.Product;
 import cc.iotkit.model.stats.DataItem;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Qualifier;
 import org.springframework.context.annotation.Primary;
 import org.springframework.data.domain.Page;
 import org.springframework.data.domain.Pageable;
@@ -18,6 +23,7 @@ import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 import java.util.*;
+import java.util.function.ToIntFunction;
 import java.util.stream.Collectors;
 
 @Primary
@@ -36,6 +42,12 @@ public class DeviceInfoDataImpl implements IDeviceInfoData {
     private DeviceTagRepository deviceTagRepository;
     @Autowired
     private JdbcTemplate jdbcTemplate;
+    @Autowired
+    @Qualifier("productDataCache")
+    private IProductData productData;
+    @Autowired
+    @Qualifier("categoryDataCache")
+    private ICategoryData categoryData;
 
     @Override
     public void saveProperties(String deviceId, Map<String, Object> properties) {
@@ -240,7 +252,7 @@ public class DeviceInfoDataImpl implements IDeviceInfoData {
         List<DeviceIdGroup> groups = list.size() == 0 ? new ArrayList<>() :
                 jdbcTemplate.query("SELECT \n" +
                         "a.id,\n" +
-                        "a.`name`, \n" +
+                        "a.name, \n" +
                         "b.device_id as deviceId \n" +
                         "FROM\n" +
                         "device_group a \n" +
@@ -252,9 +264,9 @@ public class DeviceInfoDataImpl implements IDeviceInfoData {
                 jdbcTemplate.query("\n" +
                         "SELECT\n" +
                         "a.id,\n" +
-                        "a.`code`,\n" +
-                        "a.`name`,\n" +
-                        "a.`value`\n" +
+                        "a.code,\n" +
+                        "a.name,\n" +
+                        "a.value\n" +
                         "FROM device_tag a " +
                         String.format("WHERE a.device_id IN(%s)", deviceIds), new BeanPropertyRowMapper<>(TbDeviceTag.class));
 
@@ -299,7 +311,39 @@ public class DeviceInfoDataImpl implements IDeviceInfoData {
 
     @Override
     public List<DataItem> getDeviceStatsByCategory(String uid) {
-        return null;
+        //先按产品统计设备数量
+        String sql = "SELECT COUNT(*) as value,product_key as name from " +
+                "device_info %s GROUP BY product_key";
+        List<Object> args = new ArrayList<>();
+        if (StringUtils.isNotBlank(uid)) {
+            sql = String.format(sql, "where uid=:uid");
+            args.add(uid);
+        } else {
+            sql = String.format(sql, "");
+        }
+        List<DataItem> stats = new ArrayList<>();
+
+        List<DataItem> rst = jdbcTemplate.query(sql,
+                new BeanPropertyRowMapper<>(DataItem.class),
+                args.toArray());
+        for (DataItem item : rst) {
+            //找到产品对应的品类取出品类名
+            Product product = productData.findById(item.getName());
+            String cateId = product.getCategory();
+            Category category = categoryData.findById(cateId);
+            if (category == null) {
+                continue;
+            }
+            //将数据替换成按品类的数据
+            item.setName(category.getName());
+        }
+
+        //按品类分组求合
+        rst.stream().collect(Collectors.groupingBy(DataItem::getName,
+                Collectors.summarizingLong(item -> (long) item.getValue())))
+                .forEach((key, sum) -> stats.add(new DataItem(key, sum.getSum())));
+
+        return stats;
     }
 
     @Override

+ 0 - 69
iot-data/iot-rdb-data-service/src/main/resources/ddl.sql

@@ -1,69 +0,0 @@
-# 品类表
-CREATE TABLE IF NOT EXISTS category(
-    id varchar(32) comment "品类id",
-    `name` varchar(100) comment "品类名称",
-    createAt TIMESTAMP comment "创建时间",
-		PRIMARY KEY(id)
-);
-
-# 设备表
-CREATE TABLE IF NOT EXISTS device_info(
-    id varchar(32),
-    deviceId varchar(32) COMMENT "设备ID",
-    productKey varchar(32) COMMENT "产品key",
-    deviceName varchar(32) COMMENT "设备唯一码",
-    model varchar(32) COMMENT "设备型号",
-    secret varchar(32) COMMENT "设备密钥",
-    parentId varchar(32) COMMENT "父级设备ID",
-    uid varchar(32) COMMENT "设备所属用户ID",
-    createAt TIMESTAMP COMMENT "创建时间",
-    INDEX idx_device_id (deviceId),
-    INDEX idx_device_name (deviceName),
-		PRIMARY KEY(id)
-);
-
-# 设备子用户表,一个设备可分配给多个子用户
-CREATE TABLE IF NOT EXISTS device_sub_user(
-    id varchar(32),
-    deviceId varchar(32) COMMENT "设备ID",
-    uid varchar(32) COMMENT "子用户ID",
-    INDEX idx_device_id (deviceId),
-		PRIMARY KEY(id)
-);
-
-# 设备在线状态表
-CREATE TABLE IF NOT EXISTS device_online_state(
-    deviceId varchar(32) COMMENT "设备ID",
-    `online` TINYINT COMMENT "在线状态(0:离线,1:在线)",
-    onlineTime TIMESTAMP COMMENT "上线时间",
-    offlineTime TIMESTAMP COMMENT "离线时间",
-		PRIMARY KEY(deviceId)
-);
-
-# 设备关联标签表
-CREATE TABLE IF NOT EXISTS device_tag(
-    id varchar(32),
-    deviceId varchar(32) COMMENT "设备ID",
-    `code` varchar(32) COMMENT "标签码",
-    `name` varchar(32) COMMENT "标签名称",
-    `value` varchar(100) COMMENT "标签值",
-    INDEX idx_device_id (deviceId),
-		PRIMARY KEY(id)
-);
-
-# 设备关联分组表
-CREATE TABLE IF NOT EXISTS device_group_mapping(
-    id varchar(32),
-    deviceId varchar(32) COMMENT "设备ID",
-    groupId varchar(32) COMMENT "分组码",
-    INDEX idx_device_id (deviceId),
-		PRIMARY KEY(id)
-);
-
-
-
-
-
-
-
-

+ 9 - 0
iot-data/iot-temporal-service/src/main/java/cc/iotkit/temporal/IThingModelMessageData.java

@@ -1,3 +1,12 @@
+/*
+ * +----------------------------------------------------------------------
+ * | Copyright (c) 奇特物联 2021-2022 All rights reserved.
+ * +----------------------------------------------------------------------
+ * | Licensed 未经许可不能去掉「奇特物联」相关版权
+ * +----------------------------------------------------------------------
+ * | Author: xw2sy@163.com
+ * +----------------------------------------------------------------------
+ */
 package cc.iotkit.temporal;
 
 import cc.iotkit.model.Paging;

+ 0 - 1
iot-data/pom.xml

@@ -12,7 +12,6 @@
 
     <modules>
         <module>iot-model</module>
-        <module>iot-dao</module>
         <module>iot-data-service</module>
         <module>iot-data-cache</module>
         <module>iot-temporal-service</module>

+ 0 - 5
iot-rule-engine/pom.xml

@@ -61,11 +61,6 @@
             <artifactId>iot-common</artifactId>
         </dependency>
 
-        <dependency>
-            <groupId>cc.iotkit</groupId>
-            <artifactId>iot-dao</artifactId>
-        </dependency>
-
         <dependency>
             <groupId>cc.iotkit</groupId>
             <artifactId>iot-component-server</artifactId>

+ 0 - 5
iot-standalone/pom.xml

@@ -100,11 +100,6 @@
             <artifactId>iot-rule-engine</artifactId>
         </dependency>
 
-        <dependency>
-            <groupId>cc.iotkit</groupId>
-            <artifactId>iot-dao</artifactId>
-        </dependency>
-
         <dependency>
             <groupId>cc.iotkit</groupId>
             <artifactId>iot-component-server</artifactId>

+ 4 - 8
iot-standalone/src/main/java/cc/iotkit/manager/config/EmbeddedElasticSearchConfig.java

@@ -35,15 +35,11 @@ public class EmbeddedElasticSearchConfig {
 
     public static class ConfigProperty {
 
-        private String dataPath = "./data/elasticsearch";
-
-        private String homePath = "./";
-
-        private int port = 9200;
-
-        private String host = "0.0.0.0";
-
         public Settings.Builder applySetting(Settings.Builder settings) {
+            String dataPath = "./data/elasticsearch";
+            String homePath = "./";
+            int port = 9200;
+            String host = "0.0.0.0";
             return settings.put("network.host", host)
                     .put("http.port", port)
                     .put("path.data", dataPath)

+ 4 - 1
iot-standalone/src/main/java/cc/iotkit/manager/controller/DeviceController.java

@@ -161,7 +161,10 @@ public class DeviceController {
 
     @GetMapping(Constants.API_DEVICE.DETAIL)
     public DeviceInfo getDetail(@PathVariable("deviceId") String deviceId) {
-        return dataOwnerService.checkOwner(deviceInfoData.findByDeviceId(deviceId));
+        DeviceInfo deviceInfo = deviceInfoData.findByDeviceId(deviceId);
+        dataOwnerService.checkOwner(deviceInfo);
+        deviceInfo.setProperty(deviceInfoData.getProperties(deviceId));
+        return deviceInfo;
     }
 
     @GetMapping("/{pk}/{dn}")

+ 0 - 3
iot-standalone/src/main/java/cc/iotkit/manager/service/ExampleDataInit.java

@@ -10,7 +10,6 @@
 package cc.iotkit.manager.service;
 
 import cc.iotkit.common.utils.JsonUtil;
-import cc.iotkit.dao.*;
 import cc.iotkit.data.*;
 import cc.iotkit.model.Id;
 import cc.iotkit.model.OauthClient;
@@ -79,8 +78,6 @@ public class ExampleDataInit {
     @Autowired
     private IVirtualDeviceData virtualDeviceData;
 
-    @Autowired
-    private DeviceDao deviceDao;
 
     @Autowired
     private ElasticsearchRestTemplate restTemplate;

+ 34 - 34
iot-standalone/src/main/resources/application-dev.yml

@@ -9,46 +9,46 @@ spring:
       max-request-size: 12MB
 
   # <<=======内置H2数据库连接设置开始==========
-  #  jpa:
-  #    show-sql: true
-  #    hibernate:
-  #      ddl-auto: update
-  #    properties:
-  #      hibernate:
-  #        format_sql: true
-  #  datasource:
-  #    url: jdbc:h2:./data/iotkit;MODE=MySQL
-  #    username: sa
-  #    password: 123456
-  #    driverClassName: org.h2.Driver
-  #
-  #  ## 内置h2 web console设置
-  #    platform: h2
-  #  h2:
-  #    console:
-  #      enabled: true
-  #      path: /h2
-  #      settings:
-  #        web-allow-others: true
-  #  =======内置H2数据库连接设置结束==========>>
-
-  # <<==========mysql配置开始==============
-  datasource:
-    url: jdbc:mysql://127.0.0.1:3306/iotkit?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC&useSSL=false
-    driverClassName: com.mysql.cj.jdbc.Driver
-    username: root
-    password: 123456
-    validationQuery: SELECT 1
-    testOnBorrow: true
   jpa:
-    database: MySQL
-    database-platform: org.hibernate.dialect.MySQL5InnoDBDialect
-#    show-sql: true
+    #show-sql: true
     hibernate:
       ddl-auto: update
     properties:
       hibernate:
         format_sql: true
+  datasource:
+    url: jdbc:h2:./data/iotkit;MODE=MySQL
+    username: sa
+    password: 123456
+    driverClassName: org.h2.Driver
+
+  ## 内置h2 web console设置
+    platform: h2
+  h2:
+    console:
+      enabled: true
+      path: /h2
+      settings:
+        web-allow-others: true
+  #  =======内置H2数据库连接设置结束==========>>
+
+  # <<==========mysql配置开始==============
+#  datasource:
+#    url: jdbc:mysql://127.0.0.1:3306/iotkit?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC&useSSL=false
+#    driverClassName: com.mysql.cj.jdbc.Driver
+#    username: root
+#    password: 123456
+#    validationQuery: SELECT 1
+#    testOnBorrow: true
+#  jpa:
+#    database: MySQL
+#    database-platform: org.hibernate.dialect.MySQL5InnoDBDialect
+##    show-sql: true
+#    hibernate:
+#      ddl-auto: update
+#    properties:
+#      hibernate:
+#        format_sql: true
   # ============mysql配置结束============>>
 
   elasticsearch:

+ 33 - 33
iot-standalone/src/main/resources/application.yml

@@ -9,46 +9,46 @@ spring:
       max-request-size: 12MB
 
   # <<=======内置H2数据库连接设置开始==========
-#  jpa:
-#    show-sql: true
-#    hibernate:
-#      ddl-auto: update
-#    properties:
-#      hibernate:
-#        format_sql: true
-#  datasource:
-#    url: jdbc:h2:./data/iotkit;MODE=MySQL
-#    username: sa
-#    password: 123456
-#    driverClassName: org.h2.Driver
-#
-#  ## 内置h2 web console设置
-#    platform: h2
-#  h2:
-#    console:
-#      enabled: true
-#      path: /h2
-#      settings:
-#        web-allow-others: true
-#  =======内置H2数据库连接设置结束==========>>
-
-  # <<==========mysql配置开始==============
-  datasource:
-    url: jdbc:mysql://127.0.0.1:3306/iotkit?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC&useSSL=false
-    driverClassName: com.mysql.cj.jdbc.Driver
-    username: root
-    password: 123456
-    validationQuery: SELECT 1
-    testOnBorrow: true
   jpa:
-    database: MySQL
-    database-platform: org.hibernate.dialect.MySQL5InnoDBDialect
 #    show-sql: true
     hibernate:
       ddl-auto: update
     properties:
       hibernate:
         format_sql: true
+  datasource:
+    url: jdbc:h2:./data/iotkit;MODE=MySQL
+    username: sa
+    password: 123456
+    driverClassName: org.h2.Driver
+
+  ## 内置h2 web console设置
+    platform: h2
+  h2:
+    console:
+      enabled: true
+      path: /h2
+      settings:
+        web-allow-others: true
+#  =======内置H2数据库连接设置结束==========>>
+
+  # <<==========mysql配置开始==============
+#  datasource:
+#    url: jdbc:mysql://127.0.0.1:3306/iotkit?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC&useSSL=false
+#    driverClassName: com.mysql.cj.jdbc.Driver
+#    username: root
+#    password: 123456
+#    validationQuery: SELECT 1
+#    testOnBorrow: true
+#  jpa:
+#    database: MySQL
+#    database-platform: org.hibernate.dialect.MySQL5InnoDBDialect
+##    show-sql: true
+#    hibernate:
+#      ddl-auto: update
+#    properties:
+#      hibernate:
+#        format_sql: true
   # ============mysql配置结束============>>
 
   elasticsearch:

+ 1 - 1
iot-test-tool/iot-test-mqtt/src/main/java/cc/iotkit/test/mqtt/performance/ReportTest.java

@@ -39,7 +39,7 @@ public class ReportTest {
             Mqtt.brokerHost = args[0];
         }
 
-        int total = 500;
+        int total = 10;
         if (args.length > 1) {
             total = Integer.parseInt(args[1]);
         }

+ 0 - 5
iot-virtual-device/pom.xml

@@ -29,11 +29,6 @@
             <artifactId>iot-model</artifactId>
         </dependency>
 
-        <dependency>
-            <groupId>cc.iotkit</groupId>
-            <artifactId>iot-dao</artifactId>
-        </dependency>
-
         <dependency>
             <groupId>cc.iotkit</groupId>
             <artifactId>iot-component-server</artifactId>

+ 0 - 18
pom.xml

@@ -80,12 +80,6 @@
                 <version>1.18.24</version>
             </dependency>
 
-            <dependency>
-                <groupId>com.github.ben-manes.caffeine</groupId>
-                <artifactId>caffeine</artifactId>
-                <version>2.8.0</version>
-            </dependency>
-
             <dependency>
                 <groupId>org.apache.directory.studio</groupId>
                 <artifactId>org.apache.commons.codec</artifactId>
@@ -146,12 +140,6 @@
                 <version>7.15.2</version>
             </dependency>
 
-            <dependency>
-                <groupId>org.apache.rocketmq</groupId>
-                <artifactId>rocketmq-spring-boot-starter</artifactId>
-                <version>2.0.2</version>
-            </dependency>
-
             <dependency>
                 <groupId>joda-time</groupId>
                 <artifactId>joda-time</artifactId>
@@ -226,12 +214,6 @@
                 <version>${project.version}</version>
             </dependency>
 
-            <dependency>
-                <groupId>cc.iotkit</groupId>
-                <artifactId>iot-dao</artifactId>
-                <version>${project.version}</version>
-            </dependency>
-
             <dependency>
                 <groupId>cc.iotkit</groupId>
                 <artifactId>iot-common</artifactId>