Browse Source

适配器适配

xushili 5 months ago
parent
commit
5aa5e2b8e1
71 changed files with 1604 additions and 159 deletions
  1. 25 0
      .idea/compiler.xml
  2. 21 0
      .idea/dataSources.local.xml
  3. 2 0
      .idea/encodings.xml
  4. 35 0
      .idea/jarRepositories.xml
  5. 1 1
      .idea/misc.xml
  6. 0 13
      .idea/sqldialects.xml
  7. 124 0
      .idea/uiDesigner.xml
  8. 102 50
      .idea/workspace.xml
  9. 1 0
      common/pom.xml
  10. 18 2
      data-adapter/pom.xml
  11. 2 2
      data-adapter/src/main/java/com/gyee/dataadapter/DataAdapterApplication.java
  12. 2 0
      data-adapter/src/main/java/com/gyee/dataadapter/cache/MqttCache.java
  13. 3 3
      data-adapter/src/main/java/com/gyee/dataadapter/config/DataConverterManager.java
  14. 250 0
      data-adapter/src/main/java/com/gyee/dataadapter/config/DataConverterManager2.java
  15. 1 1
      data-adapter/src/main/java/com/gyee/dataadapter/config/MqttConfig.java
  16. 12 13
      data-adapter/src/main/java/com/gyee/dataadapter/config/PushCallback.java
  17. 75 15
      data-adapter/src/main/java/com/gyee/dataadapter/controller/AdapterController.java
  18. 4 3
      data-adapter/src/main/java/com/gyee/dataadapter/controller/SubscribeController.java
  19. 27 0
      data-adapter/src/main/java/com/gyee/dataadapter/dao/ILatestDao.java
  20. 1 1
      data-adapter/src/main/java/com/gyee/dataadapter/dao/MyWebClient.java
  21. 35 0
      data-adapter/src/main/java/com/gyee/dataadapter/dao/TsDataType.java
  22. 21 0
      data-adapter/src/main/java/com/gyee/dataadapter/dao/TsPoint.java
  23. 18 0
      data-adapter/src/main/java/com/gyee/dataadapter/dao/ViewTspointMapper.java
  24. 148 0
      data-adapter/src/main/java/com/gyee/dataadapter/dao_mqtt_influxdb_taos/MqttTaosLatestDao.java
  25. 89 0
      data-adapter/src/main/java/com/gyee/dataadapter/dao_mqtt_influxdb_taos/TaosConfig.java
  26. 69 0
      data-adapter/src/main/java/com/gyee/dataadapter/dao_mqtt_influxdb_taos/ThreadPoolTaskConfig.java
  27. 33 0
      data-adapter/src/main/java/com/gyee/dataadapter/entity/DoubleStatData.java
  28. 8 8
      data-adapter/src/main/java/com/gyee/dataadapter/entity/Login.java
  29. 90 8
      data-adapter/src/main/java/com/gyee/dataadapter/entity/PointData.java
  30. 1 1
      data-adapter/src/main/java/com/gyee/dataadapter/entity/PointInfo.java
  31. 14 0
      data-adapter/src/main/java/com/gyee/dataadapter/entity/SourcePointData.java
  32. 1 1
      data-adapter/src/main/java/com/gyee/dataadapter/entity/TotalPointData.java
  33. 98 0
      data-adapter/src/main/java/com/gyee/dataadapter/entity/ViewTspoint.java
  34. 18 3
      data-adapter/src/main/java/com/gyee/dataadapter/service/IAdapterService.java
  35. 109 0
      data-adapter/src/main/java/com/gyee/dataadapter/service/TsDataService.java
  36. 46 0
      data-adapter/src/main/java/com/gyee/dataadapter/service/TsPointService.java
  37. 70 22
      data-adapter/src/main/java/com/gyee/dataadapter/service/impl/AdapterServiceImpl.java
  38. 28 0
      data-adapter/target/classes/application.yaml
  39. BIN
      data-adapter/target/classes/com/gyee/dataadapter/DataAdapterApp.class
  40. BIN
      data-adapter/target/classes/com/gyee/dataadapter/cache/MqttCache.class
  41. BIN
      data-adapter/target/classes/com/gyee/dataadapter/config/DataConverterManager.class
  42. BIN
      data-adapter/target/classes/com/gyee/dataadapter/config/DataConverterManager2.class
  43. BIN
      data-adapter/target/classes/com/gyee/dataadapter/config/MqttConfig.class
  44. BIN
      data-adapter/target/classes/com/gyee/dataadapter/config/MqttConnect.class
  45. BIN
      data-adapter/target/classes/com/gyee/dataadapter/config/MqttServer.class
  46. BIN
      data-adapter/target/classes/com/gyee/dataadapter/config/PushCallback.class
  47. BIN
      data-adapter/target/classes/com/gyee/dataadapter/controller/AdapterController.class
  48. BIN
      data-adapter/target/classes/com/gyee/dataadapter/controller/SubscribeController.class
  49. BIN
      data-adapter/target/classes/com/gyee/dataadapter/dao/ILatestDao.class
  50. BIN
      data-adapter/target/classes/com/gyee/dataadapter/dao/MyWebClient.class
  51. BIN
      data-adapter/target/classes/com/gyee/dataadapter/dao/TsDataType.class
  52. BIN
      data-adapter/target/classes/com/gyee/dataadapter/dao/TsPoint.class
  53. BIN
      data-adapter/target/classes/com/gyee/dataadapter/dao/ViewTspointMapper.class
  54. BIN
      data-adapter/target/classes/com/gyee/dataadapter/dao_mqtt_influxdb_taos/MqttTaosLatestDao.class
  55. BIN
      data-adapter/target/classes/com/gyee/dataadapter/dao_mqtt_influxdb_taos/TaosConfig.class
  56. BIN
      data-adapter/target/classes/com/gyee/dataadapter/dao_mqtt_influxdb_taos/ThreadPoolTaskConfig.class
  57. BIN
      data-adapter/target/classes/com/gyee/dataadapter/entity/DoubleStatData.class
  58. BIN
      data-adapter/target/classes/com/gyee/dataadapter/entity/Login.class
  59. BIN
      data-adapter/target/classes/com/gyee/dataadapter/entity/PointData.class
  60. BIN
      data-adapter/target/classes/com/gyee/dataadapter/entity/PointInfo.class
  61. BIN
      data-adapter/target/classes/com/gyee/dataadapter/entity/SourcePointData.class
  62. BIN
      data-adapter/target/classes/com/gyee/dataadapter/entity/TotalPointData.class
  63. BIN
      data-adapter/target/classes/com/gyee/dataadapter/entity/User.class
  64. BIN
      data-adapter/target/classes/com/gyee/dataadapter/entity/ViewTspoint.class
  65. BIN
      data-adapter/target/classes/com/gyee/dataadapter/service/IAdapterService.class
  66. BIN
      data-adapter/target/classes/com/gyee/dataadapter/service/TsDataService.class
  67. BIN
      data-adapter/target/classes/com/gyee/dataadapter/service/TsPointService.class
  68. BIN
      data-adapter/target/classes/com/gyee/dataadapter/service/impl/AdapterServiceImpl.class
  69. 1 0
      generationXK-service/pom.xml
  70. 1 7
      pom.xml
  71. 0 5
      runeconomy-xk/pom.xml

+ 25 - 0
.idea/compiler.xml

@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="CompilerConfiguration">
+    <annotationProcessing>
+      <profile default="true" name="Default" enabled="true" />
+      <profile name="Maven default annotation processors profile" enabled="true">
+        <sourceOutputDir name="target/generated-sources/annotations" />
+        <sourceTestOutputDir name="target/generated-test-sources/test-annotations" />
+        <outputRelativeToContentRoot value="true" />
+        <module name="common" />
+        <module name="generationXK-service" />
+        <module name="runeconomy-xk" />
+        <module name="data-adapter" />
+      </profile>
+    </annotationProcessing>
+  </component>
+  <component name="JavacSettings">
+    <option name="ADDITIONAL_OPTIONS_OVERRIDE">
+      <module name="common" options="-parameters" />
+      <module name="data-adapter" options="-parameters" />
+      <module name="generationXK-service" options="-parameters" />
+      <module name="runeconomy-xk" options="-parameters" />
+    </option>
+  </component>
+</project>

+ 21 - 0
.idea/dataSources.local.xml

@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="dataSourceStorageLocal" created-in="IU-242.21829.142">
+    <data-source name="admin_1" uuid="2ec8658d-a635-4464-ba73-a1bc060beb5e">
+      <database-info product="" version="" jdbc-version="" driver-name="" driver-version="" dbms="POSTGRES" />
+      <schema-mapping />
+    </data-source>
+    <data-source name="smartwindpower@10.220.1.5" uuid="27031d7f-c412-4296-8c42-17a6aee4daad">
+      <database-info product="" version="" jdbc-version="" driver-name="" driver-version="" dbms="POSTGRES" />
+      <schema-mapping />
+    </data-source>
+    <data-source name="postgres@123.60.219.66" uuid="43053514-c798-46b8-9730-774126a5f46e">
+      <database-info product="" version="" jdbc-version="" driver-name="" driver-version="" dbms="POSTGRES" />
+      <schema-mapping />
+    </data-source>
+    <data-source name="postgres@123.60.219.66 [2]" uuid="855613aa-fd31-4a63-b3a3-1c2d70df693e">
+      <database-info product="" version="" jdbc-version="" driver-name="" driver-version="" dbms="POSTGRES" />
+      <schema-mapping />
+    </data-source>
+  </component>
+</project>

+ 2 - 0
.idea/encodings.xml

@@ -5,6 +5,8 @@
     <file url="file://$APPLICATION_HOME_DIR$/jbr/bin/src/main/resources" charset="UTF-8" />
     <file url="file://$PROJECT_DIR$/common/src/main/java" charset="UTF-8" />
     <file url="file://$PROJECT_DIR$/common/src/main/resources" charset="UTF-8" />
+    <file url="file://$PROJECT_DIR$/data-adapter/src/main/java" charset="UTF-8" />
+    <file url="file://$PROJECT_DIR$/generationXK-service/src/main/java" charset="UTF-8" />
     <file url="file://$PROJECT_DIR$/runeconomy-xk/src/main/java" charset="UTF-8" />
     <file url="file://$PROJECT_DIR$/src/main/java" charset="UTF-8" />
     <file url="file://$PROJECT_DIR$/src/main/resources" charset="UTF-8" />

+ 35 - 0
.idea/jarRepositories.xml

@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="RemoteRepositoriesConfiguration">
+    <remote-repository>
+      <option name="id" value="central" />
+      <option name="name" value="Central Repository" />
+      <option name="url" value="https://repo.maven.apache.org/maven2" />
+    </remote-repository>
+    <remote-repository>
+      <option name="id" value="alimaven" />
+      <option name="name" value="aliyun maven" />
+      <option name="url" value="http://maven.aliyun.com/nexus/content/groups/public" />
+    </remote-repository>
+    <remote-repository>
+      <option name="id" value="nexus" />
+      <option name="name" value="nexus" />
+      <option name="url" value="http://maven.aliyun.com/nexus/content/groups/public" />
+    </remote-repository>
+    <remote-repository>
+      <option name="id" value="central" />
+      <option name="name" value="Maven Central repository" />
+      <option name="url" value="https://repo1.maven.org/maven2" />
+    </remote-repository>
+    <remote-repository>
+      <option name="id" value="central" />
+      <option name="name" value="Central Repository" />
+      <option name="url" value="http://maven.aliyun.com/nexus/content/groups/public" />
+    </remote-repository>
+    <remote-repository>
+      <option name="id" value="jboss.community" />
+      <option name="name" value="JBoss Community repository" />
+      <option name="url" value="https://repository.jboss.org/nexus/content/repositories/public/" />
+    </remote-repository>
+  </component>
+</project>

+ 1 - 1
.idea/misc.xml

@@ -8,7 +8,7 @@
       </list>
     </option>
   </component>
-  <component name="ProjectRootManager" version="2" languageLevel="JDK_1_8" default="true" project-jdk-name="1.8" project-jdk-type="JavaSDK">
+  <component name="ProjectRootManager" version="2" languageLevel="JDK_1_8" default="true" project-jdk-name="1.8 (2)" project-jdk-type="JavaSDK">
     <output url="file://$PROJECT_DIR$/out" />
   </component>
 </project>

+ 0 - 13
.idea/sqldialects.xml

@@ -1,13 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project version="4">
-  <component name="SqlDialectMappings">
-    <file url="file://$PROJECT_DIR$/../宁夏分公司/基础表配置/xxl-job/xxl_job_group.sql" dialect="PostgreSQL" />
-    <file url="file://$PROJECT_DIR$/../宁夏分公司/基础表配置/xxl-job/xxl_job_info.sql" dialect="PostgreSQL" />
-    <file url="file://$PROJECT_DIR$/../宁夏分公司/基础表配置/xxl-job/xxl_job_lock.sql" dialect="PostgreSQL" />
-    <file url="file://$PROJECT_DIR$/../宁夏分公司/基础表配置/xxl-job/xxl_job_log.sql" dialect="PostgreSQL" />
-    <file url="file://$PROJECT_DIR$/../宁夏分公司/基础表配置/xxl-job/xxl_job_log_report.sql" dialect="PostgreSQL" />
-    <file url="file://$PROJECT_DIR$/../宁夏分公司/基础表配置/xxl-job/xxl_job_logglue.sql" dialect="PostgreSQL" />
-    <file url="file://$PROJECT_DIR$/../宁夏分公司/基础表配置/xxl-job/xxl_job_registry.sql" dialect="PostgreSQL" />
-    <file url="file://$PROJECT_DIR$/../宁夏分公司/基础表配置/xxl-job/xxl_job_user.sql" dialect="PostgreSQL" />
-  </component>
-</project>

+ 124 - 0
.idea/uiDesigner.xml

@@ -0,0 +1,124 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="Palette2">
+    <group name="Swing">
+      <item class="com.intellij.uiDesigner.HSpacer" tooltip-text="Horizontal Spacer" icon="/com/intellij/uiDesigner/icons/hspacer.svg" removable="false" auto-create-binding="false" can-attach-label="false">
+        <default-constraints vsize-policy="1" hsize-policy="6" anchor="0" fill="1" />
+      </item>
+      <item class="com.intellij.uiDesigner.VSpacer" tooltip-text="Vertical Spacer" icon="/com/intellij/uiDesigner/icons/vspacer.svg" removable="false" auto-create-binding="false" can-attach-label="false">
+        <default-constraints vsize-policy="6" hsize-policy="1" anchor="0" fill="2" />
+      </item>
+      <item class="javax.swing.JPanel" icon="/com/intellij/uiDesigner/icons/panel.svg" removable="false" auto-create-binding="false" can-attach-label="false">
+        <default-constraints vsize-policy="3" hsize-policy="3" anchor="0" fill="3" />
+      </item>
+      <item class="javax.swing.JScrollPane" icon="/com/intellij/uiDesigner/icons/scrollPane.svg" removable="false" auto-create-binding="false" can-attach-label="true">
+        <default-constraints vsize-policy="7" hsize-policy="7" anchor="0" fill="3" />
+      </item>
+      <item class="javax.swing.JButton" icon="/com/intellij/uiDesigner/icons/button.svg" removable="false" auto-create-binding="true" can-attach-label="false">
+        <default-constraints vsize-policy="0" hsize-policy="3" anchor="0" fill="1" />
+        <initial-values>
+          <property name="text" value="Button" />
+        </initial-values>
+      </item>
+      <item class="javax.swing.JRadioButton" icon="/com/intellij/uiDesigner/icons/radioButton.svg" removable="false" auto-create-binding="true" can-attach-label="false">
+        <default-constraints vsize-policy="0" hsize-policy="3" anchor="8" fill="0" />
+        <initial-values>
+          <property name="text" value="RadioButton" />
+        </initial-values>
+      </item>
+      <item class="javax.swing.JCheckBox" icon="/com/intellij/uiDesigner/icons/checkBox.svg" removable="false" auto-create-binding="true" can-attach-label="false">
+        <default-constraints vsize-policy="0" hsize-policy="3" anchor="8" fill="0" />
+        <initial-values>
+          <property name="text" value="CheckBox" />
+        </initial-values>
+      </item>
+      <item class="javax.swing.JLabel" icon="/com/intellij/uiDesigner/icons/label.svg" removable="false" auto-create-binding="false" can-attach-label="false">
+        <default-constraints vsize-policy="0" hsize-policy="0" anchor="8" fill="0" />
+        <initial-values>
+          <property name="text" value="Label" />
+        </initial-values>
+      </item>
+      <item class="javax.swing.JTextField" icon="/com/intellij/uiDesigner/icons/textField.svg" removable="false" auto-create-binding="true" can-attach-label="true">
+        <default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1">
+          <preferred-size width="150" height="-1" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JPasswordField" icon="/com/intellij/uiDesigner/icons/passwordField.svg" removable="false" auto-create-binding="true" can-attach-label="true">
+        <default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1">
+          <preferred-size width="150" height="-1" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JFormattedTextField" icon="/com/intellij/uiDesigner/icons/formattedTextField.svg" removable="false" auto-create-binding="true" can-attach-label="true">
+        <default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1">
+          <preferred-size width="150" height="-1" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JTextArea" icon="/com/intellij/uiDesigner/icons/textArea.svg" removable="false" auto-create-binding="true" can-attach-label="true">
+        <default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
+          <preferred-size width="150" height="50" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JTextPane" icon="/com/intellij/uiDesigner/icons/textPane.svg" removable="false" auto-create-binding="true" can-attach-label="true">
+        <default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
+          <preferred-size width="150" height="50" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JEditorPane" icon="/com/intellij/uiDesigner/icons/editorPane.svg" removable="false" auto-create-binding="true" can-attach-label="true">
+        <default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
+          <preferred-size width="150" height="50" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JComboBox" icon="/com/intellij/uiDesigner/icons/comboBox.svg" removable="false" auto-create-binding="true" can-attach-label="true">
+        <default-constraints vsize-policy="0" hsize-policy="2" anchor="8" fill="1" />
+      </item>
+      <item class="javax.swing.JTable" icon="/com/intellij/uiDesigner/icons/table.svg" removable="false" auto-create-binding="true" can-attach-label="false">
+        <default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
+          <preferred-size width="150" height="50" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JList" icon="/com/intellij/uiDesigner/icons/list.svg" removable="false" auto-create-binding="true" can-attach-label="false">
+        <default-constraints vsize-policy="6" hsize-policy="2" anchor="0" fill="3">
+          <preferred-size width="150" height="50" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JTree" icon="/com/intellij/uiDesigner/icons/tree.svg" removable="false" auto-create-binding="true" can-attach-label="false">
+        <default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
+          <preferred-size width="150" height="50" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JTabbedPane" icon="/com/intellij/uiDesigner/icons/tabbedPane.svg" removable="false" auto-create-binding="true" can-attach-label="false">
+        <default-constraints vsize-policy="3" hsize-policy="3" anchor="0" fill="3">
+          <preferred-size width="200" height="200" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JSplitPane" icon="/com/intellij/uiDesigner/icons/splitPane.svg" removable="false" auto-create-binding="false" can-attach-label="false">
+        <default-constraints vsize-policy="3" hsize-policy="3" anchor="0" fill="3">
+          <preferred-size width="200" height="200" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JSpinner" icon="/com/intellij/uiDesigner/icons/spinner.svg" removable="false" auto-create-binding="true" can-attach-label="true">
+        <default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1" />
+      </item>
+      <item class="javax.swing.JSlider" icon="/com/intellij/uiDesigner/icons/slider.svg" removable="false" auto-create-binding="true" can-attach-label="false">
+        <default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1" />
+      </item>
+      <item class="javax.swing.JSeparator" icon="/com/intellij/uiDesigner/icons/separator.svg" removable="false" auto-create-binding="false" can-attach-label="false">
+        <default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3" />
+      </item>
+      <item class="javax.swing.JProgressBar" icon="/com/intellij/uiDesigner/icons/progressbar.svg" removable="false" auto-create-binding="true" can-attach-label="false">
+        <default-constraints vsize-policy="0" hsize-policy="6" anchor="0" fill="1" />
+      </item>
+      <item class="javax.swing.JToolBar" icon="/com/intellij/uiDesigner/icons/toolbar.svg" removable="false" auto-create-binding="false" can-attach-label="false">
+        <default-constraints vsize-policy="0" hsize-policy="6" anchor="0" fill="1">
+          <preferred-size width="-1" height="20" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JToolBar$Separator" icon="/com/intellij/uiDesigner/icons/toolbarSeparator.svg" removable="false" auto-create-binding="false" can-attach-label="false">
+        <default-constraints vsize-policy="0" hsize-policy="0" anchor="0" fill="1" />
+      </item>
+      <item class="javax.swing.JScrollBar" icon="/com/intellij/uiDesigner/icons/scrollbar.svg" removable="false" auto-create-binding="true" can-attach-label="false">
+        <default-constraints vsize-policy="6" hsize-policy="0" anchor="0" fill="2" />
+      </item>
+    </group>
+  </component>
+</project>

+ 102 - 50
.idea/workspace.xml

@@ -5,27 +5,45 @@
   </component>
   <component name="ChangeListManager">
     <list default="true" id="c9251c3e-9f2f-4b6c-a5f7-503156fe13c0" name="Changes" comment="宁夏风公司">
-      <change afterPath="$PROJECT_DIR$/.idea/.gitignore" afterDir="false" />
-      <change afterPath="$PROJECT_DIR$/.idea/vcs.xml" afterDir="false" />
-      <change afterPath="$PROJECT_DIR$/runeconomy-xk/src/main/java/com/gyee/runeconomy/initalcache/CacheService.java" afterDir="false" />
-      <change afterPath="$PROJECT_DIR$/runeconomy-xk/src/main/java/com/gyee/runeconomy/initalcache/test.java" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/.idea/compiler.xml" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/.idea/jarRepositories.xml" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/.idea/uiDesigner.xml" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/data-adapter/src/main/java/com/gyee/dataadapter/config/DataConverterManager2.java" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/data-adapter/src/main/java/com/gyee/dataadapter/dao/ILatestDao.java" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/data-adapter/src/main/java/com/gyee/dataadapter/dao/TsDataType.java" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/data-adapter/src/main/java/com/gyee/dataadapter/dao/TsPoint.java" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/data-adapter/src/main/java/com/gyee/dataadapter/dao/ViewTspointMapper.java" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/data-adapter/src/main/java/com/gyee/dataadapter/dao_mqtt_influxdb_taos/MqttTaosLatestDao.java" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/data-adapter/src/main/java/com/gyee/dataadapter/dao_mqtt_influxdb_taos/TaosConfig.java" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/data-adapter/src/main/java/com/gyee/dataadapter/dao_mqtt_influxdb_taos/ThreadPoolTaskConfig.java" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/data-adapter/src/main/java/com/gyee/dataadapter/entity/DoubleStatData.java" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/data-adapter/src/main/java/com/gyee/dataadapter/entity/SourcePointData.java" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/data-adapter/src/main/java/com/gyee/dataadapter/entity/ViewTspoint.java" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/data-adapter/src/main/java/com/gyee/dataadapter/service/TsDataService.java" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/data-adapter/src/main/java/com/gyee/dataadapter/service/TsPointService.java" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/.idea/encodings.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/encodings.xml" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/.idea/misc.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/misc.xml" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/.idea/sqldialects.xml" beforeDir="false" />
       <change beforePath="$PROJECT_DIR$/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/common/pom.xml" beforeDir="false" afterPath="$PROJECT_DIR$/common/pom.xml" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/data-adapter/pom.xml" beforeDir="false" afterPath="$PROJECT_DIR$/data-adapter/pom.xml" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/data-adapter/src/main/java/com/gyee/dataadapter/DataAdapterApplication.java" beforeDir="false" afterPath="$PROJECT_DIR$/data-adapter/src/main/java/com/gyee/dataadapter/DataAdapterApp.java" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/data-adapter/src/main/java/com/gyee/dataadapter/cache/MqttCache.java" beforeDir="false" afterPath="$PROJECT_DIR$/data-adapter/src/main/java/com/gyee/dataadapter/cache/MqttCache.java" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/data-adapter/src/main/java/com/gyee/dataadapter/config/DataConverterManager.java" beforeDir="false" afterPath="$PROJECT_DIR$/data-adapter/src/main/java/com/gyee/dataadapter/config/DataConverterManager.java" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/data-adapter/src/main/java/com/gyee/dataadapter/config/MqttConfig.java" beforeDir="false" afterPath="$PROJECT_DIR$/data-adapter/src/main/java/com/gyee/dataadapter/config/MqttConfig.java" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/data-adapter/src/main/java/com/gyee/dataadapter/config/PushCallback.java" beforeDir="false" afterPath="$PROJECT_DIR$/data-adapter/src/main/java/com/gyee/dataadapter/config/PushCallback.java" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/data-adapter/src/main/java/com/gyee/dataadapter/controller/AdapterController.java" beforeDir="false" afterPath="$PROJECT_DIR$/data-adapter/src/main/java/com/gyee/dataadapter/controller/AdapterController.java" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/data-adapter/src/main/java/com/gyee/dataadapter/controller/SubscribeController.java" beforeDir="false" afterPath="$PROJECT_DIR$/data-adapter/src/main/java/com/gyee/dataadapter/controller/SubscribeController.java" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/data-adapter/src/main/java/com/gyee/dataadapter/dao/MyWebClient.java" beforeDir="false" afterPath="$PROJECT_DIR$/data-adapter/src/main/java/com/gyee/dataadapter/dao/MyWebClient.java" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/data-adapter/src/main/java/com/gyee/dataadapter/entity/Login.java" beforeDir="false" afterPath="$PROJECT_DIR$/data-adapter/src/main/java/com/gyee/dataadapter/entity/Login.java" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/data-adapter/src/main/java/com/gyee/dataadapter/entity/PointData.java" beforeDir="false" afterPath="$PROJECT_DIR$/data-adapter/src/main/java/com/gyee/dataadapter/entity/PointData.java" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/data-adapter/src/main/java/com/gyee/dataadapter/entity/PointInfo.java" beforeDir="false" afterPath="$PROJECT_DIR$/data-adapter/src/main/java/com/gyee/dataadapter/entity/PointInfo.java" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/data-adapter/src/main/java/com/gyee/dataadapter/entity/TotalPointData.java" beforeDir="false" afterPath="$PROJECT_DIR$/data-adapter/src/main/java/com/gyee/dataadapter/entity/TotalPointData.java" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/data-adapter/src/main/java/com/gyee/dataadapter/service/IAdapterService.java" beforeDir="false" afterPath="$PROJECT_DIR$/data-adapter/src/main/java/com/gyee/dataadapter/service/IAdapterService.java" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/data-adapter/src/main/java/com/gyee/dataadapter/service/impl/AdapterServiceImpl.java" beforeDir="false" afterPath="$PROJECT_DIR$/data-adapter/src/main/java/com/gyee/dataadapter/service/impl/AdapterServiceImpl.java" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/generationXK-service/pom.xml" beforeDir="false" afterPath="$PROJECT_DIR$/generationXK-service/pom.xml" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/pom.xml" beforeDir="false" afterPath="$PROJECT_DIR$/pom.xml" afterDir="false" />
       <change beforePath="$PROJECT_DIR$/runeconomy-xk/pom.xml" beforeDir="false" afterPath="$PROJECT_DIR$/runeconomy-xk/pom.xml" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/runeconomy-xk/src/main/java/com/gyee/runeconomy/init/CacheContext.java" beforeDir="false" afterPath="$PROJECT_DIR$/runeconomy-xk/src/main/java/com/gyee/runeconomy/init/CacheContext.java" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/runeconomy-xk/src/main/java/com/gyee/runeconomy/service/Forecast/ForecastService.java" beforeDir="false" afterPath="$PROJECT_DIR$/runeconomy-xk/src/main/java/com/gyee/runeconomy/service/Forecast/ForecastService.java" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/runeconomy-xk/src/main/java/com/gyee/runeconomy/service/Windresourceanalysis/WindresourceanalysisService.java" beforeDir="false" afterPath="$PROJECT_DIR$/runeconomy-xk/src/main/java/com/gyee/runeconomy/service/Windresourceanalysis/WindresourceanalysisService.java" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/runeconomy-xk/src/main/java/com/gyee/runeconomy/service/auto/impl/ProEconEquipmentInfoDayTopServiceImpl.java" beforeDir="false" afterPath="$PROJECT_DIR$/runeconomy-xk/src/main/java/com/gyee/runeconomy/service/auto/impl/ProEconEquipmentInfoDayTopServiceImpl.java" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/runeconomy-xk/src/main/java/com/gyee/runeconomy/service/bmk/BenchmarkingService.java" beforeDir="false" afterPath="$PROJECT_DIR$/runeconomy-xk/src/main/java/com/gyee/runeconomy/service/bmk/BenchmarkingService.java" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/runeconomy-xk/src/main/java/com/gyee/runeconomy/service/monitor/ComprehensiveService.java" beforeDir="false" afterPath="$PROJECT_DIR$/runeconomy-xk/src/main/java/com/gyee/runeconomy/service/monitor/ComprehensiveService.java" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/runeconomy-xk/src/main/java/com/gyee/runeconomy/service/monitor/LandformsService.java" beforeDir="false" afterPath="$PROJECT_DIR$/runeconomy-xk/src/main/java/com/gyee/runeconomy/service/monitor/LandformsService.java" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/runeconomy-xk/src/main/java/com/gyee/runeconomy/service/monitor/MonitorService.java" beforeDir="false" afterPath="$PROJECT_DIR$/runeconomy-xk/src/main/java/com/gyee/runeconomy/service/monitor/MonitorService.java" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/runeconomy-xk/src/main/java/com/gyee/runeconomy/service/monitor/MonitorprojectplanService.java" beforeDir="false" afterPath="$PROJECT_DIR$/runeconomy-xk/src/main/java/com/gyee/runeconomy/service/monitor/MonitorprojectplanService.java" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/runeconomy-xk/src/main/java/com/gyee/runeconomy/service/monitor/MonitorvalueService.java" beforeDir="false" afterPath="$PROJECT_DIR$/runeconomy-xk/src/main/java/com/gyee/runeconomy/service/monitor/MonitorvalueService.java" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/runeconomy-xk/src/main/java/com/gyee/runeconomy/service/monitor/ProjectPlanService.java" beforeDir="false" afterPath="$PROJECT_DIR$/runeconomy-xk/src/main/java/com/gyee/runeconomy/service/monitor/ProjectPlanService.java" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/runeconomy-xk/src/main/java/com/gyee/runeconomy/service/monitor/StatusService.java" beforeDir="false" afterPath="$PROJECT_DIR$/runeconomy-xk/src/main/java/com/gyee/runeconomy/service/monitor/StatusService.java" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/runeconomy-xk/src/main/java/com/gyee/runeconomy/service/specific/SpecificService.java" beforeDir="false" afterPath="$PROJECT_DIR$/runeconomy-xk/src/main/java/com/gyee/runeconomy/service/specific/SpecificService.java" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/runeconomy-xk/src/main/java/com/gyee/runeconomy/service/threerate/ThreeRateService.java" beforeDir="false" afterPath="$PROJECT_DIR$/runeconomy-xk/src/main/java/com/gyee/runeconomy/service/threerate/ThreeRateService.java" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/runeconomy-xk/src/main/resources/application-yun.yml" beforeDir="false" afterPath="$PROJECT_DIR$/runeconomy-xk/src/main/resources/application-yun.yml" afterDir="false" />
     </list>
     <option name="SHOW_DIALOG" value="false" />
     <option name="HIGHLIGHT_CONFLICTS" value="true" />
@@ -75,47 +93,65 @@
     <option name="hideEmptyMiddlePackages" value="true" />
     <option name="showLibraryContents" value="true" />
   </component>
-  <component name="PropertiesComponent">{
-  &quot;keyToString&quot;: {
-    &quot;JUnit.test.test1.executor&quot;: &quot;Debug&quot;,
-    &quot;Maven.common [clean].executor&quot;: &quot;Run&quot;,
-    &quot;Maven.common [compile].executor&quot;: &quot;Run&quot;,
-    &quot;Maven.common [package].executor&quot;: &quot;Run&quot;,
-    &quot;Maven.runeconomy-xk [clean].executor&quot;: &quot;Run&quot;,
-    &quot;Maven.runeconomy-xk [compile].executor&quot;: &quot;Run&quot;,
-    &quot;Maven.runeconomy-xk [package].executor&quot;: &quot;Run&quot;,
-    &quot;RequestMappingsPanelOrder0&quot;: &quot;0&quot;,
-    &quot;RequestMappingsPanelOrder1&quot;: &quot;1&quot;,
-    &quot;RequestMappingsPanelWidth0&quot;: &quot;75&quot;,
-    &quot;RequestMappingsPanelWidth1&quot;: &quot;75&quot;,
-    &quot;RunOnceActivity.OpenProjectViewOnStart&quot;: &quot;true&quot;,
-    &quot;RunOnceActivity.ShowReadmeOnStart&quot;: &quot;true&quot;,
-    &quot;Spring Boot.RunEconomyApplication.executor&quot;: &quot;Debug&quot;,
-    &quot;WebServerToolWindowFactoryState&quot;: &quot;false&quot;,
-    &quot;git-widget-placeholder&quot;: &quot;master&quot;,
-    &quot;kotlin-language-version-configured&quot;: &quot;true&quot;,
-    &quot;last_opened_file_path&quot;: &quot;D:/work/workspaces/runeconomy-nx&quot;,
-    &quot;node.js.detected.package.eslint&quot;: &quot;true&quot;,
-    &quot;node.js.detected.package.tslint&quot;: &quot;true&quot;,
-    &quot;node.js.selected.package.eslint&quot;: &quot;(autodetect)&quot;,
-    &quot;node.js.selected.package.tslint&quot;: &quot;(autodetect)&quot;,
-    &quot;nodejs_package_manager_path&quot;: &quot;npm&quot;,
-    &quot;settings.editor.selected.configurable&quot;: &quot;reference.settings.project.maven.repository.indices&quot;,
-    &quot;vue.rearranger.settings.migration&quot;: &quot;true&quot;
+  <component name="PropertiesComponent"><![CDATA[{
+  "keyToString": {
+    "JUnit.test.test1.executor": "Debug",
+    "Maven.common [clean].executor": "Run",
+    "Maven.common [compile].executor": "Run",
+    "Maven.common [package].executor": "Run",
+    "Maven.runeconomy-xk [clean].executor": "Run",
+    "Maven.runeconomy-xk [compile].executor": "Run",
+    "Maven.runeconomy-xk [package].executor": "Run",
+    "RequestMappingsPanelOrder0": "0",
+    "RequestMappingsPanelOrder1": "1",
+    "RequestMappingsPanelWidth0": "75",
+    "RequestMappingsPanelWidth1": "75",
+    "RunOnceActivity.OpenProjectViewOnStart": "true",
+    "RunOnceActivity.ShowReadmeOnStart": "true",
+    "SHARE_PROJECT_CONFIGURATION_FILES": "true",
+    "Spring Boot.DataAdapterApplication.executor": "Debug",
+    "Spring Boot.RunEconomyApplication.executor": "Debug",
+    "WebServerToolWindowFactoryState": "false",
+    "git-widget-placeholder": "master",
+    "kotlin-language-version-configured": "true",
+    "last_opened_file_path": "D:/ruoyi/runeconomy-nx/data-adapter/src/main/java/com/gyee/dataadapter/entity",
+    "node.js.detected.package.eslint": "true",
+    "node.js.detected.package.tslint": "true",
+    "node.js.selected.package.eslint": "(autodetect)",
+    "node.js.selected.package.tslint": "(autodetect)",
+    "nodejs_package_manager_path": "npm",
+    "project.structure.last.edited": "问题",
+    "project.structure.proportion": "0.15",
+    "project.structure.side.proportion": "0.2",
+    "run.configurations.included.in.services": "true",
+    "settings.editor.selected.configurable": "reference.settings.project.maven.repository.indices",
+    "vue.rearranger.settings.migration": "true"
   }
-}</component>
+}]]></component>
   <component name="ReactorSettings">
     <option name="notificationShown" value="true" />
   </component>
   <component name="RecentsManager">
     <key name="CopyFile.RECENT_KEYS">
+      <recent name="D:\ruoyi\runeconomy-nx\data-adapter\src\main\java\com\gyee\dataadapter\entity" />
       <recent name="D:\work\workspaces\runeconomy-nx\runeconomy-xk\src\main\java\com\gyee\runeconomy" />
     </key>
     <key name="CopyClassDialog.RECENTS_KEY">
+      <recent name="com.gyee.dataadapter.config" />
+      <recent name="com.gyee.dataadapter.service" />
+      <recent name="com.gyee.dataadapter.entity" />
       <recent name="com.gyee.runeconomy.initalcache" />
     </key>
   </component>
-  <component name="RunManager" selected="Spring Boot.RunEconomyApplication">
+  <component name="RunDashboard">
+    <option name="configurationTypes">
+      <set>
+        <option value="MicronautRunConfigurationType" />
+        <option value="SpringBootApplicationConfigurationType" />
+      </set>
+    </option>
+  </component>
+  <component name="RunManager" selected="Spring Boot.DataAdapterApplication">
     <configuration name="test.test1" type="JUnit" factoryName="JUnit" temporary="true" nameIsGenerated="true">
       <module name="runeconomy-xk" />
       <extension name="coverage">
@@ -152,6 +188,20 @@
         <option name="Make" enabled="true" />
       </method>
     </configuration>
+    <configuration name="DataAdapterApp" type="SpringBootApplicationConfigurationType" factoryName="Spring Boot" nameIsGenerated="true">
+      <module name="data-adapter" />
+      <option name="SPRING_BOOT_MAIN_CLASS" value="com.gyee.dataadapter.DataAdapterApp" />
+      <method v="2">
+        <option name="Make" enabled="true" />
+      </method>
+    </configuration>
+    <configuration name="GenerationMain" type="SpringBootApplicationConfigurationType" factoryName="Spring Boot" nameIsGenerated="true">
+      <module name="generationXK-service" />
+      <option name="SPRING_BOOT_MAIN_CLASS" value="com.gyee.generation.GenerationMain" />
+      <method v="2">
+        <option name="Make" enabled="true" />
+      </method>
+    </configuration>
     <configuration name="RunEconomyApplication" type="SpringBootApplicationConfigurationType" factoryName="Spring Boot" nameIsGenerated="true">
       <module name="runeconomy-xk" />
       <option name="SPRING_BOOT_MAIN_CLASS" value="com.gyee.RunEconomyApplication" />
@@ -168,8 +218,7 @@
   <component name="SharedIndexes">
     <attachedChunks>
       <set>
-        <option value="bundled-jdk-9f38398b9061-39b83d9b5494-intellij.indexing.shared.core-IU-241.18034.62" />
-        <option value="bundled-js-predefined-1d06a55b98c1-0b3e54e931b4-JavaScript-IU-241.18034.62" />
+        <option value="bundled-jdk-9823dce3aa75-b114ca120d71-intellij.indexing.shared.core-IU-242.21829.142" />
       </set>
     </attachedChunks>
   </component>
@@ -195,6 +244,9 @@
       <workItem from="1722317965884" duration="4144000" />
       <workItem from="1722406210722" duration="132000" />
       <workItem from="1722999793754" duration="327000" />
+      <workItem from="1726121000186" duration="2113000" />
+      <workItem from="1726128426495" duration="6375000" />
+      <workItem from="1726275498465" duration="20700000" />
     </task>
     <task id="LOCAL-00001" summary="宁夏风公司">
       <option name="closed" value="true" />

+ 1 - 0
common/pom.xml

@@ -58,6 +58,7 @@
         <dependency>
             <groupId>com.baomidou</groupId>
             <artifactId>mybatis-plus-boot-starter</artifactId>
+            <version>3.5.7</version>
         </dependency>
         <dependency>
             <groupId>com.baomidou</groupId>

+ 18 - 2
data-adapter/pom.xml

@@ -25,6 +25,12 @@
         </dependency>
 
         <dependency>
+            <groupId>com.baomidou</groupId>
+            <artifactId>mybatis-plus-boot-starter</artifactId>
+            <version>${mybatis.plus.boot.starter.version}</version>
+        </dependency>
+
+        <dependency>
             <groupId>org.postgresql</groupId>
             <artifactId>postgresql</artifactId>
             <scope>runtime</scope>
@@ -72,9 +78,19 @@
             <version>1.2.8</version>
         </dependency>
         <dependency>
+            <groupId>cn.hutool</groupId>
+            <artifactId>hutool-all</artifactId>
+            <version>5.1.1</version>
+        </dependency>
+        <dependency>
             <groupId>org.springframework.boot</groupId>
             <artifactId>spring-boot</artifactId>
         </dependency>
+        <dependency>
+            <groupId>com.taosdata.jdbc</groupId>
+            <artifactId>taos-jdbcdriver</artifactId>
+            <version>3.2.11</version>
+        </dependency>
 
     </dependencies>
     <dependencyManagement>
@@ -112,9 +128,9 @@
             <plugin>
                 <groupId>org.springframework.boot</groupId>
                 <artifactId>spring-boot-maven-plugin</artifactId>
-                <version>${spring-boot.version}</version>
+                <version>2.7.1</version>
                 <configuration>
-                    <mainClass>com.gyee.dataadapter.DataAdapterApplication</mainClass>
+                    <mainClass>com.gyee.dataadapter.DataAdapterApp</mainClass>
                     <skip>false</skip>
                 </configuration>
                 <executions>

+ 2 - 2
data-adapter/src/main/java/com/gyee/dataadapter/DataAdapterApplication.java

@@ -4,10 +4,10 @@ import org.springframework.boot.SpringApplication;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
 
 @SpringBootApplication
-public class DataAdapterApplication {
+public class DataAdapterApp {
 
     public static void main(String[] args) {
-        SpringApplication.run(DataAdapterApplication.class, args);
+        SpringApplication.run(DataAdapterApp.class, args);
     }
 
 }

+ 2 - 0
data-adapter/src/main/java/com/gyee/dataadapter/cache/MqttCache.java

@@ -1,5 +1,6 @@
 package com.gyee.dataadapter.cache;
 
+import com.gyee.dataadapter.entity.PointData;
 import com.gyee.dataadapter.entity.PointInfo;
 import org.springframework.stereotype.Component;
 
@@ -9,6 +10,7 @@ import java.util.Map;
 @Component
 public class MqttCache {
     public static Map<String, PointInfo> subData = new HashMap<>();
+    public static Map<String, PointData> subData2 = new HashMap<>();
 
 
 }

+ 3 - 3
data-adapter/src/main/java/com/gyee/dataadapter/config/DataConverterManager.java

@@ -88,8 +88,8 @@ public class DataConverterManager {
         Object val = getValueByType(vtype, vlen);
         pi.setValue(val);
         // 时间戳
-//        long ts = getLong();
-//        pi.setTime(ts);
+        //        long ts = getLong();
+        //        pi.setTime(ts);
         //时间戳转为时间
         String dateTime = getDateTime();
         pi.setTime(dateTime);
@@ -221,6 +221,7 @@ public class DataConverterManager {
     private short getUshort() {
         int count = 2;
         byte[] bs = Arrays.copyOfRange(datas, index, count + index);
+
         //toReverserBytes(bs);
         short ushortValue = (short) ((bs[0] & 0xFF) | ((bs[1] & 0xFF) << 8));
 
@@ -237,7 +238,6 @@ public class DataConverterManager {
         return str;
     }
 
-
     private byte getByte() {
         int count = 1;
         byte[] bs = Arrays.copyOfRange(datas, index, count + index);

+ 250 - 0
data-adapter/src/main/java/com/gyee/dataadapter/config/DataConverterManager2.java

@@ -0,0 +1,250 @@
+package com.gyee.dataadapter.config;
+
+import com.gyee.dataadapter.cache.MqttCache;
+import com.gyee.dataadapter.entity.PointData;
+import lombok.Data;
+
+import java.nio.ByteBuffer;
+import java.nio.charset.StandardCharsets;
+import java.util.Arrays;
+import java.util.Date;
+
+/**
+ * 数据转换工具
+ */
+@Data
+public class DataConverterManager2 {
+    /**
+     * 序号
+     */
+    private int index = 0;
+    private byte[] datas;
+    /**
+     * 版本号
+     */
+    private String version = "";
+    /**
+     * 点位数量
+     */
+    private int pointCount = 0;
+    /**
+     * 压缩算法
+     */
+    private byte zipType;
+
+    //private List<PointData> pintInfos = new ArrayList<>();
+
+    public DataConverterManager2(byte[] bs) {
+        datas = bs;
+
+        // 初始化
+        init();
+
+    }
+
+    private void init() {
+        // 消息头,版本号数量
+        //version = getString(4);
+        index += 4;
+        // 点位数量
+        //pointCount = getInt();
+        index += 4;
+
+        //zipType = getByte();
+        index += 1;
+
+        initPoint();
+    }
+
+    /**
+     * 初始化内容
+     */
+    private void initPoint() {
+        while (index < datas.length) {
+            getPointInfo();
+        }
+    }
+
+    private void getPointInfo() {
+        PointData pi = new PointData();
+        // 数据源
+        //byte source = getByte();
+        index += 1;
+        //pi.setSource(source);
+        // 点名长度
+        int pnameLen = getUshort();
+        String pname = getString(pnameLen);
+        //pi.setTagName(pname);
+        // 值类型
+        byte vtype = getByte();
+        //pi.setValueType(vtype);
+        int vlen = 0;
+        if (vtype == 0 || vtype == 254) {
+            // 值长度
+            vlen = getUshort();
+        }
+        // 获取的实际值
+        setValueByType(pi, vtype, vlen);
+        // 时间戳
+        //        long ts = getLong();
+        //        pi.setTime(ts);
+        //时间戳转为时间
+        pi.setTime(getDate());
+        // 状态码
+        //int status = getInt();
+        index += 4;
+        // 质量位
+        //byte q = getByte();
+        index += 1;
+
+        MqttCache.subData2.put(pname, pi);
+    }
+
+    /**
+     * 获取实际值
+     *
+     * @param pi
+     * @param vtype 值类型
+     * @param vlen  值长度
+     * @return 实际值
+     */
+    private void setValueByType(PointData pi, byte vtype, int vlen) {
+        switch (vtype) {
+            case 0:
+                pi.setDoubleValue(Double.parseDouble(getString(vlen)));
+                break;
+            case 1:
+                pi.setBooleanValue(getBool());
+                break;
+            case 2:
+                pi.setLongValue(getUshort());
+                break;
+            case 3:
+                pi.setLongValue(getInt());
+                break;
+            case 4:
+                pi.setLongValue(getLong());
+                break;
+            case 5:
+                pi.setDoubleValue(getFloat());
+                break;
+            case 6:
+                pi.setDoubleValue(getDouble());
+                break;
+            case 7:
+                pi.setDoubleValue(Double.parseDouble(getString(vlen)));
+                break;
+            case 8:
+                pi.setLongValue(getUshort());
+                break;
+            case 9:
+                pi.setLongValue(getInt());
+                break;
+            case 10:
+                pi.setLongValue(getLong());
+                break;
+            case 11:
+                pi.setDoubleValue(Double.parseDouble(getString(vlen)));
+                break;
+        }
+    }
+
+    private double getDouble() {
+        int count = 8;
+        byte[] bs = Arrays.copyOfRange(datas, index, count + index);
+        toReverserBytes(bs);
+        float val = ByteBuffer.wrap(bs).getFloat();
+        index += count;
+
+        return val;
+    }
+
+    private float getFloat() {
+        int count = 4;
+        byte[] bs = Arrays.copyOfRange(datas, index, count + index);
+        toReverserBytes(bs);
+        float val = ByteBuffer.wrap(bs).getFloat();
+
+        index += count;
+
+        return val;
+    }
+
+    private long getLong() {
+        int count = 8;
+        byte[] bs = Arrays.copyOfRange(datas, index, count + index);
+        toReverserBytes(bs);
+        long val = ByteBuffer.wrap(bs).getLong();
+        val /= 10000;
+
+        index += count;
+        return val;
+    }
+
+    private Date getDate() {
+        int count = 8;
+        byte[] bs = Arrays.copyOfRange(datas, index, count + index);
+        toReverserBytes(bs);
+        long val = ByteBuffer.wrap(bs).getLong();
+        val /= 10000;
+
+        index += count;
+        return new Date(val);
+    }
+
+
+    private boolean getBool() {
+        byte b = getByte();
+        return b != 0;
+    }
+
+
+    private int getInt() {
+        int count = 4;
+        byte[] bs = Arrays.copyOfRange(datas, index, count + index);
+        toReverserBytes(bs);
+        int val = ByteBuffer.wrap(bs).getInt();
+
+        index += count;
+
+        return val;
+    }
+
+    private short getUshort() {
+        int count = 2;
+        byte[] bs = Arrays.copyOfRange(datas, index, count + index);
+
+        //toReverserBytes(bs);
+        short ushortValue = (short) ((bs[0] & 0xFF) | ((bs[1] & 0xFF) << 8));
+
+        index += count;
+
+        return ushortValue;
+    }
+
+    private String getString(int count) {
+        String str = new String(Arrays.copyOfRange(datas, index, count + index), StandardCharsets.UTF_8);
+
+        index += count;
+
+        return str;
+    }
+
+    private byte getByte() {
+        int count = 1;
+        byte[] bs = Arrays.copyOfRange(datas, index, count + index);
+
+        index += count;
+
+        return bs[0];
+    }
+
+    private void toReverserBytes(byte[] bytes) {
+        for (int i = 0; i < bytes.length / 2; i++) {
+            byte temp = bytes[i];
+            bytes[i] = bytes[bytes.length - 1 - i];
+            bytes[bytes.length - 1 - i] = temp;
+        }
+    }
+
+}

+ 1 - 1
data-adapter/src/main/java/com/gyee/dataadapter/config/MqttConfig.java

@@ -30,7 +30,7 @@ public class MqttConfig {
     private String password;
 
     /**
-     *是否清理session
+     * 是否清理session
      */
     private boolean cleansession;
 

+ 12 - 13
data-adapter/src/main/java/com/gyee/dataadapter/config/PushCallback.java

@@ -1,15 +1,13 @@
 package com.gyee.dataadapter.config;
 
-import com.gyee.dataadapter.cache.MqttCache;
-import com.gyee.dataadapter.entity.PointInfo;
+import cn.hutool.core.date.DateUtil;
 import org.eclipse.paho.client.mqttv3.IMqttDeliveryToken;
 import org.eclipse.paho.client.mqttv3.MqttCallback;
 import org.eclipse.paho.client.mqttv3.MqttMessage;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import java.time.LocalDateTime;
-import java.util.*;
+import java.io.UnsupportedEncodingException;
 
 /**
  * 主要用来接收和处理订阅主题的消息
@@ -57,7 +55,7 @@ public class PushCallback implements MqttCallback {
      * @param topic
      * @param message
      */
-    public void messageArrived2(String topic, MqttMessage message) throws Exception {
+    public void messageArrived2(String topic, MqttMessage message) throws UnsupportedEncodingException {
         // subscribe后得到的消息会执行到这里面
         String result = new String(message.getPayload(), "UTF-8");
         System.out.println("接收消息主题 : " + topic);
@@ -67,18 +65,19 @@ public class PushCallback implements MqttCallback {
         //这里可以针对收到的消息做处理,比如持久化
     }
 
-
-    public void messageArrived(String topic, MqttMessage message) throws Exception {
-        DataConverterManager dm = new DataConverterManager(message.getPayload());
-        System.out.print(LocalDateTime.now().getMinute()+",");
+    public void messageArrived(String topic, MqttMessage message) {
+        /*DataConverterManager dm = new DataConverterManager(message.getPayload());
+        System.out.print(LocalDateTime.now().getMinute() + ",");
         List<PointInfo> pis = dm.getPintInfos();
-        for (PointInfo pi :pis) {
+        for (PointInfo pi : pis) {
             if (!MqttCache.subData.containsKey(pi.getPath())) {
-                MqttCache.subData.put(pi.getPath(),pi);
+                MqttCache.subData.put(pi.getPath(), pi);
             } else {
-                MqttCache.subData.replace(pi.getPath(),pi);
+                MqttCache.subData.replace(pi.getPath(), pi);
             }
-        }
+        }*/
+        DataConverterManager2 dm = new DataConverterManager2(message.getPayload());
+        System.out.println(DateUtil.date().getMinutes());
     }
 
 }

+ 75 - 15
data-adapter/src/main/java/com/gyee/dataadapter/controller/AdapterController.java

@@ -1,31 +1,33 @@
 package com.gyee.dataadapter.controller;
 
-import com.gyee.dataadapter.service.impl.AdapterServiceImpl;
+import com.gyee.dataadapter.entity.DoubleStatData;
+import com.gyee.dataadapter.entity.PointData;
 import com.gyee.dataadapter.entity.PointInfo;
 import com.gyee.dataadapter.entity.TotalPointData;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RequestParam;
-import org.springframework.web.bind.annotation.RestController;
+import com.gyee.dataadapter.service.IAdapterService;
+import com.gyee.dataadapter.service.TsDataService;
+import org.springframework.web.bind.annotation.*;
 
 import javax.annotation.Resource;
-import java.util.Map;
+import java.util.*;
 
 @RestController
-@RequestMapping("/adapter")
+@RequestMapping("/ts")
 public class AdapterController {
     @Resource
-    private AdapterServiceImpl dataClient;
+    private IAdapterService dataClient;
+    @Resource
+    private TsDataService tsDataService;
 
     @GetMapping(value = "/history/list")
     public TotalPointData history(@RequestParam(value = "start") String start,
-                               @RequestParam(value = "end") String end,
-                               @RequestParam(value = "sampleType", required = false) int sampleType,
-                               @RequestParam(value = "sampleRate", required = false) int sampleRate,
-                               @RequestParam(value = "paths") String paths,
-                               @RequestParam(value = "pageIndex",required = false) String pageIndex,
-                               @RequestParam(value = "pageSize",required = false) String pageSize,
-                               @RequestParam(value = "isDesc",required = false,defaultValue = "false") boolean isDesc) {
+                                  @RequestParam(value = "end") String end,
+                                  @RequestParam(value = "sampleType", required = false) int sampleType,
+                                  @RequestParam(value = "sampleRate", required = false) int sampleRate,
+                                  @RequestParam(value = "paths") String paths,
+                                  @RequestParam(value = "pageIndex", required = false) String pageIndex,
+                                  @RequestParam(value = "pageSize", required = false) String pageSize,
+                                  @RequestParam(value = "isDesc", required = false, defaultValue = "false") boolean isDesc) {
         return dataClient.getTotalData(start, end, sampleType, sampleRate, paths, pageIndex, pageSize, isDesc);
     }
 
@@ -35,5 +37,63 @@ public class AdapterController {
         return dataClient.getLatestData(paths);
     }
 
+    @GetMapping("/latest")
+    public Map<String, PointData> getLatest(@RequestParam("keys") String keys) {
+        return tsDataService.getLatest(keys);
+    }
+
+    @GetMapping("/history/raw")
+    public List<PointData> getHistoryRaw(@RequestParam("tagName") String tagName,
+                                         @RequestParam("startTs") Long startTs, @RequestParam("endTs") Long endTs) {
+        return tsDataService.getHistoryRaw(tagName, startTs, endTs);
+    }
+
+    @GetMapping("/history/snap")
+    public List<PointData> getHistorySnap(@RequestParam("tagName") String tagName, @RequestParam("startTs") Long startTs,
+                                          @RequestParam("endTs") Long endTs, @RequestParam("interval") Integer interval) {
+
+        return tsDataService.getHistorySnap(tagName, startTs, endTs, interval);
+    }
+
+    @GetMapping("/history/stat2")
+    public List<PointData> getHistoryStat2(@RequestParam("tagName") String tagName, @RequestParam("startTs") Long startTs,
+                                          @RequestParam("endTs") Long endTs, @RequestParam("interval") Integer interval,
+                                          @RequestParam("type") Integer type) {
+
+        return tsDataService.getHistoryStat(tagName, new Date(startTs), new Date(endTs), interval, type);
+    }
+
+    @GetMapping("/history/stat")
+    public List<DoubleStatData> getHistoryStat(@RequestParam("tagName") String tagName, @RequestParam("startTs") Long startTs,
+                                               @RequestParam("endTs") Long endTs, @RequestParam("interval") Integer interval) {
+
+        List<DoubleStatData> result = new ArrayList<>();
+        List<PointData> max = tsDataService.getHistoryStat(tagName, new Date(startTs), new Date(endTs), interval, 2);
+        List<PointData> min = tsDataService.getHistoryStat(tagName, new Date(startTs), new Date(endTs), interval, 3);
+        List<PointData> avg = tsDataService.getHistoryStat(tagName, new Date(startTs), new Date(endTs), interval, 4);
+        if (max.size() == min.size() && min.size() == avg.size()) {
+            for (int i = 0; i < max.size(); i++) {
+                result.add(new DoubleStatData(max.get(i), min.get(i), avg.get(i)));
+            }
+        }
+        return result;
+    }
+
+    @GetMapping("/history/section")
+    public Map<String, PointData> getHistorySection(@RequestParam("tagNames") String tagNames, @RequestParam("ts") Long ts) {
+
+        return new HashMap<>();
+    }
+
+    @PostMapping("/latest/batch")
+    public boolean writeLatestBatch(@RequestBody List<PointData> PointDataList) {
+
+        return true;
+    }
+
+    @PostMapping("/latest")
+    public boolean writeLatest(@RequestBody PointData PointData) {
+        return writeLatestBatch(Collections.singletonList(PointData));
+    }
 
 }

+ 4 - 3
data-adapter/src/main/java/com/gyee/dataadapter/controller/SubscribeController.java

@@ -24,7 +24,7 @@ public class SubscribeController implements ApplicationRunner {
 
 
     @Override
-    public void run(ApplicationArguments args) throws Exception {
+    public void run(ApplicationArguments args) {
 
         mqttserver.init(topic, qos);
     }
@@ -32,13 +32,14 @@ public class SubscribeController implements ApplicationRunner {
 
     /**
      * 订阅主题
+     *
      * @param topic 主题
-     * @param qos 消息级别
+     * @param qos   消息级别
      * @return
      */
     @RequestMapping(value = "HUIANTOGUANGYAO")
     public String Subscribe(String topic, int qos) {
         mqttserver.init(topic, qos);
-        return "订阅主题'"+topic+"'成功";
+        return "订阅主题'" + topic + "'成功";
     }
 }

+ 27 - 0
data-adapter/src/main/java/com/gyee/dataadapter/dao/ILatestDao.java

@@ -0,0 +1,27 @@
+package com.gyee.dataadapter.dao;
+
+import com.gyee.dataadapter.entity.PointData;
+
+import java.util.List;
+import java.util.Map;
+
+public interface ILatestDao {
+
+
+    Map<String, PointData> getPointDataLatest(String... tagNames);
+
+    int writeDoubleLatest(List<PointData> list);
+
+    int writeStringLatest(List<PointData> list);
+
+    int writeBooleanLatest(List<PointData> list);
+
+    int writeLongLatest(List<PointData> list);
+
+    int writeBlobLatest(List<PointData> list);
+
+    int writeCoordinateLatest(List<PointData> list);
+
+    boolean writeLatest(List<PointData> dataList);
+
+}

+ 1 - 1
data-adapter/src/main/java/com/gyee/dataadapter/dao/MyWebClient.java

@@ -26,7 +26,7 @@ public class MyWebClient {
                                 .responseTimeout(Duration.ofMillis(30000))  // 设置 Netty 的连接超时
                 ))
                 .baseUrl("https://10.220.1.5:5300")
-//                .defaultHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON_VALUE) // 示例:添加默认头部
+                //                .defaultHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON_VALUE) // 示例:添加默认头部
                 .codecs(configurer -> {
                     // 根据您的 Spring WebFlux 版本,调整缓冲区大小的方式可能有所不同
                     // 这里假设您想要设置响应的缓冲区大小

+ 35 - 0
data-adapter/src/main/java/com/gyee/dataadapter/dao/TsDataType.java

@@ -0,0 +1,35 @@
+package com.gyee.dataadapter.dao;
+
+/**
+ * @author songwb<songwb @ aliyun.com>
+ */
+public enum TsDataType {
+    LONG("long"),
+    DOUBLE("double"),
+    BOOLEAN("boolean"),
+    STRING("string"),
+    BLOB("blob"),
+    COORDINATE("coordinate");
+
+    private final String descript;
+
+    private TsDataType(String descript) {
+        this.descript = descript;
+    }
+
+    // 公共方法,用于获取枚举常量的描述
+    public String getDescript() {
+        return descript;
+    }
+
+    // 静态方法,通过描述性字符串获取对应的枚举常量
+    public static TsDataType getByDescript(String descript) {
+        for (TsDataType type : TsDataType.values()) {
+            if (type.getDescript().equalsIgnoreCase(descript)) {
+                return type;
+            }
+        }
+        return TsDataType.DOUBLE;
+    }
+}
+

+ 21 - 0
data-adapter/src/main/java/com/gyee/dataadapter/dao/TsPoint.java

@@ -0,0 +1,21 @@
+package com.gyee.dataadapter.dao;
+
+/**
+ * @author songwb<songwb @ aliyun.com>
+ */
+public interface TsPoint {
+
+    String getId();
+
+    String getThingId();
+
+    String getThingType();
+
+    String getUniformCode();
+
+    TsDataType getPointDataType();
+
+    //reids库
+    String getTag();
+}
+

+ 18 - 0
data-adapter/src/main/java/com/gyee/dataadapter/dao/ViewTspointMapper.java

@@ -0,0 +1,18 @@
+package com.gyee.dataadapter.dao;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.gyee.dataadapter.entity.ViewTspoint;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * <p>
+ * Mapper 接口
+ * </p>
+ *
+ * @author gfhd
+ * @since 2024-09-13
+ */
+@Mapper
+public interface ViewTspointMapper extends BaseMapper<ViewTspoint> {
+
+}

+ 148 - 0
data-adapter/src/main/java/com/gyee/dataadapter/dao_mqtt_influxdb_taos/MqttTaosLatestDao.java

@@ -0,0 +1,148 @@
+package com.gyee.dataadapter.dao_mqtt_influxdb_taos;
+
+import com.gyee.dataadapter.dao.ILatestDao;
+import com.gyee.dataadapter.dao.TsDataType;
+import com.gyee.dataadapter.entity.PointData;
+import com.gyee.dataadapter.service.IAdapterService;
+import lombok.extern.slf4j.Slf4j;
+import lombok.val;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Component;
+
+import javax.annotation.Resource;
+import java.sql.Statement;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+@Slf4j
+@Component
+public class MqttTaosLatestDao implements ILatestDao {
+
+    @Value("${taoscz.db_name:point_ci}")
+    private String dbName;
+
+    @Resource
+    TaosConfig config;
+
+    @Resource
+    private IAdapterService adapterService;
+
+    @Override
+    public Map<String, PointData> getPointDataLatest(String... tagNames) {
+        return new HashMap<>();
+    }
+
+    @Override
+    public int writeDoubleLatest(List<PointData> list) {
+        try {
+            Statement st = config.getInstance().createStatement();
+            StringBuilder sb = new StringBuilder();
+            sb.append("INSERT INTO ");
+            for (PointData obj : list) {
+                long time = obj.getTs();
+                String point = config.getTableName(obj.getTagName());
+                double value = obj.getValue();
+                sb.append(point).append(" USING ").append(config.getDbName())
+                        .append(".").append(config.getAIStableName())
+                        .append(" TAGS ('','','','','') VALUES (");
+                sb.append(time).append(",").append(value).append(") ");
+            }
+            sb.append(";");
+            val i = st.executeUpdate(sb.toString());
+
+            return i == list.size() ? list.size() : 0;
+        } catch (Exception e) {
+            log.error(e.getMessage());
+            return 0;
+        }
+    }
+
+    @Override
+    public int writeStringLatest(List<PointData> list) {
+        return 0;
+    }
+
+    @Override
+    public int writeBooleanLatest(List<PointData> list) {
+        try {
+            Statement st = config.getInstance().createStatement();
+            StringBuilder sb = new StringBuilder();
+            sb.append("insert into ");
+            for (PointData obj : list) {
+                long time = obj.getTs();
+                String point = obj.getTagName();
+                boolean value = obj.isBooleanValue();
+                sb.append(point).append(" values (");
+                sb.append(time).append(",").append(value).append(") ");
+            }
+            sb.append(";");
+            return st.executeUpdate(sb.toString());
+        } catch (Exception e) {
+            log.error(e.getMessage());
+            return 0;
+        }
+    }
+
+    @Override
+    public int writeLongLatest(List<PointData> list) {
+        try {
+            Statement st = config.getInstance().createStatement();
+            StringBuilder sb = new StringBuilder();
+            sb.append("insert into ");
+            for (PointData obj : list) {
+                long time = obj.getTs();
+                String point = obj.getTagName();
+                long value = obj.getLongValue();
+                sb.append(point).append(" values (");
+                sb.append(time).append(",").append(value).append(")");
+            }
+            boolean flag = st.execute(sb.toString());
+
+            return flag == true ? list.size() : 0;
+        } catch (Exception e) {
+            log.error(e.getMessage());
+            return 0;
+        }
+    }
+
+    @Override
+    public int writeBlobLatest(List<PointData> list) {
+        return 0;
+    }
+
+    @Override
+    public int writeCoordinateLatest(List<PointData> list) {
+        return 0;
+    }
+
+    @Override
+    public boolean writeLatest(List<PointData> dataList) {
+        final int[] writeCount = {0};
+        //dataList = dataList.stream().peek(tpd -> tpd.setTagName(tpd.getTagName().replaceFirst("\\.", "__"))).collect(Collectors.toList());
+        Map<TsDataType, List<PointData>> pointGroup = dataList.stream().collect(Collectors.groupingBy(PointData::getDataType));
+        pointGroup.forEach((type, pds) -> {
+            if (type == TsDataType.DOUBLE) {
+                int count = writeDoubleLatest(pds);
+                writeCount[0] = writeCount[0] + count;
+            } else if (type == TsDataType.BOOLEAN) {
+                int count = writeBooleanLatest(pds);
+                writeCount[0] = writeCount[0] + count;
+            } else if (type == TsDataType.STRING) {
+                int count = writeStringLatest(pds);
+                writeCount[0] = writeCount[0] + count;
+            } else if (type == TsDataType.BLOB) {
+                int count = writeBlobLatest(pds);
+                writeCount[0] = writeCount[0] + count;
+            } else if (type == TsDataType.COORDINATE) {
+                int count = writeCoordinateLatest(pds);
+                writeCount[0] = writeCount[0] + count;
+            } else if (type == TsDataType.LONG) {
+                int count = writeLongLatest(pds);
+                writeCount[0] = writeCount[0] + count;
+            }
+        });
+        return writeCount[0] > 0 ? true : false;
+    }
+}

+ 89 - 0
data-adapter/src/main/java/com/gyee/dataadapter/dao_mqtt_influxdb_taos/TaosConfig.java

@@ -0,0 +1,89 @@
+package com.gyee.dataadapter.dao_mqtt_influxdb_taos;
+
+import com.taosdata.jdbc.TSDBDriver;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.context.annotation.Configuration;
+
+import java.sql.Connection;
+import java.sql.DriverManager;
+import java.sql.SQLException;
+import java.util.Properties;
+
+@Slf4j
+@Configuration
+public class TaosConfig {
+
+    @Value("${taoscz.server_ip:192.168.1.60}")
+    private String serverIp;
+
+    @Value("${taoscz.server_port:6030}")
+    private int serverPort;
+
+    @Value("${taoscz.db_name:point_ci}")
+    private String dbName;
+
+    @Value("${taoscz.user_name:root}")
+    private String userName;
+
+    @Value("${taoscz.password:taosdata}")
+    private String password;
+
+    @Value("${taoscz.pool_size:10}")
+    private int poolSize;
+
+    @Value("${taoscz.max_pool_size:100}")
+    private int maxPoolSize;
+
+    @Value("${taoscz.driver_type:com.taosdata.jdbc.rs.RestfulDriver}")
+    private String driverType;
+
+    @Value("${taoscz.ai_stable_name:windturbineai}")
+    private String aiStableName;
+
+    @Value("${taoscz.di_stable_name:windturbinedi}")
+    private String diStableName;
+
+    private Connection connection = null;
+
+    public Connection getInstance() throws ClassNotFoundException, SQLException {
+        if (null == connection)
+            connection = getConnection();
+
+        return connection;
+    }
+
+
+    private Connection getConnection() throws ClassNotFoundException, SQLException {
+        Connection connection = null;
+
+        Class.forName(driverType);
+        String jdbcUrl = "jdbc:TAOS-RS://" + serverIp + ":" + serverPort + "/" + dbName + "?user=" + userName + "&password=" + password;
+        if (driverType.equals("com.taosdata.jdbc.TSDBDriver"))
+            jdbcUrl = "jdbc:TAOS://" + serverIp + ":" + serverPort + "/" + dbName + "?user=" + userName + "&password=" + password;
+        Properties connProps = new Properties();
+        connProps.setProperty(TSDBDriver.PROPERTY_KEY_CHARSET, "UTF-8");
+        connProps.setProperty(TSDBDriver.PROPERTY_KEY_LOCALE, "en_US.UTF-8");
+        connProps.setProperty(TSDBDriver.PROPERTY_KEY_TIME_ZONE, "UTC-8");
+        connection = DriverManager.getConnection(jdbcUrl, connProps);
+
+        return connection;
+    }
+
+    public String getTableName(String tagName) {
+        return dbName + "." + tagName.toLowerCase();
+    }
+
+    public String getDbName() {
+        return dbName;
+    }
+
+
+    public String getAIStableName() {
+        return aiStableName;
+    }
+
+    public String getDIStableName() {
+        return diStableName;
+    }
+}

+ 69 - 0
data-adapter/src/main/java/com/gyee/dataadapter/dao_mqtt_influxdb_taos/ThreadPoolTaskConfig.java

@@ -0,0 +1,69 @@
+package com.gyee.dataadapter.dao_mqtt_influxdb_taos;
+
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
+
+import java.util.concurrent.ThreadPoolExecutor;
+
+@Configuration
+public class ThreadPoolTaskConfig {
+    /**
+     *   默认情况下,在创建了线程池后,线程池中的线程数为0,当有任务来之后,就会创建一个线程去执行任务,
+     *	当线程池中的线程数目达到corePoolSize后,就会把到达的任务放到缓存队列当中;
+     *  当队列满了,就继续创建线程,当线程数量大于等于maxPoolSize后,开始使用拒绝策略拒绝
+     */
+
+    /**
+     * 核心线程数(默认线程数)
+     */
+    private static final int corePoolSize = 20;
+    /**
+     * 最大线程数
+     */
+    private static final int maxPoolSize = 50;
+    /**
+     * 允许线程空闲时间(单位:默认为秒)
+     */
+    private static final int keepAliveTime = 60;
+    /**
+     * 缓冲队列大小
+     */
+    private static final int queueCapacity = 100;
+    /**
+     * 允许等待最长时间
+     */
+    private static final int awaitTime = 15;
+    /**
+     * 线程池名前缀
+     */
+    private static final String threadNamePrefix = "GYEE-Thread-";
+
+    private ThreadPoolTaskExecutor executor;
+
+    public ThreadPoolTaskExecutor getInstance() {
+        if (executor == null)
+            executor = taskExecutor();
+
+        return executor;
+    }
+
+    @Bean
+    public ThreadPoolTaskExecutor taskExecutor() {
+        ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
+        executor.setCorePoolSize(corePoolSize);
+        executor.setMaxPoolSize(maxPoolSize);
+        executor.setQueueCapacity(queueCapacity);
+        executor.setKeepAliveSeconds(keepAliveTime);
+        executor.setThreadNamePrefix(threadNamePrefix);
+        executor.setAwaitTerminationSeconds(awaitTime);
+
+        // 线程池对拒绝任务的处理策略
+        // CallerRunsPolicy:由调用线程(提交任务的线程)处理该任务
+        executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());
+        // 初始化
+        executor.initialize();
+        return executor;
+    }
+
+}

+ 33 - 0
data-adapter/src/main/java/com/gyee/dataadapter/entity/DoubleStatData.java

@@ -0,0 +1,33 @@
+package com.gyee.dataadapter.entity;
+
+/**
+ * @author songwb<songwb @ aliyun.com>
+ */
+public class DoubleStatData {
+
+    private PointData avg;
+    private PointData max;
+    private PointData min;
+
+    public DoubleStatData(PointData avg, PointData max, PointData min) {
+        this.avg = avg;
+        this.max = max;
+        this.min = min;
+    }
+
+    public DoubleStatData() {
+    }
+
+    public PointData getAvg() {
+        return avg;
+    }
+
+    public PointData getMax() {
+        return max;
+    }
+
+    public PointData getMin() {
+        return min;
+    }
+}
+

+ 8 - 8
data-adapter/src/main/java/com/gyee/dataadapter/entity/Login.java

@@ -4,12 +4,12 @@ import lombok.Data;
 
 @Data
 public class Login {
-        private String token;
-        private String userName;
-        private String email;
-        private String id;
-        private String name;
-        private String isInitPassword;
-        private String role;
-        private String message;
+    private String token;
+    private String userName;
+    private String email;
+    private String id;
+    private String name;
+    private String isInitPassword;
+    private String role;
+    private String message;
 }

+ 90 - 8
data-adapter/src/main/java/com/gyee/dataadapter/entity/PointData.java

@@ -1,14 +1,96 @@
 package com.gyee.dataadapter.entity;
 
-import lombok.Data;
+import com.gyee.dataadapter.dao.TsDataType;
 
-import java.time.LocalDateTime;
+import java.util.Date;
 
-@Data
+/**
+ * 测点数据
+ */
 public class PointData {
-    private String path;
-    private double value;
-    private LocalDateTime time;
-    private String quality;
-    private int timelable;
+    /**
+     * 时间戳
+     */
+    private Date time;
+    private String tagName;
+    /**
+     * 数据
+     */
+    private double doubleValue;
+    /**
+     * boolean 数据
+     */
+    private boolean booleanValue;
+    private long longValue;
+
+    public PointData() {
+    }
+
+    public PointData(Date time, double doubleValue) {
+        this.time = time;
+        this.doubleValue = doubleValue;
+    }
+
+    public TsDataType getDataType() {
+        if (booleanValue) {
+            return TsDataType.BOOLEAN;
+        } else if (longValue != 0) {
+            return TsDataType.LONG;
+        }
+        return TsDataType.DOUBLE;
+    }
+
+    public long getTs() {
+        return time.getTime();
+    }
+
+    public boolean isBooleanValue() {
+        return booleanValue;
+    }
+
+    public void setBooleanValue(boolean booleanValue) {
+        this.booleanValue = booleanValue;
+    }
+
+    public long getLongValue() {
+        return longValue;
+    }
+
+    public void setLongValue(long longValue) {
+        this.longValue = longValue;
+    }
+
+    public Date getTime() {
+        return time;
+    }
+
+    public void setTime(Date time) {
+        this.time = time;
+    }
+
+    public String getTagName() {
+        return tagName;
+    }
+
+    public void setTagName(String tagName) {
+        this.tagName = tagName;
+    }
+
+    public double getValue() {
+        if (booleanValue) {
+            return 1;
+        } else if (longValue != 0) {
+            doubleValue = longValue;
+        }
+        return doubleValue;
+    }
+
+    public double getDoubleValue() {
+        return doubleValue;
+    }
+
+    public void setDoubleValue(double doubleValue) {
+        this.doubleValue = doubleValue;
+    }
+
 }

+ 1 - 1
data-adapter/src/main/java/com/gyee/dataadapter/entity/PointInfo.java

@@ -27,7 +27,7 @@ public class PointInfo {
     /**
      * 时间戳
      */
-//    private long time;
+    //    private long time;
     /**
      * 时间
      */

+ 14 - 0
data-adapter/src/main/java/com/gyee/dataadapter/entity/SourcePointData.java

@@ -0,0 +1,14 @@
+package com.gyee.dataadapter.entity;
+
+import lombok.Data;
+
+import java.util.Date;
+
+@Data
+public class SourcePointData {
+    private String path;
+    private double value;
+    private Date time;
+    private String quality;
+    private int timelable;
+}

+ 1 - 1
data-adapter/src/main/java/com/gyee/dataadapter/entity/TotalPointData.java

@@ -8,5 +8,5 @@ import java.util.List;
 public class TotalPointData {
     private int TotalCount;
     private int TotalPage;
-    private List<PointData> Data;
+    private List<SourcePointData> Data;
 }

+ 98 - 0
data-adapter/src/main/java/com/gyee/dataadapter/entity/ViewTspoint.java

@@ -0,0 +1,98 @@
+package com.gyee.dataadapter.entity;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.gyee.dataadapter.dao.TsDataType;
+import com.gyee.dataadapter.dao.TsPoint;
+
+import java.io.Serializable;
+
+/**
+ * <p>
+ *
+ * </p>
+ *
+ * @author gfhd
+ * @since 2024-09-13
+ */
+@TableName("view_tspoint")
+public class ViewTspoint implements Serializable, TsPoint {
+
+    private static final long serialVersionUID = 1L;
+
+    private String id;
+
+    private String thingType;
+
+    private String thingId;
+
+    private String uniformCode;
+
+    private String dataType;
+
+    private String tag;
+
+    public String getId() {
+        return id;
+    }
+
+    public void setId(String id) {
+        this.id = id;
+    }
+
+    public String getThingType() {
+        return thingType;
+    }
+
+    public void setThingType(String thingType) {
+        this.thingType = thingType;
+    }
+
+    public String getThingId() {
+        return thingId;
+    }
+
+    public void setThingId(String thingId) {
+        this.thingId = thingId;
+    }
+
+    public String getUniformCode() {
+        return uniformCode;
+    }
+
+    @Override
+    public TsDataType getPointDataType() {
+        return TsDataType.getByDescript(dataType);
+    }
+
+    public void setUniformCode(String uniformCode) {
+        this.uniformCode = uniformCode;
+    }
+
+    public String getDataType() {
+        return dataType;
+    }
+
+    public void setDataType(String dataType) {
+        this.dataType = dataType;
+    }
+
+    public String getTag() {
+        return tag;
+    }
+
+    public void setTag(String tag) {
+        this.tag = tag;
+    }
+
+    @Override
+    public String toString() {
+        return "ViewTspoint{" +
+                "id = " + id +
+                ", thingType = " + thingType +
+                ", thingId = " + thingId +
+                ", uniformCode = " + uniformCode +
+                ", dataType = " + dataType +
+                ", tag = " + tag +
+                "}";
+    }
+}

+ 18 - 3
data-adapter/src/main/java/com/gyee/dataadapter/service/IAdapterService.java

@@ -1,15 +1,30 @@
 package com.gyee.dataadapter.service;
 
+import com.gyee.dataadapter.entity.PointData;
 import com.gyee.dataadapter.entity.PointInfo;
 import com.gyee.dataadapter.entity.TotalPointData;
 
+import java.util.Date;
+import java.util.List;
 import java.util.Map;
 
-public interface IAdapterService{
+public interface IAdapterService {
     //历史数据接口
-    TotalPointData getTotalData(String start, String end, int sampleType, int sampleRate, String paths,
-                                String pageIndex, String pageSize, boolean isDesc);
+    TotalPointData getTotalData(String start, String end, Integer sampleType, Integer sampleRate, String paths,
+                                String pageIndex, String pageSize, Boolean isDesc);
+
+    TotalPointData getTotalData(Date start, Date end, Integer sampleType, Integer sampleRate, String paths,
+                                String pageIndex, String pageSize, Boolean isDesc);
+
+    //历史数据接口
+    TotalPointData getTotalData(Date start, Date end, Integer sampleType, Integer sampleRate, String paths);
+
+    List<PointData> getPointData(Date start, Date end, Integer sampleType, Integer sampleRate, String paths);
+
+    Map<String, List<PointData>> getPointData(Date start, Date end, Integer sampleType, Integer sampleRate, String... paths);
 
     //实时数据接口
     Map<String, PointInfo> getLatestData(String paths);
+
+    Map<String, PointData> getLatestData2(String... paths);
 }

+ 109 - 0
data-adapter/src/main/java/com/gyee/dataadapter/service/TsDataService.java

@@ -0,0 +1,109 @@
+package com.gyee.dataadapter.service;
+
+import com.gyee.dataadapter.dao.ILatestDao;
+import com.gyee.dataadapter.entity.PointData;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import java.util.*;
+import java.util.concurrent.TimeUnit;
+
+@Slf4j
+@Service
+public class TsDataService {
+
+    @Resource
+    private IAdapterService adapterService;
+    @Resource
+    private ILatestDao latestDao;
+
+    public Map<String, PointData> getLatest(String tagNames) {
+        String[] split = tagNames.split(",");
+        return getLatest(split);
+    }
+
+    public Map<String, PointData> getLatest(String... tagNames) {
+        return adapterService.getLatestData2(tagNames);
+    }
+
+    public List<PointData> getHistoryRaw(String tagName, Date startTime, Date endTime) {
+        try {
+            return adapterService.getPointData(startTime, endTime, 1, null, tagName);
+        } catch (Exception e) {
+            log.error("异常点:" + tagName);
+            log.error(e.getMessage());
+            return new ArrayList<>();
+        }
+    }
+
+    public List<PointData> getHistoryRaw(String tagName, long startTs, long endTs) {
+        return getHistoryRaw(tagName, new Date(startTs), new Date(endTs));
+    }
+
+    public List<PointData> getHistorySnap(String tagName, long startTs, long endTs, Integer interval) {
+        return getHistorySnap(tagName, new Date(startTs), new Date(endTs), interval);
+    }
+
+    public List<PointData> getHistorySnap(String tagName, Date startTime, Date endTime, Integer interval) {
+        if (interval == null || interval == 0) interval = 60;
+        try {
+            return adapterService.getPointData(startTime, endTime, 0, interval, tagName);
+        } catch (Exception e) {
+            log.error("异常点:" + tagName);
+            log.error(e.getMessage());
+            return new ArrayList<>();
+        }
+    }
+
+    /**
+     * @param startTime:开始时间。
+     * @param endTime:结束时间。
+     * @param type:采样类型。0瞬时值,1原始值,2最大值,3最小值,4平均值。
+     * @param interval:采样频率,单位秒。
+     * @param tagName:要查询的变量(数据、测点)名。
+     */
+    public List<PointData> getHistoryStat(String tagName, Date startTime, Date endTime, Integer interval, Integer type) {
+        if (interval == null || interval == 0) interval = 60;
+        if (type == null || type < 2 || type > 4) type = 4;
+        try {
+            return adapterService.getPointData(startTime, endTime, type, interval, tagName);
+        } catch (Exception e) {
+            log.error("异常点:" + tagName);
+            log.error(e.getMessage());
+            return new ArrayList<>();
+        }
+    }
+
+    public PointData getHistoryStat0(String tagName, Date startTime, Date endTime, Integer type) {
+        int interval = (int) TimeUnit.MILLISECONDS.toMinutes(endTime.getTime() - startTime.getTime());
+        List<PointData> pd = adapterService.getPointData(startTime, endTime, type, interval, tagName);
+        return pd.get(0);
+    }
+
+    public boolean writeLatest(List<PointData> dataList) {
+        return latestDao.writeLatest(dataList);
+    }
+
+    public boolean writeLatest(PointData data) {
+        return writeLatest(Collections.singletonList(data));
+    }
+
+    public Map<String, PointData> getHistorySection(long ts, String... tagNames) {
+        return getHistorySection(new Date(ts), tagNames);
+    }
+
+    public Map<String, PointData> getHistorySection(Date time, String... tagNames) {
+        Map<String, PointData> result = new HashMap<>();
+        try {
+            Map<String, List<PointData>> pdsMap = adapterService.getPointData(time, time, 0, null, tagNames);
+            pdsMap.forEach((k, pds) -> {
+                result.put(k, pds.get(0));
+            });
+            return result;
+        } catch (Exception e) {
+            log.error(e.getMessage());
+            return new HashMap<>();
+        }
+    }
+}

+ 46 - 0
data-adapter/src/main/java/com/gyee/dataadapter/service/TsPointService.java

@@ -0,0 +1,46 @@
+package com.gyee.dataadapter.service;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.gyee.dataadapter.dao.TsPoint;
+import com.gyee.dataadapter.dao.ViewTspointMapper;
+import com.gyee.dataadapter.entity.ViewTspoint;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+@Service
+@Slf4j
+public class TsPointService {
+
+    //key:测点
+    private Map<String, TsPoint> tagMap = new HashMap<>();
+
+    @Resource
+    private ViewTspointMapper tsPointMapper;
+    private final LambdaQueryWrapper<ViewTspoint> wrapper = new LambdaQueryWrapper<>();
+
+    public List<TsPoint> getTsPoint(String... tagNames) {
+        List<TsPoint> tsPoints = new ArrayList<>();
+        for (String tagName : tagNames) {
+            tsPoints.add(getTsPoint(tagName));
+        }
+        return tsPoints;
+    }
+
+    public TsPoint getTsPoint(String tagName) {
+        TsPoint tsPoint = tagMap.get(tagName);
+        if (tsPoint == null) {
+            wrapper.clear();
+            wrapper.eq(ViewTspoint::getId, tagName);
+            ViewTspoint one = tsPointMapper.selectOne(wrapper, false);
+            tagMap.put(tagName, one);
+            return one;
+        }
+        return tsPoint;
+    }
+}

File diff suppressed because it is too large
+ 70 - 22
data-adapter/src/main/java/com/gyee/dataadapter/service/impl/AdapterServiceImpl.java


+ 28 - 0
data-adapter/target/classes/application.yaml

@@ -0,0 +1,28 @@
+server:
+  port: 9011
+
+# Mqtt相关配置
+publish:
+  mqtt:
+    host: tcp://10.220.1.5:2883
+    username: admin@scada.com
+    password: Scada135}+?
+    cleansession: false
+    clientid: HUIANTOGUANGYAO
+    keepalive: 10
+    connectionTimeout: 3000
+
+
+spring:
+  datasource:
+    # pg数据库连接配置
+    type: com.alibaba.druid.pool.DruidDataSource
+    driver-class-name: org.postgresql.Driver
+    url: jdbc:postgresql://10.220.1.5:15432/smartwindpower
+    username: smartuser
+    password: smart123!@#
+
+subscribe:
+  topic: scada/public/HUIANTOGUANGYAO/tag_values
+  qos: 0
+

BIN
data-adapter/target/classes/com/gyee/dataadapter/DataAdapterApp.class


BIN
data-adapter/target/classes/com/gyee/dataadapter/cache/MqttCache.class


BIN
data-adapter/target/classes/com/gyee/dataadapter/config/DataConverterManager.class


BIN
data-adapter/target/classes/com/gyee/dataadapter/config/DataConverterManager2.class


BIN
data-adapter/target/classes/com/gyee/dataadapter/config/MqttConfig.class


BIN
data-adapter/target/classes/com/gyee/dataadapter/config/MqttConnect.class


BIN
data-adapter/target/classes/com/gyee/dataadapter/config/MqttServer.class


BIN
data-adapter/target/classes/com/gyee/dataadapter/config/PushCallback.class


BIN
data-adapter/target/classes/com/gyee/dataadapter/controller/AdapterController.class


BIN
data-adapter/target/classes/com/gyee/dataadapter/controller/SubscribeController.class


BIN
data-adapter/target/classes/com/gyee/dataadapter/dao/ILatestDao.class


BIN
data-adapter/target/classes/com/gyee/dataadapter/dao/MyWebClient.class


BIN
data-adapter/target/classes/com/gyee/dataadapter/dao/TsDataType.class


BIN
data-adapter/target/classes/com/gyee/dataadapter/dao/TsPoint.class


BIN
data-adapter/target/classes/com/gyee/dataadapter/dao/ViewTspointMapper.class


BIN
data-adapter/target/classes/com/gyee/dataadapter/dao_mqtt_influxdb_taos/MqttTaosLatestDao.class


BIN
data-adapter/target/classes/com/gyee/dataadapter/dao_mqtt_influxdb_taos/TaosConfig.class


BIN
data-adapter/target/classes/com/gyee/dataadapter/dao_mqtt_influxdb_taos/ThreadPoolTaskConfig.class


BIN
data-adapter/target/classes/com/gyee/dataadapter/entity/DoubleStatData.class


BIN
data-adapter/target/classes/com/gyee/dataadapter/entity/Login.class


BIN
data-adapter/target/classes/com/gyee/dataadapter/entity/PointData.class


BIN
data-adapter/target/classes/com/gyee/dataadapter/entity/PointInfo.class


BIN
data-adapter/target/classes/com/gyee/dataadapter/entity/SourcePointData.class


BIN
data-adapter/target/classes/com/gyee/dataadapter/entity/TotalPointData.class


BIN
data-adapter/target/classes/com/gyee/dataadapter/entity/User.class


BIN
data-adapter/target/classes/com/gyee/dataadapter/entity/ViewTspoint.class


BIN
data-adapter/target/classes/com/gyee/dataadapter/service/IAdapterService.class


BIN
data-adapter/target/classes/com/gyee/dataadapter/service/TsDataService.class


BIN
data-adapter/target/classes/com/gyee/dataadapter/service/TsPointService.class


BIN
data-adapter/target/classes/com/gyee/dataadapter/service/impl/AdapterServiceImpl.class


+ 1 - 0
generationXK-service/pom.xml

@@ -52,6 +52,7 @@
         <dependency>
             <groupId>com.baomidou</groupId>
             <artifactId>mybatis-plus-boot-starter</artifactId>
+            <version>3.5.7</version>
         </dependency>
         <dependency>
             <groupId>com.baomidou</groupId>

+ 1 - 7
pom.xml

@@ -33,7 +33,7 @@
         <lombok.version>1.18.16</lombok.version>
         <pgsql.version>42.2.5</pgsql.version>
         <druid.version>1.2.11</druid.version>
-        <mybatis.plus.boot.starter.version>3.2.0</mybatis.plus.boot.starter.version>
+        <mybatis.plus.boot.starter.version>3.5.7</mybatis.plus.boot.starter.version>
         <mybatis.plus.generator.version>3.3.2</mybatis.plus.generator.version>
         <fastjson.version>1.2.17</fastjson.version>
         <tomcat.version>9.0.52</tomcat.version>
@@ -75,12 +75,6 @@
 
             <dependency>
                 <groupId>com.baomidou</groupId>
-                <artifactId>mybatis-plus-boot-starter</artifactId>
-                <version>${mybatis.plus.boot.starter.version}</version>
-            </dependency>
-
-            <dependency>
-                <groupId>com.baomidou</groupId>
                 <artifactId>mybatis-plus-generator</artifactId>
                 <version>${mybatis.plus.generator.version}</version>
             </dependency>

+ 0 - 5
runeconomy-xk/pom.xml

@@ -75,11 +75,6 @@
             <groupId>org.postgresql</groupId>
             <artifactId>postgresql</artifactId>
         </dependency>
-        <dependency>
-            <groupId>cn.hutool</groupId>
-            <artifactId>hutool-all</artifactId>
-            <version>5.1.1</version>
-        </dependency>
 <!--        <dependency>-->
 <!--            <groupId>redis.clients</groupId>-->
 <!--            <artifactId>jedis</artifactId>-->