bihuisong 3 kuukautta sitten
commit
0215630e3d
100 muutettua tiedostoa jossa 4576 lisäystä ja 0 poistoa
  1. 0 0
      .idea/.gitignore
  2. 14 0
      .idea/compiler.xml
  3. 6 0
      .idea/encodings.xml
  4. 30 0
      .idea/jarRepositories.xml
  5. 12 0
      .idea/misc.xml
  6. 124 0
      .idea/uiDesigner.xml
  7. 6 0
      .idea/vcs.xml
  8. 220 0
      .idea/workspace.xml
  9. 150 0
      pom.xml
  10. 39 0
      src/main/java/com/sooka/sponest/monitor/SookaMonitorIotApplication.java
  11. 11 0
      src/main/java/com/sooka/sponest/monitor/base/controller/BaseController.java
  12. 52 0
      src/main/java/com/sooka/sponest/monitor/base/domain/BaseBusinessEntity.java
  13. 13 0
      src/main/java/com/sooka/sponest/monitor/base/domain/DataTestVO.java
  14. 73 0
      src/main/java/com/sooka/sponest/monitor/base/service/impl/BaseService.java
  15. 19 0
      src/main/java/com/sooka/sponest/monitor/base/util/database/DynamicDataSource.java
  16. 41 0
      src/main/java/com/sooka/sponest/monitor/base/util/database/DynamicDataSourceAspect.java
  17. 41 0
      src/main/java/com/sooka/sponest/monitor/base/util/database/DynamicDataSourceSwitcher.java
  18. 4 0
      src/main/java/com/sooka/sponest/monitor/base/util/database/GlobalTransactionalRabbitMQ.java
  19. 136 0
      src/main/java/com/sooka/sponest/monitor/base/util/database/MultipleDataSourceConfig.java
  20. 15 0
      src/main/java/com/sooka/sponest/monitor/base/util/database/MyDataSource.java
  21. 14 0
      src/main/java/com/sooka/sponest/monitor/camera/domain/CameraCodeAndNameVO.java
  22. 232 0
      src/main/java/com/sooka/sponest/monitor/device/controller/CentermonitorTMonitoringDeviceController.java
  23. 51 0
      src/main/java/com/sooka/sponest/monitor/device/domain/CentermonitorTMonitoringDataAtmosphere.java
  24. 28 0
      src/main/java/com/sooka/sponest/monitor/device/domain/CentermonitorTMonitoringDataInsectPests.java
  25. 23 0
      src/main/java/com/sooka/sponest/monitor/device/domain/CentermonitorTMonitoringDataSoilMoisture.java
  26. 67 0
      src/main/java/com/sooka/sponest/monitor/device/domain/CentermonitorTMonitoringDataWaterPressure.java
  27. 23 0
      src/main/java/com/sooka/sponest/monitor/device/domain/CentermonitorTMonitoringDataWaterQuality.java
  28. 69 0
      src/main/java/com/sooka/sponest/monitor/device/domain/CentermonitorTMonitoringDataWaterVelocity.java
  29. 161 0
      src/main/java/com/sooka/sponest/monitor/device/domain/CentermonitorTMonitoringDevice.java
  30. 49 0
      src/main/java/com/sooka/sponest/monitor/device/domain/CentermonitorTMonitoringThresholdAtmosphere.java
  31. 62 0
      src/main/java/com/sooka/sponest/monitor/device/domain/CentermonitorTMonitoringThresholdSoilMoisture.java
  32. 47 0
      src/main/java/com/sooka/sponest/monitor/device/domain/CentermonitorTMonitoringThresholdWaterQuality.java
  33. 24 0
      src/main/java/com/sooka/sponest/monitor/device/domain/CentermonitorTMonitoringThresholdWaterVelocity.java
  34. 34 0
      src/main/java/com/sooka/sponest/monitor/device/domain/MonitorBaseEntity.java
  35. 55 0
      src/main/java/com/sooka/sponest/monitor/device/domain/SensorEventVo.java
  36. 34 0
      src/main/java/com/sooka/sponest/monitor/device/mapper/CentermonitorTMonitoringDeviceAtmosphereThresholdMapper.java
  37. 131 0
      src/main/java/com/sooka/sponest/monitor/device/mapper/CentermonitorTMonitoringDeviceMapper.java
  38. 34 0
      src/main/java/com/sooka/sponest/monitor/device/mapper/CentermonitorTMonitoringDeviceSoilMoistureThresholdMapper.java
  39. 34 0
      src/main/java/com/sooka/sponest/monitor/device/mapper/CentermonitorTMonitoringDeviceThresholdMapper.java
  40. 34 0
      src/main/java/com/sooka/sponest/monitor/device/mapper/CentermonitorTMonitoringDeviceWaterQualityThresholdMapper.java
  41. 28 0
      src/main/java/com/sooka/sponest/monitor/device/service/ICentermonitorTMonitoringDeviceAtmosphereThresholdService.java
  42. 97 0
      src/main/java/com/sooka/sponest/monitor/device/service/ICentermonitorTMonitoringDeviceService.java
  43. 28 0
      src/main/java/com/sooka/sponest/monitor/device/service/ICentermonitorTMonitoringDeviceSoilMoistureThresholdService.java
  44. 27 0
      src/main/java/com/sooka/sponest/monitor/device/service/ICentermonitorTMonitoringDeviceThresholdService.java
  45. 28 0
      src/main/java/com/sooka/sponest/monitor/device/service/ICentermonitorTMonitoringDeviceWaterQualityThresholdService.java
  46. 50 0
      src/main/java/com/sooka/sponest/monitor/device/service/impl/CentermonitorTMonitoringDeviceAtmosphereThresholdServiceImpl.java
  47. 720 0
      src/main/java/com/sooka/sponest/monitor/device/service/impl/CentermonitorTMonitoringDeviceServiceImpl.java
  48. 50 0
      src/main/java/com/sooka/sponest/monitor/device/service/impl/CentermonitorTMonitoringDeviceSoilMoistureThresholdServiceImpl.java
  49. 50 0
      src/main/java/com/sooka/sponest/monitor/device/service/impl/CentermonitorTMonitoringDeviceThresholdServiceImpl.java
  50. 51 0
      src/main/java/com/sooka/sponest/monitor/device/service/impl/CentermonitorTMonitoringDeviceWaterQualityThresholdServiceImpl.java
  51. 35 0
      src/main/java/com/sooka/sponest/monitor/feign/CenterMonitorFeignController.java
  52. 22 0
      src/main/java/com/sooka/sponest/monitor/remoteapi/EnableSookaFeignClients.java
  53. 4 0
      src/main/java/com/sooka/sponest/monitor/remoteapi/RemoveApiBaseService.java
  54. 32 0
      src/main/java/com/sooka/sponest/monitor/remoteapi/fallback/data/RemoteDataBaseServiceFallbackFactory.java
  55. 34 0
      src/main/java/com/sooka/sponest/monitor/remoteapi/fallback/event/RemoteEventBaseServiceFallbackFactory.java
  56. 16 0
      src/main/java/com/sooka/sponest/monitor/remoteapi/fallback/file/RemoteFileServiceFallbackFactory.java
  57. 34 0
      src/main/java/com/sooka/sponest/monitor/remoteapi/fallback/lawenforcement/RemoteLawenforcementBaseServiceFallbackFactory.java
  58. 39 0
      src/main/java/com/sooka/sponest/monitor/remoteapi/fallback/system/RemoteSystemBaseServiceFallbackFactory.java
  59. 51 0
      src/main/java/com/sooka/sponest/monitor/remoteapi/service/ModulesServiceNameContants.java
  60. 24 0
      src/main/java/com/sooka/sponest/monitor/remoteapi/service/data/RemoteDataBaseService.java
  61. 23 0
      src/main/java/com/sooka/sponest/monitor/remoteapi/service/event/RemoteEventBaseService.java
  62. 22 0
      src/main/java/com/sooka/sponest/monitor/remoteapi/service/file/RemoteFileBaseService.java
  63. 24 0
      src/main/java/com/sooka/sponest/monitor/remoteapi/service/lawenforcement/RemoteLawenforcementBaseService.java
  64. 22 0
      src/main/java/com/sooka/sponest/monitor/remoteapi/service/system/RemoteService.java
  65. 78 0
      src/main/java/com/sooka/sponest/monitor/util/BeanUtil.java
  66. 137 0
      src/main/java/com/sooka/sponest/monitor/util/ScheduledTasks.java
  67. 9 0
      src/main/resources/banner.txt
  68. 26 0
      src/main/resources/bootstrap.yml
  69. 568 0
      src/main/resources/mapper/monitor/device/CentermonitorTMonitoringDeviceMapper.xml
  70. BIN
      target/center-monitor-iot.jar
  71. BIN
      target/center-monitor-iot.jar.original
  72. 9 0
      target/classes/banner.txt
  73. 26 0
      target/classes/bootstrap.yml
  74. BIN
      target/classes/com/sooka/sponest/monitor/SookaMonitorIotApplication.class
  75. BIN
      target/classes/com/sooka/sponest/monitor/base/controller/BaseController.class
  76. BIN
      target/classes/com/sooka/sponest/monitor/base/domain/BaseBusinessEntity.class
  77. BIN
      target/classes/com/sooka/sponest/monitor/base/domain/DataTestVO.class
  78. BIN
      target/classes/com/sooka/sponest/monitor/base/service/impl/BaseService.class
  79. BIN
      target/classes/com/sooka/sponest/monitor/base/util/database/DynamicDataSource.class
  80. BIN
      target/classes/com/sooka/sponest/monitor/base/util/database/DynamicDataSourceAspect.class
  81. BIN
      target/classes/com/sooka/sponest/monitor/base/util/database/DynamicDataSourceSwitcher.class
  82. BIN
      target/classes/com/sooka/sponest/monitor/base/util/database/GlobalTransactionalRabbitMQ.class
  83. BIN
      target/classes/com/sooka/sponest/monitor/base/util/database/MultipleDataSourceConfig.class
  84. BIN
      target/classes/com/sooka/sponest/monitor/base/util/database/MyDataSource.class
  85. BIN
      target/classes/com/sooka/sponest/monitor/camera/domain/CameraCodeAndNameVO.class
  86. BIN
      target/classes/com/sooka/sponest/monitor/device/controller/CentermonitorTMonitoringDeviceController.class
  87. BIN
      target/classes/com/sooka/sponest/monitor/device/domain/CentermonitorTMonitoringDataAtmosphere.class
  88. BIN
      target/classes/com/sooka/sponest/monitor/device/domain/CentermonitorTMonitoringDataInsectPests.class
  89. BIN
      target/classes/com/sooka/sponest/monitor/device/domain/CentermonitorTMonitoringDataSoilMoisture.class
  90. BIN
      target/classes/com/sooka/sponest/monitor/device/domain/CentermonitorTMonitoringDataWaterPressure.class
  91. BIN
      target/classes/com/sooka/sponest/monitor/device/domain/CentermonitorTMonitoringDataWaterQuality.class
  92. BIN
      target/classes/com/sooka/sponest/monitor/device/domain/CentermonitorTMonitoringDataWaterVelocity.class
  93. BIN
      target/classes/com/sooka/sponest/monitor/device/domain/CentermonitorTMonitoringDevice.class
  94. BIN
      target/classes/com/sooka/sponest/monitor/device/domain/CentermonitorTMonitoringThresholdAtmosphere.class
  95. BIN
      target/classes/com/sooka/sponest/monitor/device/domain/CentermonitorTMonitoringThresholdSoilMoisture.class
  96. BIN
      target/classes/com/sooka/sponest/monitor/device/domain/CentermonitorTMonitoringThresholdWaterQuality.class
  97. BIN
      target/classes/com/sooka/sponest/monitor/device/domain/CentermonitorTMonitoringThresholdWaterVelocity.class
  98. BIN
      target/classes/com/sooka/sponest/monitor/device/domain/MonitorBaseEntity.class
  99. BIN
      target/classes/com/sooka/sponest/monitor/device/domain/SensorEventVo.class
  100. 0 0
      target/classes/com/sooka/sponest/monitor/device/mapper/CentermonitorTMonitoringDeviceAtmosphereThresholdMapper.class

+ 0 - 0
.idea/.gitignore


+ 14 - 0
.idea/compiler.xml

@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="CompilerConfiguration">
+    <annotationProcessing>
+      <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="center-monitor-device" />
+        <module name="center-monitor-iot" />
+      </profile>
+    </annotationProcessing>
+  </component>
+</project>

+ 6 - 0
.idea/encodings.xml

@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="Encoding">
+    <file url="file://$PROJECT_DIR$/src/main/java" charset="UTF-8" />
+  </component>
+</project>

+ 30 - 0
.idea/jarRepositories.xml

@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="RemoteRepositoriesConfiguration">
+    <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="maven-snapshots" />
+      <option name="name" value="maven-snapshots" />
+      <option name="url" value="http://116.142.80.13:43000/repository/maven-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>
+    <remote-repository>
+      <option name="id" value="central" />
+      <option name="name" value="Central Repository" />
+      <option name="url" value="http://116.142.80.13:43000/repository/maven-public" />
+    </remote-repository>
+    <remote-repository>
+      <option name="id" value="maven-releases" />
+      <option name="name" value="maven-releases" />
+      <option name="url" value="http://116.142.80.13:43000/repository/maven-public" />
+    </remote-repository>
+  </component>
+</project>

+ 12 - 0
.idea/misc.xml

@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="ExternalStorageConfigurationManager" enabled="true" />
+  <component name="MavenProjectsManager">
+    <option name="originalFiles">
+      <list>
+        <option value="$PROJECT_DIR$/pom.xml" />
+      </list>
+    </option>
+  </component>
+  <component name="ProjectRootManager" version="2" languageLevel="JDK_1_8" default="true" project-jdk-name="1.8" project-jdk-type="JavaSDK" />
+</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>

+ 6 - 0
.idea/vcs.xml

@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="VcsDirectoryMappings">
+    <mapping directory="" vcs="Git" />
+  </component>
+</project>

+ 220 - 0
.idea/workspace.xml

@@ -0,0 +1,220 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="AutoImportSettings">
+    <option name="autoReloadType" value="SELECTIVE" />
+  </component>
+  <component name="ChangeListManager">
+    <list default="true" id="d37785b1-9312-43af-9c64-e97b10829941" name="更改" comment="修改" />
+    <option name="SHOW_DIALOG" value="false" />
+    <option name="HIGHLIGHT_CONFLICTS" value="true" />
+    <option name="HIGHLIGHT_NON_ACTIVE_CHANGELIST" value="false" />
+    <option name="LAST_RESOLUTION" value="IGNORE" />
+  </component>
+  <component name="Git.Settings">
+    <option name="RECENT_GIT_ROOT_PATH" value="$PROJECT_DIR$" />
+  </component>
+  <component name="MavenImportPreferences">
+    <option name="generalSettings">
+      <MavenGeneralSettings>
+        <option name="alwaysUpdateSnapshots" value="true" />
+        <option name="customMavenHome" value="E:/apache-maven-3.6.0" />
+        <option name="localRepository" value="E:\apache-maven-3.6.0\sj_maven" />
+        <option name="mavenHomeTypeForPersistence" value="CUSTOM" />
+        <option name="useMavenConfig" value="false" />
+        <option name="userSettingsFile" value="E:\apache-maven-3.6.0\conf\settings.xml" />
+      </MavenGeneralSettings>
+    </option>
+    <option name="importingSettings">
+      <MavenImportingSettings>
+        <option name="jdkForImporter" value="1.8" />
+        <option name="workspaceImportForciblyTurnedOn" value="true" />
+      </MavenImportingSettings>
+    </option>
+  </component>
+  <component name="MavenRunner">
+    <option name="jreName" value="1.8" />
+    <option name="skipTests" value="true" />
+  </component>
+  <component name="ProjectColorInfo">{
+  &quot;associatedIndex&quot;: 3
+}</component>
+  <component name="ProjectId" id="2rmeWJWPrYdOikgOHWY0ZPZln1C" />
+  <component name="ProjectViewState">
+    <option name="showLibraryContents" value="true" />
+  </component>
+  <component name="PropertiesComponent"><![CDATA[{
+  "keyToString": {
+    "Maven.center-monitor-iot [clean].executor": "Run",
+    "Maven.center-monitor-iot [install].executor": "Run",
+    "Maven.center-monitor-quartz [clean].executor": "Run",
+    "Maven.center-monitor-quartz [package].executor": "Run",
+    "Maven.center-monitor-quartz [validate].executor": "Run",
+    "RequestMappingsPanelOrder0": "0",
+    "RequestMappingsPanelOrder1": "1",
+    "RequestMappingsPanelWidth0": "75",
+    "RequestMappingsPanelWidth1": "75",
+    "RunOnceActivity.ShowReadmeOnStart": "true",
+    "Spring Boot.SookaMonitorDeviceApplication.executor": "Debug",
+    "Spring Boot.SookaMonitorIotApplication.executor": "Debug",
+    "Spring Boot.SookaMonitorQuartzApplication.executor": "Debug",
+    "git-widget-placeholder": "master",
+    "kotlin-language-version-configured": "true",
+    "last_opened_file_path": "D:/new_service/center-monitor-device",
+    "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",
+    "settings.editor.selected.configurable": "preferences.pluginManager",
+    "vue.rearranger.settings.migration": "true",
+    "应用程序.DahuaOperateLogWhiteTask.executor": "Debug"
+  }
+}]]></component>
+  <component name="ReactorSettings">
+    <option name="notificationShown" value="true" />
+  </component>
+  <component name="RecentsManager">
+    <key name="CopyFile.RECENT_KEYS">
+      <recent name="D:\work_space\center-monitor-quartz\src\main\resources\mapper\monitor\device" />
+    </key>
+    <key name="CopyClassDialog.RECENTS_KEY">
+      <recent name="com.sooka.sponest.monitor.camera.domain" />
+      <recent name="com.sooka.sponest.monitor.device.mapper" />
+      <recent name="com.sooka.sponest.monitor.device.service.impl" />
+      <recent name="com.sooka.sponest.monitor.device.service" />
+      <recent name="com.sooka.sponest.monitor.device.domain" />
+    </key>
+  </component>
+  <component name="RunManager">
+    <configuration name="SookaMonitorIotApplication" type="SpringBootApplicationConfigurationType" factoryName="Spring Boot" nameIsGenerated="true">
+      <module name="center-monitor-iot" />
+      <option name="SPRING_BOOT_MAIN_CLASS" value="com.sooka.sponest.monitor.SookaMonitorIotApplication" />
+      <method v="2">
+        <option name="Make" enabled="true" />
+      </method>
+    </configuration>
+  </component>
+  <component name="SharedIndexes">
+    <attachedChunks>
+      <set>
+        <option value="bundled-jdk-9f38398b9061-18abd8497189-intellij.indexing.shared.core-IU-241.14494.240" />
+        <option value="bundled-js-predefined-1d06a55b98c1-74d2a5396914-JavaScript-IU-241.14494.240" />
+      </set>
+    </attachedChunks>
+  </component>
+  <component name="SpellCheckerSettings" RuntimeDictionaries="0" Folders="0" CustomDictionaries="0" DefaultDictionary="应用程序级" UseSingleDictionary="true" transferred="true" />
+  <component name="TaskManager">
+    <task active="true" id="Default" summary="默认任务">
+      <changelist id="d37785b1-9312-43af-9c64-e97b10829941" name="更改" comment="" />
+      <created>1737168707426</created>
+      <option name="number" value="Default" />
+      <option name="presentableId" value="Default" />
+      <updated>1737168707426</updated>
+      <workItem from="1737168708315" duration="6310000" />
+      <workItem from="1737333187032" duration="3000" />
+      <workItem from="1737335872977" duration="100000" />
+      <workItem from="1737340087438" duration="15978000" />
+      <workItem from="1737419302097" duration="8695000" />
+      <workItem from="1737505670761" duration="949000" />
+      <workItem from="1737522697895" duration="2387000" />
+      <workItem from="1737525231578" duration="5560000" />
+      <workItem from="1737592759478" duration="5834000" />
+      <workItem from="1737679854812" duration="5630000" />
+      <workItem from="1738906067807" duration="7695000" />
+      <workItem from="1738975256325" duration="25000" />
+      <workItem from="1739322857859" duration="1792000" />
+      <workItem from="1739406504197" duration="11000" />
+      <workItem from="1739431419529" duration="4000" />
+      <workItem from="1739434633582" duration="5000" />
+      <workItem from="1739434876725" duration="20000" />
+      <workItem from="1739436165631" duration="665000" />
+      <workItem from="1739436954794" duration="6000" />
+      <workItem from="1739844434169" duration="124000" />
+      <workItem from="1739847233071" duration="76000" />
+      <workItem from="1739847315291" duration="1285000" />
+      <workItem from="1739855846148" duration="54000" />
+      <workItem from="1739863920070" duration="145000" />
+      <workItem from="1739926776470" duration="363000" />
+    </task>
+    <task id="LOCAL-00001" summary="init">
+      <option name="closed" value="true" />
+      <created>1737168764045</created>
+      <option name="number" value="00001" />
+      <option name="presentableId" value="LOCAL-00001" />
+      <option name="project" value="LOCAL" />
+      <updated>1737168764045</updated>
+    </task>
+    <task id="LOCAL-00002" summary="接收水压传感器数据">
+      <option name="closed" value="true" />
+      <created>1737177629719</created>
+      <option name="number" value="00002" />
+      <option name="presentableId" value="LOCAL-00002" />
+      <option name="project" value="LOCAL" />
+      <updated>1737177629719</updated>
+    </task>
+    <task id="LOCAL-00003" summary="接收水压传感器数据">
+      <option name="closed" value="true" />
+      <created>1737177953684</created>
+      <option name="number" value="00003" />
+      <option name="presentableId" value="LOCAL-00003" />
+      <option name="project" value="LOCAL" />
+      <updated>1737177953684</updated>
+    </task>
+    <task id="LOCAL-00004" summary="接收传感器数据">
+      <option name="closed" value="true" />
+      <created>1737178251575</created>
+      <option name="number" value="00004" />
+      <option name="presentableId" value="LOCAL-00004" />
+      <option name="project" value="LOCAL" />
+      <updated>1737178251575</updated>
+    </task>
+    <task id="LOCAL-00005" summary="接收传感器数据">
+      <option name="closed" value="true" />
+      <created>1737178896554</created>
+      <option name="number" value="00005" />
+      <option name="presentableId" value="LOCAL-00005" />
+      <option name="project" value="LOCAL" />
+      <updated>1737178896554</updated>
+    </task>
+    <task id="LOCAL-00006" summary="大华日志异步">
+      <option name="closed" value="true" />
+      <created>1737524522197</created>
+      <option name="number" value="00006" />
+      <option name="presentableId" value="LOCAL-00006" />
+      <option name="project" value="LOCAL" />
+      <updated>1737524522197</updated>
+    </task>
+    <task id="LOCAL-00007" summary="注释dahuaWhiteOperateLog日志">
+      <option name="closed" value="true" />
+      <created>1737685036425</created>
+      <option name="number" value="00007" />
+      <option name="presentableId" value="LOCAL-00007" />
+      <option name="project" value="LOCAL" />
+      <updated>1737685036425</updated>
+    </task>
+    <task id="LOCAL-00008" summary="修改">
+      <option name="closed" value="true" />
+      <created>1739322879480</created>
+      <option name="number" value="00008" />
+      <option name="presentableId" value="LOCAL-00008" />
+      <option name="project" value="LOCAL" />
+      <updated>1739322879480</updated>
+    </task>
+    <option name="localTasksCounter" value="9" />
+    <servers />
+  </component>
+  <component name="TypeScriptGeneratedFilesManager">
+    <option name="version" value="3" />
+  </component>
+  <component name="VcsManagerConfiguration">
+    <option name="CHECK_CODE_SMELLS_BEFORE_PROJECT_COMMIT" value="false" />
+    <option name="CHECK_NEW_TODO" value="false" />
+    <MESSAGE value="init" />
+    <MESSAGE value="接收水压传感器数据" />
+    <MESSAGE value="接收传感器数据" />
+    <MESSAGE value="大华日志异步" />
+    <MESSAGE value="注释dahuaWhiteOperateLog日志" />
+    <MESSAGE value="修改" />
+    <option name="LAST_COMMIT_MESSAGE" value="修改" />
+  </component>
+</project>

+ 150 - 0
pom.xml

@@ -0,0 +1,150 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xmlns="http://maven.apache.org/POM/4.0.0"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <parent>
+        <artifactId>ruoyi-modules</artifactId>
+        <groupId>com.ruoyi</groupId>
+        <version>3.4.0</version>
+    </parent>
+    <modelVersion>4.0.0</modelVersion>
+
+    <groupId>com.sooka.onest</groupId>
+    <artifactId>center-monitor-iot</artifactId>
+
+
+    <dependencies>
+        <!-- SpringCloud Alibaba Nacos -->
+        <dependency>
+            <groupId>com.alibaba.cloud</groupId>
+            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
+        </dependency>
+
+        <!-- SpringCloud Alibaba Nacos Config -->
+        <dependency>
+            <groupId>com.alibaba.cloud</groupId>
+            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
+        </dependency>
+
+        <!-- SpringCloud Alibaba Sentinel -->
+        <dependency>
+            <groupId>com.alibaba.cloud</groupId>
+            <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
+        </dependency>
+
+        <!-- Sentinel Datasource Nacos -->
+        <dependency>
+            <groupId>com.alibaba.csp</groupId>
+            <artifactId>sentinel-datasource-nacos</artifactId>
+        </dependency>
+
+        <!-- SpringBoot Actuator -->
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-actuator</artifactId>
+        </dependency>
+
+        <!-- Swagger UI -->
+        <dependency>
+            <groupId>io.springfox</groupId>
+            <artifactId>springfox-swagger-ui</artifactId>
+            <version>${swagger.fox.version}</version>
+        </dependency>
+
+        <!-- Mysql Connector -->
+        <dependency>
+            <groupId>mysql</groupId>
+            <artifactId>mysql-connector-java</artifactId>
+        </dependency>
+
+        <!-- RuoYi Common DataSource -->
+        <dependency>
+            <groupId>com.ruoyi</groupId>
+            <artifactId>sooka-sponest-common-datasource</artifactId>
+        </dependency>
+
+        <!-- RuoYi Common DataScope -->
+        <dependency>
+            <groupId>com.ruoyi</groupId>
+            <artifactId>sooka-sponest-common-datascope</artifactId>
+        </dependency>
+
+        <!-- RuoYi Common Log -->
+        <dependency>
+            <groupId>com.ruoyi</groupId>
+            <artifactId>sooka-sponest-common-log</artifactId>
+        </dependency>
+
+        <!-- RuoYi Common Swagger -->
+        <dependency>
+            <groupId>com.ruoyi</groupId>
+            <artifactId>sooka-sponest-common-swagger</artifactId>
+        </dependency>
+
+        <!--海康-->
+        <dependency>
+            <groupId>com.hikvision.ga</groupId>
+            <artifactId>artemis-http-client</artifactId>
+            <version>1.1.3</version>
+        </dependency>
+
+        <!-- ICC鉴权 -->
+        <dependency>
+            <groupId>com.dahuatech.icc</groupId>
+            <artifactId>java-sdk-oauth</artifactId>
+            <version>1.0.9</version>
+            <exclusions>
+                <exclusion>
+                    <artifactId>java-sdk-core</artifactId>
+                    <groupId>com.dahuatech.icc</groupId>
+                </exclusion>
+            </exclusions>
+        </dependency>
+
+        <dependency>
+            <groupId>com.dahuatech.icc</groupId>
+            <artifactId>java-sdk-core</artifactId>
+            <version>1.0.9</version>
+        </dependency>
+
+        <!-- mp4文件操作jar -->
+        <!-- https://mvnrepository.com/artifact/com.googlecode.mp4parser/isoparser -->
+        <dependency>
+            <groupId>com.googlecode.mp4parser</groupId>
+            <artifactId>isoparser</artifactId>
+            <version>1.1.22</version>
+        </dependency>
+    </dependencies>
+
+    <build>
+        <finalName>${project.artifactId}</finalName>
+        <plugins>
+            <plugin>
+                <groupId>org.springframework.boot</groupId>
+                <artifactId>spring-boot-maven-plugin</artifactId>
+                <version>2.1.5.RELEASE</version>
+                <executions>
+                    <execution>
+                        <goals>
+                            <goal>repackage</goal>
+                        </goals>
+                    </execution>
+                </executions>
+            </plugin>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-compiler-plugin</artifactId>
+            </plugin>
+            <plugin>
+                <artifactId>maven-resources-plugin</artifactId>
+                <configuration>
+                    <nonFilteredFileExtensions>
+                        <nonFilteredFileExtension>xdb</nonFilteredFileExtension>
+                    </nonFilteredFileExtensions>
+                </configuration>
+            </plugin>
+        </plugins>
+    </build>
+
+</project>
+

+ 39 - 0
src/main/java/com/sooka/sponest/monitor/SookaMonitorIotApplication.java

@@ -0,0 +1,39 @@
+package com.sooka.sponest.monitor;
+
+import com.ruoyi.common.security.annotation.EnableCustomConfig;
+import com.ruoyi.common.security.annotation.EnableRyFeignClients;
+import com.ruoyi.common.swagger.annotation.EnableCustomSwagger2;
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.boot.web.servlet.MultipartConfigFactory;
+import org.springframework.context.annotation.Bean;
+import org.springframework.scheduling.annotation.EnableAsync;
+import org.springframework.util.unit.DataSize;
+
+import javax.servlet.MultipartConfigElement;
+
+@EnableAsync
+@EnableCustomConfig
+@EnableCustomSwagger2
+@EnableRyFeignClients
+@SpringBootApplication
+public class SookaMonitorIotApplication {
+    public static void main(String[] args) {
+        SpringApplication.run(SookaMonitorIotApplication.class, args);
+        System.out.println("(♥◠‿◠)ノ゙  首佳科技 一体化 iot数据采集服务 启动成功   ლ(´ڡ`ლ)゙  \n" +
+                "  __________   ____ |  | _______          ____________   ____   ____   ____   _______/  |_\n" +
+                " /  ___/  _ \\ /  _ \\|  |/ /\\__  \\        /  ___/\\____ \\ /  _ \\ /    \\_/ __ \\ /  ___/\\   __\\\n" +
+                " \\___ (  <_> |  <_> )    <  / __ \\_      \\___ \\ |  |_> >  <_> )   |  \\  ___/ \\___ \\  |  |\n" +
+                "/____  >____/ \\____/|__|_ \\(____  /     /____  >|   __/ \\____/|___|  /\\___  >____  > |__|\n" +
+                "     \\/                  \\/     \\/           \\/ |__|               \\/     \\/     \\/\n"
+        );
+    }
+
+    @Bean
+    public MultipartConfigElement multipartConfigElement() {
+        MultipartConfigFactory factory = new MultipartConfigFactory();
+        factory.setMaxFileSize(DataSize.parse("10240000KB"));
+        factory.setMaxRequestSize(DataSize.parse("10240000KB"));
+        return factory.createMultipartConfig();
+    }
+}

+ 11 - 0
src/main/java/com/sooka/sponest/monitor/base/controller/BaseController.java

@@ -0,0 +1,11 @@
+package com.sooka.sponest.monitor.base.controller;
+
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+@RestController
+@RequestMapping("/BaseController")
+public class BaseController {
+
+
+}

+ 52 - 0
src/main/java/com/sooka/sponest/monitor/base/domain/BaseBusinessEntity.java

@@ -0,0 +1,52 @@
+package com.sooka.sponest.monitor.base.domain;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.util.Date;
+import java.util.HashMap;
+import java.util.Map;
+
+@Getter
+@Setter
+public class BaseBusinessEntity {
+
+    /**
+     * 搜索值
+     */
+    String searchValue;
+
+    Long dataDeptId;
+
+    /**
+     * 创建者
+     */
+    Long createBy;
+    /**
+     * 创建者
+     */
+    String remark;
+    /**
+     * 请求参数
+     */
+    Map<String, Object> params = new HashMap();
+    String database_system;
+    String database_event;
+    String database_data;
+    /**
+     * 创建时间
+     */
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private Date createTime = new Date();
+    /**
+     * 更新者
+     */
+    private Long updateBy;
+    /**
+     * 更新时间
+     */
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private Date updateTime;
+
+}

+ 13 - 0
src/main/java/com/sooka/sponest/monitor/base/domain/DataTestVO.java

@@ -0,0 +1,13 @@
+package com.sooka.sponest.monitor.base.domain;
+
+import lombok.Getter;
+import lombok.Setter;
+
+@Getter
+@Setter
+public class DataTestVO extends BaseBusinessEntity {
+
+    String name;
+
+
+}

+ 73 - 0
src/main/java/com/sooka/sponest/monitor/base/service/impl/BaseService.java

@@ -0,0 +1,73 @@
+package com.sooka.sponest.monitor.base.service.impl;
+
+import com.ruoyi.common.datascope.base.domain.BaseBusinessEntity;
+import com.ruoyi.common.redis.service.RedisService;
+import com.ruoyi.common.security.service.TokenService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Service;
+
+@Service
+public class BaseService {
+
+    @Value("${sooka.database.database_system:}")
+    public String database_system;
+    @Value("${sooka.database.database_event:}")
+    public String database_event;
+    @Value("${sooka.database.database_data:}")
+    public String database_data;
+    @Value("${sooka.dahua_video_server.loginIp:}")
+    public String loginIp;
+    @Value("${sooka.dahua_video_server.userName:}")
+    public String userName;
+    @Value("${sooka.dahua_video_server.userPwd:}")
+    public String userPwd;
+    @Value("${sooka.dahua_video_server.loginPort:}")
+    public Integer loginPort;
+    //app
+    @Value("${sooka.dahua_video_server_app.loginIpApp:}")
+    public String loginIpApp;
+    @Value("${sooka.dahua_video_server_app.userNameApp:}")
+    public String userNameApp;
+    @Value("${sooka.dahua_video_server_app.userPwdApp:}")
+    public String userPwdApp;
+    @Value("${sooka.dahua_video_server_app.loginPortApp:}")
+    public Integer loginPortApp;
+    //
+    @Value("${sooka.dahua_dss_server.host:}")
+    public String host;
+    @Value("${sooka.dahua_dss_server.user_name:}")
+    public String user_name;
+    @Value("${sooka.dahua_dss_server.password:}")
+    public String password;
+    @Value("${sooka.dahua_dss_server.client_id:}")
+    public String client_id;
+    @Value("${sooka.dahua_dss_server.client_secret:}")
+    public String client_secret;
+    @Value("${sooka.dahua_dss_server.version:}")
+    public String version;
+    @Value("${sooka.dahua_dss_server.video_download_url_linux:}")
+    public String videoDownloadUrlLinux;
+    @Value("${sooka.dahua_dss_server.video_download_url_win:}")
+    public String videoDownloadUrlWin;
+    @Value("${sooka.haikang_video_server.loginIp:}")
+    public String HkloginIp;
+    @Value("${sooka.haikang_video_server.appkey:}")
+    public String Hkappkey;
+    @Value("${sooka.haikang_video_server.secret:}")
+    public String Hksecret;
+    @Value("${sooka.haikang_video_server.loginPort:}")
+    public String HkloginPort;
+    @Autowired
+    TokenService tokenService;
+    @Autowired
+    private RedisService redisService;
+
+    public void setSookaDataBase(BaseBusinessEntity entity) {
+        entity.setDatabase_system(this.database_system);
+        entity.setDatabase_event(this.database_event);
+        entity.setDatabase_data(this.database_data);
+    }
+
+}
+

+ 19 - 0
src/main/java/com/sooka/sponest/monitor/base/util/database/DynamicDataSource.java

@@ -0,0 +1,19 @@
+package com.sooka.sponest.monitor.base.util.database;
+
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource;
+
+
+public class DynamicDataSource extends AbstractRoutingDataSource {
+
+    Logger logger = LoggerFactory.getLogger(DynamicDataSource.class);
+
+    @Override
+    protected Object determineCurrentLookupKey() {
+        String datasource = DynamicDataSourceSwitcher.getDataSource();
+        logger.info("------------------当前数据源 {}", DynamicDataSourceSwitcher.getDataSource());
+        return DynamicDataSourceSwitcher.getDataSource();
+    }
+}

+ 41 - 0
src/main/java/com/sooka/sponest/monitor/base/util/database/DynamicDataSourceAspect.java

@@ -0,0 +1,41 @@
+package com.sooka.sponest.monitor.base.util.database;
+
+import org.aspectj.lang.annotation.After;
+import org.aspectj.lang.annotation.Aspect;
+import org.aspectj.lang.annotation.Before;
+import org.aspectj.lang.annotation.Pointcut;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.core.annotation.Order;
+import org.springframework.stereotype.Component;
+
+@Aspect
+@Component
+@Order(1)
+public class DynamicDataSourceAspect {
+    private Logger logger = LoggerFactory.getLogger(DynamicDataSourceAspect.class);
+
+    /**
+     * 切入点只对@Service注解的类上的@DataSource方法生效
+     *
+     * @param myDataSource
+     */
+    @Pointcut(value = "(@within(org.springframework.stereotype.Service) ||@within(org.springframework.stereotype.Repository)) && @annotation(myDataSource)")
+    public void dynamicDataSourcePointCut(MyDataSource myDataSource) {
+    }
+
+    @Before(value = "dynamicDataSourcePointCut(myDataSource)")
+    public void switchDataSource(MyDataSource myDataSource) {
+        DynamicDataSourceSwitcher.setDataSource(myDataSource.value());
+    }
+
+    /**
+     * 切点执行完后 切换成主数据库
+     *
+     * @param myDataSource
+     */
+    @After(value = "dynamicDataSourcePointCut(myDataSource)")
+    public void after(MyDataSource myDataSource) {
+        DynamicDataSourceSwitcher.cleanDataSource();
+    }
+}

+ 41 - 0
src/main/java/com/sooka/sponest/monitor/base/util/database/DynamicDataSourceSwitcher.java

@@ -0,0 +1,41 @@
+package com.sooka.sponest.monitor.base.util.database;
+
+import org.apache.commons.lang.StringUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+
+public class DynamicDataSourceSwitcher {
+
+    public static final String Master = "master";
+    public static final String dbCenterTtranmanager = "db-center-tranmanager";
+    public static final String dbCenterData = "db-center-data";
+    public static final String dbCenterEvent = "db-center-event";
+    public static final String dbCenterMonitor = "db-center-monitor";
+    public static final String dbCenterTask = "db-center-task";
+    public static final String dbCenterEvaluation = "db-center-evaluation";
+    public static final String dbCenterFire = "db-center-fire";
+    public static final String dbCenterStraw = "db-center-straw";
+    public static final String dbCenterPests = "db-center-pests";
+    public static final String dbCenterComprehensive = "db-center-comprehensive";
+    public static final String dbCenterOnest = "db-center-onest";
+    private static final ThreadLocal<String> contextHolder = new ThreadLocal<>();
+    static Logger logger = LoggerFactory.getLogger(DynamicDataSourceSwitcher.class);
+
+    public static String getDataSource() {
+        if (StringUtils.isEmpty(contextHolder.get())) {
+            setDataSource(Master);
+        }
+        return contextHolder.get();
+    }
+
+    public static void setDataSource(String name) {
+        logger.info("-------- 设置数据源数据源为 :{} ", name);
+        contextHolder.set(name);
+    }
+
+    public static void cleanDataSource() {
+        contextHolder.remove();
+    }
+
+}

+ 4 - 0
src/main/java/com/sooka/sponest/monitor/base/util/database/GlobalTransactionalRabbitMQ.java

@@ -0,0 +1,4 @@
+package com.sooka.sponest.monitor.base.util.database;
+
+public @interface GlobalTransactionalRabbitMQ {
+}

+ 136 - 0
src/main/java/com/sooka/sponest/monitor/base/util/database/MultipleDataSourceConfig.java

@@ -0,0 +1,136 @@
+package com.sooka.sponest.monitor.base.util.database;
+
+import com.alibaba.druid.pool.DruidDataSource;
+import org.springframework.beans.factory.annotation.Qualifier;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.context.annotation.Primary;
+
+import javax.sql.DataSource;
+import java.util.HashMap;
+import java.util.Map;
+
+@Configuration
+public class MultipleDataSourceConfig {
+
+    @Bean("master")
+    @ConfigurationProperties(prefix = "spring.datasource.dynamic.datasource.master")
+    public DataSource createMasterDataSource() {
+        return new DruidDataSource();
+    }
+
+    @Bean("dbSystemData")
+    @ConfigurationProperties(prefix = "spring.datasource.dynamic.datasource.db-system")
+    public DataSource createSystemDataSource() {
+        return new DruidDataSource();
+    }
+
+    @Bean("dbCenterTranmanager")
+    @ConfigurationProperties(prefix = "spring.datasource.dynamic.datasource.db-center-tranmanager")
+    public DataSource createTranmanagerDataSource() {
+        return new DruidDataSource();
+    }
+
+    @Bean("dbCenterData")
+    @ConfigurationProperties(prefix = "spring.datasource.dynamic.datasource.db-center-data")
+    public DataSource createDataDataSource() {
+        return new DruidDataSource();
+    }
+
+    @Bean("dbCenterEvent")
+    @ConfigurationProperties(prefix = "spring.datasource.dynamic.datasource.db-center-event")
+    public DataSource createEventDataSource() {
+        return new DruidDataSource();
+    }
+
+    @Bean("dbCenterMonitor")
+    @ConfigurationProperties(prefix = "spring.datasource.dynamic.datasource.db-center-monitor")
+    public DataSource createMonitorDataSource() {
+        return new DruidDataSource();
+    }
+
+    @Bean("dbCenterTask")
+    @ConfigurationProperties(prefix = "spring.datasource.dynamic.datasource.db-center-task")
+    public DataSource createTaskDataSource() {
+        return new DruidDataSource();
+    }
+
+    @Bean("dbCenterEvaluation")
+    @ConfigurationProperties(prefix = "spring.datasource.dynamic.datasource.db-center-evaluation")
+    public DataSource createEvaluationDataSource() {
+        return new DruidDataSource();
+    }
+
+    @Bean("dbCenterFire")
+    @ConfigurationProperties(prefix = "spring.datasource.dynamic.datasource.db-center-fire")
+    public DataSource createFireDataSource() {
+        return new DruidDataSource();
+    }
+
+    @Bean("dbCenterStraw")
+    @ConfigurationProperties(prefix = "spring.datasource.dynamic.datasource.db-center-straw")
+    public DataSource createStrawDataSource() {
+        return new DruidDataSource();
+    }
+
+    @Bean("dbCenterPests")
+    @ConfigurationProperties(prefix = "spring.datasource.dynamic.datasource.db-center-pests")
+    public DataSource createPestsDataSource() {
+        return new DruidDataSource();
+    }
+
+    @Bean("dbCenterComprehensive")
+    @ConfigurationProperties(prefix = "spring.datasource.dynamic.datasource.db-center-comprehensive")
+    public DataSource createComprehensiveDataSource() {
+        return new DruidDataSource();
+    }
+
+    @Bean("dbCenterOnest")
+    @ConfigurationProperties(prefix = "spring.datasource.dynamic.datasource.db-center-onest")
+    public DataSource createOnestDataSource() {
+        return new DruidDataSource();
+    }
+
+    /**
+     * 设置动态数据源,通过@Primary 来确定主DataSource
+     *
+     * @return
+     */
+    @Bean
+    @Primary
+    public DataSource createDynamicDataSource(@Qualifier("master") DataSource master,
+                                              @Qualifier("dbSystemData") DataSource dbSystemData,
+                                              @Qualifier("dbCenterData") DataSource dbCenterData,
+                                              @Qualifier("dbCenterEvent") DataSource dbCenterEvent,
+                                              @Qualifier("dbCenterMonitor") DataSource dbCenterMonitor,
+                                              @Qualifier("dbCenterTask") DataSource dbCenterTask,
+                                              @Qualifier("dbCenterEvaluation") DataSource dbCenterEvaluation,
+                                              @Qualifier("dbCenterFire") DataSource dbCenterFire,
+                                              @Qualifier("dbCenterStraw") DataSource dbCenterStraw,
+                                              @Qualifier("dbCenterPests") DataSource dbCenterPests,
+                                              @Qualifier("dbCenterComprehensive") DataSource dbCenterComprehensive,
+                                              @Qualifier("dbCenterOnest") DataSource dbCenterOnest,
+                                              @Qualifier("dbCenterTranmanager") DataSource dbCenterTranmanager) {
+        DynamicDataSource dynamicDataSource = new DynamicDataSource();
+        //设置默认数据源
+        dynamicDataSource.setDefaultTargetDataSource(master);
+        //配置多数据源
+        Map<Object, Object> map = new HashMap<>();
+        map.put("master", master);
+        map.put("db-system", dbSystemData);
+        map.put("db-center-tranmanager", dbCenterTranmanager);
+        map.put("db-center-data", dbCenterData);
+        map.put("db-center-event", dbCenterEvent);
+        map.put("db-center-monitor", dbCenterMonitor);
+        map.put("db-center-task", dbCenterTask);
+        map.put("db-center-evaluation", dbCenterEvaluation);
+        map.put("db-center-fire", dbCenterFire);
+        map.put("db-center-straw", dbCenterStraw);
+        map.put("db-center-pests", dbCenterPests);
+        map.put("db-center-comprehensive", dbCenterComprehensive);
+        map.put("db-center-onest", dbCenterOnest);
+        dynamicDataSource.setTargetDataSources(map);
+        return dynamicDataSource;
+    }
+}

+ 15 - 0
src/main/java/com/sooka/sponest/monitor/base/util/database/MyDataSource.java

@@ -0,0 +1,15 @@
+package com.sooka.sponest.monitor.base.util.database;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+
+@Retention(RetentionPolicy.RUNTIME)
+@Target({
+        ElementType.METHOD
+})
+public @interface MyDataSource {
+    String value() default "";
+}

+ 14 - 0
src/main/java/com/sooka/sponest/monitor/camera/domain/CameraCodeAndNameVO.java

@@ -0,0 +1,14 @@
+package com.sooka.sponest.monitor.camera.domain;
+
+import lombok.Data;
+
+@Data
+public class CameraCodeAndNameVO {
+
+    private String cameraCode;
+
+    private String cameraName;
+
+    private String cameraType;
+
+}

+ 232 - 0
src/main/java/com/sooka/sponest/monitor/device/controller/CentermonitorTMonitoringDeviceController.java

@@ -0,0 +1,232 @@
+package com.sooka.sponest.monitor.device.controller;
+
+import com.alibaba.fastjson.JSONObject;
+import com.dahuatech.hutool.json.JSONUtil;
+import com.ruoyi.common.core.utils.DateUtils;
+import com.ruoyi.common.core.utils.StringUtils;
+import com.ruoyi.common.core.utils.uuid.IdUtils;
+import com.ruoyi.common.core.web.controller.BaseController;
+import com.ruoyi.common.core.web.domain.AjaxResult;
+import com.ruoyi.common.log.annotation.Log;
+import com.ruoyi.common.log.enums.BusinessType;
+import com.sooka.sponest.monitor.device.domain.*;
+import com.sooka.sponest.monitor.device.service.ICentermonitorTMonitoringDeviceService;
+import com.sooka.sponest.monitor.util.BeanUtil;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.annotation.Resource;
+import java.text.ParseException;
+import java.util.HashMap;
+
+/**
+ * 监测设备Controller
+ *
+ * @author ruoyi
+ * @date 2023-03-14
+ */
+@RestController
+@RequestMapping("/device")
+public class CentermonitorTMonitoringDeviceController extends BaseController {
+
+    //水质
+    private static final String device_water_quality = "1";
+    //土壤墒情
+    private static final String device_soil_moisture = "2";
+    //污染源
+    private static final String device_pollution_sources = "3";
+    //病虫害
+    private static final String device_insect_pests = "4";
+    //大气监测
+    private static final String device_air_quality = "5";
+    //水压监测
+    private static final String device_water_pressure = "6";
+    //水流速
+    private static final String device_water_velocity = "7";
+
+
+    @Resource
+    private ICentermonitorTMonitoringDeviceService centermonitorTMonitoringDeviceService;
+
+    /**
+     * 根据设备类型查询监控设备Map
+     */
+    @Log(title = "传感器", businessType = BusinessType.OTHER)
+    @ApiOperation(value = "接收传感器水质数据", notes = "接收传感器水质数据")
+    @PostMapping("/getDevideCodeMapByTypes")
+    public AjaxResult getDevideCodeMapByTypes(@RequestBody String types) {
+        if (StringUtils.isEmpty(types)) {
+            return AjaxResult.error("缺少必要参数");
+        }
+        String[] type_arr;
+        try {
+            type_arr = types.split(",");
+            return AjaxResult.success(centermonitorTMonitoringDeviceService.getDevideCodeMapByTypes(type_arr));
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return AjaxResult.success(new HashMap<>());
+    }
+
+    /**
+     * 【物联网】接收精讯传感器:大气、水质、土壤墒情数据通用方法
+     */
+    @Log(title = "传感器", businessType = BusinessType.OTHER)
+    @ApiOperation(value = "接收精讯传感器数据通用方法", notes = "接收精讯传感器数据通用方法")
+    @PostMapping("/saveSennorDeviceData")
+    public AjaxResult saveSennorDeviceData(@RequestBody JSONObject json) {
+        logger.info("监控中心收到【物联网】数据 ==> {}", json);
+        try {
+            /**先判断data是否为空,如果不为空则取数据中的deviceNumber判断传感器类型**/
+            Object data = json.get("data");
+            /**设备编码**/
+            String deviceNumber = json.getJSONObject("data").getString("deviceNumber");
+            if (data != null && StringUtils.isNotEmpty(deviceNumber)) {
+                /**数据采集时间**/
+                String time = json.getJSONObject("data").getString("time");
+                CentermonitorTMonitoringDevice device =
+                        centermonitorTMonitoringDeviceService.selectCentermonitorTMonitoringDeviceByDeviceCode(deviceNumber);
+                /**土壤墒情数据处理方法**/
+                if (device_soil_moisture.equals(device.getDeviceType())) {
+                    CentermonitorTMonitoringDataSoilMoisture soilMoisture;
+                    String[] values = json.getJSONObject("data").getString("data").split(" \\| ");
+                    soilMoisture = BeanUtil.arrayToBean(values, CentermonitorTMonitoringDataSoilMoisture.class);
+                    /**添加ID、设备编码、采集时间**/
+                    soilMoisture.setId(IdUtils.simpleUUID());
+                    soilMoisture.setDeviceCode(deviceNumber);
+                    soilMoisture.setCreateTime(time);
+                    /**数据库持久化**/
+                    centermonitorTMonitoringDeviceService.saveDataSoilMoistureMonitoringData(soilMoisture);
+                    /**大气数据处理方法**/
+                } else if (device_air_quality.equals(device.getDeviceType())) {
+                    CentermonitorTMonitoringDataAtmosphere atmosphere;
+                    String[] values = json.getJSONObject("data").getString("data").split(" \\| ");
+                    atmosphere = BeanUtil.arrayToBean(values, CentermonitorTMonitoringDataAtmosphere.class);
+                    /**添加ID、设备编码、采集时间**/
+                    atmosphere.setId(IdUtils.simpleUUID());
+                    atmosphere.setDeviceCode(deviceNumber);
+                    atmosphere.setCreateTime(time);
+                    /**数据库持久化**/
+                    centermonitorTMonitoringDeviceService.saveDataAtmosphereMonitoringData(atmosphere);
+                    /**水质数据处理方法**/
+                } else if (device_water_quality.equals(device.getDeviceType())) {
+                    CentermonitorTMonitoringDataWaterQuality waterQuality;
+                    String[] values = json.getJSONObject("data").getString("data").split(" \\| ");
+                    waterQuality = BeanUtil.arrayToBean(values, CentermonitorTMonitoringDataWaterQuality.class);
+                    /**添加ID、设备编码、采集时间**/
+                    waterQuality.setId(IdUtils.simpleUUID());
+                    waterQuality.setDeviceCode(deviceNumber);
+                    waterQuality.setCreateTime(time);
+                    /**数据库持久化**/
+                    centermonitorTMonitoringDeviceService.saveDataWaterQualityMonitoringData(waterQuality);
+                }
+
+            }
+            return AjaxResult.success();
+        } catch (Exception e) {
+            e.printStackTrace();
+            return AjaxResult.error();
+        }
+    }
+
+    /**
+     * 【水压】接收城安盛邦 水压传感器数据方法
+     */
+    @Log(title = "传感器", businessType = BusinessType.OTHER)
+    @ApiOperation(value = "接收水压传感器数据", notes = "接收水压传感器数据")
+    @PostMapping("/saveWaterPressureDeviceData")
+    public AjaxResult saveWaterPressureDeviceData(@RequestBody JSONObject json) {
+        String deviceCode = "";
+        Object ob = json.get("serviceId");//服务ID,在上线下线时有可能为空
+        logger.info("监控中心收到【水压心跳】数据 ==> {}", json);
+        CentermonitorTMonitoringDataWaterPressure waterPressure = new CentermonitorTMonitoringDataWaterPressure();
+        waterPressure.setId(IdUtils.simpleUUID());
+        waterPressure.setCreateTime(DateUtils.getTime());
+        /** 【心跳】 心跳数据处理方法 4:代表心跳数据 ,做数据库持久化**/
+        if (ob != null && ob.toString().equals("4")) {
+            JSONObject payload = json.getJSONObject("payload");
+            waterPressure.putWaterPressureValue(
+                    json.getString("IMEI"),
+                    payload.getString("threshold_low_enable"),
+                    payload.getString("threshold_high_enable"),
+                    payload.getString("signalPower"),
+                    payload.getString("hydraulic_value"),
+                    payload.getString("hydraulic_threshold_min"),
+                    payload.getString("hydraulic_threshold_max"),
+                    payload.getString("heartbeat_time"),
+                    payload.getString("battery_voltage"),
+                    payload.getString("battery_value"));
+            return toAjax(centermonitorTMonitoringDeviceService.saveWaterPressureDeviceData(waterPressure));
+            /** 【水压监测告警】 1001:代表水压监测告警 ,做数据库持久化**/
+        } else if (ob != null && ob.toString().equals("1001")) {
+            logger.info("监控中心收到【水压监测告警】数据 ==> {}", json);
+            JSONObject content = json.getJSONObject("eventContent");
+            deviceCode = json.getString("IMEI");
+            CentermonitorTMonitoringDevice device = centermonitorTMonitoringDeviceService.selectCentermonitorTMonitoringDeviceByDeviceCode(deviceCode);
+            //枚举值 : 0--水压过高报警解除 1--水压过高报警 2--水压过低报警解除 3--水压过低报警 4--水压波动报警解除 5--水压波动报警
+            if ((content.get("hydraulic_state").toString().equals("1") || content.get("hydraulic_state").toString().equals("3") || content.get("hydraulic_state").toString().equals("5")) && device.getOpenWarn().equals("1")) {
+                try {
+                    centermonitorTMonitoringDeviceService.waterPressureWarn(device, json);
+                } catch (ParseException e) {
+                    e.printStackTrace();
+                    throw new RuntimeException(e);
+                }
+            }
+            return AjaxResult.success();
+            /** 【故障上报】 1002:代表故障上报 ,做数据库持久化**/
+        } else if (ob != null && ob.toString().equals("1002")) {
+            logger.info("监控中心收到【故障上报】数据 ==> {}", json);
+            return AjaxResult.success();
+            /** 【电池低电压告警】 1003:代表电池低电压告警 ,做数据库持久化**/
+        } else if (ob != null && ob.toString().equals("1003")) {
+            logger.info("监控中心收到【电池低电压告警】数据 ==> {}", json);
+            return AjaxResult.success();
+        } else {
+            return AjaxResult.success();
+        }
+
+    }
+
+
+    /**
+     * 【水流速】接收水水测家传感器:水流速数据方法
+     */
+    @Log(title = "传感器", businessType = BusinessType.OTHER)
+    @ApiOperation(value = "接收传感器水流速数据", notes = "接收传感器水流速数据")
+    @PostMapping("/saveWaterMonitoringData")
+    public AjaxResult saveWaterMonitoringData(@RequestBody JSONObject json) {
+        logger.info("监控中心收到【水流速】数据 ==> {}", json);
+        CentermonitorTMonitoringDataWaterVelocity centermonitorTMonitoringDataWater = null;
+        try {
+            centermonitorTMonitoringDataWater = BeanUtil.mapToBean(json, CentermonitorTMonitoringDataWaterVelocity.class);
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return toAjax(centermonitorTMonitoringDeviceService.saveWaterMonitoringData(centermonitorTMonitoringDataWater));
+    }
+
+
+
+    /**
+     * 【病虫害】接收病虫害传感器数据方法
+     */
+    @Log(title = "传感器", businessType = BusinessType.OTHER)
+    @ApiOperation(value = "接收病虫害传感器数据", notes = "接收病虫害传感器数据")
+    @PostMapping("/saveInsectPestsDeviceData")
+    public AjaxResult saveInsectPestsDeviceData(@RequestBody JSONObject json) throws Exception {
+        logger.info("监控中心收到【病虫害】数据 ==> {}", json);
+        Object object = json.get("data");
+        String deviceNumber = json.getJSONObject("data").getString("deviceNumber");
+        if (object != null && StringUtils.isNotEmpty(deviceNumber)) {
+            CentermonitorTMonitoringDataInsectPests data = BeanUtil.mapToBean(JSONUtil.parseObj(object), CentermonitorTMonitoringDataInsectPests.class);
+            data.setId(IdUtils.simpleUUID());
+            data.setCreateTime(DateUtils.getTime());
+            return toAjax(centermonitorTMonitoringDeviceService.saveInsectPestsDeviceData(data));
+        }
+        return AjaxResult.error();
+    }
+
+}

+ 51 - 0
src/main/java/com/sooka/sponest/monitor/device/domain/CentermonitorTMonitoringDataAtmosphere.java

@@ -0,0 +1,51 @@
+package com.sooka.sponest.monitor.device.domain;
+
+import lombok.Data;
+
+/**
+ *  监控中心监测设备大气监测数据实体
+ * */
+@Data
+public class CentermonitorTMonitoringDataAtmosphere extends MonitorBaseEntity{
+
+    //温度
+    private String temperature;
+    //湿度
+    private String humidity;
+    //光照度
+    private String illuminance;
+    //大气压
+    private String atmos;
+    //风速
+    private String windSpeed;
+    //风向
+    private String windDirection;
+    //电池电压
+    private String batteryVoltage;
+    //臭氧
+    private String ozone;
+    //总挥发性有机物
+    private String tvoc;
+    //总悬浮颗粒物
+    private String tsp;
+    //二氧化氮
+    private String nitrogenDioxide;
+    //二氧化硫
+    private String sulfurDioxide;
+    //一氧化碳
+    private String carbonMonoxide;
+    //可吸入微粒 pm2.51
+    private String fineParticle;
+    //可吸入颗粒 pm10
+    private String suctionParticle;
+    //纬度
+    private String latitude;
+    //经度
+    private String longitude;
+    //信号强度
+    private String signalStrength;
+    //错误码
+    private String errorCode;
+    //版本
+    private String version;
+}

+ 28 - 0
src/main/java/com/sooka/sponest/monitor/device/domain/CentermonitorTMonitoringDataInsectPests.java

@@ -0,0 +1,28 @@
+package com.sooka.sponest.monitor.device.domain;
+
+import lombok.Data;
+
+/**
+ *  监控中心监测设备病虫害监测数据实体
+ * */
+@Data
+public class CentermonitorTMonitoringDataInsectPests extends MonitorBaseEntity{
+
+    private String downloadUrl;
+    private String downloadUrlCompress;
+    private String taggingImgUrl;
+    private String taggingImgUrlCompress;
+    private String deviceNumber;
+    private String newTime;
+    private String results;
+    private Integer newCount;
+    private Integer typeCount;
+    private Integer oldCount;
+    private String oldTime;
+    private String oldResults;
+    private Integer oldTypeCount;
+    private String oldDownloadUrl;
+    private String oldTaggingImgUrl;
+    private String oldDownloadUrlCompress;
+    private String oldTaggingImgUrlCompress;
+}

+ 23 - 0
src/main/java/com/sooka/sponest/monitor/device/domain/CentermonitorTMonitoringDataSoilMoisture.java

@@ -0,0 +1,23 @@
+package com.sooka.sponest.monitor.device.domain;
+
+import lombok.Data;
+
+/**
+ *  监控中心监测设备土壤监测数据实体
+ * */
+@Data
+public class CentermonitorTMonitoringDataSoilMoisture extends MonitorBaseEntity{
+
+    private String temperature;
+    private String humidity;
+    private String ph;
+    private String conductivity;
+    private String nitrogen;
+    private String phosphorus;
+    private String potassium;
+    private String latitude;
+    private String longitude;
+    private String signalStrength;
+    private String errorCode;
+    private String version;
+}

+ 67 - 0
src/main/java/com/sooka/sponest/monitor/device/domain/CentermonitorTMonitoringDataWaterPressure.java

@@ -0,0 +1,67 @@
+package com.sooka.sponest.monitor.device.domain;
+
+import lombok.Data;
+
+/**
+ *  监控中心监测设备水压监测数据实体
+ * */
+@Data
+public class CentermonitorTMonitoringDataWaterPressure extends MonitorBaseEntity{
+
+    public void putWaterPressureValue(String IMEI, String thresholdLowEnable, String thresholdHighEnable,
+                                      String signalPower, String hydraulicValue, String hydraulicThresholdMin, String hydraulicThresholdMax,
+                                      String heartbeatTime, String batteryVoltage, String batteryValue){
+        this.IMEI = IMEI;
+        this.thresholdLowEnable = thresholdLowEnable;
+        this.thresholdHighEnable = thresholdHighEnable;
+        this.signalPower = signalPower;
+        this.hydraulicValue = hydraulicValue;
+        this.hydraulicThresholdMin = hydraulicThresholdMin;
+        this.hydraulicThresholdMax = hydraulicThresholdMax;
+        this.heartbeatTime = heartbeatTime;
+        this.batteryVoltage = batteryVoltage;
+        this.batteryValue = batteryValue;
+    }
+
+    /**
+     * 设备编码
+     * */
+    private String IMEI;
+
+    /**
+     * 下限警报使能
+     * */
+    private String thresholdLowEnable;
+    /**
+     * 上限警报使能
+     * */
+    private String thresholdHighEnable;
+    /**
+     * 信号强度
+     * */
+    private String signalPower;
+    /**
+     * 水压力值
+     * */
+    private String hydraulicValue;
+    /**
+     * 水压下限阈值
+     * */
+    private String hydraulicThresholdMin;
+    /**
+     * 水压上限阈值
+     * */
+    private String hydraulicThresholdMax;
+    /**
+     * 心跳周期
+     * */
+    private String heartbeatTime;
+    /**
+     * 电池电压
+     * */
+    private String batteryVoltage;
+    /**
+     * 电池电量
+     * */
+    private String batteryValue;
+}

+ 23 - 0
src/main/java/com/sooka/sponest/monitor/device/domain/CentermonitorTMonitoringDataWaterQuality.java

@@ -0,0 +1,23 @@
+package com.sooka.sponest.monitor.device.domain;
+
+import lombok.Data;
+
+/**
+ *  监控中心监测设备水质监测数据实体
+ * */
+@Data
+public class CentermonitorTMonitoringDataWaterQuality extends MonitorBaseEntity{
+
+    private String waterPh;
+    private String waterTemperature;
+    private String waterQualitySuspension;
+    private String waterTemperatureTwo;
+    private String conductivity;
+    private String ammoniaNitrogen;
+    private String cod;
+    private String latitude;
+    private String longitude;
+    private String signalStrength;
+    private String errorCode;
+    private String version;
+}

+ 69 - 0
src/main/java/com/sooka/sponest/monitor/device/domain/CentermonitorTMonitoringDataWaterVelocity.java

@@ -0,0 +1,69 @@
+package com.sooka.sponest.monitor.device.domain;
+
+import lombok.Data;
+
+/**
+ *  监控中心监测设备水流速监测数据实体
+ * */
+@Data
+public class CentermonitorTMonitoringDataWaterVelocity extends MonitorBaseEntity {
+
+    /** 测站唯一编码 */
+    private String ST;
+
+    /** 功能码 */
+    private String FUN;
+
+    /** 数据采集时间 */
+    private String TT;
+
+    /** 通讯时间 */
+    private String TM;
+
+    /** 版本 */
+    private Double VER;
+
+    /** 传输标志 */
+    private Integer MARK;
+
+    /** 数据包流水号 */
+    private Integer SERIAL;
+
+    /** 测站类型 */
+    private String TYPE;
+
+    /** 设备温度 */
+    private Double DTEMP;
+
+    /** 电池电量 */
+    private Double BAT;
+
+    /** 设备通讯信号强度 */
+    private Double SIGNAL;
+
+    /** 设备电池电压 */
+    private Double VT;
+
+    /**水位*/
+    private Double Z;
+
+    /**流量计1瞬时流量Q1(采集水深/水位 流速 通过断面面积计算瞬时流量)*/
+    private Double Q1;
+
+    /**流量计2瞬时流量Q2(采集水深/水位 流速 通过断面面积计算瞬时流量)*/
+    private Double Q2;
+
+    /**瞬时流速*/
+    private Double V1;
+
+    /**水深*/
+    private Double Z1;
+
+    /**两个流量计的瞬时流量之和*/
+    private Double Q;
+
+    /**流量计1累计流量(通过瞬时流量的累计计算累计流量)*/
+    private Double CQ1;
+
+}
+

+ 161 - 0
src/main/java/com/sooka/sponest/monitor/device/domain/CentermonitorTMonitoringDevice.java

@@ -0,0 +1,161 @@
+package com.sooka.sponest.monitor.device.domain;
+
+import com.ruoyi.common.core.annotation.Excel;
+import com.ruoyi.common.datascope.base.domain.BaseBusinessEntity;
+import com.sooka.sponest.monitor.camera.domain.CameraCodeAndNameVO;
+import lombok.Data;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 监测设备对象 centermonitor_t_monitoring_device
+ *
+ * @author ruoyi
+ * @date 2023-03-14
+ */
+@Data
+public class CentermonitorTMonitoringDevice extends BaseBusinessEntity {
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 注释
+     */
+    private String id;
+
+    /**
+     * 设备名称
+     */
+    @Excel(name = "设备名称")
+    private String deviceName;
+
+    /**
+     * 品牌
+     */
+    @Excel(name = "品牌")
+    private String brand;
+
+    /**
+     * 设备编码
+     */
+    @Excel(name = "设备编码")
+    private String deviceCode;
+
+    /**
+     * 经度
+     */
+    @Excel(name = "经度")
+    private String longitude;
+
+    /**
+     * 纬度
+     */
+    @Excel(name = "纬度")
+    private String latitude;
+
+    /**
+     * 所属部门ID
+     */
+//    @Excel(name = "所属部门ID")
+    private String deptId;
+
+    /**
+     * 所属部门
+     */
+    @Excel(name = "所属部门")
+    private String deptName;
+
+    /**
+     * 工作状态
+     */
+    @Excel(name = "工作状态", readConverterExp = "0=在线,1=离线")
+    private String workingStatus;
+
+    /**
+     * 设备类型
+     */
+    @Excel(name = "设备类型", readConverterExp = "1=水质环境,2=土壤墒情,3=污染源,4=病虫害监测,5=大气监测,6=水压监测,7=水流速,8=水尺")
+    private String deviceType;
+
+    /**
+     * 预警阈值
+     */
+    @Excel(name = "预警阈值")
+    private Integer warnLine;
+
+    /**
+     * 负责人
+     */
+    @Excel(name = "负责人")
+    private String charger;
+
+    /**
+     * 电话
+     */
+    @Excel(name = "电话")
+    private String chargerTel;
+
+    private String workingStatusText;
+
+    private String deviceTypeText;
+
+    /**
+     * 备注
+     */
+    @Excel(name = "备注")
+    private String remark;
+
+    /**
+     * 所属区域
+     */
+    @Excel(name = "所属区域")
+    private String address;
+
+    /**
+     * 告警状态
+     */
+    private String openWarn;
+
+    /**
+     * 可用系统
+     */
+    private List<CentermonitorTMonitoringDevice> forSystem = new ArrayList<>();
+
+    private String type;
+
+    private String typeName;
+
+    /**
+     * 该属性用于回显监控设备数据
+     * */
+    private Map<String, Object> data;
+
+    /**
+     * 该属性用于回显监控设备阈值
+     * */
+    private Map<String, Object> threshold;
+
+    /**
+     * 传感器图片
+     * */
+    private List<String> deviceImages;
+
+    private List<String> deviceImagesList;
+
+    /**
+     * 传感器的监测数据
+     */
+    private Map<String, Object> sensorDetectionList;
+
+    private Map<String, Object> deviceList;
+
+    private List<String> cameraCodeList;
+
+    private String cameraCode;
+
+    private String cameraName;
+
+    private List<CameraCodeAndNameVO> cameras;
+
+}

+ 49 - 0
src/main/java/com/sooka/sponest/monitor/device/domain/CentermonitorTMonitoringThresholdAtmosphere.java

@@ -0,0 +1,49 @@
+package com.sooka.sponest.monitor.device.domain;
+
+import lombok.Data;
+
+/**
+ *  监控中心监测设备大气阈值实体
+ * */
+@Data
+public class CentermonitorTMonitoringThresholdAtmosphere extends MonitorBaseEntity {
+
+    private String id;
+
+    /** 设备编码 */
+    private String deviceCode;
+
+    /** pm2.5 */
+    private String fineParticleThreshold;
+
+    /** pm10 */
+    private String suctionParticleThreshold;
+
+    /** 一氧化碳 */
+    private String carbonMonoxideThreshold;
+
+    /** 臭氧 */
+    private String ozoneThreshold;
+
+    /** 二氧化氮 */
+    private String nitrogenDioxideThreshold;
+
+    /** 二氧化硫 */
+    private String sulfurDioxideThreshold;
+
+    /** 温度上限 */
+    private String temperatureThresholdUp;
+
+    /** 温度下限 */
+    private String temperatureThresholdDown;
+
+    /** 湿度上限 */
+    private String humidityThresholdUp;
+
+    /** 湿度下限 */
+    private String humidityThresholdDown;
+
+
+
+}
+

+ 62 - 0
src/main/java/com/sooka/sponest/monitor/device/domain/CentermonitorTMonitoringThresholdSoilMoisture.java

@@ -0,0 +1,62 @@
+package com.sooka.sponest.monitor.device.domain;
+
+import lombok.Data;
+
+/**
+ *  监控中心监测设备土壤水分实体
+ * */
+@Data
+public class CentermonitorTMonitoringThresholdSoilMoisture extends MonitorBaseEntity {
+
+    /** 主键 */
+    private String id;
+
+    /** 设备编码 */
+    private String deviceCode;
+
+    /** 温度上限 */
+    private String  temperatureThresholdUp;
+
+    /** 温度下限 */
+    private String  temperatureThresholdDown;
+
+    /** 湿度上限 */
+    private String  humidityThresholdUp;
+
+    /** 湿度下限 */
+    private String  humidityThresholdDown;
+
+    /** ph值上限 */
+    private String  phThresholdUp;
+
+    /** ph值下限 */
+    private String  phThresholdDown;
+
+    /** 导电率上限 */
+    private String  conductivityThresholdUp;
+
+    /** 导电率下限 */
+    private String  conductivityThresholdDown;
+
+    /** 氮含量上限 */
+    private String  nitrogenThresholdUp;
+
+    /** 氮含量下限 */
+    private String  nitrogenThresholdDown;
+
+    /** 磷含量上限 */
+    private String  phosphorusThresholdUp;
+
+    /** 磷含量下限 */
+    private String  phosphorusThresholdDown;
+
+    /** 钾含量上限 */
+    private String  potassiumThresholdUp;
+
+    /** 钾含量下限 */
+    private String  potassiumThresholdDown;
+
+
+
+}
+

+ 47 - 0
src/main/java/com/sooka/sponest/monitor/device/domain/CentermonitorTMonitoringThresholdWaterQuality.java

@@ -0,0 +1,47 @@
+package com.sooka.sponest.monitor.device.domain;
+
+import lombok.Data;
+
+/**
+ *  监控中心监测设备水质阈值实体
+ * */
+@Data
+public class CentermonitorTMonitoringThresholdWaterQuality extends MonitorBaseEntity {
+
+    /** 主键 */
+    private String id;
+
+    /** 设备编码 */
+    private String deviceCode;
+
+    /** 水质ph上限 */
+    private String waterPhThresholdUp;
+
+    /** 水质ph下限 */
+    private String waterPhThresholdDown;
+
+    /** 水质浊度 */
+    private String waterQualitySuspensionThreshold;
+
+    /** 氨氮 */
+    private String ammoniaNitrogenThreshold;
+
+    /** 电导率上限 */
+    private String conductivityThresholdUp;
+
+    /** 电导率下限 */
+    private String conductivityThresholdDown;
+
+    /** 化学需氧量 */
+    private String codThreshold;
+
+    /** 水温上限 */
+    private String waterTemperatureThresholdUp;
+
+    /** 水温下限 */
+    private String waterTemperatureThresholdDown;
+
+
+
+}
+

+ 24 - 0
src/main/java/com/sooka/sponest/monitor/device/domain/CentermonitorTMonitoringThresholdWaterVelocity.java

@@ -0,0 +1,24 @@
+package com.sooka.sponest.monitor.device.domain;
+
+import lombok.Data;
+
+/**
+ *  监控中心监测设备水流速阈值实体
+ * */
+@Data
+public class CentermonitorTMonitoringThresholdWaterVelocity extends MonitorBaseEntity {
+
+    /** 主键 */
+    private String id;
+
+    /** 设备编码 */
+    private String deviceCode;
+
+    /** 瞬时流量阈值 */
+    private String qThreshold;
+
+    /** 瞬时流速阈值 */
+    private String vThreshold;
+
+}
+

+ 34 - 0
src/main/java/com/sooka/sponest/monitor/device/domain/MonitorBaseEntity.java

@@ -0,0 +1,34 @@
+package com.sooka.sponest.monitor.device.domain;
+
+import lombok.Data;
+
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ *  监控中心基础实体
+ * */
+@Data
+public class MonitorBaseEntity {
+
+    private String id;
+    private String deviceCode;
+    private String createTime;
+
+    /** 请求参数 */
+    private Map<String, Object> params;
+
+    public Map<String, Object> getParams()
+    {
+        if (params == null)
+        {
+            params = new HashMap<>();
+        }
+        return params;
+    }
+
+    public void setParams(Map<String, Object> params)
+    {
+        this.params = params;
+    }
+}

+ 55 - 0
src/main/java/com/sooka/sponest/monitor/device/domain/SensorEventVo.java

@@ -0,0 +1,55 @@
+package com.sooka.sponest.monitor.device.domain;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
+
+import java.util.Date;
+
+/**
+ * @Auther: mjq
+ * @Date: 2023/6/17 - 06 - 17 - 9:30
+ * @Description: com.sooka.sponest.event.centereventteventcatalogue.domain.sensor
+ * @version: 1.0
+ */
+@Data
+public class SensorEventVo {
+
+    private String eventType;// 事件分类(大类)
+
+    private String eventTypeXl;// 事件分类(小类)
+
+    private String eventName;// 事件名称
+
+    private String eventDescription;// 事件描述
+
+    private String longitude;// 经度
+
+    private String latitude;// 纬度
+
+    private String sensorId;// 传感器id
+
+    private String reportor;// 传感器名称
+
+    @JsonFormat(pattern = "yyyy-MM-dd'T'HH:mm:ss", timezone = "GMT+8")
+    public Date reportTime;// 上报时间
+
+    private String address;// 地址
+
+    private String picture;// 图片
+
+    @Override
+    public String toString() {
+        return "{" +
+                "reportTime=" + reportTime +
+                ", eventType='" + eventType + '\'' +
+                ", eventTypeXl='" + eventTypeXl + '\'' +
+                ", eventName='" + eventName + '\'' +
+                ", eventDescription='" + eventDescription + '\'' +
+                ", longitude='" + longitude + '\'' +
+                ", latitude='" + latitude + '\'' +
+                ", reportor='" + reportor + '\'' +
+                ", address='" + address + '\'' +
+                ", sensorId='" + sensorId + '\'' +
+                '}';
+    }
+}

+ 34 - 0
src/main/java/com/sooka/sponest/monitor/device/mapper/CentermonitorTMonitoringDeviceAtmosphereThresholdMapper.java

@@ -0,0 +1,34 @@
+package com.sooka.sponest.monitor.device.mapper;
+
+import com.sooka.sponest.monitor.device.domain.CentermonitorTMonitoringThresholdAtmosphere;
+
+import java.util.List;
+
+/**
+ * 监测设备阈值Mapper接口
+ *
+ * @author ruoyi
+ * @date 2023-03-14
+ */
+public interface CentermonitorTMonitoringDeviceAtmosphereThresholdMapper {
+
+    /**
+     * 通过设备编码查询大气传感器阈值
+     * */
+    CentermonitorTMonitoringThresholdAtmosphere selectAtmosphereThresholdByCode(String deviceCode);
+
+    /**
+     * 通过设备编码组查询大气传感器阈值
+     * */
+    List<CentermonitorTMonitoringThresholdAtmosphere> selectAtmosphereThresholdByCodes(String[] deviceCodes);
+
+    /**
+     * 新增大气监测设备阈值
+     */
+     int insertAtmosphereThreshold(CentermonitorTMonitoringThresholdAtmosphere thresholdAtmosphere);
+
+    /**
+     * 修改大气监测设备阈值
+     */
+     int updateAtmosphereThreshold(CentermonitorTMonitoringThresholdAtmosphere thresholdAtmosphere);
+}

+ 131 - 0
src/main/java/com/sooka/sponest/monitor/device/mapper/CentermonitorTMonitoringDeviceMapper.java

@@ -0,0 +1,131 @@
+package com.sooka.sponest.monitor.device.mapper;
+
+
+import com.sooka.sponest.monitor.device.domain.*;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 监测设备Mapper接口
+ *
+ * @author ruoyi
+ * @date 2023-03-14
+ */
+public interface CentermonitorTMonitoringDeviceMapper {
+
+
+    /**
+     * 查询监测设备根据设备类型
+     *
+     * @param types  设备类型
+     * @return 监测设备设备集合
+     */
+    List<Map<String,String>> getDevideCodeMapByTypes(String[]  types);
+
+    /**
+     * 查询监测设备
+     *
+     * @param deviceCode 监测设备主键
+     * @return 监测设备
+     */
+    CentermonitorTMonitoringDevice selectCentermonitorTMonitoringDeviceByDeviceCode(String deviceCode);
+
+    /**
+     * 查询大气传感器PM2.5和PM10的24小时平均值数据
+     */
+    CentermonitorTMonitoringDataAtmosphere selectAtmosphereAVGData(@Param("deviceCode") String deviceCode, @Param("startTime") String startTime, @Param("endTime") String endTime);
+
+    /**
+     * 删除监测设备
+     *
+     * @param id 需要删除的监测设备主键
+     * @return 结果
+     */
+
+    int deleteAtmosphereDataByCode(String id);
+    int deleteSoilMoistureDataByCode(String id);
+    int deleteWaterQualityDataByCode(String id);
+    int deleteInsectPestsDataByCode(String id);
+    int deleteWaterPressureDataByCode(String id);
+    int deleteWaterVelocityDataByCode(String id);
+
+
+
+    //病虫害时间校验
+    CentermonitorTMonitoringDataInsectPests selectInsectPestsNewDeviceData(CentermonitorTMonitoringDataInsectPests centermonitorTMonitoringDataInsectPests);
+    //土壤时间校验
+    CentermonitorTMonitoringDataSoilMoisture selectSoilMoistureNewDeviceData(CentermonitorTMonitoringDataSoilMoisture centermonitorTMonitoringDataSoilMoisture);
+    //大气时间校验
+    CentermonitorTMonitoringDataAtmosphere selectAtmosphereNewDeviceData(CentermonitorTMonitoringDataAtmosphere centermonitorTMonitoringDataAtmosphere);
+    //水质时间效验
+    CentermonitorTMonitoringDataWaterQuality selectWaterQualityNewDeviceData(CentermonitorTMonitoringDataWaterQuality centermonitorTMonitoringDataWaterQuality);
+
+    /**
+     * 接收传感器水质数据
+     *
+     * @param centermonitorTMonitoringDataWater 接收传感器水质数据
+     * @return 接收传感器水质数据
+     */
+    int saveWaterMonitoringData(CentermonitorTMonitoringDataWaterVelocity centermonitorTMonitoringDataWater);
+
+    // 保存土壤传感器数据
+    int saveDataSoilMoistureMonitoringData(CentermonitorTMonitoringDataSoilMoisture centermonitorTMonitoringDataSoilMoisture);
+
+    // 保存大气传感器数据
+    int saveDataAtmosphereMonitoringData(CentermonitorTMonitoringDataAtmosphere centermonitorTMonitoringDataAtmosphere);
+
+    //保存水质传感器数据
+    int saveDataWaterQualityMonitoringData(CentermonitorTMonitoringDataWaterQuality centermonitorTMonitoringDataWaterQuality);
+
+    //保存病虫害数据
+    int saveInsectPestsDeviceData(CentermonitorTMonitoringDataInsectPests centermonitorTMonitoringDataInsectPests);
+
+    //保存水压传感器数据
+    int saveWaterPressureDeviceData(CentermonitorTMonitoringDataWaterPressure centermonitorTMonitoringDataWaterPressure);
+
+    /**
+     * 根据设备编号修改监测设备离线在线状态
+     *
+     * @param centermonitorTMonitoringDevice 监测设备
+     * @return 结果
+     */
+    int updateDeviceWorkingStatusByDeviceCode(CentermonitorTMonitoringDevice centermonitorTMonitoringDevice);
+
+    /**
+     * 修改监测设备离线在线状态
+     *
+     * @param centermonitorTMonitoringDevice 监测设备
+     * @return 结果
+     */
+    int updateDeviceListToJudgeWorkingStatus(CentermonitorTMonitoringDevice centermonitorTMonitoringDevice);
+
+    /**
+     * 获取设备列表以判断工作状态
+     */
+    List<CentermonitorTMonitoringDevice> getDeviceListToJudgeWorkingStatus(CentermonitorTMonitoringDevice device);
+
+    /**
+     * 获取设备数据列表以判断工作状态
+     */
+    //大气
+    CentermonitorTMonitoringDataAtmosphere getDeviceData_1_Atmosphere_ListToJudgeWorkingStatus(CentermonitorTMonitoringDataAtmosphere device);
+
+    //病虫害
+    CentermonitorTMonitoringDataInsectPests getDeviceData_2_Insect_pests_ListToJudgeWorkingStatus(CentermonitorTMonitoringDataInsectPests device);
+
+    //土壤
+    CentermonitorTMonitoringDataSoilMoisture getDeviceData_3_SoilMoisture_ListToJudgeWorkingStatus(CentermonitorTMonitoringDataSoilMoisture device);
+
+    //水压
+    CentermonitorTMonitoringDataWaterPressure getDeviceData_4_WaterPressure_ListToJudgeWorkingStatus(CentermonitorTMonitoringDataWaterPressure device);
+
+    //水质
+    CentermonitorTMonitoringDataWaterQuality getDeviceData_5_WaterQuality_ListToJudgeWorkingStatus(CentermonitorTMonitoringDataWaterQuality device);
+
+    //水流速
+    CentermonitorTMonitoringDataWaterVelocity getDeviceData_6_WaterVelocity_ListToJudgeWorkingStatus(CentermonitorTMonitoringDataWaterVelocity device);
+
+
+}

+ 34 - 0
src/main/java/com/sooka/sponest/monitor/device/mapper/CentermonitorTMonitoringDeviceSoilMoistureThresholdMapper.java

@@ -0,0 +1,34 @@
+package com.sooka.sponest.monitor.device.mapper;
+
+import com.sooka.sponest.monitor.device.domain.CentermonitorTMonitoringThresholdSoilMoisture;
+
+import java.util.List;
+
+/**
+ * 监测设备阈值Mapper接口
+ *
+ * @author ruoyi
+ * @date 2023-03-14
+ */
+public interface CentermonitorTMonitoringDeviceSoilMoistureThresholdMapper {
+
+    /**
+     * 通过设备编码查询土壤传感器阈值
+     * */
+    CentermonitorTMonitoringThresholdSoilMoisture selectSoilMoistureThresholdByCode(String deviceCode);
+
+    /**
+     * 通过设备编码组查询土壤传感器阈值
+     * */
+    List<CentermonitorTMonitoringThresholdSoilMoisture> selectSoilMoistureThresholdByCodes(String[] deviceCodes);
+
+    /**
+     * 新增土壤监测设备阈值
+     */
+     int insertSoilMoistureThreshold(CentermonitorTMonitoringThresholdSoilMoisture thresholdSoilMoisture);
+
+    /**
+     * 修改土壤监测设备阈值
+     */
+     int updateSoilMoistureThreshold(CentermonitorTMonitoringThresholdSoilMoisture thresholdSoilMoisture);
+}

+ 34 - 0
src/main/java/com/sooka/sponest/monitor/device/mapper/CentermonitorTMonitoringDeviceThresholdMapper.java

@@ -0,0 +1,34 @@
+package com.sooka.sponest.monitor.device.mapper;
+
+import com.sooka.sponest.monitor.device.domain.CentermonitorTMonitoringThresholdWaterVelocity;
+
+import java.util.List;
+
+/**
+ * 监测设备阈值Mapper接口
+ *
+ * @author ruoyi
+ * @date 2023-03-14
+ */
+public interface CentermonitorTMonitoringDeviceThresholdMapper {
+
+    /**
+     * 通过设备编码查询水流速传感器阈值
+     * */
+    CentermonitorTMonitoringThresholdWaterVelocity selectWaterVelocityThresholdByCode(String deviceCode);
+
+    /**
+     * 通过设备编码组查询水流速传感器阈值
+     * */
+    List<CentermonitorTMonitoringThresholdWaterVelocity> selectWaterVelocityThresholdByCodes(String[] deviceCodes);
+
+    /**
+     * 新增水流速监测设备阈值
+     */
+     int insertWaterVelocityThreshold(CentermonitorTMonitoringThresholdWaterVelocity thresholdWaterVelocity);
+
+    /**
+     * 修改水流速监测设备阈值
+     */
+     int updateWaterVelocityThreshold(CentermonitorTMonitoringThresholdWaterVelocity thresholdWaterVelocity);
+}

+ 34 - 0
src/main/java/com/sooka/sponest/monitor/device/mapper/CentermonitorTMonitoringDeviceWaterQualityThresholdMapper.java

@@ -0,0 +1,34 @@
+package com.sooka.sponest.monitor.device.mapper;
+
+import com.sooka.sponest.monitor.device.domain.CentermonitorTMonitoringThresholdWaterQuality;
+
+import java.util.List;
+
+/**
+ * 监测设备阈值Mapper接口
+ *
+ * @author ruoyi
+ * @date 2023-03-14
+ */
+public interface CentermonitorTMonitoringDeviceWaterQualityThresholdMapper {
+
+    /**
+     * 通过设备编码查询水质传感器阈值
+     * */
+    CentermonitorTMonitoringThresholdWaterQuality selectWaterQualityThresholdByCode(String deviceCode);
+
+    /**
+     * 通过设备编码组查询水质传感器阈值
+     * */
+    List<CentermonitorTMonitoringThresholdWaterQuality> selectWaterQualityThresholdByCodes(String[] deviceCodes);
+
+    /**
+     * 新增水质监测设备阈值
+     */
+     int insertWaterQualityThreshold(CentermonitorTMonitoringThresholdWaterQuality thresholdWaterQuality);
+
+    /**
+     * 修改水质监测设备阈值
+     */
+     int updateWaterQualityThreshold(CentermonitorTMonitoringThresholdWaterQuality thresholdWaterQuality);
+}

+ 28 - 0
src/main/java/com/sooka/sponest/monitor/device/service/ICentermonitorTMonitoringDeviceAtmosphereThresholdService.java

@@ -0,0 +1,28 @@
+package com.sooka.sponest.monitor.device.service;
+
+import com.sooka.sponest.monitor.device.domain.CentermonitorTMonitoringThresholdAtmosphere;
+
+import java.util.List;
+
+public interface ICentermonitorTMonitoringDeviceAtmosphereThresholdService {
+
+    /**
+     * 通过设备编码查询大气传感器阈值
+     * */
+    CentermonitorTMonitoringThresholdAtmosphere selectAtmosphereThresholdByCode(String deviceCode);
+
+    /**
+     * 通过设备编码组查询大气传感器阈值
+     * */
+    List<CentermonitorTMonitoringThresholdAtmosphere> selectAtmosphereThresholdByCodes(String[] deviceCodes);
+
+    /**
+     * 新增大气监测设备阈值
+     */
+     int insertAtmosphereThreshold(CentermonitorTMonitoringThresholdAtmosphere thresholdAtmosphere);
+
+    /**
+     * 修改大气监测设备阈值
+     */
+     int updateAtmosphereThreshold(CentermonitorTMonitoringThresholdAtmosphere thresholdAtmosphere);
+}

+ 97 - 0
src/main/java/com/sooka/sponest/monitor/device/service/ICentermonitorTMonitoringDeviceService.java

@@ -0,0 +1,97 @@
+package com.sooka.sponest.monitor.device.service;
+
+import com.alibaba.fastjson.JSONObject;
+import com.sooka.sponest.monitor.device.domain.*;
+
+import java.text.ParseException;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 监测设备Service接口
+ *
+ * @author ruoyi
+ * @date 2023-03-14
+ */
+public interface ICentermonitorTMonitoringDeviceService {
+
+    /**
+     * 根据设备类型查询监控设备Map
+     *
+     * @param types  设备类型
+     * @return 监测设备设备集合
+     */
+    List<Map<String,String>> getDevideCodeMapByTypes(String[]  types);
+
+    /**
+     * 查询监测设备
+     *
+     * @param deviceCode 监测设备主键
+     * @return 监测设备
+     */
+    CentermonitorTMonitoringDevice selectCentermonitorTMonitoringDeviceByDeviceCode(String deviceCode);
+
+    /**
+     * 接收传感器水流速数据
+     *
+     * @param centermonitorTMonitoringDataWater 接收传感器水流速数据
+     * @return 接收传感器水流速数据
+     */
+    int saveWaterMonitoringData(CentermonitorTMonitoringDataWaterVelocity centermonitorTMonitoringDataWater);
+
+    /**
+     * 【病虫害】接收病虫害传感器数据方法
+     */
+    int saveInsectPestsDeviceData(CentermonitorTMonitoringDataInsectPests centermonitorTMonitoringDataInsectPests);
+
+    /**数据库持久化**/
+    int saveDataSoilMoistureMonitoringData(CentermonitorTMonitoringDataSoilMoisture centermonitorTMonitoringDataSoilMoisture);
+
+    /**数据库持久化**/
+    int saveDataAtmosphereMonitoringData(CentermonitorTMonitoringDataAtmosphere centermonitorTMonitoringDataAtmosphere);
+
+    /**数据库持久化**/
+    int saveDataWaterQualityMonitoringData(CentermonitorTMonitoringDataWaterQuality centermonitorTMonitoringDataWaterQuality);
+
+    /** 【心跳】 心跳数据处理方法 4:代表心跳数据 ,做数据库持久化**/
+    int saveWaterPressureDeviceData(CentermonitorTMonitoringDataWaterPressure centermonitorTMonitoringDataWaterPressure);
+
+    /**
+     * 修改监测设备离线在线状态
+     *
+     * @param centermonitorTMonitoringDevice 监测设备
+     * @return 结果
+     */
+    int updateDeviceListToJudgeWorkingStatus(CentermonitorTMonitoringDevice centermonitorTMonitoringDevice);
+
+    /**
+     * 获取设备列表以判断工作状态
+     */
+    List<CentermonitorTMonitoringDevice> getDeviceListToJudgeWorkingStatus(CentermonitorTMonitoringDevice device);
+
+    /**
+     * 获取设备数据列表以判断工作状态
+     */
+    //大气
+    CentermonitorTMonitoringDataAtmosphere getDeviceData_1_Atmosphere_ListToJudgeWorkingStatus(CentermonitorTMonitoringDataAtmosphere device);
+
+    //病虫害
+    CentermonitorTMonitoringDataInsectPests getDeviceData_2_Insect_pests_ListToJudgeWorkingStatus(CentermonitorTMonitoringDataInsectPests device);
+
+    //土壤
+    CentermonitorTMonitoringDataSoilMoisture getDeviceData_3_SoilMoisture_ListToJudgeWorkingStatus(CentermonitorTMonitoringDataSoilMoisture device);
+
+    //水压
+    CentermonitorTMonitoringDataWaterPressure getDeviceData_4_WaterPressure_ListToJudgeWorkingStatus(CentermonitorTMonitoringDataWaterPressure device);
+
+    //水质
+    CentermonitorTMonitoringDataWaterQuality getDeviceData_5_WaterQuality_ListToJudgeWorkingStatus(CentermonitorTMonitoringDataWaterQuality device);
+
+    //水流速
+    CentermonitorTMonitoringDataWaterVelocity getDeviceData_6_WaterVelocity_ListToJudgeWorkingStatus(CentermonitorTMonitoringDataWaterVelocity device);
+
+    /**
+     * 水压设备告警方法
+     * */
+    void waterPressureWarn(CentermonitorTMonitoringDevice device, JSONObject json) throws ParseException;
+}

+ 28 - 0
src/main/java/com/sooka/sponest/monitor/device/service/ICentermonitorTMonitoringDeviceSoilMoistureThresholdService.java

@@ -0,0 +1,28 @@
+package com.sooka.sponest.monitor.device.service;
+
+import com.sooka.sponest.monitor.device.domain.CentermonitorTMonitoringThresholdSoilMoisture;
+
+import java.util.List;
+
+public interface ICentermonitorTMonitoringDeviceSoilMoistureThresholdService {
+
+    /**
+     * 通过设备编码查询土壤传感器阈值
+     * */
+    CentermonitorTMonitoringThresholdSoilMoisture selectSoilMoistureThresholdByCode(String deviceCode);
+
+    /**
+     * 通过设备编码组查询土壤传感器阈值
+     * */
+    List<CentermonitorTMonitoringThresholdSoilMoisture> selectSoilMoistureThresholdByCodes(String[] deviceCodes);
+
+    /**
+     * 新增土壤监测设备阈值
+     */
+     int insertSoilMoistureThreshold(CentermonitorTMonitoringThresholdSoilMoisture thresholdSoilMoisture);
+
+    /**
+     * 修改土壤监测设备阈值
+     */
+     int updateSoilMoistureThreshold(CentermonitorTMonitoringThresholdSoilMoisture thresholdSoilMoisture);
+}

+ 27 - 0
src/main/java/com/sooka/sponest/monitor/device/service/ICentermonitorTMonitoringDeviceThresholdService.java

@@ -0,0 +1,27 @@
+package com.sooka.sponest.monitor.device.service;
+import com.sooka.sponest.monitor.device.domain.CentermonitorTMonitoringThresholdWaterVelocity;
+
+import java.util.List;
+
+public interface ICentermonitorTMonitoringDeviceThresholdService {
+
+    /**
+     * 通过设备编码查询水流速传感器阈值
+     * */
+    CentermonitorTMonitoringThresholdWaterVelocity selectWaterVelocityThresholdByCode(String deviceCode);
+
+    /**
+     * 通过设备编码组查询水流速传感器阈值
+     * */
+    List<CentermonitorTMonitoringThresholdWaterVelocity> selectWaterVelocityThresholdByCodes(String[] deviceCodes);
+
+    /**
+     * 新增水流速监测设备阈值
+     */
+     int insertWaterVelocityThreshold(CentermonitorTMonitoringThresholdWaterVelocity thresholdWaterVelocity);
+
+    /**
+     * 修改水流速监测设备阈值
+     */
+     int updateWaterVelocityThreshold(CentermonitorTMonitoringThresholdWaterVelocity thresholdWaterVelocity);
+}

+ 28 - 0
src/main/java/com/sooka/sponest/monitor/device/service/ICentermonitorTMonitoringDeviceWaterQualityThresholdService.java

@@ -0,0 +1,28 @@
+package com.sooka.sponest.monitor.device.service;
+
+import com.sooka.sponest.monitor.device.domain.CentermonitorTMonitoringThresholdWaterQuality;
+
+import java.util.List;
+
+public interface ICentermonitorTMonitoringDeviceWaterQualityThresholdService {
+
+    /**
+     * 通过设备编码查询水质传感器阈值
+     * */
+    CentermonitorTMonitoringThresholdWaterQuality selectWaterQualityThresholdByCode(String deviceCode);
+
+    /**
+     * 通过设备编码组查询水质传感器阈值
+     * */
+    List<CentermonitorTMonitoringThresholdWaterQuality> selectWaterQualityThresholdByCodes(String[] deviceCodes);
+
+    /**
+     * 新增水质监测设备阈值
+     */
+     int insertWaterQualityThreshold(CentermonitorTMonitoringThresholdWaterQuality thresholdWaterQuality);
+
+    /**
+     * 修改水质监测设备阈值
+     */
+     int updateWaterQualityThreshold(CentermonitorTMonitoringThresholdWaterQuality thresholdWaterQuality);
+}

+ 50 - 0
src/main/java/com/sooka/sponest/monitor/device/service/impl/CentermonitorTMonitoringDeviceAtmosphereThresholdServiceImpl.java

@@ -0,0 +1,50 @@
+package com.sooka.sponest.monitor.device.service.impl;
+
+import com.ruoyi.common.core.utils.uuid.IdUtils;
+import com.sooka.sponest.monitor.base.service.impl.BaseService;
+import com.sooka.sponest.monitor.device.domain.CentermonitorTMonitoringThresholdAtmosphere;
+import com.sooka.sponest.monitor.device.mapper.CentermonitorTMonitoringDeviceAtmosphereThresholdMapper;
+import com.sooka.sponest.monitor.device.service.ICentermonitorTMonitoringDeviceAtmosphereThresholdService;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import java.util.List;
+
+@Service
+public class CentermonitorTMonitoringDeviceAtmosphereThresholdServiceImpl extends BaseService implements ICentermonitorTMonitoringDeviceAtmosphereThresholdService {
+    @Resource
+    private CentermonitorTMonitoringDeviceAtmosphereThresholdMapper deviceAtmosphereThresholdMapper;
+
+    /**
+     * 通过设备编码查询大气传感器阈值
+     * */
+    @Override
+    public CentermonitorTMonitoringThresholdAtmosphere selectAtmosphereThresholdByCode(String deviceCode) {
+        return deviceAtmosphereThresholdMapper.selectAtmosphereThresholdByCode(deviceCode);
+    }
+
+    /**
+     * 通过设备编码组查询大气传感器阈值
+     * */
+    @Override
+    public List<CentermonitorTMonitoringThresholdAtmosphere> selectAtmosphereThresholdByCodes(String[] deviceCodes){
+        return deviceAtmosphereThresholdMapper.selectAtmosphereThresholdByCodes(deviceCodes);
+    }
+
+    /**
+     * 新增大气监测设备阈值
+     */
+    @Override
+    public int insertAtmosphereThreshold(CentermonitorTMonitoringThresholdAtmosphere thresholdAtmosphere){
+        thresholdAtmosphere.setId(IdUtils.simpleUUID());
+        return deviceAtmosphereThresholdMapper.insertAtmosphereThreshold(thresholdAtmosphere);
+    }
+
+    /**
+     * 修改大气监测设备阈值
+     */
+    @Override
+    public int updateAtmosphereThreshold(CentermonitorTMonitoringThresholdAtmosphere thresholdAtmosphere){
+        return deviceAtmosphereThresholdMapper.updateAtmosphereThreshold(thresholdAtmosphere);
+    }
+}

+ 720 - 0
src/main/java/com/sooka/sponest/monitor/device/service/impl/CentermonitorTMonitoringDeviceServiceImpl.java

@@ -0,0 +1,720 @@
+package com.sooka.sponest.monitor.device.service.impl;
+
+import com.alibaba.fastjson.JSONObject;
+import com.ruoyi.common.core.utils.StringUtils;
+import com.ruoyi.common.core.utils.uuid.IdUtils;
+import com.sooka.sponest.monitor.base.service.impl.BaseService;
+import com.sooka.sponest.monitor.device.domain.*;
+import com.sooka.sponest.monitor.device.mapper.CentermonitorTMonitoringDeviceMapper;
+import com.sooka.sponest.monitor.device.service.*;
+import com.sooka.sponest.monitor.remoteapi.service.event.RemoteEventBaseService;
+import org.apache.commons.lang3.time.FastDateFormat;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import java.text.ParseException;
+import java.util.Calendar;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 监测设备Service业务层处理
+ *
+ * @author ruoyi
+ * @date 2023-03-14
+ */
+@Service
+public class CentermonitorTMonitoringDeviceServiceImpl extends BaseService implements ICentermonitorTMonitoringDeviceService {
+
+    @Resource
+    private CentermonitorTMonitoringDeviceMapper centermonitorTMonitoringDeviceMapper;
+
+    @Resource
+    private ICentermonitorTMonitoringDeviceSoilMoistureThresholdService centermonitorTMonitoringDeviceSoilMoistureThresholdService;
+
+    @Resource
+    private ICentermonitorTMonitoringDeviceAtmosphereThresholdService centermonitorTMonitoringDeviceAtmosphereThresholdService;
+
+    @Resource
+    private ICentermonitorTMonitoringDeviceWaterQualityThresholdService centermonitorTMonitoringDeviceWaterQualityThresholdService;
+
+    @Resource
+    private ICentermonitorTMonitoringDeviceThresholdService centermonitorTMonitoringDeviceThresholdService;
+
+    @Resource
+    private RemoteEventBaseService eventBaseService;
+
+    private static final FastDateFormat simpleDateFormat = FastDateFormat.getInstance("yyyy-MM-dd HH:mm:ss");
+    Logger logger = LoggerFactory.getLogger(CentermonitorTMonitoringDeviceServiceImpl.class);
+
+
+
+    /**
+     * 根据设备类型查询监控设备Map
+     *
+     * @param types 设备类型
+     * @return 监测设备设备集合
+     */
+    public List<Map<String, String>> getDevideCodeMapByTypes(String[] types) {
+        return centermonitorTMonitoringDeviceMapper.getDevideCodeMapByTypes(types);
+    }
+
+    /**
+     * 查询监测设备
+     *
+     * @param deviceCode 监测设备主键
+     * @return 监测设备
+     */
+    @Override
+    public CentermonitorTMonitoringDevice selectCentermonitorTMonitoringDeviceByDeviceCode(String deviceCode) {
+        return centermonitorTMonitoringDeviceMapper.selectCentermonitorTMonitoringDeviceByDeviceCode(deviceCode);
+    }
+
+    /**
+     * 接收传感器水流速数据
+     *
+     * @param centermonitorTMonitoringDataWater 接收传感器水流速数据
+     * @return 接收传感器水流速数据
+     */
+    @Override
+    public int saveWaterMonitoringData(CentermonitorTMonitoringDataWaterVelocity centermonitorTMonitoringDataWater) {
+        centermonitorTMonitoringDataWater.setId(IdUtils.simpleUUID());
+        //不保留水流速传感器历史数据
+        centermonitorTMonitoringDeviceMapper.deleteWaterVelocityDataByCode(centermonitorTMonitoringDataWater.getST());
+        // 保存水流速传感器数据
+        int res = centermonitorTMonitoringDeviceMapper.saveWaterMonitoringData(centermonitorTMonitoringDataWater);
+        // 更新传感器状态为在线
+        CentermonitorTMonitoringDevice monitoringDevice = new CentermonitorTMonitoringDevice();
+        monitoringDevice.setWorkingStatus("0");
+        monitoringDevice.setDeviceCode(centermonitorTMonitoringDataWater.getST());
+        centermonitorTMonitoringDeviceMapper.updateDeviceWorkingStatusByDeviceCode(monitoringDevice);
+        //水流速传感器阈值
+        CentermonitorTMonitoringThresholdWaterVelocity thresholdWaterVelocity =
+                centermonitorTMonitoringDeviceThresholdService.selectWaterVelocityThresholdByCode(centermonitorTMonitoringDataWater.getST());
+        //如果设置过阈值,则走报警
+        if (thresholdWaterVelocity != null) {
+            CentermonitorTMonitoringDevice device =
+                    centermonitorTMonitoringDeviceMapper.selectCentermonitorTMonitoringDeviceByDeviceCode(centermonitorTMonitoringDataWater.getST());
+            if (device.getOpenWarn().equals("1")) {//开启告警状态才会上报事件
+                try {
+                    waterVelocityWarn(device, thresholdWaterVelocity, centermonitorTMonitoringDataWater);
+                } catch (ParseException e) {
+                    logger.error("saveWaterMonitoringData 方法报错 => {}", e.getMessage());
+                }
+            }
+        }
+        return res;
+    }
+
+    /**
+     * 水流速设备告警方法
+     */
+    private void waterVelocityWarn(CentermonitorTMonitoringDevice device,
+                                   CentermonitorTMonitoringThresholdWaterVelocity thresholdWaterVelocity,
+                                   CentermonitorTMonitoringDataWaterVelocity centermonitorTMonitoringDataWater) throws ParseException {
+        boolean flag = false;
+        //告警报文
+        String title = "【水流速传感器阈值告警】传感器名称:" + device.getDeviceName() + "  设备编码:" + device.getDeviceCode() + ";";
+        StringBuilder stringBuilder = new StringBuilder(title);
+        if (centermonitorTMonitoringDataWater.getQ() > Double.parseDouble(thresholdWaterVelocity.getQThreshold())) {
+            flag = true;
+            stringBuilder.append("  瞬时流量过高, 当前值:").append(centermonitorTMonitoringDataWater.getQ()).append("m³/s;  高位阈值流量:").append(thresholdWaterVelocity.getQThreshold()).append("m³/s;");
+        }
+        if (centermonitorTMonitoringDataWater.getV1() > Double.parseDouble(thresholdWaterVelocity.getVThreshold())) {
+            flag = true;
+            stringBuilder.append("  瞬时流速过高, 当前值:").append(centermonitorTMonitoringDataWater.getV1()).append("m/s;  高位阈值流速:").append(thresholdWaterVelocity.getVThreshold()).append("m/s;");
+        }
+        if (!stringBuilder.toString().equals(title)) {
+            System.out.println(stringBuilder);
+        }
+        /*
+         * 环保事件(大类6):大气监测(小类601)、水质环境(小类602)
+         * 水利事件(大类5):水压监测(小类510)、水流速(小类511)
+         * 农业事件(大类4):土壤墒情(小类403)、病虫害监测(小类401)
+         * */
+        if (flag) {
+            SensorEventVo vo = new SensorEventVo();
+            vo.setEventType("5");
+            vo.setEventTypeXl("511");
+            vo.setEventName(title);
+            vo.setEventDescription(stringBuilder.toString());
+            vo.setLatitude(device.getLatitude());
+            vo.setLongitude(device.getLongitude());
+            vo.setSensorId(device.getId());
+            vo.setReportor(device.getDeviceName());
+            vo.setReportTime(simpleDateFormat.parse(centermonitorTMonitoringDataWater.getTT()));
+            vo.setAddress(device.getAddress());
+            eventBaseService.insertSensorEvent(vo);
+        }
+    }
+
+
+
+    /**
+     * 【病虫害】接收病虫害传感器数据方法
+     */
+    public int saveInsectPestsDeviceData(CentermonitorTMonitoringDataInsectPests centermonitorTMonitoringDataInsectPests) {
+        CentermonitorTMonitoringDataInsectPests latest = centermonitorTMonitoringDeviceMapper.selectInsectPestsNewDeviceData(centermonitorTMonitoringDataInsectPests);
+        if (latest == null || centermonitorTMonitoringDataInsectPests.getNewTime().compareTo(latest.getNewTime()) > 0) {
+            //不保留病虫害历史数据
+            centermonitorTMonitoringDeviceMapper.deleteInsectPestsDataByCode(centermonitorTMonitoringDataInsectPests.getDeviceNumber());
+            //保存病虫害数据
+            int res = centermonitorTMonitoringDeviceMapper.saveInsectPestsDeviceData(centermonitorTMonitoringDataInsectPests);
+            // 更新传感器状态为在线
+            CentermonitorTMonitoringDevice monitoringDevice = new CentermonitorTMonitoringDevice();
+            monitoringDevice.setWorkingStatus("0");
+            monitoringDevice.setDeviceCode(centermonitorTMonitoringDataInsectPests.getDeviceNumber());
+            centermonitorTMonitoringDeviceMapper.updateDeviceWorkingStatusByDeviceCode(monitoringDevice);
+            // 告警
+            CentermonitorTMonitoringDevice device =
+                    centermonitorTMonitoringDeviceMapper.selectCentermonitorTMonitoringDeviceByDeviceCode(centermonitorTMonitoringDataInsectPests.getDeviceNumber());
+            if (device.getOpenWarn().equals("1")) {//开启告警状态才会上报事件
+                try {
+                    insectPestsWarn(device, centermonitorTMonitoringDataInsectPests);
+                } catch (ParseException e) {
+                    logger.error("saveInsectPestsDeviceData 方法报错 => {}", e.getMessage());
+                }
+            }
+            return res;
+        }
+        return 0;
+    }
+
+    /**
+     * 土壤墒情数据保存方法
+     */
+    public int saveDataSoilMoistureMonitoringData(CentermonitorTMonitoringDataSoilMoisture centermonitorTMonitoringDataSoilMoisture) {
+        CentermonitorTMonitoringDataSoilMoisture latest = centermonitorTMonitoringDeviceMapper.selectSoilMoistureNewDeviceData(centermonitorTMonitoringDataSoilMoisture);
+        if (latest == null || centermonitorTMonitoringDataSoilMoisture.getCreateTime().compareTo(latest.getCreateTime()) > 0) {
+            //不保留土壤传感器历史数据
+            centermonitorTMonitoringDeviceMapper.deleteSoilMoistureDataByCode(centermonitorTMonitoringDataSoilMoisture.getDeviceCode());
+            // 保存土壤传感器数据
+            int soil = centermonitorTMonitoringDeviceMapper.saveDataSoilMoistureMonitoringData(centermonitorTMonitoringDataSoilMoisture);
+            // 更新传感器状态为在线
+            CentermonitorTMonitoringDevice monitoringDevice = new CentermonitorTMonitoringDevice();
+            monitoringDevice.setWorkingStatus("0");
+            monitoringDevice.setDeviceCode(centermonitorTMonitoringDataSoilMoisture.getDeviceCode());
+            centermonitorTMonitoringDeviceMapper.updateDeviceWorkingStatusByDeviceCode(monitoringDevice);
+            //土壤传感器阈值
+            CentermonitorTMonitoringThresholdSoilMoisture thresholdSoilMoisture =
+                    centermonitorTMonitoringDeviceSoilMoistureThresholdService.selectSoilMoistureThresholdByCode(centermonitorTMonitoringDataSoilMoisture.getDeviceCode());
+            //如果设置过阈值,则走报警
+            if (thresholdSoilMoisture != null) {
+                CentermonitorTMonitoringDevice device =
+                        centermonitorTMonitoringDeviceMapper.selectCentermonitorTMonitoringDeviceByDeviceCode(centermonitorTMonitoringDataSoilMoisture.getDeviceCode());
+                if (device.getOpenWarn().equals("1")) {//开启告警状态才会上报事件
+                    try {
+                        soilMoistureWarn(device, thresholdSoilMoisture, centermonitorTMonitoringDataSoilMoisture);
+                    } catch (ParseException e) {
+                        logger.error("saveDataSoilMoistureMonitoringData 方法报错 => {}", e.getMessage());
+                    }
+                }
+            }
+            return soil;
+        }
+        return 0;
+    }
+
+    /**
+     * 大气数据保存方法
+     */
+    public int saveDataAtmosphereMonitoringData(CentermonitorTMonitoringDataAtmosphere centermonitorTMonitoringDataAtmosphere) {
+        CentermonitorTMonitoringDataAtmosphere latest = centermonitorTMonitoringDeviceMapper.selectAtmosphereNewDeviceData(centermonitorTMonitoringDataAtmosphere);
+        if (latest == null || centermonitorTMonitoringDataAtmosphere.getCreateTime().compareTo(latest.getCreateTime()) > 0) {
+            //不保留大气传感器历史数据
+            centermonitorTMonitoringDeviceMapper.deleteAtmosphereDataByCode(centermonitorTMonitoringDataAtmosphere.getDeviceCode());
+            // 保存大气传感器数据
+            int atmosphere = centermonitorTMonitoringDeviceMapper.saveDataAtmosphereMonitoringData(centermonitorTMonitoringDataAtmosphere);
+            // 更新传感器状态为在线
+            CentermonitorTMonitoringDevice monitoringDevice = new CentermonitorTMonitoringDevice();
+            monitoringDevice.setWorkingStatus("0");
+            monitoringDevice.setDeviceCode(centermonitorTMonitoringDataAtmosphere.getDeviceCode());
+            centermonitorTMonitoringDeviceMapper.updateDeviceWorkingStatusByDeviceCode(monitoringDevice);
+            //大气传感器阈值
+            CentermonitorTMonitoringThresholdAtmosphere thresholdAtmosphere =
+                    centermonitorTMonitoringDeviceAtmosphereThresholdService.selectAtmosphereThresholdByCode(centermonitorTMonitoringDataAtmosphere.getDeviceCode());
+            //如果设置过阈值,则走报警
+            if (thresholdAtmosphere != null) {
+                CentermonitorTMonitoringDevice device =
+                        centermonitorTMonitoringDeviceMapper.selectCentermonitorTMonitoringDeviceByDeviceCode(centermonitorTMonitoringDataAtmosphere.getDeviceCode());
+                if (device.getOpenWarn().equals("1")) {//开启告警状态才会上报事件
+                    try {
+                        atmosphereWarn(device, thresholdAtmosphere, centermonitorTMonitoringDataAtmosphere);
+                    } catch (ParseException e) {
+                        logger.error("saveDataAtmosphereMonitoringData 方法报错 => {}", e.getMessage());
+                    }
+                }
+            }
+            return atmosphere;
+        }
+        return 0;
+    }
+
+    /**
+     * 水质数据保存方法
+     */
+    public int saveDataWaterQualityMonitoringData(CentermonitorTMonitoringDataWaterQuality centermonitorTMonitoringDataWaterQuality) {
+        CentermonitorTMonitoringDataWaterQuality latest = centermonitorTMonitoringDeviceMapper.selectWaterQualityNewDeviceData(centermonitorTMonitoringDataWaterQuality);
+        if (latest == null || centermonitorTMonitoringDataWaterQuality.getCreateTime().compareTo(latest.getCreateTime()) > 0) {
+            //不保留水质传感器历史数据
+            centermonitorTMonitoringDeviceMapper.deleteWaterQualityDataByCode(centermonitorTMonitoringDataWaterQuality.getDeviceCode());
+            //保存水质传感器数据
+            int waterQuality = centermonitorTMonitoringDeviceMapper.saveDataWaterQualityMonitoringData(centermonitorTMonitoringDataWaterQuality);
+            // 更新传感器状态为在线
+            CentermonitorTMonitoringDevice monitoringDevice = new CentermonitorTMonitoringDevice();
+            monitoringDevice.setWorkingStatus("0");
+            monitoringDevice.setDeviceCode(centermonitorTMonitoringDataWaterQuality.getDeviceCode());
+            centermonitorTMonitoringDeviceMapper.updateDeviceWorkingStatusByDeviceCode(monitoringDevice);
+            //水质传感器阈值
+            CentermonitorTMonitoringThresholdWaterQuality thresholdWaterQuality =
+                    centermonitorTMonitoringDeviceWaterQualityThresholdService.selectWaterQualityThresholdByCode(centermonitorTMonitoringDataWaterQuality.getDeviceCode());
+            //如果设置过阈值,则走报警
+            if (thresholdWaterQuality != null) {
+                CentermonitorTMonitoringDevice device =
+                        centermonitorTMonitoringDeviceMapper.selectCentermonitorTMonitoringDeviceByDeviceCode(centermonitorTMonitoringDataWaterQuality.getDeviceCode());
+                if (device.getOpenWarn().equals("1")) {//开启告警状态才会上报事件
+                    try {
+                        waterQualityWarn(device, thresholdWaterQuality, centermonitorTMonitoringDataWaterQuality);
+                    } catch (ParseException e) {
+                        logger.error("saveDataWaterQualityMonitoringData 方法报错 => {}", e.getMessage());
+                    }
+                }
+            }
+            return waterQuality;
+        }
+        return 0;
+    }
+
+    /**
+     * 水压数据保存方法
+     */
+    public int saveWaterPressureDeviceData(CentermonitorTMonitoringDataWaterPressure centermonitorTMonitoringDataWaterPressure) {
+        // 更新传感器状态为在线
+        CentermonitorTMonitoringDevice monitoringDevice = new CentermonitorTMonitoringDevice();
+        monitoringDevice.setWorkingStatus("0");
+        monitoringDevice.setDeviceCode(centermonitorTMonitoringDataWaterPressure.getIMEI());
+        centermonitorTMonitoringDeviceMapper.updateDeviceWorkingStatusByDeviceCode(monitoringDevice);
+        //不保留水压传感器历史数据
+        centermonitorTMonitoringDeviceMapper.deleteWaterPressureDataByCode(centermonitorTMonitoringDataWaterPressure.getIMEI());
+        //保存水压传感器数据
+        return centermonitorTMonitoringDeviceMapper.saveWaterPressureDeviceData(centermonitorTMonitoringDataWaterPressure);
+    }
+
+    /**
+     * 水压设备告警方法
+     */
+    @Override
+    public void waterPressureWarn(CentermonitorTMonitoringDevice device, JSONObject json) throws ParseException {
+        boolean flag = false;
+        JSONObject content = json.getJSONObject("eventContent");
+        //水压值
+        String hydraulicValue = String.format("%.2f", content.getDouble("hydraulic_value"));
+        //告警报文
+        String title = "【水压传感器阈值告警】传感器名称:" + device.getDeviceName() + "  设备编码:" + device.getDeviceCode() + ";";
+        StringBuilder stringBuilder = new StringBuilder(title);
+
+        if (content.get("hydraulic_state").toString().equals("1")) {//1--水压过高报警
+            flag = true;
+            stringBuilder.append("  报警类型:水压过高  当前水压:").append(hydraulicValue).append("Mpa");
+        }
+        if (content.get("hydraulic_state").toString().equals("3")) {//3--水压过低报警
+            flag = true;
+            stringBuilder.append("  报警类型:水压过低  当前水压:").append(hydraulicValue).append("Mpa");
+        }
+        if (content.get("hydraulic_state").toString().equals("5")) {//5--水压波动报警
+            flag = true;
+            stringBuilder.append("  报警类型:水压波动  当前水压:").append(hydraulicValue).append("Mpa");
+        }
+        if (!stringBuilder.toString().equals(title)) {
+            System.out.println(stringBuilder);
+        }
+        /*
+         * 环保事件(大类6):大气监测(小类601)、水质环境(小类602)
+         * 水利事件(大类5):水压监测(小类510)、水流速(小类511)
+         * 农业事件(大类4):土壤墒情(小类403)、病虫害监测(小类401)
+         * */
+        if (flag) {
+            SensorEventVo vo = new SensorEventVo();
+            vo.setEventType("10");
+            vo.setEventTypeXl("510");
+            vo.setEventName(title);
+            vo.setEventDescription(stringBuilder.toString());
+            vo.setLatitude(device.getLatitude());
+            vo.setLongitude(device.getLongitude());
+            vo.setSensorId(device.getId());
+            vo.setReportor(device.getDeviceName());
+            vo.setReportTime(simpleDateFormat.parse(simpleDateFormat.format(json.getLong("timestamp"))));
+            vo.setAddress(device.getAddress());
+            eventBaseService.insertSensorEvent(vo);
+        }
+    }
+
+
+    /**
+     * 病虫害设备告警方法
+     */
+    private void insectPestsWarn(CentermonitorTMonitoringDevice device,
+                                 CentermonitorTMonitoringDataInsectPests centermonitorTMonitoringDataInsectPests) throws ParseException {
+        boolean flag = false;
+        //告警报文
+        String title = "【病虫害传感器告警】传感器名称:" + device.getDeviceName() + "  设备编码:" + device.getDeviceCode() + ";";
+        StringBuilder stringBuilder = new StringBuilder(title);
+        if (StringUtils.isNotEmpty(centermonitorTMonitoringDataInsectPests.getResults())) {
+            flag = true;
+            stringBuilder.append("  发现害虫:").append(centermonitorTMonitoringDataInsectPests.getResults());
+        }
+        if (!stringBuilder.toString().equals(title)) {
+            System.out.println(stringBuilder);
+        }
+        /*
+         * 环保事件(大类6):大气监测(小类601)、水质环境(小类602)
+         * 水利事件(大类5):水压监测(小类510)、水流速(小类511)
+         * 农业事件(大类4):土壤墒情(小类403)、病虫害监测(小类401)
+         * */
+        if (flag) {
+            SensorEventVo vo = new SensorEventVo();
+            vo.setEventType("4");
+            vo.setEventTypeXl("401");
+            vo.setEventName(title);
+            vo.setEventDescription(stringBuilder.toString());
+            vo.setLatitude(device.getLatitude());
+            vo.setLongitude(device.getLongitude());
+            vo.setSensorId(device.getId());
+            vo.setReportor(device.getDeviceName());
+            vo.setReportTime(simpleDateFormat.parse(centermonitorTMonitoringDataInsectPests.getNewTime()));
+            vo.setAddress(device.getAddress());
+            vo.setPicture(centermonitorTMonitoringDataInsectPests.getTaggingImgUrl());
+            eventBaseService.insertSensorEvent(vo);
+        }
+    }
+
+
+    /**
+     * 土壤设备告警方法
+     */
+    private void soilMoistureWarn(CentermonitorTMonitoringDevice device,
+                                  CentermonitorTMonitoringThresholdSoilMoisture thresholdSoilMoisture,
+                                  CentermonitorTMonitoringDataSoilMoisture centermonitorTMonitoringDataSoilMoisture) throws ParseException {
+        boolean flag = false;
+        //告警报文
+        String title = "【土壤传感器阈值告警】传感器名称:" + device.getDeviceName() + "  设备编码:" + device.getDeviceCode() + ";";
+        String warnText;
+        StringBuilder stringBuilder = new StringBuilder(title);
+        if (Double.parseDouble(centermonitorTMonitoringDataSoilMoisture.getTemperature()) < Double.parseDouble(thresholdSoilMoisture.getTemperatureThresholdDown()) ||
+                Double.parseDouble(centermonitorTMonitoringDataSoilMoisture.getTemperature()) > Double.parseDouble(thresholdSoilMoisture.getTemperatureThresholdUp())) {
+            if (Double.parseDouble(centermonitorTMonitoringDataSoilMoisture.getTemperature()) < Double.parseDouble(thresholdSoilMoisture.getTemperatureThresholdDown())) {
+                warnText = "温度过低";
+            } else {
+                warnText = "温度过高";
+            }
+            flag = true;
+            stringBuilder.append("  ").append(warnText).append(", 温度:").append(centermonitorTMonitoringDataSoilMoisture.getTemperature()).append("℃  参考阈值:").append(thresholdSoilMoisture.getTemperatureThresholdDown()).append("~").append(thresholdSoilMoisture.getTemperatureThresholdUp()).append("℃;");
+        }
+        if (Double.parseDouble(centermonitorTMonitoringDataSoilMoisture.getHumidity()) < Double.parseDouble(thresholdSoilMoisture.getHumidityThresholdDown()) ||
+                Double.parseDouble(centermonitorTMonitoringDataSoilMoisture.getHumidity()) > Double.parseDouble(thresholdSoilMoisture.getHumidityThresholdUp())) {
+            if (Double.parseDouble(centermonitorTMonitoringDataSoilMoisture.getHumidity()) < Double.parseDouble(thresholdSoilMoisture.getHumidityThresholdDown())) {
+                warnText = "湿度过低";
+            } else {
+                warnText = "湿度过高";
+            }
+            flag = true;
+            stringBuilder.append("  ").append(warnText).append(", 当前值:").append(centermonitorTMonitoringDataSoilMoisture.getHumidity()).append("%RH;  参考阈值:").append(thresholdSoilMoisture.getHumidityThresholdDown()).append("~").append(thresholdSoilMoisture.getHumidityThresholdUp()).append("%RH;");
+        }
+        if (Double.parseDouble(centermonitorTMonitoringDataSoilMoisture.getPh()) < Double.parseDouble(thresholdSoilMoisture.getPhThresholdDown()) ||
+                Double.parseDouble(centermonitorTMonitoringDataSoilMoisture.getPh()) > Double.parseDouble(thresholdSoilMoisture.getPhThresholdUp())) {
+            if (Double.parseDouble(centermonitorTMonitoringDataSoilMoisture.getPh()) < Double.parseDouble(thresholdSoilMoisture.getPhThresholdDown())) {
+                warnText = "ph值过低";
+            } else {
+                warnText = "ph值过高";
+            }
+            flag = true;
+            stringBuilder.append("  ").append(warnText).append(", 当前值:").append(centermonitorTMonitoringDataSoilMoisture.getPh()).append("PH;  参考阈值:").append(thresholdSoilMoisture.getPhThresholdDown()).append("~").append(thresholdSoilMoisture.getPhThresholdUp()).append("PH;");
+        }
+        if (Double.parseDouble(centermonitorTMonitoringDataSoilMoisture.getConductivity()) < Double.parseDouble(thresholdSoilMoisture.getConductivityThresholdDown()) ||
+                Double.parseDouble(centermonitorTMonitoringDataSoilMoisture.getConductivity()) > Double.parseDouble(thresholdSoilMoisture.getConductivityThresholdUp())) {
+            if (Double.parseDouble(centermonitorTMonitoringDataSoilMoisture.getConductivity()) < Double.parseDouble(thresholdSoilMoisture.getConductivityThresholdDown())) {
+                warnText = "导电率过低";
+            } else {
+                warnText = "导电率过高";
+            }
+            flag = true;
+            stringBuilder.append("  ").append(warnText).append(", 当前值:").append(centermonitorTMonitoringDataSoilMoisture.getConductivity()).append("μS/cm;  参考阈值:").append(thresholdSoilMoisture.getConductivityThresholdDown()).append("~").append(thresholdSoilMoisture.getConductivityThresholdUp()).append("μS/cm;");
+        }
+        if (Double.parseDouble(centermonitorTMonitoringDataSoilMoisture.getNitrogen()) < Double.parseDouble(thresholdSoilMoisture.getNitrogenThresholdDown()) ||
+                Double.parseDouble(centermonitorTMonitoringDataSoilMoisture.getNitrogen()) > Double.parseDouble(thresholdSoilMoisture.getNitrogenThresholdUp())) {
+            if (Double.parseDouble(centermonitorTMonitoringDataSoilMoisture.getNitrogen()) < Double.parseDouble(thresholdSoilMoisture.getNitrogenThresholdDown())) {
+                warnText = "氮含量过低";
+            } else {
+                warnText = "氮含量过高";
+            }
+            flag = true;
+            stringBuilder.append("  ").append(warnText).append(", 当前值:").append(centermonitorTMonitoringDataSoilMoisture.getNitrogen()).append("mg/kg;  参考阈值:").append(thresholdSoilMoisture.getNitrogenThresholdDown()).append("~").append(thresholdSoilMoisture.getNitrogenThresholdUp()).append("mg/kg");
+        }
+        if (Double.parseDouble(centermonitorTMonitoringDataSoilMoisture.getPhosphorus()) < Double.parseDouble(thresholdSoilMoisture.getPhosphorusThresholdDown()) ||
+                Double.parseDouble(centermonitorTMonitoringDataSoilMoisture.getPhosphorus()) > Double.parseDouble(thresholdSoilMoisture.getPhosphorusThresholdUp())) {
+            if (Double.parseDouble(centermonitorTMonitoringDataSoilMoisture.getPhosphorus()) < Double.parseDouble(thresholdSoilMoisture.getPhosphorusThresholdDown())) {
+                warnText = "磷含量过低";
+            } else {
+                warnText = "磷含量过高";
+            }
+            flag = true;
+            stringBuilder.append("  ").append(warnText).append(", 当前值:").append(centermonitorTMonitoringDataSoilMoisture.getPhosphorus()).append("mg/kg;  参考阈值:").append(thresholdSoilMoisture.getPhosphorusThresholdDown()).append("~").append(thresholdSoilMoisture.getPhosphorusThresholdUp()).append("mg/kg;");
+        }
+        if (Double.parseDouble(centermonitorTMonitoringDataSoilMoisture.getPotassium()) < Double.parseDouble(thresholdSoilMoisture.getPotassiumThresholdDown()) ||
+                Double.parseDouble(centermonitorTMonitoringDataSoilMoisture.getPotassium()) > Double.parseDouble(thresholdSoilMoisture.getPotassiumThresholdUp())) {
+            if (Double.parseDouble(centermonitorTMonitoringDataSoilMoisture.getPotassium()) < Double.parseDouble(thresholdSoilMoisture.getPotassiumThresholdDown())) {
+                warnText = "钾含量过低";
+            } else {
+                warnText = "钾含量过高";
+            }
+            flag = true;
+            stringBuilder.append("  ").append(warnText).append(", 当前值:").append(centermonitorTMonitoringDataSoilMoisture.getPotassium()).append("mg/kg;  参考阈值:").append(thresholdSoilMoisture.getPotassiumThresholdDown()).append("~").append(thresholdSoilMoisture.getPotassiumThresholdUp()).append("mg/kg;");
+        }
+        if (!stringBuilder.toString().equals(title)) {
+            System.out.println(stringBuilder);
+        }
+        /*
+         * 环保事件(大类6):大气监测(小类601)、水质环境(小类602)
+         * 水利事件(大类5):水压监测(小类510)、水流速(小类511)
+         * 农业事件(大类4):土壤墒情(小类403)、病虫害监测(小类401)
+         * */
+        if (flag) {
+            SensorEventVo vo = new SensorEventVo();
+            vo.setEventType("4");
+            vo.setEventTypeXl("403");
+            vo.setEventName(title);
+            vo.setEventDescription(stringBuilder.toString());
+            vo.setLatitude(device.getLatitude());
+            vo.setLongitude(device.getLongitude());
+            vo.setSensorId(device.getId());
+            vo.setReportor(device.getDeviceName());
+            vo.setReportTime(simpleDateFormat.parse(centermonitorTMonitoringDataSoilMoisture.getCreateTime()));
+            vo.setAddress(device.getAddress());
+            eventBaseService.insertSensorEvent(vo);
+        }
+    }
+
+    /**
+     * 大气设备告警方法
+     */
+    private void atmosphereWarn(CentermonitorTMonitoringDevice device,
+                                CentermonitorTMonitoringThresholdAtmosphere thresholdAtmosphere,
+                                CentermonitorTMonitoringDataAtmosphere centermonitorTMonitoringDataAtmosphere) throws ParseException {
+        boolean flag = false;
+        //告警报文
+        String title = "【大气传感器阈值告警】传感器名称:" + device.getDeviceName() + "  设备编码:" + device.getDeviceCode() + ";";
+        String warnText;
+        StringBuilder stringBuilder = new StringBuilder(title);
+        //查询过去24小时内的PM2.5 和PM10 的平均值
+        CentermonitorTMonitoringDataAtmosphere atmosphere = centermonitorTMonitoringDeviceMapper.selectAtmosphereAVGData(centermonitorTMonitoringDataAtmosphere.getDeviceCode(),
+                twentyFourHoursAgo(centermonitorTMonitoringDataAtmosphere.getCreateTime()), centermonitorTMonitoringDataAtmosphere.getCreateTime());
+        if (Double.parseDouble(atmosphere.getFineParticle()) > Double.parseDouble(thresholdAtmosphere.getFineParticleThreshold())) {
+            flag = true;
+            stringBuilder.append("  pm2.5(24小时平均值)过高, 当前值:").append(atmosphere.getFineParticle()).append("ug/m³;  24小时平均浓度应当低于:").append(thresholdAtmosphere.getFineParticleThreshold()).append("ug/m³;");
+        }
+        if (Double.parseDouble(atmosphere.getSuctionParticle()) > Double.parseDouble(thresholdAtmosphere.getSuctionParticleThreshold())) {
+            flag = true;
+            stringBuilder.append("  pm10(24小时平均值)过高, 当前值:").append(atmosphere.getSuctionParticle()).append("ug/m³;  24小时平均浓度应当低于:").append(thresholdAtmosphere.getSuctionParticleThreshold()).append("ug/m³;");
+        }
+        if (Double.parseDouble(centermonitorTMonitoringDataAtmosphere.getCarbonMonoxide()) > Double.parseDouble(thresholdAtmosphere.getCarbonMonoxideThreshold())) {
+            flag = true;
+            stringBuilder.append("  一氧化碳含量过高, 当前值:").append(centermonitorTMonitoringDataAtmosphere.getCarbonMonoxide()).append("ug/m³;  高位阈值:").append(thresholdAtmosphere.getCarbonMonoxideThreshold()).append("ug/m³;");
+        }
+        if (Double.parseDouble(centermonitorTMonitoringDataAtmosphere.getOzone()) > Double.parseDouble(thresholdAtmosphere.getOzoneThreshold())) {
+            flag = true;
+            stringBuilder.append("  臭氧含量过高, 当前值:").append(centermonitorTMonitoringDataAtmosphere.getOzone()).append("ug/m³;  高位阈值:").append(thresholdAtmosphere.getOzoneThreshold()).append("ug/m³;");
+        }
+        if (Double.parseDouble(centermonitorTMonitoringDataAtmosphere.getNitrogenDioxide()) > Double.parseDouble(thresholdAtmosphere.getNitrogenDioxideThreshold())) {
+            flag = true;
+            stringBuilder.append("  二氧化氮含量过高, 当前值:").append(centermonitorTMonitoringDataAtmosphere.getNitrogenDioxide()).append("ug/m³;  高位阈值:").append(thresholdAtmosphere.getNitrogenDioxideThreshold()).append("ug/m³;");
+        }
+        if (Double.parseDouble(centermonitorTMonitoringDataAtmosphere.getSulfurDioxide()) > Double.parseDouble(thresholdAtmosphere.getSulfurDioxideThreshold())) {
+            flag = true;
+            stringBuilder.append("  二氧化硫含量过高, 当前值:").append(centermonitorTMonitoringDataAtmosphere.getSulfurDioxide()).append("ug/m³;  高位阈值:").append(thresholdAtmosphere.getSulfurDioxideThreshold()).append("ug/m³;");
+        }
+        if (Double.parseDouble(centermonitorTMonitoringDataAtmosphere.getTemperature()) < Double.parseDouble(thresholdAtmosphere.getTemperatureThresholdDown()) ||
+                Double.parseDouble(centermonitorTMonitoringDataAtmosphere.getTemperature()) > Double.parseDouble(thresholdAtmosphere.getTemperatureThresholdUp())) {
+            if (Double.parseDouble(centermonitorTMonitoringDataAtmosphere.getTemperature()) < Double.parseDouble(thresholdAtmosphere.getTemperatureThresholdDown())) {
+                warnText = "温度过低";
+            } else {
+                warnText = "温度过高";
+            }
+            flag = true;
+            stringBuilder.append("  ").append(warnText).append(", 当前温度:").append(centermonitorTMonitoringDataAtmosphere.getTemperature()).append("℃;  参考阈值:").append(thresholdAtmosphere.getTemperatureThresholdDown()).append("~").append(thresholdAtmosphere.getTemperatureThresholdUp()).append("℃;");
+        }
+        if (Double.parseDouble(centermonitorTMonitoringDataAtmosphere.getHumidity()) < Double.parseDouble(thresholdAtmosphere.getHumidityThresholdDown()) ||
+                Double.parseDouble(centermonitorTMonitoringDataAtmosphere.getHumidity()) > Double.parseDouble(thresholdAtmosphere.getHumidityThresholdUp())) {
+            if (Double.parseDouble(centermonitorTMonitoringDataAtmosphere.getHumidity()) < Double.parseDouble(thresholdAtmosphere.getHumidityThresholdDown())) {
+                warnText = "湿度过低";
+            } else {
+                warnText = "湿度过高";
+            }
+            flag = true;
+            stringBuilder.append("  ").append(warnText).append(", 当前湿度:").append(centermonitorTMonitoringDataAtmosphere.getHumidity()).append("%RH;  参考阈值:").append(thresholdAtmosphere.getHumidityThresholdDown()).append("~").append(thresholdAtmosphere.getHumidityThresholdUp()).append("%RH;");
+        }
+        if (!stringBuilder.toString().equals(title)) {
+            System.out.println(stringBuilder);
+        }
+        /*
+         * 环保事件(大类6):大气监测(小类601)、水质环境(小类602)
+         * 水利事件(大类5):水压监测(小类510)、水流速(小类511)
+         * 农业事件(大类4):土壤墒情(小类403)、病虫害监测(小类401)
+         * */
+        if (flag) {
+            SensorEventVo vo = new SensorEventVo();
+            vo.setEventType("6");
+            vo.setEventTypeXl("601");
+            vo.setEventName(title);
+            vo.setEventDescription(stringBuilder.toString());
+            vo.setLatitude(device.getLatitude());
+            vo.setLongitude(device.getLongitude());
+            vo.setSensorId(device.getId());
+            vo.setReportor(device.getDeviceName());
+            vo.setReportTime(simpleDateFormat.parse(centermonitorTMonitoringDataAtmosphere.getCreateTime()));
+            vo.setAddress(device.getAddress());
+            eventBaseService.insertSensorEvent(vo);
+        }
+    }
+
+    /**
+     * 水质设备告警方法
+     */
+    private void waterQualityWarn(CentermonitorTMonitoringDevice device,
+                                  CentermonitorTMonitoringThresholdWaterQuality thresholdWaterQuality,
+                                  CentermonitorTMonitoringDataWaterQuality centermonitorTMonitoringDataWaterQuality) throws ParseException {
+        boolean flag = false;
+        //告警报文
+        String title = "【水质传感器阈值告警】传感器名称:" + device.getDeviceName() + "  设备编码:" + device.getDeviceCode() + ";";
+        String warnText;
+        StringBuilder stringBuilder = new StringBuilder(title);
+        if (Double.parseDouble(centermonitorTMonitoringDataWaterQuality.getWaterPh()) < Double.parseDouble(thresholdWaterQuality.getWaterPhThresholdDown()) ||
+                Double.parseDouble(centermonitorTMonitoringDataWaterQuality.getWaterPh()) > Double.parseDouble(thresholdWaterQuality.getWaterPhThresholdUp())) {
+            if (Double.parseDouble(centermonitorTMonitoringDataWaterQuality.getWaterPh()) < Double.parseDouble(thresholdWaterQuality.getWaterPhThresholdDown())) {
+                warnText = "水质PH值过低";
+            } else {
+                warnText = "水质PH值过高";
+            }
+            flag = true;
+            stringBuilder.append("  ").append(warnText).append(", 当前值:").append(centermonitorTMonitoringDataWaterQuality.getWaterPh()).append("PH;  参考阈值:").append(thresholdWaterQuality.getWaterPhThresholdDown()).append("~").append(thresholdWaterQuality.getWaterPhThresholdUp()).append("PH;");
+        }
+        if (Double.parseDouble(centermonitorTMonitoringDataWaterQuality.getWaterQualitySuspension()) > Double.parseDouble(thresholdWaterQuality.getWaterQualitySuspensionThreshold())) {
+            flag = true;
+            stringBuilder.append("  浊度值过高, 当前值:").append(centermonitorTMonitoringDataWaterQuality.getWaterQualitySuspension()).append("mg/L;  高位阈值:").append(thresholdWaterQuality.getWaterQualitySuspensionThreshold()).append("mg/L;");
+        }
+        if (Double.parseDouble(centermonitorTMonitoringDataWaterQuality.getAmmoniaNitrogen()) > Double.parseDouble(thresholdWaterQuality.getAmmoniaNitrogenThreshold())) {
+            flag = true;
+            stringBuilder.append("  氨氮值过高, 当前值:").append(centermonitorTMonitoringDataWaterQuality.getAmmoniaNitrogen()).append("mg/L;  高位阈值:").append(thresholdWaterQuality.getAmmoniaNitrogenThreshold()).append("mg/L;");
+        }
+        if (Double.parseDouble(centermonitorTMonitoringDataWaterQuality.getCod()) > Double.parseDouble(thresholdWaterQuality.getCodThreshold())) {
+            flag = true;
+            stringBuilder.append("  化学需氧量过高, 当前值:").append(centermonitorTMonitoringDataWaterQuality.getCod()).append("mg/L;  高位阈值:").append(thresholdWaterQuality.getCodThreshold()).append("mg/L;");
+        }
+        if (Double.parseDouble(centermonitorTMonitoringDataWaterQuality.getWaterTemperature()) < Double.parseDouble(thresholdWaterQuality.getWaterTemperatureThresholdDown()) ||
+                Double.parseDouble(centermonitorTMonitoringDataWaterQuality.getWaterTemperature()) > Double.parseDouble(thresholdWaterQuality.getWaterTemperatureThresholdUp())) {
+
+            if (Double.parseDouble(centermonitorTMonitoringDataWaterQuality.getWaterTemperature()) < Double.parseDouble(thresholdWaterQuality.getWaterTemperatureThresholdDown())) {
+                warnText = "水温过低";
+            } else {
+                warnText = "水温过高";
+            }
+            flag = true;
+            stringBuilder.append("  ").append(warnText).append(", 当前水温:").append(centermonitorTMonitoringDataWaterQuality.getWaterTemperature()).append("℃;  参考阈值:").append(thresholdWaterQuality.getWaterTemperatureThresholdDown()).append("~").append(thresholdWaterQuality.getWaterTemperatureThresholdUp()).append("℃;");
+        }
+        if (Double.parseDouble(centermonitorTMonitoringDataWaterQuality.getConductivity()) < Double.parseDouble(thresholdWaterQuality.getConductivityThresholdDown()) ||
+                Double.parseDouble(centermonitorTMonitoringDataWaterQuality.getConductivity()) > Double.parseDouble(thresholdWaterQuality.getConductivityThresholdUp())) {
+            if (Double.parseDouble(centermonitorTMonitoringDataWaterQuality.getConductivity()) < Double.parseDouble(thresholdWaterQuality.getConductivityThresholdDown())) {
+                warnText = "水质电导率过低";
+            } else {
+                warnText = "水质电导率过高";
+            }
+            flag = true;
+            stringBuilder.append("  ").append(warnText).append(", 当前值:").append(centermonitorTMonitoringDataWaterQuality.getConductivity()).append("μS/cm;  参考阈值:").append(thresholdWaterQuality.getConductivityThresholdDown()).append("~").append(thresholdWaterQuality.getConductivityThresholdUp()).append("μS/cm;");
+        }
+        if (!stringBuilder.toString().equals(title)) {
+            System.out.println(stringBuilder);
+        }
+        /*
+         * 环保事件(大类6):大气监测(小类601)、水质环境(小类602)
+         * 水利事件(大类5):水压监测(小类510)、水流速(小类511)
+         * 农业事件(大类4):土壤墒情(小类403)、病虫害监测(小类401)
+         * */
+        if (flag) {
+            SensorEventVo vo = new SensorEventVo();
+            vo.setEventType("6");
+            vo.setEventTypeXl("602");
+            vo.setEventName(title);
+            vo.setEventDescription(stringBuilder.toString());
+            vo.setLatitude(device.getLatitude());
+            vo.setLongitude(device.getLongitude());
+            vo.setSensorId(device.getId());
+            vo.setReportor(device.getDeviceName());
+            vo.setReportTime(simpleDateFormat.parse(centermonitorTMonitoringDataWaterQuality.getCreateTime()));
+            vo.setAddress(device.getAddress());
+            eventBaseService.insertSensorEvent(vo);
+        }
+    }
+
+    private String twentyFourHoursAgo(String time) {
+        Calendar date = Calendar.getInstance();
+        try {
+            date.setTime(simpleDateFormat.parse(time));
+        } catch (ParseException e) {
+            throw new RuntimeException(e);
+        }
+        date.set(Calendar.DATE, date.get(Calendar.DATE) - 1);
+        return simpleDateFormat.format(date.getTime());
+    }
+
+    /**
+     * 修改监测设备离线在线状态
+     *
+     * @param centermonitorTMonitoringDevice 监测设备
+     * @return 结果
+     */
+    @Override
+    public int updateDeviceListToJudgeWorkingStatus(CentermonitorTMonitoringDevice centermonitorTMonitoringDevice) {
+        return centermonitorTMonitoringDeviceMapper.updateDeviceListToJudgeWorkingStatus(centermonitorTMonitoringDevice);
+    }
+
+    /**
+     * 获取设备列表以判断工作状态
+     */
+    public List<CentermonitorTMonitoringDevice> getDeviceListToJudgeWorkingStatus(CentermonitorTMonitoringDevice device) {
+        return centermonitorTMonitoringDeviceMapper.getDeviceListToJudgeWorkingStatus(device);
+    }
+
+    /**
+     * 获取设备数据列表以判断工作状态
+     */
+    //大气
+    public CentermonitorTMonitoringDataAtmosphere getDeviceData_1_Atmosphere_ListToJudgeWorkingStatus(CentermonitorTMonitoringDataAtmosphere device) {
+        return centermonitorTMonitoringDeviceMapper.getDeviceData_1_Atmosphere_ListToJudgeWorkingStatus(device);
+    }
+
+    //病虫害
+    public CentermonitorTMonitoringDataInsectPests getDeviceData_2_Insect_pests_ListToJudgeWorkingStatus(CentermonitorTMonitoringDataInsectPests device) {
+        return centermonitorTMonitoringDeviceMapper.getDeviceData_2_Insect_pests_ListToJudgeWorkingStatus(device);
+    }
+
+    //土壤
+    public CentermonitorTMonitoringDataSoilMoisture getDeviceData_3_SoilMoisture_ListToJudgeWorkingStatus(CentermonitorTMonitoringDataSoilMoisture device) {
+        return centermonitorTMonitoringDeviceMapper.getDeviceData_3_SoilMoisture_ListToJudgeWorkingStatus(device);
+    }
+
+    //水压
+    public CentermonitorTMonitoringDataWaterPressure getDeviceData_4_WaterPressure_ListToJudgeWorkingStatus(CentermonitorTMonitoringDataWaterPressure device) {
+        return centermonitorTMonitoringDeviceMapper.getDeviceData_4_WaterPressure_ListToJudgeWorkingStatus(device);
+    }
+
+    //水质
+    public CentermonitorTMonitoringDataWaterQuality getDeviceData_5_WaterQuality_ListToJudgeWorkingStatus(CentermonitorTMonitoringDataWaterQuality device) {
+        return centermonitorTMonitoringDeviceMapper.getDeviceData_5_WaterQuality_ListToJudgeWorkingStatus(device);
+    }
+
+    //水流速
+    public CentermonitorTMonitoringDataWaterVelocity getDeviceData_6_WaterVelocity_ListToJudgeWorkingStatus(CentermonitorTMonitoringDataWaterVelocity device) {
+        return centermonitorTMonitoringDeviceMapper.getDeviceData_6_WaterVelocity_ListToJudgeWorkingStatus(device);
+    }
+}

+ 50 - 0
src/main/java/com/sooka/sponest/monitor/device/service/impl/CentermonitorTMonitoringDeviceSoilMoistureThresholdServiceImpl.java

@@ -0,0 +1,50 @@
+package com.sooka.sponest.monitor.device.service.impl;
+
+import com.ruoyi.common.core.utils.uuid.IdUtils;
+import com.sooka.sponest.monitor.base.service.impl.BaseService;
+import com.sooka.sponest.monitor.device.domain.CentermonitorTMonitoringThresholdSoilMoisture;
+import com.sooka.sponest.monitor.device.mapper.CentermonitorTMonitoringDeviceSoilMoistureThresholdMapper;
+import com.sooka.sponest.monitor.device.service.ICentermonitorTMonitoringDeviceSoilMoistureThresholdService;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import java.util.List;
+
+@Service
+public class CentermonitorTMonitoringDeviceSoilMoistureThresholdServiceImpl extends BaseService implements ICentermonitorTMonitoringDeviceSoilMoistureThresholdService {
+    @Resource
+    private CentermonitorTMonitoringDeviceSoilMoistureThresholdMapper deviceSoilMoistureThresholdMapper;
+
+    /**
+     * 通过设备编码查询土壤传感器阈值
+     * */
+    @Override
+    public CentermonitorTMonitoringThresholdSoilMoisture selectSoilMoistureThresholdByCode(String deviceCode) {
+        return deviceSoilMoistureThresholdMapper.selectSoilMoistureThresholdByCode(deviceCode);
+    }
+
+    /**
+     * 通过设备编码组查询土壤传感器阈值
+     * */
+    @Override
+    public List<CentermonitorTMonitoringThresholdSoilMoisture> selectSoilMoistureThresholdByCodes(String[] deviceCodes){
+        return deviceSoilMoistureThresholdMapper.selectSoilMoistureThresholdByCodes(deviceCodes);
+    }
+
+    /**
+     * 新增土壤监测设备阈值
+     */
+    @Override
+    public int insertSoilMoistureThreshold(CentermonitorTMonitoringThresholdSoilMoisture thresholdSoilMoisture){
+        thresholdSoilMoisture.setId(IdUtils.simpleUUID());
+        return deviceSoilMoistureThresholdMapper.insertSoilMoistureThreshold(thresholdSoilMoisture);
+    }
+
+    /**
+     * 修改土壤监测设备阈值
+     */
+    @Override
+    public int updateSoilMoistureThreshold(CentermonitorTMonitoringThresholdSoilMoisture thresholdSoilMoisture){
+        return deviceSoilMoistureThresholdMapper.updateSoilMoistureThreshold(thresholdSoilMoisture);
+    }
+}

+ 50 - 0
src/main/java/com/sooka/sponest/monitor/device/service/impl/CentermonitorTMonitoringDeviceThresholdServiceImpl.java

@@ -0,0 +1,50 @@
+package com.sooka.sponest.monitor.device.service.impl;
+
+import com.ruoyi.common.core.utils.uuid.IdUtils;
+import com.sooka.sponest.monitor.base.service.impl.BaseService;
+import com.sooka.sponest.monitor.device.domain.CentermonitorTMonitoringThresholdWaterVelocity;
+import com.sooka.sponest.monitor.device.mapper.CentermonitorTMonitoringDeviceThresholdMapper;
+import com.sooka.sponest.monitor.device.service.ICentermonitorTMonitoringDeviceThresholdService;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import java.util.List;
+
+@Service
+public class CentermonitorTMonitoringDeviceThresholdServiceImpl extends BaseService implements ICentermonitorTMonitoringDeviceThresholdService {
+    @Resource
+    private CentermonitorTMonitoringDeviceThresholdMapper deviceThresholdMapper;
+
+    /**
+     * 通过设备编码查询水流速传感器阈值
+     * */
+    @Override
+    public CentermonitorTMonitoringThresholdWaterVelocity selectWaterVelocityThresholdByCode(String deviceCode) {
+        return deviceThresholdMapper.selectWaterVelocityThresholdByCode(deviceCode);
+    }
+
+    /**
+     * 通过设备编码组查询水流速传感器阈值
+     * */
+    @Override
+    public List<CentermonitorTMonitoringThresholdWaterVelocity> selectWaterVelocityThresholdByCodes(String[] deviceCodes){
+        return deviceThresholdMapper.selectWaterVelocityThresholdByCodes(deviceCodes);
+    }
+
+    /**
+     * 新增水流速监测设备阈值
+     */
+    @Override
+    public int insertWaterVelocityThreshold(CentermonitorTMonitoringThresholdWaterVelocity thresholdWaterVelocity){
+        thresholdWaterVelocity.setId(IdUtils.simpleUUID());
+        return deviceThresholdMapper.insertWaterVelocityThreshold(thresholdWaterVelocity);
+    }
+
+    /**
+     * 修改水流速监测设备阈值
+     */
+    @Override
+    public int updateWaterVelocityThreshold(CentermonitorTMonitoringThresholdWaterVelocity thresholdWaterVelocity){
+        return deviceThresholdMapper.updateWaterVelocityThreshold(thresholdWaterVelocity);
+    }
+}

+ 51 - 0
src/main/java/com/sooka/sponest/monitor/device/service/impl/CentermonitorTMonitoringDeviceWaterQualityThresholdServiceImpl.java

@@ -0,0 +1,51 @@
+package com.sooka.sponest.monitor.device.service.impl;
+
+import com.ruoyi.common.core.utils.uuid.IdUtils;
+import com.sooka.sponest.monitor.base.service.impl.BaseService;
+import com.sooka.sponest.monitor.device.domain.CentermonitorTMonitoringThresholdWaterQuality;
+import com.sooka.sponest.monitor.device.mapper.CentermonitorTMonitoringDeviceWaterQualityThresholdMapper;
+import com.sooka.sponest.monitor.device.service.ICentermonitorTMonitoringDeviceWaterQualityThresholdService;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import java.util.List;
+
+@Service
+public class CentermonitorTMonitoringDeviceWaterQualityThresholdServiceImpl extends BaseService implements ICentermonitorTMonitoringDeviceWaterQualityThresholdService {
+    @Resource
+    private CentermonitorTMonitoringDeviceWaterQualityThresholdMapper deviceWaterQualityThresholdMapper;
+
+    /**
+     * 通过设备编码查询水质传感器阈值
+     * */
+    @Override
+    public CentermonitorTMonitoringThresholdWaterQuality selectWaterQualityThresholdByCode(String deviceCode) {
+        return deviceWaterQualityThresholdMapper.selectWaterQualityThresholdByCode(deviceCode);
+    }
+
+    /**
+     * 通过设备编码组查询水质传感器阈值
+     * */
+    @Override
+    public List<CentermonitorTMonitoringThresholdWaterQuality> selectWaterQualityThresholdByCodes(String[] deviceCodes){
+        return deviceWaterQualityThresholdMapper.selectWaterQualityThresholdByCodes(deviceCodes);
+    }
+
+
+    /**
+     * 新增水质监测设备阈值
+     */
+    @Override
+    public int insertWaterQualityThreshold(CentermonitorTMonitoringThresholdWaterQuality thresholdWaterQuality){
+        thresholdWaterQuality.setId(IdUtils.simpleUUID());
+        return deviceWaterQualityThresholdMapper.insertWaterQualityThreshold(thresholdWaterQuality);
+    }
+
+    /**
+     * 修改水质监测设备阈值
+     */
+    @Override
+    public int updateWaterQualityThreshold(CentermonitorTMonitoringThresholdWaterQuality thresholdWaterQuality){
+        return deviceWaterQualityThresholdMapper.updateWaterQualityThreshold(thresholdWaterQuality);
+    }
+}

+ 35 - 0
src/main/java/com/sooka/sponest/monitor/feign/CenterMonitorFeignController.java

@@ -0,0 +1,35 @@
+package com.sooka.sponest.monitor.feign;
+
+import com.ruoyi.common.core.domain.R;
+import com.ruoyi.common.log.annotation.Log;
+import com.ruoyi.common.log.enums.BusinessType;
+import com.ruoyi.system.api.domain.SysFile;
+import com.sooka.sponest.monitor.remoteapi.service.file.RemoteFileBaseService;
+import io.swagger.annotations.Api;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.multipart.MultipartFile;
+
+/**
+ * 监控中心远程接口控制器
+ */
+@Api(tags = "监控中心远程接口控制器")
+@RestController
+@RequestMapping("/centerMonitorFeign")
+public class CenterMonitorFeignController {
+
+    @Autowired
+    private RemoteFileBaseService remoteFileBaseService;
+
+    /**
+     * 病虫害文件上传
+     */
+    @Log(title = "监控中心", businessType = BusinessType.OTHER)
+    @PostMapping ("/upload")
+    public R<SysFile> upload(MultipartFile file) {
+        return remoteFileBaseService.upload(file);
+
+    }
+}

+ 22 - 0
src/main/java/com/sooka/sponest/monitor/remoteapi/EnableSookaFeignClients.java

@@ -0,0 +1,22 @@
+package com.sooka.sponest.monitor.remoteapi;
+
+import org.springframework.cloud.openfeign.EnableFeignClients;
+
+import java.lang.annotation.*;
+
+@Target(ElementType.TYPE)
+@Retention(RetentionPolicy.RUNTIME)
+@Documented
+@EnableFeignClients
+public @interface EnableSookaFeignClients {
+
+    String[] value() default {};
+
+    String[] basePackages() default {"com.ruoyi", "com.sooka" };
+
+    Class<?>[] basePackageClasses() default {};
+
+    Class<?>[] defaultConfiguration() default {};
+
+    Class<?>[] clients() default {};
+}

+ 4 - 0
src/main/java/com/sooka/sponest/monitor/remoteapi/RemoveApiBaseService.java

@@ -0,0 +1,4 @@
+package com.sooka.sponest.monitor.remoteapi;
+
+public interface RemoveApiBaseService {
+}

+ 32 - 0
src/main/java/com/sooka/sponest/monitor/remoteapi/fallback/data/RemoteDataBaseServiceFallbackFactory.java

@@ -0,0 +1,32 @@
+package com.sooka.sponest.monitor.remoteapi.fallback.data;
+
+
+import com.ruoyi.common.core.domain.R;
+import com.sooka.sponest.monitor.remoteapi.service.data.RemoteDataBaseService;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.cloud.openfeign.FallbackFactory;
+import org.springframework.stereotype.Component;
+
+@Component
+public class RemoteDataBaseServiceFallbackFactory implements FallbackFactory<RemoteDataBaseService> {
+
+    private static final Logger log = LoggerFactory.getLogger(RemoteDataBaseServiceFallbackFactory.class);
+
+    @Override
+    public RemoteDataBaseService create(Throwable cause) {
+        log.error("数据中心-服务调用失败:{}", cause.getMessage());
+
+        return new RemoteDataBaseService() {
+
+            @Override
+            public R sendGpsEvent(String jsonArray) {
+                return null;
+            }
+
+
+        };
+
+
+    }
+}

+ 34 - 0
src/main/java/com/sooka/sponest/monitor/remoteapi/fallback/event/RemoteEventBaseServiceFallbackFactory.java

@@ -0,0 +1,34 @@
+package com.sooka.sponest.monitor.remoteapi.fallback.event;
+
+
+import com.ruoyi.common.core.domain.R;
+import com.sooka.sponest.monitor.device.domain.SensorEventVo;
+import com.sooka.sponest.monitor.remoteapi.service.event.RemoteEventBaseService;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.cloud.openfeign.FallbackFactory;
+import org.springframework.stereotype.Component;
+import org.springframework.web.bind.annotation.RequestBody;
+
+@Component
+public class RemoteEventBaseServiceFallbackFactory implements FallbackFactory<RemoteEventBaseService> {
+
+    private static final Logger log = LoggerFactory.getLogger(RemoteEventBaseServiceFallbackFactory.class);
+
+    @Override
+    public RemoteEventBaseService create(Throwable cause) {
+        log.error("事件中心-服务调用失败:{}", cause.getMessage());
+
+        return new RemoteEventBaseService() {
+
+            @Override
+            public R insertSensorEvent(@RequestBody SensorEventVo sensorEventVo) {
+                return null;
+            }
+
+        };
+
+
+
+    }
+}

+ 16 - 0
src/main/java/com/sooka/sponest/monitor/remoteapi/fallback/file/RemoteFileServiceFallbackFactory.java

@@ -0,0 +1,16 @@
+package com.sooka.sponest.monitor.remoteapi.fallback.file;
+
+
+import com.sooka.sponest.monitor.remoteapi.service.file.RemoteFileBaseService;
+import org.springframework.cloud.openfeign.FallbackFactory;
+import org.springframework.stereotype.Component;
+
+@Component
+public class RemoteFileServiceFallbackFactory implements FallbackFactory<RemoteFileBaseService> {
+
+    @Override
+    public RemoteFileBaseService create(Throwable cause) {
+        System.out.println("文件服务中心 remote service error!!!");
+        return null;
+    }
+}

+ 34 - 0
src/main/java/com/sooka/sponest/monitor/remoteapi/fallback/lawenforcement/RemoteLawenforcementBaseServiceFallbackFactory.java

@@ -0,0 +1,34 @@
+package com.sooka.sponest.monitor.remoteapi.fallback.lawenforcement;
+
+
+import com.ruoyi.common.core.domain.R;
+import com.sooka.sponest.monitor.remoteapi.service.lawenforcement.RemoteLawenforcementBaseService;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.cloud.openfeign.FallbackFactory;
+import org.springframework.stereotype.Component;
+
+import java.util.List;
+import java.util.Map;
+
+@Component
+public class RemoteLawenforcementBaseServiceFallbackFactory implements FallbackFactory<RemoteLawenforcementBaseService> {
+
+    private static final Logger log = LoggerFactory.getLogger(RemoteLawenforcementBaseServiceFallbackFactory.class);
+
+    @Override
+    public RemoteLawenforcementBaseService create(Throwable cause) {
+        log.error("执法中心-服务调用失败:{}", cause.getMessage());
+
+        return new RemoteLawenforcementBaseService() {
+
+            @Override
+            public R deviceOpenOrClose(List<Map<String, Object>> arr) {
+                return null;
+            }
+        };
+
+
+
+    }
+}

+ 39 - 0
src/main/java/com/sooka/sponest/monitor/remoteapi/fallback/system/RemoteSystemBaseServiceFallbackFactory.java

@@ -0,0 +1,39 @@
+package com.sooka.sponest.monitor.remoteapi.fallback.system;
+
+import com.ruoyi.common.core.domain.R;
+import com.ruoyi.system.api.domain.SysDept;
+import com.ruoyi.system.api.factory.RemoteUserFallbackFactory;
+import com.sooka.sponest.monitor.remoteapi.service.system.RemoteService;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.cloud.openfeign.FallbackFactory;
+import org.springframework.stereotype.Component;
+
+/**
+ * @program: ruoyi
+ * @description: yy
+ * @author: yy
+ * @create: 2022-06-16 11:05
+ **/
+@Component
+public class RemoteSystemBaseServiceFallbackFactory implements FallbackFactory<RemoteService> {
+
+    private static final Logger log = LoggerFactory.getLogger(RemoteUserFallbackFactory.class);
+
+    @Override
+    public RemoteService create(Throwable cause) {
+        log.error("消息中心-服务调用失败:{}", cause.getMessage());
+
+        return new RemoteService() {
+
+            /**
+             * 根据用户名查询dept_id, parent_id, ancestors, dept_name
+             */
+            @Override
+            public R<SysDept> findDeptIdByUserName(String userName) {
+                return null;
+            }
+
+        };
+    }
+}

+ 51 - 0
src/main/java/com/sooka/sponest/monitor/remoteapi/service/ModulesServiceNameContants.java

@@ -0,0 +1,51 @@
+package com.sooka.sponest.monitor.remoteapi.service;
+
+import com.ruoyi.common.core.constant.ServiceNameConstants;
+
+public class ModulesServiceNameContants extends ServiceNameConstants {
+
+    //综合治理中心中心
+   public static final String CENTER_COMPREHENSIVE = "sooka-sponest-center-comprehensive";
+
+   //数据中心
+   public static final String CENTER_DATA = "sooka-sponest-center-data";
+
+   //测评中心
+   public static final String CENTER_EVALUATION = "sooka-sponest-center-evaluation";
+
+    //事件中心
+    public static final String CENTER_EVENT = "sooka-sponest-center-event";
+
+    //森林防火中心
+    public static final String CENTER_FIRE = "sooka-sponest-center-fire";
+
+    //监控中心
+    public static final String CENTER_MONITOR = "sooka-sponest-center-monitor";
+
+    //一体化平台
+    public static final String CENTER_ONEST = "sooka-sponest-center-onest";
+
+    //病虫灾害中心
+    public static final String CENTER_PESTS = "sooka-sponest-center-pests";
+
+    //秸秆禁烧中心
+    public static final String CENTER_STRAW = "sooka-sponest-center-straw";
+
+    //任务中心
+    public static final String CENTER_TASK = "sooka-sponest-center-task";
+
+    //运管中心
+    public static final String CENTER_TRANMANAGER = "sooka-sponest-center-tranmanager";
+    //文件中心
+    public static final String CENTER_FILE = "sooka-sponest-file";
+    /**
+     * 系统模块的serviceid
+     */
+    public static final String SYSTEM_SERVICE = "sooka-sponest-system";
+
+    public static final String MIDDLE_GROUND_SERVICE = "sooka-middleGround";
+
+    //执法
+    public static final String CENTER_LAWENFORCEMENT = "sooka-sponest-lawenforcement";
+
+}

+ 24 - 0
src/main/java/com/sooka/sponest/monitor/remoteapi/service/data/RemoteDataBaseService.java

@@ -0,0 +1,24 @@
+package com.sooka.sponest.monitor.remoteapi.service.data;
+
+
+import com.ruoyi.common.core.domain.R;
+import com.sooka.sponest.monitor.remoteapi.fallback.data.RemoteDataBaseServiceFallbackFactory;
+import com.sooka.sponest.monitor.remoteapi.service.ModulesServiceNameContants;
+import org.springframework.cloud.openfeign.FeignClient;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+
+
+@FeignClient(
+        contextId = "RemoteDataBaseService",
+        value = ModulesServiceNameContants.CENTER_DATA,
+        fallbackFactory = RemoteDataBaseServiceFallbackFactory.class
+)
+public interface RemoteDataBaseService {
+
+
+    @PostMapping("/taskHandler/sendGpsEvent")
+    public R sendGpsEvent(@RequestBody String jsonArray);
+
+
+}

+ 23 - 0
src/main/java/com/sooka/sponest/monitor/remoteapi/service/event/RemoteEventBaseService.java

@@ -0,0 +1,23 @@
+package com.sooka.sponest.monitor.remoteapi.service.event;
+
+
+import com.ruoyi.common.core.domain.R;
+import com.sooka.sponest.monitor.device.domain.SensorEventVo;
+import com.sooka.sponest.monitor.remoteapi.fallback.event.RemoteEventBaseServiceFallbackFactory;
+import com.sooka.sponest.monitor.remoteapi.service.ModulesServiceNameContants;
+import org.springframework.cloud.openfeign.FeignClient;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+
+
+@FeignClient(
+        contextId = "RemoteEventBaseService",
+        value = ModulesServiceNameContants.CENTER_EVENT,
+        fallbackFactory = RemoteEventBaseServiceFallbackFactory.class
+)
+public interface RemoteEventBaseService {
+
+    @PostMapping("/fireIncident/insertSensorEvent")
+    R insertSensorEvent(@RequestBody SensorEventVo sensorEventVo);
+
+}

+ 22 - 0
src/main/java/com/sooka/sponest/monitor/remoteapi/service/file/RemoteFileBaseService.java

@@ -0,0 +1,22 @@
+package com.sooka.sponest.monitor.remoteapi.service.file;
+
+import com.ruoyi.common.core.domain.R;
+import com.ruoyi.system.api.domain.SysFile;
+import com.sooka.sponest.monitor.remoteapi.fallback.file.RemoteFileServiceFallbackFactory;
+import com.sooka.sponest.monitor.remoteapi.service.ModulesServiceNameContants;
+import org.springframework.cloud.openfeign.FeignClient;
+import org.springframework.http.MediaType;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestPart;
+import org.springframework.web.multipart.MultipartFile;
+
+@FeignClient(contextId = "remoteFileBaseService", value = ModulesServiceNameContants.CENTER_FILE,
+        fallbackFactory = RemoteFileServiceFallbackFactory.class)
+public interface RemoteFileBaseService {
+
+    /**
+     * 文件上传请求
+     */
+    @PostMapping(value = "/upload", headers = "content-type=" + MediaType.MULTIPART_FORM_DATA_VALUE)
+    R<SysFile> upload(@RequestPart("file") MultipartFile file);
+}

+ 24 - 0
src/main/java/com/sooka/sponest/monitor/remoteapi/service/lawenforcement/RemoteLawenforcementBaseService.java

@@ -0,0 +1,24 @@
+package com.sooka.sponest.monitor.remoteapi.service.lawenforcement;
+
+
+import com.ruoyi.common.core.domain.R;
+import com.sooka.sponest.monitor.remoteapi.fallback.lawenforcement.RemoteLawenforcementBaseServiceFallbackFactory;
+import com.sooka.sponest.monitor.remoteapi.service.ModulesServiceNameContants;
+import org.springframework.cloud.openfeign.FeignClient;
+import org.springframework.web.bind.annotation.PostMapping;
+
+import java.util.List;
+import java.util.Map;
+
+
+@FeignClient(
+        contextId = "RemoteLawenforcementBaseService",
+        value = ModulesServiceNameContants.CENTER_LAWENFORCEMENT,
+        fallbackFactory = RemoteLawenforcementBaseServiceFallbackFactory.class
+)
+public interface RemoteLawenforcementBaseService {
+
+    @PostMapping("/device/deviceOpenOrClose")
+    public R deviceOpenOrClose(List<Map<String, Object>> arr);
+
+}

+ 22 - 0
src/main/java/com/sooka/sponest/monitor/remoteapi/service/system/RemoteService.java

@@ -0,0 +1,22 @@
+package com.sooka.sponest.monitor.remoteapi.service.system;
+
+import com.ruoyi.common.core.domain.R;
+import com.ruoyi.system.api.domain.SysDept;
+import com.sooka.sponest.monitor.remoteapi.fallback.system.RemoteSystemBaseServiceFallbackFactory;
+import com.sooka.sponest.monitor.remoteapi.service.ModulesServiceNameContants;
+import org.springframework.cloud.openfeign.FeignClient;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+
+@FeignClient(contextId = "remoteService", fallbackFactory = RemoteSystemBaseServiceFallbackFactory.class,value = ModulesServiceNameContants.SYSTEM_SERVICE)
+public interface RemoteService {
+
+    /**
+     * 根据用户名查询dept_id, parent_id, ancestors, dept_name
+     */
+    @GetMapping(value = "/dept/findDeptIdByUserName/{userName}")
+    R<SysDept> findDeptIdByUserName(@PathVariable("userName") String userName);
+
+
+
+}

+ 78 - 0
src/main/java/com/sooka/sponest/monitor/util/BeanUtil.java

@@ -0,0 +1,78 @@
+package com.sooka.sponest.monitor.util;
+
+import com.dahuatech.hutool.json.JSONNull;
+import com.ruoyi.common.core.utils.StringUtils;
+
+import java.lang.reflect.Field;
+import java.lang.reflect.Modifier;
+import java.util.HashMap;
+import java.util.Map;
+
+public class BeanUtil {
+
+    /**
+     * map转对象
+     *
+     * @param map
+     * @param beanClass
+     * @param <T>
+     * @return
+     * @throws Exception
+     */
+    public static <T> T mapToBean(Map map, Class<T> beanClass) throws Exception {
+        T object = beanClass.newInstance();
+        Field[] fields = object.getClass().getDeclaredFields();
+        for (Field field : fields) {
+            int mod = field.getModifiers();
+            if (Modifier.isStatic(mod) || Modifier.isFinal(mod)) {
+                continue;
+            }
+            field.setAccessible(true);
+            if (map.containsKey(field.getName())) {
+                field.set(object, map.get(field.getName()) instanceof JSONNull ? StringUtils.EMPTY : map.get(field.getName()));
+            }
+        }
+        return object;
+    }
+
+    /**
+     * 实体类转Map
+     *
+     * @param object
+     * @return
+     */
+    public static Map<String, Object> beanToMap(Object object) {
+        Map<String, Object> map = new HashMap();
+        for (Field field : object.getClass().getDeclaredFields()) {
+            try {
+                boolean flag = field.isAccessible();
+                field.setAccessible(true);
+                Object o = field.get(object);
+                map.put(field.getName(), o);
+                field.setAccessible(flag);
+            } catch (Exception e) {
+                e.printStackTrace();
+            }
+        }
+        return map;
+    }
+
+    public static <T> T arrayToBean(String[] values, Class<T> beanClass) throws Exception {
+        T object = beanClass.newInstance();
+        Field[] fields = object.getClass().getDeclaredFields();
+        for (int i = 0; i < fields.length; i++) {
+            int mod = fields[i].getModifiers();
+            if (Modifier.isStatic(mod) || Modifier.isFinal(mod)) {
+                continue;
+            }
+            // 检查 values 数组的长度
+            if (i < values.length) {
+                fields[i].setAccessible(true);
+                fields[i].set(object, values[i].split(" ")[0]); // 只取第一个值
+            }
+//            fields[i].setAccessible(true);
+//            fields[i].set(object, values[i].split(" ")[0]);
+        }
+        return object;
+    }
+}

+ 137 - 0
src/main/java/com/sooka/sponest/monitor/util/ScheduledTasks.java

@@ -0,0 +1,137 @@
+package com.sooka.sponest.monitor.util;
+
+import com.ruoyi.common.core.utils.DateUtils;
+import com.ruoyi.common.log.annotation.Log;
+import com.ruoyi.common.log.enums.BusinessType;
+import com.sooka.sponest.monitor.device.domain.*;
+import com.sooka.sponest.monitor.device.service.ICentermonitorTMonitoringDeviceService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.scheduling.annotation.EnableScheduling;
+import org.springframework.stereotype.Component;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.List;
+
+import static org.springframework.web.bind.annotation.RequestMethod.GET;
+
+@Configuration
+@EnableScheduling
+@Component
+@Api(tags = "传感器设备定时任务")
+@RestController
+@RequestMapping("/device/quartz")
+public class ScheduledTasks {
+
+    protected static final Logger logger = LoggerFactory.getLogger(ScheduledTasks.class);
+
+    @Autowired
+    private ICentermonitorTMonitoringDeviceService centermonitorTMonitoringDeviceService; // 你的业务逻辑服务
+
+//    @Scheduled(cron = "0 0 0 * * ?") // 每天0点执行
+//    @Scheduled(cron = "0 0 */2 * * ?") // 每两小时执行一次
+//        @Scheduled(cron = "0 */1 * * * ?") // 每分钟执行一次
+    @Log(title = "传感器设备定时任务", businessType = BusinessType.OTHER)
+    @ApiOperation(value = "传感器设备定时任务", notes = "传感器设备定时任务")
+    @RequestMapping(value = "/updateDeviceStatusQuartz", method = GET)
+    public void updateStatus() {
+        logger.info("执行定时任务=>{}", DateUtils.dateTimeNow());
+        // 获取最近一次更新时间超过24小时的数据
+        List<CentermonitorTMonitoringDevice> deviceMainList = centermonitorTMonitoringDeviceService.getDeviceListToJudgeWorkingStatus(new CentermonitorTMonitoringDevice());
+        for (CentermonitorTMonitoringDevice deviceMain : deviceMainList) {
+            if (isOffline(deviceMain)){// 是否离线
+                deviceMain.setWorkingStatus("1");// 设备离线
+            } else {
+                deviceMain.setWorkingStatus("0");// 设备在线
+            }
+            centermonitorTMonitoringDeviceService.updateDeviceListToJudgeWorkingStatus(deviceMain); // 保存更新后的数据列表
+        }
+    }
+
+    private boolean isOffline(CentermonitorTMonitoringDevice device) {
+        String deviceType = device.getDeviceType();// 设备类型
+        String deviceCode = device.getDeviceCode();// 设备编码
+        String createTime = new String();// 数据创建时间
+        if(deviceType.equals("5")){//大气
+            CentermonitorTMonitoringDataAtmosphere atmosphere = new CentermonitorTMonitoringDataAtmosphere();
+            atmosphere.setDeviceCode(deviceCode);
+            CentermonitorTMonitoringDataAtmosphere data = centermonitorTMonitoringDeviceService.getDeviceData_1_Atmosphere_ListToJudgeWorkingStatus(atmosphere);
+            if(data != null){
+                createTime = data.getCreateTime();
+            }else {
+                return true;
+            }
+        }else if(deviceType.equals("4")){//病虫害
+            CentermonitorTMonitoringDataInsectPests insectPests = new CentermonitorTMonitoringDataInsectPests();
+            insectPests.setDeviceCode(deviceCode);
+            CentermonitorTMonitoringDataInsectPests data = centermonitorTMonitoringDeviceService.getDeviceData_2_Insect_pests_ListToJudgeWorkingStatus(insectPests);
+            if(data != null){
+                createTime = data.getCreateTime();
+            }else {
+                return true;
+            }
+        }else if(deviceType.equals("2")){//土壤
+            CentermonitorTMonitoringDataSoilMoisture soilMoisture = new CentermonitorTMonitoringDataSoilMoisture();
+            soilMoisture.setDeviceCode(deviceCode);
+            CentermonitorTMonitoringDataSoilMoisture data = centermonitorTMonitoringDeviceService.getDeviceData_3_SoilMoisture_ListToJudgeWorkingStatus(soilMoisture);
+            if(data != null){
+                createTime = data.getCreateTime();
+            }else {
+                return true;
+            }
+        }else if(deviceType.equals("6")){//水压
+            CentermonitorTMonitoringDataWaterPressure waterPressure = new CentermonitorTMonitoringDataWaterPressure();
+            waterPressure.setDeviceCode(deviceCode);
+            CentermonitorTMonitoringDataWaterPressure data = centermonitorTMonitoringDeviceService.getDeviceData_4_WaterPressure_ListToJudgeWorkingStatus(waterPressure);
+            if(data != null){
+                createTime = data.getCreateTime();
+            }else {
+                return true;
+            }
+        }else if(deviceType.equals("1")){//水质
+            CentermonitorTMonitoringDataWaterQuality waterQuality = new CentermonitorTMonitoringDataWaterQuality();
+            waterQuality.setDeviceCode(deviceCode);
+            CentermonitorTMonitoringDataWaterQuality data = centermonitorTMonitoringDeviceService.getDeviceData_5_WaterQuality_ListToJudgeWorkingStatus(waterQuality);
+            if(data != null){
+                createTime = data.getCreateTime();
+            }else {
+                return true;
+            }
+        }else if(deviceType.equals("7")){//水流速
+            CentermonitorTMonitoringDataWaterVelocity waterVelocity =  new CentermonitorTMonitoringDataWaterVelocity();
+            waterVelocity.setDeviceCode(deviceCode);
+            CentermonitorTMonitoringDataWaterVelocity data = centermonitorTMonitoringDeviceService.getDeviceData_6_WaterVelocity_ListToJudgeWorkingStatus(waterVelocity);
+            if(data != null){
+                createTime = data.getCreateTime();
+            }else {
+                return true;
+            }
+        }else {
+            return true;
+        }
+        // 日期字符串转日期对象
+        Date currentTime = new Date();
+        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+        Date date = null;
+        try {
+            date = sdf.parse(createTime);
+        } catch (ParseException e) {
+            e.printStackTrace();
+        }
+        long elapsedTime = currentTime.getTime() - date.getTime(); // 当前时间与最新一条数据时间差(毫秒)
+        return elapsedTime>=86400000L;
+//        return ((elapsedTime)/(1000*60*60))>=24;
+//        long hours = TimeUnit.MILLISECONDS.toHours(elapsedTime); //  当前时间与最新一条数据时间差(小时)
+//        return hours >= 24;
+//            return TimeUnit.MILLISECONDS.toHours(new Date().getTime() - new Date(createTime).getTime()) >= 24;
+    }
+}
+

+ 9 - 0
src/main/resources/banner.txt

@@ -0,0 +1,9 @@
+Spring Boot Version: ${spring-boot.version}
+Spring Application Name: ${spring.application.name}
+
+  __________   ____ |  | _______          ____________   ____   ____   ____   _______/  |_
+
+ /  ___/  _ \ /  _ \|  |/ /\__  \        /  ___/\____ \ /  _ \ /    \_/ __ \ /  ___/\   __\
+ \___ (  <_> |  <_> )    <  / __ \_      \___ \ |  |_> >  <_> )   |  \  ___/ \___ \  |  |
+/____  >____/ \____/|__|_ \(____  /     /____  >|   __/ \____/|___|  /\___  >____  > |__|
+     \/                  \/     \/           \/ |__|               \/     \/     \/

+ 26 - 0
src/main/resources/bootstrap.yml

@@ -0,0 +1,26 @@
+# Tomcat
+server:
+  port: 3207
+# Spring
+spring:
+  application:
+    # 应用名称
+    name: sooka-sponest-center-monitor-iot
+  profiles:
+    # 环境配置
+    active: dev
+  cloud:
+    nacos:
+      discovery:
+        # 服务注册地址
+        server-addr: www.sooka.onest.com:8848
+#         server-addr: 127.0.0.1:8848
+      config:
+        # 配置中心地址
+        server-addr: www.sooka.onest.com:8848
+#        server-addr: 127.0.0.1:8848
+        # 配置文件格式
+        file-extension: yml
+        # 共享配置
+        shared-configs:
+          - application-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension}

+ 568 - 0
src/main/resources/mapper/monitor/device/CentermonitorTMonitoringDeviceMapper.xml

@@ -0,0 +1,568 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.sooka.sponest.monitor.device.mapper.CentermonitorTMonitoringDeviceMapper">
+
+    <resultMap type="CentermonitorTMonitoringDevice" id="CentermonitorTMonitoringDeviceResult">
+        <result property="id" column="id"/>
+        <result property="deviceName" column="device_name"/>
+        <result property="brand" column="brand"/>
+        <result property="deviceCode" column="device_code"/>
+        <result property="longitude" column="longitude"/>
+        <result property="latitude" column="latitude"/>
+        <result property="deptId" column="dept_id"/>
+        <result property="deptName" column="dept_name"/>
+        <result property="workingStatus" column="working_status"/>
+        <result property="deviceType" column="device_type"/>
+        <result property="warnLine" column="warn_line"/>
+        <result property="remark" column="remark"/>
+        <result property="address" column="address"/>
+        <result property="openWarn" column="open_warn"/>
+        <result property="charger" column="charger"/>
+        <result property="chargerTel" column="charger_tel"/>
+        <result property="cameraCode" column="camera_code"/>
+        <result property="cameraName" column="camera_name"/>
+    </resultMap>
+
+    <resultMap type="CentermonitorTMonitoringDataWaterQuality" id="CentermonitorTMonitoringDataWaterQualityResult">
+        <result property="id" column="id"/>
+        <result property="deviceCode" column="device_code"/>
+        <result property="waterPh" column="water_ph"/>
+        <result property="waterTemperature" column="water_temperature"/>
+        <result property="waterQualitySuspension" column="water_quality_suspension"/>
+        <result property="waterTemperatureTwo" column="water_temperature_two"/>
+        <result property="conductivity" column="conductivity"/>
+        <result property="ammoniaNitrogen" column="ammonia_nitrogen"/>
+        <result property="cod" column="cod"/>
+        <result property="longitude" column="longitude"/>
+        <result property="latitude" column="latitude"/>
+        <result property="signalStrength" column="signal_strength"/>
+        <result property="errorCode" column="error_code"/>
+        <result property="version" column="version"/>
+        <result property="createTime" column="create_time"/>
+    </resultMap>
+
+    <resultMap type="CentermonitorTMonitoringDataSoilMoisture" id="CentermonitorTMonitoringDataSoilMoistureResult">
+        <result property="id" column="id"/>
+        <result property="deviceCode" column="device_code"/>
+        <result property="temperature" column="temperature"/>
+        <result property="humidity" column="humidity"/>
+        <result property="ph" column="ph"/>
+        <result property="conductivity" column="conductivity"/>
+        <result property="nitrogen" column="nitrogen"/>
+        <result property="phosphorus" column="phosphorus"/>
+        <result property="potassium" column="potassium"/>
+        <result property="voltage" column="voltage"/>
+        <result property="createTime" column="create_time"/>
+    </resultMap>
+
+    <resultMap type="CentermonitorTMonitoringDataWaterVelocity" id="CentermonitorTMonitoringDataWaterVelocityResult">
+        <result property="id" column="id"/>
+        <result property="ST" column="ST"/>
+        <result property="FUN" column="FUN"/>
+        <result property="TT" column="TT"/>
+        <result property="TYPE" column="TYPE"/>
+        <result property="BAT" column="BAT"/>
+        <result property="Q" column="Q"/>
+        <result property="Q1" column="Q1"/>
+        <result property="CQ1" column="CQ1"/>
+    </resultMap>
+
+    <resultMap type="CentermonitorTMonitoringDataAtmosphere" id="CentermonitorTMonitoringDataAtmosphereResult">
+        <result property="id" column="id"/>
+        <result property="deviceCode" column="device_code"/>
+        <result property="fineParticle" column="fine_particle"/>
+        <result property="suctionParticle" column="suction_particle"/>
+        <result property="sulfurDioxide" column="sulfur_dioxide"/>
+        <result property="nitrogenDioxide" column="nitrogen_dioxide"/>
+        <result property="ozone" column="ozone"/>
+        <result property="carbonMonoxide" column="carbon_monoxide"/>
+        <result property="tvoc" column="tvoc"/>
+        <result property="tsp" column="tsp"/>
+        <result property="temperature" column="temperature"/>
+        <result property="humidity" column="humidity"/>
+        <result property="atmos" column="atmos"/>
+        <result property="windSpeed" column="wind_speed"/>
+        <result property="windDirection" column="wind_direction"/>
+        <result property="batteryVoltage" column="battery_voltage"/>
+        <result property="signalStrength" column="signal_strength"/>
+        <result property="errorCode" column="error_code"/>
+        <result property="version" column="version"/>
+        <result property="latitude" column="latitude"/>
+        <result property="longitude" column="longitude"/>
+        <result property="illuminance" column="illuminance"/>
+        <result property="createTime" column="create_time"/>
+    </resultMap>
+
+    <resultMap type="CentermonitorTMonitoringDataWaterPressure" id="CentermonitorTMonitoringDataWaterPressureResult">
+        <result property="id" column="id"/>
+        <result property="IMEI" column="IMEI"/>
+        <result property="createTime" column="create_time"/>
+        <result property="thresholdLowEnable" column="threshold_low_enable"/>
+        <result property="thresholdHighEnable" column="threshold_high_enable"/>
+        <result property="signalPower" column="signal_power"/>
+        <result property="hydraulicValue" column="hydraulic_value"/>
+        <result property="hydraulicThresholdMin" column="hydraulic_threshold_min"/>
+        <result property="hydraulicThresholdMax" column="hydraulic_threshold_max"/>
+        <result property="heartbeatTime" column="heartbeat_time"/>
+        <result property="batteryVoltage" column="battery_voltage"/>
+        <result property="batteryValue" column="battery_value"/>
+    </resultMap>
+
+    <resultMap type="CentermonitorTMonitoringDataInsectPests" id="CentermonitorTMonitoringDataInsectPestsResult">
+        <result property="id" column="id"/>
+        <result property="createTime" column="create_time"/>
+        <result property="downloadUrl" column="download_url"/>
+        <result property="downloadUrlCompress" column="download_url_compress"/>
+        <result property="taggingImgUrl" column="tagging_img_url"/>
+        <result property="taggingImgUrlCompress" column="tagging_img_url_compress"/>
+        <result property="deviceNumber" column="device_number"/>
+        <result property="newTime" column="new_time"/>
+        <result property="results" column="results"/>
+        <result property="newCount" column="new_count"/>
+        <result property="typeCount" column="type_count"/>
+        <result property="oldCount" column="old_count"/>
+        <result property="oldTime" column="old_time"/>
+        <result property="oldResults" column="old_results"/>
+        <result property="oldTypeCount" column="old_type_count"/>
+        <result property="oldDownloadUrl" column="old_download_url"/>
+        <result property="oldTaggingImgUrl" column="old_tagging_img_url"/>
+        <result property="oldDownloadUrlCompress" column="old_download_url_compress"/>
+        <result property="oldTaggingImgUrlCompress" column="old_tagging_img_url_compress"/>
+    </resultMap>
+
+    <sql id="selectCentermonitorTMonitoringDeviceVo">
+        SELECT
+            id,
+            device_name,
+            brand,
+            device_code,
+            longitude,
+            latitude,
+            dept_id,
+            dept_name,
+            working_status,
+            device_type,
+            warn_line,
+            remark,
+            address,
+            open_warn,
+            charger,
+            charger_tel
+        FROM
+            centermonitor_t_monitoring_device m
+    </sql>
+
+    <select id="getDevideCodeMapByTypes" resultType="java.util.HashMap">
+        select
+        device_code,
+        device_type
+        from centermonitor_t_monitoring_device
+        where device_type in
+        <foreach collection="array" open="(" separator="," close=")" index="index" item="item">
+            #{item}
+        </foreach>
+    </select>
+
+
+    <select id="selectAtmosphereAVGData" parameterType="String"
+            resultMap="CentermonitorTMonitoringDataAtmosphereResult">
+        SELECT
+            ROUND(AVG(fine_particle), 2) fine_particle,
+            ROUND(AVG(suction_particle), 2) suction_particle
+        FROM
+            centermonitor_t_monitoring_data_atmosphere
+        WHERE
+            device_code = '${deviceCode}'
+          AND create_time >= '${startTime}'
+          AND create_time &lt;= '${endTime}'
+    </select>
+
+    <select id="selectInsectPestsNewDeviceData" parameterType="CentermonitorTMonitoringDataInsectPests"
+            resultMap="CentermonitorTMonitoringDataInsectPestsResult">
+        select new_time  from centermonitor_t_monitoring_data_insect_pests
+        where device_number = #{deviceNumber} order by new_time desc limit 1
+    </select>
+
+    <select id="selectSoilMoistureNewDeviceData" parameterType="CentermonitorTMonitoringDataSoilMoisture"
+            resultMap="CentermonitorTMonitoringDataSoilMoistureResult">
+        select create_time  from centermonitor_t_monitoring_data_soil_moisture
+        where device_code = #{deviceCode} order by create_time desc limit 1
+    </select>
+
+    <select id="selectAtmosphereNewDeviceData" parameterType="CentermonitorTMonitoringDataAtmosphere"
+            resultMap="CentermonitorTMonitoringDataAtmosphereResult">
+        select create_time  from centermonitor_t_monitoring_data_atmosphere
+        where device_code = #{deviceCode} order by create_time desc limit 1
+    </select>
+
+    <select id="selectWaterQualityNewDeviceData" parameterType="CentermonitorTMonitoringDataWaterQuality"
+            resultMap="CentermonitorTMonitoringDataWaterQualityResult">
+        select create_time  from centermonitor_t_monitoring_data_water_quality
+        where device_code = #{deviceCode} order by create_time desc limit 1
+    </select>
+
+    <select id="selectCentermonitorTMonitoringDeviceByDeviceCode" parameterType="string"
+            resultMap="CentermonitorTMonitoringDeviceResult">
+        <include refid="selectCentermonitorTMonitoringDeviceVo"/>
+        where device_code = #{deviceCode}
+    </select>
+
+    <delete id="deleteAtmosphereDataByCode" parameterType="String">
+        delete from centermonitor_t_monitoring_data_atmosphere where device_code = '${deviceCode}'
+    </delete>
+
+    <delete id="deleteSoilMoistureDataByCode" parameterType="String">
+        delete from centermonitor_t_monitoring_data_soil_moisture where device_code = '${deviceCode}'
+    </delete>
+
+    <delete id="deleteWaterQualityDataByCode" parameterType="String">
+        delete from centermonitor_t_monitoring_data_water_quality where device_code = '${deviceCode}'
+    </delete>
+
+    <delete id="deleteInsectPestsDataByCode" parameterType="String">
+        delete from centermonitor_t_monitoring_data_insect_pests where device_number = '${deviceCode}'
+    </delete>
+
+    <delete id="deleteWaterPressureDataByCode" parameterType="String">
+        delete from centermonitor_t_monitoring_data_water_pressure where IMEI = '${deviceCode}'
+    </delete>
+
+    <delete id="deleteWaterVelocityDataByCode" parameterType="String">
+        delete from centermonitor_t_monitoring_data_water_velocity where ST = '${deviceCode}'
+    </delete>
+
+    <insert id="saveWaterMonitoringData" parameterType="CentermonitorTMonitoringDataWaterVelocity">
+        insert into centermonitor_t_monitoring_data_water_velocity
+        <trim prefix="(" suffix=")" suffixOverrides=",">
+            <if test="id != null">`id`,</if>
+            <if test="ST != null">`ST`,</if>
+            <if test="FUN != null">`FUN`,</if>
+            <if test="TT != null">`TT`,</if>
+            <if test="VER != null">`VER`,</if>
+            <if test="TM != null">`TM`,</if>
+            <if test="MARK != null">`MARK`,</if>
+            <if test="SERIAL != null">`SERIAL`,</if>
+            <if test="TYPE != null">`TYPE`,</if>
+            <if test="DTEMP != null">`DTEMP`,</if>
+            <if test="BAT != null">`BAT`,</if>
+            <if test="SIGNAL != null">`SIGNAL`,</if>
+            <if test="VT != null">`VT`,</if>
+            <if test="Q1 != null">`Q1`,</if>
+            <if test="Q2 != null">`Q2`,</if>
+            <if test="V1 != null">`V1`,</if>
+            <if test="Z1 != null">`Z1`,</if>
+            <if test="Z != null">`Z`,</if>
+            <if test="Q != null">`Q`,</if>
+            <if test="CQ1 != null">`CQ1`,</if>
+        </trim>
+        <trim prefix="values (" suffix=")" suffixOverrides=",">
+            <if test="id != null">#{id},</if>
+            <if test="ST != null">#{ST},</if>
+            <if test="FUN != null">#{FUN},</if>
+            <if test="TT != null">#{TT},</if>
+            <if test="VER != null">#{VER},</if>
+            <if test="TM != null">#{TM},</if>
+            <if test="MARK != null">#{MARK},</if>
+            <if test="SERIAL != null">#{SERIAL},</if>
+            <if test="TYPE != null">#{TYPE},</if>
+            <if test="DTEMP != null">#{DTEMP},</if>
+            <if test="BAT != null">#{BAT},</if>
+            <if test="SIGNAL != null">#{SIGNAL},</if>
+            <if test="VT != null">#{VT},</if>
+            <if test="Q1 != null">#{Q1},</if>
+            <if test="Q2 != null">#{Q2},</if>
+            <if test="V1 != null">#{V1},</if>
+            <if test="Z1 != null">#{Z1},</if>
+            <if test="Z != null">#{Z},</if>
+            <if test="Q != null">#{Q},</if>
+            <if test="CQ1 != null">#{CQ1},</if>
+        </trim>
+    </insert>
+
+    <insert id="saveDataSoilMoistureMonitoringData" parameterType="CentermonitorTMonitoringDataSoilMoisture">
+        insert into centermonitor_t_monitoring_data_soil_moisture
+        <trim prefix="(" suffix=")" suffixOverrides=",">
+            <if test="id != null">`id`,</if>
+            <if test="deviceCode != null">`device_code`,</if>
+            <if test="createTime != null">`create_time`,</if>
+            <if test="temperature != null">`temperature`,</if>
+            <if test="humidity != null">`humidity`,</if>
+            <if test="ph != null">`ph`,</if>
+            <if test="conductivity != null">`conductivity`,</if>
+            <if test="nitrogen != null">`nitrogen`,</if>
+            <if test="phosphorus != null">`phosphorus`,</if>
+            <if test="potassium != null">`potassium`,</if>
+            <if test="latitude != null">`latitude`,</if>
+            <if test="longitude != null">`longitude`,</if>
+            <if test="signalStrength != null">`signal_strength`,</if>
+            <if test="errorCode != null">`error_code`,</if>
+            <if test="version != null">`version`,</if>
+        </trim>
+        <trim prefix="values (" suffix=")" suffixOverrides=",">
+            <if test="id != null">#{id},</if>
+            <if test="deviceCode != null">#{deviceCode},</if>
+            <if test="createTime != null">#{createTime},</if>
+            <if test="temperature != null">#{temperature},</if>
+            <if test="humidity != null">#{humidity},</if>
+            <if test="ph != null">#{ph},</if>
+            <if test="conductivity != null">#{conductivity},</if>
+            <if test="nitrogen != null">#{nitrogen},</if>
+            <if test="phosphorus != null">#{phosphorus},</if>
+            <if test="potassium != null">#{potassium},</if>
+            <if test="latitude != null">#{latitude},</if>
+            <if test="longitude != null">#{longitude},</if>
+            <if test="signalStrength != null">#{signalStrength},</if>
+            <if test="errorCode != null">#{errorCode},</if>
+            <if test="version != null">#{version},</if>
+        </trim>
+    </insert>
+
+    <insert id="saveWaterPressureDeviceData" parameterType="CentermonitorTMonitoringDataWaterPressure">
+        insert into centermonitor_t_monitoring_data_water_pressure
+        <trim prefix="(" suffix=")" suffixOverrides=",">
+            <if test="id != null">`id`,</if>
+            <if test="IMEI != null">`IMEI`,</if>
+            <if test="createTime != null">`create_time`,</if>
+            <if test="thresholdLowEnable != null">`threshold_low_enable`,</if>
+            <if test="thresholdHighEnable != null">`threshold_high_enable`,</if>
+            <if test="signalPower != null">`signal_power`,</if>
+            <if test="hydraulicValue != null">`hydraulic_value`,</if>
+            <if test="hydraulicThresholdMin != null">`hydraulic_threshold_min`,</if>
+            <if test="hydraulicThresholdMax != null">`hydraulic_threshold_max`,</if>
+            <if test="heartbeatTime != null">`heartbeat_time`,</if>
+            <if test="batteryVoltage != null">`battery_voltage`,</if>
+            <if test="batteryValue != null">`battery_value`,</if>
+        </trim>
+        <trim prefix="values (" suffix=")" suffixOverrides=",">
+            <if test="id != null">#{id},</if>
+            <if test="IMEI != null">#{IMEI},</if>
+            <if test="createTime != null">#{createTime},</if>
+            <if test="thresholdLowEnable != null">#{thresholdLowEnable},</if>
+            <if test="thresholdHighEnable != null">#{thresholdHighEnable},</if>
+            <if test="signalPower != null">#{signalPower},</if>
+            <if test="hydraulicValue != null">#{hydraulicValue},</if>
+            <if test="hydraulicThresholdMin != null">#{hydraulicThresholdMin},</if>
+            <if test="hydraulicThresholdMax != null">#{hydraulicThresholdMax},</if>
+            <if test="heartbeatTime != null">#{heartbeatTime},</if>
+            <if test="batteryVoltage != null">#{batteryVoltage},</if>
+            <if test="batteryValue != null">#{batteryValue},</if>
+        </trim>
+    </insert>
+
+    <insert id="saveDataAtmosphereMonitoringData" parameterType="CentermonitorTMonitoringDataAtmosphere">
+        insert into centermonitor_t_monitoring_data_atmosphere
+        <trim prefix="(" suffix=")" suffixOverrides=",">
+            <if test="id != null">`id`,</if>
+            <if test="deviceCode != null">`device_code`,</if>
+            <if test="createTime != null">`create_time`,</if>
+            <if test="fineParticle != null">`fine_particle`,</if>
+            <if test="suctionParticle != null">`suction_particle`,</if>
+            <if test="sulfurDioxide != null">`sulfur_dioxide`,</if>
+            <if test="nitrogenDioxide != null">`nitrogen_dioxide`,</if>
+            <if test="ozone != null">`ozone`,</if>
+            <if test="carbonMonoxide != null">`carbon_monoxide`,</if>
+            <if test="temperature != null">`temperature`,</if>
+            <if test="humidity != null">`humidity`,</if>
+            <if test="atmos != null">`atmos`,</if>
+            <if test="illuminance != null">`illuminance`,</if>
+            <if test="latitude != null">`latitude`,</if>
+            <if test="longitude != null">`longitude`,</if>
+            <if test="signalStrength != null">`signal_strength`,</if>
+            <if test="errorCode != null">`error_code`,</if>
+            <if test="version != null">`version`,</if>
+        </trim>
+        <trim prefix="values (" suffix=")" suffixOverrides=",">
+            <if test="id != null">#{id},</if>
+            <if test="deviceCode != null">#{deviceCode},</if>
+            <if test="createTime != null">#{createTime},</if>
+            <if test="fineParticle != null">#{fineParticle},</if>
+            <if test="suctionParticle != null">#{suctionParticle},</if>
+            <if test="sulfurDioxide != null">#{sulfurDioxide},</if>
+            <if test="nitrogenDioxide != null">#{nitrogenDioxide},</if>
+            <if test="ozone != null">#{ozone},</if>
+            <if test="carbonMonoxide != null">#{carbonMonoxide},</if>
+            <if test="temperature != null">#{temperature},</if>
+            <if test="humidity != null">#{humidity},</if>
+            <if test="atmos != null">#{atmos},</if>
+            <if test="illuminance != null">#{illuminance},</if>
+            <if test="latitude != null">#{latitude},</if>
+            <if test="longitude != null">#{longitude},</if>
+            <if test="signalStrength != null">#{signalStrength},</if>
+            <if test="errorCode != null">#{errorCode},</if>
+            <if test="version != null">#{version},</if>
+        </trim>
+    </insert>
+
+    <insert id="saveDataWaterQualityMonitoringData" parameterType="CentermonitorTMonitoringDataWaterQuality">
+        insert into centermonitor_t_monitoring_data_water_quality
+        <trim prefix="(" suffix=")" suffixOverrides=",">
+            <if test="id != null">`id`,</if>
+            <if test="deviceCode != null">`device_code`,</if>
+            <if test="createTime != null">`create_time`,</if>
+            <if test="waterPh != null">`water_ph`,</if>
+            <if test="waterTemperature != null">`water_temperature`,</if>
+            <if test="waterQualitySuspension != null">`water_quality_suspension`,</if>
+            <if test="waterTemperatureTwo != null">`water_temperature_two`,</if>
+            <if test="conductivity != null">`conductivity`,</if>
+            <if test="ammoniaNitrogen != null">`ammonia_nitrogen`,</if>
+            <if test="cod != null">`cod`,</if>
+            <if test="latitude != null">`latitude`,</if>
+            <if test="longitude != null">`longitude`,</if>
+            <if test="signalStrength != null">`signal_strength`,</if>
+            <if test="errorCode != null">`error_code`,</if>
+            <if test="version != null">`version`,</if>
+        </trim>
+        <trim prefix="values (" suffix=")" suffixOverrides=",">
+            <if test="id != null">#{id},</if>
+            <if test="deviceCode != null">#{deviceCode},</if>
+            <if test="createTime != null">#{createTime},</if>
+            <if test="waterPh != null">#{waterPh},</if>
+            <if test="waterTemperature != null">#{waterTemperature},</if>
+            <if test="waterQualitySuspension != null">#{waterQualitySuspension},</if>
+            <if test="waterTemperatureTwo != null">#{waterTemperatureTwo},</if>
+            <if test="conductivity != null">#{conductivity},</if>
+            <if test="ammoniaNitrogen != null">#{ammoniaNitrogen},</if>
+            <if test="cod != null">#{cod},</if>
+            <if test="latitude != null">#{latitude},</if>
+            <if test="longitude != null">#{longitude},</if>
+            <if test="signalStrength != null">#{signalStrength},</if>
+            <if test="errorCode != null">#{errorCode},</if>
+            <if test="version != null">#{version},</if>
+        </trim>
+    </insert>
+
+    <insert id="saveInsectPestsDeviceData" parameterType="CentermonitorTMonitoringDataInsectPests">
+        insert into centermonitor_t_monitoring_data_insect_pests
+        <trim prefix="(" suffix=")" suffixOverrides=",">
+            <if test="id != null">`id`,</if>
+            <if test="deviceCode != null">`device_code`,</if>
+            <if test="createTime != null">`create_time`,</if>
+            <if test="downloadUrl != null">`download_url`,</if>
+            <if test="downloadUrlCompress != null">`download_url_compress`,</if>
+            <if test="taggingImgUrl != null">`tagging_img_url`,</if>
+            <if test="taggingImgUrlCompress != null">`tagging_img_url_compress`,</if>
+            <if test="deviceNumber != null">`device_number`,</if>
+            <if test="newTime != null">`new_time`,</if>
+            <if test="results != null">`results`,</if>
+            <if test="newCount != null">`new_count`,</if>
+            <if test="typeCount != null">`type_count`,</if>
+            <if test="oldCount != null">`old_count`,</if>
+            <if test="oldTime != ''">`old_time`,</if>
+            <if test="oldResults != null">`old_results`,</if>
+            <if test="oldTypeCount != null">`old_type_count`,</if>
+            <if test="oldDownloadUrl != null">`old_download_url`,</if>
+            <if test="oldTaggingImgUrl != null">`old_tagging_img_url`,</if>
+            <if test="oldDownloadUrlCompress != null">`old_download_url_compress`,</if>
+            <if test="oldTaggingImgUrlCompress != null">`old_tagging_img_url_compress`,</if>
+        </trim>
+        <trim prefix="values (" suffix=")" suffixOverrides=",">
+            <if test="id != null">#{id},</if>
+            <if test="deviceCode != null">#{deviceCode},</if>
+            <if test="createTime != null">#{createTime},</if>
+            <if test="downloadUrl != null">#{downloadUrl},</if>
+            <if test="downloadUrlCompress != null">#{downloadUrlCompress},</if>
+            <if test="taggingImgUrl != null">#{taggingImgUrl},</if>
+            <if test="taggingImgUrlCompress != null">#{taggingImgUrlCompress},</if>
+            <if test="deviceNumber != null">#{deviceNumber},</if>
+            <if test="newTime != null">#{newTime},</if>
+            <if test="results != null">#{results},</if>
+            <if test="newCount != null">#{newCount},</if>
+            <if test="typeCount != null">#{typeCount},</if>
+            <if test="oldCount != null">#{oldCount},</if>
+            <if test="oldTime != ''">#{oldTime},</if>
+            <if test="oldResults != null">#{oldResults},</if>
+            <if test="oldTypeCount != null">#{oldTypeCount},</if>
+            <if test="oldDownloadUrl != null">#{oldDownloadUrl},</if>
+            <if test="oldTaggingImgUrl != null">#{oldTaggingImgUrl},</if>
+            <if test="oldDownloadUrlCompress != null">#{oldDownloadUrlCompress},</if>
+            <if test="oldTaggingImgUrlCompress != null">#{oldTaggingImgUrlCompress},</if>
+        </trim>
+    </insert>
+
+    <update id="updateDeviceListToJudgeWorkingStatus" parameterType="CentermonitorTMonitoringDevice">
+        update centermonitor_t_monitoring_device
+        <trim prefix="SET" suffixOverrides=",">
+            <if test="workingStatus != null">working_status = #{workingStatus},</if>
+        </trim>
+        where id = #{id}
+    </update>
+
+    <update id="updateDeviceWorkingStatusByDeviceCode" parameterType="CentermonitorTMonitoringDevice">
+        update centermonitor_t_monitoring_device
+        <trim prefix="SET" suffixOverrides=",">
+            <if test="workingStatus != null">working_status = #{workingStatus},</if>
+        </trim>
+        where device_code = #{deviceCode}
+    </update>
+
+    <select id="getDeviceListToJudgeWorkingStatus" resultMap="CentermonitorTMonitoringDeviceResult">
+        <include refid="selectCentermonitorTMonitoringDeviceVo"/>
+        <where>
+            <if test="deviceType != 8 ">and device_type = #{deviceType}</if>
+        </where>
+
+    </select>
+
+    <select id="getDeviceData_1_Atmosphere_ListToJudgeWorkingStatus"
+            resultType="CentermonitorTMonitoringDataAtmosphere">
+        SELECT
+            create_time AS createTime
+        FROM
+            centermonitor_t_monitoring_data_atmosphere
+        WHERE
+            device_code = #{deviceCode}
+        order by createTime desc limit 1
+    </select>
+
+    <select id="getDeviceData_2_Insect_pests_ListToJudgeWorkingStatus"
+            resultType="CentermonitorTMonitoringDataInsectPests">
+        SELECT
+            create_time AS createTime
+        FROM
+            centermonitor_t_monitoring_data_insect_pests
+        where device_number = #{deviceCode}
+        ORDER BY
+            createTime DESC
+            LIMIT 1
+    </select>
+
+    <select id="getDeviceData_3_SoilMoisture_ListToJudgeWorkingStatus"
+            resultType="CentermonitorTMonitoringDataSoilMoisture">
+        SELECT
+            create_time AS createTime
+        FROM
+            centermonitor_t_monitoring_data_soil_moisture
+        WHERE
+            device_code = #{deviceCode}
+        order by createTime desc limit 1
+    </select>
+
+    <select id="getDeviceData_4_WaterPressure_ListToJudgeWorkingStatus"
+            resultType="CentermonitorTMonitoringDataWaterPressure">
+        SELECT
+            create_time AS createTime
+        FROM
+            centermonitor_t_monitoring_data_water_pressure
+        WHERE
+            IMEI = #{deviceCode}
+        order by createTime desc limit 1
+    </select>
+
+    <select id="getDeviceData_5_WaterQuality_ListToJudgeWorkingStatus"
+            resultType="CentermonitorTMonitoringDataWaterQuality">
+        select create_time as createTime
+        from centermonitor_t_monitoring_data_water_quality
+        where device_code = #{deviceCode}
+        order by createTime desc limit 1
+    </select>
+
+    <select id="getDeviceData_6_WaterVelocity_ListToJudgeWorkingStatus"
+            resultType="CentermonitorTMonitoringDataWaterVelocity">
+        select TT as createTime
+        from centermonitor_t_monitoring_data_water_velocity
+        where ST = #{deviceCode}
+        order by createTime desc limit 1
+    </select>
+</mapper>

BIN
target/center-monitor-iot.jar


BIN
target/center-monitor-iot.jar.original


+ 9 - 0
target/classes/banner.txt

@@ -0,0 +1,9 @@
+Spring Boot Version: ${spring-boot.version}
+Spring Application Name: ${spring.application.name}
+
+  __________   ____ |  | _______          ____________   ____   ____   ____   _______/  |_
+
+ /  ___/  _ \ /  _ \|  |/ /\__  \        /  ___/\____ \ /  _ \ /    \_/ __ \ /  ___/\   __\
+ \___ (  <_> |  <_> )    <  / __ \_      \___ \ |  |_> >  <_> )   |  \  ___/ \___ \  |  |
+/____  >____/ \____/|__|_ \(____  /     /____  >|   __/ \____/|___|  /\___  >____  > |__|
+     \/                  \/     \/           \/ |__|               \/     \/     \/

+ 26 - 0
target/classes/bootstrap.yml

@@ -0,0 +1,26 @@
+# Tomcat
+server:
+  port: 3207
+# Spring
+spring:
+  application:
+    # 应用名称
+    name: sooka-sponest-center-monitor-iot
+  profiles:
+    # 环境配置
+    active: dev
+  cloud:
+    nacos:
+      discovery:
+        # 服务注册地址
+        server-addr: www.sooka.onest.com:8848
+#         server-addr: 127.0.0.1:8848
+      config:
+        # 配置中心地址
+        server-addr: www.sooka.onest.com:8848
+#        server-addr: 127.0.0.1:8848
+        # 配置文件格式
+        file-extension: yml
+        # 共享配置
+        shared-configs:
+          - application-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension}

BIN
target/classes/com/sooka/sponest/monitor/SookaMonitorIotApplication.class


BIN
target/classes/com/sooka/sponest/monitor/base/controller/BaseController.class


BIN
target/classes/com/sooka/sponest/monitor/base/domain/BaseBusinessEntity.class


BIN
target/classes/com/sooka/sponest/monitor/base/domain/DataTestVO.class


BIN
target/classes/com/sooka/sponest/monitor/base/service/impl/BaseService.class


BIN
target/classes/com/sooka/sponest/monitor/base/util/database/DynamicDataSource.class


BIN
target/classes/com/sooka/sponest/monitor/base/util/database/DynamicDataSourceAspect.class


BIN
target/classes/com/sooka/sponest/monitor/base/util/database/DynamicDataSourceSwitcher.class


BIN
target/classes/com/sooka/sponest/monitor/base/util/database/GlobalTransactionalRabbitMQ.class


BIN
target/classes/com/sooka/sponest/monitor/base/util/database/MultipleDataSourceConfig.class


BIN
target/classes/com/sooka/sponest/monitor/base/util/database/MyDataSource.class


BIN
target/classes/com/sooka/sponest/monitor/camera/domain/CameraCodeAndNameVO.class


BIN
target/classes/com/sooka/sponest/monitor/device/controller/CentermonitorTMonitoringDeviceController.class


BIN
target/classes/com/sooka/sponest/monitor/device/domain/CentermonitorTMonitoringDataAtmosphere.class


BIN
target/classes/com/sooka/sponest/monitor/device/domain/CentermonitorTMonitoringDataInsectPests.class


BIN
target/classes/com/sooka/sponest/monitor/device/domain/CentermonitorTMonitoringDataSoilMoisture.class


BIN
target/classes/com/sooka/sponest/monitor/device/domain/CentermonitorTMonitoringDataWaterPressure.class


BIN
target/classes/com/sooka/sponest/monitor/device/domain/CentermonitorTMonitoringDataWaterQuality.class


BIN
target/classes/com/sooka/sponest/monitor/device/domain/CentermonitorTMonitoringDataWaterVelocity.class


BIN
target/classes/com/sooka/sponest/monitor/device/domain/CentermonitorTMonitoringDevice.class


BIN
target/classes/com/sooka/sponest/monitor/device/domain/CentermonitorTMonitoringThresholdAtmosphere.class


BIN
target/classes/com/sooka/sponest/monitor/device/domain/CentermonitorTMonitoringThresholdSoilMoisture.class


BIN
target/classes/com/sooka/sponest/monitor/device/domain/CentermonitorTMonitoringThresholdWaterQuality.class


BIN
target/classes/com/sooka/sponest/monitor/device/domain/CentermonitorTMonitoringThresholdWaterVelocity.class


BIN
target/classes/com/sooka/sponest/monitor/device/domain/MonitorBaseEntity.class


BIN
target/classes/com/sooka/sponest/monitor/device/domain/SensorEventVo.class


+ 0 - 0
target/classes/com/sooka/sponest/monitor/device/mapper/CentermonitorTMonitoringDeviceAtmosphereThresholdMapper.class


Kaikkia tiedostoja ei voida näyttää, sillä liian monta tiedostoa muuttui tässä diffissä