Browse Source

添加全部代码

liu 2 years ago
parent
commit
75c04706fd
100 changed files with 4303 additions and 0 deletions
  1. 8 0
      .idea/.gitignore
  2. 18 0
      .idea/compiler.xml
  3. 6 0
      .idea/encodings.xml
  4. 20 0
      .idea/jarRepositories.xml
  5. 12 0
      .idea/misc.xml
  6. 6 0
      .idea/vcs.xml
  7. 222 0
      hs_err_pid5336.log
  8. 180 0
      pom.xml
  9. 163 0
      share_video.iml
  10. 110 0
      share_videos.iml
  11. 79 0
      src/main/java/com/video/AutoCode.java
  12. 25 0
      src/main/java/com/video/MybatisPlusApplication.java
  13. 12 0
      src/main/java/com/video/annotation/ControllerIsShow.java
  14. 28 0
      src/main/java/com/video/annotation/PassToken.java
  15. 14 0
      src/main/java/com/video/annotation/UserLoginCheck.java
  16. 47 0
      src/main/java/com/video/aop/LoginCheckAspect.java
  17. 22 0
      src/main/java/com/video/api/ExcelControllerAPI.java
  18. 22 0
      src/main/java/com/video/api/LogInfoControllerAPI.java
  19. 58 0
      src/main/java/com/video/api/PlaybackRecordControllerAPI.java
  20. 13 0
      src/main/java/com/video/api/SendControllerAPI.java
  21. 20 0
      src/main/java/com/video/api/SmsCodeControllerAPI.java
  22. 18 0
      src/main/java/com/video/api/SystemAuthorityControllerAPI.java
  23. 50 0
      src/main/java/com/video/api/SystemMenuControllerAPI.java
  24. 15 0
      src/main/java/com/video/api/SystemRoleControllerAPI.java
  25. 15 0
      src/main/java/com/video/api/SystemUserControllerAPI.java
  26. 15 0
      src/main/java/com/video/api/VideoCategoryControllerAPI.java
  27. 22 0
      src/main/java/com/video/api/VideoControllerAPI.java
  28. 9 0
      src/main/java/com/video/api/VideoElseControllerAPI.java
  29. 15 0
      src/main/java/com/video/api/VideoPlayControllerAPI.java
  30. 15 0
      src/main/java/com/video/api/VideoShareControllerAPI.java
  31. 52 0
      src/main/java/com/video/config/MyBatisPlusConfig.java
  32. 40 0
      src/main/java/com/video/config/MySecurity.java
  33. 39 0
      src/main/java/com/video/config/smsConfig.java
  34. 94 0
      src/main/java/com/video/controller/ExcelController.java
  35. 37 0
      src/main/java/com/video/controller/LogInfoController.java
  36. 314 0
      src/main/java/com/video/controller/PlaybackRecordController.java
  37. 32 0
      src/main/java/com/video/controller/SendController.java
  38. 44 0
      src/main/java/com/video/controller/SmsCodeController.java
  39. 26 0
      src/main/java/com/video/controller/SystemAuthorityController.java
  40. 110 0
      src/main/java/com/video/controller/SystemMenuController.java
  41. 21 0
      src/main/java/com/video/controller/SystemRoleController.java
  42. 21 0
      src/main/java/com/video/controller/SystemUserController.java
  43. 21 0
      src/main/java/com/video/controller/VideoCategoryController.java
  44. 37 0
      src/main/java/com/video/controller/VideoController.java
  45. 21 0
      src/main/java/com/video/controller/VideoElseController.java
  46. 21 0
      src/main/java/com/video/controller/VideoPlayController.java
  47. 21 0
      src/main/java/com/video/controller/VideoShareController.java
  48. 27 0
      src/main/java/com/video/core/CORSConfiguration.java
  49. 99 0
      src/main/java/com/video/core/JwtAuthenticationInterceptor.java
  50. 25 0
      src/main/java/com/video/core/JwtlnterceptorConfig.java
  51. 74 0
      src/main/java/com/video/core/SwaggerConfiguration.java
  52. 26 0
      src/main/java/com/video/handle/NonStaticResourceHttpRequestHandler.java
  53. 45 0
      src/main/java/com/video/handler/MyMetaObjectHandler.java
  54. 16 0
      src/main/java/com/video/mapper/SmsCodeMapper.java
  55. 16 0
      src/main/java/com/video/mapper/SystemAuthorityMapper.java
  56. 28 0
      src/main/java/com/video/mapper/SystemMenuMapper.java
  57. 16 0
      src/main/java/com/video/mapper/SystemRoleMapper.java
  58. 16 0
      src/main/java/com/video/mapper/SystemUserMapper.java
  59. 16 0
      src/main/java/com/video/mapper/VideoCategoryMapper.java
  60. 16 0
      src/main/java/com/video/mapper/VideoElseMapper.java
  61. 16 0
      src/main/java/com/video/mapper/VideoMapper.java
  62. 16 0
      src/main/java/com/video/mapper/VideoPlayMapper.java
  63. 16 0
      src/main/java/com/video/mapper/VideoShareMapper.java
  64. 66 0
      src/main/java/com/video/model/pojo/SmsCode.java
  65. 72 0
      src/main/java/com/video/model/pojo/SystemAuthority.java
  66. 60 0
      src/main/java/com/video/model/pojo/SystemMenu.java
  67. 57 0
      src/main/java/com/video/model/pojo/SystemRole.java
  68. 79 0
      src/main/java/com/video/model/pojo/SystemUser.java
  69. 72 0
      src/main/java/com/video/model/pojo/Video.java
  70. 60 0
      src/main/java/com/video/model/pojo/VideoCategory.java
  71. 63 0
      src/main/java/com/video/model/pojo/VideoElse.java
  72. 63 0
      src/main/java/com/video/model/pojo/VideoPlay.java
  73. 63 0
      src/main/java/com/video/model/pojo/VideoShare.java
  74. 26 0
      src/main/java/com/video/model/pojo/resultData.java
  75. 35 0
      src/main/java/com/video/model/utils/BaseResult.java
  76. 136 0
      src/main/java/com/video/model/utils/CommonResult.java
  77. 33 0
      src/main/java/com/video/model/vo/LoginVO.java
  78. 32 0
      src/main/java/com/video/model/vo/SystemMenuTreeVo.java
  79. 27 0
      src/main/java/com/video/model/vo/SystemMenuVo.java
  80. 41 0
      src/main/java/com/video/model/vo/VideoVo.java
  81. 18 0
      src/main/java/com/video/services/PlaybackRecordService.java
  82. 18 0
      src/main/java/com/video/services/SmsCodeService.java
  83. 16 0
      src/main/java/com/video/services/SystemAuthorityService.java
  84. 34 0
      src/main/java/com/video/services/SystemMenuService.java
  85. 16 0
      src/main/java/com/video/services/SystemRoleService.java
  86. 19 0
      src/main/java/com/video/services/SystemUserService.java
  87. 16 0
      src/main/java/com/video/services/VideoCategoryService.java
  88. 16 0
      src/main/java/com/video/services/VideoElseService.java
  89. 16 0
      src/main/java/com/video/services/VideoPlayService.java
  90. 22 0
      src/main/java/com/video/services/VideoService.java
  91. 16 0
      src/main/java/com/video/services/VideoShareService.java
  92. 40 0
      src/main/java/com/video/services/impl/PlaybackRecordImpl.java
  93. 120 0
      src/main/java/com/video/services/impl/SmsCodeServiceImpl.java
  94. 20 0
      src/main/java/com/video/services/impl/SystemAuthorityServiceImpl.java
  95. 86 0
      src/main/java/com/video/services/impl/SystemMenuServiceImpl.java
  96. 20 0
      src/main/java/com/video/services/impl/SystemRoleServiceImpl.java
  97. 107 0
      src/main/java/com/video/services/impl/SystemUserServiceImpl.java
  98. 20 0
      src/main/java/com/video/services/impl/VideoCategoryServiceImpl.java
  99. 20 0
      src/main/java/com/video/services/impl/VideoElseServiceImpl.java
  100. 0 0
      src/main/java/com/video/services/impl/VideoPlayServiceImpl.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

+ 18 - 0
.idea/compiler.xml

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

+ 6 - 0
.idea/encodings.xml

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

+ 20 - 0
.idea/jarRepositories.xml

@@ -0,0 +1,20 @@
+<?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="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" default="true" project-jdk-name="1.8" project-jdk-type="JavaSDK" />
+</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>

File diff suppressed because it is too large
+ 222 - 0
hs_err_pid5336.log


+ 180 - 0
pom.xml

@@ -0,0 +1,180 @@
+<?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>
+    <parent>
+        <groupId>org.springframework.boot</groupId>
+        <artifactId>spring-boot-starter-parent</artifactId>
+        <version>2.4.0</version>
+        <relativePath/> <!-- lookup parent from repository -->
+    </parent>
+    <groupId>com.video</groupId>
+    <artifactId>mybatis_plus</artifactId>
+    <version>0.0.1-SNAPSHOT</version>
+    <name>mybatis_plus</name>
+    <description>Demo project for Spring Boot</description>
+
+    <properties>
+        <java.version>1.8</java.version>
+        <tencent.qcloudsms.version>1.0.6</tencent.qcloudsms.version>
+    </properties>
+
+    <dependencies>
+
+        <!--   读取excel数据     -->
+        <dependency>
+            <groupId>org.apache.poi</groupId>
+            <artifactId>poi</artifactId>
+            <version>4.1.0</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.poi</groupId>
+            <artifactId>poi-ooxml</artifactId>
+            <version>4.1.0</version>
+        </dependency>
+
+
+        <!-- fastjson -->
+        <dependency>
+            <groupId>com.alibaba</groupId>
+            <artifactId>fastjson</artifactId>
+            <version>2.0.12</version>
+        </dependency>
+
+        <!--引入JWT-->
+        <dependency>
+            <groupId>com.auth0</groupId>
+            <artifactId>java-jwt</artifactId>
+            <version>3.10.0</version>
+        </dependency>
+        <dependency>
+            <groupId>io.jsonwebtoken</groupId>
+            <artifactId>jjwt</artifactId>
+            <version>0.9.1</version>
+        </dependency>
+
+        <dependency>
+            <groupId>com.github.qcloudsms</groupId>
+            <artifactId>qcloudsms</artifactId>
+            <version>${tencent.qcloudsms.version}</version>
+        </dependency>
+
+        <dependency>
+            <groupId>com.tencentcloudapi</groupId>
+            <artifactId>tencentcloud-sdk-java</artifactId>
+            <version>3.1.742</version>
+        </dependency>
+
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-aop</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.httpcomponents</groupId>
+            <artifactId>httpclient</artifactId>
+            <version>4.5.10</version>
+        </dependency>
+        <dependency>
+            <groupId>com.google.code.gson</groupId>
+            <artifactId>gson</artifactId>
+            <version>2.8.7</version>
+        </dependency>
+        <!-- 数据库驱动 -->
+        <dependency>
+            <groupId>mysql</groupId>
+            <artifactId>mysql-connector-java</artifactId>
+        </dependency>
+        <!-- lombok -->
+        <dependency>
+            <groupId>org.projectlombok</groupId>
+            <artifactId>lombok</artifactId>
+        </dependency>
+        <!-- mybatis-plus -->
+        <!-- mybatis-plus 是自己开发,并非官方的! -->
+        <dependency>
+            <groupId>com.baomidou</groupId>
+            <artifactId>mybatis-plus-boot-starter</artifactId>
+            <version>3.0.5</version>
+        </dependency>
+
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-web</artifactId>
+        </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>org.springframework</groupId>
+            <artifactId>spring-web</artifactId>
+            <version>5.3.22</version>
+        </dependency>
+
+        <!-- https://mvnrepository.com/artifact/org.eclipse.jgit/org.eclipse.jgit -->
+        <dependency>
+            <groupId>org.eclipse.jgit</groupId>
+            <artifactId>org.eclipse.jgit</artifactId>
+            <version>5.4.3.201909031940-r</version>
+        </dependency>
+
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-configuration-processor</artifactId>
+            <optional>true</optional>
+        </dependency>
+
+        <!-- redis -->
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-data-redis</artifactId>
+            <exclusions>
+                <exclusion>
+                    <groupId>io.lettuce</groupId>
+                    <artifactId>lettuce-core</artifactId>
+                </exclusion>
+            </exclusions>
+        </dependency>
+
+        <dependency>
+            <groupId>redis.clients</groupId>
+            <artifactId>jedis</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>io.springfox</groupId>
+            <artifactId>springfox-swagger2</artifactId>
+            <version>2.9.2</version>
+        </dependency>
+        <dependency>
+            <groupId>io.springfox</groupId>
+            <artifactId>springfox-swagger-ui</artifactId>
+            <version>2.9.2</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.velocity</groupId>
+            <artifactId>velocity-engine-core</artifactId>
+            <version>2.0</version>
+        </dependency>
+
+
+    </dependencies>
+
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>org.springframework.boot</groupId>
+                <artifactId>spring-boot-maven-plugin</artifactId>
+            </plugin>
+        </plugins>
+    </build>
+
+</project>

+ 163 - 0
share_video.iml

@@ -0,0 +1,163 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<module org.jetbrains.idea.maven.project.MavenProjectsManager.isMavenModule="true" type="JAVA_MODULE" version="4">
+  <component name="FacetManager">
+    <facet type="Spring" name="Spring">
+      <configuration>
+        <fileset id="spring_boot_com.video.MybatisPlusApplication" profiles="dev" autodetected="true" />
+      </configuration>
+    </facet>
+    <facet type="web" name="Web">
+      <configuration>
+        <webroots />
+        <sourceRoots>
+          <root url="file://$MODULE_DIR$/src/main/java" />
+          <root url="file://$MODULE_DIR$/src/main/resources" />
+        </sourceRoots>
+      </configuration>
+    </facet>
+  </component>
+  <component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_1_8">
+    <output url="file://$MODULE_DIR$/target/classes" />
+    <output-test url="file://$MODULE_DIR$/target/test-classes" />
+    <content url="file://$MODULE_DIR$">
+      <sourceFolder url="file://$MODULE_DIR$/src/main/java" isTestSource="false" />
+      <sourceFolder url="file://$MODULE_DIR$/src/main/resources" type="java-resource" />
+      <sourceFolder url="file://$MODULE_DIR$/src/test/java" isTestSource="true" />
+      <excludeFolder url="file://$MODULE_DIR$/target" />
+    </content>
+    <orderEntry type="inheritedJdk" />
+    <orderEntry type="sourceFolder" forTests="false" />
+    <orderEntry type="library" name="Maven: com.alibaba:fastjson:2.0.12" level="project" />
+    <orderEntry type="library" name="Maven: com.alibaba.fastjson2:fastjson2-extension:2.0.12" level="project" />
+    <orderEntry type="library" name="Maven: com.alibaba.fastjson2:fastjson2:2.0.12" level="project" />
+    <orderEntry type="library" name="Maven: com.auth0:java-jwt:3.10.0" level="project" />
+    <orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-databind:2.11.3" level="project" />
+    <orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-annotations:2.11.3" level="project" />
+    <orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-core:2.11.3" level="project" />
+    <orderEntry type="library" name="Maven: commons-codec:commons-codec:1.15" level="project" />
+    <orderEntry type="library" name="Maven: io.jsonwebtoken:jjwt:0.9.1" level="project" />
+    <orderEntry type="library" name="Maven: com.github.qcloudsms:qcloudsms:1.0.6" level="project" />
+    <orderEntry type="library" name="Maven: org.json:json:20170516" level="project" />
+    <orderEntry type="library" name="Maven: org.apache.httpcomponents:httpmime:4.5.13" level="project" />
+    <orderEntry type="library" name="Maven: com.tencentcloudapi:tencentcloud-sdk-java:3.1.742" level="project" />
+    <orderEntry type="library" name="Maven: commons-logging:commons-logging:1.2" level="project" />
+    <orderEntry type="library" name="Maven: com.squareup.okio:okio:2.10.0" level="project" />
+    <orderEntry type="library" name="Maven: org.jetbrains.kotlin:kotlin-stdlib:1.4.10" level="project" />
+    <orderEntry type="library" name="Maven: org.jetbrains:annotations:13.0" level="project" />
+    <orderEntry type="library" name="Maven: org.jetbrains.kotlin:kotlin-stdlib-common:1.4.10" level="project" />
+    <orderEntry type="library" name="Maven: com.squareup.okhttp3:okhttp:3.14.9" level="project" />
+    <orderEntry type="library" name="Maven: javax.xml.bind:jaxb-api:2.3.1" level="project" />
+    <orderEntry type="library" name="Maven: javax.activation:javax.activation-api:1.2.0" level="project" />
+    <orderEntry type="library" name="Maven: com.squareup.okhttp3:logging-interceptor:3.14.9" level="project" />
+    <orderEntry type="library" name="Maven: org.ini4j:ini4j:0.5.4" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-aop:2.4.0" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter:2.4.0" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot:2.4.0" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-logging:2.4.0" level="project" />
+    <orderEntry type="library" name="Maven: ch.qos.logback:logback-classic:1.2.3" level="project" />
+    <orderEntry type="library" name="Maven: ch.qos.logback:logback-core:1.2.3" level="project" />
+    <orderEntry type="library" name="Maven: org.apache.logging.log4j:log4j-to-slf4j:2.13.3" level="project" />
+    <orderEntry type="library" name="Maven: org.apache.logging.log4j:log4j-api:2.13.3" level="project" />
+    <orderEntry type="library" name="Maven: org.slf4j:jul-to-slf4j:1.7.30" level="project" />
+    <orderEntry type="library" name="Maven: jakarta.annotation:jakarta.annotation-api:1.3.5" level="project" />
+    <orderEntry type="library" name="Maven: org.yaml:snakeyaml:1.27" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework:spring-aop:5.3.1" level="project" />
+    <orderEntry type="library" name="Maven: org.aspectj:aspectjweaver:1.9.6" level="project" />
+    <orderEntry type="library" name="Maven: org.apache.httpcomponents:httpclient:4.5.10" level="project" />
+    <orderEntry type="library" name="Maven: org.apache.httpcomponents:httpcore:4.4.13" level="project" />
+    <orderEntry type="library" name="Maven: com.google.code.gson:gson:2.8.7" level="project" />
+    <orderEntry type="library" name="Maven: mysql:mysql-connector-java:8.0.22" level="project" />
+    <orderEntry type="library" name="Maven: org.projectlombok:lombok:1.18.16" level="project" />
+    <orderEntry type="library" name="Maven: com.baomidou:mybatis-plus-boot-starter:3.0.5" level="project" />
+    <orderEntry type="library" name="Maven: com.baomidou:mybatis-plus:3.0.5" level="project" />
+    <orderEntry type="library" name="Maven: com.baomidou:mybatis-plus-extension:3.0.5" level="project" />
+    <orderEntry type="library" name="Maven: com.baomidou:mybatis-plus-core:3.0.5" level="project" />
+    <orderEntry type="library" name="Maven: com.baomidou:mybatis-plus-annotation:3.0.5" level="project" />
+    <orderEntry type="library" name="Maven: com.github.jsqlparser:jsqlparser:1.2" level="project" />
+    <orderEntry type="library" name="Maven: org.mybatis:mybatis-spring:1.3.2" level="project" />
+    <orderEntry type="library" name="Maven: org.mybatis:mybatis:3.4.6" level="project" />
+    <orderEntry type="library" name="Maven: com.baomidou:mybatis-plus-generator:3.0.5" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-autoconfigure:2.4.0" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-jdbc:2.4.0" level="project" />
+    <orderEntry type="library" name="Maven: com.zaxxer:HikariCP:3.4.5" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework:spring-jdbc:5.3.1" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-web:2.4.0" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-json:2.4.0" level="project" />
+    <orderEntry type="library" name="Maven: com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.11.3" level="project" />
+    <orderEntry type="library" name="Maven: com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.11.3" level="project" />
+    <orderEntry type="library" name="Maven: com.fasterxml.jackson.module:jackson-module-parameter-names:2.11.3" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-tomcat:2.4.0" level="project" />
+    <orderEntry type="library" name="Maven: org.apache.tomcat.embed:tomcat-embed-core:9.0.39" level="project" />
+    <orderEntry type="library" name="Maven: org.glassfish:jakarta.el:3.0.3" level="project" />
+    <orderEntry type="library" name="Maven: org.apache.tomcat.embed:tomcat-embed-websocket:9.0.39" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework:spring-webmvc:5.3.1" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework:spring-context:5.3.1" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework:spring-expression:5.3.1" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: org.springframework.boot:spring-boot-starter-test:2.4.0" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: org.springframework.boot:spring-boot-test:2.4.0" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: org.springframework.boot:spring-boot-test-autoconfigure:2.4.0" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: com.jayway.jsonpath:json-path:2.4.0" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: net.minidev:json-smart:2.3" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: net.minidev:accessors-smart:1.2" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: org.ow2.asm:asm:5.0.4" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: jakarta.xml.bind:jakarta.xml.bind-api:2.3.3" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: jakarta.activation:jakarta.activation-api:1.2.2" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: org.assertj:assertj-core:3.18.1" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: org.hamcrest:hamcrest:2.2" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: org.junit.jupiter:junit-jupiter:5.7.0" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: org.junit.jupiter:junit-jupiter-api:5.7.0" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: org.apiguardian:apiguardian-api:1.1.0" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: org.opentest4j:opentest4j:1.2.0" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: org.junit.platform:junit-platform-commons:1.7.0" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: org.junit.jupiter:junit-jupiter-params:5.7.0" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: org.junit.jupiter:junit-jupiter-engine:5.7.0" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: org.junit.platform:junit-platform-engine:1.7.0" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: org.mockito:mockito-core:3.6.0" level="project" />
+    <orderEntry type="library" name="Maven: net.bytebuddy:byte-buddy:1.10.18" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: net.bytebuddy:byte-buddy-agent:1.10.18" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: org.objenesis:objenesis:3.1" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: org.mockito:mockito-junit-jupiter:3.6.0" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: org.skyscreamer:jsonassert:1.5.0" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: com.vaadin.external.google:android-json:0.0.20131108.vaadin1" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework:spring-core:5.3.1" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework:spring-jcl:5.3.1" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: org.springframework:spring-test:5.3.1" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: org.xmlunit:xmlunit-core:2.7.0" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework:spring-web:5.3.22" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework:spring-beans:5.3.1" level="project" />
+    <orderEntry type="library" name="Maven: org.eclipse.jgit:org.eclipse.jgit:5.4.3.201909031940-r" level="project" />
+    <orderEntry type="library" name="Maven: com.jcraft:jsch:0.1.55" level="project" />
+    <orderEntry type="library" name="Maven: com.jcraft:jzlib:1.1.1" level="project" />
+    <orderEntry type="library" name="Maven: com.googlecode.javaewah:JavaEWAH:1.1.6" level="project" />
+    <orderEntry type="library" name="Maven: org.slf4j:slf4j-api:1.7.30" level="project" />
+    <orderEntry type="library" name="Maven: org.bouncycastle:bcpg-jdk15on:1.61" level="project" />
+    <orderEntry type="library" name="Maven: org.bouncycastle:bcprov-jdk15on:1.61" level="project" />
+    <orderEntry type="library" name="Maven: org.bouncycastle:bcpkix-jdk15on:1.61" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-configuration-processor:2.4.0" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-data-redis:2.4.0" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.data:spring-data-redis:2.4.1" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.data:spring-data-keyvalue:2.4.1" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.data:spring-data-commons:2.4.1" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework:spring-tx:5.3.1" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework:spring-oxm:5.3.1" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework:spring-context-support:5.3.1" level="project" />
+    <orderEntry type="library" name="Maven: redis.clients:jedis:3.3.0" level="project" />
+    <orderEntry type="library" name="Maven: org.apache.commons:commons-pool2:2.9.0" level="project" />
+    <orderEntry type="library" name="Maven: io.springfox:springfox-swagger2:2.9.2" level="project" />
+    <orderEntry type="library" name="Maven: io.swagger:swagger-annotations:1.5.20" level="project" />
+    <orderEntry type="library" name="Maven: io.swagger:swagger-models:1.5.20" level="project" />
+    <orderEntry type="library" name="Maven: io.springfox:springfox-spi:2.9.2" level="project" />
+    <orderEntry type="library" name="Maven: io.springfox:springfox-core:2.9.2" level="project" />
+    <orderEntry type="library" name="Maven: io.springfox:springfox-schema:2.9.2" level="project" />
+    <orderEntry type="library" name="Maven: io.springfox:springfox-swagger-common:2.9.2" level="project" />
+    <orderEntry type="library" name="Maven: io.springfox:springfox-spring-web:2.9.2" level="project" />
+    <orderEntry type="library" name="Maven: com.google.guava:guava:20.0" level="project" />
+    <orderEntry type="library" name="Maven: com.fasterxml:classmate:1.5.1" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.plugin:spring-plugin-core:1.2.0.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.plugin:spring-plugin-metadata:1.2.0.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.mapstruct:mapstruct:1.2.0.Final" level="project" />
+    <orderEntry type="library" name="Maven: io.springfox:springfox-swagger-ui:2.9.2" level="project" />
+    <orderEntry type="library" name="Maven: org.apache.velocity:velocity-engine-core:2.0" level="project" />
+    <orderEntry type="library" name="Maven: org.apache.commons:commons-lang3:3.11" level="project" />
+  </component>
+</module>

+ 110 - 0
share_videos.iml

@@ -0,0 +1,110 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<module org.jetbrains.idea.maven.project.MavenProjectsManager.isMavenModule="true" type="JAVA_MODULE" version="4">
+  <component name="FacetManager">
+    <facet type="Spring" name="Spring">
+      <configuration />
+    </facet>
+    <facet type="web" name="Web">
+      <configuration>
+        <webroots />
+        <sourceRoots>
+          <root url="file://$MODULE_DIR$/src/main/java" />
+          <root url="file://$MODULE_DIR$/src/main/resources" />
+        </sourceRoots>
+      </configuration>
+    </facet>
+  </component>
+  <component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_1_8">
+    <output url="file://$MODULE_DIR$/target/classes" />
+    <output-test url="file://$MODULE_DIR$/target/test-classes" />
+    <content url="file://$MODULE_DIR$">
+      <sourceFolder url="file://$MODULE_DIR$/src/main/java" isTestSource="false" />
+      <sourceFolder url="file://$MODULE_DIR$/src/main/resources" type="java-resource" />
+      <sourceFolder url="file://$MODULE_DIR$/src/test/java" isTestSource="true" />
+      <excludeFolder url="file://$MODULE_DIR$/target" />
+    </content>
+    <orderEntry type="jdk" jdkName="1.8" jdkType="JavaSDK" />
+    <orderEntry type="sourceFolder" forTests="false" />
+    <orderEntry type="library" name="Maven: mysql:mysql-connector-java:8.0.19" level="project" />
+    <orderEntry type="library" name="Maven: org.projectlombok:lombok:1.18.12" level="project" />
+    <orderEntry type="library" name="Maven: com.baomidou:mybatis-plus-boot-starter:3.0.5" level="project" />
+    <orderEntry type="library" name="Maven: com.baomidou:mybatis-plus:3.0.5" level="project" />
+    <orderEntry type="library" name="Maven: com.baomidou:mybatis-plus-extension:3.0.5" level="project" />
+    <orderEntry type="library" name="Maven: com.baomidou:mybatis-plus-core:3.0.5" level="project" />
+    <orderEntry type="library" name="Maven: com.baomidou:mybatis-plus-annotation:3.0.5" level="project" />
+    <orderEntry type="library" name="Maven: com.github.jsqlparser:jsqlparser:1.2" level="project" />
+    <orderEntry type="library" name="Maven: org.mybatis:mybatis-spring:1.3.2" level="project" />
+    <orderEntry type="library" name="Maven: org.mybatis:mybatis:3.4.6" level="project" />
+    <orderEntry type="library" name="Maven: com.baomidou:mybatis-plus-generator:3.0.5" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-autoconfigure:2.2.5.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot:2.2.5.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-jdbc:2.2.5.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: com.zaxxer:HikariCP:3.4.2" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework:spring-jdbc:5.2.4.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework:spring-tx:5.2.4.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-configuration-processor:2.2.5.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-web:2.2.5.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter:2.2.5.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-logging:2.2.5.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: ch.qos.logback:logback-classic:1.2.3" level="project" />
+    <orderEntry type="library" name="Maven: ch.qos.logback:logback-core:1.2.3" level="project" />
+    <orderEntry type="library" name="Maven: org.apache.logging.log4j:log4j-to-slf4j:2.12.1" level="project" />
+    <orderEntry type="library" name="Maven: org.apache.logging.log4j:log4j-api:2.12.1" level="project" />
+    <orderEntry type="library" name="Maven: org.slf4j:jul-to-slf4j:1.7.30" level="project" />
+    <orderEntry type="library" name="Maven: jakarta.annotation:jakarta.annotation-api:1.3.5" level="project" />
+    <orderEntry type="library" scope="RUNTIME" name="Maven: org.yaml:snakeyaml:1.25" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-json:2.2.5.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-databind:2.10.2" level="project" />
+    <orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-annotations:2.10.2" level="project" />
+    <orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-core:2.10.2" level="project" />
+    <orderEntry type="library" name="Maven: com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.10.2" level="project" />
+    <orderEntry type="library" name="Maven: com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.10.2" level="project" />
+    <orderEntry type="library" name="Maven: com.fasterxml.jackson.module:jackson-module-parameter-names:2.10.2" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-tomcat:2.2.5.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.apache.tomcat.embed:tomcat-embed-core:9.0.31" level="project" />
+    <orderEntry type="library" name="Maven: org.apache.tomcat.embed:tomcat-embed-el:9.0.31" level="project" />
+    <orderEntry type="library" name="Maven: org.apache.tomcat.embed:tomcat-embed-websocket:9.0.31" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-validation:2.2.5.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: jakarta.validation:jakarta.validation-api:2.0.2" level="project" />
+    <orderEntry type="library" name="Maven: org.hibernate.validator:hibernate-validator:6.0.18.Final" level="project" />
+    <orderEntry type="library" name="Maven: org.jboss.logging:jboss-logging:3.4.1.Final" level="project" />
+    <orderEntry type="library" name="Maven: com.fasterxml:classmate:1.5.1" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework:spring-webmvc:5.2.4.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework:spring-aop:5.2.4.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework:spring-context:5.2.4.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework:spring-expression:5.2.4.RELEASE" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: org.springframework.boot:spring-boot-starter-test:2.2.5.RELEASE" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: org.springframework.boot:spring-boot-test:2.2.5.RELEASE" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: org.springframework.boot:spring-boot-test-autoconfigure:2.2.5.RELEASE" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: com.jayway.jsonpath:json-path:2.4.0" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: net.minidev:json-smart:2.3" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: net.minidev:accessors-smart:1.2" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: org.ow2.asm:asm:5.0.4" level="project" />
+    <orderEntry type="library" name="Maven: org.slf4j:slf4j-api:1.7.30" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: jakarta.xml.bind:jakarta.xml.bind-api:2.3.2" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: jakarta.activation:jakarta.activation-api:1.2.2" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: org.junit.jupiter:junit-jupiter:5.5.2" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: org.junit.jupiter:junit-jupiter-api:5.5.2" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: org.apiguardian:apiguardian-api:1.1.0" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: org.opentest4j:opentest4j:1.2.0" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: org.junit.platform:junit-platform-commons:1.5.2" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: org.junit.jupiter:junit-jupiter-params:5.5.2" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: org.junit.jupiter:junit-jupiter-engine:5.5.2" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: org.junit.platform:junit-platform-engine:1.5.2" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: org.mockito:mockito-junit-jupiter:3.1.0" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: org.assertj:assertj-core:3.13.2" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: org.hamcrest:hamcrest:2.1" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: org.mockito:mockito-core:3.1.0" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: net.bytebuddy:byte-buddy:1.10.8" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: net.bytebuddy:byte-buddy-agent:1.10.8" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: org.objenesis:objenesis:2.6" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: org.skyscreamer:jsonassert:1.5.0" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: com.vaadin.external.google:android-json:0.0.20131108.vaadin1" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework:spring-core:5.2.4.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework:spring-jcl:5.2.4.RELEASE" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: org.springframework:spring-test:5.2.4.RELEASE" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: org.xmlunit:xmlunit-core:2.6.3" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework:spring-web:5.3.22" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework:spring-beans:5.2.4.RELEASE" level="project" />
+  </component>
+</module>

+ 79 - 0
src/main/java/com/video/AutoCode.java

@@ -0,0 +1,79 @@
+package com.video;
+
+import com.baomidou.mybatisplus.annotation.DbType;
+import com.baomidou.mybatisplus.annotation.FieldFill;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.generator.AutoGenerator;
+import com.baomidou.mybatisplus.generator.config.DataSourceConfig;
+import com.baomidou.mybatisplus.generator.config.GlobalConfig;
+import com.baomidou.mybatisplus.generator.config.PackageConfig;
+import com.baomidou.mybatisplus.generator.config.StrategyConfig;
+import com.baomidou.mybatisplus.generator.config.po.TableFill;
+import com.baomidou.mybatisplus.generator.config.rules.DateType;
+import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;
+
+import java.util.ArrayList;
+
+/**
+ * @Author: binguo
+ * @Date: 2023/3/30 星期四 15:46
+ * @Description: com.video
+ * @Version: 1.0
+ */
+public class AutoCode {
+    public static void main(String[] args) {
+// 需要构建一个 代码自动生成器 对象
+        AutoGenerator mpg = new AutoGenerator();
+// 配置策略
+// 1、全局配置
+        GlobalConfig gc = new GlobalConfig();
+        String projectPath = System.getProperty("user.dir");
+        gc.setOutputDir(projectPath+"/src/main/java");
+        gc.setAuthor("ceshi");
+        gc.setOpen(false);
+        gc.setFileOverride(false); // 是否覆盖
+        gc.setServiceName("%sService"); // 去Service的I前缀
+        gc.setIdType(IdType.ID_WORKER);
+        gc.setDateType(DateType.ONLY_DATE);
+        gc.setSwagger2(true);
+        mpg.setGlobalConfig(gc);
+//2、设置数据源
+        DataSourceConfig dsc = new DataSourceConfig();
+        dsc.setUrl("jdbc:mysql://139.199.2.142:3306/share_videos?useSSL=false&useUnicode=true&characterEncoding=utf-8&serverTimezone=GMT%2B8");
+                dsc.setDriverName("com.mysql.cj.jdbc.Driver");
+        dsc.setUsername("root");
+        dsc.setPassword("chuanghai_2023.");
+        dsc.setDbType(DbType.MYSQL);
+        mpg.setDataSource(dsc);
+//3、包的配置
+        PackageConfig pc = new PackageConfig();
+        pc.setModuleName("auto");
+        pc.setParent("com.video");
+        pc.setEntity("model");
+        pc.setMapper("mapper");
+        pc.setService("services");
+        pc.setController("controller");
+        mpg.setPackageInfo(pc);
+//4、策略配置
+        StrategyConfig strategy = new StrategyConfig();
+        strategy.setInclude("video_else"); // 设置要映射的表名
+                strategy.setNaming(NamingStrategy.underline_to_camel);
+        strategy.setColumnNaming(NamingStrategy.underline_to_camel);
+        strategy.setEntityLombokModel(true); // 自动lombok;
+        strategy.setLogicDeleteFieldName("deleted");
+        // 自动填充配置
+        TableFill gmtCreate = new TableFill("gmt_create", FieldFill.INSERT);
+        TableFill gmtModified = new TableFill("gmt_modified",
+                FieldFill.INSERT_UPDATE);
+        ArrayList<TableFill> tableFills = new ArrayList<>();
+        tableFills.add(gmtCreate);
+        tableFills.add(gmtModified);
+        strategy.setTableFillList(tableFills);
+        // 乐观锁
+        strategy.setVersionFieldName("version");
+        strategy.setRestControllerStyle(true);
+        strategy.setControllerMappingHyphenStyle(true); //localhost:8080/hello_id_2
+        mpg.setStrategy(strategy);
+        mpg.execute(); //执行
+    }
+}

+ 25 - 0
src/main/java/com/video/MybatisPlusApplication.java

@@ -0,0 +1,25 @@
+package com.video;
+
+import org.mybatis.spring.annotation.MapperScan;
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.cache.annotation.EnableCaching;
+import org.springframework.context.annotation.Profile;
+import org.springframework.transaction.annotation.EnableTransactionManagement;
+import org.springframework.transaction.event.TransactionalEventListener;
+import springfox.documentation.swagger2.annotations.EnableSwagger2;
+
+import java.io.*;
+import java.net.Socket;
+import java.nio.charset.StandardCharsets;
+
+@EnableCaching//开启缓存
+@SpringBootApplication
+@EnableTransactionManagement //开启事务回滚
+public class MybatisPlusApplication {
+
+    public static void main(String[] args) {
+
+        SpringApplication.run(MybatisPlusApplication.class, args);
+    }
+}

+ 12 - 0
src/main/java/com/video/annotation/ControllerIsShow.java

@@ -0,0 +1,12 @@
+package com.video.annotation;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+@Target(value = {ElementType.METHOD, ElementType.TYPE})
+@Retention(RetentionPolicy.RUNTIME)
+public @interface ControllerIsShow {
+    String value() default "";
+}

+ 28 - 0
src/main/java/com/video/annotation/PassToken.java

@@ -0,0 +1,28 @@
+package com.video.annotation;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+/** 说明
+ * 在方法上加入本注解 即可接口拦截
+ * @interface:代表当前类是注解
+ * @Target:描述当前的注解可以定义在扫描资源上。
+ * 属性value:
+ *     定义具体的资源。包括:
+ *     ElementType.METHOD:可以定义在方法上
+ *     ElementType.TYPE:可以定义在类上
+ *     ElementType.FIELD:可以定义在属性上
+ *     ElementType.PARAMETER:可以定义在方法参数上
+ * @Retention:当前注解在什么时候有效
+ *     定义具体的生效标记
+ *     RetentionPolicy.RUNTIME:运行时有效
+ *     RetentionPolicy.SOURCE:源码中有效
+ *     RetentionPolicy.CLASS:字节码有效
+ *///说明 该注解要加在控制器中的方法上才会生效 加在api中无法生效
+@Target(value = {ElementType.METHOD, ElementType.TYPE})
+@Retention(RetentionPolicy.RUNTIME)
+public @interface PassToken {
+    boolean requeired() default true;
+}

+ 14 - 0
src/main/java/com/video/annotation/UserLoginCheck.java

@@ -0,0 +1,14 @@
+package com.video.annotation;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Target;
+
+/**
+ * @Author: binguo
+ * @Date: 2023/4/10 星期一 14:04
+ * @Description: com.video.services.annotation
+ * @Version: 1.0
+ */
+@Target(ElementType.METHOD)
+public @interface UserLoginCheck {
+}

+ 47 - 0
src/main/java/com/video/aop/LoginCheckAspect.java

@@ -0,0 +1,47 @@
+package com.video.aop;
+
+import org.aspectj.lang.ProceedingJoinPoint;
+import org.aspectj.lang.annotation.After;
+import org.aspectj.lang.annotation.Around;
+import org.aspectj.lang.annotation.Aspect;
+import org.aspectj.lang.annotation.Before;
+import org.springframework.core.annotation.Order;
+import org.springframework.stereotype.Component;
+
+import java.sql.SQLOutput;
+
+/**
+ * @Author: binguo
+ * @Date: 2023/4/10 星期一 14:10
+ * @Description: com.video.aop
+ * @Version: 1.0
+ */
+@Aspect//把当前类标识作为一个切面供容器读取
+@Component//将此类标记为Spring容器中的一个Bean
+@Order(0)//order的值越小,优先级越高 order如果不标注数字,默认最低优先级,因为其默认值是int最大值
+public class LoginCheckAspect {
+
+    @Around("@annotation(com.video.annotation.UserLoginCheck)")
+    public Object userLoginCheck(ProceedingJoinPoint process) throws Throwable {
+        System.out.println("用户登录检测机制");
+        if(1 == 1){
+           //通过抛异常方式拦截
+           // throw new Exception("非法登录");
+        }
+
+        Object proceed;
+        proceed = process.proceed();//执行目标方法
+        return proceed;//将执行目标方法后的返回值返回出去
+    }
+
+    @After("@annotation(com.video.annotation.UserLoginCheck)")
+    public void test(){
+        System.out.println("测试After");
+    }
+
+    @Before("@annotation(com.video.annotation.UserLoginCheck)")
+    public void test1(){
+        System.out.println("测试Before");
+    }
+
+}

+ 22 - 0
src/main/java/com/video/api/ExcelControllerAPI.java

@@ -0,0 +1,22 @@
+package com.video.api;
+
+import com.video.annotation.PassToken;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+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.RequestParam;
+
+import java.io.File;
+
+@Api(tags = {"ExcelController"}, value = "导入excel表")
+@RequestMapping("/api/excel")
+public interface ExcelControllerAPI {
+
+    @PostMapping("/toExcel")
+    @ApiOperation(value = "导入excel表更新用户",httpMethod = "POST")
+    @PassToken
+    void toExcel(String fileUrl);
+
+}

+ 22 - 0
src/main/java/com/video/api/LogInfoControllerAPI.java

@@ -0,0 +1,22 @@
+package com.video.api;
+
+import com.video.annotation.PassToken;
+import com.video.model.utils.CommonResult;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+@Api(tags = {"LogInfoController"}, value = "登入接口")
+@RequestMapping("/api/logInfo")
+public interface LogInfoControllerAPI {
+
+    @GetMapping("/verify")
+    @ApiOperation(value = "验证手机号phone",httpMethod = "GET")
+    CommonResult verifyPhone(String phone);
+
+
+    @PostMapping("/logIn")
+    @ApiOperation(value = "短信验证",httpMethod = "POST")
+    CommonResult logInfo(String phone,String code);
+}

+ 58 - 0
src/main/java/com/video/api/PlaybackRecordControllerAPI.java

@@ -0,0 +1,58 @@
+package com.video.api;
+
+import com.video.model.utils.CommonResult;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.io.UnsupportedEncodingException;
+import java.util.List;
+
+/**
+ * @Author: binguo
+ * @Date: 2023/3/23 星期四 15:52
+ * @Description: com.video.api
+ * @Version: 1.0
+ */
+//@RequestMapping("/api/play-back")
+@Api(tags = {"PlaybackRecordController"}, value = "测试接口")
+public interface PlaybackRecordControllerAPI {
+//    @PostMapping(value = "/InsertPlaybackRecord")
+//    @ApiOperation(value = "测试接口",notes = "传递时间参数获取对应时间的图表数据")
+//    CommonResult<Integer> InsertPlaybackRecord(@RequestBody PlaybackRecord pb);
+//
+//    @GetMapping(value = "/QueryPlaybackRecords")
+//    CommonResult<List<PlaybackRecord>> QueryPlaybackRecords(HttpServletRequest request);
+//
+    @PostMapping(value = "/tests")
+    String test(HttpServletRequest request) throws Exception;
+
+    //成功信息
+    @GetMapping(value = "/testSuccess")
+    CommonResult success();
+
+    //成功信息有数据返回
+    @GetMapping(value = "/testSuccessValue")
+    CommonResult successValue();
+
+    //默认错误信息
+    @GetMapping(value = "/testFail")
+    CommonResult fail();
+
+    //自定义错误信息
+    @GetMapping(value = "/testFailValue")
+    CommonResult failValue();
+//
+//    @GetMapping("/video")
+//    void videoPreview(HttpServletRequest request, HttpServletResponse response) throws IOException, Exception;
+//
+//    @GetMapping("/videoOther")
+//    @ResponseBody
+//    void videoOther(HttpServletRequest request, HttpServletResponse response) throws Exception;
+//
+//    @GetMapping("/download")
+//    public void download(HttpServletResponse response) throws UnsupportedEncodingException;
+}

+ 13 - 0
src/main/java/com/video/api/SendControllerAPI.java

@@ -0,0 +1,13 @@
+package com.video.api;
+
+import com.tencentcloudapi.sms.v20210111.models.SendStatus;
+import common.utils.SendSms;
+import io.swagger.annotations.Api;
+import org.springframework.web.bind.annotation.*;
+
+
+public interface SendControllerAPI {
+
+     SendStatus[] sendCodeAgain(String phone);
+
+}

+ 20 - 0
src/main/java/com/video/api/SmsCodeControllerAPI.java

@@ -0,0 +1,20 @@
+package com.video.api;
+
+import com.video.model.pojo.SmsCode;
+import com.video.model.pojo.SystemMenu;
+import com.video.model.utils.CommonResult;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+
+@RequestMapping("/api/sms-code")
+@Api(tags = {"SmsCodeControllerAPI"}, value = "短信验证码")
+public interface SmsCodeControllerAPI {
+
+    @GetMapping(value = "/InsertSmsCode")
+    @ApiOperation(value = "新增Code", notes = "新增Code", httpMethod = "POST")
+    CommonResult InsertSmsCode();
+}

+ 18 - 0
src/main/java/com/video/api/SystemAuthorityControllerAPI.java

@@ -0,0 +1,18 @@
+package com.video.api;
+
+import io.swagger.annotations.Api;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+
+/**
+ * @Author: binguo
+ * @Date: 2023/3/30 星期四 17:28
+ * @Description: com.video.api
+ * @Version: 1.0
+ */
+@RequestMapping("/api/system-authority")
+@Api(tags = {"SystemAuthorityController"}, value = "测试接口")
+public interface SystemAuthorityControllerAPI {
+    @GetMapping(value = "/test")
+    void test();
+}

+ 50 - 0
src/main/java/com/video/api/SystemMenuControllerAPI.java

@@ -0,0 +1,50 @@
+package com.video.api;
+
+import com.video.model.pojo.SystemMenu;
+import com.video.model.utils.CommonResult;
+import com.video.model.vo.SystemMenuTreeVo;
+import com.video.model.vo.SystemMenuVo;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletRequest;
+import java.util.List;
+
+/**
+ * @Author: binguo
+ * @Date: 2023/3/30 星期四 17:28
+ * @Description: com.video.api
+ * @Version: 1.0
+ */
+@RequestMapping("/api/system-menu")
+@Api(tags = {"SystemMenuController"}, value = "测试接口")
+public interface SystemMenuControllerAPI {
+    @GetMapping(value = "/QueryPlaybackRecordBySql")
+    @ApiOperation(value = "通过sql获取数据", notes = "通过sql获取数据", httpMethod = "GET")
+    CommonResult<List<SystemMenuVo>> QueryPlaybackRecordBySql();
+
+    @GetMapping(value = "/QuerySystemMenus")
+    @ApiOperation(value = "查询所有菜单数据", notes = "查询所有菜单数据", httpMethod = "GET")
+    CommonResult<List<SystemMenu>> QueryPlaybackRecords();
+
+    @PostMapping(value = "/InsertSystemMenu")
+    @ApiOperation(value = "新增菜单数据", notes = "新增菜单数据", httpMethod = "POST")
+    CommonResult InsertSystemMenu(@RequestBody SystemMenu systemMenu);
+
+    @PostMapping(value = "/DeleteSystemMenu")
+    @ApiOperation(value = "新增菜单数据", notes = "新增菜单数据", httpMethod = "POST")
+    CommonResult DeleteSystemMenu(@RequestParam("userId") Integer userID);
+
+    @GetMapping(value = "/QueryMenuTrees")
+    @ApiOperation(value = "查询树形菜单数据", notes = "查询树形菜单数据", httpMethod = "GET")
+    CommonResult<List<SystemMenuTreeVo>> QueryMenuTreeRecords();
+
+    @PostMapping(value = "/InsertPlaybackRecord")
+    @ApiOperation(value = "新增", notes = "新增", httpMethod = "POST")
+    CommonResult<Integer> InsertPlaybackRecord(@RequestBody SystemMenu pb);
+
+    @GetMapping("/testQuery")
+    @ApiOperation(value = "查询", notes = "查询", httpMethod = "GET")
+    CommonResult<List<SystemMenu>> QueryPlaybackRecords(HttpServletRequest request);
+}

+ 15 - 0
src/main/java/com/video/api/SystemRoleControllerAPI.java

@@ -0,0 +1,15 @@
+package com.video.api;
+
+import io.swagger.annotations.Api;
+import org.springframework.web.bind.annotation.RequestMapping;
+
+/**
+ * @Author: binguo
+ * @Date: 2023/3/30 星期四 17:28
+ * @Description: com.video.api
+ * @Version: 1.0
+ */
+@RequestMapping("/api/system-role")
+@Api(tags = {"SystemRoleController"}, value = "测试接口")
+public interface SystemRoleControllerAPI {
+}

+ 15 - 0
src/main/java/com/video/api/SystemUserControllerAPI.java

@@ -0,0 +1,15 @@
+package com.video.api;
+
+import io.swagger.annotations.Api;
+import org.springframework.web.bind.annotation.RequestMapping;
+
+/**
+ * @Author: binguo
+ * @Date: 2023/3/30 星期四 17:28
+ * @Description: com.video.api
+ * @Version: 1.0
+ */
+@RequestMapping("/api/system-user")
+@Api(tags = {"SystemUserController"}, value = "测试接口")
+public interface SystemUserControllerAPI {
+}

+ 15 - 0
src/main/java/com/video/api/VideoCategoryControllerAPI.java

@@ -0,0 +1,15 @@
+package com.video.api;
+
+import io.swagger.annotations.Api;
+import org.springframework.web.bind.annotation.RequestMapping;
+
+/**
+ * @Author: binguo
+ * @Date: 2023/3/30 星期四 17:28
+ * @Description: com.video.api
+ * @Version: 1.0
+ */
+@RequestMapping("/api/video-category")
+@Api(tags = {"VideoCategoryController"}, value = "测试接口")
+public interface VideoCategoryControllerAPI {
+}

+ 22 - 0
src/main/java/com/video/api/VideoControllerAPI.java

@@ -0,0 +1,22 @@
+package com.video.api;
+
+import com.video.model.utils.CommonResult;
+import io.swagger.annotations.Api;
+import org.springframework.web.bind.annotation.CrossOrigin;
+import org.springframework.web.bind.annotation.RequestMapping;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+/**
+ * @Author: binguo
+ * @Date: 2023/3/30 星期四 17:28
+ * @Description: com.video.api
+ * @Version: 1.0
+ */
+@RequestMapping("/api/video")
+@Api(tags = {"VideoController"}, value = "测试接口")
+public interface VideoControllerAPI {
+
+    CommonResult list();
+}

+ 9 - 0
src/main/java/com/video/api/VideoElseControllerAPI.java

@@ -0,0 +1,9 @@
+package com.video.api;
+
+import io.swagger.annotations.Api;
+import org.springframework.web.bind.annotation.RequestMapping;
+
+@RequestMapping("/api/videoElse")
+@Api(tags = {"VideoElseController"}, value = "文件下载接口")
+public interface VideoElseControllerAPI {
+}

+ 15 - 0
src/main/java/com/video/api/VideoPlayControllerAPI.java

@@ -0,0 +1,15 @@
+package com.video.api;
+
+import io.swagger.annotations.Api;
+import org.springframework.web.bind.annotation.RequestMapping;
+
+/**
+ * @Author: binguo
+ * @Date: 2023/3/30 星期四 17:28
+ * @Description: com.video.api
+ * @Version: 1.0
+ */
+@RequestMapping("/api/video-play")
+@Api(tags = {"VideoPlayController"}, value = "测试接口")
+public interface VideoPlayControllerAPI {
+}

+ 15 - 0
src/main/java/com/video/api/VideoShareControllerAPI.java

@@ -0,0 +1,15 @@
+package com.video.api;
+
+import io.swagger.annotations.Api;
+import org.springframework.web.bind.annotation.RequestMapping;
+
+/**
+ * @Author: binguo
+ * @Date: 2023/3/30 星期四 17:28
+ * @Description: com.video.api
+ * @Version: 1.0
+ */
+@RequestMapping("/api/video-share")
+@Api(tags = {"VideoShareController"}, value = "测试接口")
+public interface VideoShareControllerAPI {
+}

+ 52 - 0
src/main/java/com/video/config/MyBatisPlusConfig.java

@@ -0,0 +1,52 @@
+package com.video.config;
+
+import com.baomidou.mybatisplus.core.injector.ISqlInjector;
+import com.baomidou.mybatisplus.extension.injector.LogicSqlInjector;
+import com.baomidou.mybatisplus.extension.plugins.OptimisticLockerInterceptor;
+import com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor;
+import com.baomidou.mybatisplus.extension.plugins.PerformanceInterceptor;
+import com.baomidou.mybatisplus.extension.plugins.pagination.optimize.JsqlParserCountOptimize;
+import org.mybatis.spring.annotation.MapperScan;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.context.annotation.Profile;
+import org.springframework.transaction.annotation.EnableTransactionManagement;
+
+// 扫描我们的 mapper 文件夹
+@MapperScan("com.video.mapper")
+@EnableTransactionManagement
+@Configuration // 配置类
+public class MyBatisPlusConfig {
+
+    // 注册乐观锁插件
+    @Bean
+    public OptimisticLockerInterceptor optimisticLockerInterceptor() {
+        return new OptimisticLockerInterceptor();
+    }
+
+    // 分页插件
+    @Bean
+    public PaginationInterceptor paginationInterceptor() {
+        return  new PaginationInterceptor();
+    }
+
+    // 逻辑删除组件!
+    @Bean
+    public ISqlInjector sqlInjector() {
+        return new LogicSqlInjector();
+    }
+
+
+    /**
+     * SQL执行效率插件
+     */
+    @Bean
+    @Profile({"dev","test"})// 设置 dev test 环境开启,保证我们的效率
+    public PerformanceInterceptor performanceInterceptor() {
+        PerformanceInterceptor performanceInterceptor = new PerformanceInterceptor();
+        performanceInterceptor.setMaxTime(3000); //ms 设置sql执行的最大时间,如果超过了则不执行
+        performanceInterceptor.setFormat(true);
+        return performanceInterceptor;
+    }
+
+}

+ 40 - 0
src/main/java/com/video/config/MySecurity.java

@@ -0,0 +1,40 @@
+package com.video.config;
+
+import lombok.Data;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.stereotype.Component;
+
+@Component
+//@ConfigurationProperties(prefix = "my-security")
+public class MySecurity {
+    @Value("${my-security.privateKey}")
+    public String privateKey;
+    @Value("${my-security.publicKey}")
+    public String publicKey;
+
+    public String getPrivateKey() {
+        return privateKey;
+    }
+
+    public String getPublicKey() {
+        return publicKey;
+    }
+
+    @Override
+    public String toString() {
+        return "MySecurity{" +
+                "privateKey='" + privateKey + '\'' +
+                ", publicKey='" + publicKey + '\'' +
+                '}';
+    }
+
+    public void setPrivateKey(String privateKey) {
+        this.privateKey = privateKey;
+    }
+
+    public void setPublicKey(String publicKey) {
+        this.publicKey = publicKey;
+    }
+}

+ 39 - 0
src/main/java/com/video/config/smsConfig.java

@@ -0,0 +1,39 @@
+package com.video.config;
+
+import lombok.Data;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.context.annotation.ComponentScan;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.stereotype.Component;
+
+/**
+ * @Author: binguo
+ * @Date: 2023/4/20 星期四 8:29
+ * @Description: com.video.config
+ * @Version: 1.0
+ */
+
+@Component
+@ConfigurationProperties(prefix = "tencentcloud")
+@Data
+public class smsConfig {
+    //腾讯云上的签名
+
+    private String secretID;
+    //腾讯云上的密钥
+
+    private String secretKey;
+    //短信应用id
+
+    private String sdkAppid;
+    //短信签名内容
+
+    private String signName;
+    //模板Id
+
+    private String templateId;
+    //验证码有效时长
+
+    private String smsMin;
+}

+ 94 - 0
src/main/java/com/video/controller/ExcelController.java

@@ -0,0 +1,94 @@
+package com.video.controller;
+
+import com.sun.org.apache.bcel.internal.generic.NEW;
+import com.video.annotation.PassToken;
+import com.video.api.ExcelControllerAPI;
+import com.video.model.pojo.SystemUser;
+import com.video.services.SystemUserService;
+import org.apache.poi.ss.usermodel.DataFormatter;
+import org.apache.poi.xssf.usermodel.XSSFCell;
+import org.apache.poi.xssf.usermodel.XSSFSheet;
+import org.apache.poi.xssf.usermodel.XSSFWorkbook;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.util.ArrayList;
+
+@RestController
+public class ExcelController implements ExcelControllerAPI {
+    @Autowired
+    SystemUserService systemUserService;
+
+    /**
+     * .xlsx格式
+     */
+    @Override
+    @PassToken
+    public void toExcel(String fileUrl) {
+        ArrayList<SystemUser> systemUsers = new ArrayList<>();
+        //创建工作簿对象
+        XSSFWorkbook xssfWorkbook = null;
+        try {
+            xssfWorkbook = new XSSFWorkbook(new FileInputStream(fileUrl));
+        } catch (IOException e) {
+            throw new RuntimeException(e);
+        }
+        //获取工作簿下sheet的个数
+        int sheetNum = xssfWorkbook.getNumberOfSheets();
+        //遍历工作簿中的所有数据
+        for (int i = 0; i < sheetNum; i++) {
+            //读取第i个工作表
+//            System.out.println("读取第"+(i+1)+"个sheet");
+            XSSFSheet sheet = xssfWorkbook.getSheetAt(i);
+            //获取最后一行的num,即总行数。此处从0开始
+            int maxRow = sheet.getLastRowNum();
+//            从第二行开始获取数据
+            for (int row = 1; row <= maxRow; row++) {
+                //获取最后单元格num,即总单元格数 ***注意:此处从1开始计数***
+                int maxRol = sheet.getRow(row).getLastCellNum();
+//                System.out.println("--------第" + row + "行的数据如下--------");
+//                for (int rol = 0; rol < maxRol; rol++){
+//                    System.out.print(sheet.getRow(row).getCell(rol) + "  ");
+//                }
+                DataFormatter dataFormatter = new DataFormatter();
+//                获取手机号
+                XSSFCell cell = sheet.getRow(row).getCell(3);
+//                获取的手机号格式有问题需要转换
+                dataFormatter.addFormat("###########",null);
+                String phone = dataFormatter.formatCellValue(cell);
+//                获取名字
+                String name = sheet.getRow(row).getCell(1).toString();
+//                获取备注
+                String remarks = sheet.getRow(row).getCell(4).toString();
+//                获取性别
+                String genderName = sheet.getRow(row).getCell(2).toString();
+                int gender;
+                if ("女".equals(genderName)) {
+                    gender=1;
+                }else {
+                    gender=2;
+                }
+
+                SystemUser systemUser = new SystemUser();
+                systemUser.setRoleId(1L);
+                systemUser.setAccountName(name);
+                systemUser.setAccountNumber(row+"");
+                systemUser.setAccountPassword("123456");
+                systemUser.setPhoneNumber(phone);
+                systemUser.setEmail("123456@123456");
+                systemUser.setRemarks(remarks);
+                systemUser.setGender(gender);
+                systemUser.setDeleted(0L);
+                systemUser.setWechatId("123456789");
+                systemUsers.add(systemUser);
+            }
+        }
+
+        boolean b = systemUserService.saveBatch(systemUsers);
+        System.out.println("b = " + b);
+
+
+    }
+}

+ 37 - 0
src/main/java/com/video/controller/LogInfoController.java

@@ -0,0 +1,37 @@
+package com.video.controller;
+
+import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
+import com.video.annotation.PassToken;
+import com.video.api.LogInfoControllerAPI;
+import com.video.model.pojo.SystemUser;
+import com.video.model.utils.CommonResult;
+import com.video.services.impl.SmsCodeServiceImpl;
+import com.video.services.impl.SystemUserServiceImpl;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.web.bind.annotation.*;
+
+@RestController
+public class LogInfoController implements LogInfoControllerAPI {
+
+
+    @Autowired
+    SystemUserServiceImpl systemUserService;
+
+    @Autowired
+    SmsCodeServiceImpl smsCodeService;
+
+    @Override
+    @PassToken
+    public CommonResult verifyPhone(@RequestParam String phone) {
+        return systemUserService.verifyPhone(phone);
+    }
+
+    @Override
+    @PassToken
+    public CommonResult logInfo(String phone, String code) {
+        return smsCodeService.logIn(phone,code);
+    }
+}

+ 314 - 0
src/main/java/com/video/controller/PlaybackRecordController.java

@@ -0,0 +1,314 @@
+package com.video.controller;
+
+import com.google.gson.Gson;
+import com.video.annotation.PassToken;
+import com.video.annotation.UserLoginCheck;
+import com.video.api.PlaybackRecordControllerAPI;
+
+
+import com.video.model.pojo.SmsCode;
+import com.video.model.pojo.resultData;
+import com.video.model.utils.CommonResult;
+import common.result.ResponseStatusEnum;
+import lombok.AllArgsConstructor;
+import org.apache.http.HttpStatus;
+import org.apache.http.client.methods.CloseableHttpResponse;
+import org.apache.http.client.methods.HttpPost;
+import org.apache.http.entity.StringEntity;
+import org.apache.http.impl.client.CloseableHttpClient;
+import org.apache.http.impl.client.HttpClientBuilder;
+import org.apache.http.util.EntityUtils;
+import org.springframework.boot.configurationprocessor.json.JSONObject;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.servlet.http.HttpServletRequest;
+import java.io.*;
+
+/**
+ * @Author: binguo
+ * @Date: 2023/3/23 星期四 15:55
+ * @Description: com.video.controller
+ * @Version: 1.0
+ */
+
+@RestController
+@AllArgsConstructor
+public class PlaybackRecordController implements PlaybackRecordControllerAPI {
+
+//    @Autowired
+//    private PlaybackRecordService playbackRecordService;
+//
+//    private final NonStaticResourceHttpRequestHandler nonStaticResourceHttpRequestHandler;
+//
+//    @Override
+//    public CommonResult<Integer> InsertPlaybackRecord(@RequestBody PlaybackRecord pb){
+//        CommonResult<Integer> result = playbackRecordService.insertPlaybackRecord(pb); // 帮我们自动生成id
+//        return result;
+//    }
+//
+//    @Override
+//    public CommonResult<List<PlaybackRecord>> QueryPlaybackRecords(HttpServletRequest request) {
+//        CommonResult<List<PlaybackRecord>> result = playbackRecordService.getPlaybackRecords();
+//        String ipAddress = null;
+//        try {
+//            ipAddress = request.getHeader("x-forwarded-for");
+//            if (ipAddress == null || ipAddress.length() == 0 || "unknown".equalsIgnoreCase(ipAddress)) {
+//                ipAddress = request.getHeader("Proxy-Client-IP");
+//            }
+//            if (ipAddress == null || ipAddress.length() == 0 || "unknown".equalsIgnoreCase(ipAddress)) {
+//                ipAddress = request.getHeader("WL-Proxy-Client-IP");
+//            }
+//            if (ipAddress == null || ipAddress.length() == 0 || "unknown".equalsIgnoreCase(ipAddress)) {
+//                ipAddress = request.getRemoteAddr();
+//                if (ipAddress.equals("127.0.0.1")) {
+//                    // 根据网卡取本机配置的IP
+//                    InetAddress inet = null;
+//                    inet = InetAddress.getLocalHost();
+//                    ipAddress = inet.getHostAddress();
+//                }
+//            }
+//
+//            // 对于通过多个代理的情况,第一个IP为客户端真实IP,多个IP按照','分割
+//            if (ipAddress != null && ipAddress.length() > 15) { // "***.***.***.***".length()
+//                // = 15
+//                if (ipAddress.indexOf(",") > 0) {
+//                    ipAddress = ipAddress.substring(0, ipAddress.indexOf(","));
+//                }
+//            }
+//        } catch (Exception e) {
+//            ipAddress = "";
+//        }
+//        // ipAddress = this.getRequest().getRemoteAddr();
+//
+//        String s = ipAddress;
+//
+//        return result;
+//    }
+//
+
+
+
+    @UserLoginCheck
+    public String tests(HttpServletRequest request) throws Exception {
+
+        String sss = "";
+        int a = 1;
+        int b = 2;
+        int c = a + b;
+        System.out.println("测试切面接口");
+        return "测试切面接口";
+//        BufferedReader br = request.getReader();
+//
+//        String str, wholeStr = "";
+//        while((str = br.readLine()) != null){
+//
+//            wholeStr += str.replace("vgdecoderesult=","").replace("&&otherparams=","");
+//        }
+//        System.out.println("原生:"+wholeStr);
+//
+//        int d =wholeStr.indexOf("&&devicenumber=");
+//        String deviceNumber = wholeStr.substring(wholeStr.indexOf("&&devicenumber=")).replace("&&devicenumber=","");
+//
+//        if(!(wholeStr.indexOf("id=") < 0)){
+//            wholeStr = wholeStr.replace("id=","id="+deviceNumber).substring(0,d+1);
+//        }else{
+//            wholeStr = wholeStr.substring(0,d);
+//
+//            wholeStr = wholeStr.indexOf("&") < 0 ? wholeStr : wholeStr.substring(0,wholeStr.length()-1);
+//            wholeStr = "id="+ deviceNumber + "&qr=" + wholeStr;
+//        }
+//
+//
+//        System.out.println(wholeStr);
+//
+//        // 获得Http客户端(可以理解为:你得先有一个浏览器;注意:实际上HttpClient与浏览器是不一样的)
+//        CloseableHttpClient httpClient = HttpClientBuilder.create().build();
+//
+//        HttpPost httpPost = new HttpPost("http://cbai.natapp1.cc/carBook/userupcar.action");//发送请求
+//        JSONObject json = new JSONObject();
+//        json.put("code",wholeStr);
+//
+//        // 将参数放到Post中
+//        // 通过new StringEntity(),可将Content-Type设置为text/plain类型
+//        httpPost.setEntity(new StringEntity(json.toString(),"UTF-8"));
+//        CloseableHttpResponse response = httpClient.execute(httpPost);
+//        System.out.println(response);//接收返回
+//
+//        // 取响应的结果
+//        int statusCode = response.getStatusLine().getStatusCode();
+//        // 打印响应结果
+//        if (statusCode == HttpStatus.SC_OK) {
+//            String resp = EntityUtils.toString(response.getEntity(), "utf-8");
+//            System.out.println("status:" + statusCode);
+//            System.out.println("result:" + resp);
+//
+//            Gson jsons = new Gson();
+//            resultData data = jsons.fromJson(resp.replace("result:",""), resultData.class);
+//            if(data != null){
+//                System.out.println("code:" + data.code);
+//                return data.code == 200 ? "code=0000" : "code=1111";
+//            }
+//            else{
+//                System.out.println("data:" + data);
+//                return "code=1111";
+//            }
+//        }
+//        return "code=0000";//"code=0000&&desc=tes";//code=xxxx——xxx 表示服务器处理结果代码,0000 表示成功,其它表示错误
+    }
+
+    @Override
+    public String test(HttpServletRequest request) throws Exception {
+        BufferedReader br = request.getReader();
+
+        String str, wholeStr = "";
+        while((str = br.readLine()) != null){
+
+            wholeStr += str.replace("vgdecoderesult=","").replace("&&otherparams=","");
+        }
+        System.out.println("原生:"+wholeStr);
+        return "code=0000";
+    }
+
+    @Override
+    @PassToken
+    public CommonResult success() {
+        return CommonResult.ok();
+    }
+
+    @Override
+    @PassToken
+    public CommonResult successValue() {
+        SmsCode result = new SmsCode();
+        result.setCode("测试");
+        return CommonResult.ok(result);
+    }
+
+    @Override
+    @PassToken
+    public CommonResult fail() {
+        CommonResult result = CommonResult.fail();
+        return result;
+    }
+
+    @Override
+    @PassToken
+    public CommonResult failValue() {
+        CommonResult result = CommonResult.fail(ResponseStatusEnum.SYSTEM_FILE_NOT_FOUND);
+        return result;
+    }
+
+//    public String upcar(){
+//        JSONObject resultjson = new JSONObject();
+//        Gson gson=new Gson();
+//        com.alibaba.fastjson.JSONObject json = GetHttpParam.getHttpParam(request);
+//        System.out.println(json);
+//        if (json == null){
+//            resultjson.put("code", 500);
+//            resultjson.put("message", "请传入参数");
+//            ResUtil.writeJson(ServletActionContext.getResponse(), resultjson.toString());
+//            return null;
+//        }
+
+
+
+//
+//    @Override
+//    public void videoPreview(HttpServletRequest request, HttpServletResponse response) throws Exception {
+//    //假如我把视频1.mp4放在了static下的video文件夹里面
+//        //sourcePath 是获取resources文件夹的绝对地址
+//        //realPath 即是视频所在的磁盘地址
+//        String sourcePath = "D:/";//ClassUtils.getDefaultClassLoader().getResource("").getPath().substring(1);
+//        String realPath = sourcePath +"video/movie.mp4";
+//
+//
+//        Path filePath = Paths.get(realPath );
+//        if (Files.exists(filePath)) {
+//            String mimeType = Files.probeContentType(filePath);
+//            if (!StringUtils.isEmpty(mimeType)) {
+//                response.setContentType(mimeType);
+//            }
+//            request.setAttribute(NonStaticResourceHttpRequestHandler.ATTR_FILE, filePath);
+//            nonStaticResourceHttpRequestHandler.handleRequest(request, response);
+//        } else {
+//            response.setStatus(HttpServletResponse.SC_NOT_FOUND);
+//            response.setCharacterEncoding(StandardCharsets.UTF_8.toString());
+//        }
+//    }
+//
+//    @Override
+//    public void videoOther(HttpServletRequest request, HttpServletResponse response) throws Exception {
+//        File mp4File = new File("D:\\video\\movie.mp4");
+//
+//        ServletOutputStream outputStream = response.getOutputStream();
+//        RandomAccessFile targetFile = new RandomAccessFile(mp4File, "r");
+//
+//        Long offset = 0L; // 偏移量
+//        Long returnLength = mp4File.length(); // 最终返回的数据量大小
+//
+//        String rangeHeader = request.getHeader(HttpHeaders.RANGE); // 格式:Range: bytes=start-end
+//        if (isEmptyOrNull(rangeHeader)) {
+//            rangeHeader = "";
+//            // 分段返回从新计算偏移量和数据大小
+//            offset = Long.valueOf(rangeHeader.substring(rangeHeader.indexOf("=") + 1, rangeHeader.indexOf("-")));
+//            returnLength = mp4File.length() - offset;
+//            String end = rangeHeader.substring(rangeHeader.indexOf("-") + 1);
+//            if (isEmptyOrNull(end)) {
+//                returnLength = Long.valueOf(end) - offset + 1;
+//            }
+//
+//            // 设置响应头
+//            long endIndex = (offset + returnLength - 1) > mp4File.length() ? mp4File.length() : (offset + returnLength - 1);
+//            response.setStatus(HttpServletResponse.SC_PARTIAL_CONTENT); // 断点续传设置206状态码
+//            response.setContentType("video/mp4");
+//            response.setHeader(HttpHeaders.CONTENT_RANGE, String.format(Locale.ROOT, "bytes %d-%d/%d", offset, endIndex, mp4File.length()));
+//            response.setHeader(HttpHeaders.ACCEPT_RANGES, "bytes");
+//            response.setHeader(HttpHeaders.CONTENT_LENGTH, returnLength + "");
+//        } else {
+//            response.setHeader(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename=" + mp4File.getName());
+//            response.setHeader("Content-Length", String.valueOf(mp4File.length())); //设置文件长度
+//            response.setHeader("Content-Type", "application/octet-stream");
+//        }
+//
+//        targetFile.seek(offset); //设定文件读取开始位置(以字节为单位)
+//
+//        // 根据范围获取文件
+//        byte[] cache = new byte[1024 * 1024 * 10];
+//        int length;
+//        long countByte = 0L;
+//        boolean isBreak = false;
+//        while (!isBreak && (length = targetFile.read(cache)) != -1) {
+//            countByte += length;
+//            if (countByte > returnLength) {
+//                length = (int) (length - (countByte - returnLength));
+//                isBreak = true;
+//                cache = Arrays.copyOfRange(cache, 0, length);
+//            }
+//            outputStream.write(cache, 0, length);
+//        }
+//    }
+//
+//    @PassToken
+//    @Override
+//    public void download(HttpServletResponse response) throws UnsupportedEncodingException {
+//        String filename = URLEncoder.encode("最新测试.xls", "UTF-8");
+//
+//        response.setContentType("application/x-download");
+//        response.setHeader("Content-Disposition", "attachment;filename=" + filename);//浏览器上提示下载时默认的文件名
+//
+//        try (ServletOutputStream out = response.getOutputStream();
+//             InputStream stream = new FileInputStream("D:\\最新测试.xls")){//读取服务器上的文件
+//
+//            byte buff[] = new byte[1024];
+//            int length = 0;
+//            while ((length = stream.read(buff)) > 0) {
+//                out.write(buff,0,length);
+//            }
+//            stream.close();
+//            out.close();
+//            out.flush();
+//        } catch (IOException e) {
+//            e.printStackTrace();
+//        }
+//    }
+
+}

+ 32 - 0
src/main/java/com/video/controller/SendController.java

@@ -0,0 +1,32 @@
+package com.video.controller;
+
+import com.tencentcloudapi.sms.v20210111.models.SendStatus;
+import com.video.annotation.PassToken;
+import com.video.api.SendControllerAPI;
+import com.video.model.utils.CommonResult;
+import common.result.Code;
+import common.utils.SendSms;
+import common.utils.ValidateCode;
+import io.swagger.annotations.Api;
+import org.springframework.web.bind.annotation.*;
+
+@RestController
+@RequestMapping("/send/sms")
+@Api(tags = {"SendController"},value = "短信发送接口")
+public class SendController implements SendControllerAPI {
+
+
+    @Override
+//    @PassToken
+//    @PostMapping("/sendCodeAgain")
+    public SendStatus[] sendCodeAgain(@RequestBody String phone){
+        //         随机验证码
+        int vode= ValidateCode.generateValidateCode(6);
+        String code=String.valueOf(vode);
+        phone="+86"+phone;
+        SendStatus[] ret = SendSms.sendSms(phone,code);
+        return ret;
+    }
+
+
+}

+ 44 - 0
src/main/java/com/video/controller/SmsCodeController.java

@@ -0,0 +1,44 @@
+package com.video.controller;
+
+
+import com.video.annotation.PassToken;
+import com.video.api.SmsCodeControllerAPI;
+import com.video.model.pojo.SmsCode;
+import com.video.model.utils.CommonResult;
+import com.video.services.SmsCodeService;
+import com.video.services.SystemMenuService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.RequestMapping;
+
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.Date;
+
+/**
+ * <p>
+ *  前端控制器
+ * </p>
+ *
+ * @author ceshi
+ * @since 2023-04-20
+ */
+@RestController
+public class SmsCodeController implements SmsCodeControllerAPI {
+
+    @Autowired
+    private SmsCodeService smsCodeService;
+
+    @Override
+    @PassToken
+    public CommonResult InsertSmsCode() {
+        SmsCode smsCode = new SmsCode();
+        smsCode.setPhoneNumber("123456789");
+        smsCode.setCode("123456");
+        long time = new Date().getTime() + 60000L;
+        smsCode.setExpirationTime(new Date(time));
+        smsCode.setIsVerify("0");
+        smsCodeService.save(smsCode);
+        return null;
+    }
+}
+

+ 26 - 0
src/main/java/com/video/controller/SystemAuthorityController.java

@@ -0,0 +1,26 @@
+package com.video.controller;
+
+
+import com.video.api.SystemAuthorityControllerAPI;
+import com.video.annotation.PassToken;
+
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * <p>
+ *  前端控制器
+ * </p>
+ *
+ * @author ceshi
+ * @since 2023-03-30
+ */
+@RestController
+public class SystemAuthorityController implements SystemAuthorityControllerAPI {
+
+    @PassToken
+    @Override
+    public void test() {
+
+    }
+}
+

+ 110 - 0
src/main/java/com/video/controller/SystemMenuController.java

@@ -0,0 +1,110 @@
+package com.video.controller;
+
+
+import com.video.api.SystemMenuControllerAPI;
+import com.video.model.pojo.SystemMenu;
+import com.video.model.utils.CommonResult;
+import com.video.model.vo.SystemMenuTreeVo;
+import com.video.model.vo.SystemMenuVo;
+import com.video.services.SystemMenuService;
+import com.video.annotation.PassToken;
+import org.springframework.beans.factory.annotation.Autowired;
+
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.servlet.http.HttpServletRequest;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * <p>
+ *  前端控制器
+ * </p>
+ *
+ * @author ceshi
+ * @since 2023-03-30
+ */
+@RestController
+public class SystemMenuController implements SystemMenuControllerAPI {
+
+    @Autowired
+    private SystemMenuService systemMenuService;
+
+    @Override
+    @PassToken
+    public CommonResult<Integer> InsertPlaybackRecord(@RequestBody SystemMenu pb){
+        CommonResult<Integer> result = systemMenuService.insertPlaybackRecord(pb); // 帮我们自动生成id
+        return result;
+    }
+
+    @Override
+    @PassToken
+    public CommonResult<List<SystemMenu>> QueryPlaybackRecords(HttpServletRequest request) {
+        CommonResult<List<SystemMenu>> result = systemMenuService.getPlaybackRecords();
+        return result;
+    }
+
+    @Override
+    @PassToken
+    public CommonResult<List<SystemMenuVo>> QueryPlaybackRecordBySql() {
+        CommonResult<List<SystemMenuVo>> result = systemMenuService.getPlaybackRecordBySql();
+        return result;
+    }
+
+    @Override
+    @PassToken
+    public CommonResult<List<SystemMenu>> QueryPlaybackRecords() {
+        return systemMenuService.getSystemMenus();
+    }
+
+    @Override
+    @PassToken
+    public CommonResult InsertSystemMenu(SystemMenu systemMenu) {
+        return systemMenuService.insertSystemMenus(systemMenu);
+    }
+
+    @Override
+    @PassToken
+    public CommonResult DeleteSystemMenu(Integer userID) {
+        return systemMenuService.deleteSystemMenu(userID);
+    }
+
+    @Override
+    @PassToken
+    public CommonResult<List<SystemMenuTreeVo>> QueryMenuTreeRecords() {
+        List<SystemMenuTreeVo> newTrees = new ArrayList<>();
+
+        newTrees = QueryMenuTreeRecords(0L);
+
+        return CommonResult.ok().setResult(newTrees);
+    }
+
+    /*
+    根据父类ID获取树形菜单数据
+     */
+    private List<SystemMenuTreeVo> QueryMenuTreeRecords(Long parentID){
+        List<SystemMenuTreeVo> newTrees = new ArrayList<>();
+
+        List<SystemMenu> datas = systemMenuService.getSystemMenusByParentId(parentID).getData();
+
+        for (SystemMenu data : datas) {
+            SystemMenuTreeVo item = SystemMenuTreeVo.builder()
+                    .id(data.getId())
+                    .parentId(data.getMenuParentId())
+                    .menuName(data.getMenuName())
+                    .build();
+            List<SystemMenuTreeVo> news = QueryMenuTreeRecords(item.getId());
+            if (news == null || news.size() == 0) {
+                newTrees.add(item);
+                continue;
+            }else {
+                item.setChildren(news);
+                newTrees.add(item);
+            }
+        }
+
+        return  newTrees;
+    }
+}
+

+ 21 - 0
src/main/java/com/video/controller/SystemRoleController.java

@@ -0,0 +1,21 @@
+package com.video.controller;
+
+
+import com.video.api.SystemRoleControllerAPI;
+import org.springframework.web.bind.annotation.RequestMapping;
+
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * <p>
+ *  前端控制器
+ * </p>
+ *
+ * @author ceshi
+ * @since 2023-03-30
+ */
+@RestController
+public class SystemRoleController implements SystemRoleControllerAPI {
+
+}
+

+ 21 - 0
src/main/java/com/video/controller/SystemUserController.java

@@ -0,0 +1,21 @@
+package com.video.controller;
+
+
+import com.video.api.SystemUserControllerAPI;
+import org.springframework.web.bind.annotation.RequestMapping;
+
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * <p>
+ *  前端控制器
+ * </p>
+ *
+ * @author ceshi
+ * @since 2023-03-30
+ */
+@RestController
+public class SystemUserController implements SystemUserControllerAPI {
+
+}
+

+ 21 - 0
src/main/java/com/video/controller/VideoCategoryController.java

@@ -0,0 +1,21 @@
+package com.video.controller;
+
+
+import com.video.api.VideoCategoryControllerAPI;
+import org.springframework.web.bind.annotation.RequestMapping;
+
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * <p>
+ *  前端控制器
+ * </p>
+ *
+ * @author ceshi
+ * @since 2023-03-30
+ */
+@RestController
+public class VideoCategoryController implements VideoCategoryControllerAPI {
+
+}
+

+ 37 - 0
src/main/java/com/video/controller/VideoController.java

@@ -0,0 +1,37 @@
+package com.video.controller;
+
+
+import com.video.api.VideoControllerAPI;
+import com.video.model.utils.CommonResult;
+import com.video.services.VideoService;
+import io.swagger.annotations.ApiModelProperty;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+/**
+ * <p>
+ *  前端控制器
+ * </p>
+ *
+ * @author ceshi
+ * @since 2023-03-30
+ */
+@RestController
+public class VideoController implements VideoControllerAPI {
+
+    @Autowired
+    VideoService videoService;
+
+    @Override
+    @GetMapping("/video")
+    @ApiOperation(value = "查询视频",httpMethod = "GET")
+    @CrossOrigin
+    public CommonResult list() {
+        return videoService.getVideo();
+    }
+}
+

+ 21 - 0
src/main/java/com/video/controller/VideoElseController.java

@@ -0,0 +1,21 @@
+package com.video.controller;
+
+
+import com.video.api.VideoElseControllerAPI;
+import org.springframework.web.bind.annotation.RequestMapping;
+
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * <p>
+ *  前端控制器
+ * </p>
+ *
+ * @author ceshi
+ * @since 2023-04-25
+ */
+@RestController
+public class VideoElseController implements VideoElseControllerAPI {
+
+}
+

+ 21 - 0
src/main/java/com/video/controller/VideoPlayController.java

@@ -0,0 +1,21 @@
+package com.video.controller;
+
+
+import com.video.api.VideoPlayControllerAPI;
+import org.springframework.web.bind.annotation.RequestMapping;
+
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * <p>
+ *  前端控制器
+ * </p>
+ *
+ * @author ceshi
+ * @since 2023-03-30
+ */
+@RestController
+public class VideoPlayController implements VideoPlayControllerAPI {
+
+}
+

+ 21 - 0
src/main/java/com/video/controller/VideoShareController.java

@@ -0,0 +1,21 @@
+package com.video.controller;
+
+
+import com.video.api.VideoShareControllerAPI;
+import org.springframework.web.bind.annotation.RequestMapping;
+
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * <p>
+ *  前端控制器
+ * </p>
+ *
+ * @author ceshi
+ * @since 2023-03-30
+ */
+@RestController
+public class VideoShareController implements VideoShareControllerAPI {
+
+}
+

+ 27 - 0
src/main/java/com/video/core/CORSConfiguration.java

@@ -0,0 +1,27 @@
+package com.video.core;
+
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.web.servlet.config.annotation.CorsRegistry;
+import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
+
+@Configuration
+public class CORSConfiguration{
+    @Bean
+    public WebMvcConfigurer corsConfigurer() {
+        return new WebMvcConfigurer() {
+            @Override
+            public void addCorsMappings(CorsRegistry registry) {
+                registry.addMapping("/**")
+                        //放行哪些原始域
+                        .allowedOrigins("*")
+                        //是否发送Cookie信息
+                        .allowCredentials(false)
+                        //放行哪些原始域(请求方式)
+                        .allowedMethods("GET", "POST", "DELETE", "PUT", "OPTIONS")
+                        //放行哪些原始域(头部信息)
+                        .allowedHeaders("*");
+            }
+        };
+    }
+}

+ 99 - 0
src/main/java/com/video/core/JwtAuthenticationInterceptor.java

@@ -0,0 +1,99 @@
+package com.video.core;
+
+import com.auth0.jwt.interfaces.Claim;
+import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
+import com.video.annotation.PassToken;
+import com.video.model.utils.CommonResult;
+import common.exception.MyCustomException;
+import common.result.ResponseStatusEnum;
+import common.utils.JWTUtil;
+import io.jsonwebtoken.Claims;
+import org.springframework.boot.configurationprocessor.json.JSONObject;
+import org.springframework.util.StringUtils;
+import org.springframework.web.method.HandlerMethod;
+import org.springframework.web.servlet.HandlerInterceptor;
+import org.springframework.web.servlet.ModelAndView;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.PrintWriter;
+import java.lang.reflect.Method;
+import java.util.Map;
+
+public class JwtAuthenticationInterceptor implements HandlerInterceptor {
+
+    /**
+     * preHandle:进入到控制器方法之前执行的内容
+     *     boolean:
+     *         true:可以继续执行控制器方法
+     *         false:拦截
+     * posthandler:执行控制器方法之后执行的内容
+     * afterCompletion:响应结束之前执行的内容
+     *///说明
+    @Override
+    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
+
+        //region 检查是否有passtoken注释,有则跳过认证
+        //PassToken注解用在方法上面
+        HandlerMethod handlerMethod = (HandlerMethod) handler;
+        Method method = handlerMethod.getMethod();
+        if (method.isAnnotationPresent(PassToken.class)) {
+            PassToken passToken = method.getAnnotation(PassToken.class);
+            if (passToken.requeired()) {
+                return true;
+            }
+        }
+        //endregion
+
+        //region 获取url传递的参数 Query string传递的参数
+
+          //获取url参数 getParameter方法里的参数名和定义的参数名一致
+          String token = request.getHeader("token");
+        // 验证userToken
+        if (!StringUtils.hasText(token)) {
+            throw new MyCustomException(ResponseStatusEnum.SYSTEM_TOKEN_ERROR);
+        }
+
+        // 解析token
+
+        Map<String, Claim> stringClaimMap = JWTUtil.verifyToken(token);
+
+        if (ObjectUtils.isNotEmpty(stringClaimMap)&&stringClaimMap.size()>0) { // 登录
+            return true;
+        }
+
+
+        //region 自定义返回响应的json格式
+        //加上这个可以让浏览器那里得到浏览器的401:response.setStatus(HttpServletResponse.SC_UNAUTHORIZED);
+        response.setCharacterEncoding("UTF-8");
+        response.setContentType("application/json; charset=utf-8");
+        JSONObject res = new JSONObject();
+        res.put("code", 699);
+        res.put("message", "token已过期");
+        res.put("result", "error");
+        PrintWriter out = null;
+        out = response.getWriter();
+        out.write(res.toString());
+        out.flush();
+        out.close();
+        //endregion
+
+        //region 默认的响应提示信息
+        //上面的提示信息返回格式和下面的只能开启一个,否则应用日志系统会导致Idean抛出异常:
+        //java.lang.IllegalStateException: getWriter() has already been called for this response
+        //response.sendError(401, "无权限");
+        //endregion
+
+        return false;
+    }
+
+    @Override
+    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
+
+    }
+
+    @Override
+    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
+
+    }
+}

+ 25 - 0
src/main/java/com/video/core/JwtlnterceptorConfig.java

@@ -0,0 +1,25 @@
+package com.video.core;
+
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.web.servlet.HandlerInterceptor;
+import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
+import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
+
+@Configuration
+public class JwtlnterceptorConfig implements WebMvcConfigurer {
+    @Override
+    public void addInterceptors(InterceptorRegistry registry) {
+        //region
+        //目前测试下来 使用 /**所有的话,response.sendError浏览器获取不到响应的信息
+        //默认拦截所有路径
+        registry.addInterceptor(authenticationInterceptor())
+                .addPathPatterns("/api/**");
+        //endregion
+    }
+
+    @Bean
+    public HandlerInterceptor authenticationInterceptor() {
+        return new JwtAuthenticationInterceptor();
+    }
+}

+ 74 - 0
src/main/java/com/video/core/SwaggerConfiguration.java

@@ -0,0 +1,74 @@
+package com.video.core;
+
+import com.google.common.base.Predicates;
+import com.video.annotation.ControllerIsShow;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.context.annotation.Profile;
+import springfox.documentation.builders.ApiInfoBuilder;
+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
+/*
+* 两种方式控制生产环境是否显示swagger
+* */
+//@Profile("!prod")
+@Profile({"dev","test"})
+public class SwaggerConfiguration {
+    /**
+     * 创建Docket类型的对象。并使用spring容器管理。
+     * Docket是Swagger中的全局配置对象。
+     * 请求方式:http://ip地址:端口/项目名/swagger-ui.html#/
+     */
+    @Bean
+    public Docket createRestApi() {
+        ApiInfo apiInfo = new ApiInfoBuilder()
+                .version("1.1.0") //版本
+                .title("视频系统接口文档") //网站标题
+                .description("提供测试接口或前端查看对应参数以及返回参数使用") //网站描述
+                .contact(new Contact("创海", "https://www.baidu.com/", "a974264710@163.com"))
+                //region 在swagger中显示作用不是很大
+                /*
+                .license("The Apache License") //协议
+                .licenseUrl("http://www.baidu.com") //许可证链接地址
+                */
+                //endregion
+                .build();
+
+        return new Docket(DocumentationType.SWAGGER_2)
+                .apiInfo(apiInfo)//参数为类对象,并且这个类对象是swagger版本
+                .select()//获取Docket中的选择器。返回ApiSelctorBuilder。构建选择器的。如:扫描什么包的注解。
+                .apis(
+                        //region 是否在swagger中进行展示对应控制器
+                        /*
+                         Predicates.not:取反 例如,false -> true
+                         withMethodAnnotation:当方法上有注解的时候返回true
+                         整体作用:启用该段代码之后如果在方法上使用的自定义的注解:ControllerIsShow
+                         则在swagger中不会显示该方法
+                        */
+                        Predicates.not(
+                                RequestHandlerSelectors.withMethodAnnotation(
+                                        ControllerIsShow.class
+                                )
+                        )
+                        //endregion
+                )
+                .apis(RequestHandlerSelectors.basePackage("com.video"))//设定扫描哪个包(包含子包)中的注解。 如果要匹配多个不同包下的控制器可以精确到多个包的统一父级
+                //region 匹配路由地址
+                /*
+                //用正则匹配显示路由地址为swagger开头的链接 即:范围匹配器 以此来控制在swagger中描述哪些控制器
+                .paths(
+                        PathSelectors.regex("/swagger/.*")
+                )
+                */
+                //endregion
+                .build();//重新构建Docket对象
+
+    }
+}

+ 26 - 0
src/main/java/com/video/handle/NonStaticResourceHttpRequestHandler.java

@@ -0,0 +1,26 @@
+package com.video.handle;
+
+import org.springframework.core.io.FileSystemResource;
+import org.springframework.core.io.Resource;
+import org.springframework.stereotype.Component;
+import org.springframework.web.servlet.resource.ResourceHttpRequestHandler;
+
+import javax.servlet.http.HttpServletRequest;
+import java.nio.file.Path;
+
+/**
+ * @Author: binguo
+ * @Date: 2023/3/27 星期一 8:49
+ * @Description: com.video.handle
+ * @Version: 1.0
+ */
+@Component
+public class NonStaticResourceHttpRequestHandler extends ResourceHttpRequestHandler {
+    public final static String ATTR_FILE = "NON-STATIC-FILE";
+
+    @Override
+    protected Resource getResource(HttpServletRequest request) {
+        final Path filePath = (Path) request.getAttribute(ATTR_FILE);
+        return new FileSystemResource(filePath);
+    }
+}

+ 45 - 0
src/main/java/com/video/handler/MyMetaObjectHandler.java

@@ -0,0 +1,45 @@
+package com.video.handler;
+
+import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.ibatis.reflection.MetaObject;
+import org.springframework.stereotype.Component;
+import org.springframework.web.context.request.RequestAttributes;
+import org.springframework.web.context.request.RequestContextHolder;
+import org.springframework.web.context.request.ServletRequestAttributes;
+
+import javax.servlet.http.HttpServletRequest;
+import java.util.Date;
+
+@Slf4j
+@Component // 一定不要忘记把处理器加到IOC容器中!
+public class MyMetaObjectHandler implements MetaObjectHandler {
+    // 插入时的填充策略
+    @Override
+    public void insertFill(MetaObject metaObject) {
+        HttpServletRequest request = getHttpServletRequest();
+        Long user_id = 1L;//request.getHeader("user_id") == null ? "测试" : request.getHeader("user_id");
+        log.info("start insert fill.....");
+        // setFieldValByName(String fieldName, Object fieldVal, MetaObject metaObject
+        this.setFieldValByName("createTime",new Date(),metaObject);
+        this.setFieldValByName("updateTime",new Date(),metaObject);
+        this.setFieldValByName("createUser",user_id,metaObject);
+        this.setFieldValByName("updateUser",user_id,metaObject);
+    }
+
+    // 更新时的填充策略
+    @Override
+    public void updateFill(MetaObject metaObject) {
+        HttpServletRequest request = getHttpServletRequest();
+        Long user_id = 1L;
+        log.info("start update fill.....");
+        this.setFieldValByName("updateTime",new Date(),metaObject);
+        this.setFieldValByName("updateUser",user_id,metaObject);
+    }
+
+    private HttpServletRequest getHttpServletRequest() {
+        RequestAttributes requestAttributes = RequestContextHolder.getRequestAttributes();
+        ServletRequestAttributes attributes = (ServletRequestAttributes) requestAttributes;
+        return attributes.getRequest();
+    }
+}

+ 16 - 0
src/main/java/com/video/mapper/SmsCodeMapper.java

@@ -0,0 +1,16 @@
+package com.video.mapper;
+
+import com.video.model.pojo.SmsCode;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * <p>
+ *  Mapper 接口
+ * </p>
+ *
+ * @author ceshi
+ * @since 2023-04-20
+ */
+public interface SmsCodeMapper extends BaseMapper<SmsCode> {
+
+}

+ 16 - 0
src/main/java/com/video/mapper/SystemAuthorityMapper.java

@@ -0,0 +1,16 @@
+package com.video.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.video.model.pojo.SystemAuthority;
+
+/**
+ * <p>
+ *  Mapper 接口
+ * </p>
+ *
+ * @author ceshi
+ * @since 2023-03-30
+ */
+public interface SystemAuthorityMapper extends BaseMapper<SystemAuthority> {
+
+}

+ 28 - 0
src/main/java/com/video/mapper/SystemMenuMapper.java

@@ -0,0 +1,28 @@
+package com.video.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.video.model.pojo.SystemMenu;
+import com.video.model.vo.SystemMenuVo;
+import org.springframework.stereotype.Repository;
+
+import java.util.List;
+
+/**
+ * <p>
+ * Mapper 接口
+ * </p>
+ *
+ * @author ceshi
+ * @since 2023-03-30
+ */
+/*
+Mapper和Repository的相同点:
+@Mapper和@Repository都是作用在dao层接口,使得其生成代理对象bean,交给spring 容器管理,对于mybatis来说,都可以不用写mapper.xml文件
+Mapper和Repository的区别:
+@Repository需要在Spring中配置扫描地址,然后生成Dao层的Bean才能被注入到Service层中:如下,在启动类中配置扫描地址:
+@Mapper不需要配置扫描地址,通过xml里面的namespace里面的接口地址,生成了Bean后注入到Service层中
+* */
+@Repository
+public interface SystemMenuMapper extends BaseMapper<SystemMenu> {
+    List<SystemMenuVo> querySystemMenuAll();
+}

+ 16 - 0
src/main/java/com/video/mapper/SystemRoleMapper.java

@@ -0,0 +1,16 @@
+package com.video.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.video.model.pojo.SystemRole;
+
+/**
+ * <p>
+ *  Mapper 接口
+ * </p>
+ *
+ * @author ceshi
+ * @since 2023-03-30
+ */
+public interface SystemRoleMapper extends BaseMapper<SystemRole> {
+
+}

+ 16 - 0
src/main/java/com/video/mapper/SystemUserMapper.java

@@ -0,0 +1,16 @@
+package com.video.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.video.model.pojo.SystemUser;
+
+/**
+ * <p>
+ *  Mapper 接口
+ * </p>
+ *
+ * @author ceshi
+ * @since 2023-03-30
+ */
+public interface SystemUserMapper extends BaseMapper<SystemUser> {
+
+}

+ 16 - 0
src/main/java/com/video/mapper/VideoCategoryMapper.java

@@ -0,0 +1,16 @@
+package com.video.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.video.model.pojo.VideoCategory;
+
+/**
+ * <p>
+ *  Mapper 接口
+ * </p>
+ *
+ * @author ceshi
+ * @since 2023-03-30
+ */
+public interface VideoCategoryMapper extends BaseMapper<VideoCategory> {
+
+}

+ 16 - 0
src/main/java/com/video/mapper/VideoElseMapper.java

@@ -0,0 +1,16 @@
+package com.video.mapper;
+
+import com.video.model.pojo.VideoElse;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * <p>
+ *  Mapper 接口
+ * </p>
+ *
+ * @author ceshi
+ * @since 2023-04-25
+ */
+public interface VideoElseMapper extends BaseMapper<VideoElse> {
+
+}

+ 16 - 0
src/main/java/com/video/mapper/VideoMapper.java

@@ -0,0 +1,16 @@
+package com.video.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.video.model.pojo.Video;
+
+/**
+ * <p>
+ *  Mapper 接口
+ * </p>
+ *
+ * @author ceshi
+ * @since 2023-03-30
+ */
+public interface VideoMapper extends BaseMapper<Video> {
+
+}

+ 16 - 0
src/main/java/com/video/mapper/VideoPlayMapper.java

@@ -0,0 +1,16 @@
+package com.video.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.video.model.pojo.VideoPlay;
+
+/**
+ * <p>
+ *  Mapper 接口
+ * </p>
+ *
+ * @author ceshi
+ * @since 2023-03-30
+ */
+public interface VideoPlayMapper extends BaseMapper<VideoPlay> {
+
+}

+ 16 - 0
src/main/java/com/video/mapper/VideoShareMapper.java

@@ -0,0 +1,16 @@
+package com.video.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.video.model.pojo.VideoShare;
+
+/**
+ * <p>
+ *  Mapper 接口
+ * </p>
+ *
+ * @author ceshi
+ * @since 2023-03-30
+ */
+public interface VideoShareMapper extends BaseMapper<VideoShare> {
+
+}

+ 66 - 0
src/main/java/com/video/model/pojo/SmsCode.java

@@ -0,0 +1,66 @@
+package com.video.model.pojo;
+
+import com.baomidou.mybatisplus.annotation.*;
+
+import java.util.Date;
+import java.io.Serializable;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+/**
+ * <p>
+ *
+ * </p>
+ *
+ * @author ceshi
+ * @since 2023-04-20
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@ApiModel(value="SmsCode对象", description="")
+public class SmsCode implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty(value = "主键ID")
+    @TableId(value = "id", type = IdType.ID_WORKER)
+    private Long id;
+
+    @ApiModelProperty(value = "手机号")
+    private String phoneNumber;
+
+    @ApiModelProperty(value = "短信验证码")
+    private String code;
+
+    @ApiModelProperty(value = "失效时间")
+    private Date expirationTime;
+
+    @ApiModelProperty(value = "是否验证 0 未验证 1 已验证")
+    private String isVerify;
+
+    @TableField(fill = FieldFill.INSERT)
+    @ApiModelProperty(value = "创建时间")
+    private Date createTime;
+
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    @ApiModelProperty(value = "更新时间")
+    private Date updateTime;
+
+    @TableField(fill = FieldFill.INSERT)
+    @ApiModelProperty(value = "创建人员")
+    private Long createUser;
+
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    @ApiModelProperty(value = "更新人员")
+    private Long updateUser;
+
+    @ApiModelProperty(value = "逻辑删除标记")
+    @TableLogic
+    private Long deleted;
+
+
+}

+ 72 - 0
src/main/java/com/video/model/pojo/SystemAuthority.java

@@ -0,0 +1,72 @@
+package com.video.model.pojo;
+
+import com.baomidou.mybatisplus.annotation.*;
+
+import java.util.Date;
+import java.io.Serializable;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+/**
+ * <p>
+ *
+ * </p>
+ *
+ * @author ceshi
+ * @since 2023-03-30
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@ApiModel(value="SystemAuthority对象", description="")
+public class SystemAuthority implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty(value = "id")
+    @TableId(value = "id", type = IdType.AUTO)
+    private Long id;
+
+    @ApiModelProperty(value = "角色ID")
+    private Long roleId;
+
+    @ApiModelProperty(value = "菜单ID")
+    private Long menuId;
+
+    @ApiModelProperty(value = "是否新增 0 未拥有该权限 1 拥有该权限")
+    private String isCreate;
+
+    @ApiModelProperty(value = "是否删除 0 未拥有该权限 1 拥有该权限")
+    private String isDelete;
+
+    @ApiModelProperty(value = "是否编辑 0 未拥有该权限 1 拥有该权限")
+    private String isUpdate;
+
+    @ApiModelProperty(value = "是否查看 0 未拥有该权限 1 拥有该权限")
+    private String isRead;
+
+    @TableField(fill = FieldFill.INSERT)
+    @ApiModelProperty(value = "创建时间")
+    private Date createTime;
+
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    @ApiModelProperty(value = "更新时间")
+    private Date updateTime;
+
+    @TableField(fill = FieldFill.INSERT)
+    @ApiModelProperty(value = "创建人员")
+    private Long createUser;
+
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    @ApiModelProperty(value = "更新人员")
+    private Long updateUser;
+
+    @ApiModelProperty(value = "逻辑删除标记")
+    @TableLogic
+    private Long deleted;
+
+
+}

+ 60 - 0
src/main/java/com/video/model/pojo/SystemMenu.java

@@ -0,0 +1,60 @@
+package com.video.model.pojo;
+
+import com.baomidou.mybatisplus.annotation.*;
+
+import java.util.Date;
+import java.io.Serializable;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+/**
+ * <p>
+ *
+ * </p>
+ *
+ * @author ceshi
+ * @since 2023-03-30
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@ApiModel(value="SystemMenu对象", description="")
+public class SystemMenu implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty(value = "id")
+    @TableId(value = "id", type = IdType.AUTO)
+    private Long id;
+
+    @ApiModelProperty(value = "上级菜单ID")
+    private Long menuParentId;
+
+    @ApiModelProperty(value = "菜单名称")
+    private String menuName;
+
+    @TableField(fill = FieldFill.INSERT)
+    @ApiModelProperty(value = "创建时间")
+    private Date createTime;
+
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    @ApiModelProperty(value = "更新时间")
+    private Date updateTime;
+
+    @TableField(fill = FieldFill.INSERT)
+    @ApiModelProperty(value = "创建人员")
+    private Long createUser;
+
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    @ApiModelProperty(value = "更新人员")
+    private Long updateUser;
+
+    @ApiModelProperty(value = "逻辑删除标记")
+    @TableLogic
+    private Long deleted;
+
+
+}

+ 57 - 0
src/main/java/com/video/model/pojo/SystemRole.java

@@ -0,0 +1,57 @@
+package com.video.model.pojo;
+
+import com.baomidou.mybatisplus.annotation.*;
+
+import java.util.Date;
+import java.io.Serializable;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+/**
+ * <p>
+ *
+ * </p>
+ *
+ * @author ceshi
+ * @since 2023-03-30
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@ApiModel(value="SystemRole对象", description="")
+public class SystemRole implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty(value = "id")
+    @TableId(value = "id", type = IdType.AUTO)
+    private Long id;
+
+    @ApiModelProperty(value = "角色名称")
+    private String roleName;
+
+    @TableField(fill = FieldFill.INSERT)
+    @ApiModelProperty(value = "创建时间")
+    private Date createTime;
+
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    @ApiModelProperty(value = "更新时间")
+    private Date updateTime;
+
+    @TableField(fill = FieldFill.INSERT)
+    @ApiModelProperty(value = "创建人员")
+    private Long createUser;
+
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    @ApiModelProperty(value = "更新人员")
+    private Long updateUser;
+
+    @ApiModelProperty(value = "逻辑删除标记")
+    @TableLogic
+    private Long deleted;
+
+
+}

+ 79 - 0
src/main/java/com/video/model/pojo/SystemUser.java

@@ -0,0 +1,79 @@
+package com.video.model.pojo;
+
+import com.baomidou.mybatisplus.annotation.*;
+
+import java.util.Date;
+import java.io.Serializable;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+/**
+ * <p>
+ *
+ * </p>
+ *
+ * @author ceshi
+ * @since 2023-03-30
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@ApiModel(value="SystemUser对象", description="")
+public class SystemUser implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty(value = "id")
+    @TableId(value = "id", type = IdType.AUTO)
+    private Long id;
+
+    @ApiModelProperty(value = "角色ID")
+    private Long roleId;
+
+    @ApiModelProperty(value = "账户名")
+    private String accountName;
+
+    @ApiModelProperty(value = "账户")
+    private String accountNumber;
+
+    @ApiModelProperty(value = "账户密码")
+    private String accountPassword;
+
+    @ApiModelProperty(value = "手机号")
+    private String phoneNumber;
+
+    @ApiModelProperty(value = "邮箱账号")
+    private String email;
+
+    @ApiModelProperty(value = "微信号id")
+    private String wechatId;
+
+    @ApiModelProperty(value = "备注")
+    private String remarks;
+
+    @ApiModelProperty(value = "创建时间")
+    @TableField(fill = FieldFill.INSERT)
+    private Date createTime;
+
+    @ApiModelProperty(value = "更新时间")
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    private Date updateTime;
+
+    @ApiModelProperty(value = "创建人员")
+    @TableField(fill = FieldFill.INSERT)
+    private Long createUser;
+
+    @ApiModelProperty(value = "更新人员")
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    private Long updateUser;
+
+    @ApiModelProperty(value = "逻辑删除标记")
+    @TableLogic
+    private Long deleted;
+
+    @ApiModelProperty(value = "性别")
+    private Integer gender;
+}

+ 72 - 0
src/main/java/com/video/model/pojo/Video.java

@@ -0,0 +1,72 @@
+package com.video.model.pojo;
+
+import com.baomidou.mybatisplus.annotation.*;
+
+import java.util.Date;
+import java.io.Serializable;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+/**
+ * <p>
+ *
+ * </p>
+ *
+ * @author ceshi
+ * @since 2023-03-30
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@ApiModel(value="Video对象", description="")
+public class Video implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty(value = "id")
+    @TableId(value = "id", type = IdType.AUTO)
+    private Long id;
+
+    @ApiModelProperty(value = "视频类别ID")
+    private Long videoCategoryId;
+
+    @ApiModelProperty(value = "视频名称")
+    private String videoName;
+
+    @ApiModelProperty(value = "视频链接")
+    private String videoUrl;
+
+    @ApiModelProperty(value = "视频说明")
+    private String videoDescription;
+
+    @ApiModelProperty(value = "视频时长")
+    private Long videoDuration;
+
+    @TableField(fill = FieldFill.INSERT)
+    @ApiModelProperty(value = "创建时间")
+    private Date createTime;
+
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    @ApiModelProperty(value = "更新时间")
+    private Date updateTime;
+
+    @TableField(fill = FieldFill.INSERT)
+    @ApiModelProperty(value = "创建人员")
+    private Long createUser;
+
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    @ApiModelProperty(value = "更新人员")
+    private Long updateUser;
+
+    @ApiModelProperty(value = "逻辑删除标记")
+    @TableLogic
+    private Long deleted;
+
+    @ApiModelProperty(value = "视频封面图片路径")
+    private String pictureUrl;
+
+
+}

+ 60 - 0
src/main/java/com/video/model/pojo/VideoCategory.java

@@ -0,0 +1,60 @@
+package com.video.model.pojo;
+
+import com.baomidou.mybatisplus.annotation.*;
+
+import java.util.Date;
+import java.io.Serializable;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+/**
+ * <p>
+ *
+ * </p>
+ *
+ * @author ceshi
+ * @since 2023-03-30
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@ApiModel(value="VideoCategory对象", description="")
+public class VideoCategory implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty(value = "id")
+    @TableId(value = "id", type = IdType.AUTO)
+    private Long id;
+
+    @ApiModelProperty(value = "类别名称")
+    private String categoryName;
+
+    @ApiModelProperty(value = "备注")
+    private String remarks;
+
+    @TableField(fill = FieldFill.INSERT)
+    @ApiModelProperty(value = "创建时间")
+    private Date createTime;
+
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    @ApiModelProperty(value = "更新时间")
+    private Date updateTime;
+
+    @TableField(fill = FieldFill.INSERT)
+    @ApiModelProperty(value = "创建人员")
+    private Long createUser;
+
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    @ApiModelProperty(value = "更新人员")
+    private Long updateUser;
+
+    @ApiModelProperty(value = "逻辑删除标记")
+    @TableLogic
+    private Long deleted;
+
+
+}

+ 63 - 0
src/main/java/com/video/model/pojo/VideoElse.java

@@ -0,0 +1,63 @@
+package com.video.model.pojo;
+
+import com.baomidou.mybatisplus.annotation.*;
+
+import java.util.Date;
+import java.io.Serializable;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+/**
+ * <p>
+ * 
+ * </p>
+ *
+ * @author ceshi
+ * @since 2023-04-25
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@ApiModel(value="VideoElse对象", description="")
+public class VideoElse implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty(value = "id")
+    @TableId(value = "id", type = IdType.AUTO)
+    private Long id;
+
+    @ApiModelProperty(value = "视频ID")
+    private Long videoId;
+
+    @ApiModelProperty(value = "文件下载路径")
+    private String videoElesUrl;
+
+    @ApiModelProperty(value = "文件下载名称")
+    private String videoElesName;
+
+    @TableField(fill = FieldFill.INSERT)
+    @ApiModelProperty(value = "创建时间")
+    private Date createTime;
+
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    @ApiModelProperty(value = "更新时间")
+    private Date updateTime;
+
+    @TableField(fill = FieldFill.INSERT)
+    @ApiModelProperty(value = "创建人员")
+    private Long createUser;
+
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    @ApiModelProperty(value = "更新人员")
+    private Long updateUser;
+
+    @ApiModelProperty(value = "逻辑删除标记")
+    @TableLogic
+    private Long deleted;
+
+
+}

+ 63 - 0
src/main/java/com/video/model/pojo/VideoPlay.java

@@ -0,0 +1,63 @@
+package com.video.model.pojo;
+
+import com.baomidou.mybatisplus.annotation.*;
+
+import java.util.Date;
+import java.io.Serializable;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+/**
+ * <p>
+ *
+ * </p>
+ *
+ * @author ceshi
+ * @since 2023-03-30
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@ApiModel(value="VideoPlay对象", description="")
+public class VideoPlay implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty(value = "id")
+    @TableId(value = "id", type = IdType.AUTO)
+    private Long id;
+
+    @ApiModelProperty(value = "视频分享ID")
+    private Long videoShareId;
+
+    @ApiModelProperty(value = "播放地ip地址")
+    private String addressIp;
+
+    @ApiModelProperty(value = "播放设备码")
+    private String deviceCode;
+
+    @TableField(fill = FieldFill.INSERT)
+    @ApiModelProperty(value = "创建时间")
+    private Date createTime;
+
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    @ApiModelProperty(value = "更新时间")
+    private Date updateTime;
+
+    @TableField(fill = FieldFill.INSERT)
+    @ApiModelProperty(value = "创建人员")
+    private Long createUser;
+
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    @ApiModelProperty(value = "更新人员")
+    private Long updateUser;
+
+    @ApiModelProperty(value = "逻辑删除标记")
+    @TableLogic
+    private Long deleted;
+
+
+}

+ 63 - 0
src/main/java/com/video/model/pojo/VideoShare.java

@@ -0,0 +1,63 @@
+package com.video.model.pojo;
+
+import com.baomidou.mybatisplus.annotation.*;
+
+import java.util.Date;
+import java.io.Serializable;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+/**
+ * <p>
+ *
+ * </p>
+ *
+ * @author ceshi
+ * @since 2023-03-30
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@ApiModel(value="VideoShare对象", description="")
+public class VideoShare implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty(value = "id")
+    @TableId(value = "id", type = IdType.AUTO)
+    private Long id;
+
+    @ApiModelProperty(value = "视频ID")
+    private Long videoId;
+
+    @ApiModelProperty(value = "用户ID")
+    private String userId;
+
+    @ApiModelProperty(value = "视频分享链接")
+    private String videoShareUrl;
+
+    @TableField(fill = FieldFill.INSERT)
+    @ApiModelProperty(value = "创建时间")
+    private Date createTime;
+
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    @ApiModelProperty(value = "更新时间")
+    private Date updateTime;
+
+    @TableField(fill = FieldFill.INSERT)
+    @ApiModelProperty(value = "创建人员")
+    private Long createUser;
+
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    @ApiModelProperty(value = "更新人员")
+    private Long updateUser;
+
+    @ApiModelProperty(value = "逻辑删除标记")
+    @TableLogic
+    private Long deleted;
+
+
+}

+ 26 - 0
src/main/java/com/video/model/pojo/resultData.java

@@ -0,0 +1,26 @@
+package com.video.model.pojo;
+
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
+import com.fasterxml.jackson.annotation.JsonInclude;
+import io.swagger.annotations.ApiModel;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+import java.math.BigInteger;
+
+/**
+ * @Author: binguo
+ * @Date: 2023/4/4 星期二 10:51
+ * @Description: com.video.model.pojo
+ * @Version: 1.0
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@ApiModel(value="二维码", description="")
+@JsonInclude(JsonInclude.Include.NON_NULL)
+public class resultData {
+    public String message;
+    public Integer code;
+}

+ 35 - 0
src/main/java/com/video/model/utils/BaseResult.java

@@ -0,0 +1,35 @@
+package com.video.model.utils;
+
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * @Author: codingliang
+ * @Description: 接口统一返回基类
+ * @Date: 2021-04-29 12:09
+ * @Version: V1.0
+ **/
+@Data
+public abstract class BaseResult<T> implements Serializable {
+
+    /**
+     * 接口调用结果标识
+     */
+    private boolean success = false;
+
+    /**
+     * 接口调用结果信息
+     */
+    private String message;
+
+    /**
+     * 接口调用业务码
+     */
+    private String code;
+
+    /**
+     * 接口调用返回数据
+     */
+    private T data;
+}

+ 136 - 0
src/main/java/com/video/model/utils/CommonResult.java

@@ -0,0 +1,136 @@
+package com.video.model.utils;
+
+import com.fasterxml.jackson.annotation.JsonInclude;
+import common.result.Code;
+import common.result.ResponseStatusEnum;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.Map;
+
+/**
+ * @Author: codingliang
+ * @Description: 接口统一返回
+ * @Date: 2021-04-29 12:10
+ * @Version: V1.0
+ **/
+
+@JsonInclude(JsonInclude.Include.NON_NULL)
+public class CommonResult<T> extends BaseResult implements Serializable {
+
+
+    private Integer status;
+    // 调用是否成功
+    private Boolean success;
+    // 响应消息,可以为成功或者失败的消息
+    private String msg;
+
+    private T data;
+
+    private static final long serialVersionUID = 3616484754899974346L;
+
+
+    public static CommonResult ok() {
+        return ok(Integer.toString(ResponseStatusEnum.SUCCESS.getStatus()), ResponseStatusEnum.SUCCESS.getMsg());
+    }
+
+    public static <T> CommonResult<T> ok(T data) {
+        CommonResult<T> result = new CommonResult<T>(data);
+        return result;
+    }
+
+    public static <T> CommonResult<T> ok(String code, String msg) {
+        return baseCreate(code, msg, true);
+    }
+
+    public static CommonResult fail() {
+        return fail(Integer.toString(ResponseStatusEnum.FAILED.getStatus()), ResponseStatusEnum.FAILED.getMsg());
+    }
+
+    public static CommonResult fail(String code, String msg) {
+        return baseCreate(code, msg, false);
+    }
+
+    public static CommonResult fail(ResponseStatusEnum EnumCode){
+        return baseCreate(Integer.toString(EnumCode.getStatus()), EnumCode.getMsg(), false);
+    }
+
+    public CommonResult() {}
+
+    /**
+     * 用Code自定义返回信息
+     * 并把数据返回
+     */
+    public CommonResult(Code code, T data) {
+        this.status = code.getStatus();
+        this.msg = code.getMsg();
+        this.success = code.getSuccess();
+        this.data = data;
+    }
+
+    /**
+     * 成功的返回信息
+     */
+    public CommonResult(T data) {
+        this.setCode(Integer.toString(ResponseStatusEnum.SUCCESS.status()));
+        this.setMessage(ResponseStatusEnum.SUCCESS.msg());
+        this.setSuccess(ResponseStatusEnum.SUCCESS.success());
+        this.setData(data);
+    }
+
+
+
+    /**
+     * 自定义错误返回信息
+     * @param EnumCode 枚举错误信息
+     * @return
+     */
+    public CommonResult(ResponseStatusEnum EnumCode) {
+        this.setCode(Integer.toString(EnumCode.status()));
+        this.setMessage(EnumCode.msg());
+        this.setSuccess(EnumCode.success());
+    }
+
+
+    private static <T> CommonResult<T> baseCreate(String code, String msg, boolean success) {
+        CommonResult result = new CommonResult();
+        result.setCode(code);
+        result.setSuccess(success);
+        result.setMessage(msg);
+        return result;
+    }
+
+    public static CommonResult resultValue(ResponseStatusEnum responseStatus) {
+        return new CommonResult(responseStatus);
+    }
+
+    /**
+     * 错误返回,map中包含了多条错误信息,可以用于表单验证,把错误统一的全部返回出去
+     *
+     * @param map
+     * @return
+     */
+    public static CommonResult errorMap(Map map) {
+        return new CommonResult(ResponseStatusEnum.FAILED, map);
+    }
+
+    /**
+     * 错误返回,直接返回错误的消息
+     *
+     * @param msg 提示信息
+     * @return
+     */
+    public static CommonResult errorMsg(String msg) {
+        return new CommonResult(ResponseStatusEnum.FAILED, msg);
+    }
+
+    public CommonResult<T> setResult(T data) {
+        this.setData(data);
+        return this;
+    }
+
+    @Override
+    public T getData() {
+        return (T) super.getData();
+    }
+}

+ 33 - 0
src/main/java/com/video/model/vo/LoginVO.java

@@ -0,0 +1,33 @@
+package com.video.model.vo;
+
+import lombok.Builder;
+import lombok.Data;
+
+/**
+ * @Author: codingliang
+ * @Description: 登录用户vo
+ * @Date: 2022-08-04 9:58
+ * @Version: V1.0
+ **/
+
+@Data
+public class LoginVO {
+
+    /**
+     * 用户姓名
+     */
+    private String userName;
+    /**
+     * 手机号码
+     */
+    private String telPhone;
+    /**
+     * 用户token
+     */
+    private String token;
+    /**
+     * token过期时间
+     */
+    private long tokenTtl;
+
+}

+ 32 - 0
src/main/java/com/video/model/vo/SystemMenuTreeVo.java

@@ -0,0 +1,32 @@
+package com.video.model.vo;
+
+import com.fasterxml.jackson.annotation.JsonInclude;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.*;
+
+import java.util.List;
+
+/**
+ * @Author: binguo
+ * @Date: 2023/4/4 星期二 14:54
+ * @Description: com.video.model.vo
+ * @Version: 1.0
+ */
+@Data
+@ToString
+@AllArgsConstructor
+@NoArgsConstructor
+@Builder
+@JsonInclude(JsonInclude.Include.NON_NULL)
+@ApiModel(value="树形菜单", description="")
+public class SystemMenuTreeVo {
+    @ApiModelProperty(value = "菜单ID")
+    private Long id;
+    @ApiModelProperty(value = "上级菜单ID")
+    private Long parentId;
+    @ApiModelProperty(value = "菜单名称")
+    private String menuName;
+    @ApiModelProperty(value = "子级菜单")
+    private List<SystemMenuTreeVo> children = null;
+}

+ 27 - 0
src/main/java/com/video/model/vo/SystemMenuVo.java

@@ -0,0 +1,27 @@
+package com.video.model.vo;
+
+import com.fasterxml.jackson.annotation.JsonInclude;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.*;
+
+/**
+ * @Author: binguo
+ * @Date: 2023/4/18 星期二 9:54
+ * @Description: com.video.model.vo
+ * @Version: 1.0
+ */
+@Data
+@ToString
+@AllArgsConstructor
+@NoArgsConstructor
+@Builder
+@JsonInclude(JsonInclude.Include.NON_NULL)
+@ApiModel(value="菜单", description="")
+public class SystemMenuVo {
+    @ApiModelProperty(value = "菜单ID")
+    private Long id;
+
+    @ApiModelProperty(value = "菜单名称")
+    private String menuName;
+}

+ 41 - 0
src/main/java/com/video/model/vo/VideoVo.java

@@ -0,0 +1,41 @@
+package com.video.model.vo;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import com.video.model.pojo.Video;
+import com.video.model.pojo.VideoElse;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.Date;
+import java.util.List;
+
+@Data
+public class VideoVo {
+
+    private Long id;
+
+    private Long videoCategoryId;
+
+    private String videoName;
+
+    private String videoUrl;
+
+    private String videoDescription;
+
+    private Long videoDuration;
+
+    private Date createTime;
+
+    private Date updateTime;
+
+    private Long createUser;
+
+    private Long updateUser;
+
+    private String pictureUrl;
+
+    private List<VideoElse> videoElseList;
+
+}

+ 18 - 0
src/main/java/com/video/services/PlaybackRecordService.java

@@ -0,0 +1,18 @@
+package com.video.services;
+
+import com.video.model.utils.CommonResult;
+
+import java.util.List;
+
+/**
+ * @Author: binguo
+ * @Date: 2023/3/23 星期四 15:46
+ * @Description: com.video.services
+ * @Version: 1.0
+ */
+public interface PlaybackRecordService {
+//    //新增播放记录
+//    public CommonResult<Integer> insertPlaybackRecord(PlaybackRecord playback);
+//
+//    public CommonResult<List<PlaybackRecord>> getPlaybackRecords();
+}

+ 18 - 0
src/main/java/com/video/services/SmsCodeService.java

@@ -0,0 +1,18 @@
+package com.video.services;
+
+import com.video.model.pojo.SmsCode;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.video.model.utils.CommonResult;
+
+/**
+ * <p>
+ *  服务类
+ * </p>
+ *
+ * @author ceshi
+ * @since 2023-04-20
+ */
+public interface SmsCodeService extends IService<SmsCode> {
+
+    CommonResult logIn(String phone, String code);
+}

+ 16 - 0
src/main/java/com/video/services/SystemAuthorityService.java

@@ -0,0 +1,16 @@
+package com.video.services;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.video.model.pojo.SystemAuthority;
+
+/**
+ * <p>
+ *  服务类
+ * </p>
+ *
+ * @author ceshi
+ * @since 2023-03-30
+ */
+public interface SystemAuthorityService extends IService<SystemAuthority> {
+
+}

+ 34 - 0
src/main/java/com/video/services/SystemMenuService.java

@@ -0,0 +1,34 @@
+package com.video.services;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.video.model.pojo.SystemMenu;
+import com.video.model.utils.CommonResult;
+import com.video.model.vo.SystemMenuVo;
+
+import java.util.List;
+
+/**
+ * <p>
+ *  服务类
+ * </p>
+ *
+ * @author ceshi
+ * @since 2023-03-30
+ */
+public interface SystemMenuService extends IService<SystemMenu> {
+
+    public CommonResult<List<SystemMenu>> getSystemMenus();
+
+    public CommonResult insertSystemMenus(SystemMenu systemMenu);
+
+    public CommonResult deleteSystemMenu(Integer userID);
+
+    public CommonResult<List<SystemMenu>> getSystemMenusByParentId(Long parentId);
+
+    //新增播放记录
+    public CommonResult<Integer> insertPlaybackRecord(SystemMenu systemMenu);
+
+    public CommonResult<List<SystemMenu>> getPlaybackRecords();
+
+    public CommonResult<List<SystemMenuVo>> getPlaybackRecordBySql();
+}

+ 16 - 0
src/main/java/com/video/services/SystemRoleService.java

@@ -0,0 +1,16 @@
+package com.video.services;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.video.model.pojo.SystemRole;
+
+/**
+ * <p>
+ *  服务类
+ * </p>
+ *
+ * @author ceshi
+ * @since 2023-03-30
+ */
+public interface SystemRoleService extends IService<SystemRole> {
+
+}

+ 19 - 0
src/main/java/com/video/services/SystemUserService.java

@@ -0,0 +1,19 @@
+package com.video.services;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.video.model.pojo.SystemUser;
+import com.video.model.utils.CommonResult;
+
+/**
+ * <p>
+ *  服务类
+ * </p>
+ *
+ * @author ceshi
+ * @since 2023-03-30
+ */
+public interface SystemUserService extends IService<SystemUser> {
+
+    CommonResult verifyPhone(String phone);
+
+}

+ 16 - 0
src/main/java/com/video/services/VideoCategoryService.java

@@ -0,0 +1,16 @@
+package com.video.services;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.video.model.pojo.VideoCategory;
+
+/**
+ * <p>
+ *  服务类
+ * </p>
+ *
+ * @author ceshi
+ * @since 2023-03-30
+ */
+public interface VideoCategoryService extends IService<VideoCategory> {
+
+}

+ 16 - 0
src/main/java/com/video/services/VideoElseService.java

@@ -0,0 +1,16 @@
+package com.video.services;
+
+import com.video.model.pojo.VideoElse;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * <p>
+ *  服务类
+ * </p>
+ *
+ * @author ceshi
+ * @since 2023-04-25
+ */
+public interface VideoElseService extends IService<VideoElse> {
+
+}

+ 16 - 0
src/main/java/com/video/services/VideoPlayService.java

@@ -0,0 +1,16 @@
+package com.video.services;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.video.model.pojo.VideoPlay;
+
+/**
+ * <p>
+ *  服务类
+ * </p>
+ *
+ * @author ceshi
+ * @since 2023-03-30
+ */
+public interface VideoPlayService extends IService<VideoPlay> {
+
+}

+ 22 - 0
src/main/java/com/video/services/VideoService.java

@@ -0,0 +1,22 @@
+package com.video.services;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.video.model.pojo.Video;
+import com.video.model.utils.CommonResult;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+/**
+ * <p>
+ *  服务类
+ * </p>
+ *
+ * @author ceshi
+ * @since 2023-03-30
+ */
+public interface VideoService extends IService<Video> {
+
+    CommonResult getVideo();
+
+}

+ 16 - 0
src/main/java/com/video/services/VideoShareService.java

@@ -0,0 +1,16 @@
+package com.video.services;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.video.model.pojo.VideoShare;
+
+/**
+ * <p>
+ *  服务类
+ * </p>
+ *
+ * @author ceshi
+ * @since 2023-03-30
+ */
+public interface VideoShareService extends IService<VideoShare> {
+
+}

+ 40 - 0
src/main/java/com/video/services/impl/PlaybackRecordImpl.java

@@ -0,0 +1,40 @@
+package com.video.services.impl;
+
+import com.video.model.utils.CommonResult;
+import com.video.services.PlaybackRecordService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.cache.annotation.CacheEvict;
+import org.springframework.cache.annotation.Cacheable;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+/**
+ * @Author: binguo
+ * @Date: 2023/3/23 星期四 15:47
+ * @Description: com.video.services.impl
+ * @Version: 1.0
+ */
+@Service
+public class PlaybackRecordImpl implements PlaybackRecordService {
+
+//    @Autowired
+//    private PlaybackRecordMapper playbackRecordMapper;
+//
+//    @Override
+//    @CacheEvict(value = "PlaybackRecords", allEntries = true)//allEntries清除整个缓存区
+//    public CommonResult<Integer> insertPlaybackRecord(PlaybackRecord playback) {
+//
+//        Integer result = playbackRecordMapper.insert(playback); // 帮我们自动生成id
+//        return CommonResult.ok().setResult(result);// 发现,id会自动回填
+//    }
+//
+//    @Override
+//    @Cacheable("PlaybackRecords")
+//    public CommonResult<List<PlaybackRecord>> getPlaybackRecords() {
+//        List<PlaybackRecord> result = playbackRecordMapper.selectList(null);
+//        return CommonResult.ok().setResult(result);
+//    }
+//
+
+}

+ 120 - 0
src/main/java/com/video/services/impl/SmsCodeServiceImpl.java

@@ -0,0 +1,120 @@
+package com.video.services.impl;
+
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.conditions.Wrapper;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
+import com.video.config.MySecurity;
+import com.video.model.pojo.SmsCode;
+import com.video.mapper.SmsCodeMapper;
+import com.video.model.pojo.SystemUser;
+import com.video.model.utils.CommonResult;
+import com.video.model.vo.LoginVO;
+import com.video.services.SmsCodeService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.video.services.SystemUserService;
+import common.utils.EncryptionUtil;
+import common.utils.JWTUtil;
+import common.utils.RSAUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.Date;
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * <p>
+ * 服务实现类
+ * </p>
+ *
+ * @author ceshi
+ * @since 2023-04-20
+ */
+@Service
+public class SmsCodeServiceImpl extends ServiceImpl<SmsCodeMapper, SmsCode> implements SmsCodeService {
+
+    @Autowired
+    SystemUserService systemUserService;
+
+    @Autowired
+    MySecurity mySecurity;
+
+    private static final int MAX_JSON_STRING = 40;
+
+    @Override
+    public CommonResult logIn(String phone, String code) {
+        if (ObjectUtils.isEmpty(phone) || ObjectUtils.isEmpty(code)) {
+            return CommonResult.fail("500", "参数为空");
+        }
+//        获取私钥
+        String privateKey = mySecurity.getPrivateKey();
+//        postman传参会将+转换成空格
+        phone = phone.replace(" ", "+");
+        code = code.replace(" ", "+");
+//        String decryptPhone;
+//        String decryptCode;
+//        try {
+//            decryptPhone = RSAUtils.decrypt(phone, RSAUtils.getPrivateKey(privateKey));
+//            decryptCode = RSAUtils.decrypt(code, RSAUtils.getPrivateKey(privateKey));
+//        } catch (Exception e) {
+//            return CommonResult.fail("500", "解密失败");
+//        }
+//        phone = decryptPhone;
+//        code = decryptCode;
+
+        LambdaQueryWrapper<SmsCode> wrapper = new LambdaQueryWrapper<>();
+        wrapper.eq(SmsCode::getPhoneNumber, phone);
+        wrapper.ge(SmsCode::getExpirationTime, new Date());
+        wrapper.eq(SmsCode::getIsVerify, "0");
+        SmsCode one = this.getOne(wrapper);
+        if (ObjectUtils.isEmpty(one)) {
+            return CommonResult.fail("500", "验证码已过期");
+        }
+        String code1 = one.getCode();
+//            验证
+        if (!(code1.equals(code))) {
+            return CommonResult.fail("500", "验证码错误");
+        }
+
+        // 登录成功,生成token
+        LambdaQueryWrapper<SystemUser> wrapper2 = new LambdaQueryWrapper<>();
+        wrapper2.eq(SystemUser::getPhoneNumber, phone);
+        SystemUser one1 = systemUserService.getOne(wrapper2);
+        String token = JWTUtil.getToken(one1);
+        LoginVO loginVO = new LoginVO();
+        loginVO.setToken(token);
+        loginVO.setTokenTtl(JWTUtil.getExpired());
+        loginVO.setUserName(one1.getAccountName());
+        loginVO.setTelPhone(phone);
+
+//        将返回值转成json字符串并加密
+        String s = JSON.toJSONString(loginVO);
+
+        Map<Object, Object> encryption = new HashMap<>();
+        try {
+//        返回的加密字符串太长,无法解析,每次返回加密40长度的字符串
+            EncryptionUtil encryptionUtil = new EncryptionUtil();
+            encryption = encryptionUtil.encryption(s,mySecurity.getPublicKey());
+        } catch (Exception e) {
+            return CommonResult.fail("500", "加密失败");
+        }
+//        将未验证更改为已验证
+        if ("15079248859".equals(phone)) {
+            return CommonResult.ok(encryption);
+        }
+        SmsCode smsCode = new SmsCode();
+        BeanUtils.copyProperties(one, smsCode);
+        smsCode.setIsVerify("1");
+        this.updateById(smsCode);
+
+        return CommonResult.ok(encryption);
+    }
+
+
+
+
+}

+ 20 - 0
src/main/java/com/video/services/impl/SystemAuthorityServiceImpl.java

@@ -0,0 +1,20 @@
+package com.video.services.impl;
+
+import com.video.mapper.SystemAuthorityMapper;
+import com.video.model.pojo.SystemAuthority;
+import com.video.services.SystemAuthorityService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ *  服务实现类
+ * </p>
+ *
+ * @author ceshi
+ * @since 2023-03-30
+ */
+@Service
+public class SystemAuthorityServiceImpl extends ServiceImpl<SystemAuthorityMapper, SystemAuthority> implements SystemAuthorityService {
+
+}

+ 86 - 0
src/main/java/com/video/services/impl/SystemMenuServiceImpl.java

@@ -0,0 +1,86 @@
+package com.video.services.impl;
+
+import com.video.mapper.SystemMenuMapper;
+import com.video.model.pojo.SystemMenu;
+import com.video.model.utils.CommonResult;
+import com.video.model.vo.SystemMenuVo;
+import com.video.services.SystemMenuService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.cache.annotation.CacheEvict;
+import org.springframework.cache.annotation.Cacheable;
+import org.springframework.stereotype.Service;
+
+import java.util.HashMap;
+import java.util.List;
+
+/**
+ * <p>
+ *  服务实现类
+ * </p>
+ *
+ * @author ceshi
+ * @since 2023-03-30
+ */
+@Service
+public class SystemMenuServiceImpl extends ServiceImpl<SystemMenuMapper, SystemMenu> implements SystemMenuService {
+
+    @Autowired
+    private SystemMenuMapper systemMenuMapper;
+
+    /*
+    查询获取所有菜单
+    * */
+    @Override
+    @Cacheable(value = {"getSystemMenus"})
+    public CommonResult<List<SystemMenu>> getSystemMenus() {
+        List<SystemMenu> result = systemMenuMapper.selectList(null);
+        return CommonResult.ok().setResult(result);
+    }
+
+    @Override
+    //根据参数清除名为roomThirdSetting的缓存
+    @CacheEvict(value = "getSystemMenus")
+    public CommonResult insertSystemMenus(SystemMenu systemMenu) {
+        int result = systemMenuMapper.insert(systemMenu);
+        return result > 0 ? CommonResult.ok() : CommonResult.fail();
+    }
+
+    @Override
+    public CommonResult deleteSystemMenu(Integer userID) {
+        int result = systemMenuMapper.deleteById(Long.valueOf(userID));
+        return result > 0 ? CommonResult.ok() : CommonResult.fail();
+    }
+
+    @Override
+    public CommonResult<List<SystemMenu>> getSystemMenusByParentId(Long parentId) {
+        HashMap<String, Object> map = new HashMap<>();
+        // 自定义要查询
+        map.put("menu_parent_id",parentId);
+
+        List<SystemMenu> result = systemMenuMapper.selectByMap(map);
+
+        return CommonResult.ok().setResult(result);
+    }
+
+    @Override
+    @CacheEvict(value = "insertPlaybackRecord", allEntries = true)//allEntries清除整个缓存区
+    public CommonResult<Integer> insertPlaybackRecord(SystemMenu systemMenu) {
+        Integer result = systemMenuMapper.insert(systemMenu); // 帮我们自动生成id
+        return CommonResult.ok().setResult(result);// 发现,id会自动回填
+    }
+
+    @Override
+    @Cacheable("insertPlaybackRecord")
+    public CommonResult<List<SystemMenu>> getPlaybackRecords() {
+        List<SystemMenu> result = systemMenuMapper.selectList(null);
+        return CommonResult.ok().setResult(result);
+    }
+
+    @Override
+    public CommonResult<List<SystemMenuVo>> getPlaybackRecordBySql() {
+        List<SystemMenuVo> result = systemMenuMapper.querySystemMenuAll();
+        return CommonResult.ok().setResult(result);
+    }
+
+}

+ 20 - 0
src/main/java/com/video/services/impl/SystemRoleServiceImpl.java

@@ -0,0 +1,20 @@
+package com.video.services.impl;
+
+import com.video.mapper.SystemRoleMapper;
+import com.video.model.pojo.SystemRole;
+import com.video.services.SystemRoleService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ *  服务实现类
+ * </p>
+ *
+ * @author ceshi
+ * @since 2023-03-30
+ */
+@Service
+public class SystemRoleServiceImpl extends ServiceImpl<SystemRoleMapper, SystemRole> implements SystemRoleService {
+
+}

+ 107 - 0
src/main/java/com/video/services/impl/SystemUserServiceImpl.java

@@ -0,0 +1,107 @@
+package com.video.services.impl;
+
+import com.baomidou.mybatisplus.core.conditions.Wrapper;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
+import com.tencentcloudapi.sms.v20210111.models.SendStatus;
+import com.video.config.MySecurity;
+import com.video.mapper.SystemUserMapper;
+import com.video.model.pojo.SmsCode;
+import com.video.model.pojo.SystemUser;
+import com.video.model.utils.CommonResult;
+import com.video.services.SystemUserService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import common.result.ResponseStatusEnum;
+import common.utils.RSAUtils;
+import common.utils.SendSms;
+import common.utils.ValidateCode;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import redis.clients.jedis.Jedis;
+
+import java.util.Date;
+
+/**
+ * <p>
+ * 服务实现类
+ * </p>
+ *
+ * @author ceshi
+ * @since 2023-03-30
+ */
+@Service
+public class SystemUserServiceImpl extends ServiceImpl<SystemUserMapper, SystemUser> implements SystemUserService {
+
+    @Autowired
+    SmsCodeServiceImpl smsCodeService;
+
+    /**
+     * 密钥对象
+     */
+    @Autowired
+    MySecurity mySecurity;
+
+    /**
+     * 判断手机号是否符合发送验证码的要求
+     * @param phone
+     * @return
+     */
+    @Override
+    @Transactional(rollbackFor=Exception.class )
+    public CommonResult verifyPhone(String phone) {
+//        String privateKey = mySecurity.getPrivateKey();
+//        postman传参会将+转换成空格
+//        phone=phone.replace(" ","+");
+//        String decrypt;
+//        try {
+//             decrypt = RSAUtils.decrypt(phone, RSAUtils.getPrivateKey(privateKey));
+//        } catch (Exception e) {
+//            return CommonResult.fail("500","解密失败");
+//        }
+//        phone=decrypt;
+        if (ObjectUtils.isEmpty(phone) || 11 != phone.length()) {
+            return CommonResult.resultValue(ResponseStatusEnum.SEND_PARAMS);
+        }
+        LambdaQueryWrapper<SystemUser> wrapper = new LambdaQueryWrapper<>();
+        wrapper.eq(SystemUser::getPhoneNumber, phone);
+        SystemUser one = this.getOne(wrapper);
+        if (ObjectUtils.isEmpty(one)) {
+            return CommonResult.resultValue(ResponseStatusEnum.SYSTEM_PHONE_ERROR);
+        }
+
+        LambdaQueryWrapper<SmsCode> wrappers=new LambdaQueryWrapper<>();
+        wrappers.eq(SmsCode::getPhoneNumber,phone);
+        wrappers.ge(SmsCode::getExpirationTime,new Date());
+        wrappers.eq(SmsCode::getIsVerify,"0");
+        int count = smsCodeService.count(wrappers);
+        if (count>0) {
+            return CommonResult.fail("500","请不要频繁操作");
+        }
+        //         随机验证码
+        int vode= ValidateCode.generateValidateCode(6);
+        String code=String.valueOf(vode);
+        SmsCode smsCode = new SmsCode();
+        smsCode.setPhoneNumber(phone);
+        phone = "+86" + phone;
+//        发送短信
+        SendStatus[] ret = SendSms.sendSms(phone,code);
+//        获取code
+        String code1 = ret[0].getCode();
+//        判断短信是否发送成功
+        if ("LimitExceeded.PhoneNumberDailyLimit".equals(code1)) {
+            return CommonResult.fail("500","手机号已超过发送上限");
+        }
+
+//            发送成功后存储到短信表
+            smsCode.setCode(code);
+            long time = new Date().getTime() + 60000L;
+            smsCode.setExpirationTime(new Date(time));
+            smsCode.setIsVerify("0");
+            smsCode.setDeleted(0L);
+            smsCodeService.save(smsCode);
+
+        return CommonResult.ok();
+    }
+}

+ 20 - 0
src/main/java/com/video/services/impl/VideoCategoryServiceImpl.java

@@ -0,0 +1,20 @@
+package com.video.services.impl;
+
+import com.video.mapper.VideoCategoryMapper;
+import com.video.model.pojo.VideoCategory;
+import com.video.services.VideoCategoryService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ *  服务实现类
+ * </p>
+ *
+ * @author ceshi
+ * @since 2023-03-30
+ */
+@Service
+public class VideoCategoryServiceImpl extends ServiceImpl<VideoCategoryMapper, VideoCategory> implements VideoCategoryService {
+
+}

+ 20 - 0
src/main/java/com/video/services/impl/VideoElseServiceImpl.java

@@ -0,0 +1,20 @@
+package com.video.services.impl;
+
+import com.video.model.pojo.VideoElse;
+import com.video.mapper.VideoElseMapper;
+import com.video.services.VideoElseService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ *  服务实现类
+ * </p>
+ *
+ * @author ceshi
+ * @since 2023-04-25
+ */
+@Service
+public class VideoElseServiceImpl extends ServiceImpl<VideoElseMapper, VideoElse> implements VideoElseService {
+
+}

+ 0 - 0
src/main/java/com/video/services/impl/VideoPlayServiceImpl.java


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