Admin 3 years ago
parent
commit
c649c99abe
100 changed files with 4383 additions and 0 deletions
  1. 8 0
      .idea/.gitignore
  2. 15 0
      .idea/compiler.xml
  3. 7 0
      .idea/encodings.xml
  4. 25 0
      .idea/jarRepositories.xml
  5. 12 0
      .idea/misc.xml
  6. 124 0
      .idea/uiDesigner.xml
  7. 6 0
      .idea/vcs.xml
  8. 214 0
      pom.xml
  9. 17 0
      src/main/java/com/chuanghai/student_portrait/StudentPortraitApplication.java
  10. 299 0
      src/main/java/com/chuanghai/student_portrait/config/BaseClass.java
  11. 106 0
      src/main/java/com/chuanghai/student_portrait/config/ChannelDetailInfos.java
  12. 137 0
      src/main/java/com/chuanghai/student_portrait/config/FacePassRecord.java
  13. 21 0
      src/main/java/com/chuanghai/student_portrait/config/PageConfig.java
  14. 20 0
      src/main/java/com/chuanghai/student_portrait/config/RestTemplastConfig.java
  15. 235 0
      src/main/java/com/chuanghai/student_portrait/config/SubscriptionConfig.java
  16. 82 0
      src/main/java/com/chuanghai/student_portrait/config/SwaggerConfig.java
  17. 54 0
      src/main/java/com/chuanghai/student_portrait/config/TokenConfig.java
  18. 13 0
      src/main/java/com/chuanghai/student_portrait/controller/AffinityScoreController.java
  19. 34 0
      src/main/java/com/chuanghai/student_portrait/controller/AirConditioningController.java
  20. 40 0
      src/main/java/com/chuanghai/student_portrait/controller/ConsumeController.java
  21. 120 0
      src/main/java/com/chuanghai/student_portrait/controller/CountController.java
  22. 35 0
      src/main/java/com/chuanghai/student_portrait/controller/DormController.java
  23. 29 0
      src/main/java/com/chuanghai/student_portrait/controller/ElectricityController.java
  24. 47 0
      src/main/java/com/chuanghai/student_portrait/controller/FaceDiscernController.java
  25. 63 0
      src/main/java/com/chuanghai/student_portrait/controller/ForeWarningReportFormController.java
  26. 31 0
      src/main/java/com/chuanghai/student_portrait/controller/ForewarningController.java
  27. 300 0
      src/main/java/com/chuanghai/student_portrait/controller/GetSchoolUserController.java
  28. 30 0
      src/main/java/com/chuanghai/student_portrait/controller/HotWaterController.java
  29. 159 0
      src/main/java/com/chuanghai/student_portrait/controller/NewSchooluserController.java
  30. 28 0
      src/main/java/com/chuanghai/student_portrait/controller/OldSchooluserController.java
  31. 33 0
      src/main/java/com/chuanghai/student_portrait/controller/SearchByImageController.java
  32. 174 0
      src/main/java/com/chuanghai/student_portrait/controller/SubscriptionController.java
  33. 60 0
      src/main/java/com/chuanghai/student_portrait/entity/Access.java
  34. 26 0
      src/main/java/com/chuanghai/student_portrait/entity/AffinityScore.java
  35. 35 0
      src/main/java/com/chuanghai/student_portrait/entity/AirConditioning.java
  36. 12 0
      src/main/java/com/chuanghai/student_portrait/entity/ColdWater.java
  37. 66 0
      src/main/java/com/chuanghai/student_portrait/entity/Consume.java
  38. 22 0
      src/main/java/com/chuanghai/student_portrait/entity/Dorm.java
  39. 18 0
      src/main/java/com/chuanghai/student_portrait/entity/Electricity.java
  40. 49 0
      src/main/java/com/chuanghai/student_portrait/entity/Equipment.java
  41. 25 0
      src/main/java/com/chuanghai/student_portrait/entity/ExamNumbers.java
  42. 76 0
      src/main/java/com/chuanghai/student_portrait/entity/FaceDiscern.java
  43. 81 0
      src/main/java/com/chuanghai/student_portrait/entity/ForeWarningEntity.java
  44. 24 0
      src/main/java/com/chuanghai/student_portrait/entity/Forewarning.java
  45. 62 0
      src/main/java/com/chuanghai/student_portrait/entity/HotWater.java
  46. 66 0
      src/main/java/com/chuanghai/student_portrait/entity/NewSchooluser.java
  47. 47 0
      src/main/java/com/chuanghai/student_portrait/entity/OldSchooluser.java
  48. 10 0
      src/main/java/com/chuanghai/student_portrait/entity/Province.java
  49. 15 0
      src/main/java/com/chuanghai/student_portrait/entity/Stall.java
  50. 59 0
      src/main/java/com/chuanghai/student_portrait/entity/Student.java
  51. 14 0
      src/main/java/com/chuanghai/student_portrait/entity/StudentSheet.java
  52. 58 0
      src/main/java/com/chuanghai/student_portrait/entity/User.java
  53. 44 0
      src/main/java/com/chuanghai/student_portrait/entity/Warning.java
  54. 19 0
      src/main/java/com/chuanghai/student_portrait/entity/dto/AccessCountDto.java
  55. 17 0
      src/main/java/com/chuanghai/student_portrait/entity/dto/ConsumeDto.java
  56. 11 0
      src/main/java/com/chuanghai/student_portrait/entity/dto/ConsumeTotalMoneyDto.java
  57. 9 0
      src/main/java/com/chuanghai/student_portrait/entity/dto/DistrictDto.java
  58. 13 0
      src/main/java/com/chuanghai/student_portrait/entity/dto/EnergyDto.java
  59. 10 0
      src/main/java/com/chuanghai/student_portrait/entity/dto/PersonConsumDto.java
  60. 16 0
      src/main/java/com/chuanghai/student_portrait/entity/dto/PersonalTrackDto.java
  61. 21 0
      src/main/java/com/chuanghai/student_portrait/exception/BaseErrorInfoInterface.java
  62. 86 0
      src/main/java/com/chuanghai/student_portrait/exception/BizException.java
  63. 44 0
      src/main/java/com/chuanghai/student_portrait/exception/CommonEnum.java
  64. 106 0
      src/main/java/com/chuanghai/student_portrait/exception/GlobalExceptionHandler.java
  65. 125 0
      src/main/java/com/chuanghai/student_portrait/exception/ResultValue.java
  66. 39 0
      src/main/java/com/chuanghai/student_portrait/exception/validatorConfiguration.java
  67. 15 0
      src/main/java/com/chuanghai/student_portrait/mapper/AccessMapper.java
  68. 9 0
      src/main/java/com/chuanghai/student_portrait/mapper/AffinityScoreMapper.java
  69. 14 0
      src/main/java/com/chuanghai/student_portrait/mapper/AirConditioningMapper.java
  70. 9 0
      src/main/java/com/chuanghai/student_portrait/mapper/ColdWaterMapper.java
  71. 21 0
      src/main/java/com/chuanghai/student_portrait/mapper/ConsumeMapper.java
  72. 14 0
      src/main/java/com/chuanghai/student_portrait/mapper/DormMapper.java
  73. 9 0
      src/main/java/com/chuanghai/student_portrait/mapper/ElectricityMapper.java
  74. 14 0
      src/main/java/com/chuanghai/student_portrait/mapper/ExamNumbersMapper.java
  75. 9 0
      src/main/java/com/chuanghai/student_portrait/mapper/FaceDiscernMapper.java
  76. 9 0
      src/main/java/com/chuanghai/student_portrait/mapper/ForewarningMapper.java
  77. 9 0
      src/main/java/com/chuanghai/student_portrait/mapper/HotWaterMapper.java
  78. 16 0
      src/main/java/com/chuanghai/student_portrait/mapper/NewSchooluserMapper.java
  79. 14 0
      src/main/java/com/chuanghai/student_portrait/mapper/OldSchooluserMapper.java
  80. 9 0
      src/main/java/com/chuanghai/student_portrait/mapper/ProvinceMapper.java
  81. 14 0
      src/main/java/com/chuanghai/student_portrait/mapper/StallMapper.java
  82. 9 0
      src/main/java/com/chuanghai/student_portrait/mapper/StudentSheetMapper.java
  83. 57 0
      src/main/java/com/chuanghai/student_portrait/response/BaseResponse.java
  84. 6 0
      src/main/java/com/chuanghai/student_portrait/response/enums/Code.java
  85. 32 0
      src/main/java/com/chuanghai/student_portrait/response/enums/StatusEnum.java
  86. 12 0
      src/main/java/com/chuanghai/student_portrait/service/AccessService.java
  87. 7 0
      src/main/java/com/chuanghai/student_portrait/service/AffinityScoreService.java
  88. 12 0
      src/main/java/com/chuanghai/student_portrait/service/AirConditioningService.java
  89. 7 0
      src/main/java/com/chuanghai/student_portrait/service/ColdWaterService.java
  90. 19 0
      src/main/java/com/chuanghai/student_portrait/service/ConsumeService.java
  91. 16 0
      src/main/java/com/chuanghai/student_portrait/service/DormService.java
  92. 14 0
      src/main/java/com/chuanghai/student_portrait/service/ElectricityService.java
  93. 12 0
      src/main/java/com/chuanghai/student_portrait/service/ExamNumbersService.java
  94. 22 0
      src/main/java/com/chuanghai/student_portrait/service/FaceDiscernService.java
  95. 17 0
      src/main/java/com/chuanghai/student_portrait/service/ForewarningService.java
  96. 12 0
      src/main/java/com/chuanghai/student_portrait/service/HotWaterService.java
  97. 20 0
      src/main/java/com/chuanghai/student_portrait/service/NewSchooluserService.java
  98. 14 0
      src/main/java/com/chuanghai/student_portrait/service/OldSchooluserService.java
  99. 7 0
      src/main/java/com/chuanghai/student_portrait/service/ProvinceService.java
  100. 0 0
      src/main/java/com/chuanghai/student_portrait/service/StallService.java

+ 8 - 0
.idea/.gitignore

@@ -0,0 +1,8 @@
+# Default ignored files
+/shelf/
+/workspace.xml
+# Editor-based HTTP Client requests
+/httpRequests/
+# Datasource local storage ignored files
+/dataSources/
+/dataSources.local.xml

+ 15 - 0
.idea/compiler.xml

@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="CompilerConfiguration">
+    <annotationProcessing>
+      <profile default="true" name="Default" enabled="true" />
+      <profile name="Maven default annotation processors profile" enabled="true">
+        <sourceOutputDir name="target/generated-sources/annotations" />
+        <sourceTestOutputDir name="target/generated-test-sources/test-annotations" />
+        <outputRelativeToContentRoot value="true" />
+        <module name="student_portraits_api" />
+        <module name="student_portrait" />
+      </profile>
+    </annotationProcessing>
+  </component>
+</project>

+ 7 - 0
.idea/encodings.xml

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

+ 25 - 0
.idea/jarRepositories.xml

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

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

+ 214 - 0
pom.xml

@@ -0,0 +1,214 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <groupId>com.chuanghai</groupId>
+    <artifactId>student_portrait</artifactId>
+    <version>0.0.1-SNAPSHOT</version>
+    <name>student_portrait</name>
+    <description>student_portrait</description>
+
+    <properties>
+        <java.version>1.8</java.version>
+        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
+        <spring-boot.version>2.3.7.RELEASE</spring-boot.version>
+    </properties>
+
+    <dependencies>
+
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter</artifactId>
+        </dependency>
+        <!-- SpringBootweb开发起步依赖 -->
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-web</artifactId>
+            <!--<scope>compile</scope>-->
+        </dependency>
+
+        <!-- Mybatis-plus起步依赖 -->
+        <dependency>
+            <groupId>com.baomidou</groupId>
+            <artifactId>mybatis-plus-boot-starter</artifactId>
+            <version>3.5.2</version>
+        </dependency>
+
+        <!-- lombok -->
+        <dependency>
+            <groupId>org.projectlombok</groupId>
+            <artifactId>lombok</artifactId>
+            <version>1.18.24</version>
+            <scope>provided</scope>
+        </dependency>
+
+        <!-- fastjson -->
+        <dependency>
+            <groupId>com.alibaba</groupId>
+            <artifactId>fastjson</artifactId>
+            <version>2.0.12</version>
+        </dependency>
+
+        <!-- commons工具组件 -->
+        <dependency>
+            <groupId>commons-lang</groupId>
+            <artifactId>commons-lang</artifactId>
+            <version>2.6</version>
+        </dependency>
+
+
+        <dependency>
+            <groupId>commons-fileupload</groupId>
+            <artifactId>commons-fileupload</artifactId>
+            <version>1.4</version>
+        </dependency>
+
+        <dependency>
+            <groupId>commons-io</groupId>
+            <artifactId>commons-io</artifactId>
+            <version>2.6</version>
+        </dependency>
+
+        <!-- MySQL数据库连接驱动 -->
+        <dependency>
+            <groupId>mysql</groupId>
+            <artifactId>mysql-connector-java</artifactId>
+            <version>8.0.17</version>
+        </dependency>
+
+        <!-- druid起步依赖 -->
+        <dependency>
+            <groupId>com.alibaba</groupId>
+            <artifactId>druid-spring-boot-starter</artifactId>
+            <version>1.1.23</version>
+        </dependency>
+
+        <!--    集成easypoi组件 .导出excel http://easypoi.mydoc.io/ -->
+        <dependency>
+            <groupId>cn.afterturn</groupId>
+            <artifactId>easypoi-base</artifactId>
+            <version>3.2.0</version>
+        </dependency>
+        <dependency>
+            <groupId>cn.afterturn</groupId>
+            <artifactId>easypoi-web</artifactId>
+            <version>3.2.0</version>
+        </dependency>
+        <dependency>
+            <groupId>cn.afterturn</groupId>
+            <artifactId>easypoi-annotation</artifactId>
+            <version>3.2.0</version>
+        </dependency>
+        <dependency>
+            <groupId>com.alibaba</groupId>
+            <artifactId>easyexcel</artifactId>
+            <version>2.1.6</version>
+        </dependency>
+
+
+
+
+        <!--  用于执行python脚本-->
+        <dependency>
+            <groupId>org.python</groupId>
+            <artifactId>jython-standalone</artifactId>
+            <version>2.7.2</version>
+        </dependency>
+
+        <dependency>
+            <groupId>org.eclipse.jetty</groupId>
+            <artifactId>jetty-alpn-client</artifactId>
+        </dependency>
+
+        <!-- swagger -->
+        <dependency>
+            <groupId>io.springfox</groupId>
+            <artifactId>springfox-spring-web</artifactId>
+            <version>3.0.0</version>
+        </dependency>
+        <dependency>
+            <groupId>io.springfox</groupId>
+            <artifactId>springfox-swagger2</artifactId>
+            <version>3.0.0</version>
+        </dependency>
+        <dependency>
+            <groupId>io.springfox</groupId>
+            <artifactId>springfox-swagger-ui</artifactId>
+            <version>2.9.2</version>
+        </dependency>
+
+
+        <dependency>
+            <groupId>org.apache.httpcomponents</groupId>
+            <artifactId>httpclient</artifactId>
+            <version>4.5.13</version>
+        </dependency>
+
+
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-test</artifactId>
+            <scope>test</scope>
+            <exclusions>
+                <exclusion>
+                    <groupId>org.junit.vintage</groupId>
+                    <artifactId>junit-vintage-engine</artifactId>
+                </exclusion>
+            </exclusions>
+        </dependency>
+        <dependency>
+            <groupId>com.jayway.jsonpath</groupId>
+            <artifactId>json-path</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.hibernate.validator</groupId>
+            <artifactId>hibernate-validator</artifactId>
+            <version>6.2.3.Final</version>
+        </dependency>
+    </dependencies>
+
+    <dependencyManagement>
+        <dependencies>
+            <dependency>
+                <groupId>org.springframework.boot</groupId>
+                <artifactId>spring-boot-dependencies</artifactId>
+                <version>${spring-boot.version}</version>
+                <type>pom</type>
+                <scope>import</scope>
+            </dependency>
+        </dependencies>
+    </dependencyManagement>
+
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-compiler-plugin</artifactId>
+                <version>3.8.1</version>
+                <configuration>
+                    <source>1.8</source>
+                    <target>1.8</target>
+                    <encoding>UTF-8</encoding>
+                </configuration>
+            </plugin>
+            <plugin>
+                <groupId>org.springframework.boot</groupId>
+                <artifactId>spring-boot-maven-plugin</artifactId>
+                <version>2.3.7.RELEASE</version>
+                <configuration>
+                    <mainClass>com.chuanghai.student_portrait.StudentPortraitApplication</mainClass>
+                </configuration>
+                <executions>
+                    <execution>
+                        <id>repackage</id>
+                        <goals>
+                            <goal>repackage</goal>
+                        </goals>
+                    </execution>
+                </executions>
+            </plugin>
+        </plugins>
+    </build>
+
+</project>

+ 17 - 0
src/main/java/com/chuanghai/student_portrait/StudentPortraitApplication.java

@@ -0,0 +1,17 @@
+package com.chuanghai.student_portrait;
+
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.scheduling.annotation.EnableScheduling;
+import org.springframework.transaction.event.TransactionalEventListener;
+
+@SpringBootApplication
+@EnableScheduling//开启定时任务
+public class StudentPortraitApplication {
+
+    public static void main(String[] args) {
+        SpringApplication.run(StudentPortraitApplication.class, args);
+
+    }
+
+}

+ 299 - 0
src/main/java/com/chuanghai/student_portrait/config/BaseClass.java

@@ -0,0 +1,299 @@
+package com.chuanghai.student_portrait.config;
+
+
+import org.apache.http.HttpEntity;
+import org.apache.http.HttpResponse;
+import org.apache.http.ParseException;
+import org.apache.http.client.config.RequestConfig;
+import org.apache.http.client.methods.CloseableHttpResponse;
+import org.apache.http.client.methods.HttpGet;
+import org.apache.http.client.methods.HttpPost;
+import org.apache.http.client.methods.HttpPut;
+import org.apache.http.entity.StringEntity;
+import org.apache.http.impl.client.CloseableHttpClient;
+import org.apache.http.impl.client.HttpClients;
+import org.apache.http.util.EntityUtils;
+import org.springframework.util.DigestUtils;
+
+import java.io.IOException;
+import java.text.DecimalFormat;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+public class BaseClass {
+
+    //NVR基本信息
+    //private static String nvrip = "192.168.0.101";//nvr 地址
+    private static String nvrip = "172.22.45.25";//nvr 地址
+
+    private static String nvrport = "80";//nvr端口
+    private static String nvruname = "admin";//登录用户名
+    private static String nvrpwd = "ncjtxy@2021";//登录密码
+    //登录NVR使用的url,三方所有接口调用都需要用到
+    private static String urlString = "/LAPI/V1.0/System/Security/Login";
+
+
+    //报文头相关字段默认值,目前这些值都是写死的,可不用关注;
+    private static String UserAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:50.0) Gecko/20100101 Firefox/50.0";
+    private static String ContentType = "application/json";
+    private static String AcceptEncoding = "gzip, deflate";
+    private static String AcceptLanguage = "zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3";
+    private static String Connection = "Close";
+
+
+    public static String getNvrUrl() {
+        return "http://" + nvrip + ":" + nvrport;
+    }
+
+    public static String getNvrName() {
+        return nvruname;
+    }
+
+    public static String getNvrPwd() {
+        return nvrpwd;
+    }
+
+    public static String getLoginUrl() {
+        return "http://" + nvrip + ":" + nvrport + urlString;
+    }
+
+    //拼装报文头,目前LAPI调用,报文头除鉴权信息外,其他都是写死的
+    public static Map getHeadInfo() {
+        Map<String, String> headinfo = new HashMap<String, String>();
+        headinfo.put("User-Agent", UserAgent);
+        headinfo.put("Content-Type", ContentType);
+        headinfo.put("Accept-Encoding", AcceptEncoding);
+        headinfo.put("Accept-Language", AcceptLanguage);
+        headinfo.put("Host", nvrip);
+        headinfo.put("Connection", Connection);
+
+        //三方登录时无需加cookie字段,只有web登录时,需要带
+        //headinfo.put("Cookie", "len=0; WebLoginHandle=10081124");
+
+        return headinfo;
+    }
+
+    //put方法,不带鉴权信息时Authorization参数使用“”(空字符串),不带body时jsonBody使用“”(空字符串)
+    public static CloseableHttpResponse doPut(CloseableHttpClient httpClient, String url, String Authorization, String jsonBody) {
+        //获取报文头,目前LAPI调用,报文头除鉴权信息外,其他都是写死的
+        Map<String, String> headinfo = getHeadInfo();
+
+        //如果有鉴权信息则放入报文头中
+        if (Authorization.indexOf("response") > 0) {
+            headinfo.put("Authorization", Authorization);
+        }
+
+        CloseableHttpResponse httpResponse = null;
+
+        HttpPut httpPut = new HttpPut(url);
+        for (String s : headinfo.keySet()) {
+            httpPut.addHeader(s, headinfo.get(s));
+        }
+        if (!jsonBody.equals("")) {
+            //给httppost对象设置json字符串参数
+            StringEntity httpEntity = new StringEntity(jsonBody, "utf-8");
+
+            //传参
+            httpPut.setEntity(httpEntity);
+        }
+
+        RequestConfig requestConfig = RequestConfig.custom().setConnectTimeout(6000)// 连接主机服务超时时间
+                .setConnectionRequestTimeout(6000)// 请求超时时间
+                .setSocketTimeout(6000)// 数据读取超时时间
+                .build();
+        try {
+            // 为httpPut实例设置配置
+            httpPut.setConfig(requestConfig);
+            // 执行Put请求得到返回对象
+            httpResponse = httpClient.execute(httpPut);
+        } catch (IOException e) {
+            // TODO Auto-generated catch block
+            e.printStackTrace();
+        }
+        return httpResponse;
+    }
+
+    //post方法,Authorization必填
+    public static CloseableHttpResponse doPost(CloseableHttpClient httpClient, String url, String Authorization, String json) {
+        //获取报文头,目前LAPI调用,报文头除鉴权信息外,其他都是写死的
+        Map<String, String> headinfo = getHeadInfo();
+
+        //如果有鉴权信息则放入报文头中
+        if (Authorization.indexOf("response") > 0) {
+            headinfo.put("Authorization", Authorization);
+        }
+
+        CloseableHttpResponse httpResponse = null;
+
+        HttpPost httpPost = new HttpPost(url);
+        for (String s : headinfo.keySet()) {
+            httpPost.addHeader(s, headinfo.get(s));
+        }
+
+        //给httppost对象设置json字符串参数
+        StringEntity httpEntity = new StringEntity(json, "utf-8");
+
+        //传参
+        httpPost.setEntity(httpEntity);
+
+        RequestConfig requestConfig = RequestConfig.custom().setConnectTimeout(6000)// 连接主机服务超时时间
+                .setConnectionRequestTimeout(6000)// 请求超时时间
+                .setSocketTimeout(6000)// 数据读取超时时间
+                .build();
+        try {
+            // 为httpPost实例设置配置
+            httpPost.setConfig(requestConfig);
+            // 执行Post请求得到返回对象
+            httpResponse = httpClient.execute(httpPost);
+        } catch (IOException e) {
+            // TODO Auto-generated catch block
+            e.printStackTrace();
+        }
+        return httpResponse;
+    }
+
+    //get方法,Authorization必填
+    public static CloseableHttpResponse doGet(CloseableHttpClient httpClient, String url, String Authorization) {
+        //获取报文头,目前LAPI调用,报文头除鉴权信息外,其他都是写死的
+        Map<String, String> headinfo = getHeadInfo();
+
+        //如果有鉴权信息则放入报文头中
+        if (Authorization.indexOf("response") > 0) {
+            headinfo.put("Authorization", Authorization);
+        }
+
+        CloseableHttpResponse httpResponse = null;
+
+        HttpGet httpGet = new HttpGet(url);
+        for (String s : headinfo.keySet()) {
+            httpGet.addHeader(s, headinfo.get(s));
+        }
+        RequestConfig requestConfig = RequestConfig.custom().setConnectTimeout(6000)// 连接主机服务超时时间
+                .setConnectionRequestTimeout(6000)// 请求超时时间
+                .setSocketTimeout(6000)// 数据读取超时时间
+                .build();
+        try {
+            // 为httpGet实例设置配置
+            httpGet.setConfig(requestConfig);
+            // 执行Get请求得到返回对象
+            httpResponse = httpClient.execute(httpGet);
+        } catch (IOException e) {
+            // TODO Auto-generated catch block
+            e.printStackTrace();
+        }
+        return httpResponse;
+    }
+
+    //计算cnonce值,cnonce用于鉴权
+    public static String getCnonce() {
+        double d = Math.random();
+//        double d1 = new Date().getTime() / 1000;
+        double d1 = System.currentTimeMillis()/ 1000;
+        double x = d * d1;
+        DecimalFormat df = new DecimalFormat("#");//四舍五入取整
+        return df.format(x);
+    }
+
+    //计算登录报文头中鉴权信息中的response值
+    public static String getAuthRespInfo(String uname, String upwd, String url, String nonce, String cnonce, String reqmode) {
+
+        //计算HA1
+        String str1 = uname + ":" + "NVRDVR" + ":" + upwd;
+        String ha1 = DigestUtils.md5DigestAsHex(str1.getBytes()).toLowerCase();
+        //String ha1 = md5.toMd5(str1).toLowerCase();
+        //计算HA2
+        String str2 = reqmode + ":" + url;
+        String ha2 = DigestUtils.md5DigestAsHex(str2.getBytes()).toLowerCase();
+        //String ha2 = md5.toMd5(str2).toLowerCase();
+        //计算HA3
+        String str3 = ha1 + ":" + nonce + ":" + "00000001" + ":" + cnonce + ":" + "auth" + ":" + ha2;
+        String ha3 = DigestUtils.md5DigestAsHex(str3.getBytes()).toLowerCase();
+        //String ha3 = md5.toMd5(str3).toLowerCase();
+
+        //拼接报文头中的鉴权信息
+        String Authorization = String.format("Digest username=\"%s\", realm=\"NVRDVR\", qop=auth,nonce=\"%s\""
+                + ",algorithm=MD5,cnonce=\"%s\", nc=00000001,uri=\"%s\", response=\"%s\"", uname, nonce, cnonce, url, ha3);
+        return Authorization;
+    }
+
+
+    //正则表达式提取字符串
+    public static String getMatch(String regex, String source) {
+        String rel = "";
+        Pattern pattern = Pattern.compile(regex);
+        Matcher matcher = pattern.matcher(source);
+        while (matcher.find()) {
+            rel = matcher.group(1);
+        }
+        return rel;
+    }
+
+    //获取response中header中字段的值,例如getHeaderinfo(resp,"WWW-Authenticate")从一个resp的报文头中获取WWW-Authenticate的值
+    public static String getHeaderinfo(HttpResponse resp, String keyword) {
+        return resp.getFirstHeader(keyword).getValue();
+
+    }
+
+    //运行,用于测试类正确行用,可以不用关注。
+    public static void main(String[] args) {
+        String cururl = getNvrUrl() + urlString;
+        CloseableHttpClient httpClient = HttpClients.custom().build();
+
+        //不带鉴权信息发送请求,获取nonce
+        CloseableHttpResponse resp = doPut(httpClient, cururl, "", "");
+
+        //从返回中获取nonce值
+        String nonce = getMatch("nonce=\"(.*)\",stale", getHeaderinfo(resp, "WWW-Authenticate"));
+
+        //生成cnonce
+        String cnonce = getCnonce();
+
+        //生成报文头中Authorization字段的值
+        String curAuthorization = getAuthRespInfo(nvruname, nvrpwd, urlString, nonce, cnonce, "PUT");
+        System.out.println("curAuthorization = " + curAuthorization);
+
+        //带鉴权信息再次调用接口
+        CloseableHttpResponse resp2 = doPut(httpClient, cururl, curAuthorization, "");
+        System.out.println("resp2 = " + resp2);
+        HttpEntity entity = resp2.getEntity();
+
+        try {
+            String responString = EntityUtils.toString(entity);
+            //body中返回信息为Succeed,code为0即为登录成功
+            System.out.println(responString);
+        } catch (ParseException | IOException e) {
+            // TODO Auto-generated catch block
+            e.printStackTrace();
+        } finally {
+            // 关闭相关资源
+            if (null != resp) {
+                try {
+                    resp.close();
+                } catch (IOException e) {
+                    e.printStackTrace();
+                }
+            }
+            if (null != resp2) {
+                try {
+                    resp2.close();
+                } catch (IOException e) {
+                    e.printStackTrace();
+                }
+            }
+            if (null != httpClient) {
+                try {
+                    httpClient.close();
+                } catch (IOException e) {
+                    e.printStackTrace();
+                }
+            }
+
+        }
+
+    }
+
+
+}

+ 106 - 0
src/main/java/com/chuanghai/student_portrait/config/ChannelDetailInfos.java

@@ -0,0 +1,106 @@
+package com.chuanghai.student_portrait.config;
+
+/**
+ * @Author: bingo
+ * @Date: 2022/4/28 星期四 16:56
+ * @Description: com.chuanghai.recognition.config
+ * @version: 1.0
+ */
+
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import org.apache.http.HttpEntity;
+import org.apache.http.ParseException;
+import org.apache.http.client.methods.CloseableHttpResponse;
+import org.apache.http.impl.client.CloseableHttpClient;
+import org.apache.http.impl.client.HttpClients;
+import org.apache.http.util.EntityUtils;
+
+import java.io.IOException;
+
+public class ChannelDetailInfos extends BaseClass {
+
+    //ChannelDetailInfo接口信息
+    private static String urlString = "/LAPI/V1.0/Channels/System/ChannelDetailInfos";
+    private static String requestMode = "GET";
+
+    public static String channelDetailInfos() {
+        String cururl = getNvrUrl() + urlString;
+        CloseableHttpClient httpClient = HttpClients.custom().build();
+
+        String channeID = "";
+
+        //不带鉴权信息调用login,获取nonce;调用业务接口时必须先调用/LAPI/V1.0/System/Security/Login
+        CloseableHttpResponse resp = doPut(httpClient, getLoginUrl(), "", "");
+
+        //从第一次调用中获取nonce值
+        String nonce = getMatch("nonce=\"(.*)\",stale", getHeaderinfo(resp, "WWW-Authenticate"));
+        //生成cnonce
+        String cnonce = getCnonce();
+
+        //计算报文头中Authorization字段信息
+        String curAuthorization = getAuthRespInfo(getNvrName(), getNvrPwd(), urlString, nonce, cnonce, requestMode);
+
+        //带鉴权信息调用业务接口
+        CloseableHttpResponse resp2 = doGet(httpClient, cururl, curAuthorization);
+        HttpEntity entity = resp2.getEntity();
+
+        try {
+            String responString = EntityUtils.toString(entity);
+
+            //解析response中body,获取相关字段的值
+            JSONObject body = JSONObject.parseObject(responString);
+            JSONObject response = JSONObject.parseObject(body.getString("Response"));
+            String ResponseString = response.getString("ResponseString");
+            String data = response.getString("Data");
+            if (ResponseString.equals("Succeed")) {
+                JSONObject jsonData = JSONObject.parseObject(data);
+                //获取查询记录的总条数
+                String nums = jsonData.get("Nums").toString();
+
+                JSONArray jsonArray = jsonData.getJSONArray("DetailInfos");
+                for (int i = 0; i < jsonArray.size(); i++) {
+                    channeID += jsonArray.getJSONObject(i).get("ID").toString() + ",";
+                }
+            }
+            channeID = channeID.substring(0, channeID.lastIndexOf(","));
+
+            //body中返回信息为Succeed,code为0即为调用成功
+        } catch (ParseException | IOException e) {
+            // TODO Auto-generated catch block
+            e.printStackTrace();
+        } finally {
+            // 关闭相关资源
+            if (null != resp) {
+                try {
+                    resp.close();
+                } catch (IOException e) {
+                    e.printStackTrace();
+                }
+            }
+            if (null != resp2) {
+                try {
+                    resp2.close();
+                } catch (IOException e) {
+                    e.printStackTrace();
+                }
+            }
+            if (null != httpClient) {
+                try {
+                    httpClient.close();
+                } catch (IOException e) {
+                    e.printStackTrace();
+                }
+            }
+
+        }
+        return channeID;
+    }
+
+
+    public static void main(String[] args) {
+        String s = ChannelDetailInfos.channelDetailInfos();
+        System.out.println(s);
+    }
+
+}

+ 137 - 0
src/main/java/com/chuanghai/student_portrait/config/FacePassRecord.java

@@ -0,0 +1,137 @@
+package com.chuanghai.student_portrait.config;
+
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.chuanghai.student_portrait.utils.Base64Utils;
+import com.chuanghai.student_portrait.utils.DateUtils;
+import com.chuanghai.student_portrait.utils.FileUtil;
+import com.chuanghai.student_portrait.utils.vo.UniviewVO;
+import org.apache.http.HttpEntity;
+import org.apache.http.client.methods.CloseableHttpResponse;
+import org.apache.http.impl.client.CloseableHttpClient;
+import org.apache.http.impl.client.HttpClients;
+import org.apache.http.util.EntityUtils;
+
+import java.io.IOException;
+import java.util.Date;
+import java.util.List;
+
+public class FacePassRecord extends BaseClass {
+
+    //人脸识别接口信息
+    private static String urlString = "/LAPI/V1.0/Smart/Face/PassRecord";
+    private static String requestMode = "POST";
+
+
+    /**
+     * 调用宇视接口查询人脸识别记录
+     *
+     * @param univiewVOList
+     * @param requestMode
+     * @param reqBody
+     * @return
+     */
+    public static List<UniviewVO> passRecord(List<UniviewVO> univiewVOList, String requestMode, String reqBody) {
+        String url = getNvrUrl() + urlString;
+        CloseableHttpClient httpClient = HttpClients.custom().build();
+
+        JSONObject jsonOParam = JSONObject.parseObject(reqBody);
+        int offset = Integer.parseInt(jsonOParam.get("Offset").toString());
+        int total = 0;
+        int num = 0;
+
+
+        //不带鉴权信息调用login,获取nonce;调用接口时必须调用/LAPI/V1.0/System/Security/Login
+        CloseableHttpResponse resp = doPut(httpClient, getLoginUrl(), "", "");
+
+        //从第一次调用中获取nonce值
+        String nonce = getMatch("nonce=\"(.*)\",stale", getHeaderinfo(resp, "WWW-Authenticate"));
+        //生成cnonce
+        String cnonce = getCnonce();
+
+        //计算报文头中Authorization字段信息
+        String curAuthorization = getAuthRespInfo(getNvrName(), getNvrPwd(), urlString, nonce, cnonce, requestMode);
+
+        //System.out.println(curAuthorization);
+
+        CloseableHttpResponse resp2;
+        //带鉴权信息调用业务接口
+        if (requestMode.equals("POST")) {
+            resp2 = doPost(httpClient, url, curAuthorization, reqBody);
+        } else {
+            resp2 = doPut(httpClient, url, curAuthorization, reqBody);
+        }
+        HttpEntity entity = resp2.getEntity();
+        try {
+            String responString = EntityUtils.toString(entity);
+            //解析response中body,获取相关字段的值
+            JSONObject body = JSONObject.parseObject(responString);
+            JSONObject response = JSONObject.parseObject(body.getString("Response"));
+            String ResponseString = response.getString("ResponseString");
+            String data = response.getString("Data");
+
+            if (ResponseString.equals("Succeed")) {
+                JSONObject jsonData = JSONObject.parseObject(data);
+                //获取查询记录的总条数及每页记录数计算总页数
+                total = Integer.parseInt(jsonData.getString("Total"));
+                num = Integer.parseInt(jsonData.getString("Num"));
+                JSONArray jsonArray = jsonData.getJSONArray("FacePassRecordInfoList");
+                for (int i = 0; i < jsonArray.size(); i++) {
+                    String type = jsonArray.getJSONObject(i).get("Type").toString();
+                    String passingTime = jsonArray.getJSONObject(i).get("PassingTime").toString();
+                    Date date = DateUtils.stringToDate(DateUtils.stampToTime2(passingTime));
+                    String channelName = jsonArray.getJSONObject(i).get("ChannelName").toString();
+
+                    JSONObject compareInfo = JSONObject.parseObject(jsonArray.getJSONObject(i).get("CompareInfo").toString());
+                    JSONObject snapshotImage = JSONObject.parseObject(compareInfo.get("SnapshotImage").toString());
+                    JSONObject bigImage = JSONObject.parseObject(snapshotImage.get("BigImage").toString());
+                    String dataBase ="data:image/jpeg;base64,"+bigImage.getString("Data");
+
+                    JSONObject personInfo = JSONObject.parseObject(compareInfo.get("PersonInfo").toString());
+                    String personName = personInfo.getString("PersonName");
+                    JSONArray identificationArray = personInfo.getJSONArray("IdentificationList");
+                    JSONObject identification = JSONObject.parseObject(identificationArray.get(0).toString());
+                    String IDnumber = identification.get("Number").toString();
+
+                    UniviewVO univiewVO = new UniviewVO();
+                    univiewVO.setPictureScene(dataBase);
+                    univiewVO.setActiveEvent("人脸识别");
+                    univiewVO.setActivePlace(channelName);
+                    univiewVO.setActiveTime(date);
+                    univiewVO.setCardNumber(IDnumber);
+                    univiewVO.setPersonName(personName);
+                    univiewVO.setTotal(total);
+                    univiewVO.setOffset(offset);
+                    univiewVO.setNum(num);
+                    univiewVO.setRecordType(type);
+
+
+                    univiewVOList.add(univiewVO);
+                }
+            }
+
+        } catch (Exception e) {
+            // TODO Auto-generated catch block
+            e.printStackTrace();
+        } finally {
+            // 关闭相关资源
+            if (null != resp) {
+                try {
+                    resp.close();
+                } catch (IOException e) {
+                    e.printStackTrace();
+                }
+            }
+            if (null != resp2) {
+                try {
+                    resp2.close();
+                } catch (IOException e) {
+                    e.printStackTrace();
+                }
+            }
+        }
+        return univiewVOList;
+    }
+
+
+}

+ 21 - 0
src/main/java/com/chuanghai/student_portrait/config/PageConfig.java

@@ -0,0 +1,21 @@
+package com.chuanghai.student_portrait.config;
+
+import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
+import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+/**
+ * @Author:liu
+ * @Date: 2022/9/6  14:37
+ * @Version 1.0
+ */
+@Configuration
+public class PageConfig {
+    @Bean
+    public MybatisPlusInterceptor mybatisPlusInterceptor(){
+        MybatisPlusInterceptor mybatisPlusInterceptor = new MybatisPlusInterceptor();
+        mybatisPlusInterceptor.addInnerInterceptor(new PaginationInnerInterceptor());
+        return mybatisPlusInterceptor;
+    }
+}

+ 20 - 0
src/main/java/com/chuanghai/student_portrait/config/RestTemplastConfig.java

@@ -0,0 +1,20 @@
+package com.chuanghai.student_portrait.config;
+
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.web.client.RestTemplate;
+
+/**
+ * @Author:liu
+ * @Date: 2022/9/9  9:32
+ * @Version 1.0
+ */
+@Configuration
+public class RestTemplastConfig {
+
+    @Bean
+    public RestTemplate restTemplate(){
+       return new RestTemplate();
+    }
+
+}

+ 235 - 0
src/main/java/com/chuanghai/student_portrait/config/SubscriptionConfig.java

@@ -0,0 +1,235 @@
+package com.chuanghai.student_portrait.config;
+
+
+import com.alibaba.fastjson.JSONObject;
+import com.chuanghai.student_portrait.utils.vo.SubscriptionVo;
+import com.chuanghai.student_portrait.utils.vo.UniviewVO;
+import org.apache.commons.lang3.ObjectUtils;
+import org.apache.http.HttpEntity;
+import org.apache.http.client.methods.CloseableHttpResponse;
+import org.apache.http.impl.client.CloseableHttpClient;
+import org.apache.http.impl.client.HttpClients;
+import org.apache.http.util.EntityUtils;
+
+
+import java.io.IOException;
+import java.util.List;
+import java.util.Map;
+
+public class SubscriptionConfig extends BaseClass {
+
+
+    /**
+     * 调用宇视接口查询人脸识别记录
+     *
+     * @param subscriptionVo
+     * @param requestMode
+     * @param reqBody
+     * @return
+     */
+    public static SubscriptionVo subscriptionRecord(SubscriptionVo subscriptionVo, String requestMode, String reqBody, String urlString) {
+        String url = getNvrUrl() + urlString;
+        CloseableHttpClient httpClient = HttpClients.custom().build();
+
+        JSONObject jsonOParam = JSONObject.parseObject(reqBody);
+
+        //不带鉴权信息调用login,获取nonce;调用接口时必须调用/LAPI/V1.0/System/Security/Login
+        CloseableHttpResponse resp = doPut(httpClient, getLoginUrl(), "", "");
+
+        //从第一次调用中获取nonce值
+        String nonce = getMatch("nonce=\"(.*)\",stale", getHeaderinfo(resp, "WWW-Authenticate"));
+        //生成cnonce
+        String cnonce = getCnonce();
+
+        //计算报文头中Authorization字段信息
+        String curAuthorization = getAuthRespInfo(getNvrName(), getNvrPwd(), urlString, nonce, cnonce, requestMode);
+
+        //System.out.println(curAuthorization);
+
+        CloseableHttpResponse resp2;
+        //带鉴权信息调用业务接口
+        if (requestMode.equals("POST")) {
+            resp2 = doPost(httpClient, url, curAuthorization, reqBody);
+        } else {
+            resp2 = doPut(httpClient, url, curAuthorization, reqBody);
+        }
+
+        HttpEntity entity = resp2.getEntity();
+        try {
+            String responString = EntityUtils.toString(entity);
+            //解析response中body,获取相关字段的值
+            JSONObject body = JSONObject.parseObject(responString);
+            JSONObject response = JSONObject.parseObject(body.getString("Response"));
+            String ResponseString = response.getString("ResponseString");
+            String data = response.getString("Data");
+
+            if (ResponseString.equals("Succeed")) {
+                JSONObject jsonData = JSONObject.parseObject(data);
+
+                if (ObjectUtils.isNotEmpty(jsonData.get("ID").toString())) {
+                    subscriptionVo.setID(jsonData.get("ID").toString());
+                }
+
+                if (ObjectUtils.isNotEmpty(jsonData.get("Reference").toString())) {
+                    subscriptionVo.setReference(jsonData.get("Reference").toString());
+                }
+
+                if (ObjectUtils.isNotEmpty(jsonData.get("CurrentTime").toString())) {
+                    subscriptionVo.setCurrentTime(jsonData.get("CurrentTime").toString());
+                }
+
+                if (ObjectUtils.isNotEmpty(jsonData.get("TerminationTime").toString())) {
+                    subscriptionVo.setTerminationTime(jsonData.get("TerminationTime").toString());
+                }
+
+            }
+
+        } catch (Exception e) {
+            // TODO Auto-generated catch block
+            e.printStackTrace();
+        } finally {
+            // 关闭相关资源
+            if (null != resp) {
+                try {
+                    resp.close();
+                } catch (IOException e) {
+                    e.printStackTrace();
+                }
+            }
+            if (null != resp2) {
+                try {
+                    resp2.close();
+                } catch (IOException e) {
+                    e.printStackTrace();
+                }
+            }
+        }
+        return subscriptionVo;
+    }
+
+
+    public static Map<String, String> searchByImageRecord(Map<String, String> dateMap, String requestMode, String reqBody, String urlString) {
+        String url = getNvrUrl() + urlString;
+        CloseableHttpClient httpClient = HttpClients.custom().build();
+
+        JSONObject jsonOParam = JSONObject.parseObject(reqBody);
+
+        //不带鉴权信息调用login,获取nonce;调用接口时必须调用/LAPI/V1.0/System/Security/Login
+        CloseableHttpResponse resp = doPut(httpClient, getLoginUrl(), "", "");
+
+        //从第一次调用中获取nonce值
+        String nonce = getMatch("nonce=\"(.*)\",stale", getHeaderinfo(resp, "WWW-Authenticate"));
+        //生成cnonce
+        String cnonce = getCnonce();
+
+        //计算报文头中Authorization字段信息
+        String curAuthorization = getAuthRespInfo(getNvrName(), getNvrPwd(), urlString, nonce, cnonce, requestMode);
+
+        //System.out.println(curAuthorization);
+
+        CloseableHttpResponse resp2;
+        //带鉴权信息调用业务接口
+        if (requestMode.equals("POST")) {
+            resp2 = doPost(httpClient, url, curAuthorization, reqBody);
+        } else {
+            resp2 = doPut(httpClient, url, curAuthorization, reqBody);
+        }
+        HttpEntity entity = resp2.getEntity();
+
+        try {
+            String responString = EntityUtils.toString(entity);
+            //解析response中body,获取相关字段的值
+            JSONObject body = JSONObject.parseObject(responString);
+            JSONObject response = JSONObject.parseObject(body.getString("Response"));
+            String ResponseString = response.getString("ResponseString");
+            String data = response.getString("Data");
+            JSONObject jsonObject = JSONObject.parseObject(data);
+            if (ResponseString.equals("Succeed")) {
+                String taskIdNumber = jsonObject.get("TaskId").toString();
+                dateMap.put("Succeed", taskIdNumber);
+            }
+        } catch (Exception e) {
+            // TODO Auto-generated catch block
+            e.printStackTrace();
+        } finally {
+            // 关闭相关资源
+            if (null != resp) {
+                try {
+                    resp.close();
+                } catch (IOException e) {
+                    e.printStackTrace();
+                }
+            }
+            if (null != resp2) {
+                try {
+                    resp2.close();
+                } catch (IOException e) {
+                    e.printStackTrace();
+                }
+            }
+        }
+        return dateMap;
+    }
+
+    public static Map<String, Object> commonRecord(Map<String, Object> dateMap, String requestMode, String reqBody, String urlString) {
+        String url = getNvrUrl() + urlString;
+        CloseableHttpClient httpClient = HttpClients.custom().build();
+
+        JSONObject jsonOParam = JSONObject.parseObject(reqBody);
+
+        //不带鉴权信息调用login,获取nonce;调用接口时必须调用/LAPI/V1.0/System/Security/Login
+        CloseableHttpResponse resp = doPut(httpClient, getLoginUrl(), "", "");
+
+        //从第一次调用中获取nonce值
+        String nonce = getMatch("nonce=\"(.*)\",stale", getHeaderinfo(resp, "WWW-Authenticate"));
+        //生成cnonce
+        String cnonce = getCnonce();
+
+        //计算报文头中Authorization字段信息
+        String curAuthorization = getAuthRespInfo(getNvrName(), getNvrPwd(), urlString, nonce, cnonce, requestMode);
+
+        //System.out.println(curAuthorization);
+
+        CloseableHttpResponse resp2;
+        //带鉴权信息调用业务接口
+        if (requestMode.equals("POST")) {
+            resp2 = doPost(httpClient, url, curAuthorization, reqBody);
+        } else {
+            resp2 = doPut(httpClient, url, curAuthorization, reqBody);
+        }
+        HttpEntity entity = resp2.getEntity();
+
+        try {
+            String responString = EntityUtils.toString(entity);
+            //解析response中body,获取相关字段的值
+            JSONObject body = JSONObject.parseObject(responString);
+
+            Map response = JSONObject.parseObject(body.getString("Response"), Map.class);
+
+            dateMap.put("Response", response);
+
+        } catch (Exception e) {
+            // TODO Auto-generated catch block
+            e.printStackTrace();
+        } finally {
+            // 关闭相关资源
+            if (null != resp) {
+                try {
+                    resp.close();
+                } catch (IOException e) {
+                    e.printStackTrace();
+                }
+            }
+            if (null != resp2) {
+                try {
+                    resp2.close();
+                } catch (IOException e) {
+                    e.printStackTrace();
+                }
+            }
+        }
+        return dateMap;
+    }
+
+
+}

+ 82 - 0
src/main/java/com/chuanghai/student_portrait/config/SwaggerConfig.java

@@ -0,0 +1,82 @@
+package com.chuanghai.student_portrait.config;
+
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.core.env.Environment;
+import org.springframework.core.env.Profiles;
+import springfox.documentation.builders.ApiInfoBuilder;
+import springfox.documentation.builders.PathSelectors;
+import springfox.documentation.builders.RequestHandlerSelectors;
+import springfox.documentation.service.ApiInfo;
+import springfox.documentation.service.Contact;
+import springfox.documentation.spi.DocumentationType;
+import springfox.documentation.spring.web.plugins.Docket;
+import springfox.documentation.swagger2.annotations.EnableSwagger2;
+
+@Configuration // 配置类
+@EnableSwagger2 // 开启 swagger2 的自动配置
+public class SwaggerConfig {
+//    @Bean
+//    public Docket docket() {
+//        // 创建一个 swagger 的 bean 实例
+//        return new Docket(DocumentationType.SWAGGER_2)
+//                // 配置基本信息
+//                .apiInfo(apiInfo());
+//    }
+
+    // 基本信息设置
+    private ApiInfo apiInfo() {
+//        Contact contact = new Contact(
+//                "Liu" ,// 作者姓名
+//                "https://http://localhost:8086/swagger-ui.html#/", // 作者网址
+//                "15779633758@163.com"); // 作者邮箱
+        return new ApiInfoBuilder()
+                .title("学生肖像-接口文档") // 标题
+                .description("众里寻他千百度,慕然回首那人却在灯火阑珊处") // 描述
+//                .termsOfServiceUrl("https://www.baidu.com") // 跳转连接
+//                .version("1.0") // 版本
+//                .license("Swagger-的使用(详细教程)")
+//                .licenseUrl("https://blog.csdn.net/xhmico/article/details/125353535")
+//                .contact(contact)
+                .build();
+    }
+
+    @Bean
+    public Docket docket(Environment environment) {
+        // 设置环境范围
+        Profiles profiles = Profiles.of("dev","test");
+        // 如果在该环境返回内则返回:true,反之返回 false
+        boolean flag = environment.acceptsProfiles(profiles);
+
+        // 创建一个 swagger 的 bean 实例
+        return new Docket(DocumentationType.SWAGGER_2)
+                .enable(flag) // 是否开启 swagger:true -> 开启,false -> 关闭
+                // 配置基本信息
+                .apiInfo(apiInfo())
+                // 配置接口信息
+                .select() // 设置扫描接口
+                // 配置如何扫描接口
+                .apis(RequestHandlerSelectors
+                                //.any() // 扫描全部的接口,默认
+                                //.none() // 全部不扫描
+                                .basePackage("com.chuanghai.student_portrait.controller") // 扫描指定包下的接口,最为常用
+                        //.withClassAnnotation(RestController.class) // 扫描带有指定注解的类下所有接口
+                        //.withMethodAnnotation(PostMapping.class) // 扫描带有只当注解的方法接口
+
+                )
+                .paths(PathSelectors
+                                .any() // 满足条件的路径,该断言总为true
+                        //.none() // 不满足条件的路径,该断言总为false(可用于生成环境屏蔽 swagger)
+                        //.ant("/user/**") // 满足字符串表达式路径
+                        //.regex("") // 符合正则的路径
+                )
+
+                .build();
+    }
+
+
+
+
+
+
+}

+ 54 - 0
src/main/java/com/chuanghai/student_portrait/config/TokenConfig.java

@@ -0,0 +1,54 @@
+package com.chuanghai.student_portrait.config;
+
+import com.alibaba.fastjson2.JSON;
+import org.springframework.context.annotation.Bean;
+import org.springframework.http.HttpEntity;
+import org.springframework.http.HttpHeaders;
+import org.springframework.http.MediaType;
+import org.springframework.http.ResponseEntity;
+import org.springframework.stereotype.Component;
+import org.springframework.web.client.RestTemplate;
+
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * @Author:liu
+ * @Date: 2022/9/27  16:45
+ * @Version 1.0
+ */
+@Component
+public class TokenConfig {
+
+    @Bean
+    public String getToken() {
+        String access_token = "";
+        String grant_type = "authorization_code";
+        String redirect_uri = "http://5d519a3d.cpolar.top/warning/getCardNumber";
+//            String redirect_uri = "http://binguo.vaiwan.com/wx/getCardNumber";
+        String url = "https://open.wecard.qq.com/cgi-bin/oauth2/token"; //用于用户 获取基础的access_token
+        Map<String, String> param = new HashMap<>();
+//        param.put("wxcode", wxcode);
+        param.put("app_key", "DB60250B489345ED");
+        param.put("app_secret", "68ED5D4B98DD8817C1558A8FCAF9D1BF");
+        param.put("grant_type", "client_credentials");
+        param.put("scope", "base");
+        param.put("ocode", "1015730314");
+        param.put("redirect_uri", redirect_uri);
+        try {
+            RestTemplate restTemplate = new RestTemplate();
+            HttpHeaders headers = new HttpHeaders();
+            headers.setContentType(MediaType.APPLICATION_JSON);
+            HttpEntity<Map<String, String>> request = new HttpEntity<>(param, headers);
+            ResponseEntity<String> responseEntity = restTemplate.postForEntity(url, request, String.class);
+            String body = responseEntity.getBody();
+//            System.out.println("body = " + body);
+            HashMap<String, String> parse = JSON.parseObject(body, HashMap.class);
+            String token = parse.get("access_token");
+            access_token = token;
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return access_token;
+    }
+}

+ 13 - 0
src/main/java/com/chuanghai/student_portrait/controller/AffinityScoreController.java

@@ -0,0 +1,13 @@
+package com.chuanghai.student_portrait.controller;
+
+import com.chuanghai.student_portrait.service.AffinityScoreService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+@RestController
+@RequestMapping
+public class AffinityScoreController {
+    @Autowired
+    AffinityScoreService affinityScoreService;
+}

+ 34 - 0
src/main/java/com/chuanghai/student_portrait/controller/AirConditioningController.java

@@ -0,0 +1,34 @@
+package com.chuanghai.student_portrait.controller;
+
+import com.chuanghai.student_portrait.entity.AirConditioning;
+import com.chuanghai.student_portrait.response.BaseResponse;
+import com.chuanghai.student_portrait.response.enums.StatusEnum;
+import com.chuanghai.student_portrait.service.AirConditioningService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @Author:liu
+ * @Date: 2022/9/20  10:41
+ * @Version 1.0
+ */
+@RestController
+@RequestMapping("/airConditioning")
+public class AirConditioningController {
+    @Autowired
+    AirConditioningService airConditioningService;
+
+//    @PostMapping("/getAirConditioning/message")
+//    public BaseResponse getAirConditioning(){
+//
+//        return BaseResponse.error(StatusEnum.SUCCESS);
+//    }
+
+}

+ 40 - 0
src/main/java/com/chuanghai/student_portrait/controller/ConsumeController.java

@@ -0,0 +1,40 @@
+package com.chuanghai.student_portrait.controller;
+
+import com.chuanghai.student_portrait.response.BaseResponse;
+import com.chuanghai.student_portrait.service.ConsumeService;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * @Author:liu
+ * @Date: 2022/9/20  9:46
+ * @Version 1.0
+ */
+@RestController
+@RequestMapping("/consume")
+public class ConsumeController {
+
+    @Autowired
+    ConsumeService consumeService;
+
+    @GetMapping("/group/addressCount")
+    @ApiOperation(value = "查询档口排名,idCard为学生的id标识,不填默认查询全校所有人的")
+    public BaseResponse groupCount(String startTime, String endTime,String idCard){
+        return consumeService.getAddress(startTime,endTime,idCard);
+    }
+
+    @GetMapping("/consume/provinceRanking")
+    @ApiOperation(value = "查询微校省份消费排名")
+    public BaseResponse provinceRanking(){
+        return consumeService.consumeProvinceRanking();
+    }
+
+    @GetMapping("/person/personConsum")
+    @ApiOperation(value = "个人消费能力,id为学生序号")
+    public BaseResponse personConsum(String id,String startTime,String endTime){
+        return consumeService.personConsum(id,startTime,endTime);
+    }
+}

+ 120 - 0
src/main/java/com/chuanghai/student_portrait/controller/CountController.java

@@ -0,0 +1,120 @@
+package com.chuanghai.student_portrait.controller;
+
+import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.chuanghai.student_portrait.entity.NewSchooluser;
+import com.chuanghai.student_portrait.entity.Province;
+import com.chuanghai.student_portrait.entity.dto.DistrictDto;
+import com.chuanghai.student_portrait.response.BaseResponse;
+import com.chuanghai.student_portrait.response.enums.StatusEnum;
+import com.chuanghai.student_portrait.service.ForewarningService;
+import com.chuanghai.student_portrait.service.NewSchooluserService;
+import com.chuanghai.student_portrait.service.ProvinceService;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.ArrayList;
+import java.util.Calendar;
+import java.util.HashMap;
+import java.util.List;
+
+@RestController
+@RequestMapping
+public class CountController {
+
+    @Autowired
+    NewSchooluserService newSchooluserService;
+
+    @Autowired
+    ForewarningService forewarningService;
+
+    @Autowired
+    ProvinceService provinceService;
+
+
+    @GetMapping("/count")
+    @ApiOperation(value = "查询院系数量,在校学生,预警数量")
+    public BaseResponse count() {
+        Calendar calendar = Calendar.getInstance();
+        // 获取当前年
+        int year = calendar.get(Calendar.YEAR);
+// 获取当前月
+        int month = calendar.get(Calendar.MONTH) + 1;
+        int oldYear=0;
+
+        if (month>=7) {
+            oldYear=year-3;
+        }else {
+            oldYear=year-4;
+        }
+
+        HashMap<String, Object> mapCount = new HashMap<>();
+////        查询所有院校
+//        long countCollege = newSchooluserService.count(Wrappers.<NewSchooluser>lambdaQuery()
+//                .select(NewSchooluser::getCollege)
+//                .groupBy(NewSchooluser::getCollege)
+//        );
+//查询在校人数
+        long countSchoolUser = newSchooluserService.count(Wrappers.<NewSchooluser>lambdaQuery()
+                .between(NewSchooluser::getGrade, oldYear, year)
+        );
+//查询所有预警数据次数
+        long countForewarning = forewarningService.count();
+
+        mapCount.put("facultyCount","09");
+        mapCount.put("studentCount",countSchoolUser);
+        mapCount.put("ForewarningCount",countForewarning);
+
+        return BaseResponse.ok(StatusEnum.SUCCESS,mapCount);
+    }
+
+
+
+    @GetMapping("/provinceCount")
+    @ApiOperation(value = "查询各省份人数")
+    public BaseResponse provinceCount(){
+        List<DistrictDto> districtDtos = new ArrayList<>();
+        Calendar calendar = Calendar.getInstance();
+        // 获取当前年
+        int year = calendar.get(Calendar.YEAR);
+// 获取当前月
+        int month = calendar.get(Calendar.MONTH) + 1;
+        int oldYear=0;
+
+        if (month>=7) {
+            oldYear=year-3;
+        }else {
+            oldYear=year-4;
+        }
+        List<NewSchooluser> list = newSchooluserService.list(Wrappers.<NewSchooluser>lambdaQuery()
+                .select(NewSchooluser::getProvince)
+                .groupBy(NewSchooluser::getProvince)
+        );
+        if (ObjectUtils.isNotEmpty(list)&&list.size()>0) {
+            for (NewSchooluser newSchooluser : list) {
+                DistrictDto districtDto = new DistrictDto();
+//                省份
+                String province = newSchooluser.getProvince();
+                long count = newSchooluserService.count(Wrappers.<NewSchooluser>lambdaQuery()
+                        .between(NewSchooluser::getGrade, oldYear, year)
+                        .eq(NewSchooluser::getProvince, province)
+                );
+                districtDto.setCount(count);
+                Province one = provinceService.getOne(Wrappers.<Province>lambdaQuery().eq(Province::getProvinceCode, province));
+
+                if (ObjectUtils.isNotEmpty(one)) {
+                    String provinceName = one.getProvinceName();
+                    districtDto.setProvince(provinceName);
+                    districtDtos.add(districtDto);
+                }
+
+
+            }
+        }
+        return BaseResponse.ok(StatusEnum.SUCCESS,districtDtos);
+    }
+
+}

+ 35 - 0
src/main/java/com/chuanghai/student_portrait/controller/DormController.java

@@ -0,0 +1,35 @@
+package com.chuanghai.student_portrait.controller;
+
+import com.chuanghai.student_portrait.entity.Dorm;
+import com.chuanghai.student_portrait.service.DormService;
+import com.fasterxml.jackson.core.JsonProcessingException;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.List;
+
+/**
+ * @Author:liu
+ * @Date: 2022/9/21  15:44
+ * @Version 1.0
+ */
+@RestController
+@RequestMapping("/dorm")
+public class DormController {
+
+    @Autowired
+    private DormService dormService;
+
+//    @GetMapping("/save")
+//    public List<Dorm> saveDorm(){
+//        try {
+//            return dormService.saveDorm();
+//        } catch (JsonProcessingException e) {
+//            throw new RuntimeException(e);
+//        }
+//    }
+
+}

+ 29 - 0
src/main/java/com/chuanghai/student_portrait/controller/ElectricityController.java

@@ -0,0 +1,29 @@
+package com.chuanghai.student_portrait.controller;
+
+import com.chuanghai.student_portrait.exception.ResultValue;
+import com.chuanghai.student_portrait.response.BaseResponse;
+import com.chuanghai.student_portrait.service.ElectricityService;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+@RestController
+@RequestMapping
+public class ElectricityController {
+    @Autowired
+    ElectricityService electricityService;
+
+//    @PostMapping("/getElectrucity")
+//     public ResultValue getElectrucity(String dormNumber){
+//         return electricityService.getElectrucity(dormNumber);
+//     }
+
+//    @GetMapping("person/energy")
+//    @ApiOperation(value = "全校水电能耗统计")
+//    public BaseResponse coldWaterAndElectricityEnergy(){
+//        return electricityService.coldWaterAndElectricityEnergy();
+//    }
+}

+ 47 - 0
src/main/java/com/chuanghai/student_portrait/controller/FaceDiscernController.java

@@ -0,0 +1,47 @@
+package com.chuanghai.student_portrait.controller;
+
+import com.chuanghai.student_portrait.response.BaseResponse;
+import com.chuanghai.student_portrait.service.FaceDiscernService;
+import com.chuanghai.student_portrait.utils.ReturnValueUtil;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * @Author:liu
+ * @Date: 2022/9/28  17:33
+ * @Version 1.0
+ */
+@RestController
+@RequestMapping("/access")
+public class FaceDiscernController {
+
+    @Autowired
+    private FaceDiscernService faceDiscernService;
+
+    @GetMapping("/group/accessCount")
+    @ApiOperation(value = "查询全校门禁出入次数/日")
+    public BaseResponse shoolAccessCount(String startTime, String endTime) {
+        return faceDiscernService.shoolAccessCount(startTime,endTime);
+    }
+
+    @GetMapping("/unit/accessCount")
+    @ApiOperation(value = "查询个人门禁出入次数/月,id参数为该学生的id")
+    public BaseResponse unitAccessCount(String startTime, String endTime,String id) {
+        return faceDiscernService.unitAccessCount(startTime,endTime,id);
+    }
+
+    @GetMapping("/personal/track")
+    @ApiOperation(value = "个人轨迹,id为个人序号")
+    public BaseResponse personalTrack(String id){
+        return faceDiscernService.personalTrack(id);
+    }
+
+//    @PostMapping("get")
+//    public ReturnValueUtil online(Integer page1){
+//        return faceDiscernService.online(page1);
+//    }
+}

+ 63 - 0
src/main/java/com/chuanghai/student_portrait/controller/ForeWarningReportFormController.java

@@ -0,0 +1,63 @@
+package com.chuanghai.student_portrait.controller;
+
+import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.chuanghai.student_portrait.entity.ForeWarningEntity;
+import com.chuanghai.student_portrait.entity.Forewarning;
+import com.chuanghai.student_portrait.service.ForewarningService;
+import com.chuanghai.student_portrait.utils.ExcelUtil;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.List;
+
+@RestController
+@RequestMapping
+public class ForeWarningReportFormController {
+    @Autowired
+    ForewarningService forewarningService;
+
+    @GetMapping("/load")
+    @ApiOperation(value = "报表导出")
+    public void downloadReportData(HttpServletResponse response, String start, String end,String keyWord) {
+        SimpleDateFormat sdf= new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+        String fileName = "预警数据.xls";
+        List<ForeWarningEntity> foreWarningEntities = new ArrayList<>();
+        List<Forewarning> forewarnings = forewarningService.list(Wrappers.<Forewarning>lambdaQuery()
+                .between(ObjectUtils.isNotEmpty(start) && ObjectUtils.isNotEmpty(end), Forewarning::getDateTime, start, end)
+                .like(ObjectUtils.isNotEmpty(keyWord), Forewarning::getName, keyWord)
+                .or()
+                .like(ObjectUtils.isNotEmpty(keyWord), Forewarning::getStudentId, keyWord)
+                .or()
+                .like(ObjectUtils.isNotEmpty(keyWord), Forewarning::getProfessionName, keyWord)
+                .or()
+                .like(ObjectUtils.isNotEmpty(keyWord), Forewarning::getClazz, keyWord)
+                .or()
+                .like(ObjectUtils.isNotEmpty(keyWord), Forewarning::getWarningReason, keyWord)
+        );
+        for (Forewarning forewarning : forewarnings) {
+            ForeWarningEntity foreWarningEntity = new ForeWarningEntity();
+            foreWarningEntity.setName(forewarning.getName());
+            foreWarningEntity.setStudentId(forewarning.getStudentId());
+            foreWarningEntity.setProfession(forewarning.getProfessionName());
+            foreWarningEntity.setClazz(forewarning.getClazz());
+            foreWarningEntity.setDateTime(sdf.format(forewarning.getDateTime()));
+            foreWarningEntity.setWarningReason(forewarning.getWarningReason());
+            foreWarningEntity.setRemark(forewarning.getRemark());
+            foreWarningEntities.add(foreWarningEntity);
+        }
+        try {
+            ExcelUtil.process(fileName, foreWarningEntities, ForeWarningEntity.class, response);
+        } catch (IOException e) {
+            e.printStackTrace();
+        }
+    }
+
+}

+ 31 - 0
src/main/java/com/chuanghai/student_portrait/controller/ForewarningController.java

@@ -0,0 +1,31 @@
+package com.chuanghai.student_portrait.controller;
+
+import com.chuanghai.student_portrait.response.BaseResponse;
+import com.chuanghai.student_portrait.service.ForewarningService;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.Date;
+import java.util.List;
+
+@RestController
+@RequestMapping("/forewarning")
+public class ForewarningController {
+    @Autowired
+    ForewarningService forewarningService;
+
+    @GetMapping("/getForewarning")
+    @ApiOperation(value = "查询每日预警数据")
+    public BaseResponse getForewarning(String keyWord, String startTime, String endTime, Integer page, Integer size) {
+        return forewarningService.getgetForewarning(keyWord, startTime, endTime,page,size);
+    }
+
+//    @PostMapping("/add")
+//    public Boolean saveForewarningAccess(){
+//        return forewarningService.saveForewarningAccess();
+//    }
+}

+ 300 - 0
src/main/java/com/chuanghai/student_portrait/controller/GetSchoolUserController.java

@@ -0,0 +1,300 @@
+package com.chuanghai.student_portrait.controller;
+
+import com.alibaba.fastjson2.JSON;
+import com.alibaba.fastjson2.JSONArray;
+import com.alibaba.fastjson2.JSONObject;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.chuanghai.student_portrait.entity.FaceDiscern;
+import com.chuanghai.student_portrait.entity.OldSchooluser;
+import com.chuanghai.student_portrait.service.FaceDiscernService;
+import com.chuanghai.student_portrait.service.OldSchooluserService;
+import com.chuanghai.student_portrait.utils.Base64Utils;
+import com.chuanghai.student_portrait.utils.FileUtil;
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.core.type.TypeReference;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.http.*;
+import org.springframework.scheduling.annotation.Scheduled;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.client.RestTemplate;
+
+
+import java.io.IOException;
+import java.time.LocalDateTime;
+import java.time.format.DateTimeFormatter;
+import java.util.*;
+
+/**
+ * @Author:liu
+ * @Date: 2022/9/6  9:47
+ * @Version 1.0
+ */
+@RestController
+@RequestMapping("/warning")
+public class GetSchoolUserController {
+
+    @Autowired
+    RestTemplate restTemplate;
+
+    @Value("${weixiao.app_key}")
+    private String key;
+
+    @Value("${weixiao.response_type}")
+    private String type;
+
+    @Value("${weixiao.scope}")
+    private String scope;
+
+    @Value("${weixiao.ocode}")
+    private String ocode;
+
+    @Autowired
+    OldSchooluserService oldSchooluserService;
+
+    @Autowired
+    FaceDiscernService faceDiscernService;
+
+
+    public String getCardNumber() {
+        String access_token = "";
+        String grant_type = "authorization_code";
+        String redirect_uri = "http://5d519a3d.cpolar.top/warning/getCardNumber";
+//            String redirect_uri = "http://binguo.vaiwan.com/wx/getCardNumber";
+        String url = "https://open.wecard.qq.com/cgi-bin/oauth2/token"; //用于用户 获取基础的access_token
+        Map<String, String> param = new HashMap<>();
+//        param.put("wxcode", wxcode);
+        param.put("app_key", "DB60250B489345ED");
+        param.put("app_secret", "68ED5D4B98DD8817C1558A8FCAF9D1BF");
+        param.put("grant_type", "client_credentials");
+        param.put("scope", "base");
+        param.put("ocode", "1015730314");
+        param.put("redirect_uri", redirect_uri);
+        try {
+            RestTemplate restTemplate = new RestTemplate();
+            HttpHeaders headers = new HttpHeaders();
+            headers.setContentType(MediaType.APPLICATION_JSON);
+            HttpEntity<Map<String, String>> request = new HttpEntity<>(param, headers);
+            ResponseEntity<String> responseEntity = restTemplate.postForEntity(url, request, String.class);
+            String body = responseEntity.getBody();
+//            System.out.println("body = " + body);
+            HashMap<String, String> parse = JSON.parseObject(body, HashMap.class);
+            String token = parse.get("access_token");
+            access_token = token;
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return access_token;
+    }
+
+    //现在不需要获取微校数据
+    @Scheduled(cron = "0 0 0/2 * * ? ")   //从0时开始,每2小时运行一次
+    public String token() {
+        String cardNumber = getCardNumber();
+        return cardNumber;
+    }
+
+    //获取组织架构
+//    @GetMapping("/get")
+//    public Map get() {
+//        String token = this.token();
+//        System.out.println("token = " + token);
+//        String url = "https://open.wecard.qq.com/cgi-bin/user/org-edu-list";
+//        Map<String, String> param = new HashMap<>();
+//        param.put("access_token", token);
+//        HttpHeaders headers = new HttpHeaders();
+//        headers.setContentType(MediaType.APPLICATION_JSON);
+//        HttpEntity<Map<String, String>> request = new HttpEntity<>(param, headers);
+//        ResponseEntity<String> responseEntity = restTemplate.postForEntity(url, request, String.class);
+//        String body = responseEntity.getBody();
+//        System.out.println("body = " + body);
+//        HashMap<String, String> parse = JSON.parseObject(body, HashMap.class);
+//
+//        return parse;
+//    }
+
+    //获取组织架构成员
+//    @GetMapping("/list")
+    @Transactional(rollbackFor = Exception.class)
+    public List<String> getMessong(Integer page) throws JsonProcessingException {
+        String token = this.token();
+        String url = "https://open.wecard.qq.com/cgi-bin/user/get-org-users";
+        Map<String, Object> param = new HashMap<>();
+        ObjectMapper mapper = new ObjectMapper();
+        param.put("access_token", token);
+        param.put("org_id", 560291);
+        param.put("fetch_child", 1);
+        param.put("page", page);
+        param.put("page_size", 1000);
+        HttpHeaders headers = new HttpHeaders();
+        headers.setContentType(MediaType.APPLICATION_JSON);
+        HttpEntity<Map<String, Object>> request = new HttpEntity<>(param, headers);
+        ResponseEntity<String> responseEntity = restTemplate.postForEntity(url, request, String.class);
+        String body = responseEntity.getBody();
+        JSONObject jsonObject = JSON.parseObject(body);
+        JSONArray userlist = jsonObject.getJSONArray("userlist");
+        ArrayList<String> strings = new ArrayList<>();
+        for (Object o : userlist) {
+            Map<String, Object> stringObjectMap = mapper.readValue(o.toString(), new TypeReference<Map<String, Object>>() {
+            });
+            if (stringObjectMap.get("card_number") != null) {
+                String card_number = stringObjectMap.get("card_number").toString();
+                strings.add(card_number);
+            }
+        }
+        return strings;
+    }
+
+    //    @GetMapping
+    public Boolean a(Integer page) throws JsonProcessingException {
+        List<String> messong = this.getMessong(page);
+        String token = this.token();
+        System.out.println("token = " + token);
+        String url = "https://open.wecard.qq.com/cgi-bin/user/get-user-by-card-numbers";
+        Map<String, Object> param = new HashMap<>();
+        param.put("access_token", token);
+        param.put("card_numbers", messong);
+        HttpHeaders headers = new HttpHeaders();
+        headers.setContentType(MediaType.APPLICATION_JSON);
+        HttpEntity<Map<String, Object>> request = new HttpEntity<>(param, headers);
+        ResponseEntity<String> responseEntity = restTemplate.postForEntity(url, request, String.class);
+        String body = responseEntity.getBody();
+        JSONObject jsonObject = JSON.parseObject(body);
+        JSONArray userlist = jsonObject.getJSONArray("userlist");
+        ArrayList<OldSchooluser> addOldSchoolUsers = new ArrayList<>();
+        ArrayList<OldSchooluser> updatOldSchoolUsers = new ArrayList<>();
+        ObjectMapper mapper = new ObjectMapper();
+        for (Object o : userlist) {
+            Map<String, Object> stringObjectMap = mapper.readValue(o.toString(), new TypeReference<Map<String, Object>>() {
+            });
+            if (ObjectUtils.isNotEmpty(stringObjectMap)) {
+                OldSchooluser oldSchooluser1 = new OldSchooluser();
+                String head_image = stringObjectMap.get("head_image").toString();
+                oldSchooluser1.setHeadImage(head_image);
+
+                oldSchooluser1.setCardNumber(stringObjectMap.get("card_number").toString());
+                oldSchooluser1.setName(stringObjectMap.get("name").toString());
+                oldSchooluser1.setGender(stringObjectMap.get("gender").toString());
+                oldSchooluser1.setIdentityType(stringObjectMap.get("identity_type").toString());
+                oldSchooluser1.setGrade(stringObjectMap.get("grade").toString());
+                oldSchooluser1.setCampus(stringObjectMap.get("campus").toString());
+                oldSchooluser1.setDormNumber(stringObjectMap.get("dorm_number").toString());
+                oldSchooluser1.setPhysicalChipNumber(stringObjectMap.get("physical_chip_number").toString());
+                oldSchooluser1.setPhysicalCardNumber(stringObjectMap.get("physical_card_number").toString());
+                oldSchooluser1.setNation(stringObjectMap.get("nation").toString());
+                oldSchooluser1.setOriginPlace(stringObjectMap.get("origin_place").toString());
+                oldSchooluser1.setGraduatedSchool(stringObjectMap.get("graduated_school").toString());
+                oldSchooluser1.setAddress(stringObjectMap.get("address").toString());
+                oldSchooluser1.setQq(stringObjectMap.get("qq").toString());
+                oldSchooluser1.setEmail(stringObjectMap.get("email").toString());
+                oldSchooluser1.setCardType(stringObjectMap.get("card_type").toString());
+                oldSchooluser1.setIdentityTitle(stringObjectMap.get("identity_title").toString());
+                oldSchooluser1.setCollege(stringObjectMap.get("college").toString());
+                oldSchooluser1.setProfession(stringObjectMap.get("profession").toString());
+                oldSchooluser1.setClazz(stringObjectMap.get("class").toString());
+                oldSchooluser1.setIdCard(stringObjectMap.get("id_card").toString());
+                oldSchooluser1.setCountry(stringObjectMap.get("country").toString());
+                oldSchooluser1.setTelephone(stringObjectMap.get("telephone").toString());
+                oldSchooluser1.setDataSource(stringObjectMap.get("data_source").toString());
+                oldSchooluser1.setStartAt(stringObjectMap.get("start_at").toString());
+                oldSchooluser1.setExpireAt(stringObjectMap.get("expire_at").toString());
+                if (stringObjectMap.containsKey("serial_number")) {
+                    String serial_number = stringObjectMap.get("serial_number").toString();
+                    oldSchooluser1.setSerialNumber(serial_number);
+                }
+                if (stringObjectMap.containsKey("job_title")) {
+                    oldSchooluser1.setJobTitle(stringObjectMap.get("job_title").toString());
+                }
+                if (stringObjectMap.containsKey("school_period")) {
+                    oldSchooluser1.setSchoolPeriod(stringObjectMap.get("school_period").toString());
+                }
+                if (stringObjectMap.containsKey("register_year")) {
+                    oldSchooluser1.setRegisterYear(stringObjectMap.get("register_year").toString());
+                }
+                oldSchooluser1.setOrganization(stringObjectMap.get("organization").toString());
+                oldSchooluser1.setDepartment(stringObjectMap.get("department").toString());
+//判断该学生信息是否存在数据库中
+                OldSchooluser oldSchooluser = queryOldSchoolUser(oldSchooluser1.getIdCard());
+                if (ObjectUtils.isNotEmpty(oldSchooluser)) {
+//                oldSchooluser1.setId(oldSchooluser.getId());
+                    oldSchooluser1.setId(oldSchooluser.getId());
+
+                    updatOldSchoolUsers.add(oldSchooluser1);
+                oldSchooluserService.update(oldSchooluser1, Wrappers.<OldSchooluser>lambdaUpdate().eq(OldSchooluser::getId, oldSchooluser.getId()));
+                } else {
+                    addOldSchoolUsers.add(oldSchooluser1);
+                }
+            }
+        }
+        boolean b = oldSchooluserService.saveBatch(addOldSchoolUsers);
+//        oldSchooluserService.updateBatchById(updatOldSchoolUsers);
+        return b;
+//        return JSONObject.parseObject(body,Map.class);
+    }
+
+ //    定时获取微校数据
+//
+    Integer i = 45;
+
+    //
+//    @Scheduled(cron = "0 0/1 * * * ?  ")
+    public void getSchoolUser() {
+        i = i + 1;
+        try {
+            boolean a = this.a(i);
+            System.out.println("a = " + a);
+        } catch (JsonProcessingException e) {
+            throw new RuntimeException(e);
+        }
+        System.out.println(i);
+    }
+
+    /**
+     * 通过身份证号判断该用户是否存在于数据库OldSchoolUser表当中
+     *
+     * @param idCard
+     * @param
+     * @return
+     */
+    public OldSchooluser queryOldSchoolUser(String idCard) {
+        OldSchooluser oldSchooluser = oldSchooluserService.list(Wrappers.<OldSchooluser>lambdaQuery().eq(OldSchooluser::getIdCard, idCard)).get(0);
+        return oldSchooluser;
+    }
+
+
+//通过card_numbers获取图片
+    public String getHeadImage(List<String> messong) throws JsonProcessingException {
+        String token = this.token();
+        System.out.println("token = " + token);
+        String url = "https://open.wecard.qq.com/cgi-bin/user/get-user-by-card-numbers";
+        Map<String, Object> param = new HashMap<>();
+        param.put("access_token", token);
+        param.put("card_numbers", messong);
+        HttpHeaders headers = new HttpHeaders();
+        headers.setContentType(MediaType.APPLICATION_JSON);
+        HttpEntity<Map<String, Object>> request = new HttpEntity<>(param, headers);
+        ResponseEntity<String> responseEntity = restTemplate.postForEntity(url, request, String.class);
+        String body = responseEntity.getBody();
+        JSONObject jsonObject = JSON.parseObject(body);
+        JSONArray userlist = jsonObject.getJSONArray("userlist");
+        ObjectMapper mapper = new ObjectMapper();
+        String headImage="";
+        for (Object o : userlist) {
+            Map<String, Object> stringObjectMap = mapper.readValue(o.toString(), new TypeReference<Map<String, Object>>() {
+            });
+            if (ObjectUtils.isNotEmpty(stringObjectMap)) {
+                headImage= stringObjectMap.get("head_image").toString();
+
+            }
+        }
+        return headImage;
+    }
+
+
+}

+ 30 - 0
src/main/java/com/chuanghai/student_portrait/controller/HotWaterController.java

@@ -0,0 +1,30 @@
+package com.chuanghai.student_portrait.controller;
+
+import com.chuanghai.student_portrait.response.BaseResponse;
+import com.chuanghai.student_portrait.service.HotWaterService;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+@RestController
+@RequestMapping("/hotWater")
+public class HotWaterController {
+
+    @Autowired
+    HotWaterService hotWaterService;
+
+    @GetMapping("/all/energy")
+    @ApiOperation(value = "全校热水和水电能耗")
+    public BaseResponse allHotWaterEnergy(){
+        return hotWaterService.hotWaterEnergy();
+    }
+
+    @GetMapping("person/energy")
+    @ApiOperation(value = "个人热水能耗,参数为该学生序号")
+    public BaseResponse personHotwaterEnergy(String id){
+        return hotWaterService.personHotwaterEnergy(id);
+    }
+
+}

+ 159 - 0
src/main/java/com/chuanghai/student_portrait/controller/NewSchooluserController.java

@@ -0,0 +1,159 @@
+package com.chuanghai.student_portrait.controller;
+
+import cn.afterturn.easypoi.excel.ExcelExportUtil;
+import cn.afterturn.easypoi.excel.ExcelImportUtil;
+import cn.afterturn.easypoi.excel.entity.ExportParams;
+import cn.afterturn.easypoi.excel.entity.ImportParams;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.chuanghai.student_portrait.entity.NewSchooluser;
+import com.chuanghai.student_portrait.entity.Student;
+import com.chuanghai.student_portrait.exception.ResultValue;
+import com.chuanghai.student_portrait.response.BaseResponse;
+import com.chuanghai.student_portrait.service.NewSchooluserService;
+import io.swagger.annotations.ApiOperation;
+import org.apache.poi.ss.usermodel.Workbook;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.annotation.Resource;
+import javax.servlet.ServletOutputStream;
+import javax.servlet.http.HttpServletResponse;
+import java.net.URLEncoder;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @Author:liu
+ * @Date: 2022/9/16  9:35
+ * @Version 1.0
+ */
+@RestController
+@RequestMapping("/schoolUser")
+public class NewSchooluserController {
+
+    @Autowired
+    private NewSchooluserService newSchooluserService;
+
+    /**
+     * 获取全校
+     * @param page
+     * @param size
+     * @return
+     */
+    @GetMapping("/group/listSchoolUser")
+    @ApiOperation(value = "查询所有学生信息")
+    public BaseResponse listSchoolUser(Integer page, Integer size,String keyWord) {
+        return newSchooluserService.listSchoolUser(page,size,keyWord);
+    }
+
+    /**
+     * 获取单个
+     * @param id
+     * @return
+     */
+    @GetMapping("/unit/getSchoolUser")
+    @ApiOperation(value = "查询单个学生信息")
+    public BaseResponse getSchoolUser(String id) {
+        return newSchooluserService.getSchoolUser(id);
+    }
+
+
+//    @GetMapping("/like/getSchoolUser")
+//    public BaseResponse likeSchoolUser(String kegWord){
+//        return newSchooluserService.likeSchoolUser(kegWord);
+//    }
+
+//
+//
+//    /**
+//     * 导入student的准考证信息
+//     *
+//     * @param file
+//     * @return
+//     */
+//    @PostMapping("/importExcel")
+//    public ResultValue importExcel(MultipartFile file) {
+//        try {
+//            // 1.解析文档需要用到ImportParams 对象
+//            final ImportParams importParams = new ImportParams();
+//            importParams.setTitleRows(1);
+//            importParams.setHeadRows(1);
+//
+//            // 2.使用ExcelImportUtil工具类获取Excel表格中的内容,并转为List<T>,实际情况下我们需要知道上传的表格是什么类型的
+//            // *.因为所有的pojo都是按照用户需求创建的,拥有模板,上传的数据必须符合这些模板
+//            // *.那么实际开发中,可以通过访问的url判断本次上传的文件是属于什么类型的pojo
+//            final List<Student> studentList = ExcelImportUtil.importExcel(
+//                    file.getInputStream(),
+//                    Student.class,
+//                    importParams
+//            );
+//            ArrayList<NewSchooluser> schoolUsersList = new ArrayList<>();
+//            studentList.forEach(student -> {
+//                NewSchooluser schoolUser = querySchoolUser(student.getStudentIdCard());
+//                schoolUser.setStudentNts(student.getStudentNTS());
+//                schoolUsersList.add(schoolUser);
+//            });
+//            newSchooluserService.saveOrUpdateBatch(schoolUsersList);
+//            return ResultValue.success("导入模板成功");
+//        } catch (Exception e) {
+//            e.printStackTrace();
+//        }
+//        return ResultValue.error("导入模板错误");
+//    }
+//
+//    /**
+//     * 导出学生准考证模板
+//     *
+//     * @param response
+//     */
+//    @RequestMapping("/exportExcel")
+//    public ResultValue exportExcel(HttpServletResponse response) {
+//        try {
+//            List<Student> studentList = new ArrayList<>();
+//            //生成Execl表,使用ExcelExportUtil工具
+//            Workbook workbook = ExcelExportUtil.exportExcel(new ExportParams("准考证模板", "准考证"), Student.class, studentList);
+//            response.setHeader("content-disposition", "attachment;fileName=" + URLEncoder.encode("准考证模板.xls", "UTF-8"));
+//            ServletOutputStream outputStream = response.getOutputStream();
+//            workbook.write(outputStream);
+//            outputStream.close();
+//            workbook.close();
+//            return ResultValue.success("导出模板成功");
+//        } catch (Exception e) {
+//            e.printStackTrace();
+//        }
+//        return ResultValue.error("导出模板错误");
+//    }
+//
+//    /**
+//     * 通过cardNumber判断该用户是否存在于数据库SchoolUser表当中
+//     *
+//     * @param cardNumber
+//     * @param
+//     * @return
+//     */
+//    @PostMapping("/querySchoolUser")
+//    public NewSchooluser querySchoolUser(String cardNumber) {
+//        QueryWrapper<NewSchooluser> wrapper = new QueryWrapper<>();
+//        //通过微校用户的 cardNumber idCard workNo studentNo 四者均为唯一标识查找用户是否存在数据库中
+//        wrapper.eq("cardNumber", cardNumber)
+//                .or()
+//                .eq("idCard", cardNumber);
+//        List<NewSchooluser> list = newSchooluserService.list(wrapper);
+//        NewSchooluser schoolUser = new NewSchooluser();
+//        if (list.size() > 0) {
+//            schoolUser = list.get(0);
+//        }
+//        return schoolUser;
+//    }
+
+//    @PostMapping("/save/studentNts")
+//    @ApiOperation(value = "给学生添加准考证信息")
+//    private BaseResponse saveStudenNts(Integer page){
+//        return newSchooluserService.saveStudenNts(page);
+//    }
+
+}

+ 28 - 0
src/main/java/com/chuanghai/student_portrait/controller/OldSchooluserController.java

@@ -0,0 +1,28 @@
+package com.chuanghai.student_portrait.controller;
+
+
+import com.chuanghai.student_portrait.service.OldSchooluserService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.scheduling.annotation.Scheduled;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * @Author:liu
+ * @Date: 2022/9/16  10:37
+ * @Version 1.0
+ */
+@RestController
+@RequestMapping("/OldSchoolUser")
+public class OldSchooluserController {
+
+    @Autowired
+    OldSchooluserService oldSchooluserService;
+
+//    @PostMapping("/add")
+//    public Boolean addNewSchoolUser(Integer i){
+//        return oldSchooluserService.addNewSchooluser(i);
+//    }
+
+}

+ 33 - 0
src/main/java/com/chuanghai/student_portrait/controller/SearchByImageController.java

@@ -0,0 +1,33 @@
+package com.chuanghai.student_portrait.controller;
+
+import com.alibaba.fastjson.JSONObject;
+import com.chuanghai.student_portrait.config.BaseClass;
+import com.chuanghai.student_portrait.config.SubscriptionConfig;
+import com.chuanghai.student_portrait.utils.vo.SubscriptionVo;
+import org.apache.http.HttpEntity;
+import org.apache.http.client.methods.CloseableHttpResponse;
+import org.apache.http.impl.client.CloseableHttpClient;
+import org.apache.http.impl.client.HttpClients;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+
+import java.util.HashMap;
+import java.util.Map;
+
+import static com.chuanghai.student_portrait.config.BaseClass.getLoginUrl;
+
+@RestController
+@RequestMapping
+public class SearchByImageController {
+
+    @PostMapping("/post/getSearchByImage")
+    public Map getTask(){
+        HashMap<String, String> map = new HashMap<>();
+
+        String jsonString="";
+        return  SubscriptionConfig.searchByImageRecord(map, "POST",jsonString,  "/LAPI/V1.0/Smart/SearchByImage/Task");
+    }
+
+}

+ 174 - 0
src/main/java/com/chuanghai/student_portrait/controller/SubscriptionController.java

@@ -0,0 +1,174 @@
+package com.chuanghai.student_portrait.controller;
+
+
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.chuanghai.student_portrait.config.SubscriptionConfig;
+import com.chuanghai.student_portrait.utils.Base64Utils;
+import com.chuanghai.student_portrait.utils.FileUtil;
+import com.chuanghai.student_portrait.utils.yushi.SubscribePersonCondition;
+import com.chuanghai.student_portrait.utils.vo.SubscriptionVo;
+import org.apache.commons.lang3.ObjectUtils;
+import org.python.jline.internal.Log;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.io.UnsupportedEncodingException;
+import java.util.*;
+
+@RestController
+@RequestMapping
+public class SubscriptionController {
+
+
+    @PostMapping("/post/getSubscription")
+    public SubscriptionVo getSubscription() {
+        SubscribePersonCondition subscribePersonCondition = new SubscribePersonCondition();
+        subscribePersonCondition.setLibIDNum(0);
+        JSONObject map = new JSONObject();
+        map.put("AddressType", 0);
+        map.put("IPAddress", "192.168.161.207");
+        map.put("Port", 8086);
+        map.put("Duration", 3600);
+        map.put("SubscribePersonCondition", subscribePersonCondition);
+        String jsonString = map.toJSONString();
+        SubscriptionVo subscriptionVo = new SubscriptionVo();
+        return SubscriptionConfig.subscriptionRecord(subscriptionVo, "POST", jsonString, "/LAPI/V1.0/System/Event/Subscription");
+
+    }
+
+    @PostMapping("/common/{method}")
+    public Map<String, Object> getCommon(@RequestBody Map<String, Object> map, @PathVariable String method, String url) {
+        Log.info("接收json参数:{}", map);
+        Log.info("接收路径参数:{}", method);
+        Log.info("接收参数:{}", url);
+
+        HashMap<String, Object> hashMap = new HashMap<>();
+//        String method = map.get("method").toString();
+        JSONObject jsonObject = new JSONObject();
+        if (ObjectUtils.isNotEmpty(map)) {
+            Set<Map.Entry<String, Object>> entries = map.entrySet();
+            for (Map.Entry<String, Object> entry : entries) {
+                jsonObject.put(entry.getKey(), entry.getValue());
+            }
+        }
+        String toJSONString = jsonObject.toJSONString();
+        Map<String, Object> stringObjectMap = SubscriptionConfig.commonRecord(hashMap, method, toJSONString, url);
+
+        return stringObjectMap;
+    }
+
+
+
+
+
+    @PostMapping("/LAPI/V1.0/System/Event/Notification/{url}")
+    public void a(HttpServletRequest request, HttpServletResponse response/*, BufferedReader br*/, @PathVariable String url /*, @RequestBody Map<String, Object> params*/) {
+        Log.info("调用接口:{}", url);
+
+//            System.out.println("被调用: " + url);
+
+        //System.out.print(request.getHeaderNames());
+
+//        Set<Map.Entry<String, Object>> entries = params.entrySet();
+//        for (Map.Entry<String, Object> entry : entries) {
+//            System.out.println("[ " + entry.getKey() + "," + entry.getValue() + "]");
+//        }
+
+        //Enumeration enum1 = request.getHeaderNames();
+
+        //while (enum1.hasMoreElements()) {
+
+        //    String key = (String) enum1.nextElement();
+
+        //   String value = request.getHeader(key);
+
+        //    System.out.println(key + "\t" + value);
+
+        //}
+
+        if ("PersonInfo".equals(url)) {
+
+            try {
+                BufferedReader streamReader = new BufferedReader(new InputStreamReader(request.getInputStream(), "UTF-8"));
+                StringBuilder responseStrBuilder = new StringBuilder();
+                String inputStr;
+                while ((inputStr = streamReader.readLine()) != null) {
+                    responseStrBuilder.append(inputStr);
+                }
+                //        结构化事件
+//                JSONObject jsonObject = JSONObject.parseObject(responseStrBuilder.toString());
+//                JSONObject structureInfo = JSONObject.parseObject(jsonObject.get("StructureInfo").toString());
+//                JSONArray imageInfoList = structureInfo.getJSONArray("ImageInfoList");
+//                for (int i = 0; i < imageInfoList.size(); i++) {
+//                    String data = "data:image/jpeg;base64,"+imageInfoList.getJSONObject(i).get("Data").toString();
+//                    String fileNameWithPath = FileUtil.getFileNameWithPath() + ".jpg";
+//                    FileUtil.makeDirs(fileNameWithPath, "E:\\image2");
+//                    String imgFilePath = "E:\\image2\\" + fileNameWithPath;
+//                    Base64Utils.GenerateImage(data, imgFilePath);
+//                }
+
+//                人脸对比上报预警
+                JSONObject jsonObject = JSONObject.parseObject(responseStrBuilder.toString());
+                JSONObject personEventInfo = JSONObject.parseObject(jsonObject.get("PersonEventInfo").toString());
+                JSONArray faceInfoList = personEventInfo.getJSONArray("FaceInfoList");
+                for (int i = 0; i < faceInfoList.size(); i++) {
+//                    通道号
+                    String channelID = faceInfoList.getJSONObject(i).get("ChannelID").toString();
+
+                    JSONObject compareInfo = JSONObject.parseObject(faceInfoList.getJSONObject(i).get("CompareInfo").toString());
+                    JSONObject snapshotImage = JSONObject.parseObject(compareInfo.getString("SnapshotImage"));
+                    JSONObject bigImage = JSONObject.parseObject(snapshotImage.getString("BigImage"));
+//                    获取base64为编码
+                    String dataBase ="data:image/jpeg;base64,"+bigImage.getString("Data");
+
+                    String fileNameWithPath = FileUtil.getFileNameWithPath() + ".jpg";
+                    FileUtil.makeDirs(fileNameWithPath, "E:\\image3");
+                    String imgFilePath = "E:\\image3\\" + fileNameWithPath;
+                    Base64Utils.GenerateImage(dataBase, imgFilePath);
+
+                }
+
+
+            } catch (UnsupportedEncodingException e) {
+                throw new RuntimeException(e);
+            } catch (IOException e) {
+                throw new RuntimeException(e);
+            }
+            //body部分
+
+//        String inputLine;
+//
+//        String str = "";
+//
+//        try {
+//
+//            while ((inputLine = br.readLine()) != null) {
+//
+//                str += inputLine;
+//
+//            }
+//
+//            br.close();
+//
+//        } catch (IOException e) {
+//
+//            System.out.println("IOException: " + e);
+//
+//        }
+//
+//        System.out.println("str:" + str);
+
+
+        }
+    }
+
+
+}
+
+
+

+ 60 - 0
src/main/java/com/chuanghai/student_portrait/entity/Access.java

@@ -0,0 +1,60 @@
+package com.chuanghai.student_portrait.entity;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import lombok.ToString;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotEmpty;
+import java.util.Date;
+
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+@ToString
+@TableName(value = "access")
+public class Access {
+    /**
+     * 门禁记录ID主键
+     */
+    @TableId(value = "access_id")
+    @NotEmpty(message = "门禁记录ID格式错误!")
+    private Long accessId;
+
+    /**
+     * 门禁记录地址
+     */
+    @TableField(value = "access_address")
+    @NotBlank(message = "门禁记录地址不能为空!")
+    private String accessAddress;
+
+    /**
+     * 门禁记录时间
+     */
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    @TableField(value = "access_time")
+    private Date accessTime;
+
+    /**
+     * 门禁记录事项
+     */
+    @TableField(value = "access_event")
+    private String accessEvent;
+
+    /**
+     * 门禁记录用户标识
+     */
+    @TableField(value = "card_number")
+    private String cardNumber;
+
+
+
+    @TableField(value = "group_name")
+    private String groupName;
+}

+ 26 - 0
src/main/java/com/chuanghai/student_portrait/entity/AffinityScore.java

@@ -0,0 +1,26 @@
+package com.chuanghai.student_portrait.entity;
+
+import lombok.Data;
+
+import java.util.Date;
+
+@Data
+public class AffinityScore {
+    private Integer id;
+//    触发学生的id
+    private String schooluserId;
+//    触发时间
+    private Date dateTime;
+//    关系人名字
+    private String name;
+//    学号
+    private String studentId;
+//    专业
+    private String profession;
+//    班级
+    private String clazz;
+//    触发次数
+    private Integer count;
+//    关系人名字id
+    private String nameSchooluserId;
+}

+ 35 - 0
src/main/java/com/chuanghai/student_portrait/entity/AirConditioning.java

@@ -0,0 +1,35 @@
+package com.chuanghai.student_portrait.entity;
+
+import lombok.Data;
+
+/**
+ * @Author:liu
+ * @Date: 2022/9/20  10:26
+ * @Version 1.0
+ */
+@Data
+public class AirConditioning {
+
+
+    private String id;
+    private String consumeDuration;
+    //    消费时长
+    private String consumeMoney;
+    //    消费金额
+    private String consumeLocus;
+    //    消费地点
+    private String airConditioningType;
+    //    空调类型
+    private String name;
+    //    姓名
+    private String gender;
+    //    性别
+    private String idCard;
+    //    身份证
+    private String studentId;
+    //    学号
+    private String identityType;
+    //    人员类型
+
+
+}

+ 12 - 0
src/main/java/com/chuanghai/student_portrait/entity/ColdWater.java

@@ -0,0 +1,12 @@
+package com.chuanghai.student_portrait.entity;
+
+import lombok.Data;
+
+@Data
+public class ColdWater {
+    private Integer id;
+    private String dataTime;
+    private String dom;
+    private Double totalMoney;
+    private Double totalPower;
+}

+ 66 - 0
src/main/java/com/chuanghai/student_portrait/entity/Consume.java

@@ -0,0 +1,66 @@
+package com.chuanghai.student_portrait.entity;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import lombok.ToString;
+
+import java.util.Date;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+@ToString
+@TableName(value = "consume")
+public class Consume {
+    /**
+     * 消费记录ID主键
+     */
+    @TableId(value = "id")
+    private Long id;
+
+    /**
+     * 消费记录地点
+     */
+    @TableField(value = "consume_address")
+    private String consumeAddress;
+
+    /**
+     * 消费记录时间
+     */
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    @TableField(value = "consume_time")
+    private Date consumeTime;
+
+    /**
+     * 消费记录事项
+     */
+    @TableField(value = "consume_event")
+    private String consumeEvent;
+
+    /**
+     * 消费记录用户标识
+     */
+    @TableField(value = "id_card")
+    private String idCard;
+
+    /**
+     * 消费金额
+     */
+    @TableField(value = "consume_amount")
+    private String consumeAmount;
+
+    @TableField(value = "org_name")
+    private String orgName;
+
+//    /**
+//     * 总收益
+//     */
+//    @TableField(exist = false)
+//    private Double sumAll;
+
+}

+ 22 - 0
src/main/java/com/chuanghai/student_portrait/entity/Dorm.java

@@ -0,0 +1,22 @@
+package com.chuanghai.student_portrait.entity;
+
+import lombok.Data;
+
+/**
+ * @Author:liu
+ * @Date: 2022/9/21  15:34
+ * @Version 1.0
+ */
+@Data
+public class Dorm {
+    private Integer id;
+//    校区
+    private String school;
+//    楼
+    private String build;
+//    层
+    private String floors;
+//    宿舍号
+    private String dom;
+
+}

+ 18 - 0
src/main/java/com/chuanghai/student_portrait/entity/Electricity.java

@@ -0,0 +1,18 @@
+package com.chuanghai.student_portrait.entity;
+
+import lombok.Data;
+
+import java.util.Date;
+
+@Data
+public class Electricity {
+    private Integer id;
+//    时间
+    private String dateTime;
+//    宿舍号
+    private String dom;
+//    消费总金额
+    private Double totalMoney;
+//    消费总功率
+    private Double totalPower;
+}

+ 49 - 0
src/main/java/com/chuanghai/student_portrait/entity/Equipment.java

@@ -0,0 +1,49 @@
+package com.chuanghai.student_portrait.entity;
+
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import lombok.ToString;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+@ToString
+@TableName(value = "equipment")
+public class Equipment {
+    /**
+     * 设备编号
+     */
+    @TableId(value = "equipment_id")
+    private String equipmentId;
+
+    /**
+     * 设备名称
+     */
+    @TableField(value = "equipment_name")
+    private String equipmentName;
+
+    /**
+     * 设备型号
+     */
+    @TableField(value = "equipment_type")
+    private String equipmentType;
+
+    /**
+     * 设备状态1(使用中)0(未使用)
+     */
+    @TableField(value = "equipment_statu")
+    private String equipmentStatu;
+
+    /**
+     * 设备安装地址
+     */
+    @TableField(value = "equipment_address")
+    private String equipmentAddress;
+
+
+}

+ 25 - 0
src/main/java/com/chuanghai/student_portrait/entity/ExamNumbers.java

@@ -0,0 +1,25 @@
+package com.chuanghai.student_portrait.entity;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
+/**
+ * @Author:liu
+ * @Date: 2022/9/30  14:21
+ * @Version 1.0
+ */
+@Data
+@TableName(value = "exam_numbers")
+public class ExamNumbers {
+
+    @TableId(value = "id")
+    private Integer id;
+    @TableField(value = "name")
+    private String name;
+    @TableField(value = "student_nts")
+    private String studentNts;
+    @TableField(value = "id_card")
+    private String idCard;
+}

+ 76 - 0
src/main/java/com/chuanghai/student_portrait/entity/FaceDiscern.java

@@ -0,0 +1,76 @@
+package com.chuanghai.student_portrait.entity;
+
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import lombok.ToString;
+
+import java.util.Date;
+
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+@ToString
+@TableName(value = "facediscern")
+public class FaceDiscern {
+
+    /**
+     * 人脸识别记录ID主键
+     */
+    @TableId(value = "faceDiscern_id")
+    private Long facediscernId;
+
+    /**
+     * 人脸识别记录地点
+     */
+    @TableField(value = "faceDiscern_address")
+    private String facediscernAddress;
+
+    /**
+     * 人脸识别记录时间
+     */
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    @TableField(value = "faceDiscern_time")
+    private Date facediscernTime;
+
+    /**
+     * 人脸识别记录事项
+     */
+    @TableField(value = "faceDiscern_event")
+    private String facediscernEvent;
+
+    /**
+     * 人脸识别记录用户标识
+     */
+    @TableField(value = "shooluser_id")
+    private String shooluserId;
+
+    /**
+     * 人脸识别机类型Y(百胜)U(宇视)
+     */
+    @TableField(value = "faceDiscern_type")
+    private String facediscernType;
+
+
+    /**
+     * 人脸识别比对记录 1(成功)2(失败)
+     */
+    @TableField(value = "faceRecord_type")
+    private String faceRecordType;
+
+    @TableField(value = "dorm_number")
+    private String dormNumber;
+
+    @TableField(value = "name")
+    private String name;
+
+//    抓拍的现场图片
+    @TableField(value = "picture_scene")
+    private String pictureScene;
+}

+ 81 - 0
src/main/java/com/chuanghai/student_portrait/entity/ForeWarningEntity.java

@@ -0,0 +1,81 @@
+package com.chuanghai.student_portrait.entity;
+
+import com.alibaba.excel.annotation.ExcelProperty;
+import lombok.Data;
+
+import java.util.Date;
+
+
+public class ForeWarningEntity {
+
+    @ExcelProperty("姓名")
+    private String name;
+    @ExcelProperty("学号")
+    private String studentId;
+    @ExcelProperty("专业")
+    private String profession;
+    @ExcelProperty("班级")
+    private String clazz;
+    @ExcelProperty("时间")
+    private String dateTime;
+    @ExcelProperty("预警原因")
+    private String warningReason;
+    @ExcelProperty("备注")
+    private String remark;
+
+    public String getName() {
+        return name;
+    }
+
+    public String getStudentId() {
+        return studentId;
+    }
+
+    public String getProfession() {
+        return profession;
+    }
+
+    public String getClazz() {
+        return clazz;
+    }
+
+    public String getDateTime() {
+        return dateTime;
+    }
+
+    public String getWarningReason() {
+        return warningReason;
+    }
+
+    public String getRemark() {
+        return remark;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public void setStudentId(String studentId) {
+        this.studentId = studentId;
+    }
+
+    public void setProfession(String profession) {
+        this.profession = profession;
+    }
+
+    public void setClazz(String clazz) {
+        this.clazz = clazz;
+    }
+
+    public void setDateTime(String dateTime) {
+        this.dateTime = dateTime;
+    }
+
+    public void setWarningReason(String warningReason) {
+        this.warningReason = warningReason;
+    }
+
+    public void setRemark(String remark) {
+        this.remark = remark;
+    }
+}

+ 24 - 0
src/main/java/com/chuanghai/student_portrait/entity/Forewarning.java

@@ -0,0 +1,24 @@
+package com.chuanghai.student_portrait.entity;
+
+import lombok.Data;
+
+import java.util.Date;
+
+@Data
+public class Forewarning {
+    private Integer id;
+//    学生姓名
+    private String name;
+//    学号
+    private String studentId;
+//    专业名称
+    private String professionName;
+//    班级
+    private String clazz;
+//    时间日期
+    private Date dateTime;
+//    预警原因(1是大门门禁未关,2是水电消费异常,3单次食堂消费过高,4宿舍门禁异常)
+    private String warningReason;
+//    备注
+    private String remark;
+}

+ 62 - 0
src/main/java/com/chuanghai/student_portrait/entity/HotWater.java

@@ -0,0 +1,62 @@
+package com.chuanghai.student_portrait.entity;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import lombok.ToString;
+
+import java.util.Date;
+
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+@ToString
+@TableName(value = "hotwater")
+public class HotWater {
+    /**
+     * 热水记录ID主键
+     */
+    @TableId(value = "hotWater_id")
+    private Long hotwaterId;
+
+    /**
+     * 热水记录地点
+     */
+    @TableField(value = "hotWater_address")
+    private String hotwaterAddress;
+
+    /**
+     * 热水记录时间
+     */
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    @TableField(value = "hotWater_time")
+    private Date hotwaterTime;
+
+    /**
+     * 热水记录事项
+     */
+    @TableField(value = "hotWater_event")
+    private String hotwaterEvent;
+
+    /**
+     * 热水记录用户标识
+     */
+    @TableField(value = "card_number")
+    private String cardNumber;
+
+
+    /**
+     * 热水记录消费金额
+     */
+    @TableField(value = "hotwater_amount")
+    private String hotwaterAmount;
+
+
+
+
+}

+ 66 - 0
src/main/java/com/chuanghai/student_portrait/entity/NewSchooluser.java

@@ -0,0 +1,66 @@
+package com.chuanghai.student_portrait.entity;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import lombok.Data;
+
+/**
+ * @Author:liu
+ * @Date: 2022/9/16  9:26
+ * @Version 1.0
+ */
+@Data
+public class NewSchooluser {
+
+
+    private String id;
+
+    private String cardNumber;
+    //           电子卡号',
+    private String studentId;
+    //    '学号',
+    private String idCard;
+    //    '身份证号',
+    private String name;
+    //    '名字',
+    private String gender;
+//    '性别(0为未知,1为男,2为女)',
+    private String grade;
+//    '年级',
+    private String identityType;
+//    身份类型,1为其他,2为学生,3为教职工,4为校友',
+    private String build;
+//    楼栋
+    private String floors;
+//    楼层
+private String dormNumber;
+//    宿舍号
+    private String birthday;
+//    生日',
+    private String address;
+//    地址',
+    private String province;
+//    '省',
+    private String city;
+//    市',
+    private String originPlace;
+//    生源地',
+    private String graduatedSchool;
+//    毕业学校',
+    private String college;
+//    学院',
+    private String profession;
+//    专业',
+    private String clazz;
+//    班级',
+    private String distance;
+//    距离',
+    private String nation;
+//    名族',
+    private String studentNts;
+//    准考证号
+    private String headImage;
+
+
+
+
+}

+ 47 - 0
src/main/java/com/chuanghai/student_portrait/entity/OldSchooluser.java

@@ -0,0 +1,47 @@
+package com.chuanghai.student_portrait.entity;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import lombok.Data;
+
+/**
+ * @Author:liu
+ * @Date: 2022/9/15  9:48
+ * @Version 1.0
+ */
+@Data
+public class OldSchooluser   {
+    private String id;
+    private String cardNumber;
+    private String name;
+    private String gender;
+    private String headImage;
+    private String identityType;
+    private String grade;
+    private String campus;
+    private String dormNumber;
+    private String physicalChipNumber;
+    private String physicalCardNumber;
+    private String nation;
+    private String originPlace;
+    private String graduatedSchool;
+    private String address;
+    private String qq;
+    private String email;
+    private String cardType;
+    private String identityTitle;
+    private String college;
+    private String profession;
+    private String clazz;
+    private String idCard;
+    private String country;
+    private String telephone;
+    private String dataSource;
+    private String startAt;
+    private String expireAt;
+    private String jobTitle;
+    private String serialNumber;
+    private String schoolPeriod;
+    private String registerYear;
+    private String organization;
+    private String department;
+}

+ 10 - 0
src/main/java/com/chuanghai/student_portrait/entity/Province.java

@@ -0,0 +1,10 @@
+package com.chuanghai.student_portrait.entity;
+
+import lombok.Data;
+
+@Data
+public class Province {
+    private Integer id;
+    private String provinceCode;
+    private String provinceName;
+}

+ 15 - 0
src/main/java/com/chuanghai/student_portrait/entity/Stall.java

@@ -0,0 +1,15 @@
+package com.chuanghai.student_portrait.entity;
+
+import lombok.Data;
+
+/**
+ * @Author:liu
+ * @Date: 2022/9/23  10:45
+ * @Version 1.0
+ */
+@Data
+public class Stall {
+    private Integer id;
+    private String address;
+    private String name;
+}

+ 59 - 0
src/main/java/com/chuanghai/student_portrait/entity/Student.java

@@ -0,0 +1,59 @@
+package com.chuanghai.student_portrait.entity;
+
+import cn.afterturn.easypoi.excel.annotation.Excel;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.*;
+
+import javax.validation.constraints.NotEmpty;
+import java.io.Serializable;
+
+/**
+ * @Author: bingo
+ * @Date: 2022/5/16 星期一 16:09
+ * @Description: 通过execl导入学员的准考证信息,将准考证信息与schoolUser总表相关联
+ * @version: 1.0
+ */
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+@Getter
+@Setter
+@ToString
+@TableName("student")
+public class Student implements Serializable {
+
+    private static final long serialVersionUID = 6654802207729407762L;
+
+    /**
+     * 用户编号
+     */
+    @TableId("studentid")
+    private Integer studentId;
+    /**
+     * 用户的姓名
+     */
+    @Excel(name = "姓名", width = 25)
+    @TableField("studentname")
+    @NotEmpty(message = "姓名不能为空")
+    private String studentName;
+
+    /**
+     * 用户的准考证号
+     */
+    @Excel(name = "准考证号", width = 35)
+    @TableField("studentnts")
+    @NotEmpty(message = "准考证号不能为空")
+    private String studentNTS;
+
+    /**
+     * 用户的身份证号
+     */
+    @Excel(name = "身份证号", width = 35)
+    @TableField("studentidcard")
+    @NotEmpty(message = "身份证号不能为空")
+    private String studentIdCard;
+
+
+}

+ 14 - 0
src/main/java/com/chuanghai/student_portrait/entity/StudentSheet.java

@@ -0,0 +1,14 @@
+package com.chuanghai.student_portrait.entity;
+
+import lombok.Data;
+
+@Data
+public class StudentSheet {
+    private Integer id;
+    private String studentId;
+    private String name;
+    private String idCard;
+    private String college;
+    private String profession;
+    private String clazz;
+}

+ 58 - 0
src/main/java/com/chuanghai/student_portrait/entity/User.java

@@ -0,0 +1,58 @@
+package com.chuanghai.student_portrait.entity;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import lombok.ToString;
+
+import javax.validation.constraints.NotEmpty;
+import javax.validation.constraints.Pattern;
+
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+@ToString
+@TableName(value = "activeuser")
+public class User {
+    /**
+     * 用户标识主键
+     */
+
+    @TableId(value = "card_number")
+    @NotEmpty(message = "用户ID格式错误!")
+    private String cardNumber;
+
+    /**
+     * 用户名称
+     */
+    @TableField(value = "user_name")
+    @NotEmpty(message = "用户名称格式错误!")
+    private String userName;
+
+    /**
+     * 用户身份0(学生)1(教师)2(职工)3(访客)4(其他)
+     */
+    @TableField(value = "user_type")
+    @Pattern(regexp = "[0-4]{1}", message = "用户身份0(学生)1(教师)2(职工)3(访客)4(其他)")
+    private String userType;
+
+    /**
+     * 用户宿舍
+     */
+    @TableField(value = "user_dorm")
+    @NotEmpty(message = "用户宿舍格式错误!")
+    private String userDorm;
+
+    /**
+     * 用户部门班级
+     */
+    @TableField(value = "user_sectionClass")
+    @NotEmpty(message = "用户部门班级格式错误!")
+    private String userSectionclass;
+
+
+}

+ 44 - 0
src/main/java/com/chuanghai/student_portrait/entity/Warning.java

@@ -0,0 +1,44 @@
+package com.chuanghai.student_portrait.entity;
+
+import lombok.Data;
+
+import java.util.Date;
+
+/**
+ * @Author:liu
+ * @Date: 2022/9/6  9:51
+ * @Version 1.0
+ */
+@Data
+public class Warning {
+    /**
+     * 用户姓名
+     */
+    private String name;
+
+    /**
+     * 用户学号
+     */
+    private String studentNo;
+
+    /**
+     * 用户专业
+     */
+    private String profession;
+
+    /**
+     * 用户班级
+     */
+    private String clazz;
+
+    /**
+     * 门禁记录时间
+     */
+    private Date facediscernTime;
+
+    /**
+     * 预警信息
+     */
+    private String warning;
+
+}

+ 19 - 0
src/main/java/com/chuanghai/student_portrait/entity/dto/AccessCountDto.java

@@ -0,0 +1,19 @@
+package com.chuanghai.student_portrait.entity.dto;
+
+import lombok.Builder;
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * @Author:liu
+ * @Date: 2022/9/26  9:35
+ * @Version 1.0
+ */
+@Data
+public class AccessCountDto implements Serializable {
+    private String address;
+    private Integer count;
+    private String startTime;
+    private String endTime;
+}

+ 17 - 0
src/main/java/com/chuanghai/student_portrait/entity/dto/ConsumeDto.java

@@ -0,0 +1,17 @@
+package com.chuanghai.student_portrait.entity.dto;
+
+
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * @Author:liu
+ * @Date: 2022/9/20  17:02
+ * @Version 1.0
+ */
+@Data
+public class ConsumeDto implements Serializable {
+    private Integer count;
+    private String name;
+}

+ 11 - 0
src/main/java/com/chuanghai/student_portrait/entity/dto/ConsumeTotalMoneyDto.java

@@ -0,0 +1,11 @@
+package com.chuanghai.student_portrait.entity.dto;
+
+import lombok.Data;
+
+@Data
+public class ConsumeTotalMoneyDto {
+//    省份
+    private String province;
+//    总金额
+    private Integer totalMoney;
+}

+ 9 - 0
src/main/java/com/chuanghai/student_portrait/entity/dto/DistrictDto.java

@@ -0,0 +1,9 @@
+package com.chuanghai.student_portrait.entity.dto;
+
+import lombok.Data;
+
+@Data
+public class DistrictDto {
+    private String province;
+    private Long Count;
+}

+ 13 - 0
src/main/java/com/chuanghai/student_portrait/entity/dto/EnergyDto.java

@@ -0,0 +1,13 @@
+package com.chuanghai.student_portrait.entity.dto;
+
+import lombok.Data;
+
+import java.util.Date;
+
+@Data
+public class EnergyDto {
+    private String genderDrom;
+    private Double totalMoney;
+    private Object date;
+    private String name;
+}

+ 10 - 0
src/main/java/com/chuanghai/student_portrait/entity/dto/PersonConsumDto.java

@@ -0,0 +1,10 @@
+package com.chuanghai.student_portrait.entity.dto;
+
+import lombok.Data;
+
+@Data
+public class PersonConsumDto {
+    private String name;
+    private Object money;
+}
+

+ 16 - 0
src/main/java/com/chuanghai/student_portrait/entity/dto/PersonalTrackDto.java

@@ -0,0 +1,16 @@
+package com.chuanghai.student_portrait.entity.dto;
+
+import lombok.Data;
+
+import java.util.Date;
+
+@Data
+public class PersonalTrackDto {
+    private Date dateTime;
+//    图片
+    private String image;
+//    事件
+    private String affair;
+//   名字
+    private String name;
+}

+ 21 - 0
src/main/java/com/chuanghai/student_portrait/exception/BaseErrorInfoInterface.java

@@ -0,0 +1,21 @@
+package com.chuanghai.student_portrait.exception;
+
+/**
+ * @Title: BaseErrorInfoInterface
+ * @Description: 基础接口
+ * 自定义的错误描述枚举类需实现该接口
+ * @Version:1.0.0
+ * @Author: bingo
+ * @Date: 2022/4/11 星期一 19:20
+ */
+public interface BaseErrorInfoInterface {
+    /**
+     * 错误码
+     */
+    String getResultCode();
+
+    /**
+     * 错误描述
+     */
+    String getResultMsg();
+}

+ 86 - 0
src/main/java/com/chuanghai/student_portrait/exception/BizException.java

@@ -0,0 +1,86 @@
+package com.chuanghai.student_portrait.exception;
+
+/**
+ * @Title: BizException
+ * @Description: 业务异常类
+ * @Version:1.0.0
+ * @Author: bingo
+ * @Date: 2022/4/11 星期一 19:20
+ */
+public class BizException extends RuntimeException {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 错误码
+     */
+    protected String errorCode;
+    /**
+     * 错误信息
+     */
+    protected String errorMsg;
+
+    public BizException() {
+        super();
+    }
+
+    public BizException(BaseErrorInfoInterface errorInfoInterface) {
+        super(errorInfoInterface.getResultCode());
+        this.errorCode = errorInfoInterface.getResultCode();
+        this.errorMsg = errorInfoInterface.getResultMsg();
+    }
+
+    public BizException(BaseErrorInfoInterface errorInfoInterface, Throwable cause) {
+        super(errorInfoInterface.getResultCode(), cause);
+        this.errorCode = errorInfoInterface.getResultCode();
+        this.errorMsg = errorInfoInterface.getResultMsg();
+    }
+
+    public BizException(String errorMsg) {
+        super(errorMsg);
+        this.errorMsg = errorMsg;
+    }
+
+    public BizException(String errorCode, String errorMsg) {
+        super(errorCode);
+        this.errorCode = errorCode;
+        this.errorMsg = errorMsg;
+    }
+
+    public BizException(String errorCode, String errorMsg, Throwable cause) {
+        super(errorCode, cause);
+        this.errorCode = errorCode;
+        this.errorMsg = errorMsg;
+    }
+
+
+    public String getErrorCode() {
+        return errorCode;
+    }
+
+    public void setErrorCode(String errorCode) {
+        this.errorCode = errorCode;
+    }
+
+    public String getErrorMsg() {
+        return errorMsg;
+    }
+
+    public void setErrorMsg(String errorMsg) {
+        this.errorMsg = errorMsg;
+    }
+
+    @Override
+    public String getMessage() {
+        return errorMsg;
+    }
+
+    /**
+     *
+     */
+    @Override
+    public Throwable fillInStackTrace() {
+        return this;
+    }
+
+}

+ 44 - 0
src/main/java/com/chuanghai/student_portrait/exception/CommonEnum.java

@@ -0,0 +1,44 @@
+package com.chuanghai.student_portrait.exception;
+
+/**
+ * @Author: bingo
+ * @Date: 2022/4/11 星期一 19:20
+ * @Description: com.chuanghai.recognition.exception
+ * @version: 1.0
+ */
+public enum CommonEnum implements BaseErrorInfoInterface {
+    // 数据操作错误定义
+    SUCCESS("200", "成功!"),
+    BODY_NOT_MATCH("400", "请求的数据格式不符!"),
+    SIGNATURE_NOT_MATCH("401", "请求的数字签名不匹配!"),
+    NOT_FOUND("404", "未找到该资源!"),
+    INTERNAL_SERVER_ERROR("500", "服务器内部错误!"),
+    SERVER_BUSY("503", "服务器正忙,请稍后再试!");
+
+    /**
+     * 错误码
+     */
+    private String resultCode;
+
+    /**
+     * 错误描述
+     */
+    private String resultMsg;
+
+    CommonEnum(String resultCode, String resultMsg) {
+        this.resultCode = resultCode;
+        this.resultMsg = resultMsg;
+    }
+
+    @Override
+    public String getResultCode() {
+        return resultCode;
+    }
+
+    @Override
+    public String getResultMsg() {
+        return resultMsg;
+    }
+
+}
+

+ 106 - 0
src/main/java/com/chuanghai/student_portrait/exception/GlobalExceptionHandler.java

@@ -0,0 +1,106 @@
+package com.chuanghai.student_portrait.exception;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.util.CollectionUtils;
+import org.springframework.validation.BindException;
+import org.springframework.validation.ObjectError;
+import org.springframework.web.bind.annotation.ExceptionHandler;
+import org.springframework.web.bind.annotation.ResponseBody;
+import org.springframework.web.bind.annotation.RestControllerAdvice;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.validation.ConstraintViolation;
+import javax.validation.ConstraintViolationException;
+import java.util.List;
+import java.util.Set;
+
+
+/**
+ * @Title: GlobalExceptionHandler
+ * @Description: 全局异常处理
+ * 如果使用@RestControllerAdvice 注解
+ * 则会将返回的数据类型转换成JSON格式
+ * @Version:1.0.0
+ * @Author: bingo
+ * @Date: 2022/4/11 星期一 19:20
+ */
+@RestControllerAdvice
+public class GlobalExceptionHandler {
+    private static final Logger logger = LoggerFactory.getLogger(GlobalExceptionHandler.class);
+
+    /**
+     * 处理自定义的业务异常
+     *
+     * @param req
+     * @param e
+     * @return
+     */
+    @ExceptionHandler(value = BizException.class)   //自定义业务异常
+    @ResponseBody
+    public ResultValue bizExceptionHandler(HttpServletRequest req, BizException e) {
+//    	logger.error("发生业务异常!原因是:{}",e.getErrorMsg());
+        logger.error("发生业务异常!原因是:", e);  //没有打印异常调用栈,不知道是哪一行异常?
+        return ResultValue.error(e.getErrorCode(), e.getErrorMsg());
+    }
+
+    /**
+     * 处理空指针的异常
+     *
+     * @param req
+     * @param e
+     * @return
+     */
+    @ExceptionHandler(value = NullPointerException.class) //空指针异常
+    @ResponseBody
+    public ResultValue exceptionHandler(HttpServletRequest req, NullPointerException e) {
+        logger.error("发生空指针异常!原因是:", e); //会打印异常调用栈
+        return ResultValue.error(CommonEnum.BODY_NOT_MATCH);
+    }
+
+
+    /**
+     * 处理其他异常
+     *
+     * @param req
+     * @param e
+     * @return
+     */
+    @ExceptionHandler(value = Exception.class) //其他异常
+    @ResponseBody
+    public ResultValue exceptionHandler(HttpServletRequest req, Exception e) {
+        logger.error("未知异常!原因是:", e);
+        return ResultValue.error(CommonEnum.INTERNAL_SERVER_ERROR);
+    }
+
+    /**
+     * 校验参数是否合法
+     *
+     * @param exception
+     * @return
+     */
+    @ExceptionHandler({BindException.class})
+    public ResultValue validationException(BindException exception) {
+        List<ObjectError> errors = exception.getAllErrors();
+        if (!CollectionUtils.isEmpty(errors)) {
+            StringBuilder sb = new StringBuilder();
+            errors.forEach(e -> sb.append(e.getDefaultMessage()).append(" "));
+            return new ResultValue().error("400", sb.toString());
+        }
+        return new ResultValue().error("500", exception.getLocalizedMessage());
+    }
+
+    @ExceptionHandler({ConstraintViolationException.class})
+    public ResultValue constraintViolationException(ConstraintViolationException exception) {
+        Set<ConstraintViolation<?>> constraintViolations = exception.getConstraintViolations();
+        if (!CollectionUtils.isEmpty(constraintViolations)) {
+            StringBuilder sb = new StringBuilder();
+            constraintViolations.forEach(e -> sb.append(e.getMessage()).append(" "));
+            new ResultValue().error("400", sb.toString());
+
+        }
+        return new ResultValue().error("500", exception.getLocalizedMessage());
+    }
+
+
+}

+ 125 - 0
src/main/java/com/chuanghai/student_portrait/exception/ResultValue.java

@@ -0,0 +1,125 @@
+package com.chuanghai.student_portrait.exception;
+
+import lombok.Data;
+import lombok.ToString;
+
+/**
+ * @Author: bingo
+ * @Date: 2022/4/11 星期一 19:22
+ * @Description: com.chuanghai.recognition.utils
+ * @version: 1.0
+ */
+@Data
+@ToString
+public class ResultValue {
+    /**
+     * 响应代码
+     */
+    private String code;
+
+
+    /**
+     * 响应消息
+     */
+    private String message;
+
+
+    /**
+     * 响应结果
+     */
+    private Object result;
+
+
+    public ResultValue() {
+    }
+
+    public ResultValue(BaseErrorInfoInterface errorInfo) {
+        this.code = errorInfo.getResultCode();
+        this.message = errorInfo.getResultMsg();
+    }
+
+    public String getCode() {
+        return code;
+    }
+
+    public void setCode(String code) {
+        this.code = code;
+    }
+
+    public String getMessage() {
+        return message;
+    }
+
+    public void setMessage(String message) {
+        this.message = message;
+    }
+
+    public Object getResult() {
+        return result;
+    }
+
+    public void setResult(Object result) {
+        this.result = result;
+    }
+
+
+    /**
+     * 成功
+     *
+     * @return
+     */
+    public static ResultValue success() {
+        return success(null);
+    }
+
+    /**
+     * 成功
+     *
+     * @param data
+     * @return
+     */
+    public static ResultValue success(Object data) {
+        ResultValue rb = new ResultValue();
+        rb.setCode(CommonEnum.SUCCESS.getResultCode());
+        rb.setMessage(CommonEnum.SUCCESS.getResultMsg());
+        rb.setResult(data);
+        return rb;
+    }
+
+
+    /**
+     * 失败
+     */
+    public static ResultValue error(BaseErrorInfoInterface errorInfo) {
+        ResultValue rb = new ResultValue();
+        rb.setCode(errorInfo.getResultCode());
+        rb.setMessage(errorInfo.getResultMsg());
+        rb.setResult(null);
+        return rb;
+    }
+
+    /**
+     * 失败
+     */
+    public static ResultValue error(String code, String message) {
+        ResultValue rb = new ResultValue();
+        rb.setCode(code);
+        rb.setMessage(message);
+        rb.setResult(null);
+        return rb;
+    }
+
+    /**
+     * 失败
+     */
+    public static ResultValue error(String message) {
+        ResultValue rb = new ResultValue();
+        rb.setCode("-1");
+        rb.setMessage(message);
+        rb.setResult(null);
+        return rb;
+    }
+
+
+}
+

+ 39 - 0
src/main/java/com/chuanghai/student_portrait/exception/validatorConfiguration.java

@@ -0,0 +1,39 @@
+package com.chuanghai.student_portrait.exception;
+
+import org.hibernate.validator.HibernateValidator;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.validation.beanvalidation.MethodValidationPostProcessor;
+
+import javax.validation.Validation;
+import javax.validation.Validator;
+import javax.validation.ValidatorFactory;
+
+/**
+ * @Author: bingo
+ * @Date: 2022/4/11 星期一 20:12
+ * @Description: 通过配置Validation校验规则,当校验出第一个错误之后就停止校验
+ * @version: 1.0
+ */
+@Configuration
+public class validatorConfiguration {
+
+    @Bean
+    public MethodValidationPostProcessor methodValidationPostProcessor() {
+        MethodValidationPostProcessor postProcessor = new MethodValidationPostProcessor();
+        postProcessor.setValidator(this.validator());
+        return postProcessor;
+    }
+
+    @Bean
+    public Validator validator() {
+        ValidatorFactory validatorFactory = Validation.byProvider(HibernateValidator.class)
+                .configure()
+                //为true时,校验到第一个不合法时就会停止校验
+                .addProperty("hibernate.validator.fail_fast", "true")
+                .buildValidatorFactory();
+
+        Validator validator = validatorFactory.getValidator();
+        return validator;
+    }
+}

+ 15 - 0
src/main/java/com/chuanghai/student_portrait/mapper/AccessMapper.java

@@ -0,0 +1,15 @@
+package com.chuanghai.student_portrait.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.chuanghai.student_portrait.entity.Access;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * @Author:liu
+ * @Date: 2022/9/23  16:53
+ * @Version 1.0
+ */
+@Mapper
+public interface AccessMapper extends BaseMapper<Access> {
+
+}

+ 9 - 0
src/main/java/com/chuanghai/student_portrait/mapper/AffinityScoreMapper.java

@@ -0,0 +1,9 @@
+package com.chuanghai.student_portrait.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.chuanghai.student_portrait.entity.AffinityScore;
+import org.apache.ibatis.annotations.Mapper;
+
+@Mapper
+public interface AffinityScoreMapper extends BaseMapper<AffinityScore> {
+}

+ 14 - 0
src/main/java/com/chuanghai/student_portrait/mapper/AirConditioningMapper.java

@@ -0,0 +1,14 @@
+package com.chuanghai.student_portrait.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.chuanghai.student_portrait.entity.AirConditioning;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * @Author:liu
+ * @Date: 2022/9/20  10:32
+ * @Version 1.0
+ */
+@Mapper
+public interface AirConditioningMapper extends BaseMapper<AirConditioning> {
+}

+ 9 - 0
src/main/java/com/chuanghai/student_portrait/mapper/ColdWaterMapper.java

@@ -0,0 +1,9 @@
+package com.chuanghai.student_portrait.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.chuanghai.student_portrait.entity.ColdWater;
+import org.apache.ibatis.annotations.Mapper;
+
+@Mapper
+public interface ColdWaterMapper extends BaseMapper<ColdWater> {
+}

+ 21 - 0
src/main/java/com/chuanghai/student_portrait/mapper/ConsumeMapper.java

@@ -0,0 +1,21 @@
+package com.chuanghai.student_portrait.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.chuanghai.student_portrait.entity.Consume;
+import com.chuanghai.student_portrait.entity.dto.ConsumeDto;
+import com.chuanghai.student_portrait.response.BaseResponse;
+import org.apache.ibatis.annotations.Mapper;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+/**
+ * @Author:liu
+ * @Date: 2022/9/20  9:43
+ * @Version 1.0
+ */
+@Mapper
+public interface ConsumeMapper extends BaseMapper<Consume> {
+
+
+}

+ 14 - 0
src/main/java/com/chuanghai/student_portrait/mapper/DormMapper.java

@@ -0,0 +1,14 @@
+package com.chuanghai.student_portrait.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.chuanghai.student_portrait.entity.Dorm;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * @Author:liu
+ * @Date: 2022/9/21  15:39
+ * @Version 1.0
+ */
+@Mapper
+public interface DormMapper extends BaseMapper<Dorm> {
+}

+ 9 - 0
src/main/java/com/chuanghai/student_portrait/mapper/ElectricityMapper.java

@@ -0,0 +1,9 @@
+package com.chuanghai.student_portrait.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.chuanghai.student_portrait.entity.Electricity;
+import org.apache.ibatis.annotations.Mapper;
+
+@Mapper
+public interface ElectricityMapper extends BaseMapper<Electricity> {
+}

+ 14 - 0
src/main/java/com/chuanghai/student_portrait/mapper/ExamNumbersMapper.java

@@ -0,0 +1,14 @@
+package com.chuanghai.student_portrait.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.chuanghai.student_portrait.entity.ExamNumbers;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * @Author:liu
+ * @Date: 2022/9/30  14:25
+ * @Version 1.0
+ */
+@Mapper
+public interface ExamNumbersMapper extends BaseMapper<ExamNumbers> {
+}

+ 9 - 0
src/main/java/com/chuanghai/student_portrait/mapper/FaceDiscernMapper.java

@@ -0,0 +1,9 @@
+package com.chuanghai.student_portrait.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.chuanghai.student_portrait.entity.FaceDiscern;
+import org.apache.ibatis.annotations.Mapper;
+
+@Mapper
+public interface FaceDiscernMapper extends BaseMapper<FaceDiscern> {
+}

+ 9 - 0
src/main/java/com/chuanghai/student_portrait/mapper/ForewarningMapper.java

@@ -0,0 +1,9 @@
+package com.chuanghai.student_portrait.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.chuanghai.student_portrait.entity.Forewarning;
+import org.apache.ibatis.annotations.Mapper;
+
+@Mapper
+public interface ForewarningMapper extends BaseMapper<Forewarning> {
+}

+ 9 - 0
src/main/java/com/chuanghai/student_portrait/mapper/HotWaterMapper.java

@@ -0,0 +1,9 @@
+package com.chuanghai.student_portrait.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.chuanghai.student_portrait.entity.HotWater;
+import org.apache.ibatis.annotations.Mapper;
+
+@Mapper
+public interface HotWaterMapper extends BaseMapper<HotWater> {
+}

+ 16 - 0
src/main/java/com/chuanghai/student_portrait/mapper/NewSchooluserMapper.java

@@ -0,0 +1,16 @@
+package com.chuanghai.student_portrait.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.chuanghai.student_portrait.entity.NewSchooluser;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * @Author:liu
+ * @Date: 2022/9/16  9:33
+ * @Version 1.0
+ */
+@Mapper
+public interface NewSchooluserMapper extends BaseMapper<NewSchooluser> {
+
+
+}

+ 14 - 0
src/main/java/com/chuanghai/student_portrait/mapper/OldSchooluserMapper.java

@@ -0,0 +1,14 @@
+package com.chuanghai.student_portrait.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.chuanghai.student_portrait.entity.OldSchooluser;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * @Author:liu
+ * @Date: 2022/9/15  10:09
+ * @Version 1.0
+ */
+@Mapper
+public interface OldSchooluserMapper extends BaseMapper<OldSchooluser> {
+}

+ 9 - 0
src/main/java/com/chuanghai/student_portrait/mapper/ProvinceMapper.java

@@ -0,0 +1,9 @@
+package com.chuanghai.student_portrait.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.chuanghai.student_portrait.entity.Province;
+import org.apache.ibatis.annotations.Mapper;
+
+@Mapper
+public interface ProvinceMapper extends BaseMapper<Province> {
+}

+ 14 - 0
src/main/java/com/chuanghai/student_portrait/mapper/StallMapper.java

@@ -0,0 +1,14 @@
+package com.chuanghai.student_portrait.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.chuanghai.student_portrait.entity.Stall;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * @Author:liu
+ * @Date: 2022/9/23  10:46
+ * @Version 1.0
+ */
+@Mapper
+public interface StallMapper extends BaseMapper<Stall> {
+}

+ 9 - 0
src/main/java/com/chuanghai/student_portrait/mapper/StudentSheetMapper.java

@@ -0,0 +1,9 @@
+package com.chuanghai.student_portrait.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.chuanghai.student_portrait.entity.StudentSheet;
+import org.apache.ibatis.annotations.Mapper;
+
+@Mapper
+public interface StudentSheetMapper extends BaseMapper<StudentSheet> {
+}

+ 57 - 0
src/main/java/com/chuanghai/student_portrait/response/BaseResponse.java

@@ -0,0 +1,57 @@
+package com.chuanghai.student_portrait.response;
+
+
+import com.chuanghai.student_portrait.response.enums.Code;
+import com.fasterxml.jackson.annotation.JsonInclude;
+import lombok.Data;
+
+import java.io.Serializable;
+
+@Data
+@JsonInclude(JsonInclude.Include.NON_NULL)
+public class BaseResponse<T> implements Serializable {
+    private Integer status;
+    private  String desc;
+    private T data;
+    private String authorization;
+
+    public BaseResponse(Code code, T data, String authorization) {
+        this.status = code.getStatus();
+        this.desc = code.getDesc();
+        this.data = data;
+        this.authorization = authorization;
+    }
+
+    public static<T> BaseResponse<T> ok (Code code, T data, String authorization) {
+      return new BaseResponse(code,data,authorization);
+    }
+
+    public static<T> BaseResponse<T> ok (Code code, T data) {
+        return new BaseResponse(code,data,null);
+    }
+
+    public static<T> BaseResponse<T> ok (Code code, String authorization) {
+        return new BaseResponse(code,null,authorization);
+    }
+
+    public static<T> BaseResponse<T> ok (Code code) {
+        return new BaseResponse(code,null,null);
+    }
+
+    public static<T> BaseResponse<T> error (Code code) {
+        return ok(code,null,null);
+    }
+    public static<T> BaseResponse<T> error (Code code, T data) {
+        return ok(code,data,null);
+    }
+
+    public static BaseResponse error(Integer status, String desc){
+        BaseResponse tBaseResponseResult =  new BaseResponse();
+        tBaseResponseResult.setStatus(status);
+        tBaseResponseResult.setDesc(desc);
+        return tBaseResponseResult;
+    }
+
+    private BaseResponse() {
+    }
+}

+ 6 - 0
src/main/java/com/chuanghai/student_portrait/response/enums/Code.java

@@ -0,0 +1,6 @@
+package com.chuanghai.student_portrait.response.enums;
+
+public interface Code {
+    Integer getStatus();
+    String getDesc();
+}

+ 32 - 0
src/main/java/com/chuanghai/student_portrait/response/enums/StatusEnum.java

@@ -0,0 +1,32 @@
+package com.chuanghai.student_portrait.response.enums;
+
+public enum StatusEnum implements Code {
+    SUCCESS(20001, "操作成功"),
+    FAIL(50001,"操作失败 "),
+    SUCCESS_ADD(20002,"添加成功"),
+    FAIL_ADD(50002,"添加失败"),
+    SUCCESS_UPDATE(20003, "修改成功"),
+    FAIL_UPDATE(50003,"修改失败 "),
+    SUCCESS_DELETE(20004, "删除成功"),
+    FAIL_DELETE(50004,"删除失败 "),
+    SUCCESS_SELECT(20005, "查询成功"),
+    FAIL_SELECT(50005,"查询失败 ");
+
+    private Integer status;
+    private String desc;
+
+    private StatusEnum(Integer status, String desc) {
+        this.status = status;
+        this.desc = desc;
+    }
+
+    @Override
+    public Integer getStatus() {
+        return status;
+    }
+
+    @Override
+    public String getDesc() {
+        return desc;
+    }
+}

+ 12 - 0
src/main/java/com/chuanghai/student_portrait/service/AccessService.java

@@ -0,0 +1,12 @@
+package com.chuanghai.student_portrait.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.chuanghai.student_portrait.entity.Access;
+
+/**
+ * @Author:liu
+ * @Date: 2022/9/23  16:58
+ * @Version 1.0
+ */
+public interface AccessService extends IService<Access> {
+}

+ 7 - 0
src/main/java/com/chuanghai/student_portrait/service/AffinityScoreService.java

@@ -0,0 +1,7 @@
+package com.chuanghai.student_portrait.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.chuanghai.student_portrait.entity.AffinityScore;
+
+public interface AffinityScoreService extends IService<AffinityScore> {
+}

+ 12 - 0
src/main/java/com/chuanghai/student_portrait/service/AirConditioningService.java

@@ -0,0 +1,12 @@
+package com.chuanghai.student_portrait.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.chuanghai.student_portrait.entity.AirConditioning;
+
+/**
+ * @Author:liu
+ * @Date: 2022/9/20  10:33
+ * @Version 1.0
+ */
+public interface AirConditioningService extends IService<AirConditioning> {
+}

+ 7 - 0
src/main/java/com/chuanghai/student_portrait/service/ColdWaterService.java

@@ -0,0 +1,7 @@
+package com.chuanghai.student_portrait.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.chuanghai.student_portrait.entity.ColdWater;
+
+public interface ColdWaterService extends IService<ColdWater> {
+}

+ 19 - 0
src/main/java/com/chuanghai/student_portrait/service/ConsumeService.java

@@ -0,0 +1,19 @@
+package com.chuanghai.student_portrait.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.chuanghai.student_portrait.entity.Consume;
+import com.chuanghai.student_portrait.response.BaseResponse;
+
+/**
+ * @Author:liu
+ * @Date: 2022/9/20  9:44
+ * @Version 1.0
+ */
+public interface ConsumeService extends IService<Consume> {
+    BaseResponse getAddress(String startTime, String endTime,String idCard);
+
+    BaseResponse consumeProvinceRanking();
+
+
+    BaseResponse personConsum(String id,String startTime,String endTime);
+}

+ 16 - 0
src/main/java/com/chuanghai/student_portrait/service/DormService.java

@@ -0,0 +1,16 @@
+package com.chuanghai.student_portrait.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.chuanghai.student_portrait.entity.Dorm;
+import com.fasterxml.jackson.core.JsonProcessingException;
+
+import java.util.List;
+
+/**
+ * @Author:liu
+ * @Date: 2022/9/21  15:40
+ * @Version 1.0
+ */
+public interface DormService extends IService<Dorm> {
+    List<Dorm> saveDorm() throws JsonProcessingException;
+}

+ 14 - 0
src/main/java/com/chuanghai/student_portrait/service/ElectricityService.java

@@ -0,0 +1,14 @@
+package com.chuanghai.student_portrait.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.chuanghai.student_portrait.entity.Electricity;
+import com.chuanghai.student_portrait.exception.ResultValue;
+import com.chuanghai.student_portrait.response.BaseResponse;
+
+public interface ElectricityService extends IService<Electricity> {
+//    ResultValue getElectrucity(String dormNumber);
+
+//    BaseResponse coldWaterAndElectricityEnergy();
+
+
+}

+ 12 - 0
src/main/java/com/chuanghai/student_portrait/service/ExamNumbersService.java

@@ -0,0 +1,12 @@
+package com.chuanghai.student_portrait.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.chuanghai.student_portrait.entity.ExamNumbers;
+
+/**
+ * @Author:liu
+ * @Date: 2022/9/30  14:25
+ * @Version 1.0
+ */
+public interface ExamNumbersService extends IService<ExamNumbers> {
+}

+ 22 - 0
src/main/java/com/chuanghai/student_portrait/service/FaceDiscernService.java

@@ -0,0 +1,22 @@
+package com.chuanghai.student_portrait.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.chuanghai.student_portrait.entity.FaceDiscern;
+import com.chuanghai.student_portrait.response.BaseResponse;
+import com.chuanghai.student_portrait.utils.ReturnValueUtil;
+
+/**
+ * @Author:liu
+ * @Date: 2022/9/6  14:30
+ * @Version 1.0
+ */
+public interface FaceDiscernService extends IService<FaceDiscern> {
+    BaseResponse shoolAccessCount(String startTime, String endTime);
+
+    BaseResponse unitAccessCount(String startTime, String endTime, String id);
+
+    BaseResponse personalTrack(String id);
+
+
+//    ReturnValueUtil online(Integer page1);
+}

+ 17 - 0
src/main/java/com/chuanghai/student_portrait/service/ForewarningService.java

@@ -0,0 +1,17 @@
+package com.chuanghai.student_portrait.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.chuanghai.student_portrait.entity.FaceDiscern;
+import com.chuanghai.student_portrait.entity.Forewarning;
+import com.chuanghai.student_portrait.response.BaseResponse;
+
+import java.util.Date;
+import java.util.List;
+
+public interface ForewarningService extends IService<Forewarning> {
+
+
+    BaseResponse getgetForewarning(String keyWord, String startTime, String endTime,Integer page, Integer size);
+
+    Boolean saveForewarningAccess();
+}

+ 12 - 0
src/main/java/com/chuanghai/student_portrait/service/HotWaterService.java

@@ -0,0 +1,12 @@
+package com.chuanghai.student_portrait.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.chuanghai.student_portrait.entity.HotWater;
+import com.chuanghai.student_portrait.response.BaseResponse;
+
+public interface HotWaterService extends IService<HotWater> {
+    BaseResponse hotWaterEnergy();
+
+    BaseResponse personHotwaterEnergy(String id);
+
+}

+ 20 - 0
src/main/java/com/chuanghai/student_portrait/service/NewSchooluserService.java

@@ -0,0 +1,20 @@
+package com.chuanghai.student_portrait.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.chuanghai.student_portrait.entity.NewSchooluser;
+import com.chuanghai.student_portrait.response.BaseResponse;
+
+/**
+ * @Author:liu
+ * @Date: 2022/9/16  9:34
+ * @Version 1.0
+ */
+public interface NewSchooluserService extends IService<NewSchooluser> {
+    BaseResponse listSchoolUser(Integer page, Integer size, String keyWord);
+
+    BaseResponse getSchoolUser(String id);
+
+    BaseResponse saveStudenNts(Integer page);
+
+
+}

+ 14 - 0
src/main/java/com/chuanghai/student_portrait/service/OldSchooluserService.java

@@ -0,0 +1,14 @@
+package com.chuanghai.student_portrait.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.chuanghai.student_portrait.entity.OldSchooluser;
+
+/**
+ * @Author:liu
+ * @Date: 2022/9/15  10:10
+ * @Version 1.0
+ */
+public interface OldSchooluserService extends IService<OldSchooluser> {
+    Boolean addNewSchooluser(Integer i);
+
+}

+ 7 - 0
src/main/java/com/chuanghai/student_portrait/service/ProvinceService.java

@@ -0,0 +1,7 @@
+package com.chuanghai.student_portrait.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.chuanghai.student_portrait.entity.Province;
+
+public interface ProvinceService extends IService<Province> {
+}

+ 0 - 0
src/main/java/com/chuanghai/student_portrait/service/StallService.java


Some files were not shown because too many files changed in this diff