bihuisong 3 ماه پیش
کامیت
49bf70eb69
100فایلهای تغییر یافته به همراه3345 افزوده شده و 0 حذف شده
  1. 0 0
      .idea/.gitignore
  2. 13 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. 219 0
      .idea/workspace.xml
  9. 150 0
      pom.xml
  10. 39 0
      src/main/java/com/sooka/sponest/monitor/SookaMonitorDahuaLogApplication.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. 284 0
      src/main/java/com/sooka/sponest/monitor/dahua/controller/DahuaOperateLogBlackTask.java
  22. 259 0
      src/main/java/com/sooka/sponest/monitor/dahua/controller/DahuaOperateLogWhiteTask.java
  23. 411 0
      src/main/java/com/sooka/sponest/monitor/dahua/domain/CenternonitorTDahuaOperateLog.java
  24. 68 0
      src/main/java/com/sooka/sponest/monitor/dahua/domain/CenternonitorTDahuaOperateLogUrl.java
  25. 67 0
      src/main/java/com/sooka/sponest/monitor/dahua/login/Login.java
  26. 36 0
      src/main/java/com/sooka/sponest/monitor/dahua/login/bean/LoginFirst.java
  27. 102 0
      src/main/java/com/sooka/sponest/monitor/dahua/login/bean/LoginSecond.java
  28. 21 0
      src/main/java/com/sooka/sponest/monitor/dahua/mapper/CenternonitorTDahuaOperateLogMapper.java
  29. 21 0
      src/main/java/com/sooka/sponest/monitor/dahua/mapper/CenternonitorTDahuaOperateLogUrlMapper.java
  30. 20 0
      src/main/java/com/sooka/sponest/monitor/dahua/service/ICenternonitorTDahuaOperateLogService.java
  31. 34 0
      src/main/java/com/sooka/sponest/monitor/dahua/service/impl/CenternonitorTDahuaOperateLogServiceImpl.java
  32. 96 0
      src/main/java/com/sooka/sponest/monitor/dahua/utils/DSSUtils.java
  33. 26 0
      src/main/java/com/sooka/sponest/monitor/dahua/utils/HttpEnum.java
  34. 195 0
      src/main/java/com/sooka/sponest/monitor/dahua/utils/HttpTestUtils.java
  35. 25 0
      src/main/java/com/sooka/sponest/monitor/dahua/utils/ImgUtils.java
  36. 70 0
      src/main/java/com/sooka/sponest/monitor/dahua/utils/RestRedirectStrategy.java
  37. 105 0
      src/main/java/com/sooka/sponest/monitor/dept/domain/SysDept.java
  38. 22 0
      src/main/java/com/sooka/sponest/monitor/dept/mapper/SysDeptMapper.java
  39. 17 0
      src/main/java/com/sooka/sponest/monitor/dept/service/ISysDeptService.java
  40. 30 0
      src/main/java/com/sooka/sponest/monitor/dept/service/impl/SysDeptServiceImpl.java
  41. 22 0
      src/main/java/com/sooka/sponest/monitor/remoteapi/EnableSookaFeignClients.java
  42. 4 0
      src/main/java/com/sooka/sponest/monitor/remoteapi/RemoveApiBaseService.java
  43. 39 0
      src/main/java/com/sooka/sponest/monitor/remoteapi/fallback/system/RemoteSystemBaseServiceFallbackFactory.java
  44. 51 0
      src/main/java/com/sooka/sponest/monitor/remoteapi/service/ModulesServiceNameContants.java
  45. 22 0
      src/main/java/com/sooka/sponest/monitor/remoteapi/service/system/RemoteService.java
  46. 78 0
      src/main/java/com/sooka/sponest/monitor/util/BeanUtil.java
  47. 9 0
      src/main/resources/banner.txt
  48. 26 0
      src/main/resources/bootstrap.yml
  49. 18 0
      src/main/resources/mapper/monitor/dahua/CenternonitorTDahuaOperateLogMapper.xml
  50. 24 0
      src/main/resources/mapper/monitor/dahua/CenternonitorTDahuaOperateLogUrlMapper.xml
  51. 31 0
      src/main/resources/mapper/monitor/dept/SysDeptMapper.xml
  52. BIN
      target/center-monitor-quartz.jar
  53. BIN
      target/center-monitor-quartz.jar.original
  54. 9 0
      target/classes/banner.txt
  55. 26 0
      target/classes/bootstrap.yml
  56. BIN
      target/classes/com/sooka/sponest/monitor/SookaMonitorDahuaLogApplication.class
  57. BIN
      target/classes/com/sooka/sponest/monitor/base/controller/BaseController.class
  58. BIN
      target/classes/com/sooka/sponest/monitor/base/domain/BaseBusinessEntity.class
  59. BIN
      target/classes/com/sooka/sponest/monitor/base/domain/DataTestVO.class
  60. BIN
      target/classes/com/sooka/sponest/monitor/base/service/impl/BaseService.class
  61. BIN
      target/classes/com/sooka/sponest/monitor/base/util/database/DynamicDataSource.class
  62. BIN
      target/classes/com/sooka/sponest/monitor/base/util/database/DynamicDataSourceAspect.class
  63. BIN
      target/classes/com/sooka/sponest/monitor/base/util/database/DynamicDataSourceSwitcher.class
  64. BIN
      target/classes/com/sooka/sponest/monitor/base/util/database/GlobalTransactionalRabbitMQ.class
  65. BIN
      target/classes/com/sooka/sponest/monitor/base/util/database/MultipleDataSourceConfig.class
  66. BIN
      target/classes/com/sooka/sponest/monitor/base/util/database/MyDataSource.class
  67. BIN
      target/classes/com/sooka/sponest/monitor/dahua/controller/DahuaOperateLogBlackTask.class
  68. BIN
      target/classes/com/sooka/sponest/monitor/dahua/controller/DahuaOperateLogWhiteTask.class
  69. BIN
      target/classes/com/sooka/sponest/monitor/dahua/domain/CenternonitorTDahuaOperateLog.class
  70. BIN
      target/classes/com/sooka/sponest/monitor/dahua/domain/CenternonitorTDahuaOperateLogUrl.class
  71. BIN
      target/classes/com/sooka/sponest/monitor/dahua/login/Login.class
  72. BIN
      target/classes/com/sooka/sponest/monitor/dahua/login/bean/LoginFirst.class
  73. BIN
      target/classes/com/sooka/sponest/monitor/dahua/login/bean/LoginSecond.class
  74. BIN
      target/classes/com/sooka/sponest/monitor/dahua/mapper/CenternonitorTDahuaOperateLogMapper.class
  75. BIN
      target/classes/com/sooka/sponest/monitor/dahua/mapper/CenternonitorTDahuaOperateLogUrlMapper.class
  76. BIN
      target/classes/com/sooka/sponest/monitor/dahua/service/ICenternonitorTDahuaOperateLogService.class
  77. BIN
      target/classes/com/sooka/sponest/monitor/dahua/service/impl/CenternonitorTDahuaOperateLogServiceImpl.class
  78. BIN
      target/classes/com/sooka/sponest/monitor/dahua/utils/DSSUtils.class
  79. BIN
      target/classes/com/sooka/sponest/monitor/dahua/utils/HttpEnum.class
  80. BIN
      target/classes/com/sooka/sponest/monitor/dahua/utils/HttpTestUtils$1.class
  81. BIN
      target/classes/com/sooka/sponest/monitor/dahua/utils/HttpTestUtils$2.class
  82. BIN
      target/classes/com/sooka/sponest/monitor/dahua/utils/HttpTestUtils.class
  83. BIN
      target/classes/com/sooka/sponest/monitor/dahua/utils/ImgUtils.class
  84. BIN
      target/classes/com/sooka/sponest/monitor/dahua/utils/RestRedirectStrategy.class
  85. BIN
      target/classes/com/sooka/sponest/monitor/dahua/utils/bean.class
  86. BIN
      target/classes/com/sooka/sponest/monitor/dept/domain/SysDept.class
  87. BIN
      target/classes/com/sooka/sponest/monitor/dept/mapper/SysDeptMapper.class
  88. BIN
      target/classes/com/sooka/sponest/monitor/dept/service/ISysDeptService.class
  89. BIN
      target/classes/com/sooka/sponest/monitor/dept/service/impl/SysDeptServiceImpl.class
  90. BIN
      target/classes/com/sooka/sponest/monitor/remoteapi/EnableSookaFeignClients.class
  91. BIN
      target/classes/com/sooka/sponest/monitor/remoteapi/RemoveApiBaseService.class
  92. BIN
      target/classes/com/sooka/sponest/monitor/remoteapi/fallback/system/RemoteSystemBaseServiceFallbackFactory$1.class
  93. BIN
      target/classes/com/sooka/sponest/monitor/remoteapi/fallback/system/RemoteSystemBaseServiceFallbackFactory.class
  94. BIN
      target/classes/com/sooka/sponest/monitor/remoteapi/service/ModulesServiceNameContants.class
  95. BIN
      target/classes/com/sooka/sponest/monitor/remoteapi/service/system/RemoteService.class
  96. BIN
      target/classes/com/sooka/sponest/monitor/util/BeanUtil.class
  97. 18 0
      target/classes/mapper/monitor/dahua/CenternonitorTDahuaOperateLogMapper.xml
  98. 24 0
      target/classes/mapper/monitor/dahua/CenternonitorTDahuaOperateLogUrlMapper.xml
  99. 31 0
      target/classes/mapper/monitor/dept/SysDeptMapper.xml
  100. 0 0
      target/maven-archiver/pom.properties

+ 0 - 0
.idea/.gitignore


+ 13 - 0
.idea/compiler.xml

@@ -0,0 +1,13 @@
+<?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-dahuaLog" />
+      </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>

+ 219 - 0
.idea/workspace.xml

@@ -0,0 +1,219 @@
+<?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">{
+  &quot;keyToString&quot;: {
+    &quot;Maven.center-monitor-quartz [clean].executor&quot;: &quot;Run&quot;,
+    &quot;Maven.center-monitor-quartz [package].executor&quot;: &quot;Run&quot;,
+    &quot;Maven.center-monitor-quartz [validate].executor&quot;: &quot;Run&quot;,
+    &quot;RequestMappingsPanelOrder0&quot;: &quot;0&quot;,
+    &quot;RequestMappingsPanelOrder1&quot;: &quot;1&quot;,
+    &quot;RequestMappingsPanelWidth0&quot;: &quot;75&quot;,
+    &quot;RequestMappingsPanelWidth1&quot;: &quot;75&quot;,
+    &quot;RunOnceActivity.ShowReadmeOnStart&quot;: &quot;true&quot;,
+    &quot;Spring Boot.SookaMonitorDahuaLogApplication.executor&quot;: &quot;Debug&quot;,
+    &quot;Spring Boot.SookaMonitorQuartzApplication.executor&quot;: &quot;Debug&quot;,
+    &quot;git-widget-placeholder&quot;: &quot;master&quot;,
+    &quot;kotlin-language-version-configured&quot;: &quot;true&quot;,
+    &quot;last_opened_file_path&quot;: &quot;D:/new_service/center-monitor-dahuaLog&quot;,
+    &quot;node.js.detected.package.eslint&quot;: &quot;true&quot;,
+    &quot;node.js.detected.package.tslint&quot;: &quot;true&quot;,
+    &quot;node.js.selected.package.eslint&quot;: &quot;(autodetect)&quot;,
+    &quot;node.js.selected.package.tslint&quot;: &quot;(autodetect)&quot;,
+    &quot;nodejs_package_manager_path&quot;: &quot;npm&quot;,
+    &quot;project.structure.last.edited&quot;: &quot;项目&quot;,
+    &quot;project.structure.proportion&quot;: &quot;0.0&quot;,
+    &quot;project.structure.side.proportion&quot;: &quot;0.2551724&quot;,
+    &quot;settings.editor.selected.configurable&quot;: &quot;preferences.pluginManager&quot;,
+    &quot;vue.rearranger.settings.migration&quot;: &quot;true&quot;,
+    &quot;应用程序.DahuaOperateLogWhiteTask.executor&quot;: &quot;Debug&quot;
+  }
+}</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-dahuaLog\src\main\resources\mapper\monitor\dept" />
+      <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.dept.domain" />
+      <recent name="com.sooka.sponest.monitor.dept.mapper" />
+      <recent name="com.sooka.sponest.monitor.dept.service.impl" />
+      <recent name="com.sooka.sponest.monitor.dept.service" />
+      <recent name="com.sooka.sponest.monitor.device.mapper" />
+    </key>
+  </component>
+  <component name="RunManager">
+    <configuration name="SookaMonitorDahuaLogApplication" type="SpringBootApplicationConfigurationType" factoryName="Spring Boot" nameIsGenerated="true">
+      <module name="center-monitor-dahuaLog" />
+      <option name="SPRING_BOOT_MAIN_CLASS" value="com.sooka.sponest.monitor.SookaMonitorDahuaLogApplication" />
+      <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="1739844559272" duration="2555000" />
+      <workItem from="1739847828779" duration="29000" />
+      <workItem from="1739863720198" duration="175000" />
+      <workItem from="1739864060107" duration="4000" />
+    </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-dahuaLog</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/SookaMonitorDahuaLogApplication.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 SookaMonitorDahuaLogApplication {
+    public static void main(String[] args) {
+        SpringApplication.run(SookaMonitorDahuaLogApplication.class, args);
+        System.out.println("(♥◠‿◠)ノ゙  首佳科技 一体化 摄像头操作日志对接服务 启动成功   ლ(´ڡ`ლ)゙  \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 "";
+}

+ 284 - 0
src/main/java/com/sooka/sponest/monitor/dahua/controller/DahuaOperateLogBlackTask.java

@@ -0,0 +1,284 @@
+package com.sooka.sponest.monitor.dahua.controller;
+
+
+import com.alibaba.fastjson.JSONObject;
+import com.ruoyi.common.core.domain.R;
+import com.sooka.sponest.monitor.dahua.domain.CenternonitorTDahuaOperateLog;
+import com.sooka.sponest.monitor.dahua.domain.CenternonitorTDahuaOperateLogUrl;
+import com.sooka.sponest.monitor.dahua.mapper.CenternonitorTDahuaOperateLogUrlMapper;
+import com.sooka.sponest.monitor.dahua.service.ICenternonitorTDahuaOperateLogService;
+import com.sooka.sponest.monitor.dahua.utils.HttpTestUtils;
+import com.sooka.sponest.monitor.dept.domain.SysDept;
+import com.sooka.sponest.monitor.dept.service.ISysDeptService;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.collections4.CollectionUtils;
+import org.apache.commons.lang3.ObjectUtils;
+import org.apache.http.HttpEntity;
+import org.apache.http.HttpResponse;
+import org.apache.http.client.HttpClient;
+import org.apache.http.client.methods.HttpPost;
+import org.apache.http.conn.ssl.NoopHostnameVerifier;
+import org.apache.http.conn.ssl.TrustSelfSignedStrategy;
+import org.apache.http.entity.ContentType;
+import org.apache.http.entity.StringEntity;
+import org.apache.http.impl.client.HttpClients;
+import org.apache.http.impl.client.LaxRedirectStrategy;
+import org.apache.http.ssl.SSLContextBuilder;
+import org.apache.http.util.EntityUtils;
+import org.springframework.stereotype.Component;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.annotation.Resource;
+import javax.net.ssl.HostnameVerifier;
+import javax.net.ssl.SSLContext;
+import java.text.SimpleDateFormat;
+import java.util.*;
+
+import static org.springframework.web.bind.annotation.RequestMethod.POST;
+
+
+/**
+ * 对接大华云台日志定时任务Controller
+ * <p>
+ * "0": "登录",
+ * "1": "查询",
+ * "2": "新增",
+ * "3": "修改",
+ * "4": "删除",
+ * "5": "布控",
+ * "6": "撤控",
+ * "7": "控制",
+ * "8": "注销",
+ * "9": "审核",
+ * "10": "导入",
+ * "11": "导出",
+ * "14": "录像回放",
+ * "15": "录像下载",
+ * "16": "录像查询",
+ * "17": "本地录像",
+ * "18": "语音对讲",
+ * "19": "锁定录像",
+ * "20": "解锁录像",
+ * "21": "下载",
+ * "22": "远程录像",
+ * "90": "开启",
+ * "91": "停止",
+ * "92": "查看",
+ * "93": "处理",
+ * "94": "锁定",
+ * "95": "解锁",
+ * "96": "暂停",
+ * "97": "分享"
+ *
+ * @author ruoyi
+ * @date 2023-12-09
+ */
+@Slf4j
+@Component
+@RestController
+@RequestMapping("/dahuaBlackOperateLog")
+public class DahuaOperateLogBlackTask {
+
+    @Resource
+    private ICenternonitorTDahuaOperateLogService centernonitorTDahuaOperateLogService;
+    @Resource
+    private CenternonitorTDahuaOperateLogUrlMapper centernonitorTDahuaOperateLogUrlMapper;
+    @Resource
+    private ISysDeptService sysDeptService;
+    private final List<String> operateTypeBlackList = Arrays.asList("0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "14", "15", "16", "17", "18", "19", "20", "21", "22", "90", "91", "92", "93", "94", "95", "96", "97");
+
+
+    @Value("${sooka.dahua_interface_server.loginIp}")
+    private String loginIp;
+    @Value("${sooka.dahua_interface_server.loginPort}")
+    private String loginPort;
+    @Value("${sooka.dahua_interface_server.userName}")
+    private String userName;
+    @Value("${sooka.dahua_interface_server.userPwd}")
+    private String userPwd;
+    private final String url = "/SlsService/opreationlog/list";
+//    private String loginIp = "10.53.0.35";
+//    private String loginPort = "7901";
+//    private String userName = "system";
+//    private String userPwd = "Admin123";
+
+    @RequestMapping(value = "/configureBlackTasks", method = POST)
+    public void configureBlackTasks() {
+        long startTimeMillis = System.currentTimeMillis(); // 记录开始时间
+        SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd'T'HHmmss'Z'");
+        Calendar calendar = Calendar.getInstance();
+        Date now = new Date();
+        //设置入参开始时间
+        calendar.setTime(now);
+        // 获取当前时间前一天的日期
+        calendar.add(Calendar.DAY_OF_MONTH, -1);
+        // 设置时间为16:00:00
+        calendar.set(Calendar.HOUR_OF_DAY, 16);
+        calendar.set(Calendar.MINUTE, 0);
+        calendar.set(Calendar.SECOND, 0);
+        Date startTime = calendar.getTime();
+        //获取当前时间的15:59:59
+        calendar.setTime(now);
+        calendar.set(Calendar.HOUR_OF_DAY, 15);
+        calendar.set(Calendar.MINUTE, 59);
+        calendar.set(Calendar.SECOND, 59);
+        Date endTime = calendar.getTime();
+
+        try {
+            R<?> result = HttpTestUtils.getToken(loginIp, Integer.parseInt(loginPort), userName, userPwd);
+            if (result.getCode() != 200) {
+                log.error("调用获取token接口报错:{}", result);
+            }
+            String token = result.getData().toString();
+            log.error("获取token:{}", token);
+            extractedBlack(token, sdf.format(startTime), sdf.format(endTime));
+            long endTimeMillis = System.currentTimeMillis(); // 记录结束时间
+            // 计算耗时
+            long duration = endTimeMillis - startTimeMillis;
+            log.info("configureBlackTasks调用获取对接大华云台日志定时任务接口耗时:{} 毫秒", duration);
+        } catch (Exception e) {
+            log.error("configureBlackTasks background error:", e);
+        }
+    }
+
+    public void extractedBlack(String token, String startTime, String endTime) throws Exception {
+        //取消证书认证
+        SSLContext sslContext = SSLContextBuilder.create()
+                .loadTrustMaterial(new TrustSelfSignedStrategy())
+                .build();
+        HostnameVerifier hostnameVerifier = NoopHostnameVerifier.INSTANCE;
+        HttpClient httpClient = HttpClients.custom()
+                .setSSLContext(sslContext)
+                .setSSLHostnameVerifier(hostnameVerifier)
+                .setRedirectStrategy(new LaxRedirectStrategy())
+                .build();
+        log.info("调用操作日志查询接口开始");
+        long startTimeDate = System.currentTimeMillis();
+        log.info("开始时间:{}", startTimeDate);
+        //3.调用操作日志查询接口
+        String proto = loginPort.equals("8320") ? "https://" : "http://";
+        HttpPost httpPost = new HttpPost(proto + loginIp + ":" + loginPort + url);
+        httpPost.setHeader("X-Subject-Token", token);
+        httpPost.setHeader("content-type", "application/json");
+
+        for (String str : operateTypeBlackList) {
+            extracted(startTime, endTime, str, httpPost, httpClient);
+        }
+        log.info("调用操作日志查询接口结束");
+        log.info("结束时间:{}", System.currentTimeMillis() - startTimeDate);
+    }
+
+    private void extracted(String startTime, String endTime, String str, HttpPost httpPost, HttpClient httpClient) throws Exception {
+        //第三次请求入参入参
+        Integer pageNo = 1;
+        Integer nextPage = 1;
+        for (int i = 1; i <= pageNo; i++) {
+            if (nextPage > 0) {
+                //循环赋值第几页
+                String requestBody = "{\n" +
+                        "\t\"condition\": {\n" +
+                        "\t\t\"startTime\": \"" + startTime + "\",\n" +
+                        "\t\t\"endTime\": \"" + endTime + "\",\n" +
+                        "\t\t\"type\": 2,\n" +
+                        "\t\t\"operateNames\": [],\n" +
+                        "\t\t\"operateType\": \"" + str + "\",\n" +
+                        "\t\t\"deptCode\": \"\",\n" +
+                        "\t\t\"userName\": \"\",\n" +
+                        "\t\t\"address\": \"\",\n" +
+                        "\t\t\"eventDetail\": \"\"\n" +
+                        "\t},\n" +
+                        "\t\"order\": [\n" +
+                        "\t\t{\n" +
+                        "\t\t\t\"orderBy\": \"operateTime\",\n" +
+                        "\t\t\t\"order\": \"desc\"\n" +
+                        "\t\t}\n" +
+                        "\t],\n" +
+                        "\t\"page\": \"" + i + "\",\n" +
+                        "\t\"pageSize\": 512\n" +
+                        "}";
+                log.info("请求参数operateType:{}", str);
+                StringEntity requestEntity = new StringEntity(requestBody, ContentType.APPLICATION_JSON);
+                httpPost.setEntity(requestEntity);
+                HttpResponse response = httpClient.execute(httpPost);
+                HttpEntity responseEntity = response.getEntity();
+                if (responseEntity != null) {
+                    List<CenternonitorTDahuaOperateLogUrl> centernonitorTDahuaOperateLogUrlList = new ArrayList<>();
+                    String responseBody = EntityUtils.toString(responseEntity);
+//                    log.info("configureBlackTasks=======>responseBody:{}", responseBody);
+                    JSONObject jsonObject = JSONObject.parseObject(responseBody);
+                    log.info("configureBlackTasks=======>jsonObject.totalCount():{}", jsonObject.get("totalCount"));
+                    if (ObjectUtils.isNotEmpty(jsonObject.get("code")) && jsonObject.get("code").toString().equals("402")) {
+                        //如果token过期重新走业务逻辑
+                        getTokenBlack();
+                    } else {
+                        pageNo = (Integer) jsonObject.get("totalCount") / 512 + 1;
+                        nextPage = (Integer) jsonObject.get("nextPage");
+                        List<CenternonitorTDahuaOperateLog> list = JSONObject.parseArray(jsonObject.get("results").toString(), CenternonitorTDahuaOperateLog.class);
+                        if (CollectionUtils.isNotEmpty(list)) {
+                            for (CenternonitorTDahuaOperateLog item : list) {
+                                SysDept selectDo = new SysDept();
+                                selectDo.setUserName(item.getUserName());
+                                SysDept sysDept = sysDeptService.findDeptIdByUserName(selectDo);
+                                if (ObjectUtils.isNotEmpty(sysDept)) {
+                                    item.setDeptId(sysDept.getDeptId());
+                                    item.setDeptName(sysDept.getDeptName());
+                                    item.setAncestors(sysDept.getAncestors());
+                                    item.setParentId(sysDept.getParentId());
+                                }
+                            }
+                            int count = centernonitorTDahuaOperateLogService.insertBatch(list);
+                            list.stream().forEach(item -> {
+                                if (CollectionUtils.isNotEmpty(item.getUrl())) {
+                                    item.getUrl().stream().forEach(var -> {
+                                        CenternonitorTDahuaOperateLogUrl centernonitorTDahuaOperateLogUrl = new CenternonitorTDahuaOperateLogUrl();
+                                        centernonitorTDahuaOperateLogUrl.setOperateId(item.getId());
+                                        centernonitorTDahuaOperateLogUrl.setUrl(var);
+                                        centernonitorTDahuaOperateLogUrlList.add(centernonitorTDahuaOperateLogUrl);
+                                    });
+                                }
+                            });
+                            if (CollectionUtils.isNotEmpty(centernonitorTDahuaOperateLogUrlList)) {
+                                centernonitorTDahuaOperateLogUrlMapper.insertBatch(centernonitorTDahuaOperateLogUrlList);
+                            }
+                        }
+                    }
+                }
+            }
+        }
+    }
+
+    public R<?> getTokenBlack() {
+        SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd'T'HHmmss'Z'");
+        Calendar calendar = Calendar.getInstance();
+        Date now = new Date();
+        //设置入参开始时间
+        calendar.setTime(now);
+        // 获取当前时间前一天的日期
+        calendar.add(Calendar.DAY_OF_MONTH, -1);
+        // 设置时间为16:00:00
+        calendar.set(Calendar.HOUR_OF_DAY, 16);
+        calendar.set(Calendar.MINUTE, 0);
+        calendar.set(Calendar.SECOND, 0);
+        Date startTime = calendar.getTime();
+        //获取当前时间的15:59:59
+        calendar.setTime(now);
+        calendar.set(Calendar.HOUR_OF_DAY, 15);
+        calendar.set(Calendar.MINUTE, 59);
+        calendar.set(Calendar.SECOND, 59);
+        Date endTime = calendar.getTime();
+        try {
+            R<?> result = HttpTestUtils.getToken(loginIp, Integer.parseInt(loginPort), userName, userPwd);
+            if (result.getCode() != 200) {
+                return R.fail(result.getMsg());
+            }
+            String token = result.getData().toString();
+            extractedBlack(token, sdf.format(startTime), sdf.format(endTime));
+            return R.ok();
+        } catch (Exception e) {
+            return R.fail("调用操作日志接口报错");
+        }
+    }
+
+}

+ 259 - 0
src/main/java/com/sooka/sponest/monitor/dahua/controller/DahuaOperateLogWhiteTask.java

@@ -0,0 +1,259 @@
+package com.sooka.sponest.monitor.dahua.controller;
+
+import com.alibaba.fastjson.JSONObject;
+import com.ruoyi.common.core.domain.R;
+import com.sooka.sponest.monitor.dept.domain.SysDept;
+import com.sooka.sponest.monitor.dahua.domain.CenternonitorTDahuaOperateLog;
+import com.sooka.sponest.monitor.dahua.domain.CenternonitorTDahuaOperateLogUrl;
+import com.sooka.sponest.monitor.dahua.mapper.CenternonitorTDahuaOperateLogUrlMapper;
+import com.sooka.sponest.monitor.dahua.service.ICenternonitorTDahuaOperateLogService;
+import com.sooka.sponest.monitor.dahua.utils.HttpTestUtils;
+import com.sooka.sponest.monitor.dept.service.ISysDeptService;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.collections4.CollectionUtils;
+import org.apache.commons.lang3.ObjectUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.apache.http.HttpEntity;
+import org.apache.http.HttpResponse;
+import org.apache.http.client.HttpClient;
+import org.apache.http.client.methods.HttpPost;
+import org.apache.http.conn.ssl.NoopHostnameVerifier;
+import org.apache.http.conn.ssl.TrustSelfSignedStrategy;
+import org.apache.http.entity.ContentType;
+import org.apache.http.entity.StringEntity;
+import org.apache.http.impl.client.HttpClients;
+import org.apache.http.impl.client.LaxRedirectStrategy;
+import org.apache.http.ssl.SSLContextBuilder;
+import org.apache.http.util.EntityUtils;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Component;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.annotation.Resource;
+import javax.net.ssl.HostnameVerifier;
+import javax.net.ssl.SSLContext;
+import java.text.SimpleDateFormat;
+import java.util.*;
+
+import static org.springframework.web.bind.annotation.RequestMethod.POST;
+
+/**
+ * 对接大华云台日志定时任务Controller
+ * <p>
+ * "12": "视频",
+ * "13": "云台控制",
+ *
+ * @author ruoyi
+ * @date 2023-12-09
+ */
+@Slf4j
+@Component
+@RestController
+@RequestMapping("/dahuaWhiteOperateLog")
+public class DahuaOperateLogWhiteTask {
+
+    @Resource
+    private ICenternonitorTDahuaOperateLogService centernonitorTDahuaOperateLogService;
+    @Resource
+    private CenternonitorTDahuaOperateLogUrlMapper centernonitorTDahuaOperateLogUrlMapper;
+    @Resource
+    private ISysDeptService sysDeptService;
+    private final List<String> operateTypeWhiteList = Arrays.asList("12", "13");
+
+
+    @Value("${sooka.dahua_interface_server.loginIp}")
+    private String loginIp;
+    @Value("${sooka.dahua_interface_server.loginPort}")
+    private String loginPort;
+    @Value("${sooka.dahua_interface_server.userName}")
+    private String userName;
+    @Value("${sooka.dahua_interface_server.userPwd}")
+    private String userPwd;
+    private final String url = "/SlsService/opreationlog/list";
+//    private String loginIp = "10.53.0.35";
+//    private String loginPort = "7901";
+//    private String userName = "system";
+//    private String userPwd = "Admin123";
+
+
+    @RequestMapping(value = "/configureWhiteTasks", method = POST)
+    public void configureWhiteTasks() {
+        long startTimeMillis = System.currentTimeMillis(); // 记录开始时间
+        SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd'T'HHmmss'Z'");
+        Calendar calendar = Calendar.getInstance();
+        Date now = new Date();
+        //设置入参开始时间
+        calendar.setTime(now);
+        // 获取当前时间前一天的日期
+        calendar.add(Calendar.DAY_OF_MONTH, -1);
+        // 设置时间为16:00:00
+        calendar.set(Calendar.HOUR_OF_DAY, 16);
+        calendar.set(Calendar.MINUTE, 0);
+        calendar.set(Calendar.SECOND, 0);
+        Date startTime = calendar.getTime();
+        //获取当前时间的15:59:59
+        calendar.setTime(now);
+        calendar.set(Calendar.HOUR_OF_DAY, 15);
+        calendar.set(Calendar.MINUTE, 59);
+        calendar.set(Calendar.SECOND, 59);
+        Date endTime = calendar.getTime();
+        log.info("开始时间:{},结束时间:{}", sdf.format(startTime), sdf.format(endTime));
+        try {
+            R<?> result = HttpTestUtils.getToken(loginIp, Integer.parseInt(loginPort), userName, userPwd);
+            if (result.getCode() != 200) {
+                log.error("调用获取token接口报错:{}", result);
+            }
+            String token = result.getData().toString();
+            extractedWhite(token, sdf.format(startTime), sdf.format(endTime), null);
+            long endTimeMillis = System.currentTimeMillis(); // 记录结束时间
+            // 计算耗时
+            long duration = endTimeMillis - startTimeMillis;
+            log.info("configureWhiteTasks调用获取对接大华云台日志定时任务接口耗时:{} 毫秒", duration);
+        } catch (Exception e) {
+            log.error("configureWhiteTasks background error:", e);
+        }
+    }
+
+    public void extractedWhite(String token, String startTime, String endTime, String operateTypeValue) throws Exception {
+        //取消证书认证
+        SSLContext sslContext = SSLContextBuilder.create()
+                .loadTrustMaterial(new TrustSelfSignedStrategy())
+                .build();
+        HostnameVerifier hostnameVerifier = NoopHostnameVerifier.INSTANCE;
+        HttpClient httpClient = HttpClients.custom()
+                .setSSLContext(sslContext)
+                .setSSLHostnameVerifier(hostnameVerifier)
+                .setRedirectStrategy(new LaxRedirectStrategy())
+                .build();
+        //3.调用操作日志查询接口
+        String proto = loginPort.equals("8320") ? "https://" : "http://";
+        HttpPost httpPost = new HttpPost(proto + loginIp + ":" + loginPort + url);
+        httpPost.setHeader("X-Subject-Token", token);
+        httpPost.setHeader("content-type", "application/json");
+        if (StringUtils.isNotEmpty(operateTypeValue)) {
+            extracted(startTime, endTime, operateTypeValue, httpPost, httpClient);
+        } else {
+            for (String str : operateTypeWhiteList) {
+                extracted(startTime, endTime, str, httpPost, httpClient);
+            }
+        }
+    }
+
+    private void extracted(String startTime, String endTime, String str, HttpPost httpPost, HttpClient httpClient) throws Exception {
+        //第三次请求入参入参
+        Integer pageNo = 1;
+        Integer nextPage = 1;
+        for (int i = 1; i <= pageNo; i++) {
+            if (nextPage > 0) {
+                //循环赋值第几页
+                String requestBody = "{\n" +
+                        "\t\"condition\": {\n" +
+                        "\t\t\"startTime\": \"" + startTime + "\",\n" +
+                        "\t\t\"endTime\": \"" + endTime + "\",\n" +
+                        "\t\t\"type\": 2,\n" +
+                        "\t\t\"operateNames\": [],\n" +
+                        "\t\t\"operateType\": \"" + str + "\",\n" +
+                        "\t\t\"deptCode\": \"\",\n" +
+                        "\t\t\"userName\": \"\",\n" +
+                        "\t\t\"address\": \"\",\n" +
+                        "\t\t\"eventDetail\": \"\"\n" +
+                        "\t},\n" +
+                        "\t\"order\": [\n" +
+                        "\t\t{\n" +
+                        "\t\t\t\"orderBy\": \"operateTime\",\n" +
+                        "\t\t\t\"order\": \"desc\"\n" +
+                        "\t\t}\n" +
+                        "\t],\n" +
+                        "\t\"page\": \"" + i + "\",\n" +
+                        "\t\"pageSize\": 512\n" +
+                        "}";
+//                log.info("请求参数operateType:{}", str);
+                StringEntity requestEntity = new StringEntity(requestBody, ContentType.APPLICATION_JSON);
+                httpPost.setEntity(requestEntity);
+                HttpResponse response = httpClient.execute(httpPost);
+                HttpEntity responseEntity = response.getEntity();
+                if (responseEntity != null) {
+                    List<CenternonitorTDahuaOperateLogUrl> centernonitorTDahuaOperateLogUrlList = new ArrayList<>();
+                    String responseBody = EntityUtils.toString(responseEntity);
+                    JSONObject jsonObject = JSONObject.parseObject(responseBody);
+//                    log.info("configureWhiteTasks=======>jsonObject.totalCount():{}", jsonObject.get("totalCount"));
+                    if (ObjectUtils.isNotEmpty(jsonObject.get("code")) && jsonObject.get("code").toString().equals("402")) {
+                        //如果token过期重新走业务逻辑
+                        getTokenWhite();
+                    } else {
+                        pageNo = (Integer) jsonObject.get("totalCount") / 512 + 1;
+                        nextPage = (Integer) jsonObject.get("nextPage");
+                        List<CenternonitorTDahuaOperateLog> list = JSONObject.parseArray(jsonObject.get("results").toString(), CenternonitorTDahuaOperateLog.class);
+                        if (CollectionUtils.isNotEmpty(list)) {
+                            for (CenternonitorTDahuaOperateLog item : list) {
+                                SysDept selectDo = new SysDept();
+                                selectDo.setUserName(item.getUserName());
+                                SysDept sysDept = sysDeptService.findDeptIdByUserName(selectDo);
+                                if (ObjectUtils.isNotEmpty(sysDept)) {
+                                    item.setDeptId(sysDept.getDeptId());
+                                    item.setDeptName(sysDept.getDeptName());
+                                    item.setAncestors(sysDept.getAncestors());
+                                    item.setParentId(sysDept.getParentId());
+                                }
+                            }
+                            int count = centernonitorTDahuaOperateLogService.insertBatch(list);
+//                            log.info("循环插入数据第:{}次", i);
+                            list.stream().forEach(item -> {
+                                if (CollectionUtils.isNotEmpty(item.getUrl())) {
+                                    item.getUrl().stream().forEach(var -> {
+                                        CenternonitorTDahuaOperateLogUrl centernonitorTDahuaOperateLogUrl = new CenternonitorTDahuaOperateLogUrl();
+                                        centernonitorTDahuaOperateLogUrl.setOperateId(item.getId());
+                                        centernonitorTDahuaOperateLogUrl.setUrl(var);
+                                        centernonitorTDahuaOperateLogUrlList.add(centernonitorTDahuaOperateLogUrl);
+                                    });
+                                }
+                            });
+                            if (CollectionUtils.isNotEmpty(centernonitorTDahuaOperateLogUrlList)) {
+                                centernonitorTDahuaOperateLogUrlMapper.insertBatch(centernonitorTDahuaOperateLogUrlList);
+                            }
+                        }
+                    }
+                }
+            }
+        }
+    }
+
+
+    public R<?> getTokenWhite() {
+        SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd'T'HHmmss'Z'");
+        Calendar calendar = Calendar.getInstance();
+        Date now = new Date();
+        //设置入参开始时间
+        calendar.setTime(now);
+        // 获取当前时间前一天的日期
+        calendar.add(Calendar.DAY_OF_MONTH, -1);
+        // 设置时间为16:00:00
+        calendar.set(Calendar.HOUR_OF_DAY, 16);
+        calendar.set(Calendar.MINUTE, 0);
+        calendar.set(Calendar.SECOND, 0);
+        Date startTime = calendar.getTime();
+        //获取当前时间的15:59:59
+        calendar.setTime(now);
+        calendar.set(Calendar.HOUR_OF_DAY, 15);
+        calendar.set(Calendar.MINUTE, 59);
+        calendar.set(Calendar.SECOND, 59);
+        Date endTime = calendar.getTime();
+
+        try {
+            R<?> result = HttpTestUtils.getToken(loginIp, Integer.parseInt(loginPort), userName, userPwd);
+            if (result.getCode() != 200) {
+                return R.fail(result.getMsg());
+            }
+            String token = result.getData().toString();
+            extractedWhite(token, sdf.format(startTime), sdf.format(endTime), null);
+            return R.ok();
+        } catch (Exception e) {
+            return R.fail("调用操作日志接口报错");
+        }
+    }
+
+
+}
+
+

+ 411 - 0
src/main/java/com/sooka/sponest/monitor/dahua/domain/CenternonitorTDahuaOperateLog.java

@@ -0,0 +1,411 @@
+package com.sooka.sponest.monitor.dahua.domain;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.ruoyi.common.core.annotation.Excel;
+import com.ruoyi.common.datascope.base.domain.BaseBusinessEntity;
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
+
+import java.util.Date;
+import java.util.List;
+
+/**
+ *
+ * @author ruoyi
+ * @date 2023-12-09
+ */
+public class CenternonitorTDahuaOperateLog extends BaseBusinessEntity {
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * $column.columnComment
+     */
+    private Long id;
+
+    private String recordId;
+
+    /**
+     * 用户名
+     */
+    @Excel(name = "用户名")
+    private String userName;
+
+    /**
+     * 操作者ip
+     */
+    @Excel(name = "操作者ip")
+    private String terminalIp;
+
+    /**
+     * 操作者mac地址
+     */
+    @Excel(name = "操作者mac地址")
+    private String macAddr;
+
+    /**
+     * 通道名
+     */
+    @Excel(name = "通道名")
+    private String channelName;
+
+    /**
+     * 设备名称
+     */
+    @Excel(name = "设备名称")
+    private String deviceName;
+
+    /**
+     * 模块名称
+     */
+    @Excel(name = "模块名称")
+    private String operateName;
+
+    /**
+     * 操作类型
+     */
+    @Excel(name = "操作类型")
+    private String operateType;
+
+    /**
+     * 操作结果(1成功;0失败;)
+     */
+    @Excel(name = "操作结果(1成功;0失败;)")
+    private Integer operateResult;
+
+    /**
+     * 服务标识
+     */
+    @Excel(name = "服务标识")
+    private String serviceCode;
+
+    /**
+     * 服务名称
+     */
+    @Excel(name = "服务名称")
+    private String serviceName;
+
+    /**
+     * 操作耗时
+     */
+    @Excel(name = "操作耗时")
+    private Long responseTime;
+
+    /**
+     * 事件内容
+     */
+    @Excel(name = "事件内容")
+    private String detail;
+
+    /**
+     * 业务操作
+     */
+    @Excel(name = "业务操作")
+    private String behavior;
+
+    /**
+     * 通道编码
+     */
+    @Excel(name = "通道编码")
+    private String channelCode;
+
+    /**
+     * 设备ip
+     */
+    @Excel(name = "设备ip")
+    private String deviceIp;
+
+    /**
+     * url
+     */
+    @Excel(name = "url")
+    private List<String> url;
+
+    /**
+     * 操作时间
+     */
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @Excel(name = "操作时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
+    private Date operateTime;
+
+    /** 部门ID */
+    private Long deptId;
+
+    /** 父部门ID */
+    private Long parentId;
+
+    /** 祖级列表 */
+    private String ancestors;
+
+    /** 部门名称 */
+    private String deptName;
+
+    private String year;
+
+    private Integer limit;
+
+    private List<Long> ids;
+
+    /**
+     * 操作时间
+     */
+    private List<String> operateTimeRange;
+
+    @JsonProperty("id")
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    public Long getId() {
+        return id;
+    }
+
+    @JsonProperty("recordId")
+    public void setRecordId(String recordId) {
+        this.recordId = recordId;
+    }
+
+    public String getRecordId() {
+        return recordId;
+    }
+
+    @JsonProperty("userName")
+    public void setUserName(String userName) {
+        this.userName = userName;
+    }
+
+    public String getUserName() {
+        return userName;
+    }
+
+    @JsonProperty("terminalIp")
+    public void setTerminalIp(String terminalIp) {
+        this.terminalIp = terminalIp;
+    }
+
+    public String getTerminalIp() {
+        return terminalIp;
+    }
+
+    @JsonProperty("macAddr")
+    public void setMacAddr(String macAddr) {
+        this.macAddr = macAddr;
+    }
+
+    public String getMacAddr() {
+        return macAddr;
+    }
+
+    @JsonProperty("channelName")
+    public void setChannelName(String channelName) {
+        this.channelName = channelName;
+    }
+
+    public String getChannelName() {
+        return channelName;
+    }
+
+    @JsonProperty("deviceName")
+    public void setDeviceName(String deviceName) {
+        this.deviceName = deviceName;
+    }
+
+    public String getDeviceName() {
+        return deviceName;
+    }
+
+    @JsonProperty("operateName")
+    public void setOperateName(String operateName) {
+        this.operateName = operateName;
+    }
+
+    public String getOperateName() {
+        return operateName;
+    }
+
+    @JsonProperty("operateType")
+    public void setOperateType(String operateType) {
+        this.operateType = operateType;
+    }
+
+    public String getOperateType() {
+        return operateType;
+    }
+
+    @JsonProperty("operateResult")
+    public void setOperateResult(Integer operateResult) {
+        this.operateResult = operateResult;
+    }
+
+    public Integer getOperateResult() {
+        return operateResult;
+    }
+
+    @JsonProperty("serviceCode")
+    public void setServiceCode(String serviceCode) {
+        this.serviceCode = serviceCode;
+    }
+
+    public String getServiceCode() {
+        return serviceCode;
+    }
+
+    @JsonProperty("serviceName")
+    public void setServiceName(String serviceName) {
+        this.serviceName = serviceName;
+    }
+
+    public String getServiceName() {
+        return serviceName;
+    }
+
+    @JsonProperty("responseTime")
+    public void setResponseTime(Long responseTime) {
+        this.responseTime = responseTime;
+    }
+
+    public Long getResponseTime() {
+        return responseTime;
+    }
+
+    @JsonProperty("detail")
+    public void setDetail(String detail) {
+        this.detail = detail;
+    }
+
+    public String getDetail() {
+        return detail;
+    }
+
+    @JsonProperty("behavior")
+    public void setBehavior(String behavior) {
+        this.behavior = behavior;
+    }
+
+    public String getBehavior() {
+        return behavior;
+    }
+
+    @JsonProperty("channelCode")
+    public void setChannelCode(String channelCode) {
+        this.channelCode = channelCode;
+    }
+
+    public String getChannelCode() {
+        return channelCode;
+    }
+
+    @JsonProperty("deviceIp")
+    public void setDeviceIp(String deviceIp) {
+        this.deviceIp = deviceIp;
+    }
+
+    public String getDeviceIp() {
+        return deviceIp;
+    }
+
+    @JsonProperty("operateTime")
+    public void setOperateTime(Date operateTime) {
+        this.operateTime = operateTime;
+    }
+
+    public Date getOperateTime() {
+        return operateTime;
+    }
+
+    @JsonProperty("url")
+    public void setUrl(List<String> url) {
+        this.url = url;
+    }
+
+    public List<String> getUrl() {
+        return url;
+    }
+
+
+    public Long getDeptId() {
+        return deptId;
+    }
+
+    public void setDeptId(Long deptId) {
+        this.deptId = deptId;
+    }
+
+    public Long getParentId() {
+        return parentId;
+    }
+
+    public void setParentId(Long parentId) {
+        this.parentId = parentId;
+    }
+
+    public String getAncestors() {
+        return ancestors;
+    }
+
+    public void setAncestors(String ancestors) {
+        this.ancestors = ancestors;
+    }
+
+    public String getDeptName() {
+        return deptName;
+    }
+
+    public void setDeptName(String deptName) {
+        this.deptName = deptName;
+    }
+
+    public String getYear() {
+        return year;
+    }
+
+    public void setYear(String year) {
+        this.year = year;
+    }
+
+    public Integer getLimit() {
+        return limit;
+    }
+
+    public void setLimit(Integer limit) {
+        this.limit = limit;
+    }
+
+    public List<Long> getIds() {
+        return ids;
+    }
+
+    public void setIds(List<Long> ids) {
+        this.ids = ids;
+    }
+
+    @Override
+    public String toString() {
+        return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE)
+                .append("id", getId())
+                .append("recordId", getRecordId())
+                .append("userName", getUserName())
+                .append("terminalIp", getTerminalIp())
+                .append("macAddr", getMacAddr())
+                .append("channelName", getChannelName())
+                .append("deviceName", getDeviceName())
+                .append("operateName", getOperateName())
+                .append("operateType", getOperateType())
+                .append("operateResult", getOperateResult())
+                .append("serviceCode", getServiceCode())
+                .append("serviceName", getServiceName())
+                .append("responseTime", getResponseTime())
+                .append("detail", getDetail())
+                .append("behavior", getBehavior())
+                .append("channelCode", getBehavior())
+                .append("deviceIp", getChannelCode())
+                .append("operateTime", getOperateTime())
+                .append("createTime", getCreateTime())
+                .append("deptId", getDeptId())
+                .append("parentId", getParentId())
+                .append("ancestors", getAncestors())
+                .append("deptName", getDeptName())
+                .append("year", getYear())
+                .toString();
+    }
+}

+ 68 - 0
src/main/java/com/sooka/sponest/monitor/dahua/domain/CenternonitorTDahuaOperateLogUrl.java

@@ -0,0 +1,68 @@
+package com.sooka.sponest.monitor.dahua.domain;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.ruoyi.common.core.web.domain.BaseEntity;
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
+
+/**
+ *
+ * @author ruoyi
+ * @date 2023-12-09
+ */
+public class CenternonitorTDahuaOperateLogUrl extends BaseEntity {
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 主键id
+     */
+    private Long id;
+
+    /**
+     * centernonitor_t_dahua_operate_log主键id
+     */
+    private Long operateId;
+
+    /**
+     * url
+     */
+    private String url;
+
+
+    @JsonProperty("id")
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    public Long getId() {
+        return id;
+    }
+
+    @JsonProperty("operateId")
+    public void setOperateId(Long operateId) {
+        this.operateId = operateId;
+    }
+
+    public Long getOperateId() {
+        return operateId;
+    }
+
+    @JsonProperty("url")
+    public void setUrl(String url) {
+        this.url = url;
+    }
+
+    public String getUrl() {
+        return url;
+    }
+
+
+    @Override
+    public String toString() {
+        return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE)
+                .append("id", getId())
+                .append("operateId", getOperateId())
+                .append("url", getUrl())
+                .toString();
+    }
+}

+ 67 - 0
src/main/java/com/sooka/sponest/monitor/dahua/login/Login.java

@@ -0,0 +1,67 @@
+package com.sooka.sponest.monitor.dahua.login;//package com.dahuatch.Login;
+
+
+import com.alibaba.nacos.shaded.com.google.gson.Gson;
+import com.ruoyi.common.core.domain.R;
+import com.sooka.sponest.monitor.dahua.login.bean.LoginFirst;
+import com.sooka.sponest.monitor.dahua.login.bean.LoginSecond;
+import com.sooka.sponest.monitor.dahua.utils.HttpEnum;
+import com.sooka.sponest.monitor.dahua.utils.HttpTestUtils;
+
+import java.util.Map;
+
+/**
+ * 创建会话接口
+ */
+public class Login {
+
+    public static final String ACTION = "/videoService/accounts/authorize";
+
+    //第一次登陆,客户端只传用户名,服务端返回realm、readomKey和encryptType信息。
+    private static String firstLogin(String ip, int port, String userName) {
+        LoginFirst loginFirst = new LoginFirst();
+        loginFirst.setClientType("winpc");
+        loginFirst.setUserName(userName);
+        String rsp = HttpTestUtils.httpRequest(HttpEnum.POST, ip, port, ACTION, "", new Gson().toJson(loginFirst));
+        return rsp;
+    }
+
+    //第二次登录,客户端根据返回的信息,按照指定的加密算法计算签名,再带着用户名和签名登陆一次。
+    private static String secondLogin(String ip, int port, String userName, String password, String realm, String randomKey) throws Exception {
+        LoginSecond snd = new LoginSecond();
+        snd.setUserName(userName);
+        snd.setClientType("winpc");
+        snd.setRandomKey(randomKey);
+        snd.setEncryptType("MD5");
+        String signature = snd.calcSignature(password, realm);
+        snd.setSignature(signature);
+        Gson gson = new Gson();
+        String ctx = gson.toJson(snd);
+        String rsp = HttpTestUtils.httpRequest(HttpEnum.POST, ip, port, ACTION, "", ctx);
+        return rsp;
+    }
+
+    @SuppressWarnings("unchecked")
+    public static String login(String ip, int port, String userName, String password) throws Exception {
+        String response = firstLogin(ip, port, userName);
+        Map<String, String> responseMap = new Gson().fromJson(response, Map.class);
+        String random = responseMap.get("randomKey");
+        String realm = responseMap.get("realm");
+        response = secondLogin(ip, port, userName, password, realm, random);
+        return response;
+    }
+
+
+    /**
+     * 调用该登陆方法之前需要修改 baseinfo.properties中ip,port,name,password为当前对接环境
+     * 登录的方法,运行之后即可获取到token,进行登录,登陆完成后,必须调用KeepLogin保活接口,否则,2分钟后会登陆过期
+     */
+    public static void main(String[] args) throws Exception {
+        R<?> result = HttpTestUtils.getToken("10.254.1.20", Integer.valueOf(8320), "system", "Admin123");
+        String token = result.getData().toString();
+        System.out.println("登录成功,token=" + token);
+    }
+}
+
+
+

+ 36 - 0
src/main/java/com/sooka/sponest/monitor/dahua/login/bean/LoginFirst.java

@@ -0,0 +1,36 @@
+package com.sooka.sponest.monitor.dahua.login.bean;//package com.dahuatch.Login;
+
+/**
+ * 第一次登录参数bean
+ */
+public class LoginFirst {
+
+    private String userName;
+    private String clientType;
+    private String ipAddress;
+
+
+    public String getUserName() {
+        return userName;
+    }
+    public void setUserName(String userName) {
+        this.userName = userName;
+    }
+    public String getClientType() {
+        return clientType;
+    }
+    public void setClientType(String clientType) {
+        this.clientType = clientType;
+    }
+    public String getIpAddress() {
+        return ipAddress;
+    }
+    public void setIpAddress(String ipAddress) {
+        this.ipAddress = ipAddress;
+    }
+    @Override
+    public String toString() {
+
+        return "[userName=" + userName + ",clientType=" + clientType + ",ipAddress=" + ipAddress + "]";
+    }
+}

+ 102 - 0
src/main/java/com/sooka/sponest/monitor/dahua/login/bean/LoginSecond.java

@@ -0,0 +1,102 @@
+package com.sooka.sponest.monitor.dahua.login.bean;
+
+import java.io.UnsupportedEncodingException;
+import java.security.MessageDigest;
+import java.security.NoSuchAlgorithmException;
+
+/**
+ * 第二次登录参数bean和方法
+ */
+public class LoginSecond {
+    private String userName;
+    private String clientType;
+    private String ipAddress;
+	private String signature;
+	private String randomKey;
+	private String encryptType;
+
+    public String getUserName() {
+        return userName;
+    }
+    public void setUserName(String userName) {
+        this.userName = userName;
+    }
+    public String getClientType() {
+        return clientType;
+    }
+    public void setClientType(String clientType) {
+        this.clientType = clientType;
+    }
+    public String getIpAddress() {
+        return ipAddress;
+    }
+    public void setIpAddress(String ipAddress) {
+        this.ipAddress = ipAddress;
+    }
+    public String getSignature() {
+        return signature;
+    }
+    public void setSignature(String signature) {
+        this.signature = signature;
+    }
+    public String getRandomKey() {
+        return randomKey;
+    }
+    public void setRandomKey(String randomKey) {
+        this.randomKey = randomKey;
+    }
+    public String getEncryptType() {
+        return encryptType;
+    }
+    public String setEncryptType(String encryptType) {
+        return this.encryptType = encryptType;
+    }
+
+	public static boolean isBlankString(String str) {
+		if (str == null || str == "" || str.length() == 0) {
+			return true;
+		}
+		return false;
+	}
+
+	public static String encrypt(String inputText, String algorithmName) throws Exception {
+		if (isBlankString(inputText)) {
+			throw new IllegalArgumentException("Please enter inputText!");
+		}
+		if (isBlankString(algorithmName)
+				|| algorithmName.toLowerCase().equals("md5")) {
+			algorithmName = "MD5";
+		}
+		try {
+			MessageDigest digest = MessageDigest.getInstance(algorithmName);
+			digest.update(inputText.getBytes("UTF8"));
+			byte encryptted[] = digest.digest();
+			int i;
+			StringBuffer rsp = new StringBuffer();
+			for (int offset = 0; offset < encryptted.length; offset++) {
+				i = encryptted[offset];
+				if (i < 0)
+					i += 256;
+				if (i < 16)
+					rsp.append("0");
+				rsp.append(Integer.toHexString(i));
+			}
+			return rsp.toString();
+		} catch (NoSuchAlgorithmException e) {
+			throw e;
+		} catch (UnsupportedEncodingException e) {
+			throw e;
+		}
+	}
+	//根据第一次登录接口调用返回的参数,计算签名,第二次登录接口调用要使用到,本例采用的是MD5的加密方式,可以根据需要采用别的加密方式
+	public String calcSignature(String password, String realm) throws Exception{
+		String signature = encrypt(password, "MD5");
+		signature = encrypt(this.userName+signature, "MD5");
+		signature = encrypt(signature, "MD5");
+		signature = encrypt(this.userName+":"+realm+":"+signature, "MD5");
+		signature = encrypt(signature+":"+this.randomKey, "MD5");
+		return signature;
+	}
+
+}
+

+ 21 - 0
src/main/java/com/sooka/sponest/monitor/dahua/mapper/CenternonitorTDahuaOperateLogMapper.java

@@ -0,0 +1,21 @@
+package com.sooka.sponest.monitor.dahua.mapper;
+
+import com.sooka.sponest.monitor.dahua.domain.CenternonitorTDahuaOperateLog;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+/**
+ * 【请填写功能名称】Mapper接口
+ *
+ * @author ruoyi
+ * @date 2023-12-09
+ */
+public interface CenternonitorTDahuaOperateLogMapper {
+
+    /**
+     * 批量保存大华云台日志
+     */
+    int insertBatch(@Param("list") List<CenternonitorTDahuaOperateLog> list);
+
+}

+ 21 - 0
src/main/java/com/sooka/sponest/monitor/dahua/mapper/CenternonitorTDahuaOperateLogUrlMapper.java

@@ -0,0 +1,21 @@
+package com.sooka.sponest.monitor.dahua.mapper;
+
+import com.sooka.sponest.monitor.dahua.domain.CenternonitorTDahuaOperateLogUrl;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+/**
+ *
+ * @author ruoyi
+ * @date 2023-12-09
+ */
+public interface CenternonitorTDahuaOperateLogUrlMapper {
+
+    /**
+     * 批量保存大华云台日志
+     */
+    int insertBatch(@Param("list") List<CenternonitorTDahuaOperateLogUrl> list);
+
+
+}

+ 20 - 0
src/main/java/com/sooka/sponest/monitor/dahua/service/ICenternonitorTDahuaOperateLogService.java

@@ -0,0 +1,20 @@
+package com.sooka.sponest.monitor.dahua.service;
+
+import com.sooka.sponest.monitor.dahua.domain.CenternonitorTDahuaOperateLog;
+
+import java.util.List;
+
+/**
+ * 【请填写功能名称】Service接口
+ *
+ * @author ruoyi
+ * @date 2023-12-09
+ */
+public interface ICenternonitorTDahuaOperateLogService {
+    /**
+     * 批量保存大华云台日志
+     */
+    int insertBatch(List<CenternonitorTDahuaOperateLog> list);
+
+
+}

+ 34 - 0
src/main/java/com/sooka/sponest/monitor/dahua/service/impl/CenternonitorTDahuaOperateLogServiceImpl.java

@@ -0,0 +1,34 @@
+package com.sooka.sponest.monitor.dahua.service.impl;
+
+
+import com.sooka.sponest.monitor.base.service.impl.BaseService;
+import com.sooka.sponest.monitor.dahua.domain.CenternonitorTDahuaOperateLog;
+import com.sooka.sponest.monitor.dahua.mapper.CenternonitorTDahuaOperateLogMapper;
+import com.sooka.sponest.monitor.dahua.service.ICenternonitorTDahuaOperateLogService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+/**
+ * 【请填写功能名称】Service业务层处理
+ *
+ * @author ruoyi
+ * @date 2023-12-09
+ */
+@Slf4j
+@Service
+public class CenternonitorTDahuaOperateLogServiceImpl extends BaseService implements ICenternonitorTDahuaOperateLogService {
+    @Autowired
+    private CenternonitorTDahuaOperateLogMapper centernonitorTDahuaOperateLogMapper;
+    /**
+     * 批量保存大华云台日志
+     */
+    @Override
+    public int insertBatch(List<CenternonitorTDahuaOperateLog> list) {
+        return centernonitorTDahuaOperateLogMapper.insertBatch(list);
+    }
+
+
+}

تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 96 - 0
src/main/java/com/sooka/sponest/monitor/dahua/utils/DSSUtils.java


+ 26 - 0
src/main/java/com/sooka/sponest/monitor/dahua/utils/HttpEnum.java

@@ -0,0 +1,26 @@
+package com.sooka.sponest.monitor.dahua.utils;
+/**
+ * 请求类型枚举
+ */
+public enum HttpEnum {
+    GET(1,"get"),
+    POST(2,"post"),
+    PUT(3,"put"),
+    DELETE(4,"delete");
+    private int num;
+    private String desc;
+
+
+    HttpEnum(int num, String desc) {
+        this.num = num;
+        this.desc = desc;
+    }
+    public int getNum() {
+        return num;
+    }
+
+    public String getDesc() {
+        return desc;
+    }
+
+}

+ 195 - 0
src/main/java/com/sooka/sponest/monitor/dahua/utils/HttpTestUtils.java

@@ -0,0 +1,195 @@
+package com.sooka.sponest.monitor.dahua.utils;
+
+
+import com.alibaba.nacos.shaded.com.google.gson.Gson;
+import com.ruoyi.common.core.domain.R;
+import com.sooka.sponest.monitor.dahua.login.Login;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.http.client.methods.*;
+import org.apache.http.config.Registry;
+import org.apache.http.config.RegistryBuilder;
+import org.apache.http.conn.socket.ConnectionSocketFactory;
+import org.apache.http.conn.socket.PlainConnectionSocketFactory;
+import org.apache.http.conn.ssl.SSLConnectionSocketFactory;
+import org.apache.http.conn.ssl.X509HostnameVerifier;
+import org.apache.http.entity.StringEntity;
+import org.apache.http.impl.client.CloseableHttpClient;
+import org.apache.http.impl.client.HttpClientBuilder;
+import org.apache.http.impl.conn.PoolingHttpClientConnectionManager;
+import org.apache.http.ssl.SSLContexts;
+import org.apache.http.ssl.TrustStrategy;
+
+import javax.net.ssl.SSLContext;
+import javax.net.ssl.SSLException;
+import javax.net.ssl.SSLSession;
+import javax.net.ssl.SSLSocket;
+import java.io.*;
+import java.security.KeyStore;
+import java.security.cert.CertificateException;
+import java.security.cert.X509Certificate;
+import java.util.Map;
+/**
+ * 远程调用请求工具
+ */
+@Slf4j
+public class HttpTestUtils {
+    public static String httpRequest(HttpEnum method, String ip, int port, String action, String token, String content) {
+        String responJson = null;
+        CloseableHttpClient httpClient = null;
+        CloseableHttpResponse httpResponse = null;
+        InputStream inputStream = null;
+        KeyStore trustStore = null;
+        SSLContext sslcontext = null;
+        try {
+            trustStore = KeyStore.getInstance(KeyStore.getDefaultType());
+            // 设置信任签名
+            sslcontext = SSLContexts.custom().loadTrustMaterial(trustStore, new TrustStrategy() {
+                @Override
+                public boolean isTrusted(X509Certificate[] x509Certificates, String s) throws CertificateException {
+                    return true;
+                }
+            }).build();
+            X509HostnameVerifier hostnameVerifier = new X509HostnameVerifier() {
+                @Override
+                public void verify(String s, SSLSocket sslSocket) throws IOException {
+
+                }
+
+                @Override
+                public void verify(String s, X509Certificate x509Certificate) throws SSLException {
+
+                }
+
+                @Override
+                public void verify(String s, String[] strings, String[] strings1) throws SSLException {
+
+                }
+
+                @Override
+                public boolean verify(String s, SSLSession sslSession) {
+                    return true;
+                }
+            };
+            // 设置协议http和https对应的处理socket链接工厂的对象
+            Registry<ConnectionSocketFactory> socketFactoryRegistry = RegistryBuilder.<ConnectionSocketFactory>create()
+                    .register("http", PlainConnectionSocketFactory.INSTANCE)
+                    .register("https", new SSLConnectionSocketFactory(sslcontext, hostnameVerifier))
+                    .build();
+
+            PoolingHttpClientConnectionManager connectionManager = new PoolingHttpClientConnectionManager(socketFactoryRegistry);
+
+            httpClient = HttpClientBuilder.create()
+                    .setConnectionManager(connectionManager)
+                    .setRedirectStrategy(new RestRedirectStrategy()).build();
+            String proto = port == 8320 ? "https://" : "http://";
+            String uri = proto + ip + ":" + port + action;
+            HttpRequestBase httpReq = getRequestEntity(method, token, uri, content);
+            httpResponse = httpClient.execute(httpReq);
+            inputStream = httpResponse.getEntity().getContent();
+            responJson = convertToString(inputStream);
+        } catch (UnsupportedEncodingException e) {
+            e.printStackTrace();
+        } catch (Exception e) {
+            e.printStackTrace();
+        } finally {
+            if (null != httpResponse) {
+                try {
+                    httpResponse.close();
+                } catch (IOException e) {
+                    e.printStackTrace();
+                }
+            }
+            if (null != httpClient) {
+                try {
+                    httpClient.close();
+                } catch (IOException e) {
+                    e.printStackTrace();
+                }
+            }
+        }
+        return responJson;
+    }
+
+    private static HttpRequestBase getRequestEntity(HttpEnum method, String token, String uri, String content) throws UnsupportedEncodingException {
+        switch (method.getNum()) {
+            case 1:
+                HttpGet httpGet = new HttpGet(uri + content);
+                httpGet.addHeader("Content-type", "application/json");
+                httpGet.addHeader("X-Subject-Token", token);
+                return httpGet;
+            case 2:
+                HttpPost httpPost = new HttpPost(uri);
+                httpPost.addHeader("Content-type", "application/json");
+                httpPost.addHeader("X-Subject-Token", token);
+                httpPost.setEntity(new StringEntity(content, "UTF-8"));
+                return httpPost;
+            case 3:
+                HttpPut httpPut = new HttpPut(uri);
+                httpPut.addHeader("Content-type", "application/json");
+                httpPut.addHeader("X-Subject-Token", token);
+                httpPut.setEntity(new StringEntity(content, "UTF-8"));
+                return httpPut;
+            case 4:
+                HttpDelete httpDelete = new HttpDelete(uri + content);
+                httpDelete.addHeader("Content-type", "application/json");
+                httpDelete.addHeader("X-Subject-Token", token);
+                return httpDelete;
+            default:
+                System.out.println("请求方法不对");
+        }
+        return null;
+    }
+
+    private static String convertToString(InputStream is) {
+        if (is == null) {
+            return null;
+        }
+        BufferedReader bf = null;
+        try {
+            StringBuilder sb = new StringBuilder();
+            String temp = "";
+            bf = new BufferedReader(new InputStreamReader(is, "UTF-8"));
+            while ((temp = bf.readLine()) != null) {
+                sb.append(temp);
+            }
+            return sb.toString();
+        } catch (IOException e) {
+            e.printStackTrace();
+            return null;
+        } finally {
+            closeStream(bf);
+            closeStream(is);
+        }
+    }
+
+    private static void closeStream(Closeable closeable) {
+        if (null != closeable) {
+            try {
+                closeable.close();
+            } catch (IOException e) {
+                e.printStackTrace();
+            }
+        }
+    }
+
+    public static R<?> getToken(String ip, int port, String userName, String password) throws Exception {
+        String response = "";
+        String token = "";
+        response = Login.login(ip, port, userName, password);
+        Map<String, Object> rsp = new Gson().fromJson(response, Map.class);
+        String message = (String) rsp.get("message");
+        if (message != null && !"".equals(message)) {
+            System.out.println(message);
+            log.info("获取token信息:{}",message);
+            return R.fail("用户名或密码错误,未获取到token");
+        }
+        token = (String) rsp.get("token");
+        if (token == null || "".equals(token)) {
+            System.out.println("获取到的token为空");
+            log.info("获取token:{}",message);
+            return R.fail("获取到的token为空");
+        }
+        return R.ok(token);
+    }
+
+}

+ 25 - 0
src/main/java/com/sooka/sponest/monitor/dahua/utils/ImgUtils.java

@@ -0,0 +1,25 @@
+package com.sooka.sponest.monitor.dahua.utils;
+
+/******************************
+ *
+ * @author yanhongliang
+ * @date 2022-06-20 10:22 AM
+ ******************************/
+
+public class ImgUtils {
+
+
+    public static String[] getImgUrl(String... path) {
+
+        String[] url = {};
+
+        for (int i = 0; i < path.length; i++) {
+            url[i] =  "https//192.168.100.2:8443/evo-pic/" + path + "?token=" + DSSUtils.getToken();
+        }
+
+        return url;
+
+    }
+
+
+}

+ 70 - 0
src/main/java/com/sooka/sponest/monitor/dahua/utils/RestRedirectStrategy.java

@@ -0,0 +1,70 @@
+package com.sooka.sponest.monitor.dahua.utils;
+
+import org.apache.http.*;
+import org.apache.http.annotation.Contract;
+import org.apache.http.annotation.ThreadingBehavior;
+import org.apache.http.client.methods.*;
+import org.apache.http.impl.client.DefaultRedirectStrategy;
+import org.apache.http.protocol.HttpContext;
+
+import java.net.URI;
+
+/**
+ * 功能简介:重定向策略,GET/POST/PUT/DELTE 都支持重定向
+ * 功能详解:
+ */
+@Contract(threading = ThreadingBehavior.IMMUTABLE)
+public class RestRedirectStrategy extends DefaultRedirectStrategy {
+
+    /**
+     * Redirect methods
+     */
+    private static final String[] REDIRECT_METHODS = new String[]{
+            HttpGet.METHOD_NAME,
+            HttpPut.METHOD_NAME,
+            HttpDelete.METHOD_NAME,
+            HttpPost.METHOD_NAME
+    };
+
+    @Override
+    protected boolean isRedirectable(final String method) {
+        for (final String m : REDIRECT_METHODS) {
+            if (m.equalsIgnoreCase(method)) {
+                return true;
+            }
+        }
+        return false;
+    }
+
+    @Override
+    public HttpUriRequest getRedirect(final HttpRequest request, final HttpResponse response, final HttpContext context) throws ProtocolException {
+        final URI uri = getLocationURI(request, response, context);
+        final String method = request.getRequestLine().getMethod();
+        if (method.equalsIgnoreCase(HttpGet.METHOD_NAME)) {
+            return new HttpGet(uri);
+        } else if (method.equalsIgnoreCase(HttpPost.METHOD_NAME)) {
+            HttpPost post = new HttpPost(uri);
+            if (request instanceof HttpEntityEnclosingRequest) {
+                HttpEntity oldEntity = ((HttpEntityEnclosingRequest) request).getEntity();
+                post.setEntity(oldEntity);
+            }
+            return post;
+        } else if (method.equalsIgnoreCase(HttpPut.METHOD_NAME)) {
+            HttpPut put = new HttpPut(uri);
+            if (request instanceof HttpEntityEnclosingRequest) {
+                HttpEntity oldEntity = ((HttpEntityEnclosingRequest) request).getEntity();
+                put.setEntity(oldEntity);
+            }
+            return put;
+        } else if (method.equalsIgnoreCase(HttpDelete.METHOD_NAME)) {
+            return new HttpDelete(uri);
+        } else {
+            final int status = response.getStatusLine().getStatusCode();
+            if (status == HttpStatus.SC_TEMPORARY_REDIRECT) {
+                return RequestBuilder.copy(request).setUri(uri).build();
+            } else {
+                return new HttpGet(uri);
+            }
+        }
+    }
+}

+ 105 - 0
src/main/java/com/sooka/sponest/monitor/dept/domain/SysDept.java

@@ -0,0 +1,105 @@
+package com.sooka.sponest.monitor.dept.domain;
+
+import com.ruoyi.common.core.web.domain.BaseEntity;
+import com.ruoyi.common.datascope.base.domain.BaseBusinessEntity;
+import lombok.Getter;
+import lombok.Setter;
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.Size;
+
+/**
+ * 部门表 sys_dept
+ *
+ * @author ruoyi
+ */
+@Getter
+@Setter
+public class SysDept extends BaseBusinessEntity {
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 部门ID
+     */
+    private Long deptId;
+
+    /**
+     * 用户名称
+     */
+    private String userName;
+
+    /**
+     * 父部门ID
+     */
+    private Long parentId;
+
+    /**
+     * 祖级列表
+     */
+    private String ancestors;
+
+    /**
+     * 部门名称
+     */
+    private String deptName;
+
+
+    public Long getDeptId() {
+        return deptId;
+    }
+
+    public void setDeptId(Long deptId) {
+        this.deptId = deptId;
+    }
+
+
+    public String getUserName() {
+        return userName;
+    }
+
+    public void setUserName(String userName) {
+        this.userName = userName;
+    }
+
+    public Long getParentId() {
+        return parentId;
+    }
+
+    public void setParentId(Long parentId) {
+        this.parentId = parentId;
+    }
+
+    public String getAncestors() {
+        return ancestors;
+    }
+
+    public void setAncestors(String ancestors) {
+        this.ancestors = ancestors;
+    }
+
+    @NotBlank(message = "部门名称不能为空")
+    @Size(min = 0, max = 30, message = "部门名称长度不能超过30个字符")
+    public String getDeptName() {
+        return deptName;
+    }
+
+    public void setDeptName(String deptName) {
+        this.deptName = deptName;
+    }
+
+
+    @Override
+    public String toString() {
+        return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE)
+                .append("deptId", getDeptId())
+                .append("parentId", getParentId())
+                .append("ancestors", getAncestors())
+                .append("deptName", getDeptName())
+                .append("userName", getUserName())
+                .toString();
+    }
+
+
+}

+ 22 - 0
src/main/java/com/sooka/sponest/monitor/dept/mapper/SysDeptMapper.java

@@ -0,0 +1,22 @@
+package com.sooka.sponest.monitor.dept.mapper;
+
+import com.sooka.sponest.monitor.dept.domain.SysDept;
+import org.apache.ibatis.annotations.Param;
+import org.springframework.stereotype.Repository;
+
+import java.util.List;
+
+/**
+ * 部门管理 数据层
+ *
+ * @author ruoyi
+ */
+@Repository
+public interface SysDeptMapper {
+
+    /**
+     * 根据用户名查询dept_id, parent_id, ancestors, dept_name
+     */
+    SysDept findDeptIdByUserName(SysDept selectDo);
+
+}

+ 17 - 0
src/main/java/com/sooka/sponest/monitor/dept/service/ISysDeptService.java

@@ -0,0 +1,17 @@
+package com.sooka.sponest.monitor.dept.service;
+
+import com.sooka.sponest.monitor.dept.domain.SysDept;
+
+/**
+ * 部门管理 服务层
+ *
+ * @author ruoyi
+ */
+public interface ISysDeptService {
+
+    /**
+     * 根据用户名查询dept_id, parent_id, ancestors, dept_name
+     */
+    SysDept findDeptIdByUserName(SysDept selectDo);
+
+}

+ 30 - 0
src/main/java/com/sooka/sponest/monitor/dept/service/impl/SysDeptServiceImpl.java

@@ -0,0 +1,30 @@
+package com.sooka.sponest.monitor.dept.service.impl;
+
+
+import com.sooka.sponest.monitor.dept.domain.SysDept;
+import com.sooka.sponest.monitor.base.service.impl.BaseService;
+import com.sooka.sponest.monitor.dept.mapper.SysDeptMapper;
+import com.sooka.sponest.monitor.dept.service.ISysDeptService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+
+/**
+ * 部门管理 服务实现
+ *
+ * @author ruoyi
+ */
+@Service
+public class SysDeptServiceImpl extends BaseService implements ISysDeptService {
+
+    @Autowired
+    private SysDeptMapper deptMapper;
+
+    @Override
+    public SysDept findDeptIdByUserName(SysDept selectDo) {
+        setSookaDataBase(selectDo);
+        return deptMapper.findDeptIdByUserName(selectDo);
+    }
+
+
+}

+ 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 {
+}

+ 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";
+
+}

+ 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;
+    }
+}

+ 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: 3206
+# Spring
+spring:
+  application:
+    # 应用名称
+    name: sooka-sponest-center-monitor-dahuaLog
+  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}

+ 18 - 0
src/main/resources/mapper/monitor/dahua/CenternonitorTDahuaOperateLogMapper.xml

@@ -0,0 +1,18 @@
+<?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.dahua.mapper.CenternonitorTDahuaOperateLogMapper">
+
+    <insert id="insertBatch" parameterType="int">
+        insert ignore into centernonitor_t_dahua_operate_log (id,record_id,user_name,terminal_ip,mac_addr,channel_name,device_name,
+        operate_name,operate_type,operate_result,service_code,service_name,response_time,detail,behavior,operate_time,device_ip,channel_code,
+        dept_id,parent_id,ancestors,dept_name) values
+        <foreach collection="list" item="item" separator="," index="index">
+            (#{item.id},#{item.recordId},#{item.userName},#{item.terminalIp},#{item.macAddr},#{item.channelName},#{item.deviceName},#{item.operateName},
+                #{item.operateType},#{item.operateResult},#{item.serviceCode},#{item.serviceName},#{item.responseTime},#{item.detail},#{item.behavior},#{item.operateTime},#{item.deviceIp},#{item.channelCode}
+                ,#{item.deptId},#{item.parentId},#{item.ancestors},#{item.deptName})
+        </foreach>
+    </insert>
+
+</mapper>

+ 24 - 0
src/main/resources/mapper/monitor/dahua/CenternonitorTDahuaOperateLogUrlMapper.xml

@@ -0,0 +1,24 @@
+<?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.dahua.mapper.CenternonitorTDahuaOperateLogUrlMapper">
+    
+    <resultMap type="CenternonitorTDahuaOperateLogUrl" id="CenternonitorTDahuaOperateLogResult">
+        <result property="id"    column="id"    />
+        <result property="operateId"    column="operate_id"    />
+        <result property="url"    column="url"    />
+    </resultMap>
+
+    <sql id="selectCenternonitorTDahuaOperateLogUrlVo">
+        select id, record_id, user_name, teminal_ip, mac_addr, channel_name, device_name, operate_name, operate_type, operate_result, service_code, service_name, response_time, detail, behavior, operate_time, create_time from centernonitor_t_dahua_operate_log
+    </sql>
+
+
+    <insert id="insertBatch" parameterType="int">
+        insert ignore into centernonitor_t_dahua_operate_log_url (id,operate_id,url) values
+        <foreach collection="list" item="item" separator="," index="index">
+            (#{item.id},#{operateId},#{url})
+        </foreach>
+    </insert>
+</mapper>

+ 31 - 0
src/main/resources/mapper/monitor/dept/SysDeptMapper.xml

@@ -0,0 +1,31 @@
+<?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.dept.mapper.SysDeptMapper">
+
+    <resultMap type="SysDept" id="SysDeptResult">
+        <id property="deptId" column="dept_id"/>
+        <result property="parentId" column="parent_id"/>
+        <result property="ancestors" column="ancestors"/>
+        <result property="deptName" column="dept_name"/>
+    </resultMap>
+
+    <select id="findDeptIdByUserName" parameterType="SysDept" resultMap="SysDeptResult">
+        SELECT
+            dept.dept_id,
+            dept.parent_id,
+            dept.ancestors,
+            dept.dept_name,
+            su.user_name
+        FROM
+            ${database_system}.sys_user su
+                LEFT JOIN ${database_system}.sys_user_dept ud ON ud.user_id = su.user_id
+                LEFT JOIN ${database_system}.sys_dept dept ON ud.dept_id = dept.dept_id
+        WHERE
+            su.del_flag = 0
+          AND dept.del_flag = 0
+          AND su.user_name = #{userName}
+            LIMIT 1
+    </select>
+</mapper>

BIN
target/center-monitor-quartz.jar


BIN
target/center-monitor-quartz.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: 3206
+# Spring
+spring:
+  application:
+    # 应用名称
+    name: sooka-sponest-center-monitor-dahuaLog
+  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/SookaMonitorDahuaLogApplication.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/dahua/controller/DahuaOperateLogBlackTask.class


BIN
target/classes/com/sooka/sponest/monitor/dahua/controller/DahuaOperateLogWhiteTask.class


BIN
target/classes/com/sooka/sponest/monitor/dahua/domain/CenternonitorTDahuaOperateLog.class


BIN
target/classes/com/sooka/sponest/monitor/dahua/domain/CenternonitorTDahuaOperateLogUrl.class


BIN
target/classes/com/sooka/sponest/monitor/dahua/login/Login.class


BIN
target/classes/com/sooka/sponest/monitor/dahua/login/bean/LoginFirst.class


BIN
target/classes/com/sooka/sponest/monitor/dahua/login/bean/LoginSecond.class


BIN
target/classes/com/sooka/sponest/monitor/dahua/mapper/CenternonitorTDahuaOperateLogMapper.class


BIN
target/classes/com/sooka/sponest/monitor/dahua/mapper/CenternonitorTDahuaOperateLogUrlMapper.class


BIN
target/classes/com/sooka/sponest/monitor/dahua/service/ICenternonitorTDahuaOperateLogService.class


BIN
target/classes/com/sooka/sponest/monitor/dahua/service/impl/CenternonitorTDahuaOperateLogServiceImpl.class


BIN
target/classes/com/sooka/sponest/monitor/dahua/utils/DSSUtils.class


BIN
target/classes/com/sooka/sponest/monitor/dahua/utils/HttpEnum.class


BIN
target/classes/com/sooka/sponest/monitor/dahua/utils/HttpTestUtils$1.class


BIN
target/classes/com/sooka/sponest/monitor/dahua/utils/HttpTestUtils$2.class


BIN
target/classes/com/sooka/sponest/monitor/dahua/utils/HttpTestUtils.class


BIN
target/classes/com/sooka/sponest/monitor/dahua/utils/ImgUtils.class


BIN
target/classes/com/sooka/sponest/monitor/dahua/utils/RestRedirectStrategy.class


BIN
target/classes/com/sooka/sponest/monitor/dahua/utils/bean.class


BIN
target/classes/com/sooka/sponest/monitor/dept/domain/SysDept.class


BIN
target/classes/com/sooka/sponest/monitor/dept/mapper/SysDeptMapper.class


BIN
target/classes/com/sooka/sponest/monitor/dept/service/ISysDeptService.class


BIN
target/classes/com/sooka/sponest/monitor/dept/service/impl/SysDeptServiceImpl.class


BIN
target/classes/com/sooka/sponest/monitor/remoteapi/EnableSookaFeignClients.class


BIN
target/classes/com/sooka/sponest/monitor/remoteapi/RemoveApiBaseService.class


BIN
target/classes/com/sooka/sponest/monitor/remoteapi/fallback/system/RemoteSystemBaseServiceFallbackFactory$1.class


BIN
target/classes/com/sooka/sponest/monitor/remoteapi/fallback/system/RemoteSystemBaseServiceFallbackFactory.class


BIN
target/classes/com/sooka/sponest/monitor/remoteapi/service/ModulesServiceNameContants.class


BIN
target/classes/com/sooka/sponest/monitor/remoteapi/service/system/RemoteService.class


BIN
target/classes/com/sooka/sponest/monitor/util/BeanUtil.class


+ 18 - 0
target/classes/mapper/monitor/dahua/CenternonitorTDahuaOperateLogMapper.xml

@@ -0,0 +1,18 @@
+<?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.dahua.mapper.CenternonitorTDahuaOperateLogMapper">
+
+    <insert id="insertBatch" parameterType="int">
+        insert ignore into centernonitor_t_dahua_operate_log (id,record_id,user_name,terminal_ip,mac_addr,channel_name,device_name,
+        operate_name,operate_type,operate_result,service_code,service_name,response_time,detail,behavior,operate_time,device_ip,channel_code,
+        dept_id,parent_id,ancestors,dept_name) values
+        <foreach collection="list" item="item" separator="," index="index">
+            (#{item.id},#{item.recordId},#{item.userName},#{item.terminalIp},#{item.macAddr},#{item.channelName},#{item.deviceName},#{item.operateName},
+                #{item.operateType},#{item.operateResult},#{item.serviceCode},#{item.serviceName},#{item.responseTime},#{item.detail},#{item.behavior},#{item.operateTime},#{item.deviceIp},#{item.channelCode}
+                ,#{item.deptId},#{item.parentId},#{item.ancestors},#{item.deptName})
+        </foreach>
+    </insert>
+
+</mapper>

+ 24 - 0
target/classes/mapper/monitor/dahua/CenternonitorTDahuaOperateLogUrlMapper.xml

@@ -0,0 +1,24 @@
+<?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.dahua.mapper.CenternonitorTDahuaOperateLogUrlMapper">
+    
+    <resultMap type="CenternonitorTDahuaOperateLogUrl" id="CenternonitorTDahuaOperateLogResult">
+        <result property="id"    column="id"    />
+        <result property="operateId"    column="operate_id"    />
+        <result property="url"    column="url"    />
+    </resultMap>
+
+    <sql id="selectCenternonitorTDahuaOperateLogUrlVo">
+        select id, record_id, user_name, teminal_ip, mac_addr, channel_name, device_name, operate_name, operate_type, operate_result, service_code, service_name, response_time, detail, behavior, operate_time, create_time from centernonitor_t_dahua_operate_log
+    </sql>
+
+
+    <insert id="insertBatch" parameterType="int">
+        insert ignore into centernonitor_t_dahua_operate_log_url (id,operate_id,url) values
+        <foreach collection="list" item="item" separator="," index="index">
+            (#{item.id},#{operateId},#{url})
+        </foreach>
+    </insert>
+</mapper>

+ 31 - 0
target/classes/mapper/monitor/dept/SysDeptMapper.xml

@@ -0,0 +1,31 @@
+<?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.dept.mapper.SysDeptMapper">
+
+    <resultMap type="SysDept" id="SysDeptResult">
+        <id property="deptId" column="dept_id"/>
+        <result property="parentId" column="parent_id"/>
+        <result property="ancestors" column="ancestors"/>
+        <result property="deptName" column="dept_name"/>
+    </resultMap>
+
+    <select id="findDeptIdByUserName" parameterType="SysDept" resultMap="SysDeptResult">
+        SELECT
+            dept.dept_id,
+            dept.parent_id,
+            dept.ancestors,
+            dept.dept_name,
+            su.user_name
+        FROM
+            ${database_system}.sys_user su
+                LEFT JOIN ${database_system}.sys_user_dept ud ON ud.user_id = su.user_id
+                LEFT JOIN ${database_system}.sys_dept dept ON ud.dept_id = dept.dept_id
+        WHERE
+            su.del_flag = 0
+          AND dept.del_flag = 0
+          AND su.user_name = #{userName}
+            LIMIT 1
+    </select>
+</mapper>

+ 0 - 0
target/maven-archiver/pom.properties


برخی فایل ها در این مقایسه diff نمایش داده نمی شوند زیرا تعداد فایل ها بسیار زیاد است