yangdamao 1 неделя назад
Сommit
2021fccd2d
100 измененных файлов с 10480 добавлено и 0 удалено
  1. 45 0
      .drone-dev.yml
  2. 45 0
      .drone-pre.yml
  3. 46 0
      .drone-trial.yml
  4. 46 0
      .drone.yml
  5. 44 0
      .gitignore
  6. 12 0
      Dockerfile
  7. 10 0
      Dockerfile-admi
  8. 10 0
      Dockerfile-saas
  9. 20 0
      LICENSE
  10. 3 0
      README.md
  11. 12 0
      bin/clean.bat
  12. 12 0
      bin/package.bat
  13. 14 0
      bin/run.bat
  14. BIN
      fonts/msyh.ttc
  15. BIN
      fonts/msyhbd.ttc
  16. BIN
      fonts/msyhl.ttc
  17. 303 0
      pom.xml
  18. 77 0
      run-dev.sh
  19. 113 0
      run-pre.sh
  20. 113 0
      run-prod.sh
  21. 72 0
      run-trial.sh
  22. 70 0
      zhongzheng-admin-saas/pom.xml
  23. 20 0
      zhongzheng-admin-saas/src/main/java/com/zhongzheng/AdminSaasApplication.java
  24. 18 0
      zhongzheng-admin-saas/src/main/java/com/zhongzheng/AdminSaasServletInitializer.java
  25. 73 0
      zhongzheng-admin-saas/src/main/java/com/zhongzheng/controller/alioss/OssController.java
  26. 136 0
      zhongzheng-admin-saas/src/main/java/com/zhongzheng/controller/common/CaptchaController.java
  27. 305 0
      zhongzheng-admin-saas/src/main/java/com/zhongzheng/controller/common/CommonController.java
  28. 71 0
      zhongzheng-admin-saas/src/main/java/com/zhongzheng/controller/course/TopCourseBusinessController.java
  29. 86 0
      zhongzheng-admin-saas/src/main/java/com/zhongzheng/controller/course/TopCourseEducationTypeController.java
  30. 70 0
      zhongzheng-admin-saas/src/main/java/com/zhongzheng/controller/course/TopCourseProjectTypeController.java
  31. 42 0
      zhongzheng-admin-saas/src/main/java/com/zhongzheng/controller/course/TopCourseSubjectController.java
  32. 42 0
      zhongzheng-admin-saas/src/main/java/com/zhongzheng/controller/course/TopMajorController.java
  33. 43 0
      zhongzheng-admin-saas/src/main/java/com/zhongzheng/controller/course/TopSchoolController.java
  34. 165 0
      zhongzheng-admin-saas/src/main/java/com/zhongzheng/controller/distribution/DistributionActivityTemplateController.java
  35. 92 0
      zhongzheng-admin-saas/src/main/java/com/zhongzheng/controller/distribution/DistributionActivityTemplateGoodsController.java
  36. 90 0
      zhongzheng-admin-saas/src/main/java/com/zhongzheng/controller/distribution/DistributionActivityTemplatePosterController.java
  37. 92 0
      zhongzheng-admin-saas/src/main/java/com/zhongzheng/controller/distribution/DistributionActivityTemplateRelationController.java
  38. 62 0
      zhongzheng-admin-saas/src/main/java/com/zhongzheng/controller/financial/ReceiveOrderController.java
  39. 119 0
      zhongzheng-admin-saas/src/main/java/com/zhongzheng/controller/financial/TopCostInstTpController.java
  40. 114 0
      zhongzheng-admin-saas/src/main/java/com/zhongzheng/controller/financial/TopCostTpController.java
  41. 169 0
      zhongzheng-admin-saas/src/main/java/com/zhongzheng/controller/financial/TopDivideLogController.java
  42. 86 0
      zhongzheng-admin-saas/src/main/java/com/zhongzheng/controller/financial/TopOrderRecNoteController.java
  43. 62 0
      zhongzheng-admin-saas/src/main/java/com/zhongzheng/controller/goods/TopGoodsController.java
  44. 112 0
      zhongzheng-admin-saas/src/main/java/com/zhongzheng/controller/inform/TopInformSysUserController.java
  45. 112 0
      zhongzheng-admin-saas/src/main/java/com/zhongzheng/controller/mall/TopStoreController.java
  46. 125 0
      zhongzheng-admin-saas/src/main/java/com/zhongzheng/controller/order/TopOldOrderCheckLogController.java
  47. 362 0
      zhongzheng-admin-saas/src/main/java/com/zhongzheng/controller/order/TopOldOrderController.java
  48. 105 0
      zhongzheng-admin-saas/src/main/java/com/zhongzheng/controller/order/TopOldOrderGoodsController.java
  49. 159 0
      zhongzheng-admin-saas/src/main/java/com/zhongzheng/controller/order/TopOldOrderRepController.java
  50. 152 0
      zhongzheng-admin-saas/src/main/java/com/zhongzheng/controller/order/TopOrderAcceptanceController.java
  51. 64 0
      zhongzheng-admin-saas/src/main/java/com/zhongzheng/controller/order/TopOrderBankPayController.java
  52. 167 0
      zhongzheng-admin-saas/src/main/java/com/zhongzheng/controller/order/TopOrderStatisticsController.java
  53. 115 0
      zhongzheng-admin-saas/src/main/java/com/zhongzheng/controller/order/TopSharedCustomerController.java
  54. 94 0
      zhongzheng-admin-saas/src/main/java/com/zhongzheng/controller/schedule/ScheduleController.java
  55. 72 0
      zhongzheng-admin-saas/src/main/java/com/zhongzheng/controller/sdk/TopNuoMplatformLogController.java
  56. 246 0
      zhongzheng-admin-saas/src/main/java/com/zhongzheng/controller/settle/TopInstSettleController.java
  57. 140 0
      zhongzheng-admin-saas/src/main/java/com/zhongzheng/controller/system/SuperSysLoginController.java
  58. 144 0
      zhongzheng-admin-saas/src/main/java/com/zhongzheng/controller/system/SysProfileController.java
  59. 158 0
      zhongzheng-admin-saas/src/main/java/com/zhongzheng/controller/system/SysTenantController.java
  60. 99 0
      zhongzheng-admin-saas/src/main/java/com/zhongzheng/controller/top/TopCostCategoryController.java
  61. 101 0
      zhongzheng-admin-saas/src/main/java/com/zhongzheng/controller/top/TopInstCategoryController.java
  62. 121 0
      zhongzheng-admin-saas/src/main/java/com/zhongzheng/controller/top/TopInstitutionController.java
  63. 140 0
      zhongzheng-admin-saas/src/main/java/com/zhongzheng/controller/top/TopSysConfigController.java
  64. 174 0
      zhongzheng-admin-saas/src/main/java/com/zhongzheng/controller/top/TopSysDeptController.java
  65. 125 0
      zhongzheng-admin-saas/src/main/java/com/zhongzheng/controller/top/TopSysDictDataController.java
  66. 117 0
      zhongzheng-admin-saas/src/main/java/com/zhongzheng/controller/top/TopSysDictTypeController.java
  67. 169 0
      zhongzheng-admin-saas/src/main/java/com/zhongzheng/controller/top/TopSysMenuController.java
  68. 192 0
      zhongzheng-admin-saas/src/main/java/com/zhongzheng/controller/top/TopSysRoleController.java
  69. 285 0
      zhongzheng-admin-saas/src/main/java/com/zhongzheng/controller/top/TopSysUserController.java
  70. 137 0
      zhongzheng-admin-saas/src/main/java/com/zhongzheng/core/config/SwaggerConfig.java
  71. 1 0
      zhongzheng-admin-saas/src/main/resources/META-INF/spring-devtools.properties
  72. 217 0
      zhongzheng-admin-saas/src/main/resources/application-dev.yml
  73. 194 0
      zhongzheng-admin-saas/src/main/resources/application-pre.yml
  74. 217 0
      zhongzheng-admin-saas/src/main/resources/application-prod.yml
  75. 313 0
      zhongzheng-admin-saas/src/main/resources/application.yml
  76. 2 0
      zhongzheng-admin-saas/src/main/resources/banner.txt
  77. 36 0
      zhongzheng-admin-saas/src/main/resources/i18n/messages.properties
  78. 108 0
      zhongzheng-admin-saas/src/main/resources/logback.xml
  79. 0 0
      zhongzheng-admin-saas/src/main/resources/mybatis/mybatis-config.xml
  80. 128 0
      zhongzheng-admin/pom.xml
  81. 24 0
      zhongzheng-admin/src/main/java/com/zhongzheng/ZhongZhengApplication.java
  82. 18 0
      zhongzheng-admin/src/main/java/com/zhongzheng/ZhongZhengServletInitializer.java
  83. 104 0
      zhongzheng-admin/src/main/java/com/zhongzheng/controller/activity/ActivityRecommendController.java
  84. 84 0
      zhongzheng-admin/src/main/java/com/zhongzheng/controller/activity/ConsultationController.java
  85. 83 0
      zhongzheng-admin/src/main/java/com/zhongzheng/controller/alioss/OssController.java
  86. 162 0
      zhongzheng-admin/src/main/java/com/zhongzheng/controller/bank/ExamController.java
  87. 162 0
      zhongzheng-admin/src/main/java/com/zhongzheng/controller/bank/QuestionChapterController.java
  88. 325 0
      zhongzheng-admin/src/main/java/com/zhongzheng/controller/bank/QuestionController.java
  89. 155 0
      zhongzheng-admin/src/main/java/com/zhongzheng/controller/bank/QuestionModuleController.java
  90. 112 0
      zhongzheng-admin/src/main/java/com/zhongzheng/controller/base/ActivityAdvertisingController.java
  91. 112 0
      zhongzheng-admin/src/main/java/com/zhongzheng/controller/base/ActivityAdvertisingLocationController.java
  92. 125 0
      zhongzheng-admin/src/main/java/com/zhongzheng/controller/base/ApplyAreasController.java
  93. 91 0
      zhongzheng-admin/src/main/java/com/zhongzheng/controller/base/BaseFilterController.java
  94. 90 0
      zhongzheng-admin/src/main/java/com/zhongzheng/controller/base/CertificateCommonController.java
  95. 112 0
      zhongzheng-admin/src/main/java/com/zhongzheng/controller/base/CertificateController.java
  96. 113 0
      zhongzheng-admin/src/main/java/com/zhongzheng/controller/base/CertificateTpController.java
  97. 82 0
      zhongzheng-admin/src/main/java/com/zhongzheng/controller/base/ConsoleController.java
  98. 56 0
      zhongzheng-admin/src/main/java/com/zhongzheng/controller/base/GoodsFieldController.java
  99. 112 0
      zhongzheng-admin/src/main/java/com/zhongzheng/controller/base/ProfileFieldController.java
  100. 131 0
      zhongzheng-admin/src/main/java/com/zhongzheng/controller/base/ProfileTpController.java

+ 45 - 0
.drone-dev.yml

@@ -0,0 +1,45 @@
+kind: pipeline # 定义对象类型,还有secret和signature两种类型
+type: docker # 定义流水线类型,还有kubernetes、exec、ssh等类型
+name: zz_backend # 定义流水线名称
+trigger:
+  branch:
+    - dev
+steps: # 定义流水线执行步骤,这些步骤将顺序执行
+  - name: package # 流水线名称
+    image: maven:3-jdk-8 # 定义创建容器的Docker镜像
+    volumes: # 将容器内目录挂载到宿主机,仓库需要开启Trusted设置ga
+      - name: maven-cache
+        path: /root/.m2 # 将maven下载依赖的目录挂载出来,防止重复下载
+      - name: maven-build
+        path: /app/build # 将应用打包好的Jar和执行脚本挂载出来
+    commands: # 定义在Docker容器中执行的shell命令
+      - mvn clean package # 应用打包命令
+      - cp /drone/src/zhongzheng-api/target/zhongzheng-api.jar /app/build/zhongzheng-api.jar
+      - cp /drone/src/zhongzheng-admin/target/zhongzheng-admin.jar /app/build/zhongzheng-admin.jar
+      - cp /drone/src/zhongzheng-admin-saas/target/zhongzheng-admin-saas.jar /app/build/zhongzheng-admin-saas.jar
+      - cp Dockerfile /app/build/Dockerfile
+      - cp Dockerfile-admi /app/build/Dockerfile-admi
+      - cp Dockerfile-saas /app/build/Dockerfile-saas
+      - cp run-dev.sh /app/build/run-dev.sh
+
+  - name: build-start
+    image: appleboy/drone-ssh:latest # SSH工具镜像
+    settings:
+      host: 192.168.1.222 # 远程连接地址
+      username: root # 远程连接账号
+      password:
+        from_secret: ssh_password2 # 从Secret中读取SSH密码改变
+      port: 22 # 远程连接端口
+      command_timeout: 5m # 远程执行命令超时时间
+      script:
+        - cd /mydata/maven/build # 进入宿主机构建目录
+        - chmod +x run-dev.sh # 更改为可执行脚本
+        - ./run-dev.sh # 运行脚本打包应用镜像并运行
+
+volumes: # 定义流水线挂载目录,用于共享数据
+  - name: maven-build
+    host:
+      path: /mydata/maven/build # 从宿主机中挂载的目录
+  - name: maven-cache
+    host:
+      path: /mydata/maven/cache

+ 45 - 0
.drone-pre.yml

@@ -0,0 +1,45 @@
+kind: pipeline # 定义对象类型,还有secret和signature两种类型
+type: docker # 定义流水线类型,还有kubernetes、exec、ssh等类型
+name: zz_backend-pre # 定义流水线名称
+trigger:
+  branch:
+    - pre
+steps: # 定义流水线执行步骤,这些步骤将顺序执行
+  - name: package-pre # 流水线名称
+    image: maven:3-jdk-8 # 定义创建容器的Docker镜像
+    volumes: # 将容器内目录挂载到宿主机,仓库需要开启Trusted设置ga
+      - name: maven-cache
+        path: /root/.m2 # 将maven下载依赖的目录挂载出来,防止重复下载
+      - name: maven-build
+        path: /app/build # 将应用打包好的Jar和执行脚本挂载出来
+    commands: # 定义在Docker容器中执行的shell命令
+      - mvn clean package # 应用打包命令
+      - cp /drone/src/zhongzheng-api/target/zhongzheng-api.jar /app/build/zhongzheng-api.jar
+      - cp /drone/src/zhongzheng-admin/target/zhongzheng-admin.jar /app/build/zhongzheng-admin.jar
+      - cp /drone/src/zhongzheng-admin-saas/target/zhongzheng-admin-saas.jar /app/build/zhongzheng-admin-saas.jar
+      - cp Dockerfile /app/build/Dockerfile
+      - cp Dockerfile-admi /app/build/Dockerfile-admi
+      - cp Dockerfile-saas /app/build/Dockerfile-saas
+      - cp run-pre.sh /app/build/run-pre.sh
+
+  - name: build-start
+    image: appleboy/drone-ssh:latest # SSH工具镜像
+    settings:
+      host: 192.168.1.222 # 远程连接地址
+      username: root # 远程连接账号
+      password:
+        from_secret: ssh_password # 从Secret中读取SSH密码改变
+      port: 22 # 远程连接端口
+      command_timeout: 5m # 远程执行命令超时时间
+      script:
+        - cd /mydata-pre/maven/build # 进入宿主机构建目录
+        - chmod +x run-pre.sh # 更改为可执行脚本
+        - ./run-pre.sh # 运行脚本打包应用镜像并运行
+
+volumes: # 定义流水线挂载目录,用于共享数据
+  - name: maven-build
+    host:
+      path: /mydata-pre/maven/build # 从宿主机中挂载的目录
+  - name: maven-cache
+    host:
+      path: /mydata-pre/maven/cache

+ 46 - 0
.drone-trial.yml

@@ -0,0 +1,46 @@
+kind: pipeline # 定义对象类型,还有secret和signature两种类型
+type: docker # 定义流水线类型,还有kubernetes、exec、ssh等类型
+name: zz_backend-trial # 定义流水线名称
+trigger:
+  branch:
+    - trial
+
+steps: # 定义流水线执行步骤,这些步骤将顺序执行
+  - name: package-trial # 流水线名称
+    image: maven:3-jdk-8 # 定义创建容器的Docker镜像
+    volumes: # 将容器内目录挂载到宿主机,仓库需要开启Trusted设置
+      - name: maven-cache
+        path: /root/.m2 # 将maven下载依赖的目录挂载出来,防止重复下载
+      - name: maven-build
+        path: /app/build # 将应用打包好的Jar和执行脚本挂载出来
+    commands: # 定义在Docker容器中执行的shell命令
+      - mvn clean package # 应用打包命令
+      - cp /drone/src/zhongzheng-api/target/zhongzheng-api.jar /app/build/zhongzheng-api.jar
+      - cp /drone/src/zhongzheng-admin/target/zhongzheng-admin.jar /app/build/zhongzheng-admin.jar
+      - cp /drone/src/zhongzheng-admin-saas/target/zhongzheng-admin-saas.jar /app/build/zhongzheng-admin-saas.jar
+      - cp Dockerfile /app/build/Dockerfile
+      - cp Dockerfile-admi /app/build/Dockerfile-admi
+      - cp Dockerfile-saas /app/build/Dockerfile-saas
+      - cp run-trial.sh /app/build/run-trial.sh
+
+  - name: build-start
+    image: appleboy/drone-ssh:latest # SSH工具镜像
+    settings:
+      host: 39.108.7.155 # 远程连接地址
+      username: root # 远程连接账号
+      key:
+        from_secret: ssh_password
+      port: 22 # 远程连接端口
+      command_timeout: 5m # 远程执行命令超时时间
+      script:
+        - cd /mydata-trial/maven/build # 进入宿主机构建目录
+        - chmod +x run-trial.sh # 更改为可执行脚本
+        - ./run-trial.sh # 运行脚本打包应用镜像并运行
+
+volumes: # 定义流水线挂载目录,用于共享数据
+  - name: maven-build
+    host:
+      path: /mydata-trial/maven/build # 从宿主机中挂载的目录
+  - name: maven-cache
+    host:
+      path: /mydata-trial/maven/cache

+ 46 - 0
.drone.yml

@@ -0,0 +1,46 @@
+kind: pipeline # 定义对象类型,还有secret和signature两种类型
+type: docker # 定义流水线类型,还有kubernetes、exec、ssh等类型
+name: zz_backend # 定义流水线名称
+trigger:
+  branch:
+    - master
+
+steps: # 定义流水线执行步骤,这些步骤将顺序执行
+  - name: package # 流水线名称
+    image: maven:3-jdk-8 # 定义创建容器的Docker镜像
+    volumes: # 将容器内目录挂载到宿主机,仓库需要开启Trusted设置
+      - name: maven-cache
+        path: /root/.m2 # 将maven下载依赖的目录挂载出来,防止重复下载
+      - name: maven-build
+        path: /app/build # 将应用打包好的Jar和执行脚本挂载出来
+    commands: # 定义在Docker容器中执行的shell命令
+      - mvn clean package # 应用打包命令
+      - cp /drone/src/zhongzheng-api/target/zhongzheng-api.jar /app/build/zhongzheng-api.jar
+      - cp /drone/src/zhongzheng-admin/target/zhongzheng-admin.jar /app/build/zhongzheng-admin.jar
+      - cp /drone/src/zhongzheng-admin-saas/target/zhongzheng-admin-saas.jar /app/build/zhongzheng-admin-saas.jar
+      - cp Dockerfile /app/build/Dockerfile
+      - cp Dockerfile-admi /app/build/Dockerfile-admi
+      - cp Dockerfile-saas /app/build/Dockerfile-saas
+      - cp run-prod.sh /app/build/run-prod.sh
+
+  - name: build-start
+    image: appleboy/drone-ssh:latest # SSH工具镜像
+    settings:
+      host: 39.108.7.155 # 远程连接地址
+      username: root # 远程连接账号
+      key:
+        from_secret: ssh_password
+      port: 22 # 远程连接端口
+      command_timeout: 5m # 远程执行命令超时时间
+      script:
+        - cd /mydata/maven/build # 进入宿主机构建目录
+        - chmod +x run-prod.sh # 更改为可执行脚本
+        - ./run-prod.sh # 运行脚本打包应用镜像并运行
+
+volumes: # 定义流水线挂载目录,用于共享数据
+  - name: maven-build
+    host:
+      path: /mydata/maven/build # 从宿主机中挂载的目录
+  - name: maven-cache
+    host:
+      path: /mydata/maven/cache

+ 44 - 0
.gitignore

@@ -0,0 +1,44 @@
+######################################################################
+# Build Tools
+
+.gradle
+/build/
+!gradle/wrapper/gradle-wrapper.jar
+
+target/
+!.mvn/wrapper/maven-wrapper.jar
+
+######################################################################
+# IDE
+
+### STS ###
+.apt_generated
+.classpath
+.factorypath
+.project
+.settings
+.springBeans
+
+### IntelliJ IDEA ###
+.idea
+*.iws
+*.iml
+*.ipr
+
+### NetBeans ###
+nbproject/private/
+build/*
+nbbuild/
+dist/
+nbdist/
+.nb-gradle/
+
+######################################################################
+# Others
+*.log
+*.xml.versionsBackup
+*.swp
+
+!*/build/*.java
+!*/build/*.html
+!*/build/*.xml

+ 12 - 0
Dockerfile

@@ -0,0 +1,12 @@
+# 该镜像需要依赖的基础镜像
+FROM openjdk:8
+# 将当前目录下的jar包复制到docker容器的/目录下
+ADD zhongzheng-api.jar /app.jar
+# 声明服务运行在8080端口
+EXPOSE 5055
+# 指定docker容器启动时运行jar包
+ENTRYPOINT ["java", "-jar","-Xms2048m", "-Xmx2048m","/app.jar"]
+# 指定维护者的名字
+MAINTAINER zhongZheng
+
+

+ 10 - 0
Dockerfile-admi

@@ -0,0 +1,10 @@
+# 该镜像需要依赖的基础镜像
+FROM openjdk:8
+# 将当前目录下的jar包复制到docker容器的/目录下
+ADD zhongzheng-admin.jar /app-admin.jar
+# 声明服务运行在9099端口
+EXPOSE 5030
+# 指定docker容器启动时运行jar包
+ENTRYPOINT ["java", "-jar","/app-admin.jar"]
+# 指定维护者的名字
+MAINTAINER zhongZheng

+ 10 - 0
Dockerfile-saas

@@ -0,0 +1,10 @@
+# 该镜像需要依赖的基础镜像
+FROM openjdk:8
+# 将当前目录下的jar包复制到docker容器的/目录下
+ADD zhongzheng-admin-saas.jar /app-saas-admin.jar
+# 声明服务运行在9099端口
+EXPOSE 7077
+# 指定docker容器启动时运行jar包
+ENTRYPOINT ["java", "-jar","/app-saas-admin.jar"]
+# 指定维护者的名字
+MAINTAINER zhongZheng

+ 20 - 0
LICENSE

@@ -0,0 +1,20 @@
+The MIT License (MIT)
+
+Copyright (c) 2018 ZhongZheng
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of
+this software and associated documentation files (the "Software"), to deal in
+the Software without restriction, including without limitation the rights to
+use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
+the Software, and to permit persons to whom the Software is furnished to do so,
+subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
+FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
+COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
+IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

+ 3 - 0
README.md

@@ -0,0 +1,3 @@
+## 中正后台 
+
+

+ 12 - 0
bin/clean.bat

@@ -0,0 +1,12 @@
+@echo off
+echo.
+echo [ÐÅÏ¢] ÇåÀíÉú³É·¾¶¡£
+echo.
+
+%~d0
+cd %~dp0
+
+cd ..
+call mvn clean
+
+pause

+ 12 - 0
bin/package.bat

@@ -0,0 +1,12 @@
+@echo off
+echo.
+echo [信息] 打包Web工程,生成war/jar包文件。
+echo.
+
+%~d0
+cd %~dp0
+
+cd ..
+call mvn clean package -Dmaven.test.skip=true
+
+pause

+ 14 - 0
bin/run.bat

@@ -0,0 +1,14 @@
+@echo off
+echo.
+echo [ÐÅÏ¢] ÔËÐÐWeb¹¤³Ì¡£
+echo.
+
+cd %~dp0
+cd ../ruoyi-admin/target
+
+set JAVA_OPTS=-Xms256m -Xmx1024m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=512m
+
+java -jar %JAVA_OPTS% ruoyi-admin.jar
+
+cd bin
+pause

BIN
fonts/msyh.ttc


BIN
fonts/msyhbd.ttc


BIN
fonts/msyhl.ttc


+ 303 - 0
pom.xml

@@ -0,0 +1,303 @@
+<?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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+	<modelVersion>4.0.0</modelVersion>
+
+    <groupId>com.zhongzheng</groupId>
+    <artifactId>zhongzheng</artifactId>
+    <version>3.4.0</version>
+
+    <name>ZhongZheng-Vue-Plus</name>
+    <description>中正管理系统</description>
+
+    <properties>
+        <zhongzheng.version>3.4.0</zhongzheng.version>
+        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
+        <java.version>1.8</java.version>
+        <maven-jar-plugin.version>3.1.1</maven-jar-plugin.version>
+        <druid.version>1.2.4</druid.version>
+        <knife4j.version>2.0.8</knife4j.version>
+        <pagehelper.boot.version>1.3.0</pagehelper.boot.version>
+        <fastjson.version>1.2.75</fastjson.version>
+        <oshi.version>5.6.0</oshi.version>
+        <jna.version>5.7.0</jna.version>
+        <poi.version>4.1.2</poi.version>
+        <velocity.version>1.7</velocity.version>
+        <jwt.version>0.9.1</jwt.version>
+        <mybatis-plus.version>3.4.2</mybatis-plus.version>
+        <hutool.version>5.5.8</hutool.version>
+        <feign.version>2.2.6.RELEASE</feign.version>
+        <feign-okhttp.version>11.0</feign-okhttp.version>
+        <spring-boot-admin.version>2.3.1</spring-boot-admin.version>
+    </properties>
+
+    <!-- 依赖声明 -->
+    <dependencyManagement>
+        <dependencies>
+
+            <!-- SpringBoot的依赖配置-->
+            <dependency>
+                <groupId>org.springframework.boot</groupId>
+                <artifactId>spring-boot-dependencies</artifactId>
+                <version>2.2.13.RELEASE</version>
+                <type>pom</type>
+                <scope>import</scope>
+            </dependency>
+
+            <!--阿里数据库连接池 -->
+            <dependency>
+                <groupId>com.alibaba</groupId>
+                <artifactId>druid-spring-boot-starter</artifactId>
+                <version>${druid.version}</version>
+            </dependency>
+
+            <!-- pagehelper 分页插件 -->
+            <dependency>
+                <groupId>com.github.pagehelper</groupId>
+                <artifactId>pagehelper-spring-boot-starter</artifactId>
+                <version>${pagehelper.boot.version}</version>
+                <exclusions>
+                    <exclusion>
+                        <groupId>org.mybatis</groupId>
+                        <artifactId>mybatis</artifactId>
+                    </exclusion>
+                </exclusions>
+            </dependency>
+
+            <!-- 获取系统信息 -->
+            <dependency>
+                <groupId>com.github.oshi</groupId>
+                <artifactId>oshi-core</artifactId>
+                <version>${oshi.version}</version>
+            </dependency>
+
+            <dependency>
+                <groupId>net.java.dev.jna</groupId>
+                <artifactId>jna</artifactId>
+                <version>${jna.version}</version>
+            </dependency>
+
+            <dependency>
+                <groupId>net.java.dev.jna</groupId>
+                <artifactId>jna-platform</artifactId>
+                <version>${jna.version}</version>
+            </dependency>
+
+            <dependency>
+                <groupId>com.github.xiaoymin</groupId>
+                <artifactId>knife4j-spring-boot-starter</artifactId>
+                <version>${knife4j.version}</version>
+            </dependency>
+
+            <!-- excel工具 -->
+            <!--    <dependency>
+                    <groupId>org.apache.poi</groupId>
+                    <artifactId>poi-ooxml</artifactId>
+                    <version>${poi.version}</version>
+                </dependency>-->
+
+                <!--velocity代码生成使用模板 -->
+
+            <dependency>
+                <groupId>org.apache.velocity</groupId>
+                <artifactId>velocity</artifactId>
+                <version>${velocity.version}</version>
+            </dependency>
+
+            <!-- 阿里JSON解析器 -->
+            <dependency>
+                <groupId>com.alibaba</groupId>
+                <artifactId>fastjson</artifactId>
+                <version>${fastjson.version}</version>
+            </dependency>
+
+            <!--Token生成与解析-->
+            <dependency>
+                <groupId>io.jsonwebtoken</groupId>
+                <artifactId>jjwt</artifactId>
+                <version>${jwt.version}</version>
+            </dependency>
+
+            <dependency>
+                <groupId>com.baomidou</groupId>
+                <artifactId>mybatis-plus-boot-starter</artifactId>
+                <version>${mybatis-plus.version}</version>
+            </dependency>
+            <dependency>
+                <groupId>com.baomidou</groupId>
+                <artifactId>mybatis-plus-extension</artifactId>
+                <version>${mybatis-plus.version}</version>
+            </dependency>
+            <dependency>
+                <groupId>cn.hutool</groupId>
+                <artifactId>hutool-all</artifactId>
+                <version>${hutool.version}</version>
+            </dependency>
+
+            <dependency>
+                <groupId>org.springframework.cloud</groupId>
+                <artifactId>spring-cloud-starter-openfeign</artifactId>
+                <version>${feign.version}</version>
+            </dependency>
+
+            <dependency>
+                <groupId>io.github.openfeign</groupId>
+                <artifactId>feign-okhttp</artifactId>
+                <version>${feign-okhttp.version}</version>
+            </dependency>
+
+            <dependency>
+                <groupId>de.codecentric</groupId>
+                <artifactId>spring-boot-admin-starter-server</artifactId>
+                <version>${spring-boot-admin.version}</version>
+            </dependency>
+            <dependency>
+                <groupId>de.codecentric</groupId>
+                <artifactId>spring-boot-admin-starter-client</artifactId>
+                <version>${spring-boot-admin.version}</version>
+            </dependency>
+
+            <dependency>
+                <groupId>org.springframework.boot</groupId>
+                <artifactId>spring-boot-starter-actuator</artifactId>
+            </dependency>
+
+            <!-- 定时任务-->
+            <dependency>
+                <groupId>com.zhongzheng</groupId>
+                <artifactId>zhongzheng-quartz</artifactId>
+                <version>${zhongzheng.version}</version>
+            </dependency>
+
+            <!-- 代码生成-->
+            <dependency>
+                <groupId>com.zhongzheng</groupId>
+                <artifactId>zhongzheng-generator</artifactId>
+                <version>${zhongzheng.version}</version>
+            </dependency>
+
+            <!-- 核心模块-->
+            <dependency>
+                <groupId>com.zhongzheng</groupId>
+                <artifactId>zhongzheng-framework</artifactId>
+                <version>${zhongzheng.version}</version>
+            </dependency>
+
+            <!-- 系统模块-->
+            <dependency>
+                <groupId>com.zhongzheng</groupId>
+                <artifactId>zhongzheng-system</artifactId>
+                <version>${zhongzheng.version}</version>
+            </dependency>
+
+            <!-- 通用工具-->
+            <dependency>
+                <groupId>com.zhongzheng</groupId>
+                <artifactId>zhongzheng-common</artifactId>
+                <version>${zhongzheng.version}</version>
+            </dependency>
+
+            <!-- demo模块 -->
+            <dependency>
+                <groupId>com.zhongzheng</groupId>
+                <artifactId>zhongzheng-demo</artifactId>
+                <version>${zhongzheng.version}</version>
+            </dependency>
+
+        </dependencies>
+    </dependencyManagement>
+
+    <modules>
+        <module>zhongzheng-admin</module>
+        <module>zhongzheng-api</module>
+        <module>zhongzheng-framework</module>
+        <module>zhongzheng-system</module>
+        <module>zhongzheng-quartz</module>
+        <module>zhongzheng-generator</module>
+        <module>zhongzheng-common</module>
+        <module>zhongzheng-admin-saas</module>
+    </modules>
+    <packaging>pom</packaging>
+
+
+    <dependencies>
+
+    </dependencies>
+
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-compiler-plugin</artifactId>
+                <version>3.1</version>
+                <configuration>
+                    <source>${java.version}</source>
+                    <target>${java.version}</target>
+                    <encoding>${project.build.sourceEncoding}</encoding>
+                </configuration>
+            </plugin>
+        </plugins>
+        <resources>
+            <resource>
+                <!--打包该目录下的 application.yml -->
+                <directory>src/main/resources</directory>
+                <!-- 启用过滤 即该资源中的变量将会被过滤器中的值替换 -->
+                <filtering>true</filtering>
+            </resource>
+        </resources>
+    </build>
+
+    <repositories>
+        <repository>
+            <id>public</id>
+            <name>aliyun nexus</name>
+            <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
+            <releases>
+                <enabled>true</enabled>
+            </releases>
+        </repository>
+        <repository>
+            <id>com.e-iceblue</id>
+            <url>http://repo.e-iceblue.cn/repository/maven-public/</url>
+        </repository>
+    </repositories>
+
+    <pluginRepositories>
+        <pluginRepository>
+            <id>public</id>
+            <name>aliyun nexus</name>
+            <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
+            <releases>
+                <enabled>true</enabled>
+            </releases>
+            <snapshots>
+                <enabled>false</enabled>
+            </snapshots>
+        </pluginRepository>
+    </pluginRepositories>
+
+    <profiles>
+        <profile>
+            <id>dev</id>
+            <properties>
+                <!-- 环境标识,需要与配置文件的名称相对应 -->
+                <profiles.active>dev</profiles.active>
+                <logging.level>debug</logging.level>
+            </properties>
+            <activation>
+                <!-- 默认环境 -->
+                <activeByDefault>true</activeByDefault>
+            </activation>
+        </profile>
+        <profile>
+            <id>prod</id>
+            <properties>
+                <profiles.active>prod</profiles.active>
+                <logging.level>warn</logging.level>
+            </properties>
+        </profile>
+    </profiles>
+
+</project>

+ 77 - 0
run-dev.sh

@@ -0,0 +1,77 @@
+#!/usr/bin/env bash
+# 定义应用组名
+group_name='zhongzheng'
+# 定义应用名称
+app_name='zhongzheng-saas-api'
+# 定义应用版本
+app_version='1.0-SNAPSHOT'
+# 定义应用环境
+profile_active='dev'
+echo '----copy jar----'
+docker stop ${app_name}
+echo '----stop container----'
+docker rm ${app_name}
+echo '----rm container----'
+docker rmi ${group_name}/${app_name}:${app_version}
+echo '----rm image----'
+# 打包编译docker镜像
+docker build -f /mydata/maven/build/Dockerfile -t ${group_name}/${app_name}:${app_version} .
+echo '----build image----'
+docker run -p 5055:5055 --name ${app_name} \
+--restart=always \
+--link mysql:db \
+--log-opt max-size=50m \
+--log-opt max-file=3 \
+-e 'spring.profiles.active'=${profile_active} \
+-e TZ="Asia/Shanghai" \
+--add-host=gdxypx.xy.com:192.168.1.210 \
+-v /etc/localtime:/etc/localtime \
+-v /usr/share/fonts:/usr/share/fonts \
+-v /data/logs/dev_api:/logs \
+-v /mydata/app/${app_name}/logs:/var/logs \
+-d ${group_name}/${app_name}:${app_version}
+echo '----start container----'
+
+echo "开始等待20秒..."
+# 1-10秒内随机
+sleep 5
+echo "等待后继续"
+
+#!/usr/bin/env bash
+# 定义应用组名
+group_admin_name='zhongzheng'
+# 定义应用名称
+app_admin_name='zhongzheng-saas-admin'
+# 定义应用版本
+app_admin_version='1.0-SNAPSHOT'
+# 定义应用环境
+profile_active='dev'
+echo '----copy jar admin----'
+docker stop ${app_admin_name}
+echo '----stop container admin----'
+docker rm ${app_admin_name}
+echo '----rm container admin----'
+docker rmi ${group_admin_name}/${app_admin_name}:${app_admin_version}
+echo '----rm image admin----'
+# 打包编译docker镜像
+docker build -f /mydata/maven/build/Dockerfile-admi -t ${group_admin_name}/${app_admin_name}:${app_admin_version} .
+echo '----build image admin----'
+docker run \
+-p 5030:5030 \
+--name ${app_admin_name} \
+--restart=always \
+--link mysql:db \
+--log-opt max-size=50m \
+--log-opt max-file=3 \
+-e 'spring.profiles.active'=${profile_active} \
+-e TZ="Asia/Shanghai" \
+--add-host=gdxypx.xy.com:192.168.1.210 \
+-v /etc/localtime:/etc/localtime \
+-v /usr/share/fonts:/usr/share/fonts \
+-v /data/logs/dev_admin:/logs \
+-v /mydata/app/${app_admin_name}/logs:/var/logs \
+-v /data/nginx/conf.d:/data/nginx/conf.d \
+-d ${group_admin_name}/${app_admin_name}:${app_admin_version}
+echo '----start container admin----'
+
+

+ 113 - 0
run-pre.sh

@@ -0,0 +1,113 @@
+#!/usr/bin/env bash
+# 定义应用组名
+group_name='zhongzheng'
+# 定义应用名称
+app_name='zhongzheng-saas-api'
+# 定义应用版本
+app_version='1.0-SNAPSHOT'
+# 定义应用环境
+profile_active='prod'
+echo '----copy jar----'
+docker stop ${app_name}
+echo '----stop container----'
+docker rm ${app_name}
+echo '----rm container----'
+docker rmi ${group_name}/${app_name}:${app_version}
+echo '----rm image----'
+# 打包编译docker镜像
+docker build -f /mydata/maven/build/Dockerfile -t ${group_name}/${app_name}:${app_version} .
+echo '----build image----'
+docker run -p 5055:5055 --name ${app_name} \
+--restart=always \
+-e 'spring.profiles.active'=${profile_active} \
+-e TZ="Asia/Shanghai" \
+-m 10240m \
+--cpus=3 \
+--log-opt max-size=50m \
+--log-opt max-file=3 \
+-v /etc/localtime:/etc/localtime \
+-v /usr/share/fonts:/usr/share/fonts \
+-v /data/logs/prod_api:/logs \
+-v /mydata/app/${app_name}/logs:/var/logs \
+-d ${group_name}/${app_name}:${app_version}
+echo '----start container----'
+
+echo "开始等待20秒..."
+# 1-10秒内随机
+sleep 5
+echo "等待后继续"
+
+#!/usr/bin/env bash
+# 定义应用组名
+group_admin_name='zhongzheng'
+# 定义应用名称
+app_admin_name='zhongzheng-saas-admin'
+# 定义应用版本
+app_admin_version='1.0-SNAPSHOT'
+# 定义应用环境
+profile_active='prod'
+echo '----copy jar admin----'
+docker stop ${app_admin_name}
+echo '----stop container admin----'
+docker rm ${app_admin_name}
+echo '----rm container admin----'
+docker rmi ${group_admin_name}/${app_admin_name}:${app_admin_version}
+echo '----rm image admin----'
+# 打包编译docker镜像
+docker build -f /mydata/maven/build/Dockerfile-admi -t ${group_admin_name}/${app_admin_name}:${app_admin_version} .
+echo '----build image admin----'
+docker run \
+-p 5030:5030 \
+--name ${app_admin_name} \
+--restart=always \
+--log-opt max-size=50m \
+--log-opt max-file=3 \
+-e 'spring.profiles.active'=${profile_active} \
+-e TZ="Asia/Shanghai" \
+-v /etc/localtime:/etc/localtime \
+-v /usr/share/fonts:/usr/share/fonts \
+-v /data/logs/prod_admin:/logs \
+-v /mydata/app/${app_admin_name}/logs:/var/logs \
+-v /data/nginx/conf.d:/data/nginx/conf.d \
+-d ${group_admin_name}/${app_admin_name}:${app_admin_version}
+echo '----start container admin----'
+
+echo "开始等待20秒..."
+# 1-10秒内随机
+sleep 5
+echo "等待后继续"
+
+#!/usr/bin/env bash
+# 定义应用组名
+group_admin_name='zhongzheng'
+# 定义应用名称
+app_admin_name='zhongzheng-saas-admin-top'
+# 定义应用版本
+app_admin_version='1.0-SNAPSHOT'
+# 定义应用环境
+profile_active='prod'
+echo '----copy jar admin top----'
+docker stop ${app_admin_name}
+echo '----stop container admin top----'
+docker rm ${app_admin_name}
+echo '----rm container admin top----'
+docker rmi ${group_admin_name}/${app_admin_name}:${app_admin_version}
+echo '----rm image admin top----'
+# 打包编译docker镜像
+docker build -f /mydata/maven/build/Dockerfile-saas -t ${group_admin_name}/${app_admin_name}:${app_admin_version} .
+echo '----build image admin top----'
+docker run \
+-p 7077:7077 \
+--name ${app_admin_name} \
+--restart=always \
+--log-opt max-size=50m \
+--log-opt max-file=3 \
+-e 'spring.profiles.active'=${profile_active} \
+-e TZ="Asia/Shanghai" \
+-v /etc/localtime:/etc/localtime \
+-v /usr/share/fonts:/usr/share/fonts \
+-v /data/logs/prod_admin_top:/logs \
+-v /mydata/app/${app_admin_name}/logs:/var/logs \
+-v /data/nginx/conf.d:/data/nginx/conf.d \
+-d ${group_admin_name}/${app_admin_name}:${app_admin_version}
+echo '----start container admin top----'

+ 113 - 0
run-prod.sh

@@ -0,0 +1,113 @@
+#!/usr/bin/env bash
+# 定义应用组名
+group_name='zhongzheng'
+# 定义应用名称
+app_name='zhongzheng-saas-api'
+# 定义应用版本
+app_version='1.0-SNAPSHOT'
+# 定义应用环境
+profile_active='prod'
+echo '----copy jar----'
+docker stop ${app_name}
+echo '----stop container----'
+docker rm ${app_name}
+echo '----rm container----'
+docker rmi ${group_name}/${app_name}:${app_version}
+echo '----rm image----'
+# 打包编译docker镜像
+docker build -f /mydata/maven/build/Dockerfile -t ${group_name}/${app_name}:${app_version} .
+echo '----build image----'
+docker run -p 5055:5055 --name ${app_name} \
+--restart=always \
+-e 'spring.profiles.active'=${profile_active} \
+-e TZ="Asia/Shanghai" \
+-m 10240m \
+--cpus=3 \
+--log-opt max-size=50m \
+--log-opt max-file=3 \
+-v /etc/localtime:/etc/localtime \
+-v /usr/share/fonts:/usr/share/fonts \
+-v /data/logs/prod_api:/logs \
+-v /mydata/app/${app_name}/logs:/var/logs \
+-d ${group_name}/${app_name}:${app_version}
+echo '----start container----'
+
+echo "开始等待20秒..."
+# 1-10秒内随机
+sleep 5
+echo "等待后继续"
+
+#!/usr/bin/env bash
+# 定义应用组名
+group_admin_name='zhongzheng'
+# 定义应用名称
+app_admin_name='zhongzheng-saas-admin'
+# 定义应用版本
+app_admin_version='1.0-SNAPSHOT'
+# 定义应用环境
+profile_active='prod'
+echo '----copy jar admin----'
+docker stop ${app_admin_name}
+echo '----stop container admin----'
+docker rm ${app_admin_name}
+echo '----rm container admin----'
+docker rmi ${group_admin_name}/${app_admin_name}:${app_admin_version}
+echo '----rm image admin----'
+# 打包编译docker镜像
+docker build -f /mydata/maven/build/Dockerfile-admi -t ${group_admin_name}/${app_admin_name}:${app_admin_version} .
+echo '----build image admin----'
+docker run \
+-p 5030:5030 \
+--name ${app_admin_name} \
+--restart=always \
+--log-opt max-size=50m \
+--log-opt max-file=3 \
+-e 'spring.profiles.active'=${profile_active} \
+-e TZ="Asia/Shanghai" \
+-v /etc/localtime:/etc/localtime \
+-v /usr/share/fonts:/usr/share/fonts \
+-v /data/logs/prod_admin:/logs \
+-v /mydata/app/${app_admin_name}/logs:/var/logs \
+-v /data/nginx/conf.d:/data/nginx/conf.d \
+-d ${group_admin_name}/${app_admin_name}:${app_admin_version}
+echo '----start container admin----'
+
+echo "开始等待20秒..."
+# 1-10秒内随机
+sleep 5
+echo "等待后继续"
+
+#!/usr/bin/env bash
+# 定义应用组名
+group_admin_name='zhongzheng'
+# 定义应用名称
+app_admin_name='zhongzheng-saas-admin-top'
+# 定义应用版本
+app_admin_version='1.0-SNAPSHOT'
+# 定义应用环境
+profile_active='prod'
+echo '----copy jar admin top----'
+docker stop ${app_admin_name}
+echo '----stop container admin top----'
+docker rm ${app_admin_name}
+echo '----rm container admin top----'
+docker rmi ${group_admin_name}/${app_admin_name}:${app_admin_version}
+echo '----rm image admin top----'
+# 打包编译docker镜像
+docker build -f /mydata/maven/build/Dockerfile-saas -t ${group_admin_name}/${app_admin_name}:${app_admin_version} .
+echo '----build image admin top----'
+docker run \
+-p 7077:7077 \
+--name ${app_admin_name} \
+--restart=always \
+--log-opt max-size=50m \
+--log-opt max-file=3 \
+-e 'spring.profiles.active'=${profile_active} \
+-e TZ="Asia/Shanghai" \
+-v /etc/localtime:/etc/localtime \
+-v /usr/share/fonts:/usr/share/fonts \
+-v /data/logs/prod_admin_top:/logs \
+-v /mydata/app/${app_admin_name}/logs:/var/logs \
+-v /data/nginx/conf.d:/data/nginx/conf.d \
+-d ${group_admin_name}/${app_admin_name}:${app_admin_version}
+echo '----start container admin top----'

+ 72 - 0
run-trial.sh

@@ -0,0 +1,72 @@
+#!/usr/bin/env bash
+# 定义应用组名
+group_name='zhongzheng-trial'
+# 定义应用名称
+app_name='zhongzheng-saas-apitrial'
+# 定义应用版本
+app_version='1.0-SNAPSHOT'
+# 定义应用环境
+profile_active='trial'
+echo '----copy jar----'
+docker stop ${app_name}
+echo '----stop container----'
+docker rm ${app_name}
+echo '----rm container----'
+docker rmi ${group_name}/${app_name}:${app_version}
+echo '----rm image----'
+# 打包编译docker镜像
+docker build -f /mydata/maven/build/Dockerfile -t ${group_name}/${app_name}:${app_version} .
+echo '----build image----'
+docker run -p 6055:5055 --name ${app_name} \
+--restart=always \
+-e 'spring.profiles.active'=${profile_active} \
+-e TZ="Asia/Shanghai" \
+-v /etc/localtime:/etc/localtime \
+-v /usr/share/fonts:/usr/share/fonts \
+-v /data/logs/trial_api:/logs \
+-v /mydata/app/${app_name}/logs:/var/logs \
+-d ${group_name}/${app_name}:${app_version}
+echo '----start container----'
+
+echo "开始等待20秒..."
+# 1-10秒内随机
+sleep 5
+echo "等待后继续"
+
+#!/usr/bin/env bash
+# 定义应用组名
+group_admin_name='zhongzheng-trial'
+# 定义应用名称
+app_admin_name='zhongzheng-saas-admin-trial'
+# 定义应用版本
+app_admin_version='1.0-SNAPSHOT'
+# 定义应用环境
+profile_active='trial'
+echo '----copy jar admin----'
+docker stop ${app_admin_name}
+echo '----stop container admin----'
+docker rm ${app_admin_name}
+echo '----rm container admin----'
+docker rmi ${group_admin_name}/${app_admin_name}:${app_admin_version}
+echo '----rm image admin----'
+# 打包编译docker镜像
+docker build -f /mydata/maven/build/Dockerfile-admi -t ${group_admin_name}/${app_admin_name}:${app_admin_version} .
+echo '----build image admin----'
+docker run \
+-p 6030:5030 \
+--name ${app_admin_name} \
+--restart=always \
+-e 'spring.profiles.active'=${profile_active} \
+-e TZ="Asia/Shanghai" \
+-v /etc/localtime:/etc/localtime \
+-v /usr/share/fonts:/usr/share/fonts \
+-v /data/logs/trial_admin:/logs \
+-v /mydata/app/${app_admin_name}/logs:/var/logs \
+-v /data/nginx/conf.d:/data/nginx/conf.d \
+-d ${group_admin_name}/${app_admin_name}:${app_admin_version}
+echo '----start container admin----'
+
+
+
+
+

+ 70 - 0
zhongzheng-admin-saas/pom.xml

@@ -0,0 +1,70 @@
+<?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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <parent>
+        <artifactId>zhongzheng</artifactId>
+        <groupId>com.zhongzheng</groupId>
+        <version>3.4.0</version>
+    </parent>
+    <modelVersion>4.0.0</modelVersion>
+    <packaging>jar</packaging>
+    <artifactId>zhongzheng-admin-saas</artifactId>
+
+    <dependencies>
+        <!-- spring-boot-devtools -->
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-devtools</artifactId>
+            <optional>true</optional> <!-- 表示依赖不会传递 -->
+        </dependency>
+
+        <dependency>
+            <groupId>com.github.xiaoymin</groupId>
+            <artifactId>knife4j-spring-boot-starter</artifactId>
+        </dependency>
+
+        <!-- Mysql驱动包 -->
+        <dependency>
+            <groupId>mysql</groupId>
+            <artifactId>mysql-connector-java</artifactId>
+        </dependency>
+
+        <!-- 核心模块-->
+        <dependency>
+            <groupId>com.zhongzheng</groupId>
+            <artifactId>zhongzheng-framework</artifactId>
+        </dependency>
+    </dependencies>
+
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>org.springframework.boot</groupId>
+                <artifactId>spring-boot-maven-plugin</artifactId>
+                <version>2.1.1.RELEASE</version>
+                <configuration>
+                    <fork>true</fork> <!-- 如果没有该配置,devtools不会生效 -->
+                </configuration>
+                <executions>
+                    <execution>
+                        <goals>
+                            <goal>repackage</goal>
+                        </goals>
+                    </execution>
+                </executions>
+            </plugin>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-war-plugin</artifactId>
+                <version>3.1.0</version>
+                <configuration>
+                    <failOnMissingWebXml>false</failOnMissingWebXml>
+                    <warName>${project.artifactId}</warName>
+                </configuration>
+            </plugin>
+        </plugins>
+        <finalName>${project.artifactId}</finalName>
+    </build>
+
+</project>

+ 20 - 0
zhongzheng-admin-saas/src/main/java/com/zhongzheng/AdminSaasApplication.java

@@ -0,0 +1,20 @@
+package com.zhongzheng;
+
+import com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceAutoConfigure;
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
+import org.springframework.scheduling.annotation.EnableScheduling;
+
+
+@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class})
+@EnableScheduling
+public class AdminSaasApplication {
+
+    public static void main(String[] args) {
+        System.setProperty("spring.devtools.restart.enabled", "false");
+        SpringApplication.run(AdminSaasApplication.class, args);
+        System.out.println("(♥◠‿◠)ノ゙  超级Admin启动成功   ლ(´ڡ`ლ)゙" + "超级Admin");
+    }
+
+}

+ 18 - 0
zhongzheng-admin-saas/src/main/java/com/zhongzheng/AdminSaasServletInitializer.java

@@ -0,0 +1,18 @@
+package com.zhongzheng;
+
+import org.springframework.boot.builder.SpringApplicationBuilder;
+import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;
+
+/**
+ * web容器中进行部署
+ *
+ * @author zhongzheng
+ */
+public class AdminSaasServletInitializer extends SpringBootServletInitializer
+{
+    @Override
+    protected SpringApplicationBuilder configure(SpringApplicationBuilder application)
+    {
+        return application.sources(AdminSaasApplication.class);
+    }
+}

+ 73 - 0
zhongzheng-admin-saas/src/main/java/com/zhongzheng/controller/alioss/OssController.java

@@ -0,0 +1,73 @@
+package com.zhongzheng.controller.alioss;
+
+
+import com.zhongzheng.common.core.controller.BaseController;
+import com.zhongzheng.common.core.domain.AjaxResult;
+import com.zhongzheng.modules.alioss.bo.OssRequest;
+import com.zhongzheng.modules.alioss.service.OssService;
+import com.zhongzheng.modules.alioss.vo.ResultBean;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.RequiredArgsConstructor;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.servlet.http.HttpServletRequest;
+
+/**
+ * 阿里OSS
+ *
+ * @author change
+ * @date 2021-05-17
+ */
+@Api(value = "阿里OSS上传文件控制器", tags = {"阿里OSS上传文件"})
+@RequiredArgsConstructor(onConstructor_ = @Autowired)
+@RestController
+@RequestMapping("/aliyun/oss")
+public class OssController extends BaseController {
+
+    private static Logger log = LoggerFactory.getLogger(OssController.class);
+
+    private final OssService ossService;
+
+    /**
+     * policy获得
+     */
+    @ApiOperation("policy获得")
+    @GetMapping("/policy")
+    public AjaxResult<ResultBean> policy(@Validated OssRequest ossRequest) {
+        ResultBean result = ossService.getPolicy(ossRequest);
+        log.info("服务端生成签名:{}",result);
+        return AjaxResult.success(result);
+    }
+
+    /**
+     * 阿里回调OSS返回参数到前端
+     */
+    @ApiOperation("回调")
+    @PostMapping("/callback")
+    public ResultBean callback(HttpServletRequest request) {
+        ResultBean ossCallbackResult = ossService.callback(request);
+        log.info("oss成功的回调:{}",ossCallbackResult);
+        return ossCallbackResult;
+    }
+
+
+    /**
+     * upload上传文件
+     */
+    @ApiOperation("上传file图片")
+    @PostMapping("/upload")
+    public AjaxResult<String> upload( OssRequest file) throws Exception {
+        String result = ossService.upload(file);
+        log.info("服务端生成签名:{}",result);
+        return AjaxResult.success("返回图片路径",result);
+    }
+
+}

+ 136 - 0
zhongzheng-admin-saas/src/main/java/com/zhongzheng/controller/common/CaptchaController.java

@@ -0,0 +1,136 @@
+package com.zhongzheng.controller.common;
+
+import cn.hutool.captcha.AbstractCaptcha;
+import cn.hutool.captcha.CircleCaptcha;
+import cn.hutool.captcha.LineCaptcha;
+import cn.hutool.captcha.ShearCaptcha;
+import cn.hutool.captcha.generator.CodeGenerator;
+import cn.hutool.captcha.generator.MathGenerator;
+import cn.hutool.captcha.generator.RandomGenerator;
+import cn.hutool.core.convert.Convert;
+import cn.hutool.core.util.IdUtil;
+import cn.hutool.core.util.StrUtil;
+import com.github.xiaoymin.knife4j.annotations.ApiSupport;
+import com.github.xiaoymin.knife4j.annotations.DynamicParameter;
+import com.github.xiaoymin.knife4j.annotations.DynamicResponseParameters;
+import com.zhongzheng.common.constant.Constants;
+import com.zhongzheng.common.core.domain.AjaxResult;
+import com.zhongzheng.common.core.redis.RedisCache;
+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.GetMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.annotation.Resource;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.concurrent.TimeUnit;
+
+/**
+ * 验证码操作处理
+ *
+ * @author hjl
+ */
+@Api(tags ="系统操作管理")
+@RestController
+public class CaptchaController {
+
+	// 圆圈干扰验证码
+	@Resource(name = "CircleCaptcha")
+	private CircleCaptcha circleCaptcha;
+	// 线段干扰的验证码
+	@Resource(name = "LineCaptcha")
+	private LineCaptcha lineCaptcha;
+	// 扭曲干扰验证码
+	@Resource(name = "ShearCaptcha")
+	private ShearCaptcha shearCaptcha;
+
+	@Autowired
+	private RedisCache redisCache;
+
+	// 验证码类型
+	@Value("${captcha.captchaType}")
+	private String captchaType;
+	// 验证码类别
+	@Value("${captcha.captchaCategory}")
+	private String captchaCategory;
+	// 数字验证码位数
+	@Value("${captcha.captchaNumberLength}")
+	private int numberLength;
+	// 字符验证码长度
+	@Value("${captcha.captchaCharLength}")
+	private int charLength;
+
+	/**
+	 * 生成验证码
+	 */
+	@ApiOperation("获取验证码")
+	@DynamicResponseParameters(name = "CodeMapModel",properties = {
+			@DynamicParameter(name = "uuid",value = "验证码uuid"),
+			@DynamicParameter(name = "img",value = "验证码图片base64"),
+	})
+	@GetMapping("/captchaImage")
+	public AjaxResult getCode() {
+		// 保存验证码信息
+		String uuid = IdUtil.simpleUUID();
+		String verifyKey = Constants.CAPTCHA_CODE_KEY + uuid;
+		String code = null;
+		// 生成验证码
+		CodeGenerator codeGenerator;
+		AbstractCaptcha captcha;
+		switch (captchaType) {
+			case "math":
+				codeGenerator = new MathGenerator(numberLength);
+				break;
+			case "char":
+				codeGenerator = new RandomGenerator(charLength);
+				break;
+			default:
+				throw new IllegalArgumentException("验证码类型异常");
+		}
+		switch (captchaCategory) {
+			case "line":
+				captcha = lineCaptcha;
+				break;
+			case "circle":
+				captcha = circleCaptcha;
+				break;
+			case "shear":
+				captcha = shearCaptcha;
+				break;
+			default:
+				throw new IllegalArgumentException("验证码类别异常");
+		}
+		captcha.setGenerator(codeGenerator);
+		captcha.createCode();
+		if ("math".equals(captchaType)) {
+			code = getCodeResult(captcha.getCode());
+		} else if ("char".equals(captchaType)) {
+			code = captcha.getCode();
+		}
+		redisCache.setCacheObject(verifyKey, code, Constants.CAPTCHA_EXPIRATION, TimeUnit.MINUTES);
+		Map<String,Object> map = new HashMap();
+		map.put("uuid", uuid);
+		map.put("img", captcha.getImageBase64());
+		return AjaxResult.success(map);
+	}
+
+	private String getCodeResult(String capStr) {
+		int a = Convert.toInt(StrUtil.sub(capStr, 0, numberLength).trim());
+		char operator = capStr.charAt(numberLength);
+		int b = Convert.toInt(StrUtil.sub(capStr, numberLength + 1, numberLength + 1 + numberLength).trim());
+		switch (operator) {
+			case '*':
+				return a * b + "";
+			case '+':
+				return a + b + "";
+			case '-':
+				return a - b + "";
+			default:
+				return "";
+		}
+	}
+
+}

+ 305 - 0
zhongzheng-admin-saas/src/main/java/com/zhongzheng/controller/common/CommonController.java

@@ -0,0 +1,305 @@
+package com.zhongzheng.controller.common;
+
+import cn.hutool.core.util.StrUtil;
+import com.zhongzheng.common.annotation.Log;
+import com.zhongzheng.common.config.RuoYiConfig;
+import com.zhongzheng.common.core.controller.BaseController;
+import com.zhongzheng.common.core.domain.AjaxResult;
+import com.zhongzheng.common.core.page.TableDataInfo;
+import com.zhongzheng.common.enums.BusinessType;
+import com.zhongzheng.common.exception.CustomException;
+import com.zhongzheng.common.utils.ToolsUtils;
+import com.zhongzheng.common.utils.file.FileUtils;
+import com.zhongzheng.modules.order.bo.TopOrderInvoiceBack;
+import com.zhongzheng.modules.sdk.bo.TopNuoMplatformLogAddBo;
+import com.zhongzheng.modules.sdk.service.ITopNuoMplatformLogService;
+import com.zhongzheng.modules.top.financial.bo.*;
+import com.zhongzheng.modules.top.financial.vo.TopOrderLogVo;
+import com.zhongzheng.modules.top.financial.vo.TopOrderOrgVo;
+import com.zhongzheng.modules.top.financial.vo.TopOrderRevocationVo;
+import com.zhongzheng.modules.top.financial.vo.TopSellerDiscountVo;
+import com.zhongzheng.modules.top.goods.bo.*;
+import com.zhongzheng.modules.top.goods.service.ITopOldOrderService;
+import com.zhongzheng.modules.top.order.bo.PayOrderCallBackBo;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.RequiredArgsConstructor;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.MediaType;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 课程Controller
+ *
+ * @author hjl
+ * @date 2021-10-09
+ */
+@Api(value = "游客访问接口", tags = {"游客访问接口"})
+@RequiredArgsConstructor(onConstructor_ = @Autowired)
+@RestController
+@RequestMapping("/sys/common/")
+public class CommonController extends BaseController {
+
+    private static final Logger log = LoggerFactory.getLogger(CommonController.class);
+
+    private final ITopNuoMplatformLogService iTopNuoMplatformLogService;
+
+    private final ITopOldOrderService iTopOldOrderService;
+
+    /**
+     * 通用下载请求
+     *
+     * @param fileName 文件名称
+     * @param delete   是否删除
+     */
+    @GetMapping("/download")
+    public void fileDownload(String fileName, Boolean delete, HttpServletResponse response, HttpServletRequest request) {
+        try {
+            if (!FileUtils.checkAllowDownload(fileName)) {
+                throw new Exception(StrUtil.format("文件名称({})非法,不允许下载。 ", fileName));
+            }
+            String realFileName = System.currentTimeMillis() + fileName.substring(fileName.indexOf("_") + 1);
+            String filePath = RuoYiConfig.getDownloadPath() + fileName;
+
+            response.setContentType(MediaType.APPLICATION_OCTET_STREAM_VALUE);
+            FileUtils.setAttachmentResponseHeader(response, realFileName);
+            FileUtils.writeBytes(filePath, response.getOutputStream());
+           /* if (delete)
+            {
+                FileUtils.deleteFile(filePath);
+            }*/
+            FileUtils.deleteFile(filePath);
+        } catch (Exception e) {
+            log.error("下载文件失败", e);
+        }
+    }
+
+    /**
+     * 新增诺税通开单记录
+     */
+    @ApiOperation("新增诺税通开单记录")
+    @PreAuthorize("@ss.hasPermi('system:log:add')")
+    @Log(title = "诺税通开单记录", businessType = BusinessType.INSERT)
+    @PostMapping("/openMplatform/log")
+    public AjaxResult<Map<String, String>> add(@RequestBody TopNuoMplatformLogAddBo bo) {
+        if(!ToolsUtils.checkSignFromOldSys(bo.getStamp().toString(),bo.getSign())){
+            throw new CustomException("签名错误");
+        }
+        return AjaxResult.success(iTopNuoMplatformLogService.insertByAddBo(bo));
+    }
+
+
+    /**
+     * 业务系统发票回传
+     */
+    @ApiOperation("业务系统发票回传")
+    @PostMapping("/order/invoice/back")
+    public AjaxResult<Void> orderInvoiceBack(@RequestBody TopOrderInvoiceBack bo) {
+        if(!ToolsUtils.checkSignFromOldSys(bo.getStamp().toString(),bo.getSign())){
+
+            throw new CustomException("签名错误");
+        }
+        return toAjax(iTopNuoMplatformLogService.orderInvoiceBack(bo) ? 1 : 0);
+    }
+
+    /**
+     * B端订单退款申请
+     */
+    @ApiOperation("B端订单退款申请")
+    @PostMapping("/refund/apply")
+    public AjaxResult<Void> orderRefundApply(@RequestBody TopOrderRefundApplyBo bo) {
+        if(!ToolsUtils.checkOrderSignFromOldSys(bo.getOrderSn(),bo.getStamp().toString(),bo.getSign())){
+            throw new CustomException("签名错误");
+        }
+        return toAjax(iTopOldOrderService.orderRefundApply(bo) ? 1 : 0);
+    }
+
+    /**
+     * B端订单新增订单
+     */
+    @ApiOperation("新增订单")
+    @PostMapping("/save/order")
+    public AjaxResult<Void> saveOrder(@RequestBody TopOldOrderAddBo bo) {
+        if(!ToolsUtils.checkOrderSignFromOldSys(bo.getOrderSn(),bo.getStamp().toString(),bo.getSign())){
+            throw new CustomException("签名错误");
+        }
+        return toAjax(iTopOldOrderService.insertByAddBo(bo) ? 1 : 0);
+    }
+
+
+    /**
+     * B端订单回款
+     */
+    @ApiOperation("B端订单回款")
+    @PostMapping("/proceeds")
+    public AjaxResult<Void> orderProceeds(@RequestBody TopOrderProceedsBo bo) {
+        if(!ToolsUtils.checkOrderSignFromOldSys(bo.getOrderSn(),bo.getStamp().toString(),bo.getSign())){
+            throw new CustomException("签名错误");
+        }
+        return toAjax(iTopOldOrderService.orderProceeds(bo) ? 1 : 0);
+    }
+
+    /**
+     * 新增诺税通开单记录
+     */
+    @ApiOperation("付款企业网银")
+    @PreAuthorize("@ss.hasPermi('system:log:add')")
+    @Log(title = "付款企业网银", businessType = BusinessType.INSERT)
+    @PostMapping("/payToCompany")
+    public AjaxResult<Void> payToCompany(@RequestBody TopOldOrderQueryBo bo) {
+        return toAjax(iTopOldOrderService.payToCompany(bo) ? 1 : 0);
+    }
+
+    @ApiOperation("付款企业网银支付回调")
+    @PreAuthorize("@ss.hasPermi('system:log:add')")
+    @Log(title = "付款企业网银支付回调", businessType = BusinessType.INSERT)
+    @PostMapping("/payToCompanyCallBack")
+    public AjaxResult<Void> payToCompanyCallBack(@RequestBody PayOrderCallBackBo bo) {
+        if(!ToolsUtils.checkSignCwSnFromOldSys(bo.getMainUniqueId(),bo.getStamp().toString(),bo.getSign())){
+            throw new CustomException("签名错误");
+        }
+        return toAjax(iTopOldOrderService.payToCompanyCallBack(bo) ? 1 : 0);
+    }
+
+    /**
+     * B端订单修改
+     */
+    @ApiOperation("B端订单修改")
+    @PostMapping("/edit/order")
+    public AjaxResult<Void> editOrder(@RequestBody TopOldOrderAddBo bo) {
+        if(!ToolsUtils.checkOrderSignFromOldSys(bo.getOrderSn(),bo.getStamp().toString(),bo.getSign())){
+            throw new CustomException("签名错误");
+        }
+        return toAjax(iTopOldOrderService.editOrder(bo) ? 1 : 0);
+    }
+
+    /**
+     * B端订单审核修改
+     */
+    @ApiOperation("B端订单审核修改")
+    @PostMapping("/edit/order/check")
+    public AjaxResult<Void> editOrderCheck(@RequestBody TopOldOrderAddBo bo) {
+        if(!ToolsUtils.checkOrderSignFromOldSys(bo.getOrderSn(),bo.getStamp().toString(),bo.getSign())){
+            throw new CustomException("签名错误");
+        }
+        return toAjax(iTopOldOrderService.editOrderCheck(bo) ? 1 : 0);
+    }
+
+    /**
+     * B端订单佣金修改
+     */
+    @ApiOperation("B端订单佣金修改")
+    @PostMapping("/edit/order/brokerage")
+    public AjaxResult<Void> editOrderBrokerage(@RequestBody OrderBrokerageBo bo) {
+        if(!ToolsUtils.checkOrderSignFromOldSys(bo.getOrderSn(),bo.getStamp().toString(),bo.getSign())){
+            throw new CustomException("签名错误");
+        }
+        return toAjax(iTopOldOrderService.editOrderBrokerage(bo) ? 1 : 0);
+    }
+
+    /**
+     * 批量修改订单备注
+     */
+    @ApiOperation("批量修改订单备注")
+    @PostMapping("/update/order/remark")
+    public AjaxResult<Void> updateRemark(@RequestBody TopUpdateRemarkBo bo) {
+        if(!ToolsUtils.checkSignFromOldSys(bo.getStamp().toString(),bo.getSign())){
+            throw new CustomException("签名错误");
+        }
+        return toAjax(iTopOldOrderService.updateRemark(bo) ? 1 : 0);
+    }
+
+    /**
+     * 订单修改(不审核)
+     */
+    @ApiOperation("订单修改(不审核)")
+    @PostMapping("/update/order/info")
+    public AjaxResult<Void> updateOrderInfo(@RequestBody TopOldOrderAddBo bo) {
+        if(!ToolsUtils.checkOrderSignFromOldSys(bo.getOrderSn(),bo.getStamp().toString(),bo.getSign())){
+            throw new CustomException("签名错误");
+        }
+        return toAjax(iTopOldOrderService.updateOrderInfo(bo) ? 1 : 0);
+    }
+
+    /**
+     * B端订单审核修改通知
+     */
+    @ApiOperation("B端订单审核修改通知")
+    @PostMapping("/edit/order/remind")
+    public AjaxResult<Void> editOrderRemind(@RequestBody TopOrderRemindBo bo) {
+        if(!ToolsUtils.checkSignFromOldSys(bo.getStamp().toString(),bo.getSign())){
+            throw new CustomException("签名错误");
+        }
+        return toAjax(iTopOldOrderService.editOrderRemind(bo) ? 1 : 0);
+    }
+
+    /**
+     * B端订单批量完单
+     */
+    @ApiOperation("B端订单批量完单")
+    @PostMapping("/order/finish")
+    public AjaxResult<Void> finishOrder(@RequestBody TopFinishOrderBo bo) {
+        if(!ToolsUtils.checkSignFromOldSys(bo.getStamp().toString(),bo.getSign())){
+            throw new CustomException("签名错误");
+        }
+        return toAjax(iTopOldOrderService.finishOrder(bo) ? 1 : 0);
+    }
+
+    /**
+     * B端订单获取业务员优惠额度
+     */
+    @ApiOperation("B端订单获取业务员优惠额度")
+    @PostMapping("/seller/discount")
+    public AjaxResult<TopSellerDiscountVo> getSellerDiscount(@RequestBody TopSellerDiscountBo bo) {
+        if(!ToolsUtils.checkSignFromOldSys(bo.getStamp().toString(),bo.getSign())){
+            throw new CustomException("签名错误");
+        }
+        return AjaxResult.success(iTopOldOrderService.getSellerDiscount(bo));
+    }
+
+    /**
+     * B端订单撤销
+     */
+    @ApiOperation("B端订单撤销")
+    @PostMapping("/order/revocation")
+    public AjaxResult<TopOrderRevocationVo> orderRevocation(@RequestBody TopOrderRevocationBo bo) {
+        if(!ToolsUtils.checkOrderSignFromOldSys(bo.getOrderSn(),bo.getStamp().toString(),bo.getSign())){
+            throw new CustomException("签名错误");
+        }
+        return AjaxResult.success(iTopOldOrderService.orderRevocation(bo));
+    }
+
+    /**
+     * B端订单操作历史记录
+     */
+    @ApiOperation("B端订单操作历史记录")
+    @PostMapping("/order/record")
+    public TableDataInfo<TopOrderLogVo> orderRevocation(@RequestBody TopOldOrderQueryBo bo) {
+        if(!ToolsUtils.checkOrderSignFromOldSys(bo.getOrderSn(),bo.getStamp().toString(),bo.getSign())){
+            throw new CustomException("签名错误");
+        }
+        startPage();
+        List<TopOrderLogVo> list = iTopOldOrderService.logList(bo);
+        return getDataTable(list);
+    }
+
+    /**
+     * 获取订单商品信息
+     */
+    @ApiOperation("获取订单商品信息")
+    @PostMapping("/order/goods/list")
+    public AjaxResult<TopOrderOrgVo> getOrderGoodsList(@RequestBody TopOldOrderQueryBo bo) {
+        if(!ToolsUtils.checkSignFromOldSys(bo.getStamp().toString(),bo.getSign())){
+            throw new CustomException("签名错误");
+        }
+        return AjaxResult.success(iTopOldOrderService.getTopOrderGoodsList(bo));
+    }
+}

+ 71 - 0
zhongzheng-admin-saas/src/main/java/com/zhongzheng/controller/course/TopCourseBusinessController.java

@@ -0,0 +1,71 @@
+package com.zhongzheng.controller.course;
+
+import com.zhongzheng.common.annotation.Log;
+import com.zhongzheng.common.core.controller.BaseController;
+import com.zhongzheng.common.core.domain.AjaxResult;
+import com.zhongzheng.common.core.page.TableDataInfo;
+import com.zhongzheng.common.enums.BusinessType;
+import com.zhongzheng.modules.course.bo.CourseBusinessAddBo;
+import com.zhongzheng.modules.course.bo.CourseBusinessEditBo;
+import com.zhongzheng.modules.top.goods.bo.TopCourseBusinessAddBo;
+import com.zhongzheng.modules.top.goods.bo.TopCourseBusinessEditBo;
+import com.zhongzheng.modules.top.goods.bo.TopCourseBusinessQueryBo;
+import com.zhongzheng.modules.top.goods.service.ITopCourseBusinessService;
+import com.zhongzheng.modules.top.goods.vo.TopCourseBusinessVo;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.RequiredArgsConstructor;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+/**
+ * 业务层次Controller
+ *
+ * @author ruoyi
+ * @date 2021-10-08
+ */
+@Api(value = "业务层次控制器", tags = {"业务层次管理"})
+@RequiredArgsConstructor(onConstructor_ = @Autowired)
+@RestController
+@RequestMapping("/course/business")
+public class TopCourseBusinessController extends BaseController {
+
+    private final ITopCourseBusinessService iCourseBusinessService;
+
+    /**
+     * 查询业务层次列表
+     */
+    @ApiOperation("查询业务层次列表")
+    @GetMapping("/list")
+    public TableDataInfo<TopCourseBusinessVo> list(TopCourseBusinessQueryBo bo) {
+        startPage();
+        List<TopCourseBusinessVo> list = iCourseBusinessService.queryList(bo);
+        return getDataTable(list);
+    }
+
+    /**
+     * 新增业务层次
+     */
+    @ApiOperation("新增总平台业务层次")
+    @PreAuthorize("@ss.hasPermi('course:business:add')")
+    @Log(title = "业务层次", businessType = BusinessType.INSERT)
+    @PostMapping()
+    public AjaxResult<Void> add(@RequestBody TopCourseBusinessAddBo bo) {
+        return toAjax(iCourseBusinessService.insertByAddBo(bo) ? 1 : 0);
+    }
+
+    /**
+     * 修改业务层次
+     */
+    @ApiOperation("修改总平台业务层次")
+    @PreAuthorize("@ss.hasPermi('course:business:edit')")
+    @Log(title = "业务层次", businessType = BusinessType.UPDATE)
+    @PostMapping("/edit")
+    public AjaxResult<Void> edit(@RequestBody TopCourseBusinessEditBo bo) {
+        return toAjax(iCourseBusinessService.updateByEditBo(bo) ? 1 : 0);
+    }
+
+}

+ 86 - 0
zhongzheng-admin-saas/src/main/java/com/zhongzheng/controller/course/TopCourseEducationTypeController.java

@@ -0,0 +1,86 @@
+package com.zhongzheng.controller.course;
+
+import com.zhongzheng.common.annotation.Log;
+import com.zhongzheng.common.core.controller.BaseController;
+import com.zhongzheng.common.core.domain.AjaxResult;
+import com.zhongzheng.common.core.page.TableDataInfo;
+import com.zhongzheng.common.enums.BusinessType;
+import com.zhongzheng.modules.course.bo.CourseEducationTypeAddBo;
+import com.zhongzheng.modules.course.bo.CourseEducationTypeEditBo;
+import com.zhongzheng.modules.top.goods.bo.TopCourseEducationTypeAddBo;
+import com.zhongzheng.modules.top.goods.bo.TopCourseEducationTypeEditBo;
+import com.zhongzheng.modules.top.goods.bo.TopCourseEducationTypeQueryBo;
+import com.zhongzheng.modules.top.goods.service.ITopCourseEducationTypeService;
+import com.zhongzheng.modules.top.goods.vo.TopCourseEducationTypeVo;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.RequiredArgsConstructor;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * 教育类型Controller
+ *
+ * @author ruoyi
+ * @date 2021-10-08
+ */
+@Api(value = "教育类型控制器", tags = {"教育类型管理"})
+@RequiredArgsConstructor(onConstructor_ = @Autowired)
+@RestController
+@RequestMapping("/course/educationType")
+public class TopCourseEducationTypeController extends BaseController {
+
+    private final ITopCourseEducationTypeService iCourseEducationTypeService;
+
+    /**
+     * 查询教育类型列表
+     */
+    @ApiOperation("查询教育类型列表")
+    @GetMapping("/list")
+    public TableDataInfo<TopCourseEducationTypeVo> list(TopCourseEducationTypeQueryBo bo) {
+        startPage();
+        List<TopCourseEducationTypeVo> list = iCourseEducationTypeService.queryList(bo);
+        return getDataTable(list);
+    }
+
+    /**
+     * 查询教育类型列表
+     */
+    @ApiOperation("查询所有业务层次列表")
+    @GetMapping("/allList")
+    public TableDataInfo<TopCourseEducationTypeVo> allList(TopCourseEducationTypeQueryBo bo) {
+        startPage();
+        List<Integer> statusList = new ArrayList<>();
+        statusList.add(1);
+        statusList.add(0);
+        bo.setStatusList(statusList);
+        List<TopCourseEducationTypeVo> list = iCourseEducationTypeService.queryAllList(bo);
+        return getDataTable(list);
+    }
+
+    /**
+     * 新增教育类型
+     */
+    @ApiOperation("新增总平台教育类型")
+    @PreAuthorize("@ss.hasPermi('course:type:add')")
+    @Log(title = "教育类型", businessType = BusinessType.INSERT)
+    @PostMapping()
+    public AjaxResult<Void> add(@RequestBody TopCourseEducationTypeAddBo bo) {
+        return toAjax(iCourseEducationTypeService.insertByAddBo(bo) ? 1 : 0);
+    }
+
+    /**
+     * 修改教育类型
+     */
+    @ApiOperation("修改总平台教育类型")
+    @PreAuthorize("@ss.hasPermi('course:type:edit')")
+    @Log(title = "教育类型", businessType = BusinessType.UPDATE)
+    @PostMapping("/edit")
+    public AjaxResult<Void> edit(@RequestBody TopCourseEducationTypeEditBo bo) {
+        return toAjax(iCourseEducationTypeService.updateByEditBo(bo) ? 1 : 0);
+    }
+}

+ 70 - 0
zhongzheng-admin-saas/src/main/java/com/zhongzheng/controller/course/TopCourseProjectTypeController.java

@@ -0,0 +1,70 @@
+package com.zhongzheng.controller.course;
+
+import com.zhongzheng.common.annotation.Log;
+import com.zhongzheng.common.core.controller.BaseController;
+import com.zhongzheng.common.core.domain.AjaxResult;
+import com.zhongzheng.common.core.page.TableDataInfo;
+import com.zhongzheng.common.enums.BusinessType;
+import com.zhongzheng.modules.course.bo.CourseProjectTypeAddBo;
+import com.zhongzheng.modules.course.bo.CourseProjectTypeEditBo;
+import com.zhongzheng.modules.top.goods.bo.TopCourseProjectTypeAddBo;
+import com.zhongzheng.modules.top.goods.bo.TopCourseProjectTypeEditBo;
+import com.zhongzheng.modules.top.goods.bo.TopCourseProjectTypeQueryBo;
+import com.zhongzheng.modules.top.goods.service.ITopCourseProjectTypeService;
+import com.zhongzheng.modules.top.goods.vo.TopCourseProjectTypeVo;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.RequiredArgsConstructor;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+/**
+ * 项目类型Controller
+ *
+ * @author ruoyi
+ * @date 2021-10-08
+ */
+@Api(value = "项目类型控制器", tags = {"项目类型管理"})
+@RequiredArgsConstructor(onConstructor_ = @Autowired)
+@RestController
+@RequestMapping("/course/projectType")
+public class TopCourseProjectTypeController extends BaseController {
+
+    private final ITopCourseProjectTypeService iCourseProjectTypeService;
+
+    /**
+     * 查询项目类型列表
+     */
+    @ApiOperation("查询项目类型列表")
+    @GetMapping("/list")
+    public TableDataInfo<TopCourseProjectTypeVo> list(TopCourseProjectTypeQueryBo bo) {
+        startPage();
+        List<TopCourseProjectTypeVo> list = iCourseProjectTypeService.queryList(bo);
+        return getDataTable(list);
+    }
+
+    /**
+     * 新增项目类型
+     */
+    @ApiOperation("新增总平台项目类型")
+    @PreAuthorize("@ss.hasPermi('course:type:add')")
+    @Log(title = "项目类型", businessType = BusinessType.INSERT)
+    @PostMapping()
+    public AjaxResult<Void> add(@RequestBody TopCourseProjectTypeAddBo bo) {
+        return toAjax(iCourseProjectTypeService.insertByAddBo(bo) ? 1 : 0);
+    }
+
+    /**
+     * 修改项目类型
+     */
+    @ApiOperation("修改总平台项目类型")
+    @PreAuthorize("@ss.hasPermi('course:type:edit')")
+    @Log(title = "项目类型", businessType = BusinessType.UPDATE)
+    @PostMapping("/edit")
+    public AjaxResult<Void> edit(@RequestBody TopCourseProjectTypeEditBo bo) {
+        return toAjax(iCourseProjectTypeService.updateByEditBo(bo) ? 1 : 0);
+    }
+}

+ 42 - 0
zhongzheng-admin-saas/src/main/java/com/zhongzheng/controller/course/TopCourseSubjectController.java

@@ -0,0 +1,42 @@
+package com.zhongzheng.controller.course;
+
+import com.zhongzheng.common.core.controller.BaseController;
+import com.zhongzheng.common.core.page.TableDataInfo;
+import com.zhongzheng.modules.top.goods.bo.TopCourseSubjectQueryBo;
+import com.zhongzheng.modules.top.goods.service.ITopCourseSubjectService;
+import com.zhongzheng.modules.top.goods.vo.TopCourseSubjectVo;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.RequiredArgsConstructor;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.List;
+
+/**
+ * 科目Controller
+ * 
+ * @author ruoyi
+ * @date 2021-10-09
+ */
+@Api(value = "科目控制器", tags = {"科目管理"})
+@RequiredArgsConstructor(onConstructor_ = @Autowired)
+@RestController
+@RequestMapping("/course/subject")
+public class TopCourseSubjectController extends BaseController {
+
+    private final ITopCourseSubjectService iCourseSubjectService;
+
+    /**
+     * 查询科目列表
+     */
+    @ApiOperation("查询科目列表")
+    @GetMapping("/list")
+    public TableDataInfo<TopCourseSubjectVo> list(TopCourseSubjectQueryBo bo) {
+        startPage();
+        List<TopCourseSubjectVo> list = iCourseSubjectService.queryList(bo);
+        return getDataTable(list);
+    }
+}

+ 42 - 0
zhongzheng-admin-saas/src/main/java/com/zhongzheng/controller/course/TopMajorController.java

@@ -0,0 +1,42 @@
+package com.zhongzheng.controller.course;
+
+import com.zhongzheng.common.core.controller.BaseController;
+import com.zhongzheng.common.core.page.TableDataInfo;
+import com.zhongzheng.modules.top.goods.bo.TopMajorQueryBo;
+import com.zhongzheng.modules.top.goods.service.ITopMajorService;
+import com.zhongzheng.modules.top.goods.vo.TopMajorVo;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.RequiredArgsConstructor;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.List;
+
+/**
+ * 专业Controller
+ * 
+ * @author ruoyi
+ * @date 2021-10-09
+ */
+@Api(value = "专业控制器", tags = {"专业管理"})
+@RequiredArgsConstructor(onConstructor_ = @Autowired)
+@RestController
+@RequestMapping("/course/major")
+public class TopMajorController extends BaseController {
+
+    private final ITopMajorService iTopMajorService;
+
+    /**
+     * 查询专业列表
+     */
+    @ApiOperation("查询专业列表")
+    @GetMapping("/list")
+    public TableDataInfo<TopMajorVo> list(TopMajorQueryBo bo) {
+        startPage();
+        List<TopMajorVo> list = iTopMajorService.queryList(bo);
+        return getDataTable(list);
+    }
+}

+ 43 - 0
zhongzheng-admin-saas/src/main/java/com/zhongzheng/controller/course/TopSchoolController.java

@@ -0,0 +1,43 @@
+package com.zhongzheng.controller.course;
+
+import com.zhongzheng.common.core.controller.BaseController;
+import com.zhongzheng.common.core.page.TableDataInfo;
+import com.zhongzheng.modules.top.goods.bo.TopSchoolQueryBo;
+import com.zhongzheng.modules.top.goods.service.ITopSchoolService;
+import com.zhongzheng.modules.top.goods.vo.TopSchoolVo;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.RequiredArgsConstructor;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.List;
+
+/**
+ * 高校Controller
+ * 
+ * @author ruoyi
+ * @date 2021-10-09
+ */
+@Api(value = "高校控制器", tags = {"高校管理"})
+@RequiredArgsConstructor(onConstructor_ = @Autowired)
+@RestController
+@RequestMapping("/user/school")
+public class TopSchoolController extends BaseController {
+
+    private final ITopSchoolService iTopSchoolService;
+
+    /**
+     * 查询高校列表
+     */
+    @ApiOperation("查询高校列表")
+    @GetMapping("/list")
+    public TableDataInfo<TopSchoolVo> list(TopSchoolQueryBo bo) {
+        startPage();
+        List<TopSchoolVo> list = iTopSchoolService.queryList(bo);
+        return getDataTable(list);
+    }
+
+}

+ 165 - 0
zhongzheng-admin-saas/src/main/java/com/zhongzheng/controller/distribution/DistributionActivityTemplateController.java

@@ -0,0 +1,165 @@
+package com.zhongzheng.controller.distribution;
+
+import com.zhongzheng.common.core.controller.BaseController;
+import com.zhongzheng.common.core.domain.AjaxResult;
+import com.zhongzheng.common.core.domain.model.TopLoginUser;
+import com.zhongzheng.common.core.page.TableDataInfo;
+import com.zhongzheng.common.utils.ServletUtils;
+import com.zhongzheng.common.utils.poi.ExcelUtil;
+import com.zhongzheng.framework.web.service.TopTokenService;
+import com.zhongzheng.modules.distribution.bo.DistributionStatusEditBo;
+import com.zhongzheng.modules.distribution.vo.DistributionSellerVo;
+import com.zhongzheng.modules.top.distribution.bo.*;
+import com.zhongzheng.modules.top.distribution.service.IDistributionActivityTemplateService;
+import com.zhongzheng.modules.top.distribution.vo.*;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.RequiredArgsConstructor;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+/**
+ * 【分销模板控制器】Controller
+ * 
+ * @author ruoyi
+ * @date 2023-03-06
+ */
+@Api("分销模板控制器")
+@RequiredArgsConstructor(onConstructor_ = @Autowired)
+@RestController
+@RequestMapping("/distribution/temp")
+public class DistributionActivityTemplateController extends BaseController {
+
+    private final IDistributionActivityTemplateService iDistributionActivityTemplateService;
+
+    private final TopTokenService tokenService;
+
+    /**
+     * 查询【请填写功能名称】列表
+     */
+    @ApiOperation("查询分销活动模板列表")
+    @GetMapping("/list")
+    public TableDataInfo<DistributionActivityTemplateVo> list(DistributionActivityTemplateQueryBo bo) {
+        startPage();
+        List<DistributionActivityTemplateVo> list = iDistributionActivityTemplateService.queryList(bo);
+        return getDataTable(list);
+    }
+
+    /**
+     * 导出【请填写功能名称】列表
+     */
+    @ApiOperation("导出【请填写功能名称】列表")
+    @GetMapping("/export")
+    public AjaxResult<DistributionActivityTemplateVo> export(DistributionActivityTemplateQueryBo bo) {
+        List<DistributionActivityTemplateVo> list = iDistributionActivityTemplateService.queryList(bo);
+        ExcelUtil<DistributionActivityTemplateVo> util = new ExcelUtil<DistributionActivityTemplateVo>(DistributionActivityTemplateVo.class);
+        return util.exportExcel(list, "【请填写功能名称】");
+    }
+
+    /**
+     * 获取分销活动模板详细信息
+     */
+    @ApiOperation("获取分销活动模板详细信息")
+    @GetMapping("/{id}")
+    public AjaxResult<DistributionActivityTemplateVo> getInfo(@PathVariable("id" ) Long id) {
+        return AjaxResult.success(iDistributionActivityTemplateService.queryById(id));
+    }
+
+    /**
+     * 新增【请填写功能名称】
+     */
+    @ApiOperation("新增分销活动模板")
+    @PostMapping("/save")
+    public AjaxResult<Void> add(@RequestBody DistributionActivityTemplateAddBo bo) {
+        TopLoginUser loginUser = tokenService.getLoginUser(ServletUtils.getRequest());
+        bo.setCreateTopSysUserId(loginUser.getUser().getUserId());
+        return toAjax(iDistributionActivityTemplateService.insertByAddBo(bo) ? 1 : 0);
+    }
+
+    /**
+     * 修改【请填写功能名称】
+     */
+    @ApiOperation("修改分销活动模板")
+    @PostMapping("/edit")
+    public AjaxResult<Void> edit(@RequestBody DistributionActivityTemplateEditBo bo) {
+        return toAjax(iDistributionActivityTemplateService.updateByEditBo(bo) ? 1 : 0);
+    }
+
+    /**
+     * 启用/禁用
+     */
+    @ApiOperation("启用/禁用")
+    @PostMapping("/update/status")
+    public AjaxResult<Void> updateStatus(@RequestBody DistributionStatusEditBo bo) {
+        return toAjax(iDistributionActivityTemplateService.updateStatus(bo) ? 1 : 0);
+    }
+
+    /**
+     * 活动模板发布
+     */
+    @ApiOperation("活动模板发布")
+    @GetMapping("/publish/{templateId}")
+    public AjaxResult<Void> publishActivity(@PathVariable("templateId") Long templateId) {
+        return toAjax(iDistributionActivityTemplateService.publishActivity(templateId) ? 1 : 0);
+    }
+
+
+    /**
+     * 分销业务员列表
+     */
+    @ApiOperation("分销业务员列表")
+    @GetMapping("/seller/list")
+    public TableDataInfo<DistributionSellerVo> sellerList(DistributionSellerQuery query) {
+        startPage();
+        List<DistributionSellerVo> list = iDistributionActivityTemplateService.sellerList(query);
+        return getDataTable(list);
+    }
+
+    /**
+     * 机构分销排行榜
+     */
+    @ApiOperation("机构分销排行榜")
+    @GetMapping("/sort/notice")
+    public TableDataInfo<TenantSortNoticeVo> getTenantSortNotice(TenantSortNoticeQueryBo bo) {
+        startPage();
+        List<TenantSortNoticeVo> list = iDistributionActivityTemplateService.getTenantSortNotice(bo);
+        return getDataTable(list);
+    }
+
+    /**
+     * 机构所有分销订单
+     */
+    @ApiOperation("机构所有分销订单")
+    @GetMapping("/org/order")
+    public TableDataInfo<TenantOrderVo> getOrgOrder(TenantOrderQueryBo bo) {
+        startPage();
+        List<TenantOrderVo> list = iDistributionActivityTemplateService.getOrgOrder(bo);
+        return getDataTable(list);
+    }
+
+    /**
+     * 佣金列表
+     */
+    @ApiOperation("佣金列表")
+    @GetMapping("/cash/list")
+    public TableDataInfo<DistributionCashTopVo> getOrgCashList(DistributionCashTopQueryBo bo) {
+        startPage();
+        List<DistributionCashTopVo> list = iDistributionActivityTemplateService.getOrgCashList(bo);
+        return getDataTable(list);
+    }
+
+    /**
+     * 佣金详情
+     */
+    @ApiOperation("佣金详情")
+    @GetMapping("/cash/detail")
+    public TableDataInfo<TopSellerOrderVo> getOrgCashDetail(TopSellerOrderQueryBo bo) {
+        startPage();
+        List<TopSellerOrderVo> list = iDistributionActivityTemplateService.getOrgCashDetail(bo);
+        return getDataTable(list);
+    }
+
+
+}

+ 92 - 0
zhongzheng-admin-saas/src/main/java/com/zhongzheng/controller/distribution/DistributionActivityTemplateGoodsController.java

@@ -0,0 +1,92 @@
+package com.zhongzheng.controller.distribution;
+
+import com.zhongzheng.common.core.controller.BaseController;
+import com.zhongzheng.common.core.domain.AjaxResult;
+import com.zhongzheng.common.core.page.TableDataInfo;
+import com.zhongzheng.common.utils.poi.ExcelUtil;
+import com.zhongzheng.modules.top.distribution.bo.DistributionActivityTemplateGoodsAddBo;
+import com.zhongzheng.modules.top.distribution.bo.DistributionActivityTemplateGoodsEditBo;
+import com.zhongzheng.modules.top.distribution.bo.DistributionActivityTemplateGoodsQueryBo;
+import com.zhongzheng.modules.top.distribution.service.IDistributionActivityTemplateGoodsService;
+import com.zhongzheng.modules.top.distribution.vo.DistributionActivityTemplateGoodsVo;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.RequiredArgsConstructor;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.Arrays;
+import java.util.List;
+
+/**
+ * 【请填写功能名称】Controller
+ * 
+ * @author ruoyi
+ * @date 2023-03-06
+ */
+@Api(value = "【请填写功能名称】控制器", tags = {"【请填写功能名称】管理"})
+@RequiredArgsConstructor(onConstructor_ = @Autowired)
+@RestController
+@RequestMapping("/system/goods")
+public class DistributionActivityTemplateGoodsController extends BaseController {
+
+    private final IDistributionActivityTemplateGoodsService iDistributionActivityTemplateGoodsService;
+
+    /**
+     * 查询【请填写功能名称】列表
+     */
+    @ApiOperation("查询【请填写功能名称】列表")
+    @GetMapping("/list")
+    public TableDataInfo<DistributionActivityTemplateGoodsVo> list(DistributionActivityTemplateGoodsQueryBo bo) {
+        startPage();
+        List<DistributionActivityTemplateGoodsVo> list = iDistributionActivityTemplateGoodsService.queryList(bo);
+        return getDataTable(list);
+    }
+
+    /**
+     * 导出【请填写功能名称】列表
+     */
+    @ApiOperation("导出【请填写功能名称】列表")
+    @GetMapping("/export")
+    public AjaxResult<DistributionActivityTemplateGoodsVo> export(DistributionActivityTemplateGoodsQueryBo bo) {
+        List<DistributionActivityTemplateGoodsVo> list = iDistributionActivityTemplateGoodsService.queryList(bo);
+        ExcelUtil<DistributionActivityTemplateGoodsVo> util = new ExcelUtil<DistributionActivityTemplateGoodsVo>(DistributionActivityTemplateGoodsVo.class);
+        return util.exportExcel(list, "【请填写功能名称】");
+    }
+
+    /**
+     * 获取【请填写功能名称】详细信息
+     */
+    @ApiOperation("获取【请填写功能名称】详细信息")
+    @GetMapping("/{id}")
+    public AjaxResult<DistributionActivityTemplateGoodsVo> getInfo(@PathVariable("id" ) Long id) {
+        return AjaxResult.success(iDistributionActivityTemplateGoodsService.queryById(id));
+    }
+
+    /**
+     * 新增【请填写功能名称】
+     */
+    @ApiOperation("新增【请填写功能名称】")
+    @PostMapping("/save")
+    public AjaxResult<Void> add(@RequestBody DistributionActivityTemplateGoodsAddBo bo) {
+        return toAjax(iDistributionActivityTemplateGoodsService.insertByAddBo(bo) ? 1 : 0);
+    }
+
+    /**
+     * 修改【请填写功能名称】
+     */
+    @ApiOperation("修改【请填写功能名称】")
+    @PostMapping()
+    public AjaxResult<Void> edit(@RequestBody DistributionActivityTemplateGoodsEditBo bo) {
+        return toAjax(iDistributionActivityTemplateGoodsService.updateByEditBo(bo) ? 1 : 0);
+    }
+
+    /**
+     * 删除【请填写功能名称】
+     */
+    @ApiOperation("删除【请填写功能名称】")
+    @DeleteMapping("/{ids}")
+    public AjaxResult<Void> remove(@PathVariable Long[] ids) {
+        return toAjax(iDistributionActivityTemplateGoodsService.deleteWithValidByIds(Arrays.asList(ids), true) ? 1 : 0);
+    }
+}

+ 90 - 0
zhongzheng-admin-saas/src/main/java/com/zhongzheng/controller/distribution/DistributionActivityTemplatePosterController.java

@@ -0,0 +1,90 @@
+package com.zhongzheng.controller.distribution;
+
+import cn.hutool.core.bean.BeanUtil;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.zhongzheng.common.core.controller.BaseController;
+import com.zhongzheng.common.core.domain.AjaxResult;
+import com.zhongzheng.common.core.page.TableDataInfo;
+import com.zhongzheng.modules.top.distribution.bo.DistributionActivityTemplatePosterAddBo;
+import com.zhongzheng.modules.top.distribution.bo.DistributionActivityTemplatePosterQueryBo;
+import com.zhongzheng.modules.top.distribution.bo.distributionActivityTemplatePosterEditBo;
+import com.zhongzheng.modules.top.distribution.domain.DistributionActivityTemplateImage;
+import com.zhongzheng.modules.top.distribution.service.IDistributionActivityTemplateImageService;
+import com.zhongzheng.modules.top.distribution.service.IDistributionActivityTemplatePosterService;
+import com.zhongzheng.modules.top.distribution.vo.DistributionActivityTemplateImageVo;
+import com.zhongzheng.modules.top.distribution.vo.DistributionActivityTemplatePosterVo;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.RequiredArgsConstructor;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ * 【分销海报模板控制器】Controller
+ * 
+ * @author ruoyi
+ * @date 2023-03-06
+ */
+@Api("分销海报模板控制器")
+@RequiredArgsConstructor(onConstructor_ = @Autowired)
+@RestController
+@RequestMapping("/distribution/poster")
+public class DistributionActivityTemplatePosterController extends BaseController {
+
+    private final IDistributionActivityTemplatePosterService iDistributionActivityTemplatePosterService;
+
+    private final IDistributionActivityTemplateImageService iDistributionActivityTemplateImageService;
+
+    /**
+     * 查询海报模板列表
+     */
+    @ApiOperation("查询海报模板列表")
+    @GetMapping("/list")
+    public TableDataInfo<DistributionActivityTemplatePosterVo> list(DistributionActivityTemplatePosterQueryBo bo) {
+        startPage();
+        List<DistributionActivityTemplatePosterVo> list = iDistributionActivityTemplatePosterService.queryList(bo);
+        return getDataTable(list);
+    }
+
+    /**
+     * 获取模板底图列表
+     */
+    @ApiOperation("获取海报模板底图列表")
+    @GetMapping("/image/list")
+    public AjaxResult<List<DistributionActivityTemplateImageVo>> list() {
+        List<DistributionActivityTemplateImage> imageList = iDistributionActivityTemplateImageService.list(new LambdaQueryWrapper<DistributionActivityTemplateImage>().eq(DistributionActivityTemplateImage::getStatus,1));
+        List<DistributionActivityTemplateImageVo> voList = imageList.stream().map(item -> BeanUtil.toBean(item, DistributionActivityTemplateImageVo.class)).collect(Collectors.toList());
+        return AjaxResult.success(voList);
+    }
+
+    /**
+     * 获取【请填写功能名称】详细信息
+     */
+    @ApiOperation("获取海报模板详细信息")
+    @GetMapping("/{posterTempId}")
+    public AjaxResult<DistributionActivityTemplatePosterVo> getInfo(@PathVariable("posterTempId" ) Long posterTempId) {
+        return AjaxResult.success(iDistributionActivityTemplatePosterService.queryById(posterTempId));
+    }
+
+    /**
+     * 新增【请填写功能名称】
+     */
+    @ApiOperation("新增海报模板")
+    @PostMapping("/save")
+    public AjaxResult<Void> add(@RequestBody DistributionActivityTemplatePosterAddBo bo) {
+        return toAjax(iDistributionActivityTemplatePosterService.insertByAddBo(bo) ? 1 : 0);
+    }
+
+    /**
+     * 修改【请填写功能名称】
+     */
+    @ApiOperation("修改海报模板")
+    @PostMapping("/edit")
+    public AjaxResult<Void> edit(@RequestBody distributionActivityTemplatePosterEditBo bo) {
+        return toAjax(iDistributionActivityTemplatePosterService.updateByEditBo(bo) ? 1 : 0);
+    }
+
+}

+ 92 - 0
zhongzheng-admin-saas/src/main/java/com/zhongzheng/controller/distribution/DistributionActivityTemplateRelationController.java

@@ -0,0 +1,92 @@
+package com.zhongzheng.controller.distribution;
+
+import com.zhongzheng.common.core.controller.BaseController;
+import com.zhongzheng.common.core.domain.AjaxResult;
+import com.zhongzheng.common.core.page.TableDataInfo;
+import com.zhongzheng.common.utils.poi.ExcelUtil;
+import com.zhongzheng.modules.top.distribution.bo.DistributionActivityTemplateRelationAddBo;
+import com.zhongzheng.modules.top.distribution.bo.DistributionActivityTemplateRelationEditBo;
+import com.zhongzheng.modules.top.distribution.bo.DistributionActivityTemplateRelationQueryBo;
+import com.zhongzheng.modules.top.distribution.service.IDistributionActivityTemplateRelationService;
+import com.zhongzheng.modules.top.distribution.vo.DistributionActivityTemplateRelationVo;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.RequiredArgsConstructor;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.Arrays;
+import java.util.List;
+
+/**
+ * 【请填写功能名称】Controller
+ * 
+ * @author ruoyi
+ * @date 2023-03-06
+ */
+@Api(value = "【请填写功能名称】控制器", tags = {"【请填写功能名称】管理"})
+@RequiredArgsConstructor(onConstructor_ = @Autowired)
+@RestController
+@RequestMapping("/system/relation")
+public class DistributionActivityTemplateRelationController extends BaseController {
+
+    private final IDistributionActivityTemplateRelationService iDistributionActivityTemplateRelationService;
+
+    /**
+     * 查询【请填写功能名称】列表
+     */
+    @ApiOperation("查询【请填写功能名称】列表")
+    @GetMapping("/list")
+    public TableDataInfo<DistributionActivityTemplateRelationVo> list(DistributionActivityTemplateRelationQueryBo bo) {
+        startPage();
+        List<DistributionActivityTemplateRelationVo> list = iDistributionActivityTemplateRelationService.queryList(bo);
+        return getDataTable(list);
+    }
+
+    /**
+     * 导出【请填写功能名称】列表
+     */
+    @ApiOperation("导出【请填写功能名称】列表")
+    @GetMapping("/export")
+    public AjaxResult<DistributionActivityTemplateRelationVo> export(DistributionActivityTemplateRelationQueryBo bo) {
+        List<DistributionActivityTemplateRelationVo> list = iDistributionActivityTemplateRelationService.queryList(bo);
+        ExcelUtil<DistributionActivityTemplateRelationVo> util = new ExcelUtil<DistributionActivityTemplateRelationVo>(DistributionActivityTemplateRelationVo.class);
+        return util.exportExcel(list, "【请填写功能名称】");
+    }
+
+    /**
+     * 获取【请填写功能名称】详细信息
+     */
+    @ApiOperation("获取【请填写功能名称】详细信息")
+    @GetMapping("/{id}")
+    public AjaxResult<DistributionActivityTemplateRelationVo> getInfo(@PathVariable("id" ) Long id) {
+        return AjaxResult.success(iDistributionActivityTemplateRelationService.queryById(id));
+    }
+
+    /**
+     * 新增【请填写功能名称】
+     */
+    @ApiOperation("新增【请填写功能名称】")
+    @PostMapping("/save")
+    public AjaxResult<Void> add(@RequestBody DistributionActivityTemplateRelationAddBo bo) {
+        return toAjax(iDistributionActivityTemplateRelationService.insertByAddBo(bo) ? 1 : 0);
+    }
+
+    /**
+     * 修改【请填写功能名称】
+     */
+    @ApiOperation("修改【请填写功能名称】")
+    @PostMapping()
+    public AjaxResult<Void> edit(@RequestBody DistributionActivityTemplateRelationEditBo bo) {
+        return toAjax(iDistributionActivityTemplateRelationService.updateByEditBo(bo) ? 1 : 0);
+    }
+
+    /**
+     * 删除【请填写功能名称】
+     */
+    @ApiOperation("删除【请填写功能名称】")
+    @DeleteMapping("/{ids}")
+    public AjaxResult<Void> remove(@PathVariable Long[] ids) {
+        return toAjax(iDistributionActivityTemplateRelationService.deleteWithValidByIds(Arrays.asList(ids), true) ? 1 : 0);
+    }
+}

+ 62 - 0
zhongzheng-admin-saas/src/main/java/com/zhongzheng/controller/financial/ReceiveOrderController.java

@@ -0,0 +1,62 @@
+package com.zhongzheng.controller.financial;
+
+import com.zhongzheng.common.annotation.Log;
+import com.zhongzheng.common.core.controller.BaseController;
+import com.zhongzheng.common.core.domain.AjaxResult;
+import com.zhongzheng.common.core.page.TableDataInfo;
+import com.zhongzheng.common.enums.BusinessType;
+import com.zhongzheng.common.utils.poi.ExcelUtil;
+import com.zhongzheng.modules.grade.vo.SyncUserChapterExport;
+import com.zhongzheng.modules.top.financial.bo.TopCostTpAddBo;
+import com.zhongzheng.modules.top.financial.bo.TopCostTpEditBo;
+import com.zhongzheng.modules.top.financial.bo.TopCostTpQueryBo;
+import com.zhongzheng.modules.top.financial.service.ITopCostTpService;
+import com.zhongzheng.modules.top.financial.vo.TopCostTpVo;
+import com.zhongzheng.modules.top.goods.bo.TopOldOrderQueryBo;
+import com.zhongzheng.modules.top.goods.service.ITopOldOrderService;
+import com.zhongzheng.modules.top.goods.vo.TopOldOrderVo;
+import com.zhongzheng.modules.top.order.vo.TopOldOrderExportVo;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.RequiredArgsConstructor;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * 成本模板Controller
+ *
+ * @author ruoyi
+ * @date 2023-04-20
+ */
+@Api(value = "应收订单控制器", tags = {"成本模板管理"})
+@RequiredArgsConstructor(onConstructor_ = @Autowired)
+@RestController
+@RequestMapping("/receive/order")
+public class ReceiveOrderController extends BaseController {
+
+    private final ITopOldOrderService iTopOldOrderService;
+
+
+    @ApiOperation("应收订单列表")
+    @PreAuthorize("@ss.hasPermi('system:tp:list')")
+    @GetMapping("/list")
+    public TableDataInfo<TopOldOrderVo> list(TopOldOrderQueryBo bo) {
+        startPage();
+        List<TopOldOrderVo> list = iTopOldOrderService.queryReceiveList(bo);
+        return getDataTable(list);
+    }
+
+    @ApiOperation("应收订单列表导出")
+    @PreAuthorize("@ss.hasPermi('system:tp:list')")
+    @GetMapping("/listExport")
+    public AjaxResult<List<TopOldOrderExportVo>> listExport(TopOldOrderQueryBo bo) {
+        List<TopOldOrderExportVo> list = iTopOldOrderService.queryReceiveListExport(bo);
+        ExcelUtil<TopOldOrderExportVo> util = new ExcelUtil<TopOldOrderExportVo>(TopOldOrderExportVo.class);
+        return util.exportExcel(list, "应收订单列表");
+    }
+
+}

+ 119 - 0
zhongzheng-admin-saas/src/main/java/com/zhongzheng/controller/financial/TopCostInstTpController.java

@@ -0,0 +1,119 @@
+package com.zhongzheng.controller.financial;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Arrays;
+
+import com.zhongzheng.modules.top.financial.bo.*;
+import com.zhongzheng.modules.top.financial.service.ITopCostInstTpItemService;
+import com.zhongzheng.modules.top.financial.service.ITopCostInstTpService;
+import com.zhongzheng.modules.top.financial.vo.TopCostInstTpVo;
+import com.zhongzheng.modules.top.goods.vo.TopCourseEducationTypeVo;
+import lombok.RequiredArgsConstructor;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.PutMapping;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import com.zhongzheng.common.annotation.Log;
+import com.zhongzheng.common.core.controller.BaseController;
+import com.zhongzheng.common.core.domain.AjaxResult;
+import com.zhongzheng.common.enums.BusinessType;
+import com.zhongzheng.common.utils.poi.ExcelUtil;
+import com.zhongzheng.common.core.page.TableDataInfo;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+
+/**
+ * 供应商成本模板Controller
+ *
+ * @author hjl
+ * @date 2023-07-21
+ */
+@Api(value = "供应商成本模板控制器", tags = {"供应商成本模板管理"})
+@RequiredArgsConstructor(onConstructor_ = @Autowired)
+@RestController
+@RequestMapping("/top/cost/inst/tp")
+public class TopCostInstTpController extends BaseController {
+
+    private final ITopCostInstTpService iTopCostInstTpService;
+
+    private final ITopCostInstTpItemService iTopCostInstTpItemService;
+
+    /**
+     * 查询供应商成本模板列表
+     */
+    @ApiOperation("查询供应商成本模板列表")
+    @PreAuthorize("@ss.hasPermi('system:tp:list')")
+    @GetMapping("/list")
+    public TableDataInfo<TopCostInstTpVo> list(TopCostInstTpQueryBo bo) {
+        startPage();
+        List<Integer> statusList = new ArrayList<>();
+        statusList.add(1);
+        bo.setStatusList(statusList);
+        List<TopCostInstTpVo> list = iTopCostInstTpService.selectList(bo);
+        return getDataTable(list);
+    }
+
+    @ApiOperation("查询供应商成本模板所有业务层次列表")
+    @PreAuthorize("@ss.hasPermi('system:tp:list')")
+    @GetMapping("/businessList")
+    public AjaxResult<List<TopCourseEducationTypeVo>> businessList(TopCostInstTpItemQueryBo bo) {
+        List<TopCourseEducationTypeVo> list = iTopCostInstTpItemService.queryEduList(bo);
+        return AjaxResult.success(list);
+    }
+
+
+    /**
+     * 获取供应商成本模板详细信息
+     */
+    @ApiOperation("获取供应商成本模板详细信息")
+    @PreAuthorize("@ss.hasPermi('system:tp:query')")
+    @GetMapping("/{tpId}")
+    public AjaxResult<TopCostInstTpVo> getInfo(@PathVariable("tpId" ) Long tpId) {
+        return AjaxResult.success(iTopCostInstTpService.queryById(tpId));
+    }
+
+    /**
+     * 新增供应商成本模板
+     */
+    @ApiOperation("新增供应商成本模板")
+    @PreAuthorize("@ss.hasPermi('system:tp:add')")
+    @Log(title = "供应商成本模板", businessType = BusinessType.INSERT)
+    @PostMapping()
+    public AjaxResult<Void> add(@RequestBody TopCostInstTpAddBo bo) {
+        return toAjax(iTopCostInstTpService.insertByAddBo(bo) ? 1 : 0);
+    }
+
+    /**
+     * 修改供应商成本模板
+     */
+    @ApiOperation("修改供应商成本模板")
+    @PreAuthorize("@ss.hasPermi('system:tp:edit')")
+    @Log(title = "供应商成本模板", businessType = BusinessType.UPDATE)
+    @PostMapping("/edit")
+    public AjaxResult<Void> edit(@RequestBody TopCostInstTpEditBo bo) {
+        return toAjax(iTopCostInstTpService.updateByEditBo(bo) ? 1 : 0);
+    }
+
+    @ApiOperation("供应商成本模板批量删除")
+    @PreAuthorize("@ss.hasPermi('system:tp:edit')")
+    @Log(title = "供应商成本模板批量删除", businessType = BusinessType.UPDATE)
+    @PostMapping("/deleteBatch")
+    public AjaxResult<Void> deleteBatch(@RequestBody TopCostInstTpQueryBo bo) {
+        return toAjax(iTopCostInstTpService.deleteBatch(bo) ? 1 : 0);
+    }
+
+    @ApiOperation("修改供应商成本模板默认状态")
+    @PreAuthorize("@ss.hasPermi('system:tp:edit')")
+    @Log(title = "修改供应商成本模板默认状态", businessType = BusinessType.UPDATE)
+    @PostMapping("/editDefaultStatus")
+    public AjaxResult<Void> editDefaultStatus(@RequestBody TopCostInstTpEditBo bo) {
+        return toAjax(iTopCostInstTpService.updateDefaultStatus(bo) ? 1 : 0);
+    }
+}

+ 114 - 0
zhongzheng-admin-saas/src/main/java/com/zhongzheng/controller/financial/TopCostTpController.java

@@ -0,0 +1,114 @@
+package com.zhongzheng.controller.financial;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Arrays;
+
+
+import com.zhongzheng.modules.top.financial.bo.TopCostTpAddBo;
+import com.zhongzheng.modules.top.financial.bo.TopCostTpEditBo;
+import com.zhongzheng.modules.top.financial.bo.TopCostTpQueryBo;
+import com.zhongzheng.modules.top.financial.service.ITopCostTpService;
+import com.zhongzheng.modules.top.financial.vo.TopCostTpVo;
+import lombok.RequiredArgsConstructor;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.PutMapping;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import com.zhongzheng.common.annotation.Log;
+import com.zhongzheng.common.core.controller.BaseController;
+import com.zhongzheng.common.core.domain.AjaxResult;
+import com.zhongzheng.common.enums.BusinessType;
+import com.zhongzheng.common.utils.poi.ExcelUtil;
+import com.zhongzheng.common.core.page.TableDataInfo;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+
+/**
+ * 成本模板Controller
+ *
+ * @author ruoyi
+ * @date 2023-04-20
+ */
+@Api(value = "成本模板控制器", tags = {"成本模板管理"})
+@RequiredArgsConstructor(onConstructor_ = @Autowired)
+@RestController
+@RequestMapping("/financial/tp")
+public class TopCostTpController extends BaseController {
+
+    private final ITopCostTpService iTopCostTpService;
+
+    /**
+     * 查询成本模板列表
+     */
+    @ApiOperation("查询成本模板列表")
+    @PreAuthorize("@ss.hasPermi('system:tp:list')")
+    @GetMapping("/list")
+    public TableDataInfo<TopCostTpVo> list(TopCostTpQueryBo bo) {
+        startPage();
+        List<Integer> statusList = new ArrayList<>();
+        statusList.add(0);
+        statusList.add(1);
+        bo.setStatusList(statusList);
+        List<TopCostTpVo> list = iTopCostTpService.selectList(bo);
+        return getDataTable(list);
+    }
+
+
+
+    /**
+     * 获取成本模板详细信息
+     */
+    @ApiOperation("获取成本模板详细信息")
+    @PreAuthorize("@ss.hasPermi('system:tp:query')")
+    @GetMapping("/{tpId}")
+    public AjaxResult<TopCostTpVo> getInfo(@PathVariable("tpId" ) Long tpId) {
+        return AjaxResult.success(iTopCostTpService.queryById(tpId));
+    }
+
+    /**
+     * 新增成本模板
+     */
+    @ApiOperation("新增成本模板")
+    @PreAuthorize("@ss.hasPermi('system:tp:add')")
+    @Log(title = "成本模板", businessType = BusinessType.INSERT)
+    @PostMapping()
+    public AjaxResult<Void> add(@RequestBody TopCostTpAddBo bo) {
+        return toAjax(iTopCostTpService.insertByAddBo(bo) ? 1 : 0);
+    }
+
+    /**
+     * 修改成本模板
+     */
+    @ApiOperation("修改成本模板")
+    @PreAuthorize("@ss.hasPermi('system:tp:edit')")
+    @Log(title = "成本模板", businessType = BusinessType.UPDATE)
+    @PostMapping("/edit")
+    public AjaxResult<Void> edit(@RequestBody TopCostTpEditBo bo) {
+        return toAjax(iTopCostTpService.updateByEditBo(bo) ? 1 : 0);
+    }
+
+
+    @ApiOperation("修改成本模板默认状态")
+    @PreAuthorize("@ss.hasPermi('system:tp:edit')")
+    @Log(title = "成本模板", businessType = BusinessType.UPDATE)
+    @PostMapping("/editDefaultStatus")
+    public AjaxResult<Void> editDefaultStatus(@RequestBody TopCostTpEditBo bo) {
+        return toAjax(iTopCostTpService.updateDefaultStatus(bo) ? 1 : 0);
+    }
+
+
+    @ApiOperation("成本模板批量删除")
+    @PreAuthorize("@ss.hasPermi('system:tp:edit')")
+    @Log(title = "成本模板批量删除", businessType = BusinessType.UPDATE)
+    @PostMapping("/deleteBatch")
+    public AjaxResult<Void> deleteBatch(@RequestBody TopCostTpQueryBo bo) {
+        return toAjax(iTopCostTpService.deleteBatch(bo) ? 1 : 0);
+    }
+}

+ 169 - 0
zhongzheng-admin-saas/src/main/java/com/zhongzheng/controller/financial/TopDivideLogController.java

@@ -0,0 +1,169 @@
+package com.zhongzheng.controller.financial;
+
+import java.util.List;
+import java.util.Arrays;
+import java.util.Map;
+
+import com.zhongzheng.common.constant.UserConstants;
+import com.zhongzheng.common.utils.SecurityUtils;
+import com.zhongzheng.modules.system.bo.SysTenantBadBillConfigBo;
+import com.zhongzheng.modules.top.financial.bo.TopDivideLogEditBo;
+import com.zhongzheng.modules.top.financial.bo.TopDivideLogQueryBo;
+import com.zhongzheng.modules.top.financial.bo.TopDivideOrderQueryBo;
+import com.zhongzheng.modules.top.financial.service.ITopDivideLogService;
+import com.zhongzheng.modules.top.financial.service.ITopDivideOrderService;
+import com.zhongzheng.modules.top.financial.vo.TopDivideLogVo;
+import com.zhongzheng.modules.top.financial.vo.TopDivideOrderVo;
+import com.zhongzheng.modules.top.goods.bo.TopOldOrderEditBo;
+import com.zhongzheng.modules.top.user.vo.TopSysConfigVo;
+import lombok.RequiredArgsConstructor;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.PutMapping;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import com.zhongzheng.common.annotation.Log;
+import com.zhongzheng.common.core.controller.BaseController;
+import com.zhongzheng.common.core.domain.AjaxResult;
+import com.zhongzheng.common.enums.BusinessType;
+import com.zhongzheng.common.utils.poi.ExcelUtil;
+import com.zhongzheng.common.core.page.TableDataInfo;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+
+/**
+ * 分成记录Controller
+ *
+ * @author ruoyi
+ * @date 2023-05-09
+ */
+@Api(value = "分成记录控制器", tags = {"分成记录管理"})
+@RequiredArgsConstructor(onConstructor_ = @Autowired)
+@RestController
+@RequestMapping("/divide/log")
+public class TopDivideLogController extends BaseController {
+
+    private final ITopDivideLogService iTopDivideLogService;
+
+    private final ITopDivideOrderService iTopDivideOrderService;
+
+    /**
+     * 查询分成记录列表
+     */
+    @ApiOperation("查询机构分成记录列表")
+    @PreAuthorize("@ss.hasPermi('system:log:list')")
+    @PostMapping("/companyList")
+    public TableDataInfo<TopDivideLogVo> getCompanyList(@RequestBody TopDivideLogQueryBo bo) {
+        startPage();
+        List<TopDivideLogVo> list = iTopDivideLogService.getCompanyList(bo);
+        return getDataTable(list);
+    }
+
+
+    /**
+     * 分成记录修改备注
+     */
+    @ApiOperation("分成记录修改备注")
+    @PostMapping("/updateRemark")
+    public AjaxResult<Void> updateRemark(@RequestBody TopDivideLogEditBo bo) {
+        return toAjax(iTopDivideLogService.updateRemark(bo) ? 1 : 0);
+    }
+
+
+    @ApiOperation("查询业务员提成列表")
+    @PreAuthorize("@ss.hasPermi('system:log:list')")
+    @PostMapping("/sellerList")
+    public TableDataInfo<TopDivideLogVo> getSellerList(@RequestBody TopDivideLogQueryBo bo) {
+        startPage();
+        List<TopDivideLogVo> list = iTopDivideLogService.getSellerList(bo);
+        return getDataTable(list);
+    }
+
+    @ApiOperation("查询佣金列表")
+    @PreAuthorize("@ss.hasPermi('system:log:list')")
+    @PostMapping("/commissionList")
+    public TableDataInfo<TopDivideOrderVo> getCommissionList(@RequestBody TopDivideOrderQueryBo bo) {
+        startPage();
+        List<TopDivideOrderVo> list = iTopDivideLogService.getCommissionList(bo);
+        return getDataTable(list);
+    }
+
+    @ApiOperation("查询佣金打印")
+    @PreAuthorize("@ss.hasPermi('system:log:list')")
+    @PostMapping("/commissionPrint")
+    public AjaxResult<TopDivideOrderVo> getCommissionPrint(@RequestBody TopDivideOrderQueryBo bo) {
+        TopDivideOrderVo vo = iTopDivideLogService.getCommissionDetail(bo);
+        return AjaxResult.success(vo);
+    }
+
+    @ApiOperation("查询佣金结算列表统计")
+    @PreAuthorize("@ss.hasPermi('system:log:list')")
+    @GetMapping("/commissionOrderCount")
+    public AjaxResult<Map<String,Object>> commissionOrderCount(TopDivideOrderQueryBo bo) {
+        Map<String,Object> map = iTopDivideLogService.getCommissionOrderCount(bo);
+        return AjaxResult.success(map);
+    }
+
+    @ApiOperation("通过坏账配置详情")
+    @GetMapping(value = "/configKey/badBill")
+    public AjaxResult getBadBill()
+    {
+        return AjaxResult.success("配置内容",iTopDivideLogService.getBadBillConfig());
+    }
+
+    @ApiOperation("修改坏账配置")
+    @PostMapping("/updateBadBill")
+    public AjaxResult editBadBill(@Validated @RequestBody List<SysTenantBadBillConfigBo> bo)
+    {
+        return toAjax(iTopDivideLogService.updateBadBillConfig(bo));
+    }
+
+    @ApiOperation("查询月份订单列表")
+    @PreAuthorize("@ss.hasPermi('system:log:list')")
+    @GetMapping("/monthOrderList")
+    public AjaxResult<List<TopDivideOrderVo>> getMonthOrderList(TopDivideOrderQueryBo bo) {
+        List<TopDivideOrderVo> list = iTopDivideOrderService.getMonthOrderList(bo);
+        return AjaxResult.success(list);
+    }
+
+    @ApiOperation("查询月份订单统计")
+    @PreAuthorize("@ss.hasPermi('system:log:list')")
+    @GetMapping("/monthOrderCount")
+    public AjaxResult<Map<String,Object>> getMonthOrderCount(TopDivideOrderQueryBo bo) {
+        Map<String,Object> map = iTopDivideOrderService.getMonthOrderCount(bo);
+        return AjaxResult.success(map);
+    }
+
+    @ApiOperation("查询打印月份订单列表")
+    @PreAuthorize("@ss.hasPermi('system:log:list')")
+    @GetMapping("/monthOrderListWithPrint")
+    public AjaxResult<List<TopDivideOrderVo>> getMonthOrderListWithPrint(TopDivideOrderQueryBo bo) {
+        List<TopDivideOrderVo> list = iTopDivideOrderService.getMonthOrderListWithPrint(bo);
+        return AjaxResult.success(list);
+    }
+
+
+
+    /**
+     * 获取分成记录详细信息
+     */
+    @ApiOperation("获取分成记录详细信息")
+    @PreAuthorize("@ss.hasPermi('system:log:query')")
+    @GetMapping("/{id}")
+    public AjaxResult<TopDivideLogVo> getInfo(@PathVariable("id" ) Long id) {
+        return AjaxResult.success(iTopDivideLogService.queryById(id));
+    }
+
+    @ApiOperation("获取分成记录单据打印详细信息")
+    @PreAuthorize("@ss.hasPermi('system:log:query')")
+    @GetMapping("/withPrint/{id}")
+    public AjaxResult<TopDivideLogVo> getInfoWithPrint(@PathVariable("id" ) Long id) {
+        return AjaxResult.success(iTopDivideLogService.queryByIdWithPrint(id));
+    }
+}

+ 86 - 0
zhongzheng-admin-saas/src/main/java/com/zhongzheng/controller/financial/TopOrderRecNoteController.java

@@ -0,0 +1,86 @@
+package com.zhongzheng.controller.financial;
+
+import java.util.List;
+import java.util.Arrays;
+
+import com.zhongzheng.modules.top.order.bo.TopOrderRecNoteAddBo;
+import com.zhongzheng.modules.top.order.bo.TopOrderRecNoteEditBo;
+import com.zhongzheng.modules.top.order.bo.TopOrderRecNoteQueryBo;
+import com.zhongzheng.modules.top.order.service.ITopOrderRecNoteService;
+import com.zhongzheng.modules.top.order.vo.TopOrderRecNoteVo;
+import lombok.RequiredArgsConstructor;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.PutMapping;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import com.zhongzheng.common.annotation.Log;
+import com.zhongzheng.common.core.controller.BaseController;
+import com.zhongzheng.common.core.domain.AjaxResult;
+import com.zhongzheng.common.enums.BusinessType;
+import com.zhongzheng.common.utils.poi.ExcelUtil;
+import com.zhongzheng.common.core.page.TableDataInfo;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+
+/**
+ * 订单收款提醒Controller
+ *
+ * @author hjl
+ * @date 2023-04-24
+ */
+@Api(value = "订单收款提醒控制器", tags = {"订单收款提醒管理"})
+@RequiredArgsConstructor(onConstructor_ = @Autowired)
+@RestController
+@RequestMapping("/receive/order/note")
+public class TopOrderRecNoteController extends BaseController {
+
+    private final ITopOrderRecNoteService iTopOrderRecNoteService;
+
+
+
+    /**
+     * 获取订单收款提醒详细信息
+     */
+    @ApiOperation("获取订单收款提醒详细信息")
+    @PreAuthorize("@ss.hasPermi('system:note:query')")
+    @GetMapping("/{id}")
+    public AjaxResult<TopOrderRecNoteVo> getInfo(@PathVariable("id" ) Long id) {
+        return AjaxResult.success(iTopOrderRecNoteService.queryById(id));
+    }
+
+    /**
+     * 新增订单收款提醒
+     */
+    @ApiOperation("新增订单收款提醒")
+    @PreAuthorize("@ss.hasPermi('system:note:add')")
+    @Log(title = "订单收款提醒", businessType = BusinessType.INSERT)
+    @PostMapping()
+    public AjaxResult<Void> add(@RequestBody TopOrderRecNoteAddBo bo) {
+        return toAjax(iTopOrderRecNoteService.insertByAddBo(bo) ? 1 : 0);
+    }
+
+    /**
+     * 修改订单收款提醒
+     */
+    @ApiOperation("修改订单收款提醒")
+    @PreAuthorize("@ss.hasPermi('system:note:edit')")
+    @Log(title = "订单收款提醒", businessType = BusinessType.UPDATE)
+    @PostMapping("/edit")
+    public AjaxResult<Void> edit(@RequestBody TopOrderRecNoteEditBo bo) {
+        return toAjax(iTopOrderRecNoteService.updateByEditBo(bo) ? 1 : 0);
+    }
+
+    @ApiOperation("批量修改订单收款提醒")
+    @PreAuthorize("@ss.hasPermi('system:note:edit')")
+    @Log(title = "批量修改订单收款提醒", businessType = BusinessType.UPDATE)
+    @PostMapping("/editBatch")
+    public AjaxResult<Void> editBatch(@RequestBody List<TopOrderRecNoteEditBo> bo) {
+        return toAjax(iTopOrderRecNoteService.updateByBatchEditBo(bo) ? 1 : 0);
+    }
+}

+ 62 - 0
zhongzheng-admin-saas/src/main/java/com/zhongzheng/controller/goods/TopGoodsController.java

@@ -0,0 +1,62 @@
+package com.zhongzheng.controller.goods;
+
+import com.zhongzheng.common.core.controller.BaseController;
+import com.zhongzheng.common.core.domain.AjaxResult;
+import com.zhongzheng.common.core.page.TableDataInfo;
+import com.zhongzheng.modules.goods.vo.TopGoodsVo;
+import com.zhongzheng.modules.top.goods.bo.TopGoodsQueryBo;
+import com.zhongzheng.modules.top.goods.service.ITopGoodsService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.RequiredArgsConstructor;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.List;
+
+/**
+ * 商品Controller
+ *
+ * @author hjl
+ * @date 2021-10-12
+ */
+@Api(value = "商品控制器", tags = {"商品管理"})
+@RequiredArgsConstructor(onConstructor_ = @Autowired)
+@RestController
+@RequestMapping("/goods")
+public class TopGoodsController extends BaseController {
+
+    private final ITopGoodsService iTopGoodsService;
+
+    /**
+     * 商品批量复制
+     */
+    @ApiOperation("商品批量复制(全量)")
+    @GetMapping("/batch/copy/all")
+    public AjaxResult<Void> goodsBatchCopyTenant() {
+        return toAjax(iTopGoodsService.goodsBatchCopyTenant() ? 1 : 0);
+    }
+
+    /**
+     * 商品关系ID处理(全量复制后的处理方法)
+     */
+    @ApiOperation("商品关系ID处理(全量复制后的处理方法)")
+    @GetMapping("/batch/copy/dispose")
+    public AjaxResult<Void> goodsBatchCopyDisposeTenant() {
+        return toAjax(iTopGoodsService.goodsBatchCopyDisposeTenant() ? 1 : 0);
+    }
+
+    /**
+     * 查询商品列表
+     */
+    @ApiOperation("查询商品列表")
+    @GetMapping("/list")
+    public TableDataInfo<TopGoodsVo> list(TopGoodsQueryBo bo) {
+        startPage();
+        List<TopGoodsVo> list = iTopGoodsService.selectList(bo);
+        return getDataTable(list);
+    }
+
+}

+ 112 - 0
zhongzheng-admin-saas/src/main/java/com/zhongzheng/controller/inform/TopInformSysUserController.java

@@ -0,0 +1,112 @@
+package com.zhongzheng.controller.inform;
+
+import com.zhongzheng.common.annotation.Log;
+import com.zhongzheng.common.core.controller.BaseController;
+import com.zhongzheng.common.core.domain.AjaxResult;
+import com.zhongzheng.common.core.domain.model.TopLoginUser;
+import com.zhongzheng.common.core.page.TableDataInfo;
+import com.zhongzheng.common.enums.BusinessType;
+import com.zhongzheng.common.utils.ServletUtils;
+import com.zhongzheng.framework.web.service.TopTokenService;
+import com.zhongzheng.modules.top.financial.bo.TopInformSysUserAddBo;
+import com.zhongzheng.modules.top.financial.bo.TopInformSysUserEditBo;
+import com.zhongzheng.modules.top.financial.bo.TopInformSysUserQueryBo;
+import com.zhongzheng.modules.top.financial.service.ITopInformSysUserService;
+import com.zhongzheng.modules.top.financial.vo.TopInformSysUserVo;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.RequiredArgsConstructor;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+/**
+ * 通知绑定系统用户Controller
+ *
+ * @author hjl
+ * @date 2022-08-04
+ */
+@Api(value = "通知绑定系统用户控制器", tags = {"通知绑定系统用户管理"})
+@RequiredArgsConstructor(onConstructor_ = @Autowired)
+@RestController
+@RequestMapping("/inform/sys_user")
+public class TopInformSysUserController extends BaseController {
+
+    private final ITopInformSysUserService iInformSysUserService;
+
+    private final TopTokenService tokenService;
+
+    /**
+     * 查询通知绑定系统用户列表
+     */
+    @ApiOperation("查询通知绑定系统用户列表")
+    @PreAuthorize("@ss.hasPermi('system:user:list')")
+    @GetMapping("/list")
+    public TableDataInfo<TopInformSysUserVo> list(TopInformSysUserQueryBo bo) {
+        TopLoginUser TopLoginUser = tokenService.getLoginUser(ServletUtils.getRequest());
+        bo.setUserId(TopLoginUser.getUser().getUserId());
+        startPage();
+        List<TopInformSysUserVo> list = iInformSysUserService.queryList(bo);
+        return getDataTable(list);
+    }
+
+    /**
+     * 获取通知绑定系统用户详细信息
+     */
+    @ApiOperation("获取通知绑定教务用户未读消息数量")
+    @PreAuthorize("@ss.hasPermi('system:user:query')")
+    @GetMapping("/informUnReadSum")
+    public AjaxResult<Integer> informUnReadSum() {
+        TopLoginUser TopLoginUser = tokenService.getLoginUser(ServletUtils.getRequest());
+        return AjaxResult.success(iInformSysUserService.informUnReadSum(TopLoginUser.getUser().getUserId()));
+    }
+
+
+
+    /**
+     * 获取通知绑定系统用户详细信息
+     */
+    @ApiOperation("获取通知绑定系统用户详细信息")
+    @PreAuthorize("@ss.hasPermi('system:user:query')")
+    @GetMapping("/{id}")
+    public AjaxResult<TopInformSysUserVo> getInfo(@PathVariable("id" ) Long id) {
+        return AjaxResult.success(iInformSysUserService.queryById(id));
+    }
+
+    /**
+     * 新增通知绑定系统用户
+     */
+    @ApiOperation("新增通知绑定系统用户")
+    @PreAuthorize("@ss.hasPermi('system:user:add')")
+    @Log(title = "通知绑定系统用户", businessType = BusinessType.INSERT)
+    @PostMapping()
+    public AjaxResult<Void> add(@RequestBody TopInformSysUserAddBo bo) {
+        return toAjax(iInformSysUserService.insertByAddBo(bo) ? 1 : 0);
+    }
+
+    /**
+     * 修改通知绑定系统用户
+     */
+    @ApiOperation("修改通知绑定系统用户")
+    @PreAuthorize("@ss.hasPermi('system:user:edit')")
+    @Log(title = "通知绑定系统用户", businessType = BusinessType.UPDATE)
+    @PostMapping("/edit")
+    public AjaxResult<Void> edit(@RequestBody TopInformSysUserEditBo bo) {
+        return toAjax(iInformSysUserService.updateByEditBo(bo) ? 1 : 0);
+    }
+
+
+    /**
+     * 修改通知绑定系统用户
+     */
+    @ApiOperation("批量修改通知绑定系统用户状态")
+    @PreAuthorize("@ss.hasPermi('system:user:edit')")
+    @Log(title = "批量修改通知绑定系统用户状态", businessType = BusinessType.UPDATE)
+    @PostMapping("/updateReadStatusBatch")
+    public AjaxResult<Void> updateReadStatusBatch(@RequestBody TopInformSysUserEditBo bo) {
+        return toAjax(iInformSysUserService.updateReadStatusBatch(bo) ? 1 : 0);
+    }
+
+}

+ 112 - 0
zhongzheng-admin-saas/src/main/java/com/zhongzheng/controller/mall/TopStoreController.java

@@ -0,0 +1,112 @@
+package com.zhongzheng.controller.mall;
+
+import java.util.List;
+import java.util.Arrays;
+
+import com.zhongzheng.modules.top.mall.bo.TopStoreAddBo;
+import com.zhongzheng.modules.top.mall.bo.TopStoreEditBo;
+import com.zhongzheng.modules.top.mall.bo.TopStoreQueryBo;
+import com.zhongzheng.modules.top.mall.service.ITopStoreService;
+import com.zhongzheng.modules.top.mall.vo.TopStoreVo;
+import lombok.RequiredArgsConstructor;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.PutMapping;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import com.zhongzheng.common.annotation.Log;
+import com.zhongzheng.common.core.controller.BaseController;
+import com.zhongzheng.common.core.domain.AjaxResult;
+import com.zhongzheng.common.enums.BusinessType;
+import com.zhongzheng.common.utils.poi.ExcelUtil;
+import com.zhongzheng.common.core.page.TableDataInfo;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+
+/**
+ * 商户店铺管理Controller
+ *
+ * @author hjl
+ * @date 2023-05-18
+ */
+@Api(value = "商户店铺管理控制器", tags = {"商户店铺管理管理"})
+@RequiredArgsConstructor(onConstructor_ = @Autowired)
+@RestController
+@RequestMapping("/mall/store")
+public class TopStoreController extends BaseController {
+
+    private final ITopStoreService iTopStoreService;
+
+    /**
+     * 查询商户店铺管理列表
+     */
+    @ApiOperation("查询商户店铺管理列表")
+    @PreAuthorize("@ss.hasPermi('system:store:list')")
+    @GetMapping("/list")
+    public TableDataInfo<TopStoreVo> list(TopStoreQueryBo bo) {
+        startPage();
+        List<TopStoreVo> list = iTopStoreService.queryList(bo);
+        return getDataTable(list);
+    }
+
+    /**
+     * 导出商户店铺管理列表
+     */
+    @ApiOperation("导出商户店铺管理列表")
+    @PreAuthorize("@ss.hasPermi('system:store:export')")
+    @Log(title = "商户店铺管理", businessType = BusinessType.EXPORT)
+    @GetMapping("/export")
+    public AjaxResult<TopStoreVo> export(TopStoreQueryBo bo) {
+        List<TopStoreVo> list = iTopStoreService.queryList(bo);
+        ExcelUtil<TopStoreVo> util = new ExcelUtil<TopStoreVo>(TopStoreVo.class);
+        return util.exportExcel(list, "商户店铺管理");
+    }
+
+    /**
+     * 获取商户店铺管理详细信息
+     */
+    @ApiOperation("获取商户店铺管理详细信息")
+    @PreAuthorize("@ss.hasPermi('system:store:query')")
+    @GetMapping("/{storeId}")
+    public AjaxResult<TopStoreVo> getInfo(@PathVariable("storeId" ) Long storeId) {
+        return AjaxResult.success(iTopStoreService.queryById(storeId));
+    }
+
+    /**
+     * 新增商户店铺管理
+     */
+    @ApiOperation("新增商户店铺管理")
+    @PreAuthorize("@ss.hasPermi('system:store:add')")
+    @Log(title = "商户店铺管理", businessType = BusinessType.INSERT)
+    @PostMapping()
+    public AjaxResult<Void> add(@RequestBody TopStoreAddBo bo) {
+        return toAjax(iTopStoreService.insertByAddBo(bo) ? 1 : 0);
+    }
+
+    /**
+     * 修改商户店铺管理
+     */
+    @ApiOperation("修改商户店铺管理")
+    @PreAuthorize("@ss.hasPermi('system:store:edit')")
+    @Log(title = "商户店铺管理", businessType = BusinessType.UPDATE)
+    @PostMapping("/edit")
+    public AjaxResult<Void> edit(@RequestBody TopStoreEditBo bo) {
+        return toAjax(iTopStoreService.updateByEditBo(bo) ? 1 : 0);
+    }
+
+    /**
+     * 删除商户店铺管理
+     */
+    @ApiOperation("删除商户店铺管理")
+    @PreAuthorize("@ss.hasPermi('system:store:remove')")
+    @Log(title = "商户店铺管理" , businessType = BusinessType.DELETE)
+    @DeleteMapping("/{storeIds}")
+    public AjaxResult<Void> remove(@PathVariable Long[] storeIds) {
+        return toAjax(iTopStoreService.deleteWithValidByIds(Arrays.asList(storeIds), true) ? 1 : 0);
+    }
+}

+ 125 - 0
zhongzheng-admin-saas/src/main/java/com/zhongzheng/controller/order/TopOldOrderCheckLogController.java

@@ -0,0 +1,125 @@
+package com.zhongzheng.controller.order;
+
+import java.util.List;
+import java.util.Arrays;
+
+import com.zhongzheng.common.core.domain.model.TopLoginUser;
+import com.zhongzheng.common.utils.ServletUtils;
+import com.zhongzheng.framework.web.service.TopTokenService;
+import com.zhongzheng.modules.top.goods.bo.TopOldOrderCheckLogAddBo;
+import com.zhongzheng.modules.top.goods.bo.TopOldOrderCheckLogEditBo;
+import com.zhongzheng.modules.top.goods.bo.TopOldOrderCheckLogQueryBo;
+import com.zhongzheng.modules.top.goods.service.ITopOldOrderCheckLogService;
+import com.zhongzheng.modules.top.goods.vo.TopOldOrderCheckLogVo;
+import lombok.RequiredArgsConstructor;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.PutMapping;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import com.zhongzheng.common.annotation.Log;
+import com.zhongzheng.common.core.controller.BaseController;
+import com.zhongzheng.common.core.domain.AjaxResult;
+import com.zhongzheng.common.enums.BusinessType;
+import com.zhongzheng.common.utils.poi.ExcelUtil;
+import com.zhongzheng.common.core.page.TableDataInfo;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+
+/**
+ * 订单退款审核记录Controller
+ *
+ * @author ruoyi
+ * @date 2023-04-26
+ */
+@Api(value = "订单退款审核记录控制器", tags = {"订单退款审核记录管理"})
+@RequiredArgsConstructor(onConstructor_ = @Autowired)
+@RestController
+@RequestMapping("/check/order/log")
+public class TopOldOrderCheckLogController extends BaseController {
+
+    private final ITopOldOrderCheckLogService iTopOldOrderCheckLogService;
+
+    private final TopTokenService tokenService;
+
+    /**
+     * 查询订单退款审核记录列表
+     */
+    @ApiOperation("查询审核记录列表")
+    @PreAuthorize("@ss.hasPermi('system:log:list')")
+    @GetMapping("/list")
+    public TableDataInfo<TopOldOrderCheckLogVo> list(TopOldOrderCheckLogQueryBo bo) {
+        startPage();
+        List<TopOldOrderCheckLogVo> list = iTopOldOrderCheckLogService.getCheckList(bo);
+        return getDataTable(list);
+    }
+
+
+
+    /**
+     * 获取订单退款审核记录详细信息
+     */
+    @ApiOperation("获取订单退款审核记录详细信息")
+    @PreAuthorize("@ss.hasPermi('system:log:query')")
+    @GetMapping("/{id}")
+    public AjaxResult<TopOldOrderCheckLogVo> getInfo(@PathVariable("id" ) Long id) {
+        return AjaxResult.success(iTopOldOrderCheckLogService.queryById(id));
+    }
+
+    /**
+     * 新增订单退款审核记录
+     */
+    @ApiOperation("新增订单退款审核记录")
+    @PreAuthorize("@ss.hasPermi('system:log:add')")
+    @Log(title = "订单退款审核记录", businessType = BusinessType.INSERT)
+    @PostMapping()
+    public AjaxResult<Void> add(@RequestBody TopOldOrderCheckLogAddBo bo) {
+        return toAjax(iTopOldOrderCheckLogService.insertByAddBo(bo) ? 1 : 0);
+    }
+
+    /**
+     * 修改订单退款审核记录
+     */
+    @ApiOperation("修改订单分成审核记录")
+    @PreAuthorize("@ss.hasPermi('system:log:edit')")
+    @Log(title = "订单退款审核记录", businessType = BusinessType.UPDATE)
+    @PostMapping("/editDivide")
+    public AjaxResult<Void> editDivide(@RequestBody TopOldOrderCheckLogEditBo bo) {
+        TopLoginUser loginUser = tokenService.getLoginUser(ServletUtils.getRequest());
+        bo.setLoginId(loginUser.getUser().getUserId());
+        bo.setLoginName(loginUser.getUser().getUserName());
+        return toAjax(iTopOldOrderCheckLogService.updateDivideByEditBo(bo) ? 1 : 0);
+    }
+
+
+    @ApiOperation("批量修改订单分成审核记录")
+    @PreAuthorize("@ss.hasPermi('system:log:edit')")
+    @Log(title = "批量修改订单分成审核记录", businessType = BusinessType.UPDATE)
+    @PostMapping("/updateBatchDivideByEditBo")
+    public AjaxResult<Void> updateBatchDivideByEditBo(@RequestBody List<TopOldOrderCheckLogEditBo> bo) {
+        TopLoginUser loginUser = tokenService.getLoginUser(ServletUtils.getRequest());
+        for(TopOldOrderCheckLogEditBo editBo : bo){
+            editBo.setLoginId(loginUser.getUser().getUserId());
+            editBo.setLoginName(loginUser.getUser().getUserName());
+        }
+        return toAjax(iTopOldOrderCheckLogService.updateBatchDivideByEditBo(bo) ? 1 : 0);
+    }
+
+    @ApiOperation("批量修改月份分成审核记录")
+    @PreAuthorize("@ss.hasPermi('system:log:edit')")
+    @Log(title = "批量修改月份分成审核记录", businessType = BusinessType.UPDATE)
+    @PostMapping("/updateBatchDivideByMonthEditBo")
+    public AjaxResult<Void> updateBatchDivideByMonthEditBo(@RequestBody List<TopOldOrderCheckLogEditBo> bo) {
+        TopLoginUser loginUser = tokenService.getLoginUser(ServletUtils.getRequest());
+        for(TopOldOrderCheckLogEditBo editBo : bo){
+            editBo.setLoginId(loginUser.getUser().getUserId());
+            editBo.setLoginName(loginUser.getUser().getUserName());
+        }
+        return toAjax(iTopOldOrderCheckLogService.updateBatchDivideByMonthEditBo(bo) ? 1 : 0);
+    }
+}

+ 362 - 0
zhongzheng-admin-saas/src/main/java/com/zhongzheng/controller/order/TopOldOrderController.java

@@ -0,0 +1,362 @@
+package com.zhongzheng.controller.order;
+
+import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
+import com.zhongzheng.common.core.controller.BaseController;
+import com.zhongzheng.common.core.domain.AjaxResult;
+import com.zhongzheng.common.core.domain.model.TopLoginUser;
+import com.zhongzheng.common.core.page.TableDataInfo;
+import com.zhongzheng.common.utils.ServletUtils;
+import com.zhongzheng.common.utils.poi.EasyPoiUtil;
+import com.zhongzheng.common.utils.poi.ExcelUtil;
+import com.zhongzheng.framework.web.service.TopTokenService;
+import com.zhongzheng.modules.bank.vo.QuestionImportV2;
+import com.zhongzheng.modules.top.financial.bo.OrderRefundPayBo;
+import com.zhongzheng.modules.top.financial.bo.TopDivideLogQueryBo;
+import com.zhongzheng.modules.top.financial.bo.TopDivideOrderQueryBo;
+import com.zhongzheng.modules.top.financial.vo.OrderRefundPayDetailVo;
+import com.zhongzheng.modules.top.financial.vo.TopCostTpVo;
+import com.zhongzheng.modules.top.financial.vo.TopOrderLogVo;
+import com.zhongzheng.modules.top.goods.bo.*;
+import com.zhongzheng.modules.top.goods.service.ITopOldOrderService;
+import com.zhongzheng.modules.top.goods.vo.*;
+import com.zhongzheng.modules.top.order.bo.TopOldOrderCustomerBo;
+import com.zhongzheng.modules.top.order.vo.TopOldOrderCommissionExportVo;
+import com.zhongzheng.modules.top.order.vo.TopOldOrderCompanyExportVo;
+import com.zhongzheng.modules.top.order.vo.TopOldOrderSellerExportVo;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.RequiredArgsConstructor;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 订单Controller
+ *
+ * @author ruoyi
+ * @date 2023-04-20
+ */
+@Api(value = "订单控制器", tags = {"订单管理"})
+@RequiredArgsConstructor(onConstructor_ = @Autowired)
+@RestController
+@RequestMapping("/system/top/order")
+public class TopOldOrderController extends BaseController {
+
+    private final ITopOldOrderService iTopOldOrderService;
+
+    private final TopTokenService tokenService;
+
+    /**
+     * 查询订单列表
+     */
+    @ApiOperation("查询订单列表")
+    @GetMapping("/list")
+    public TableDataInfo<TopOldOrderVo> list(TopOldOrderQueryBo bo) {
+        TopLoginUser loginUser = tokenService.getLoginUser(ServletUtils.getRequest());
+        bo.setLoginId(loginUser.getUser().getUserId());
+        startPage();
+        List<TopOldOrderVo> list = iTopOldOrderService.queryList(bo);
+        return getDataTable(list);
+    }
+
+    /**
+     * 导出订单列表
+     */
+    @ApiOperation("导出订单列表")
+    @GetMapping("/export")
+    public AjaxResult<TopOldOrderVo> export(TopOldOrderQueryBo bo) {
+
+        List<TopOldOrderVo> list = iTopOldOrderService.queryList(bo);
+        ExcelUtil<TopOldOrderVo> util = new ExcelUtil<TopOldOrderVo>(TopOldOrderVo.class);
+        return util.exportExcel(list, "订单信息");
+    }
+
+    /**
+     * 获取订单详细信息
+     */
+    @ApiOperation("获取订单详细信息")
+    @GetMapping("/{orderSn}")
+    public AjaxResult<TopOldOrderVo> getInfo(@PathVariable("orderSn" ) String orderSn) {
+        return AjaxResult.success(iTopOldOrderService.queryById(orderSn));
+    }
+
+    /**
+     * 获取订单商品信息
+     */
+    @ApiOperation("获取订单商品信息")
+    @GetMapping("/goods/list")
+    public TableDataInfo<TopOldOrderGoodsListVo> getOrderGoodsList(TopOldOrderGoodsQuery query) {
+        startPage();
+        List<TopOldOrderGoodsListVo> list = iTopOldOrderService.getOrderGoodsList(query);
+        return getDataTable(list);
+    }
+
+    /**
+     * 订单学员审核列表
+     */
+    @ApiOperation("订单学员审核列表")
+    @GetMapping("/goods/apply/list/{orderSn}")
+    public AjaxResult<TopOldOrderUpVo> getOrderGoodsApplyList(@PathVariable("orderSn" ) String orderSn) {
+        return AjaxResult.success(iTopOldOrderService.getOrderGoodsApplyList(orderSn));
+    }
+
+    /**
+     * 订单发票信息
+     */
+    @ApiOperation("订单发票信息")
+    @GetMapping("/invoice/list/{orderSn}")
+    public AjaxResult<List<TopOldOrderInvoiceVo>> getOrderInvoiceList(@PathVariable("orderSn" ) String orderSn) {
+        return AjaxResult.success(iTopOldOrderService.getOrderInvoiceList(orderSn));
+    }
+
+    /**
+     * 订单学员信息导出
+     */
+    @ApiOperation("订单学员信息导出")
+    @GetMapping("/student/export")
+    public AjaxResult<TopOldOrderGoodsListVo> exportStudent(TopOldOrderGoodsQuery bo) {
+        List<TopOldOrderGoodsListVo> list = iTopOldOrderService.getOrderGoodsList(bo);
+        ExcelUtil<TopOldOrderGoodsListVo> util = new ExcelUtil<TopOldOrderGoodsListVo>(TopOldOrderGoodsListVo.class);
+        return util.exportExcel(list, "订单学员信息");
+    }
+
+    /**
+     * 新增订单
+     */
+    @ApiOperation("新增订单")
+    @PostMapping()
+    public AjaxResult<Void> add(@RequestBody TopOldOrderAddBo bo) {
+        return toAjax(iTopOldOrderService.insertByAddBo(bo) ? 1 : 0);
+    }
+
+    /**
+     * 修改订单
+     */
+    @ApiOperation("修改订单")
+    @PostMapping("/edit")
+    public AjaxResult<Void> edit(@RequestBody TopOldOrderEditBo bo) {
+        return toAjax(iTopOldOrderService.updateByEditBo(bo) ? 1 : 0);
+    }
+
+    /**
+     * 订单审核
+     */
+    @ApiOperation("订单审核")
+    @PostMapping("/check")
+    public AjaxResult<Void> checkOrder(@RequestBody TopOldOrderCheckBo bo) {
+        TopLoginUser loginUser = tokenService.getLoginUser(ServletUtils.getRequest());
+        bo.setLoginId(loginUser.getUser().getUserId());
+        bo.setLoginName(loginUser.getUser().getUserName());
+        return toAjax(iTopOldOrderService.checkOrder(bo) ? 1 : 0);
+    }
+
+    /**
+     * 订单学员审核
+     */
+    @ApiOperation("订单学员审核")
+    @PostMapping("/check/student")
+    public AjaxResult<Void> checkOrderStudent(@RequestBody TopOldOrderCheckBo bo) {
+        TopLoginUser loginUser = tokenService.getLoginUser(ServletUtils.getRequest());
+        bo.setLoginId(loginUser.getUser().getUserId());
+        bo.setLoginName(loginUser.getUser().getUserName());
+        return toAjax(iTopOldOrderService.checkOrderStudent(bo) ? 1 : 0);
+    }
+
+
+    @ApiOperation("业务员提成列表")
+    @PreAuthorize("@ss.hasPermi('system:tp:list')")
+    @GetMapping("/divSellerList")
+    public TableDataInfo<TopOldOrderVo> divSellerList(TopOldOrderQueryBo bo) {
+        startPage();
+        List<TopOldOrderVo> list = iTopOldOrderService.queryDivSellerList(bo);
+        return getDataTable(list);
+    }
+
+    @ApiOperation("业务员提成列表导出")
+    @PreAuthorize("@ss.hasPermi('system:tp:list')")
+    @GetMapping("/sellerListExport")
+    public AjaxResult<List<TopOldOrderSellerExportVo>> sellerListExport(TopDivideLogQueryBo bo) {
+        List<TopOldOrderSellerExportVo> list = iTopOldOrderService.sellerListExport(bo);
+        ExcelUtil<TopOldOrderSellerExportVo> util = new ExcelUtil<TopOldOrderSellerExportVo>(TopOldOrderSellerExportVo.class);
+        return util.exportExcel(list, "机构分成列表");
+    }
+
+    @ApiOperation("佣金结算列表导出")
+    @PreAuthorize("@ss.hasPermi('system:tp:list')")
+    @GetMapping("/commissionListExport")
+    public AjaxResult<List<TopOldOrderSellerExportVo>> commissionListExport(TopDivideOrderQueryBo bo) {
+        List<TopOldOrderCommissionExportVo> list = iTopOldOrderService.commissionListExport(bo);
+
+        ExcelUtil<TopOldOrderCommissionExportVo> util = new ExcelUtil<TopOldOrderCommissionExportVo>(TopOldOrderCommissionExportVo.class);
+        return util.exportExcel(list, "佣金结算列表");
+    }
+
+
+
+    @ApiOperation("机构分成列表")
+    @PreAuthorize("@ss.hasPermi('system:tp:list')")
+    @GetMapping("/queryTenantList")
+    public TableDataInfo<TopOldOrderVo> queryTenantList(TopOldOrderQueryBo bo) {
+        startPage();
+        List<TopOldOrderVo> list = iTopOldOrderService.queryTenantList(bo);
+        return getDataTable(list);
+    }
+
+    @ApiOperation("机构分成列表导出")
+    @PreAuthorize("@ss.hasPermi('system:tp:list')")
+    @GetMapping("/tenantListExport")
+    public AjaxResult<List<TopOldOrderCompanyExportVo>> tenantListExport(TopDivideLogQueryBo bo) {
+        List<TopOldOrderCompanyExportVo> list = iTopOldOrderService.tenantListExport(bo);
+        ExcelUtil<TopOldOrderCompanyExportVo> util = new ExcelUtil<TopOldOrderCompanyExportVo>(TopOldOrderCompanyExportVo.class);
+        return util.exportExcel(list, "机构分成列表");
+    }
+
+    /**
+     * 订单修改备注
+     */
+    @ApiOperation("订单修改备注")
+    @PostMapping("/updateRemark")
+    public AjaxResult<Void> updateRemark(@RequestBody TopOldOrderEditBo bo) {
+        return toAjax(iTopOldOrderService.updateRemark(bo) ? 1 : 0);
+    }
+
+    /**
+     * 订单退款审核详情
+     */
+    @ApiOperation("订单退款审核详情")
+    @GetMapping("/refund/detail/{orderSn}")
+    public AjaxResult<TopRefundOrderDetailVo> refundOrderDetail(@PathVariable("orderSn") String orderSn) {
+        return AjaxResult.success(iTopOldOrderService.refundOrderDetail(orderSn));
+    }
+
+
+    /**
+     * 订单退款审核
+     */
+    @ApiOperation("订单退款审核")
+    @PostMapping("/refund/check")
+    public AjaxResult<Void> refundOrderCheck(@RequestBody TopRefundOrderCheckBo bo) {
+        TopLoginUser loginUser = tokenService.getLoginUser(ServletUtils.getRequest());
+        bo.setLoginId(loginUser.getUser().getUserId());
+        bo.setLoginName(loginUser.getUser().getUserName());
+        return toAjax(iTopOldOrderService.refundOrderCheck(bo) ? 1 : 0);
+    }
+
+    /**
+     * 批量修改订单备注
+     */
+    @ApiOperation("批量修改订单备注")
+    @PostMapping("/update/remark")
+    public AjaxResult<Void> updateRemark(@RequestBody TopUpdateRemarkBo bo) {
+        return toAjax(iTopOldOrderService.updateFinanceRemark(bo) ? 1 : 0);
+    }
+
+    /**
+     * 批量完单
+     */
+    @ApiOperation("批量完单")
+    @PostMapping("/finish")
+    public AjaxResult<Void> finishOrder(@RequestBody TopFinishOrderBo bo) {
+        TopLoginUser loginUser = tokenService.getLoginUser(ServletUtils.getRequest());
+        bo.setLoginId(loginUser.getUser().getUserId());
+        bo.setLoginName(loginUser.getUser().getUserName());
+        return toAjax(iTopOldOrderService.finishOrder(bo) ? 1 : 0);
+    }
+
+    /**
+     * 订单统计
+     */
+    @ApiOperation("订单统计")
+    @GetMapping("/statistics")
+    public AjaxResult<TopOrderStatisticsVo> statisticsOrder(TopOldOrderQueryBo bo) {
+        return AjaxResult.success(iTopOldOrderService.statisticsOrder(bo));
+    }
+
+    @ApiOperation("订单应收应付统计")
+    @PostMapping("/countOrderNum")
+    public AjaxResult<Map<String, Object>> countOrderNum(@RequestBody TopOldOrderQueryBo bo) {
+        return AjaxResult.success(iTopOldOrderService.countOrderNum(bo));
+    }
+
+    /**
+     * 订单成本
+     */
+    @ApiOperation("获取订单成本设置")
+    @GetMapping("/cost/{orderSn}")
+    public AjaxResult<TopCostTpVo> getOrderCost(@PathVariable("orderSn") String orderSn) {
+        return AjaxResult.success(iTopOldOrderService.getOrderCost(orderSn));
+    }
+
+    /**
+     * 订单成本修改
+     */
+    @ApiOperation("批量订单成本修改")
+    @PostMapping("/update/cost")
+    public AjaxResult<Void> updateOrderCost(@RequestBody TopUpdateCostBo bo) {
+        return toAjax(iTopOldOrderService.updateOrderCost(bo) ? 1 : 0);
+    }
+
+
+    @ApiOperation("订单分成审核详情")
+    @GetMapping("/divide/detail")
+    public AjaxResult<TopOldOrderVo> divideOrderDetail(TopOldOrderCheckLogQueryBo bo) {
+        return AjaxResult.success(iTopOldOrderService.divideOrderDetail(bo));
+    }
+
+    /**
+     * 订单操作记录
+     */
+    @ApiOperation("订单操作记录")
+    @GetMapping("/log")
+    public TableDataInfo<TopOrderLogVo> logList(TopOldOrderQueryBo bo) {
+        startPage();
+        List<TopOrderLogVo> list = iTopOldOrderService.logList(bo);
+        return getDataTable(list);
+    }
+
+    /**
+     * 订单退款支付
+     */
+    @ApiOperation("订单退款支付")
+    @PostMapping("/refund/pay")
+    public AjaxResult<Void> orderRefundPay(@RequestBody OrderRefundPayBo bo) {
+        TopLoginUser loginUser = tokenService.getLoginUser(ServletUtils.getRequest());
+        bo.setLoginId(loginUser.getUser().getUserId());
+        bo.setLoginName(loginUser.getUser().getUserName());
+        return toAjax(iTopOldOrderService.orderRefundPay(bo) ? 1 : 0);
+    }
+
+    /**
+     * 机构账号信息
+     */
+    @ApiOperation("机构账号信息")
+    @GetMapping("/refund/pay/detail/{orderSn}")
+    public AjaxResult<OrderRefundPayDetailVo> getOrderRefundPayDetail(@PathVariable("orderSn")String orderSn) {
+        return AjaxResult.success(iTopOldOrderService.getOrderRefundPayDetail(orderSn));
+    }
+
+    /**
+     * 订单导入
+     */
+    @ApiOperation("订单导入")
+    @PostMapping("/customer/import")
+    public AjaxResult importOldOrderCustomer(MultipartFile file) {
+        List<TopOldOrderCustomerBo> customerBos = EasyPoiUtil.importExcel(file,0,1,TopOldOrderCustomerBo.class);
+        iTopOldOrderService.importOldOrderCustomer(customerBos);
+        return AjaxResult.success();
+    }
+
+    /**
+     * 订单发票上传
+     */
+    @ApiOperation("订单发票上传")
+    @PostMapping("/invoice/upload")
+    public AjaxResult<Void> invoiceUpload(@RequestBody TopInvoiceUploadBo bo) {
+        return toAjax(iTopOldOrderService.invoiceUpload(bo) ? 1 : 0);
+    }
+
+}

+ 105 - 0
zhongzheng-admin-saas/src/main/java/com/zhongzheng/controller/order/TopOldOrderGoodsController.java

@@ -0,0 +1,105 @@
+package com.zhongzheng.controller.order;
+
+import com.zhongzheng.common.annotation.Log;
+import com.zhongzheng.common.core.controller.BaseController;
+import com.zhongzheng.common.core.domain.AjaxResult;
+import com.zhongzheng.common.core.page.TableDataInfo;
+import com.zhongzheng.common.enums.BusinessType;
+import com.zhongzheng.common.utils.poi.ExcelUtil;
+import com.zhongzheng.modules.top.goods.bo.TopOldOrderGoodsAddBo;
+import com.zhongzheng.modules.top.goods.bo.TopOldOrderGoodsEditBo;
+import com.zhongzheng.modules.top.goods.bo.TopOldOrderGoodsQueryBo;
+import com.zhongzheng.modules.top.goods.service.ITopOldOrderGoodsService;
+import com.zhongzheng.modules.top.goods.vo.TopOldOrderGoodsVo;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.RequiredArgsConstructor;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.Arrays;
+import java.util.List;
+
+/**
+ * 订单商品Controller
+ * 
+ * @author ruoyi
+ * @date 2023-04-20
+ */
+@Api(value = "订单商品控制器", tags = {"订单商品管理"})
+@RequiredArgsConstructor(onConstructor_ = @Autowired)
+@RestController
+@RequestMapping("/system/order/goods")
+public class TopOldOrderGoodsController extends BaseController {
+
+    private final ITopOldOrderGoodsService iTopOldOrderGoodsService;
+
+    /**
+     * 查询订单商品列表
+     */
+    @ApiOperation("查询订单商品列表")
+    @PreAuthorize("@ss.hasPermi('system:goods:list')")
+    @GetMapping("/list")
+    public TableDataInfo<TopOldOrderGoodsVo> list(TopOldOrderGoodsQueryBo bo) {
+        startPage();
+        List<TopOldOrderGoodsVo> list = iTopOldOrderGoodsService.queryList(bo);
+        return getDataTable(list);
+    }
+
+    /**
+     * 导出订单商品列表
+     */
+    @ApiOperation("导出订单商品列表")
+    @PreAuthorize("@ss.hasPermi('system:goods:export')")
+    @Log(title = "订单商品", businessType = BusinessType.EXPORT)
+    @GetMapping("/export")
+    public AjaxResult<TopOldOrderGoodsVo> export(TopOldOrderGoodsQueryBo bo) {
+        List<TopOldOrderGoodsVo> list = iTopOldOrderGoodsService.queryList(bo);
+        ExcelUtil<TopOldOrderGoodsVo> util = new ExcelUtil<TopOldOrderGoodsVo>(TopOldOrderGoodsVo.class);
+        return util.exportExcel(list, "订单商品");
+    }
+
+    /**
+     * 获取订单商品详细信息
+     */
+    @ApiOperation("获取订单商品详细信息")
+    @PreAuthorize("@ss.hasPermi('system:goods:query')")
+    @GetMapping("/{orderGoodsId}")
+    public AjaxResult<TopOldOrderGoodsVo> getInfo(@PathVariable("orderGoodsId" ) Long orderGoodsId) {
+        return AjaxResult.success(iTopOldOrderGoodsService.queryById(orderGoodsId));
+    }
+
+    /**
+     * 新增订单商品
+     */
+    @ApiOperation("新增订单商品")
+    @PreAuthorize("@ss.hasPermi('system:goods:add')")
+    @Log(title = "订单商品", businessType = BusinessType.INSERT)
+    @PostMapping()
+    public AjaxResult<Void> add(@RequestBody TopOldOrderGoodsAddBo bo) {
+        return toAjax(iTopOldOrderGoodsService.insertByAddBo(bo) ? 1 : 0);
+    }
+
+    /**
+     * 修改订单商品
+     */
+    @ApiOperation("修改订单商品")
+    @PreAuthorize("@ss.hasPermi('system:goods:edit')")
+    @Log(title = "订单商品", businessType = BusinessType.UPDATE)
+    @PutMapping()
+    public AjaxResult<Void> edit(@RequestBody TopOldOrderGoodsEditBo bo) {
+        return toAjax(iTopOldOrderGoodsService.updateByEditBo(bo) ? 1 : 0);
+    }
+
+    /**
+     * 删除订单商品
+     */
+    @ApiOperation("删除订单商品")
+    @PreAuthorize("@ss.hasPermi('system:goods:remove')")
+    @Log(title = "订单商品" , businessType = BusinessType.DELETE)
+    @DeleteMapping("/{orderGoodsIds}")
+    public AjaxResult<Void> remove(@PathVariable Long[] orderGoodsIds) {
+        return toAjax(iTopOldOrderGoodsService.deleteWithValidByIds(Arrays.asList(orderGoodsIds), true) ? 1 : 0);
+    }
+}

+ 159 - 0
zhongzheng-admin-saas/src/main/java/com/zhongzheng/controller/order/TopOldOrderRepController.java

@@ -0,0 +1,159 @@
+package com.zhongzheng.controller.order;
+
+import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
+import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
+import com.zhongzheng.common.core.controller.BaseController;
+import com.zhongzheng.common.core.domain.AjaxResult;
+import com.zhongzheng.common.core.domain.model.TopLoginUser;
+import com.zhongzheng.common.core.page.TableDataInfo;
+import com.zhongzheng.common.exception.CustomException;
+import com.zhongzheng.common.utils.ServletUtils;
+import com.zhongzheng.common.utils.poi.EasyPoiUtil;
+import com.zhongzheng.common.utils.poi.ExcelUtil;
+import com.zhongzheng.framework.web.service.TopTokenService;
+import com.zhongzheng.modules.top.goods.service.ITopOldOrderService;
+import com.zhongzheng.modules.top.order.bo.*;
+import com.zhongzheng.modules.top.order.vo.TopOldOrderQuestionVo;
+import com.zhongzheng.modules.top.order.vo.TopOldOrderRepDetailVo;
+import com.zhongzheng.modules.top.order.vo.TopOldOrderRepVo;
+import com.zhongzheng.modules.top.order.vo.TopQuestionImportVo;
+import com.zhongzheng.modules.user.bo.UserDataImportBo;
+import com.zhongzheng.modules.user.vo.UserExportVo;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.RequiredArgsConstructor;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.util.List;
+
+/**
+ * 订单Controller
+ *
+ * @author ruoyi
+ * @date 2023-04-20
+ */
+@Api(value = "订单明细控制器", tags = {"订单明细控制器"})
+@RequiredArgsConstructor(onConstructor_ = @Autowired)
+@RestController
+@RequestMapping("/system/top/order/rep")
+public class TopOldOrderRepController extends BaseController {
+
+    private final ITopOldOrderService iTopOldOrderService;
+
+    private final TopTokenService tokenService;
+    /**
+     * 查询订单列表
+     */
+    @ApiOperation("查询订单列表")
+    @GetMapping("/list")
+    public TableDataInfo<TopOldOrderRepVo> list(TopOrderRepQueryBo bo) {
+        TopLoginUser loginUser = tokenService.getLoginUser(ServletUtils.getRequest());
+        bo.setLoginId(loginUser.getUser().getUserId());
+        startPage();
+        List<TopOldOrderRepVo> list = iTopOldOrderService.queryOrderRepList(bo);
+        return getDataTable(list);
+    }
+
+    /**
+     * 查询订单列表
+     */
+    @ApiOperation("查询订单详情")
+    @GetMapping("/goods/detail")
+    public TableDataInfo<TopOldOrderRepDetailVo> getOrderDetailList(TopOrderRepGoodsQueryBo queryBo) {
+        startPage();
+        List<TopOldOrderRepDetailVo> orderDetailList = iTopOldOrderService.getOrderDetailList(queryBo);
+        return getDataTable(orderDetailList);
+    }
+
+    /**
+     * 订单明细修改
+     */
+    @ApiOperation("订单明细修改")
+    @PostMapping("/edit")
+    public AjaxResult<Void> edit(@RequestBody TopOrderRepEditBo editBo) {
+        return toAjax(iTopOldOrderService.editOrderRepList(editBo) ? 1 : 0);
+    }
+
+    /**
+     * 订单明细修改
+     */
+    @ApiOperation("订单明细详情修改")
+    @PostMapping("/detail/edit")
+    public AjaxResult<Void> editOrderRepDetail(@RequestBody TopOrderRepDetailEditBo editBo) {
+        return toAjax(iTopOldOrderService.editOrderRepDetail(editBo) ? 1 : 0);
+    }
+
+    /**
+     * 订单题库开通列表
+     */
+    @ApiOperation("订单题库开通列表")
+    @GetMapping("/question/list")
+    public AjaxResult<List<TopOldOrderQuestionVo>> getOrderQuestionList(TopRepQuestionQueryBo queryBo) {
+        List<TopOldOrderQuestionVo> list =  iTopOldOrderService.getOrderQuestionList(queryBo);
+        return AjaxResult.success(list);
+    }
+
+    /**
+     * 订单题库开通详情
+     */
+    @ApiOperation("订单题库开通详情")
+    @GetMapping("/question/detail")
+    public AjaxResult<TopOldOrderQuestionVo> getOrderQuestionDetail(TopRepQuestionQueryBo queryBo) {
+        TopOldOrderQuestionVo vo =  iTopOldOrderService.getOrderQuestionDetail(queryBo);
+        return AjaxResult.success(vo);
+    }
+
+    /**
+     * 新增订单题库开通记录
+     */
+    @ApiOperation("新增订单题库开通记录")
+    @PostMapping("/save/question")
+    public AjaxResult<Void> saveOrderQuestion(@RequestBody TopOrderRepQuestionBo bo) {
+        return toAjax(iTopOldOrderService.saveOrderQuestion(bo) ? 1 : 0);
+    }
+
+    /**
+     * 删除订单题库开通记录
+     */
+    @ApiOperation("删除订单题库开通记录")
+    @GetMapping("/del/question/{id}")
+    public AjaxResult<Void> delOrderQuestion(@PathVariable("id") Long id) {
+        return toAjax(iTopOldOrderService.delOrderQuestion(id) ? 1 : 0);
+    }
+
+    /**
+     * 账单记录
+     */
+    @ApiOperation("账单记录")
+    @GetMapping("/bill/export")
+    public AjaxResult<Void> billExport(TopOrderRepQueryBo queryBo) {
+        List<TopOrderBillExportVo> list = iTopOldOrderService.billExportList(queryBo);
+        ExcelUtil<TopOrderBillExportVo> util = new ExcelUtil<TopOrderBillExportVo>(TopOrderBillExportVo.class);
+        return util.exportExcel(list,"账单明细");
+    }
+
+    /**
+     * 订单题库开通记录导入
+     */
+    @ApiOperation("订单题库开通记录导入")
+    @PostMapping("/import/question")
+    public AjaxResult<TopQuestionImportVo> importOrderQuestion(MultipartFile file) {
+        List<TopOrderQuestionImportBo> questionImportBos = EasyPoiUtil.importExcel(file,0,1,TopOrderQuestionImportBo.class);
+        if (CollectionUtils.isEmpty(questionImportBos)){
+            throw new CustomException("导入文件格式不正确或文件为空,请检查文件!");
+        }
+        TopQuestionImportVo vo = iTopOldOrderService.importOrderQuestion(questionImportBos);
+        return AjaxResult.success(vo);
+    }
+
+    /**
+     * 批量新增订单题库开通记录
+     */
+    @ApiOperation("批量新增订单题库开通记录")
+    @PostMapping("/batch/save/question")
+    public AjaxResult<Void> batchSaveOrderQuestion(@RequestBody List<TopOrderRepQuestionBo> bos) {
+        return toAjax(iTopOldOrderService.batchSaveOrderQuestion(bos) ? 1 : 0);
+    }
+}

+ 152 - 0
zhongzheng-admin-saas/src/main/java/com/zhongzheng/controller/order/TopOrderAcceptanceController.java

@@ -0,0 +1,152 @@
+package com.zhongzheng.controller.order;
+
+import cn.hutool.core.bean.BeanUtil;
+import com.alibaba.fastjson.JSON;
+import com.zhongzheng.common.annotation.Log;
+import com.zhongzheng.common.core.controller.BaseController;
+import com.zhongzheng.common.core.domain.AjaxResult;
+import com.zhongzheng.common.core.domain.model.LoginUser;
+import com.zhongzheng.common.core.domain.model.TopLoginUser;
+import com.zhongzheng.common.core.page.TableDataInfo;
+import com.zhongzheng.common.utils.DateUtils;
+import com.zhongzheng.common.utils.ServletUtils;
+import com.zhongzheng.common.utils.poi.EasyPoiUtil;
+import com.zhongzheng.common.utils.poi.ExcelUtil;
+import com.zhongzheng.modules.course.bo.CourseSectionBusinessAddBo;
+import com.zhongzheng.modules.course.vo.CourseChapterSectionImport;
+import com.zhongzheng.modules.distribution.bo.DistributionActivityPosterQueryBo;
+import com.zhongzheng.modules.distribution.vo.DistributionActivityPosterVo;
+import com.zhongzheng.modules.top.goods.bo.TopOldOrderAddBo;
+import com.zhongzheng.modules.top.goods.bo.TopOldOrderQueryBo;
+import com.zhongzheng.modules.top.goods.vo.TopOldOrderVo;
+import com.zhongzheng.modules.top.order.bo.*;
+import com.zhongzheng.modules.top.order.service.ITopOrderAcceptanceService;
+import com.zhongzheng.modules.top.order.vo.TopOrderAcceptanceStatisticsVo;
+import com.zhongzheng.modules.top.order.vo.TopOrderAcceptanceVo;
+import com.zhongzheng.modules.user.bo.UserImportAddBo;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.RequiredArgsConstructor;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.util.Collections;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+/**
+ * 订单认款Controller
+ *
+ * @author ruoyi
+ * @date 2023-04-20
+ */
+@Api(value = "订单认款", tags = {"订单认款"})
+@RequiredArgsConstructor(onConstructor_ = @Autowired)
+@RestController
+@RequestMapping("/system/top/acceptance")
+public class TopOrderAcceptanceController extends BaseController {
+
+    private final ITopOrderAcceptanceService iTopOrderAcceptanceService;
+
+    /**
+     * 查询认款列表
+     */
+    @ApiOperation("查询认款列表")
+    @GetMapping("/list")
+    public TableDataInfo<TopOrderAcceptanceVo> list(TopOrderAcceptanceBo bo) {
+        startPage();
+        List<TopOrderAcceptanceVo> list = iTopOrderAcceptanceService.queryAcceptanceList(bo);
+        return getDataTable(list);
+    }
+
+    /**
+     * 查询认款统计
+     */
+    @ApiOperation("查询认款统计")
+    @GetMapping("/statistics")
+    public AjaxResult<TopOrderAcceptanceStatisticsVo> statistics() {
+        TopOrderAcceptanceStatisticsVo vo = iTopOrderAcceptanceService.statistics();
+        return AjaxResult.success(vo);
+    }
+
+    /**
+     * 认款订单列表
+     */
+    @ApiOperation("认款订单列表")
+    @GetMapping("/order/list")
+    public TableDataInfo<TopOldOrderVo> getAcceptanceOrderList(TopAcceptanceOrderBo bo) {
+        startPage();
+        List<TopOldOrderVo> list = iTopOrderAcceptanceService.getAcceptanceOrderList(bo);
+        return getDataTable(list);
+    }
+
+    /**
+     * 认款关联订单列表
+     */
+    @ApiOperation("认款关联订单列表")
+    @GetMapping("/order/rel/{acceptanceId}")
+    public AjaxResult<List<TopOldOrderVo>> getAcceptanceOrderRelList(@PathVariable("acceptanceId")Long acceptanceId) {
+        List<TopOldOrderVo> list = iTopOrderAcceptanceService.getAcceptanceOrderRelList(acceptanceId);
+        return AjaxResult.success(list);
+    }
+
+    /**
+     * 订单认款
+     */
+    @ApiOperation("订单认款")
+    @PostMapping("/rel")
+    public AjaxResult<Void> addOrderAcceptanceRel(@RequestBody TopOrderAcceptanceRelBo bo) {
+        return toAjax(iTopOrderAcceptanceService.addOrderAcceptanceRel(bo) ? 1 : 0);
+    }
+
+
+    /**
+     * 新增认款记录
+     */
+    @ApiOperation("新增认款记录")
+    @PostMapping("/save")
+    public AjaxResult<Void> add(@RequestBody TopOrderAcceptanceAddBo bo) {
+        return toAjax(iTopOrderAcceptanceService.insertByAddBo(bo) ? 1 : 0);
+    }
+
+    /**
+     * 删除认款记录
+     */
+    @ApiOperation("删除认款记录")
+    @PostMapping("/delete")
+    public AjaxResult<Void> add(@RequestBody TopOrderAcceptanceBo bo) {
+        return toAjax(iTopOrderAcceptanceService.deleteByAddBo(bo) ? 1 : 0);
+    }
+
+    @ApiOperation("认款记录导入")
+    @PostMapping("/importData")
+    public AjaxResult<Void> importData(MultipartFile files) {
+        ExcelUtil<TopOrderAcceptanceExportBo> util = new ExcelUtil<TopOrderAcceptanceExportBo>(TopOrderAcceptanceExportBo.class);
+        List<TopOrderAcceptanceExportBo> acceptanceExportBos;
+        try {
+            acceptanceExportBos = util.importExcel(files.getInputStream());
+        }catch (Exception e){
+            e.printStackTrace();
+            throw new IllegalArgumentException("模板格式不正确,请重新下载模板");
+        }
+        return toAjax(iTopOrderAcceptanceService.importData(acceptanceExportBos)? 1 : 0);
+    }
+
+    /**
+     * 导出【请填写功能名称】列表
+     */
+    @ApiOperation("认款记录导出")
+    @GetMapping("/export")
+    public AjaxResult<DistributionActivityPosterVo> export(TopOrderAcceptanceBo bo) {
+        List<TopOrderAcceptanceVo> list = iTopOrderAcceptanceService.queryAcceptanceList(bo);
+        List<TopOrderAcceptanceExportBo> collect = list.stream().map(item -> {
+            TopOrderAcceptanceExportBo exportBo = BeanUtil.toBean(item, TopOrderAcceptanceExportBo.class);
+            exportBo.setIncomeTimeStr(DateUtils.timestampToDateFormat(item.getIncomeTime(),"yyyy/MM/dd"));
+            return exportBo;
+        }).collect(Collectors.toList());
+        ExcelUtil<TopOrderAcceptanceExportBo> util = new ExcelUtil<TopOrderAcceptanceExportBo>(TopOrderAcceptanceExportBo.class);
+        return util.exportExcel(collect, "认款记录表");
+    }
+}

+ 64 - 0
zhongzheng-admin-saas/src/main/java/com/zhongzheng/controller/order/TopOrderBankPayController.java

@@ -0,0 +1,64 @@
+package com.zhongzheng.controller.order;
+
+import java.util.List;
+import java.util.Arrays;
+
+import com.zhongzheng.common.core.domain.model.TopLoginUser;
+import com.zhongzheng.common.utils.ServletUtils;
+import com.zhongzheng.framework.web.service.TopTokenService;
+import com.zhongzheng.modules.top.order.bo.TopOrderBankPayAddBo;
+import com.zhongzheng.modules.top.order.bo.TopOrderBankPayEditBo;
+import com.zhongzheng.modules.top.order.bo.TopOrderBankPayQueryBo;
+import com.zhongzheng.modules.top.order.service.ITopOrderBankPayService;
+import com.zhongzheng.modules.top.order.vo.TopOrderBankPayVo;
+import lombok.RequiredArgsConstructor;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.PutMapping;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import com.zhongzheng.common.annotation.Log;
+import com.zhongzheng.common.core.controller.BaseController;
+import com.zhongzheng.common.core.domain.AjaxResult;
+import com.zhongzheng.common.enums.BusinessType;
+import com.zhongzheng.common.utils.poi.ExcelUtil;
+import com.zhongzheng.common.core.page.TableDataInfo;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+
+/**
+ * 订单网银打款Controller
+ *
+ * @author hjl
+ * @date 2023-05-08
+ */
+@Api(value = "订单网银打款控制器", tags = {"订单网银打款管理"})
+@RequiredArgsConstructor(onConstructor_ = @Autowired)
+@RestController
+@RequestMapping("/order/bank/pay")
+public class TopOrderBankPayController extends BaseController {
+
+    private final ITopOrderBankPayService iTopOrderBankPayService;
+
+    private final TopTokenService tokenService;
+
+    /**
+     * 新增订单网银打款
+     */
+    @ApiOperation("新增订单网银打款")
+    @PreAuthorize("@ss.hasPermi('system:pay:add')")
+    @Log(title = "订单网银打款", businessType = BusinessType.INSERT)
+    @PostMapping()
+    public AjaxResult<Void> add(@RequestBody TopOrderBankPayAddBo bo) {
+        TopLoginUser loginUser = tokenService.getLoginUser(ServletUtils.getRequest());
+        bo.setLoginId(loginUser.getUser().getUserId());
+        bo.setLoginName(loginUser.getUser().getUserName());
+        return toAjax(iTopOrderBankPayService.payToCompany(bo) ? 1 : 0);
+    }
+
+}

+ 167 - 0
zhongzheng-admin-saas/src/main/java/com/zhongzheng/controller/order/TopOrderStatisticsController.java

@@ -0,0 +1,167 @@
+package com.zhongzheng.controller.order;
+
+import com.zhongzheng.common.core.controller.BaseController;
+import com.zhongzheng.common.core.domain.AjaxResult;
+import com.zhongzheng.common.core.page.TableDataInfo;
+import com.zhongzheng.framework.web.service.TopTokenService;
+import com.zhongzheng.modules.top.goods.service.ITopOldOrderService;
+import com.zhongzheng.modules.top.order.bo.TopOrderStatisticsBo;
+import com.zhongzheng.modules.top.order.bo.TopOrderStatisticsViewBo;
+import com.zhongzheng.modules.top.order.vo.*;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.RequiredArgsConstructor;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+/**
+ * 订单Controller
+ *
+ * @author ruoyi
+ * @date 2023-04-20
+ */
+@Api(value = "订单统计控制器", tags = {"订单统计控制器"})
+@RequiredArgsConstructor(onConstructor_ = @Autowired)
+@RestController
+@RequestMapping("/system/top/order/statistics")
+public class TopOrderStatisticsController extends BaseController {
+
+    private final ITopOldOrderService iTopOldOrderService;
+
+    private final TopTokenService tokenService;
+
+    /**
+     * 下单客户订单金额统计
+     */
+    @ApiOperation("下单客户订单金额统计")
+    @GetMapping("/money")
+    public TableDataInfo<TopOrderStatisticsMoneyVo> orderMoneyStatisticsList(TopOrderStatisticsBo bo) {
+        startPage();
+        List<TopOrderStatisticsMoneyVo> list = iTopOldOrderService.orderMoneyStatisticsList(bo);
+        return getDataTable(list);
+    }
+
+    /**
+     * 下单客户订单数量统计
+     */
+    @ApiOperation("下单客户订单数量统计")
+    @GetMapping("/num")
+    public TableDataInfo<TopOrderStatisticsNumVo> orderNumStatisticsList(TopOrderStatisticsBo bo) {
+        startPage();
+        List<TopOrderStatisticsNumVo> list = iTopOldOrderService.orderNumStatisticsList(bo);
+        return getDataTable(list);
+    }
+
+    /**
+     * 下单客户订单走势图
+     */
+    @ApiOperation("下单客户订单走势图")
+    @GetMapping("/view")
+    public AjaxResult<TopOrderStatisticsViewVo> orderStatisticsView(TopOrderStatisticsViewBo bo) {
+        return AjaxResult.success(iTopOldOrderService.orderStatisticsView(bo));
+    }
+
+    /**
+     * 下单客户订单详情
+     */
+    @ApiOperation("下单客户订单详情")
+    @GetMapping("/detail")
+    public TableDataInfo<TopOrderStatisticsDetailVo> orderStatisticsDetail(TopOrderStatisticsBo bo) {
+        startPage();
+        List<TopOrderStatisticsDetailVo> list = iTopOldOrderService.orderStatisticsDetail(bo);
+        return getDataTable(list);
+    }
+
+    /**
+     * 下单客户订单金额统计
+     */
+    @ApiOperation("机构订单金额统计")
+    @GetMapping("/moneyByTenant")
+    public TableDataInfo<TopOrderStatisticsMoneyVo> orderMoneyTenantStatistics(TopOrderStatisticsBo bo) {
+        startPage();
+        List<TopOrderStatisticsMoneyVo> list = iTopOldOrderService.orderMoneyTenantStatistics(bo);
+        return getDataTable(list);
+    }
+
+    /**
+     * 下单客户订单数量统计
+     */
+    @ApiOperation("机构订单数量统计")
+    @GetMapping("/numByTenant")
+    public TableDataInfo<TopOrderStatisticsNumVo> orderNumTenantStatistics(TopOrderStatisticsBo bo) {
+        startPage();
+        List<TopOrderStatisticsNumVo> list = iTopOldOrderService.orderNumTenantStatistics(bo);
+        return getDataTable(list);
+    }
+
+    @ApiOperation("业务层次订单金额统计")
+    @GetMapping("/moneyByBusiness")
+    public TableDataInfo<TopOrderStatisticsMoneyVo> businessOrderMoney(TopOrderStatisticsBo bo) {
+        startPage();
+        List<TopOrderStatisticsMoneyVo> list = iTopOldOrderService.getBusinessOrderMoney(bo);
+        return getDataTable(list);
+    }
+
+    @ApiOperation("业务层次订单数量统计")
+    @GetMapping("/numByBusiness")
+    public TableDataInfo<TopOrderStatisticsNumVo> businessOrderNum(TopOrderStatisticsBo bo) {
+        startPage();
+        List<TopOrderStatisticsNumVo> list = iTopOldOrderService.getBusinessOrderNum(bo);
+        return getDataTable(list);
+    }
+
+    @ApiOperation("数据分析业务层次列表")
+    @GetMapping("/businessList")
+    public AjaxResult<List<String>> businessList(TopOrderStatisticsBo bo) {
+        List<String> list = iTopOldOrderService.getBusinessList(bo);
+        return AjaxResult.success(list);
+    }
+
+    @ApiOperation("下单客户")
+    @GetMapping("/customer")
+    public AjaxResult<List<TopOrderCustomerVo>> getCustomerList() {
+        return AjaxResult.success(iTopOldOrderService.getCustomerList());
+    }
+
+    @ApiOperation("订单总计")
+    @GetMapping("/total")
+    public AjaxResult<TopOrderTotalVo> getOrderTotal(TopOrderStatisticsBo bo) {
+        return AjaxResult.success(iTopOldOrderService.getOrderTotal(bo));
+    }
+
+    @ApiOperation("下单机构订单详情列表")
+    @GetMapping("/tenantDetailList")
+    public TableDataInfo<TopOrderStatisticsDetailVo> getTenantDetailList(TopOrderStatisticsBo bo) {
+        startPage();
+        List<TopOrderStatisticsDetailVo> list = iTopOldOrderService.getTenantDetailList(bo);
+        return getDataTable(list);
+    }
+
+    @ApiOperation("下单业务层次详情列表")
+    @GetMapping("/businessDetailList")
+    public TableDataInfo<TopOrderStatisticsDetailVo> getBusinessDetailList(TopOrderStatisticsBo bo) {
+        startPage();
+        List<TopOrderStatisticsDetailVo> list = iTopOldOrderService.getBusinessDetailList(bo);
+        return getDataTable(list);
+    }
+
+    @ApiOperation("机构走势图")
+    @GetMapping("/tenantView")
+    public AjaxResult<TopOrderStatisticsViewVo> getStatisticsTenantView(TopOrderStatisticsViewBo bo) {
+        return AjaxResult.success(iTopOldOrderService.getStatisticsTenantView(bo));
+    }
+
+    @ApiOperation("业务层次走势图")
+    @GetMapping("/businessView")
+    public AjaxResult<TopOrderStatisticsViewVo> getStatisticsBusinessView(TopOrderStatisticsViewBo bo) {
+        return AjaxResult.success(iTopOldOrderService.getStatisticsBusinessView(bo));
+    }
+
+    @ApiOperation("机构业务员列表")
+    @GetMapping("/tenantCreateList")
+    public AjaxResult<List<TopOrderStatisticsTwoVo>> getTenantCreateList(TopOrderStatisticsViewBo bo) {
+        return AjaxResult.success(iTopOldOrderService.getTenantCreateList(bo));
+    }
+}

+ 115 - 0
zhongzheng-admin-saas/src/main/java/com/zhongzheng/controller/order/TopSharedCustomerController.java

@@ -0,0 +1,115 @@
+package com.zhongzheng.controller.order;
+
+import com.zhongzheng.common.core.controller.BaseController;
+import com.zhongzheng.common.core.domain.AjaxResult;
+import com.zhongzheng.common.core.page.TableDataInfo;
+import com.zhongzheng.framework.web.service.TopTokenService;
+import com.zhongzheng.modules.top.goods.service.ITopOldOrderService;
+import com.zhongzheng.modules.top.order.bo.TopOrderStatisticsBo;
+import com.zhongzheng.modules.top.order.bo.TopOrderStatisticsViewBo;
+import com.zhongzheng.modules.top.order.vo.*;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.RequiredArgsConstructor;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.List;
+
+/**
+ * 订单Controller
+ *
+ * @author ruoyi
+ * @date 2023-04-20
+ */
+@Api(value = "公海控制器", tags = {"公海控制器"})
+@RequiredArgsConstructor(onConstructor_ = @Autowired)
+@RestController
+@RequestMapping("/system/top/order/shared")
+public class TopSharedCustomerController extends BaseController {
+
+    private final ITopOldOrderService iTopOldOrderService;
+
+    /**
+     * 公海客户统计
+     */
+    @ApiOperation("公海客户统计")
+    @GetMapping("/statistics")
+    public AjaxResult<TopSharedCustomerTotalVo> getSharedStatistics(TopOrderStatisticsBo bo) {
+        return AjaxResult.success(iTopOldOrderService.getSharedStatistics(bo));
+    }
+
+    /**
+     * 公海总客户
+     */
+    @ApiOperation("公海总客户")
+    @GetMapping("/customer/stats")
+    public AjaxResult<TopCustomerStatsVo> getCustomerStatsData(TopOrderStatisticsBo bo) {
+        return AjaxResult.success(iTopOldOrderService.getCustomerStatsData(bo));
+    }
+
+    /**
+     * 公海过期预警
+     */
+    @ApiOperation("公海过期预警")
+    @GetMapping("/cert/stats")
+    public AjaxResult<TopCertStatsVo> getCertStatsData(TopOrderStatisticsBo bo) {
+        return AjaxResult.success(iTopOldOrderService.getCertStatsData(bo));
+    }
+
+    /**
+     * 城市转化排行
+     */
+    @ApiOperation("城市转化排行")
+    @GetMapping("/order/area")
+    public TableDataInfo<TopOrderAreaDataVo> getOrderAreaData(TopOrderStatisticsBo bo) {
+        return iTopOldOrderService.getOrderAreaData(bo);
+    }
+
+    /**
+     * 客户转化排名
+     */
+    @ApiOperation("客户转化排名")
+    @GetMapping("/conversion/rate")
+    public TableDataInfo<TopConversionRateDataVo> getConversionRateData(TopOrderStatisticsBo bo) {
+        return iTopOldOrderService.getConversionRateData(bo);
+    }
+
+    /**
+     * 公海客户走势图
+     */
+    @ApiOperation("公海客户走势图")
+    @GetMapping("/customer/list")
+    public AjaxResult<List<TopConversionRateTrendVo>> getCustomerListData(TopOrderStatisticsBo bo) {
+        return AjaxResult.success(iTopOldOrderService.getCustomerListData(bo));
+    }
+
+    /**
+     * 公海客户详情
+     */
+    @ApiOperation("公海客户详情")
+    @GetMapping("/customer/order")
+    public TableDataInfo<TopConversionRateDataVo> getCustomerOrderData(TopOrderStatisticsBo bo) {
+        return iTopOldOrderService.getCustomerOrderData(bo);
+    }
+
+    /**
+     * 公海客户机构列表
+     */
+    @ApiOperation("公海客户机构列表")
+    @GetMapping("/tenant")
+    public AjaxResult<List<TopTenantDataVo>> getTenantListData() {
+        return AjaxResult.success(iTopOldOrderService.getTenantListData());
+    }
+
+    /**
+     * 公海客户业务员列表
+     */
+    @ApiOperation("公海客户业务员列表")
+    @GetMapping("/sale")
+    public AjaxResult<List<TopTenantDataVo>> getSaleListData(TopOrderStatisticsBo bo) {
+        return AjaxResult.success(iTopOldOrderService.getSaleListData(bo));
+    }
+}

+ 94 - 0
zhongzheng-admin-saas/src/main/java/com/zhongzheng/controller/schedule/ScheduleController.java

@@ -0,0 +1,94 @@
+package com.zhongzheng.controller.schedule;
+
+import com.zhongzheng.common.core.controller.BaseController;
+import com.zhongzheng.common.core.domain.AjaxResult;
+import com.zhongzheng.framework.web.service.AsyncService;
+import com.zhongzheng.framework.web.service.WxLoginService;
+import com.zhongzheng.modules.exam.bo.ExamApplyQueryBo;
+import com.zhongzheng.modules.polyv.service.IPolyvLiveService;
+import com.zhongzheng.modules.schedule.service.IScheduleService;
+import com.zhongzheng.modules.sdk.service.ITopNuoMplatformLogService;
+import com.zhongzheng.modules.top.order.service.ITopOrderRecNoteService;
+import com.zhongzheng.modules.user.bo.UserQueryBo;
+import com.zhongzheng.modules.user.bo.UserWxFollowQueryBo;
+import com.zhongzheng.modules.wx.bo.WxLoginBody;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.RequiredArgsConstructor;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.text.ParseException;
+import java.util.Arrays;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 定时任务
+ *
+ * @author ruoyi
+ * @date 2021-11-10
+ */
+@Api(value = "定时任务", tags = {"定时任务管理"})
+@RequiredArgsConstructor(onConstructor_ = @Autowired)
+@RestController
+@RequestMapping("/sys/common")
+public class ScheduleController extends BaseController {
+
+    private final ITopNuoMplatformLogService iTopNuoMplatformLogService;
+
+    private final ITopOrderRecNoteService iTopOrderRecNoteService;
+
+    private final IScheduleService iScheduleService;
+
+    @ApiOperation("发票开票结果更新")
+    @GetMapping("/distributionRebate")
+    public AjaxResult distributionRebate(UserQueryBo bo){
+        iTopNuoMplatformLogService.updateByBatch();
+        return AjaxResult.success();
+    }
+
+    @ApiOperation("重开发票开票")
+    @GetMapping("/reOpenMplatform")
+    public AjaxResult reOpenMplatform(){
+        iTopNuoMplatformLogService.reOpenMplatform();
+        return AjaxResult.success();
+    }
+
+    @ApiOperation("催款提醒")
+    @GetMapping("/recTimeNoteBatchPush")
+    public AjaxResult recTimeNoteBatchPush(){
+        iTopOrderRecNoteService.timeNoteBatchPush();
+        return AjaxResult.success();
+    }
+
+    @ApiOperation("应收应付机构分成月度账单")
+    @GetMapping("/makeDivideMonthBill")
+    public AjaxResult makeDivideMonthBill(){
+        iScheduleService.makeDivideMonthBill();
+        return AjaxResult.success();
+    }
+
+    @ApiOperation("应收应付机构佣金月度账单")
+    @GetMapping("/makeDivideBrokerageMonthBill")
+    public AjaxResult makeDivideBrokerageMonthBill(){
+        iScheduleService.makeDivideBrokerageMonthBill();
+        return AjaxResult.success();
+    }
+
+    @ApiOperation("应收应付业务员提成月度账单")
+    @GetMapping("/makeDivideSellerMonthBill")
+    public AjaxResult makeDivideSellerMonthBill(){
+        iScheduleService.makeDivideSellerMonthBill();
+        return AjaxResult.success();
+    }
+
+    @ApiOperation("更新机构分成,业务提成应付时间")
+    @GetMapping("/updateCompanyPredictPayTime")
+    public AjaxResult updateCompanyPredictPayTime(){
+        iScheduleService.updatePredictPayTime();
+        return AjaxResult.success();
+    }
+}

+ 72 - 0
zhongzheng-admin-saas/src/main/java/com/zhongzheng/controller/sdk/TopNuoMplatformLogController.java

@@ -0,0 +1,72 @@
+package com.zhongzheng.controller.sdk;
+
+import java.util.List;
+import java.util.Arrays;
+import java.util.Map;
+
+import com.zhongzheng.common.core.page.TableDataInfo;
+import com.zhongzheng.common.exception.CustomException;
+import com.zhongzheng.common.utils.ToolsUtils;
+import com.zhongzheng.modules.sdk.bo.TopNuoMplatformLogAddBo;
+import com.zhongzheng.modules.sdk.bo.TopNuoMplatformLogEditBo;
+import com.zhongzheng.modules.sdk.bo.TopNuoMplatformLogQueryBo;
+import com.zhongzheng.modules.sdk.service.ITopNuoMplatformLogService;
+import com.zhongzheng.modules.sdk.vo.TopNuoMplatformLogVo;
+import lombok.RequiredArgsConstructor;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.PutMapping;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import com.zhongzheng.common.annotation.Log;
+import com.zhongzheng.common.core.controller.BaseController;
+import com.zhongzheng.common.core.domain.AjaxResult;
+import com.zhongzheng.common.enums.BusinessType;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+
+/**
+ * 诺税通开单记录Controller
+ *
+ * @author ruoyi
+ * @date 2023-04-18
+ */
+@Api(value = "诺税通开单记录控制器", tags = {"诺税通开单记录管理"})
+@RequiredArgsConstructor(onConstructor_ = @Autowired)
+@RestController
+@RequestMapping("/openMplatform/log")
+public class TopNuoMplatformLogController extends BaseController {
+
+    private final ITopNuoMplatformLogService iTopNuoMplatformLogService;
+
+    /**
+     * 查询诺税通开单记录列表
+     */
+    @ApiOperation("查询诺税通开单记录列表")
+    @PreAuthorize("@ss.hasPermi('system:log:list')")
+    @GetMapping("/list")
+    public TableDataInfo<TopNuoMplatformLogVo> list(TopNuoMplatformLogQueryBo bo) {
+        startPage();
+        List<TopNuoMplatformLogVo> list = iTopNuoMplatformLogService.queryList(bo);
+        return getDataTable(list);
+    }
+
+
+
+    /**
+     * 获取诺税通开单记录详细信息
+     */
+    @ApiOperation("获取诺税通开单记录详细信息")
+    @PreAuthorize("@ss.hasPermi('system:log:query')")
+    @GetMapping("/{id}")
+    public AjaxResult<TopNuoMplatformLogVo> getInfo(@PathVariable("id" ) Long id) {
+        return AjaxResult.success(iTopNuoMplatformLogService.queryById(id));
+    }
+
+
+}

+ 246 - 0
zhongzheng-admin-saas/src/main/java/com/zhongzheng/controller/settle/TopInstSettleController.java

@@ -0,0 +1,246 @@
+package com.zhongzheng.controller.settle;
+
+import com.alibaba.fastjson.JSON;
+import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
+import com.baomidou.mybatisplus.core.toolkit.StringUtils;
+import com.zhongzheng.common.core.controller.BaseController;
+import com.zhongzheng.common.core.domain.AjaxResult;
+import com.zhongzheng.common.core.domain.model.TopLoginUser;
+import com.zhongzheng.common.core.page.TableDataInfo;
+import com.zhongzheng.common.exception.CustomException;
+import com.zhongzheng.common.utils.ServletUtils;
+import com.zhongzheng.common.utils.poi.ExcelUtil;
+import com.zhongzheng.framework.web.service.TopTokenService;
+import com.zhongzheng.modules.top.settle.bo.*;
+import com.zhongzheng.modules.top.settle.service.ITopInstSettleService;
+import com.zhongzheng.modules.top.settle.vo.*;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.RequiredArgsConstructor;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.math.BigDecimal;
+import java.util.Collections;
+import java.util.List;
+
+/**
+ * @author yangdamao
+ * @date 2023年07月24日 11:19
+ */
+@Api(value = "供应商结算", tags = {"供应商结算管理"})
+@RequiredArgsConstructor(onConstructor_ = @Autowired)
+@RestController
+@RequestMapping("/settle")
+public class TopInstSettleController extends BaseController {
+
+    private final ITopInstSettleService ITopInstSettleService;
+    private final TopTokenService tokenService;
+
+    /**
+     * 获取订单详情信息
+     */
+    @ApiOperation("获取订单详细信息")
+    @GetMapping("/order/info")
+    public AjaxResult<TopOrderInfoVo> getOrderInfo(SettleOrderInfoBo bo) {
+        return AjaxResult.success(ITopInstSettleService.getOrderInfo(bo));
+    }
+
+    /**
+     * 结算金额计算
+     */
+    @ApiOperation("结算金额计算")
+    @GetMapping("/money")
+    public AjaxResult<BigDecimal> getSettleMoney(SettleMoneyBo bo) {
+        return AjaxResult.success(ITopInstSettleService.getSettleMoney(bo));
+    }
+
+    /**
+     * 订单批量导入
+     */
+    @ApiOperation("订单批量导入")
+    @PostMapping("/order/import")
+    public AjaxResult<List<SettleOrderImportVo>> batchOrderImport(MultipartFile file,String param) {
+        if (StringUtils.isBlank(param)){
+            throw new CustomException("参数不能未空");
+        }
+        ExcelUtil<SettleOrderImportBo> util = new ExcelUtil<SettleOrderImportBo>(SettleOrderImportBo.class);
+        List<SettleOrderImportBo> orderImportBo = null;
+        try{
+            orderImportBo = util.importExcel(file.getInputStream());
+        }catch (Exception e){
+            e.printStackTrace();
+            throw new IllegalArgumentException("模板格式不正确,请重新下载模板");
+        }
+        Collections.reverse(orderImportBo);
+        if (orderImportBo.stream().allMatch(item -> ObjectUtils.isNull(item))){
+            throw new IllegalArgumentException("模板格式不正确,请重新下载模板");
+        }
+        SettleOrderImportParamBo paramBo = JSON.parseObject(param, SettleOrderImportParamBo.class);
+        return AjaxResult.success(ITopInstSettleService.batchOrderImport(orderImportBo,paramBo));
+    }
+
+    /**
+     * 按数量保存结算订单
+     */
+    @ApiOperation("按数量保存结算订单")
+    @PostMapping("/num/save")
+    public AjaxResult<Void> numSettleOrderSave(@RequestBody NumSettleBo bo) {
+        TopLoginUser loginUser = tokenService.getLoginUser(ServletUtils.getRequest());
+        bo.setLoginId(loginUser.getUser().getUserId());
+        bo.setLoginName(loginUser.getUser().getUserName());
+        return toAjax(ITopInstSettleService.numSettleOrderSave(bo) ? 1 : 0);
+    }
+
+    /**
+     * 按时间保存结算订单
+     */
+    @ApiOperation("按时间保存结算订单")
+    @PostMapping("/time/save")
+    public AjaxResult<Void> timeSettleOrderSave(@RequestBody TimeSettleBo bo) {
+        TopLoginUser loginUser = tokenService.getLoginUser(ServletUtils.getRequest());
+        bo.setLoginId(loginUser.getUser().getUserId());
+        bo.setLoginName(loginUser.getUser().getUserName());
+        return toAjax(ITopInstSettleService.timeSettleOrderSave(bo) ? 1 : 0);
+    }
+
+    /**
+     * 结算订单列表
+     */
+    @ApiOperation("结算订单列表")
+    @GetMapping("/list")
+    public TableDataInfo<SettleVo> list(SettleQueryBo bo) {
+        TopLoginUser loginUser = tokenService.getLoginUser(ServletUtils.getRequest());
+        bo.setLoginId(loginUser.getUser().getUserId());
+        bo.setLoginName(loginUser.getUser().getUserName());
+        startPage();
+        List<SettleVo> list = ITopInstSettleService.getSettleList(bo);
+        return getDataTable(list);
+    }
+
+    /**
+     * 获取时间结算单详情信息
+     */
+    @ApiOperation("获取时间结算单详情信息")
+    @GetMapping("/time/detail/{settleId}")
+    public AjaxResult<TimeSettleDetailVo> getTimeSettleDetail(@PathVariable("settleId") Long settleId) {
+        return AjaxResult.success(ITopInstSettleService.getTimeSettleDetail(settleId));
+    }
+
+    /**
+     * 获取数量结算单详情信息
+     */
+    @ApiOperation("获取数量结算单详情信息")
+    @GetMapping("/num/detail/{settleId}")
+    public AjaxResult<NumSettleDetailVo> getNumSettleDetail(@PathVariable("settleId") Long settleId) {
+        return AjaxResult.success(ITopInstSettleService.getNumSettleDetail(settleId));
+    }
+
+    /**
+     * 时间结算单修改
+     */
+    @ApiOperation("时间结算单修改")
+    @PostMapping("/time/update")
+    public AjaxResult<Void> updateTimeSettle(@RequestBody TimeSettleBo bo) {
+        TopLoginUser loginUser = tokenService.getLoginUser(ServletUtils.getRequest());
+        bo.setLoginId(loginUser.getUser().getUserId());
+        bo.setLoginName(loginUser.getUser().getUserName());
+        return toAjax(ITopInstSettleService.updateTimeSettle(bo) ? 1 : 0);
+    }
+
+    /**
+     * 数量结算单修改
+     */
+    @ApiOperation("数量结算单修改")
+    @PostMapping("/num/update")
+    public AjaxResult<Void> updateNumSettle(@RequestBody NumSettleBo bo) {
+        TopLoginUser loginUser = tokenService.getLoginUser(ServletUtils.getRequest());
+        bo.setLoginId(loginUser.getUser().getUserId());
+        bo.setLoginName(loginUser.getUser().getUserName());
+        return toAjax(ITopInstSettleService.updateNumSettle(bo) ? 1 : 0);
+    }
+
+    /**
+     * 结算单批量提交审核
+     */
+    @ApiOperation("结算单批量提交审核")
+    @PostMapping("/batch/submit/check")
+    public AjaxResult<Void> batchSubmitCheck(@RequestBody List<Long> settleIds) {
+        TopLoginUser loginUser = tokenService.getLoginUser(ServletUtils.getRequest());
+        return toAjax(ITopInstSettleService.batchSubmitCheck(settleIds,loginUser.getUser().getUserId(),loginUser.getUser().getUserName()) ? 1 : 0);
+    }
+
+    /**
+     * 结算单批量删除
+     */
+    @ApiOperation("结算单批量删除")
+    @PostMapping("/batch/delete")
+    public AjaxResult<Void> batchDeleteSettle(@RequestBody List<Long> settleIds) {
+        return toAjax(ITopInstSettleService.batchDeleteSettle(settleIds) ? 1 : 0);
+    }
+
+    /**
+     * 结算单审核
+     */
+    @ApiOperation("结算单审核")
+    @PostMapping("/check")
+    public AjaxResult<Void> checkSettle(@RequestBody CheckSettleBo bo) {
+        TopLoginUser loginUser = tokenService.getLoginUser(ServletUtils.getRequest());
+        bo.setLoginId(loginUser.getUser().getUserId());
+        bo.setLoginName(loginUser.getUser().getUserName());
+        return toAjax(ITopInstSettleService.checkSettle(bo) ? 1 : 0);
+    }
+
+    /**
+     * 结算单总金额
+     */
+    @ApiOperation("结算单总金额")
+    @PostMapping("/total/money")
+    public AjaxResult<TopOrderSettleVo> getSettleTotalMoney(SettleQueryBo bo) {
+        TopLoginUser loginUser = tokenService.getLoginUser(ServletUtils.getRequest());
+        bo.setLoginId(loginUser.getUser().getUserId());
+        bo.setLoginName(loginUser.getUser().getUserName());
+        return AjaxResult.success(ITopInstSettleService.getSettleTotalMoney(bo));
+    }
+
+    /**
+     * 结算单支付信息
+     */
+    @ApiOperation("结算单支付信息")
+    @GetMapping("/pay/info/{settleId}")
+    public AjaxResult<SettleVo> getSettlePayInfo(@PathVariable("settleId") Long settleId) {
+        return AjaxResult.success(ITopInstSettleService.getSettlePayInfo(settleId));
+    }
+
+    /**
+     * 结算单支付
+     */
+    @ApiOperation("结算单支付")
+    @PostMapping("/pay")
+    public AjaxResult<Void> settlePay(@RequestBody SettlePayBo bo) {
+        TopLoginUser loginUser = tokenService.getLoginUser(ServletUtils.getRequest());
+        bo.setLoginId(loginUser.getUser().getUserId());
+        bo.setLoginName(loginUser.getUser().getUserName());
+        return toAjax(ITopInstSettleService.settlePay(bo) ? 1 : 0);
+    }
+
+    /**
+     * 结算单据打印信息
+     */
+    @ApiOperation("结算单据打印信息")
+    @GetMapping("/receipts/{settleId}")
+    public AjaxResult<SettleReceiptsVo> getSettleReceipts(@PathVariable("settleId") Long settleId) {
+        return AjaxResult.success(ITopInstSettleService.getSettleReceipts(settleId));
+    }
+
+    /**
+     * 结算单据打印明细信息
+     */
+    @ApiOperation("结算单据打印明细信息")
+    @GetMapping("/receipts/detail/{settleId}")
+    public AjaxResult<List<NumSettleOrderVo>> getSettleReceiptsDetail(@PathVariable("settleId") Long settleId) {
+        return AjaxResult.success(ITopInstSettleService.getSettleReceiptsDetail(settleId));
+    }
+
+}

+ 140 - 0
zhongzheng-admin-saas/src/main/java/com/zhongzheng/controller/system/SuperSysLoginController.java

@@ -0,0 +1,140 @@
+package com.zhongzheng.controller.system;
+
+import com.zhongzheng.common.constant.Constants;
+import com.zhongzheng.common.core.domain.AjaxResult;
+import com.zhongzheng.common.core.domain.entity.TopSysUser;
+import com.zhongzheng.common.core.domain.model.LoginBody;
+import com.zhongzheng.common.core.domain.model.TopLoginUser;
+import com.zhongzheng.common.utils.ServletUtils;
+import com.zhongzheng.framework.web.service.TokenService;
+import com.zhongzheng.framework.web.service.TopSysLoginService;
+import com.zhongzheng.framework.web.service.TopSysPermissionService;
+import com.zhongzheng.framework.web.service.TopTokenService;
+import com.zhongzheng.modules.top.user.domain.TopSysMenu;
+import com.zhongzheng.modules.top.user.service.ITopSysMenuService;
+import com.zhongzheng.modules.top.user.service.ITopSysRoleService;
+import com.zhongzheng.modules.top.user.service.ITopSysUserService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+/**
+ * 登录验证
+ *
+ * @author zhongzheng
+ */
+@Api(tags ="登录用户操作管理")
+@RestController
+public class SuperSysLoginController
+{
+    @Autowired
+    private TopSysLoginService loginService;
+
+    @Autowired
+    private ITopSysMenuService menuService;
+
+    @Autowired
+    private TopSysPermissionService permissionService;
+
+    @Autowired
+    private TopTokenService topTokenService;
+
+
+
+    @Autowired
+    private TokenService tokenService;
+
+    @Autowired
+    private ITopSysUserService userService;
+
+    @Autowired
+    private ITopSysRoleService iTopSysRoleService;
+    /**
+     * 登录方法
+     *
+     * @param loginBody 登录信息
+     * @return 结果
+     */
+    @ApiOperation("登录")
+    @PostMapping("/login")
+    public AjaxResult login(@RequestBody LoginBody loginBody)
+    {
+        AjaxResult ajax = AjaxResult.success();
+
+        // 生成令牌
+        String token = loginService.login(loginBody.getUsername(), loginBody.getPassword(), loginBody.getCode(),
+                loginBody.getUuid());
+        ajax.put(Constants.TOKEN, token);
+        return ajax;
+    }
+
+    /**
+     * 获取用户信息
+     *
+     * @return 用户信息
+     */
+    @ApiOperation("登录用户信息")
+    @GetMapping("getInfo")
+    public AjaxResult getInfo()
+    {
+        TopLoginUser loginUser = topTokenService.getLoginUser(ServletUtils.getRequest());
+        TopSysUser user = loginUser.getUser();
+
+        // 角色集合
+        Set<String> roles = permissionService.getRolePermission(user);
+        // 权限集合
+        Set<String> permissions = permissionService.getMenuPermission(user);
+        List<Integer> rolesId = iTopSysRoleService.selectRoleListByUserId(user.getUserId());
+        Map<String,Object> map = new HashMap<>();
+        map.put("user", user);
+        map.put("roles", roles);
+        map.put("permissions", permissions);
+        map.put("rolesId", rolesId);
+
+        return AjaxResult.success(map);
+
+    }
+
+    /**
+     * 获取路由信息
+     *
+     * @return 路由信息
+     */
+    @ApiOperation("路由菜单信息")
+    @GetMapping("getRouters")
+    public AjaxResult getRouters()
+    {
+        TopLoginUser loginUser = topTokenService.getLoginUser(ServletUtils.getRequest());
+        // 用户信息
+        TopSysUser user = loginUser.getUser();
+        List<TopSysMenu> menus = menuService.selectMenuTreeByUserId(user.getUserId());
+        return AjaxResult.success(menuService.buildMenus(menus));
+    }
+
+//    /**
+//     * 获取子系统令牌
+//     *
+//     * @return 获取子系统令牌
+//     */
+//    @ApiOperation("获取子系统令牌")
+//    @GetMapping("getChildToken")
+//    public AjaxResult getChildToken()
+//    {
+//        //普通系统用户
+//        TopSysUser user = userService.selectUserByUserName("admin");
+//        TopLoginUser loginUser = new TopLoginUser(user, permissionService.getMenuPermission(user));
+//        String token = tokenService.createToken(loginUser);
+//        AjaxResult ajax = AjaxResult.success();
+//        ajax.put(Constants.TOKEN, token);
+//        return ajax;
+//    }
+}

+ 144 - 0
zhongzheng-admin-saas/src/main/java/com/zhongzheng/controller/system/SysProfileController.java

@@ -0,0 +1,144 @@
+package com.zhongzheng.controller.system;
+
+import cn.hutool.core.util.StrUtil;
+import com.zhongzheng.common.annotation.Log;
+import com.zhongzheng.common.config.RuoYiConfig;
+import com.zhongzheng.common.constant.UserConstants;
+import com.zhongzheng.common.core.controller.BaseController;
+import com.zhongzheng.common.core.domain.AjaxResult;
+import com.zhongzheng.common.core.domain.entity.SysUser;
+import com.zhongzheng.common.core.domain.entity.TopSysUser;
+import com.zhongzheng.common.core.domain.model.LoginUser;
+import com.zhongzheng.common.core.domain.model.TopLoginUser;
+import com.zhongzheng.common.enums.BusinessType;
+import com.zhongzheng.common.exception.CustomException;
+import com.zhongzheng.common.utils.SecurityUtils;
+import com.zhongzheng.common.utils.ServletUtils;
+import com.zhongzheng.common.utils.ToolsUtils;
+import com.zhongzheng.common.utils.file.FileUploadUtils;
+import com.zhongzheng.framework.web.service.TokenService;
+import com.zhongzheng.framework.web.service.TopTokenService;
+import com.zhongzheng.modules.system.service.ISysUserService;
+import com.zhongzheng.modules.top.user.service.ITopSysUserService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.io.IOException;
+
+/**
+ * 个人信息 业务处理
+ *
+ * @author zhongzheng
+ */
+@RestController
+@RequestMapping("/system/user/profile")
+public class SysProfileController extends BaseController
+{
+    @Autowired
+    private ITopSysUserService userService;
+
+
+    @Autowired
+    private TopTokenService topTokenService;
+
+    /**
+     * 个人信息
+     */
+    @GetMapping
+    public AjaxResult profile()
+    {
+        TopLoginUser loginUser = topTokenService.getLoginUser(ServletUtils.getRequest());
+        TopSysUser user = loginUser.getUser();
+        AjaxResult ajax = AjaxResult.success(user);
+        ajax.put("roleGroup", userService.selectUserRoleGroup(loginUser.getUsername()));
+        ajax.put("postGroup", userService.selectUserPostGroup(loginUser.getUsername()));
+        return ajax;
+    }
+
+    /**
+     * 修改用户
+     */
+    @Log(title = "个人信息", businessType = BusinessType.UPDATE)
+    @PutMapping
+    public AjaxResult updateProfile(@RequestBody TopSysUser user)
+    {
+        if (StrUtil.isNotEmpty(user.getPhonenumber())
+                && UserConstants.NOT_UNIQUE.equals(userService.checkPhoneUnique(user)))
+        {
+            return AjaxResult.error("修改用户'" + user.getUserName() + "'失败,手机号码已存在");
+        }
+        if (StrUtil.isNotEmpty(user.getEmail())
+                && UserConstants.NOT_UNIQUE.equals(userService.checkEmailUnique(user)))
+        {
+            return AjaxResult.error("修改用户'" + user.getUserName() + "'失败,邮箱账号已存在");
+        }
+        if (userService.updateUserProfile(user) > 0)
+        {
+            TopLoginUser loginUser = topTokenService.getLoginUser(ServletUtils.getRequest());
+            // 更新缓存用户信息
+            loginUser.getUser().setNickName(user.getNickName());
+            loginUser.getUser().setPhonenumber(user.getPhonenumber());
+            loginUser.getUser().setEmail(user.getEmail());
+            loginUser.getUser().setSex(user.getSex());
+            topTokenService.setLoginUser(loginUser);
+            return AjaxResult.success();
+        }
+        return AjaxResult.error("修改个人信息异常,请联系管理员");
+    }
+
+    /**
+     * 重置密码
+     */
+    @Log(title = "个人信息", businessType = BusinessType.UPDATE)
+    @PutMapping("/updatePwd")
+    public AjaxResult updatePwd(String oldPassword, String newPassword)
+    {
+        TopLoginUser loginUser = topTokenService.getLoginUser(ServletUtils.getRequest());
+        String userName = loginUser.getUsername();
+        String password = loginUser.getPassword();
+        if (!SecurityUtils.matchesPassword(oldPassword, password))
+        {
+            return AjaxResult.error("修改密码失败,旧密码错误");
+        }
+        if(!ToolsUtils.verifEasyPwd(newPassword)){
+            throw new CustomException("密码应由8-16位数字、大小写字母、符号组成");
+        }
+        if (SecurityUtils.matchesPassword(newPassword, password))
+        {
+            return AjaxResult.error("新密码不能与旧密码相同");
+        }
+        if (userService.resetUserPwd(userName, SecurityUtils.encryptPassword(newPassword)) > 0)
+        {
+            // 更新缓存用户密码
+            loginUser.getUser().setPassword(SecurityUtils.encryptPassword(newPassword));
+            topTokenService.setLoginUser(loginUser);
+            return AjaxResult.success();
+        }
+        return AjaxResult.error("修改密码异常,请联系管理员");
+    }
+
+    /**
+     * 头像上传
+     */
+    @Log(title = "用户头像", businessType = BusinessType.UPDATE)
+    @PostMapping("/avatar")
+    public AjaxResult avatar(@RequestParam("avatarfile") MultipartFile file) throws IOException
+    {
+        if (!file.isEmpty())
+        {
+            TopLoginUser loginUser = topTokenService.getLoginUser(ServletUtils.getRequest());
+            String avatar = FileUploadUtils.upload(RuoYiConfig.getAvatarPath(), file);
+            if (userService.updateUserAvatar(loginUser.getUsername(), avatar))
+            {
+                AjaxResult ajax = AjaxResult.success();
+                ajax.put("imgUrl", avatar);
+                // 更新缓存用户头像
+                loginUser.getUser().setAvatar(avatar);
+                topTokenService.setLoginUser(loginUser);
+                return ajax;
+            }
+        }
+        return AjaxResult.error("上传图片异常,请联系管理员");
+    }
+}

+ 158 - 0
zhongzheng-admin-saas/src/main/java/com/zhongzheng/controller/system/SysTenantController.java

@@ -0,0 +1,158 @@
+package com.zhongzheng.controller.system;
+
+import java.util.List;
+import java.util.Arrays;
+
+import com.zhongzheng.modules.system.bo.*;
+import com.zhongzheng.modules.system.service.ISysTenantService;
+import com.zhongzheng.modules.system.vo.SysTenantBankAccountVo;
+import com.zhongzheng.modules.system.vo.SysTenantVo;
+import lombok.RequiredArgsConstructor;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.PutMapping;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import com.zhongzheng.common.annotation.Log;
+import com.zhongzheng.common.core.controller.BaseController;
+import com.zhongzheng.common.core.domain.AjaxResult;
+import com.zhongzheng.common.enums.BusinessType;
+import com.zhongzheng.common.utils.poi.ExcelUtil;
+import com.zhongzheng.common.core.page.TableDataInfo;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+
+/**
+ * 系统商户Controller
+ *
+ * @author hjl
+ * @date 2021-08-03
+ */
+@Api(value = "系统商户控制器", tags = {"系统商户管理"})
+@RequiredArgsConstructor(onConstructor_ = @Autowired)
+@RestController
+@RequestMapping("/system/tenant")
+public class SysTenantController extends BaseController {
+
+    private final ISysTenantService iSysTenantService;
+
+    /**
+     * 查询系统商户列表
+     */
+    @ApiOperation("查询系统商户列表")
+    @PreAuthorize("@ss.hasPermi('system:tenant:list')")
+    @GetMapping("/list")
+    public TableDataInfo<SysTenantVo> list(SysTenantQueryBo bo) {
+        startPage();
+        List<SysTenantVo> list = iSysTenantService.queryList(bo);
+        return getDataTable(list);
+    }
+
+    /**
+     * 导出系统商户列表
+     */
+   /* @ApiOperation("导出系统商户列表")
+    @PreAuthorize("@ss.hasPermi('system:tenant:export')")
+    @Log(title = "系统商户", businessType = BusinessType.EXPORT)
+    @GetMapping("/export")
+    public AjaxResult<SysTenantVo> export(SysTenantQueryBo bo) {
+        List<SysTenantVo> list = iSysTenantService.queryList(bo);
+        ExcelUtil<SysTenantVo> util = new ExcelUtil<SysTenantVo>(SysTenantVo.class);
+        return util.exportExcel(list, "系统商户");
+    }*/
+
+    /**
+     * 获取系统商户详细信息
+     */
+    @ApiOperation("获取系统商户详细信息")
+    @PreAuthorize("@ss.hasPermi('system:tenant:query')")
+    @GetMapping("/{tenantId}")
+    public AjaxResult<SysTenantVo> getInfo(@PathVariable("tenantId" ) Long tenantId) {
+        return AjaxResult.success(iSysTenantService.queryById(tenantId));
+    }
+
+    /**
+     * 获取系统商户银行账号信息
+     */
+    @ApiOperation("获取系统商户银行账号信息")
+    @GetMapping("/bank/{tenantId}")
+    public AjaxResult<List<SysTenantBankAccountVo>> getBankAccountList(@PathVariable("tenantId" ) String tenantId) {
+        return AjaxResult.success(iSysTenantService.getBankAccountList(tenantId));
+    }
+
+    /**
+     * 新增系统商户
+     */
+    @ApiOperation("新增系统商户")
+    @PreAuthorize("@ss.hasPermi('system:tenant:add')")
+    @Log(title = "系统商户", businessType = BusinessType.INSERT)
+    @PostMapping()
+    public AjaxResult<Void> add(@Validated @RequestBody SysTenantAddBo bo) {
+        return toAjax(iSysTenantService.insertByAddBo(bo) ? 1 : 0);
+    }
+
+    /**
+     * 总平台新增系统商户
+     */
+    @ApiOperation("总平台新增系统商户")
+    @PostMapping("/add")
+    public AjaxResult<Void> addTopTenant(@Validated @RequestBody SysTopTenantAddBo bo) {
+        return toAjax(iSysTenantService.addTopTenant(bo) ? 1 : 0);
+    }
+
+    /**
+     * 修改系统商户
+     */
+    @ApiOperation("修改系统商户")
+    @PreAuthorize("@ss.hasPermi('system:tenant:edit')")
+    @Log(title = "系统商户", businessType = BusinessType.UPDATE)
+    @PostMapping("/edit")
+    public AjaxResult<Void> edit(@RequestBody SysTenantEditBo bo) {
+        return toAjax(iSysTenantService.updateByEditBo(bo) ? 1 : 0);
+    }
+
+    /**
+     * 总平台修改系统商户
+     */
+    @ApiOperation("总平台修改系统商户")
+    @PostMapping("/edit/top")
+    public AjaxResult<Void> editTopTenant(@RequestBody SysTopTenantEditBo bo) {
+        return toAjax(iSysTenantService.editTopTenant(bo) ? 1 : 0);
+    }
+
+    /**
+     * 删除机构
+     */
+    @ApiOperation("删除机构")
+    @PostMapping("/delete/top")
+    public AjaxResult<Void> deleteTopTenant(@RequestBody SysTopTenantEditBo bo) {
+        return toAjax(iSysTenantService.deleteTopTenant(bo) ? 1 : 0);
+    }
+
+    /**
+     * 查询系统商户列表
+     */
+    @ApiOperation("查询系统商户列表")
+    @GetMapping("/top/list")
+    public AjaxResult<List<SysTenantVo>> getTopListAll(SysTenantQueryBo bo) {
+        List<SysTenantVo> list = iSysTenantService.queryList(bo);
+        return AjaxResult.success(list);
+    }
+
+    /**
+     * 删除系统商户
+     */
+   /* @ApiOperation("删除系统商户")
+    @PreAuthorize("@ss.hasPermi('system:tenant:remove')")
+    @Log(title = "系统商户" , businessType = BusinessType.DELETE)
+    @DeleteMapping("/{tenantIds}")
+    public AjaxResult<Void> remove(@PathVariable Long[] tenantIds) {
+        return toAjax(iSysTenantService.deleteWithValidByIds(Arrays.asList(tenantIds), true) ? 1 : 0);
+    }*/
+}

+ 99 - 0
zhongzheng-admin-saas/src/main/java/com/zhongzheng/controller/top/TopCostCategoryController.java

@@ -0,0 +1,99 @@
+package com.zhongzheng.controller.top;
+
+import java.util.List;
+import java.util.Arrays;
+
+import com.zhongzheng.modules.top.system.bo.TopCostCategoryAddBo;
+import com.zhongzheng.modules.top.system.bo.TopCostCategoryEditBo;
+import com.zhongzheng.modules.top.system.bo.TopCostCategoryQueryBo;
+import com.zhongzheng.modules.top.system.service.ITopCostCategoryService;
+import com.zhongzheng.modules.top.system.vo.TopCostCategoryVo;
+import lombok.RequiredArgsConstructor;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.PutMapping;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import com.zhongzheng.common.annotation.Log;
+import com.zhongzheng.common.core.controller.BaseController;
+import com.zhongzheng.common.core.domain.AjaxResult;
+import com.zhongzheng.common.enums.BusinessType;
+import com.zhongzheng.common.utils.poi.ExcelUtil;
+import com.zhongzheng.common.core.page.TableDataInfo;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+
+/**
+ * 机构成本类别Controller
+ *
+ * @author ruoyi
+ * @date 2023-07-27
+ */
+@Api(value = "机构成本类别控制器", tags = {"机构成本类别管理"})
+@RequiredArgsConstructor(onConstructor_ = @Autowired)
+@RestController
+@RequestMapping("/top/category")
+public class TopCostCategoryController extends BaseController {
+
+    private final ITopCostCategoryService iTopCostCategoryService;
+
+    /**
+     * 查询机构成本类别列表
+     */
+    @ApiOperation("查询机构成本类别列表")
+    @PreAuthorize("@ss.hasPermi('system:category:list')")
+    @GetMapping("/list")
+    public TableDataInfo<TopCostCategoryVo> list(TopCostCategoryQueryBo bo) {
+        startPage();
+        List<TopCostCategoryVo> list = iTopCostCategoryService.queryList(bo);
+        return getDataTable(list);
+    }
+
+
+
+    /**
+     * 获取机构成本类别详细信息
+     */
+    @ApiOperation("获取机构成本类别详细信息")
+    @PreAuthorize("@ss.hasPermi('system:category:query')")
+    @GetMapping("/{categoryId}")
+    public AjaxResult<TopCostCategoryVo> getInfo(@PathVariable("categoryId" ) Long categoryId) {
+        return AjaxResult.success(iTopCostCategoryService.queryById(categoryId));
+    }
+
+    /**
+     * 新增机构成本类别
+     */
+    @ApiOperation("新增机构成本类别")
+    @PreAuthorize("@ss.hasPermi('system:category:add')")
+    @Log(title = "机构成本类别", businessType = BusinessType.INSERT)
+    @PostMapping()
+    public AjaxResult<Void> add(@RequestBody TopCostCategoryAddBo bo) {
+        return toAjax(iTopCostCategoryService.insertByAddBo(bo) ? 1 : 0);
+    }
+
+    /**
+     * 修改机构成本类别
+     */
+    @ApiOperation("修改机构成本类别")
+    @PreAuthorize("@ss.hasPermi('system:category:edit')")
+    @Log(title = "机构成本类别", businessType = BusinessType.UPDATE)
+    @PostMapping("/edit")
+    public AjaxResult<Void> edit(@RequestBody TopCostCategoryEditBo bo) {
+        return toAjax(iTopCostCategoryService.updateByEditBo(bo) ? 1 : 0);
+    }
+
+    @ApiOperation("机构成本类别批量删除")
+    @PreAuthorize("@ss.hasPermi('system:tp:edit')")
+    @Log(title = "机构成本类别批量删除", businessType = BusinessType.UPDATE)
+    @PostMapping("/deleteBatch")
+    public AjaxResult<Void> deleteBatch(@RequestBody TopCostCategoryEditBo bo) {
+        return toAjax(iTopCostCategoryService.deleteBatch(bo) ? 1 : 0);
+    }
+
+}

+ 101 - 0
zhongzheng-admin-saas/src/main/java/com/zhongzheng/controller/top/TopInstCategoryController.java

@@ -0,0 +1,101 @@
+package com.zhongzheng.controller.top;
+
+import java.util.List;
+import java.util.Arrays;
+
+import com.zhongzheng.modules.top.financial.bo.TopCostInstTpQueryBo;
+import com.zhongzheng.modules.top.system.bo.TopInstCategoryAddBo;
+import com.zhongzheng.modules.top.system.bo.TopInstCategoryEditBo;
+import com.zhongzheng.modules.top.system.bo.TopInstCategoryQueryBo;
+import com.zhongzheng.modules.top.system.service.ITopInstCategoryService;
+import com.zhongzheng.modules.top.system.vo.TopInstCategoryVo;
+import lombok.RequiredArgsConstructor;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.PutMapping;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import com.zhongzheng.common.annotation.Log;
+import com.zhongzheng.common.core.controller.BaseController;
+import com.zhongzheng.common.core.domain.AjaxResult;
+import com.zhongzheng.common.enums.BusinessType;
+
+import com.zhongzheng.common.utils.poi.ExcelUtil;
+import com.zhongzheng.common.core.page.TableDataInfo;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+
+/**
+ * 供应商成本分类Controller
+ *
+ * @author ruoyi
+ * @date 2023-07-20
+ */
+@Api(value = "供应商成本分类控制器", tags = {"供应商成本分类管理"})
+@RequiredArgsConstructor(onConstructor_ = @Autowired)
+@RestController
+@RequestMapping("/top/inst/category")
+public class TopInstCategoryController extends BaseController {
+
+    private final ITopInstCategoryService iTopInstCategoryService;
+
+    /**
+     * 查询供应商成本分类列表
+     */
+    @ApiOperation("查询供应商成本分类列表")
+    @PreAuthorize("@ss.hasPermi('system:category:list')")
+    @GetMapping("/list")
+    public TableDataInfo<TopInstCategoryVo> list(TopInstCategoryQueryBo bo) {
+        startPage();
+        bo.setStatus(1);
+        List<TopInstCategoryVo> list = iTopInstCategoryService.queryList(bo);
+        return getDataTable(list);
+    }
+
+
+
+    /**
+     * 获取供应商成本分类详细信息
+     */
+    @ApiOperation("获取供应商成本分类详细信息")
+    @PreAuthorize("@ss.hasPermi('system:category:query')")
+    @GetMapping("/{costCatId}")
+    public AjaxResult<TopInstCategoryVo> getInfo(@PathVariable("costCatId" ) Long costCatId) {
+        return AjaxResult.success(iTopInstCategoryService.queryById(costCatId));
+    }
+
+    /**
+     * 新增供应商成本分类
+     */
+    @ApiOperation("新增供应商成本分类")
+    @PreAuthorize("@ss.hasPermi('system:category:add')")
+    @Log(title = "供应商成本分类", businessType = BusinessType.INSERT)
+    @PostMapping()
+    public AjaxResult<Void> add(@RequestBody TopInstCategoryAddBo bo) {
+        return toAjax(iTopInstCategoryService.insertByAddBo(bo) ? 1 : 0);
+    }
+
+    /**
+     * 修改供应商成本分类
+     */
+    @ApiOperation("修改供应商成本分类")
+    @PreAuthorize("@ss.hasPermi('system:category:edit')")
+    @Log(title = "供应商成本分类", businessType = BusinessType.UPDATE)
+    @PostMapping("/edit")
+    public AjaxResult<Void> edit(@RequestBody TopInstCategoryEditBo bo) {
+        return toAjax(iTopInstCategoryService.updateByEditBo(bo) ? 1 : 0);
+    }
+
+    @ApiOperation("供应商成本分类批量删除")
+    @PreAuthorize("@ss.hasPermi('system:tp:edit')")
+    @Log(title = "供应商成本分类批量删除", businessType = BusinessType.UPDATE)
+    @PostMapping("/deleteBatch")
+    public AjaxResult<Void> deleteBatch(@RequestBody TopInstCategoryEditBo bo) {
+        return toAjax(iTopInstCategoryService.deleteBatch(bo) ? 1 : 0);
+    }
+}

+ 121 - 0
zhongzheng-admin-saas/src/main/java/com/zhongzheng/controller/top/TopInstitutionController.java

@@ -0,0 +1,121 @@
+package com.zhongzheng.controller.top;
+
+import java.util.List;
+import java.util.Arrays;
+
+import com.zhongzheng.modules.top.financial.bo.TopCostInstTpQueryBo;
+import com.zhongzheng.modules.top.system.bo.TopInstitutionAddBo;
+import com.zhongzheng.modules.top.system.bo.TopInstitutionEditBo;
+import com.zhongzheng.modules.top.system.bo.TopInstitutionQueryBo;
+import com.zhongzheng.modules.top.system.service.ITopInstitutionService;
+import com.zhongzheng.modules.top.system.vo.TopInstitutionVo;
+import com.zhongzheng.modules.user.bo.UserQueryBo;
+import com.zhongzheng.modules.user.vo.UserExportVo;
+import lombok.RequiredArgsConstructor;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.PutMapping;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import com.zhongzheng.common.annotation.Log;
+import com.zhongzheng.common.core.controller.BaseController;
+import com.zhongzheng.common.core.domain.AjaxResult;
+import com.zhongzheng.common.enums.BusinessType;
+import com.zhongzheng.common.utils.poi.ExcelUtil;
+import com.zhongzheng.common.core.page.TableDataInfo;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+
+/**
+ * 职能机构Controller
+ *
+ * @author ruoyi
+ * @date 2023-07-17
+ */
+@Api(value = "职能机构控制器", tags = {"职能机构管理"})
+@RequiredArgsConstructor(onConstructor_ = @Autowired)
+@RestController
+@RequestMapping("/top/institution")
+public class TopInstitutionController extends BaseController {
+
+    private final ITopInstitutionService iTopInstitutionService;
+
+    /**
+     * 查询职能机构列表
+     */
+    @ApiOperation("查询职能机构列表")
+    @PreAuthorize("@ss.hasPermi('system:institution:list')")
+    @GetMapping("/list")
+    public TableDataInfo<TopInstitutionVo> list(TopInstitutionQueryBo bo) {
+        startPage();
+        bo.setStatus(1);
+        List<TopInstitutionVo> list = iTopInstitutionService.queryList(bo);
+        return getDataTable(list);
+    }
+
+    @ApiOperation("导出职能机构列表")
+    @PreAuthorize("@ss.hasPermi('app:user:list')")
+    @GetMapping("/listExport")
+    public AjaxResult<TopInstitutionVo> listExport(TopInstitutionQueryBo bo) {
+        List<TopInstitutionVo> list = iTopInstitutionService.queryList(bo);
+        ExcelUtil<TopInstitutionVo> util = new ExcelUtil<>(TopInstitutionVo.class);
+        return util.exportExcel(list,"导出职能机构列表");
+    }
+
+    @ApiOperation("成本分类查询职能机构列表")
+    @PreAuthorize("@ss.hasPermi('system:institution:list')")
+    @GetMapping("/listByCat")
+    public TableDataInfo<TopInstitutionVo> listByCat(TopInstitutionQueryBo bo) {
+        startPage();
+        List<TopInstitutionVo> list = iTopInstitutionService.listByCat(bo);
+        return getDataTable(list);
+    }
+
+
+
+    /**
+     * 获取职能机构详细信息
+     */
+    @ApiOperation("获取职能机构详细信息")
+    @PreAuthorize("@ss.hasPermi('system:institution:query')")
+    @GetMapping("/{instId}")
+    public AjaxResult<TopInstitutionVo> getInfo(@PathVariable("instId" ) Long instId) {
+        return AjaxResult.success(iTopInstitutionService.queryById(instId));
+    }
+
+    /**
+     * 新增职能机构
+     */
+    @ApiOperation("新增职能机构")
+    @PreAuthorize("@ss.hasPermi('system:institution:add')")
+    @Log(title = "职能机构", businessType = BusinessType.INSERT)
+    @PostMapping()
+    public AjaxResult<Void> add(@RequestBody TopInstitutionAddBo bo) {
+        return toAjax(iTopInstitutionService.insertByAddBo(bo) ? 1 : 0);
+    }
+
+    /**
+     * 修改职能机构
+     */
+    @ApiOperation("修改职能机构")
+    @PreAuthorize("@ss.hasPermi('system:institution:edit')")
+    @Log(title = "职能机构", businessType = BusinessType.UPDATE)
+    @PostMapping("/edit")
+    public AjaxResult<Void> edit(@RequestBody TopInstitutionEditBo bo) {
+        return toAjax(iTopInstitutionService.updateByEditBo(bo) ? 1 : 0);
+    }
+
+    @ApiOperation("职能机构批量删除")
+    @PreAuthorize("@ss.hasPermi('system:tp:edit')")
+    @Log(title = "职能机构批量删除", businessType = BusinessType.UPDATE)
+    @PostMapping("/deleteBatch")
+    public AjaxResult<Void> deleteBatch(@RequestBody TopInstitutionQueryBo bo) {
+        return toAjax(iTopInstitutionService.deleteBatch(bo) ? 1 : 0);
+    }
+
+}

+ 140 - 0
zhongzheng-admin-saas/src/main/java/com/zhongzheng/controller/top/TopSysConfigController.java

@@ -0,0 +1,140 @@
+package com.zhongzheng.controller.top;
+
+import com.zhongzheng.common.annotation.Log;
+import com.zhongzheng.common.annotation.RepeatSubmit;
+import com.zhongzheng.common.constant.UserConstants;
+import com.zhongzheng.common.core.controller.BaseController;
+import com.zhongzheng.common.core.domain.AjaxResult;
+import com.zhongzheng.common.core.page.TableDataInfo;
+import com.zhongzheng.common.enums.BusinessType;
+import com.zhongzheng.common.utils.SecurityUtils;
+import com.zhongzheng.modules.top.user.service.ITopSysConfigService;
+import com.zhongzheng.modules.top.user.vo.TopSysConfigVo;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.RequiredArgsConstructor;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+/**
+ * 【请填写功能名称】Controller
+ * 
+ * @author ruoyi
+ * @date 2023-03-10
+ */
+@Api(value = "【请填写功能名称】控制器", tags = {"【请填写功能名称】管理"})
+@RequiredArgsConstructor(onConstructor_ = @Autowired)
+@RestController
+@RequestMapping("/system/config")
+public class TopSysConfigController extends BaseController {
+    @Autowired
+    private ITopSysConfigService topConfigService;
+
+    /**
+     * 获取参数配置列表
+     */
+    @ApiOperation("配置列表")
+    @PreAuthorize("@ss.hasPermi('system:config:list')")
+    @GetMapping("/list")
+    public TableDataInfo list(TopSysConfigVo config)
+    {
+        startPage();
+        List<TopSysConfigVo> list = topConfigService.selectConfigList(config);
+        return getDataTable(list);
+    }
+
+    /*@Log(title = "参数管理", businessType = BusinessType.EXPORT)
+    @PreAuthorize("@ss.hasPermi('system:config:export')")
+    @GetMapping("/export")
+    public AjaxResult export(SysConfig config)
+    {
+        List<SysConfig> list = topConfigService.selectConfigList(config);
+        ExcelUtil<SysConfig> util = new ExcelUtil<SysConfig>(SysConfig.class);
+        return util.exportExcel(list, "参数数据");
+    }*/
+
+    /**
+     * 根据参数编号获取详细信息
+     */
+    @ApiOperation("通过ID配置详情")
+    @PreAuthorize("@ss.hasPermi('system:config:query')")
+    @GetMapping(value = "/{configId}")
+    public AjaxResult getInfo(@PathVariable Long configId)
+    {
+        return AjaxResult.success(topConfigService.selectConfigById(configId));
+    }
+
+    /**
+     * 根据参数键名查询参数值
+     */
+    @ApiOperation("通过KEY获取配置详情")
+    @GetMapping(value = "/configKey/{configKey}")
+    public AjaxResult getConfigKey(@PathVariable String configKey)
+    {
+        return AjaxResult.success("配置内容",topConfigService.selectConfigByKey(configKey));
+    }
+
+    /**
+     * 新增参数配置
+     */
+    @ApiOperation("新增配置")
+    @PreAuthorize("@ss.hasPermi('system:config:add')")
+    @Log(title = "参数管理", businessType = BusinessType.INSERT)
+    @PostMapping
+    @RepeatSubmit
+    public AjaxResult add(@Validated @RequestBody TopSysConfigVo config)
+    {
+        if (UserConstants.NOT_UNIQUE.equals(topConfigService.checkConfigKeyUnique(config)))
+        {
+            return AjaxResult.error("新增参数'" + config.getConfigName() + "'失败,参数键名已存在");
+        }
+        config.setCreateBy(SecurityUtils.getUsername());
+        return toAjax(topConfigService.insertConfig(config));
+    }
+
+    /**
+     * 修改参数配置
+     */
+    @ApiOperation("修改配置")
+    @PreAuthorize("@ss.hasPermi('system:config:edit')")
+    @Log(title = "参数管理", businessType = BusinessType.UPDATE)
+    @PutMapping
+    public AjaxResult edit(@Validated @RequestBody TopSysConfigVo config)
+    {
+        if (UserConstants.NOT_UNIQUE.equals(topConfigService.checkConfigKeyUnique(config)))
+        {
+            return AjaxResult.error("修改参数'" + config.getConfigName() + "'失败,参数键名已存在");
+        }
+        config.setUpdateBy(SecurityUtils.getUsername());
+        return toAjax(topConfigService.updateConfig(config));
+    }
+
+    /**
+     * 删除参数配置
+     */
+    @ApiOperation("删除配置")
+    @PreAuthorize("@ss.hasPermi('system:config:remove')")
+    @Log(title = "参数管理", businessType = BusinessType.DELETE)
+    @DeleteMapping("/{configIds}")
+    public AjaxResult remove(@PathVariable Long[] configIds)
+    {
+        return toAjax(topConfigService.deleteConfigByIds(configIds));
+    }
+
+    /**
+     * 清空缓存
+     */
+    @ApiOperation("刷新配置缓存")
+    @PreAuthorize("@ss.hasPermi('system:config:remove')")
+    @Log(title = "参数管理", businessType = BusinessType.CLEAN)
+    @DeleteMapping("/clearCache")
+    public AjaxResult clearCache()
+    {
+        topConfigService.clearCache();
+        return AjaxResult.success();
+    }
+}

+ 174 - 0
zhongzheng-admin-saas/src/main/java/com/zhongzheng/controller/top/TopSysDeptController.java

@@ -0,0 +1,174 @@
+package com.zhongzheng.controller.top;
+
+import cn.hutool.core.util.StrUtil;
+import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
+import com.zhongzheng.common.annotation.Log;
+import com.zhongzheng.common.constant.UserConstants;
+import com.zhongzheng.common.core.controller.BaseController;
+import com.zhongzheng.common.core.domain.AjaxResult;
+import com.zhongzheng.common.enums.BusinessType;
+import com.zhongzheng.common.utils.SecurityUtils;
+import com.zhongzheng.modules.top.user.domain.TopSysDept;
+import com.zhongzheng.modules.top.user.service.ITopSysDeptService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.RequiredArgsConstructor;
+import org.apache.commons.lang3.ArrayUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 部门Controller
+ * 
+ * @author ruoyi
+ * @date 2023-03-10
+ */
+@Api(value = "部门控制器", tags = {"部门管理"})
+@RequiredArgsConstructor(onConstructor_ = @Autowired)
+@RestController
+@RequestMapping("/system/dept")
+public class TopSysDeptController extends BaseController {
+    @Autowired
+    private ITopSysDeptService topDeptService;
+
+    /**
+     * 获取部门列表
+     */
+    @ApiOperation("部门列表")
+    @PreAuthorize("@ss.hasPermi('system:dept:list')")
+    @GetMapping("/list")
+    public AjaxResult list(TopSysDept dept)
+    {
+        List<TopSysDept> depts = topDeptService.selectDeptList(dept);
+        return AjaxResult.success(depts);
+    }
+
+    /**
+     * 查询部门列表(排除节点)
+     */
+    @ApiOperation("查询部门列表(节点)")
+    @PreAuthorize("@ss.hasPermi('system:dept:list')")
+    @GetMapping("/list/exclude/{deptId}")
+    public AjaxResult excludeChild(@PathVariable(value = "deptId", required = false) Long deptId)
+    {
+        List<TopSysDept> depts = topDeptService.selectDeptList(new TopSysDept());
+        Iterator<TopSysDept> it = depts.iterator();
+        while (it.hasNext())
+        {
+            TopSysDept d = (TopSysDept) it.next();
+            if (d.getDeptId().intValue() == deptId
+                    || ArrayUtils.contains(StrUtil.split(d.getAncestors(), ","), deptId + ""))
+            {
+                it.remove();
+            }
+        }
+        return AjaxResult.success(depts);
+    }
+
+    /**
+     * 根据部门编号获取详细信息
+     */
+    @ApiOperation("根据部门编号获取详细信息")
+    @PreAuthorize("@ss.hasPermi('system:dept:query')")
+    @GetMapping(value = "/{deptId}")
+    public AjaxResult getInfo(@PathVariable Long deptId)
+    {
+        return AjaxResult.success(topDeptService.selectDeptById(deptId));
+    }
+
+    /**
+     * 获取部门下拉树列表
+     */
+    @ApiOperation("获取部门下拉树列表")
+    @GetMapping("/treeselect")
+    public AjaxResult treeselect(TopSysDept dept)
+    {
+        List<TopSysDept> depts = topDeptService.selectDeptList(dept);
+        return AjaxResult.success(topDeptService.buildDeptTreeSelect(depts));
+    }
+
+    /**
+     * 加载对应角色部门列表树
+     */
+    @ApiOperation("加载对应角色部门列表树")
+    @GetMapping(value = "/roleDeptTreeselect/{roleId}")
+    public AjaxResult roleDeptTreeselect(@PathVariable("roleId") Long roleId)
+    {
+        List<TopSysDept> depts = topDeptService.selectDeptList(new TopSysDept());
+        Map<String,Object> map = new HashMap<>();
+        map.put("checkedKeys", topDeptService.selectDeptListByRoleId(roleId));
+        map.put("depts", topDeptService.buildDeptTreeSelect(depts));
+        return AjaxResult.success(map);
+    }
+
+    /**
+     * 新增部门
+     */
+    @ApiOperation("新增部门")
+    @ApiOperationSupport(includeParameters = {"deptName","parentId","orderNum","status"})
+    @PreAuthorize("@ss.hasPermi('system:dept:add')")
+    @Log(title = "部门管理", businessType = BusinessType.INSERT)
+    @PostMapping
+    public AjaxResult add(@Validated @RequestBody TopSysDept dept)
+    {
+        if (UserConstants.NOT_UNIQUE.equals(topDeptService.checkDeptNameUnique(dept)))
+        {
+            return AjaxResult.error("新增部门'" + dept.getDeptName() + "'失败,部门名称已存在");
+        }
+        dept.setCreateBy(SecurityUtils.getUsername());
+        return toAjax(topDeptService.insertDept(dept));
+    }
+
+    /**
+     * 修改部门
+     */
+    @ApiOperation("修改部门")
+    @PreAuthorize("@ss.hasPermi('system:dept:edit')")
+    @Log(title = "部门管理", businessType = BusinessType.UPDATE)
+    @PostMapping("/edit")
+    public AjaxResult edit(@Validated @RequestBody TopSysDept dept)
+    {
+        if (UserConstants.NOT_UNIQUE.equals(topDeptService.checkDeptNameUnique(dept)))
+        {
+            return AjaxResult.error("修改部门'" + dept.getDeptName() + "'失败,部门名称已存在");
+        }
+        else if (dept.getParentId().equals(dept.getDeptId()))
+        {
+            return AjaxResult.error("修改部门'" + dept.getDeptName() + "'失败,上级部门不能是自己");
+        }
+        else if (StrUtil.equals(UserConstants.DEPT_DISABLE, dept.getStatus())
+                && topDeptService.selectNormalChildrenDeptById(dept.getDeptId()) > 0)
+        {
+            return AjaxResult.error("该部门包含未停用的子部门!");
+        }
+        dept.setUpdateBy(SecurityUtils.getUsername());
+        return toAjax(topDeptService.updateDept(dept));
+    }
+
+    /**
+     * 删除部门
+     */
+    @ApiOperation("删除部门")
+    @PreAuthorize("@ss.hasPermi('system:dept:remove')")
+    @Log(title = "部门管理", businessType = BusinessType.DELETE)
+    @PostMapping("/delete")
+    public AjaxResult remove(@PathVariable Long deptId)
+    {
+        if (topDeptService.hasChildByDeptId(deptId))
+        {
+            return AjaxResult.error("存在下级部门,不允许删除");
+        }
+        if (topDeptService.checkDeptExistUser(deptId))
+        {
+            return AjaxResult.error("部门存在用户,不允许删除");
+        }
+        return toAjax(topDeptService.deleteDeptById(deptId));
+    }
+}

+ 125 - 0
zhongzheng-admin-saas/src/main/java/com/zhongzheng/controller/top/TopSysDictDataController.java

@@ -0,0 +1,125 @@
+package com.zhongzheng.controller.top;
+
+import cn.hutool.core.lang.Validator;
+import com.zhongzheng.common.annotation.Log;
+import com.zhongzheng.common.core.controller.BaseController;
+import com.zhongzheng.common.core.domain.AjaxResult;
+import com.zhongzheng.common.core.page.TableDataInfo;
+import com.zhongzheng.common.enums.BusinessType;
+import com.zhongzheng.common.utils.SecurityUtils;
+import com.zhongzheng.common.utils.poi.ExcelUtil;
+import com.zhongzheng.modules.top.user.domain.TopSysDictData;
+import com.zhongzheng.modules.top.user.service.ITopSysDictDataService;
+import com.zhongzheng.modules.top.user.service.ITopSysDictTypeService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.RequiredArgsConstructor;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * 【请填写功能名称】Controller
+ * 
+ * @author ruoyi
+ * @date 2023-03-13
+ */
+@Api(value = "【请填写功能名称】控制器", tags = {"【请填写功能名称】管理"})
+@RequiredArgsConstructor(onConstructor_ = @Autowired)
+@RestController
+@RequestMapping("/system/dict/data")
+public class TopSysDictDataController extends BaseController {
+
+    private final ITopSysDictDataService dictDataService;
+
+    private final ITopSysDictTypeService dictTypeService;
+
+
+    @ApiOperation("获取字典数据列表")
+    //  @PreAuthorize("@ss.hasPermi('system:dict:list')")
+    @GetMapping("/list")
+    public TableDataInfo list(TopSysDictData dictData)
+    {
+        startPage();
+        List<TopSysDictData> list = dictDataService.selectDictDataList(dictData);
+        return getDataTable(list);
+    }
+
+    @Log(title = "字典数据", businessType = BusinessType.EXPORT)
+    //  @PreAuthorize("@ss.hasPermi('system:dict:export')")
+    @GetMapping("/export")
+    public AjaxResult export(TopSysDictData dictData)
+    {
+        List<TopSysDictData> list = dictDataService.selectDictDataList(dictData);
+        ExcelUtil<TopSysDictData> util = new ExcelUtil<TopSysDictData>(TopSysDictData.class);
+        return util.exportExcel(list, "字典数据");
+    }
+
+    /**
+     * 查询字典数据详细
+     */
+    @ApiOperation("查询字典数据详细")
+    // @PreAuthorize("@ss.hasPermi('system:dict:query')")
+    @GetMapping(value = "/{dictCode}")
+    public AjaxResult getInfo(@PathVariable Long dictCode)
+    {
+        return AjaxResult.success(dictDataService.selectDictDataById(dictCode));
+    }
+
+    /**
+     * 根据字典类型查询字典数据信息
+     */
+    @ApiOperation("根据字典类型查询字典数据信息")
+    @GetMapping(value = "/type/{dictType}")
+    public AjaxResult dictType(@PathVariable String dictType)
+    {
+        List<TopSysDictData> data = dictTypeService.selectDictDataByType(dictType);
+        if (Validator.isNull(data))
+        {
+            data = new ArrayList<TopSysDictData>();
+        }
+        return AjaxResult.success(data);
+    }
+
+    /**
+     * 新增字典类型
+     */
+    @ApiOperation("新增字典数据")
+    @PreAuthorize("@ss.hasPermi('system:dict:add')")
+    @Log(title = "字典数据", businessType = BusinessType.INSERT)
+    @PostMapping
+    public AjaxResult add(@Validated @RequestBody TopSysDictData dict)
+    {
+        dict.setCreateBy(SecurityUtils.getUsername());
+        return toAjax(dictDataService.insertDictData(dict));
+    }
+
+    /**
+     * 修改保存字典类型
+     */
+    @ApiOperation("修改保存字典数据")
+    @PreAuthorize("@ss.hasPermi('system:dict:edit')")
+    @Log(title = "字典数据", businessType = BusinessType.UPDATE)
+    @PostMapping("/edit")
+    public AjaxResult edit(@Validated @RequestBody TopSysDictData dict)
+    {
+        dict.setUpdateBy(SecurityUtils.getUsername());
+        return toAjax(dictDataService.updateDictData(dict));
+    }
+
+    /**
+     * 删除字典类型
+     */
+    @ApiOperation("删除字典数据")
+    @PreAuthorize("@ss.hasPermi('system:dict:remove')")
+    @Log(title = "字典类型", businessType = BusinessType.DELETE)
+    @PostMapping("/delete/{dictCodes}")
+    public AjaxResult remove(@PathVariable Long[] dictCodes)
+    {
+        return toAjax(dictDataService.deleteDictDataByIds(dictCodes));
+    }
+}

+ 117 - 0
zhongzheng-admin-saas/src/main/java/com/zhongzheng/controller/top/TopSysDictTypeController.java

@@ -0,0 +1,117 @@
+package com.zhongzheng.controller.top;
+
+import com.zhongzheng.common.annotation.Log;
+import com.zhongzheng.common.constant.UserConstants;
+import com.zhongzheng.common.core.controller.BaseController;
+import com.zhongzheng.common.core.domain.AjaxResult;
+import com.zhongzheng.common.core.page.TableDataInfo;
+import com.zhongzheng.common.enums.BusinessType;
+import com.zhongzheng.common.utils.SecurityUtils;
+import com.zhongzheng.modules.top.user.domain.TopSysDictType;
+import com.zhongzheng.modules.top.user.service.ITopSysDictTypeService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.RequiredArgsConstructor;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+/**
+ * 【请填写功能名称】Controller
+ * 
+ * @author ruoyi
+ * @date 2023-03-13
+ */
+@Api(value = "【请填写功能名称】控制器", tags = {"【请填写功能名称】管理"})
+@RequiredArgsConstructor(onConstructor_ = @Autowired)
+@RestController
+@RequestMapping("/system/dict/type")
+public class TopSysDictTypeController extends BaseController {
+
+    private final ITopSysDictTypeService dictTypeService;
+
+    @ApiOperation("获取字典类型列表")
+    //   @PreAuthorize("@ss.hasPermi('system:dict:list')")
+    @GetMapping("/list")
+    public TableDataInfo list(TopSysDictType dictType)
+    {
+        startPage();
+        List<TopSysDictType> list = dictTypeService.selectDictTypeList(dictType);
+        return getDataTable(list);
+    }
+    
+
+    /**
+     * 查询字典类型详细
+     */
+    @ApiOperation("查询字典类型详细")
+    //   @PreAuthorize("@ss.hasPermi('system:dict:query')")
+    @GetMapping(value = "/{dictId}")
+    public AjaxResult getInfo(@PathVariable Long dictId)
+    {
+        return AjaxResult.success(dictTypeService.selectDictTypeById(dictId));
+    }
+
+    /**
+     * 新增字典类型
+     */
+    @ApiOperation("新增字典类型")
+    @PreAuthorize("@ss.hasPermi('system:dict:add')")
+    @Log(title = "字典类型", businessType = BusinessType.INSERT)
+    @PostMapping
+    public AjaxResult add(@Validated @RequestBody TopSysDictType dict)
+    {
+        if (UserConstants.NOT_UNIQUE.equals(dictTypeService.checkDictTypeUnique(dict)))
+        {
+            return AjaxResult.error("新增字典'" + dict.getDictName() + "'失败,字典类型已存在");
+        }
+        dict.setCreateBy(SecurityUtils.getUsername());
+        return toAjax(dictTypeService.insertDictType(dict));
+    }
+
+    /**
+     * 修改字典类型
+     */
+    @ApiOperation("修改字典类型")
+    @PreAuthorize("@ss.hasPermi('system:dict:edit')")
+    @Log(title = "字典类型", businessType = BusinessType.UPDATE)
+    @PostMapping("/edit")
+    public AjaxResult edit(@Validated @RequestBody TopSysDictType dict)
+    {
+        if (UserConstants.NOT_UNIQUE.equals(dictTypeService.checkDictTypeUnique(dict)))
+        {
+            return AjaxResult.error("修改字典'" + dict.getDictName() + "'失败,字典类型已存在");
+        }
+        dict.setUpdateBy(SecurityUtils.getUsername());
+        return toAjax(dictTypeService.updateDictType(dict));
+    }
+
+    /**
+     * 删除字典类型
+     */
+    @ApiOperation("删除字典类型")
+    @PreAuthorize("@ss.hasPermi('system:dict:remove')")
+    @Log(title = "字典类型", businessType = BusinessType.DELETE)
+    @PostMapping("/delete/{dictIds}")
+    public AjaxResult remove(@PathVariable Long[] dictIds)
+    {
+        return toAjax(dictTypeService.deleteDictTypeByIds(dictIds));
+    }
+
+    /**
+     * 清空缓存
+     */
+
+    @PreAuthorize("@ss.hasPermi('system:dict:remove')")
+    @Log(title = "字典类型", businessType = BusinessType.CLEAN)
+    @DeleteMapping("/clearCache")
+    public AjaxResult clearCache()
+    {
+        dictTypeService.clearCache();
+        return AjaxResult.success();
+    }
+
+}

+ 169 - 0
zhongzheng-admin-saas/src/main/java/com/zhongzheng/controller/top/TopSysMenuController.java

@@ -0,0 +1,169 @@
+package com.zhongzheng.controller.top;
+
+import cn.hutool.core.util.StrUtil;
+import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
+import com.zhongzheng.common.annotation.Log;
+import com.zhongzheng.common.constant.Constants;
+import com.zhongzheng.common.constant.UserConstants;
+import com.zhongzheng.common.core.controller.BaseController;
+import com.zhongzheng.common.core.domain.AjaxResult;
+import com.zhongzheng.common.core.domain.model.TopLoginUser;
+import com.zhongzheng.common.enums.BusinessType;
+import com.zhongzheng.common.utils.SecurityUtils;
+import com.zhongzheng.common.utils.ServletUtils;
+import com.zhongzheng.framework.web.service.TopTokenService;
+import com.zhongzheng.modules.top.user.domain.TopSysMenu;
+import com.zhongzheng.modules.top.user.service.ITopSysMenuService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.RequiredArgsConstructor;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+/**
+ * 【请填写功能名称】Controller
+ * 
+ * @author ruoyi
+ * @date 2023-03-10
+ */
+@Api(value = "【请填写功能名称】控制器", tags = {"【请填写功能名称】管理"})
+@RequiredArgsConstructor(onConstructor_ = @Autowired)
+@RestController
+@RequestMapping("/system/menu")
+public class TopSysMenuController extends BaseController {
+    @Autowired
+    private ITopSysMenuService topMenuService;
+
+    @Autowired
+    private TopTokenService tokenService;
+
+    /**
+     * 获取菜单列表
+     */
+    @ApiOperation("获取菜单列表")
+    @PreAuthorize("@ss.hasPermi('system:menu:list')")
+    @GetMapping("/list")
+    public AjaxResult list(TopSysMenu menu)
+    {
+        TopLoginUser loginUser = tokenService.getLoginUser(ServletUtils.getRequest());
+        Long userId = loginUser.getUser().getUserId();
+        List<TopSysMenu> menus = topMenuService.selectMenuList(menu, userId);
+        return AjaxResult.success(menus);
+    }
+
+    /**
+     * 根据菜单编号获取详细信息
+     */
+    @ApiOperation("根据菜单编号获取详细信息")
+    @PreAuthorize("@ss.hasPermi('system:menu:query')")
+    @GetMapping(value = "/{menuId}")
+    public AjaxResult getInfo(@PathVariable Long menuId)
+    {
+        return AjaxResult.success(topMenuService.selectMenuById(menuId));
+    }
+
+    /**
+     * 获取菜单下拉树列表
+     */
+    @ApiOperation("获取菜单下拉树列表")
+    @ApiOperationSupport(includeParameters = {})
+    @GetMapping("/treeselect")
+    public AjaxResult treeselect(TopSysMenu menu)
+    {
+        TopLoginUser loginUser = tokenService.getLoginUser(ServletUtils.getRequest());
+        Long userId = loginUser.getUser().getUserId();
+        List<TopSysMenu> menus = topMenuService.selectMenuList(menu, userId);
+        return AjaxResult.success(topMenuService.buildMenuTreeSelect(menus));
+    }
+
+    /**
+     * 加载对应角色菜单列表树
+     */
+    @ApiOperation("加载对应角色菜单列表树")
+    @GetMapping(value = "/roleMenuTreeselect/{roleId}")
+    public AjaxResult roleMenuTreeselect(@PathVariable("roleId") Long roleId)
+    {
+        TopLoginUser loginUser = tokenService.getLoginUser(ServletUtils.getRequest());
+        List<TopSysMenu> menus = topMenuService.selectMenuList(loginUser.getUser().getUserId());
+        AjaxResult ajax = AjaxResult.success();
+        ajax.put("checkedKeys", topMenuService.selectMenuListByRoleId(roleId));
+        ajax.put("menus", topMenuService.buildMenuTreeSelect(menus));
+        return ajax;
+    }
+
+    /**
+     * 新增菜单
+     */
+    @ApiOperation("新增菜单")
+    @ApiOperationSupport(ignoreParameters = {"children","createBy","createTime","menuId","params"
+            ,"parentName","remark","updateBy","updateTime"})
+    @PreAuthorize("@ss.hasPermi('system:menu:add')")
+    @Log(title = "菜单管理", businessType = BusinessType.INSERT)
+    @PostMapping
+    public AjaxResult add(@Validated @RequestBody TopSysMenu menu)
+    {
+        if (UserConstants.NOT_UNIQUE.equals(topMenuService.checkMenuNameUnique(menu)))
+        {
+            return AjaxResult.error("新增菜单'" + menu.getMenuName() + "'失败,菜单名称已存在");
+        }
+        else if (UserConstants.YES_FRAME.equals(menu.getIsFrame())
+                && !StrUtil.startWithAny(menu.getPath(), Constants.HTTP, Constants.HTTPS))
+        {
+            return AjaxResult.error("新增菜单'" + menu.getMenuName() + "'失败,地址必须以http(s)://开头");
+        }
+        menu.setCreateBy(SecurityUtils.getUsername());
+        return toAjax(topMenuService.insertMenu(menu));
+    }
+
+    /**
+     * 修改菜单
+     */
+    @ApiOperation("修改菜单")
+    @ApiOperationSupport(ignoreParameters = {"children","createBy","createTime","params"
+            ,"parentName","remark","updateBy","updateTime"})
+    @PreAuthorize("@ss.hasPermi('system:menu:edit')")
+    @Log(title = "菜单管理", businessType = BusinessType.UPDATE)
+    @PostMapping("/edit")
+    public AjaxResult edit(@Validated @RequestBody TopSysMenu menu)
+    {
+        if (UserConstants.NOT_UNIQUE.equals(topMenuService.checkMenuNameUnique(menu)))
+        {
+            return AjaxResult.error("修改菜单'" + menu.getMenuName() + "'失败,菜单名称已存在");
+        }
+        else if (UserConstants.YES_FRAME.equals(menu.getIsFrame())
+                && !StrUtil.startWithAny(menu.getPath(), Constants.HTTP, Constants.HTTPS))
+        {
+            return AjaxResult.error("修改菜单'" + menu.getMenuName() + "'失败,地址必须以http(s)://开头");
+        }
+        else if (menu.getMenuId().equals(menu.getParentId()))
+        {
+            return AjaxResult.error("修改菜单'" + menu.getMenuName() + "'失败,上级菜单不能选择自己");
+        }
+        menu.setUpdateBy(SecurityUtils.getUsername());
+        return toAjax(topMenuService.updateMenu(menu));
+    }
+
+    /**
+     * 删除菜单
+     */
+    @ApiOperation("删除菜单")
+    @PreAuthorize("@ss.hasPermi('system:menu:remove')")
+    @Log(title = "菜单管理", businessType = BusinessType.DELETE)
+    @PostMapping("/delete/{menuId}")
+    public AjaxResult remove(@PathVariable Long menuId)
+    {
+        if (topMenuService.hasChildByMenuId(menuId))
+        {
+            return AjaxResult.error("存在子菜单,不允许删除");
+        }
+        if (topMenuService.checkMenuExistRole(menuId))
+        {
+            return AjaxResult.error("菜单已分配,不允许删除");
+        }
+        return toAjax(topMenuService.deleteMenuById(menuId));
+    }
+}

+ 192 - 0
zhongzheng-admin-saas/src/main/java/com/zhongzheng/controller/top/TopSysRoleController.java

@@ -0,0 +1,192 @@
+package com.zhongzheng.controller.top;
+
+import cn.hutool.core.lang.Validator;
+import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
+import com.zhongzheng.common.annotation.Log;
+import com.zhongzheng.common.constant.UserConstants;
+import com.zhongzheng.common.core.controller.BaseController;
+import com.zhongzheng.common.core.domain.AjaxResult;
+import com.zhongzheng.common.core.domain.entity.TopSysRole;
+import com.zhongzheng.common.core.domain.model.TopLoginUser;
+import com.zhongzheng.common.core.page.TableDataInfo;
+import com.zhongzheng.common.enums.BusinessType;
+import com.zhongzheng.common.utils.SecurityUtils;
+import com.zhongzheng.common.utils.ServletUtils;
+import com.zhongzheng.common.utils.poi.ExcelUtil;
+import com.zhongzheng.framework.web.service.TopSysPermissionService;
+import com.zhongzheng.framework.web.service.TopTokenService;
+import com.zhongzheng.modules.top.user.service.ITopSysRoleService;
+import com.zhongzheng.modules.top.user.service.ITopSysUserService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.RequiredArgsConstructor;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+/**
+ * 角色信息Controller
+ *
+ * @author ruoyi
+ * @date 2023-03-10
+ */
+@Api(value = "角色信息控制器", tags = {"角色信息管理"})
+@RequiredArgsConstructor(onConstructor_ = @Autowired)
+@RestController
+@RequestMapping("system/role")
+public class TopSysRoleController extends BaseController {
+    @Autowired
+    private ITopSysRoleService topSysRoleService;
+
+    @Autowired
+    private TopTokenService tokenService;
+
+    @Autowired
+    private TopSysPermissionService topSysPermissionService;
+
+    @Autowired
+    private ITopSysUserService topSysUserService;
+
+    @ApiOperation("角色列表")
+    @PreAuthorize("@ss.hasPermi('system:role:list')")
+    @GetMapping("/list")
+    public TableDataInfo list(TopSysRole role)
+    {
+        startPage();
+        List<TopSysRole> list = topSysRoleService.selectRoleList(role);
+        return getDataTable(list);
+    }
+
+    @Log(title = "角色管理", businessType = BusinessType.EXPORT)
+    @PreAuthorize("@ss.hasPermi('system:role:export')")
+    @GetMapping("/export")
+    public AjaxResult export(TopSysRole role)
+    {
+        List<TopSysRole> list = topSysRoleService.selectRoleList(role);
+        ExcelUtil<TopSysRole> util = new ExcelUtil<TopSysRole>(TopSysRole.class);
+        return util.exportExcel(list, "角色数据");
+    }
+
+    /**
+     * 根据角色编号获取详细信息
+     */
+    @ApiOperation("根据角色编号获取详细信息")
+    @PreAuthorize("@ss.hasPermi('system:role:query')")
+    @GetMapping(value = "/{roleId}")
+    public AjaxResult getInfo(@PathVariable Long roleId)
+    {
+        return AjaxResult.success(topSysRoleService.selectRoleById(roleId));
+    }
+
+    /**
+     * 新增角色
+     */
+    @ApiOperation("新增角色")
+    @ApiOperationSupport(ignoreParameters = {"createBy","createTime","dataScope","delFlag","updateTime"
+            ,"flag","params","roleId","updateBy","deptIds","deptCheckStrictly","menuCheckStrictly"})
+    @PreAuthorize("@ss.hasPermi('system:role:add')")
+    @Log(title = "角色管理", businessType = BusinessType.INSERT)
+    @PostMapping
+    public AjaxResult add(@Validated @RequestBody TopSysRole role)
+    {
+        if (UserConstants.NOT_UNIQUE.equals(topSysRoleService.checkRoleNameUnique(role)))
+        {
+            return AjaxResult.error("新增角色'" + role.getRoleName() + "'失败,角色名称已存在");
+        }
+        else if (UserConstants.NOT_UNIQUE.equals(topSysRoleService.checkRoleKeyUnique(role)))
+        {
+            return AjaxResult.error("新增角色'" + role.getRoleName() + "'失败,角色权限已存在");
+        }
+        role.setCreateBy(SecurityUtils.getUsername());
+        return toAjax(topSysRoleService.insertRole(role));
+
+    }
+
+    /**
+     * 修改保存角色
+     */
+    @ApiOperation("修改保存角色")
+    @PreAuthorize("@ss.hasPermi('system:role:edit')")
+    @Log(title = "角色管理", businessType = BusinessType.UPDATE)
+    @PostMapping("/edit")
+    public AjaxResult edit(@Validated @RequestBody TopSysRole role)
+    {
+        topSysRoleService.checkRoleAllowed(role);
+        if (UserConstants.NOT_UNIQUE.equals(topSysRoleService.checkRoleNameUnique(role)))
+        {
+            return AjaxResult.error("修改角色'" + role.getRoleName() + "'失败,角色名称已存在");
+        }
+        else if (UserConstants.NOT_UNIQUE.equals(topSysRoleService.checkRoleKeyUnique(role)))
+        {
+            return AjaxResult.error("修改角色'" + role.getRoleName() + "'失败,角色权限已存在");
+        }
+        role.setUpdateBy(SecurityUtils.getUsername());
+
+        if (topSysRoleService.updateRole(role) > 0)
+        {
+            // 更新缓存用户权限
+            TopLoginUser loginUser = tokenService.getLoginUser(ServletUtils.getRequest());
+            if (Validator.isNotNull(loginUser.getUser()) && !loginUser.getUser().isAdmin())
+            {
+                loginUser.setPermissions(topSysPermissionService.getMenuPermission(loginUser.getUser()));
+                loginUser.setUser(topSysUserService.selectUserByUserName(loginUser.getUser().getUserName()));
+                tokenService.setLoginUser(loginUser);
+            }
+            return AjaxResult.success();
+        }
+        return AjaxResult.error("修改角色'" + role.getRoleName() + "'失败,请联系管理员");
+    }
+
+    /**
+     * 修改保存数据权限
+     */
+    @ApiOperation("修改保存数据权限")
+    @PreAuthorize("@ss.hasPermi('system:role:edit')")
+    @Log(title = "角色管理", businessType = BusinessType.UPDATE)
+    @PostMapping("/dataScope")
+    public AjaxResult dataScope(@RequestBody TopSysRole role)
+    {
+        topSysRoleService.checkRoleAllowed(role);
+        return toAjax(topSysRoleService.authDataScope(role));
+    }
+
+    /**
+     * 状态修改
+     */
+    @ApiOperation("状态修改")
+    @PreAuthorize("@ss.hasPermi('system:role:edit')")
+    @Log(title = "角色管理", businessType = BusinessType.UPDATE)
+    @PostMapping("/changeStatus")
+    public AjaxResult changeStatus(@RequestBody TopSysRole role)
+    {
+        topSysRoleService.checkRoleAllowed(role);
+        role.setUpdateBy(SecurityUtils.getUsername());
+        return toAjax(topSysRoleService.updateRoleStatus(role));
+    }
+
+    /**
+     * 删除角色
+     */
+    @ApiOperation("删除角色")
+    @PreAuthorize("@ss.hasPermi('system:role:remove')")
+    @Log(title = "角色管理", businessType = BusinessType.DELETE)
+    @PostMapping("/delete/{roleIds}")
+    public AjaxResult remove(@PathVariable Long[] roleIds)
+    {
+        return toAjax(topSysRoleService.deleteRoleByIds(roleIds));
+    }
+
+    /**
+     * 获取角色选择框列表
+     */
+    @ApiOperation("获取角色选择框列表")
+    @PreAuthorize("@ss.hasPermi('system:role:query')")
+    @GetMapping("/optionselect")
+    public AjaxResult optionselect()
+    {
+        return AjaxResult.success(topSysRoleService.selectRoleAll());
+    }
+}

+ 285 - 0
zhongzheng-admin-saas/src/main/java/com/zhongzheng/controller/top/TopSysUserController.java

@@ -0,0 +1,285 @@
+package com.zhongzheng.controller.top;
+
+import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.core.lang.Validator;
+import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
+import com.zhongzheng.common.annotation.Log;
+import com.zhongzheng.common.constant.UserConstants;
+import com.zhongzheng.common.core.bo.SysUserEditBo;
+import com.zhongzheng.common.core.controller.BaseController;
+import com.zhongzheng.common.core.domain.AjaxResult;
+import com.zhongzheng.common.core.domain.entity.TopSysRole;
+import com.zhongzheng.common.core.domain.entity.TopSysUser;
+import com.zhongzheng.common.core.domain.model.TopLoginUser;
+import com.zhongzheng.common.core.page.TableDataInfo;
+import com.zhongzheng.common.enums.BusinessType;
+import com.zhongzheng.common.exception.CustomException;
+import com.zhongzheng.common.utils.SecurityUtils;
+import com.zhongzheng.common.utils.ServletUtils;
+import com.zhongzheng.common.utils.ToolsUtils;
+import com.zhongzheng.common.utils.poi.ExcelUtil;
+import com.zhongzheng.framework.web.service.TopTokenService;
+import com.zhongzheng.modules.course.bo.CourseBusinessQueryBo;
+import com.zhongzheng.modules.top.user.service.ITopSysPostService;
+import com.zhongzheng.modules.top.user.service.ITopSysRoleService;
+import com.zhongzheng.modules.top.user.service.ITopSysUserService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiImplicitParam;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.security.authentication.AuthenticationManager;
+import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
+import org.springframework.security.core.Authentication;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+
+import javax.annotation.Resource;
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ * 用户信息
+ *
+ * @author zhongzheng
+ */
+@Api(tags ="用户信息管理")
+@RestController
+@RequestMapping("/system/user")
+public class TopSysUserController extends BaseController
+{
+    @Autowired
+    private ITopSysUserService topSysUserService;
+
+    @Autowired
+    private ITopSysRoleService topSysRoleService;
+
+    @Autowired
+    private ITopSysPostService topSysPostService;
+
+    @Autowired
+    private TopTokenService tokenService;
+
+    @Resource
+    private AuthenticationManager authenticationManager;
+
+    /**
+     * 获取用户列表
+     */
+    @ApiOperation("获取用户列表")
+    @PreAuthorize("@ss.hasPermi('system:user:list')")
+    @GetMapping("/list")
+    public TableDataInfo list(TopSysUser user)
+    {
+        startPage();
+        List<TopSysUser> list = topSysUserService.selectUserList(user);
+        return getDataTable(list);
+    }
+
+    @Log(title = "用户管理", businessType = BusinessType.EXPORT)
+    @PreAuthorize("@ss.hasPermi('system:user:export')")
+    @GetMapping("/export")
+    public AjaxResult export(TopSysUser user)
+    {
+        List<TopSysUser> list = topSysUserService.selectUserList(user);
+        ExcelUtil<TopSysUser> util = new ExcelUtil<TopSysUser>(TopSysUser.class);
+        return util.exportExcel(list, "用户数据");
+    }
+
+    @Log(title = "用户管理", businessType = BusinessType.IMPORT)
+    @PreAuthorize("@ss.hasPermi('system:user:import')")
+    @PostMapping("/importData")
+  /*  public AjaxResult importData(MultipartFile file, boolean updateSupport) throws Exception
+    {
+        ExcelUtil<TopSysUser> util = new ExcelUtil<TopSysUser>(TopSysUser.class);
+        List<TopSysUser> userList = util.importExcel(file.getInputStream());
+        LoginUser loginUser = tokenService.getLoginUser(ServletUtils.getRequest());
+        String operName = loginUser.getUsername();
+        String message = topSysUserService.importUser(userList, updateSupport, operName);
+        return AjaxResult.success(message);
+    }*/
+
+    @GetMapping("/importTemplate")
+    public AjaxResult importTemplate()
+    {
+        ExcelUtil<TopSysUser> util = new ExcelUtil<TopSysUser>(TopSysUser.class);
+        return util.importTemplateExcel("用户数据");
+    }
+
+    /**
+     * 根据用户编号获取详细信息
+     */
+    @ApiOperation("获取用户详细")
+    @ApiImplicitParam(name = "userId", value = "用户ID", required = true, dataType = "int", paramType = "path")
+    @PreAuthorize("@ss.hasPermi('system:user:query')")
+    @GetMapping(value = {  "/{userId}" })
+    public AjaxResult getInfo(@PathVariable(value = "userId", required = false) Long userId)
+    {
+        AjaxResult ajax = AjaxResult.success();
+        List<TopSysRole> roles = topSysRoleService.selectRoleAll();
+        TopSysUser sysUser = topSysUserService.selectUserById(userId);
+        ajax.put("roles", TopSysUser.isAdmin(sysUser.getUserName()) ? roles : roles.stream().filter(r -> !r.isAdmin()).collect(Collectors.toList()));
+        ajax.put("posts", topSysPostService.selectPostAll());
+        if (Validator.isNotNull(userId))
+        {
+            ajax.put(AjaxResult.DATA_TAG, topSysUserService.selectUserById(userId));
+            ajax.put("postIds", topSysPostService.selectPostListByUserId(userId));
+            ajax.put("roleIds", topSysRoleService.selectRoleListByUserId(userId));
+        }
+        return ajax;
+    }
+
+    /**
+     * 新增用户
+     */
+    @ApiOperation("新增用户")
+    @ApiOperationSupport(ignoreParameters = {"id","orderDate.id"})
+    @PreAuthorize("@ss.hasPermi('system:user:add')")
+    @Log(title = "用户管理", businessType = BusinessType.INSERT)
+    @PostMapping
+    public AjaxResult add(@Validated @RequestBody TopSysUser user)
+    {
+        if (UserConstants.NOT_UNIQUE.equals(topSysUserService.checkUserNameUnique(user.getUserName())))
+        {
+            return AjaxResult.error("新增用户'" + user.getUserName() + "'失败,登录账号已存在");
+        }
+        else if (Validator.isNotEmpty(user.getPhonenumber())
+                && UserConstants.NOT_UNIQUE.equals(topSysUserService.checkPhoneUnique(user)))
+        {
+            return AjaxResult.error("新增用户'" + user.getUserName() + "'失败,手机号码已存在");
+        }
+        else if (Validator.isNotEmpty(user.getEmail())
+                && UserConstants.NOT_UNIQUE.equals(topSysUserService.checkEmailUnique(user)))
+        {
+            return AjaxResult.error("新增用户'" + user.getUserName() + "'失败,邮箱账号已存在");
+        }
+        user.setCreateBy(SecurityUtils.getUsername());
+        if(!ToolsUtils.verifEasyPwd(user.getPassword())){
+            throw new CustomException("密码应由8-16位数字、大小写字母、符号组成");
+        }
+        user.setPassword(SecurityUtils.encryptPassword(user.getPassword()));
+        return toAjax(topSysUserService.insertUser(user));
+    }
+
+    /**
+     * 修改用户
+     */
+    @ApiOperation("更新用户")
+    @PreAuthorize("@ss.hasPermi('system:user:edit')")
+    @Log(title = "用户管理", businessType = BusinessType.UPDATE)
+    @PostMapping("/edit")
+    public AjaxResult edit(@Validated @RequestBody SysUserEditBo bo)
+    {
+        if (Validator.isNotEmpty(bo.getStatus())&&bo.getStatus().equals(-1)){
+            TopSysUser user = BeanUtil.toBean(bo, TopSysUser.class);
+            int result = topSysUserService.updateUser(user);
+            return toAjax(result);
+        }
+        TopSysUser user = BeanUtil.toBean(bo, TopSysUser.class);
+        topSysUserService.checkUserAllowed(user);
+        TopLoginUser loginUser = tokenService.getLoginUser(ServletUtils.getRequest());
+        if(!loginUser.getUser().isAdmin()&& !loginUser.getUser().getUserId().equals(user.getUserId())){
+            return AjaxResult.error("您无权限修改本信息");
+        }
+
+        if (Validator.isNotEmpty(user.getPhonenumber())
+                && UserConstants.NOT_UNIQUE.equals(topSysUserService.checkPhoneUnique(user)))
+        {
+            return AjaxResult.error("修改用户'" + user.getUserName() + "'失败,手机号码已存在");
+        }
+        else if (Validator.isNotEmpty(user.getEmail())
+                && UserConstants.NOT_UNIQUE.equals(topSysUserService.checkEmailUnique(user)))
+        {
+            return AjaxResult.error("修改用户'" + user.getUserName() + "'失败,邮箱账号已存在");
+        }
+        if(Validator.isNotEmpty(user.getPassword())){
+            //重置密码
+            if(!loginUser.getUser().isAdmin()){
+                //普通用户需传入旧密码修改
+                // 旧密码用户验证
+                Authentication authentication = null;
+                try
+                {
+                    // 该方法会去调用UserDetailsServiceImpl.loadUserByUsername
+                    authentication = authenticationManager
+                            .authenticate(new UsernamePasswordAuthenticationToken(loginUser.getUser().getUserName(), bo.getOldPassword()));
+                }
+                catch (Exception e)
+                {
+                    return AjaxResult.error("旧密码错误");
+                }
+
+            }
+            if(!ToolsUtils.verifEasyPwd(user.getPassword())){
+                throw new CustomException("密码应由8-16位数字、大小写字母、符号组成");
+            }
+            user.setPassword(SecurityUtils.encryptPassword(user.getPassword()));
+        }
+        user.setUpdateBy(SecurityUtils.getUsername());
+        int result = topSysUserService.updateUser(user);
+        if(result>0){
+            TopSysUser newUser = topSysUserService.selectUserByUserName(loginUser.getUser().getUserName());
+            //同个用户ID则更新用户信息,admin操作其他用户则不更新
+            if(newUser.getUserId().equals(loginUser.getUser().getUserId())){
+                // 更新缓存用户
+                loginUser.setUser(newUser);
+            }
+            tokenService.setLoginUser(loginUser);
+        }
+        return toAjax(result);
+    }
+
+    /**
+     * 删除用户
+     */
+  /*  @ApiOperation("删除用户信息")
+    @ApiImplicitParam(name = "userId", value = "用户ID", required = true, dataType = "int", paramType = "path")
+    @PreAuthorize("@ss.hasPermi('system:user:remove')")
+    @Log(title = "用户管理", businessType = BusinessType.DELETE)
+    @DeleteMapping("/{userIds}")
+    public AjaxResult remove(@PathVariable Long[] userIds)
+    {
+        return toAjax(topSysUserService.deleteUserByIds(userIds));
+    }*/
+
+    /**
+     * 重置密码
+     */
+
+  /*  @PreAuthorize("@ss.hasPermi('system:user:resetPwd')")
+    @Log(title = "用户管理", businessType = BusinessType.UPDATE)
+    @PostMapping("/resetPwd")
+    public AjaxResult resetPwd(@RequestBody TopSysUser user)
+    {
+        topSysUserService.checkUserAllowed(user);
+        user.setPassword(SecurityUtils.encryptPassword(user.getPassword()));
+        user.setUpdateBy(SecurityUtils.getUsername());
+        return toAjax(topSysUserService.resetPwd(user));
+    }*/
+
+    /**
+     * 状态修改
+     */
+    @PreAuthorize("@ss.hasPermi('system:user:edit')")
+    @Log(title = "用户管理", businessType = BusinessType.UPDATE)
+    @PutMapping("/changeStatus")
+    public AjaxResult changeStatus(@RequestBody TopSysUser user)
+    {
+        topSysUserService.checkUserAllowed(user);
+        user.setUpdateBy(SecurityUtils.getUsername());
+        return toAjax(topSysUserService.updateUserStatus(user));
+    }
+
+    /**
+     * 业务层次获取用户列表
+     */
+    @ApiOperation("业务层次获取用户列表")
+    @PreAuthorize("@ss.hasPermi('system:user:list')")
+    @GetMapping("/businessPeopleList")
+    public TableDataInfo queryBusinessPeopleList(CourseBusinessQueryBo bo)
+    {
+        startPage();
+        List<TopSysUser> list = topSysUserService.queryBusinessPeopleList(bo);
+        return getDataTable(list);
+    }
+}

+ 137 - 0
zhongzheng-admin-saas/src/main/java/com/zhongzheng/core/config/SwaggerConfig.java

@@ -0,0 +1,137 @@
+package com.zhongzheng.core.config;
+
+import com.github.xiaoymin.knife4j.spring.annotations.EnableKnife4j;
+import com.zhongzheng.common.config.RuoYiConfig;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import springfox.documentation.builders.ApiInfoBuilder;
+import springfox.documentation.builders.ParameterBuilder;
+import springfox.documentation.builders.PathSelectors;
+import springfox.documentation.builders.RequestHandlerSelectors;
+import springfox.documentation.schema.ModelRef;
+import springfox.documentation.service.*;
+import springfox.documentation.spi.DocumentationType;
+import springfox.documentation.spi.service.contexts.SecurityContext;
+import springfox.documentation.spring.web.plugins.Docket;
+import springfox.documentation.swagger2.annotations.EnableSwagger2WebMvc;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * Swagger2的接口配置
+ *
+ * @author zhongzheng
+ */
+@Configuration
+@EnableSwagger2WebMvc
+@EnableKnife4j
+public class SwaggerConfig
+{
+    /** 系统基础配置 */
+    @Autowired
+    private RuoYiConfig ruoyiConfig;
+
+    /** 是否开启swagger */
+    @Value("${swagger.enabled}")
+    private boolean enabled;
+
+    /** 设置请求的统一前缀 */
+    @Value("${swagger.pathMapping}")
+    private String pathMapping;
+
+    /**
+     * 创建API
+     */
+    @Bean
+    public Docket createRestApi()
+    {
+        return new Docket(DocumentationType.SWAGGER_2)
+                // 是否启用Swagger
+                .enable(enabled)
+                // 用来创建该API的基本信息,展示在文档的页面中(自定义展示的信息)
+                .apiInfo(apiInfo())
+                // 设置哪些接口暴露给Swagger展示
+                .select()
+                // 扫描所有有注解的api,用这种方式更灵活
+                .apis(RequestHandlerSelectors.withMethodAnnotation(ApiOperation.class))
+                // 扫描指定包中的swagger注解
+                // .apis(RequestHandlerSelectors.basePackage("com.zhongzheng.project.tool.swagger"))
+                // 扫描所有 .apis(RequestHandlerSelectors.any())
+                .paths(PathSelectors.any())
+                .build()
+                /* 设置安全模式,swagger可以设置访问token */
+                //    .securitySchemes(securitySchemes())
+                .securityContexts(securityContexts())
+                .pathMapping(pathMapping)
+                .globalOperationParameters(getGlobalOperationParameters());
+    }
+
+    /**
+     * 安全模式,这里指定token通过AuthorizationToken头请求头传递
+     */
+    private List<ApiKey> securitySchemes()
+    {
+        List<ApiKey> apiKeyList = new ArrayList<ApiKey>();
+        apiKeyList.add(new ApiKey("AuthorizationToken", "AuthorizationToken", "header"));
+        return apiKeyList;
+    }
+
+    /**
+     * 安全上下文
+     */
+    private List<SecurityContext> securityContexts()
+    {
+        List<SecurityContext> securityContexts = new ArrayList<>();
+        securityContexts.add(
+                SecurityContext.builder()
+                        .securityReferences(defaultAuth())
+                        .forPaths(PathSelectors.regex("^(?!auth).*$"))
+                        .build());
+        return securityContexts;
+    }
+
+    /**
+     * 默认的安全上引用
+     */
+    private List<SecurityReference> defaultAuth()
+    {
+        AuthorizationScope authorizationScope = new AuthorizationScope("global", "accessEverything");
+        AuthorizationScope[] authorizationScopes = new AuthorizationScope[1];
+        authorizationScopes[0] = authorizationScope;
+        List<SecurityReference> securityReferences = new ArrayList<>();
+        securityReferences.add(new SecurityReference("AuthorizationToken", authorizationScopes));
+        return securityReferences;
+    }
+
+    /**
+     * 添加摘要信息
+     */
+    private ApiInfo apiInfo()
+    {
+        // 用ApiInfoBuilder进行定制
+        return new ApiInfoBuilder()
+                // 设置标题
+                .title("标题:中正SAAS管理系统接口文档")
+                // 描述
+                .description("描述:用于中正SAAS管理系统接口文档")
+                // 作者信息
+                .contact(new Contact(ruoyiConfig.getName(), null, null))
+                // 版本
+                .version("版本号:" + ruoyiConfig.getVersion())
+                .build();
+    }
+
+    private List<Parameter> getGlobalOperationParameters() {
+        List<Parameter> pars = new ArrayList<>();
+        // header query cookie
+        // header query cookie
+        ParameterBuilder parameterBuilder = new ParameterBuilder();
+        parameterBuilder.name("X-Auth-Token").description("token").modelRef(new ModelRef("string")).parameterType("header").defaultValue("test").required(false);
+        pars.add(parameterBuilder.build());
+        return pars;
+    }
+}

+ 1 - 0
zhongzheng-admin-saas/src/main/resources/META-INF/spring-devtools.properties

@@ -0,0 +1 @@
+restart.include.json=/com.alibaba.fastjson.*.jar

+ 217 - 0
zhongzheng-admin-saas/src/main/resources/application-dev.yml

@@ -0,0 +1,217 @@
+# 数据源配置
+spring:
+    datasource:
+        type: com.alibaba.druid.pool.DruidDataSource
+        driverClassName: com.mysql.cj.jdbc.Driver
+        druid:
+            url: jdbc:mysql://192.168.1.222:3306/zz_edu_saas?rewriteBatchedStatements=true&useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&autoReconnect=true
+            username: root
+            password: zhongzheng2021
+            # 初始连接数
+            initialSize: 5
+            # 最小连接池数量
+            minIdle: 10
+            # 最大连接池数量
+            maxActive: 20
+            # 配置获取连接等待超时的时间
+            maxWait: 60000
+            # 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
+            timeBetweenEvictionRunsMillis: 60000
+            # 配置一个连接在池中最小生存的时间,单位是毫秒
+            minEvictableIdleTimeMillis: 300000
+            # 配置一个连接在池中最大生存的时间,单位是毫秒
+            maxEvictableIdleTimeMillis: 900000
+            # 配置检测连接是否有效
+            validationQuery: SELECT 1 FROM DUAL
+            testWhileIdle: true
+            testOnBorrow: false
+            testOnReturn: false
+            webStatFilter:
+                enabled: true
+            statViewServlet:
+                enabled: true
+                # 设置白名单,不填则允许所有访问
+                allow:
+                url-pattern: /druid/*
+                # 控制台管理用户名和密码
+                login-username: ruoyi
+                login-password: 123456
+            filter:
+                stat:
+                    enabled: true
+                    # 慢SQL记录
+                    log-slow-sql: true
+                    slow-sql-millis: 1000
+                    merge-sql: true
+                wall:
+                    config:
+                        multi-statement-allow: true
+    # redis 配置
+    redis:
+        # 地址
+        host: 192.168.1.222
+        # 端口,默认为6379
+        port: 6379
+        # 数据库索引
+        database: 0
+        # 密码
+        password: zhongzheng2021_redis
+        # 连接超时时间
+        timeout: 10s
+        lettuce:
+            pool:
+                # 连接池中的最小空闲连接
+                min-idle: 0
+                # 连接池中的最大空闲连接
+                max-idle: 8
+                # 连接池的最大数据库连接数
+                max-active: 8
+                # #连接池最大阻塞等待时间(使用负值表示没有限制)
+                max-wait: -1ms
+aliyun:
+    oss:
+        endpoint: https://file-dev.xyyxt.net # oss对外服务的访问域名
+        accessKeyId: LTAI5tDbpYmpifZYNX8S3kt1  # 访问身份验证中用到用户标识
+        accessKeySecret: jCdSPAj58ZXOLsWpV8bCgNOYrEK0de # 用户用于加密签名字符串和oss用来验证签名字符串的密钥
+        bucketName: zhongzheng-test # oss的存储空间
+        policy:
+            expire: 30 # 签名有效期(S)
+        maxSize: 100 # 上传文件大小(M)
+        callback: http://39.108.7.155:19004/aliyun/oss/callback # 文件上传成功后的回调地址
+        dir:
+            prefix: oss/images/ # 上传文件夹路径前缀 `
+
+poliv:
+    token:
+        userid: d5f6d309fe
+        writetoken: 8f14a371-9d02-4ec1-922d-54d7b4f79dca
+        readtoken: f2c397b4-e2a3-46dc-9266-e6a43ac26a35
+        secretkey: xpPrYdcbA1
+
+wx:
+    small:
+        appid: wxd3c8ae80cf43a305
+        appsecret: 193a001ebfd46f227008a21e9d13e750
+    gzh:
+        appid: wx6f48f721d18244eb
+        appsecret: 2f8b2b4ff66e2f6adfb9f08ae22d7474
+        studyNoteTpId: DndIixcAp15Sqgb4KOGTMf73VLF09NlCUifPSel5Y_s
+        qdyTpId: s981yq3SyIODNUEXFzVSWn0OYj90E72aKdtKtSp05_E
+        qdySubTpId: gzE6zddD7OzDLUtOO4GfU-KPCxpMqWFhCj86uXExqB8
+        qdySubStatusTpId: 7oKaAHmc4P7jqfonuiM1wnjfNLh9T662Ywm1OAFaUFA
+        qdyExamTpId: 66LitnYp0AIWFclo0rLdyLQP4-_vVc4pM95fyFs6l-c
+        qdyExamStatusTpId: J7nNogGhD38OD20gI-3CzwawfEMu7lOjR8fsi4LgJ5g
+        signatureTpId: 66LitnYp0AIWFclo0rLdyLQP4-_vVc4pM95fyFs6l-c
+    wepay:
+        mchid: 1342013901
+        key: GdXyPxYjZx1234123yJzXgDxYpXyjpx9
+        appsecret: GdXyPxYjZx1234123yJzXgDxYpXyjpx9
+        notifyUrl: http://39.108.7.155:19012/wx/pay/callback
+    scanLogin:
+        host: https://testm.xyyxt.net/
+
+wisdomExamRoom:
+    mchid: 10001
+    appid: ZZ-YXT-GZ-20220820-0001
+    app_secret: mt70O1s/Xd5LwuH7yHLpj9R+tKUn5j9vTnCvmgBnbJDA11Hpl7+q4lEZliqPAjN+YHPn9bGmHkAbw5XwhhMiYg==
+    host:  http://bg.sam457.site:9020
+
+certificate:
+    host: http://192.168.1.38:8000/
+
+liveGotoURL: http://39.108.7.155:19014/
+
+enCodeVersion: develop
+
+oldStudySys:
+    syncPath: http://gdxypx.xy.com/System/BussinessApi/PostUserStudyRecords
+    sharePath: http://192.168.1.210:8086/witsystem/dataapi/SaleOrder
+    shareCanclePath: http://192.168.1.210:8086/witsystem/dataapi/ordercance
+    searchGradeCount: http://gdxypx.xy.com/System/BussinessApi/OfficialGradeCount
+    pushGradeCount: http://gdxypx.xy.com/System/BussinessApi/OfficialGradeCountAuto
+    educationalInspector: http://192.168.1.210/EduSystem/BusinessApi/NewYxtUserPrompt
+    classUserListPath: http://gdxypx.xy.com/System/BussinessApi/UserCourseCategoryListcno
+    classOpenPath: http://gdxypx.xy.com/System/BussinessApi/OpenClass
+    salePassword: http://gdxypx.xy.com/WitSystem/BussinessApi/GetSaleInfo
+    updateInvoicePath: http://gdxypx.xy.com/system/BussinessApi/UpdateInvoiceData
+    createExamPath: http://gdxypx.xy.com/system/BussinessApi/CreateSameClass
+    saveInvoice: http://gdxypx.xy.com/WitSystem/BussinessApi/InvoiceUpdate
+
+officialPush:
+    infoPath: http://jypt-dev.gdcic.net/organjxjy/ShangBaoMingdan
+    periodPath: http://jypt-dev.gdcic.net/organjxjy/XueshiShenqing
+    infoAccount: peixunjigou
+    token: 0ca175b9c0f726a831d895e26933246
+    sevenInfoPath: http://sgry.gdcic.net/organjxjy/ShangBaoMingdan
+    sevenPeriodPath: http://sgry.gdcic.net/organjxjy/XueshiShenqing
+
+distributionOldPay:
+    host: http://gdxypx.xy.com/System/BussinessApi/AddRedPackData
+
+handouts:
+    savePath: http://192.168.1.7:9090/course/handouts/save
+    updatePath: http://192.168.1.7:9090/course/handouts/edit
+
+Nuonuo:
+    host: https://sdk.nuonuo.com/open/v1/services
+    APPkey: SD39149760
+    APPSecret: 07168A248B2844E0
+
+oldOrder:
+    studyRecord: http://gdxypx.xy.com/WitSystem/BussinessApi/GetStudyRecord
+    orderCheck: http://gdxypx.xy.com/WitSystem/BussinessApi/AuditUnderOrder
+    finishOrder: http://gdxypx.xy.com/WitSystem/BussinessApi/CompleteOrder
+    refuseCheck: http://gdxypx.xy.com/WitSystem/BussinessApi/ReFundAuditResult
+    inputOrderSn: http://gdxypx.xy.com/WitSystem/BussinessApi/GetNewYxtinputOrderSn
+    checkOrderStudent: http://gdxypx.xy.com/WitSystem/BussinessApi/ReAuditUnderOrder
+    checkOrderBrokerage: http://gdxypx.xy.com/WitSystem/BussinessApi/CommissionRate
+    refundPay: http://192.168.1.222:5030/common/platform/pay
+    refundPayHandle: http://192.168.1.222:5030/common/platform/pay/handle
+    updateRemark: http://gdxypx.xy.com/WitSystem/BussinessApi/UpdateOrderAuditRemark
+    getResitTimes: http://gdxypx.xy.com/System/BussinessApi/GetResitTimes
+    classEndSaleTipMsg: http://gdxypx.xy.com/WitSystem/BussinessApi/ClassEndSaleTipMsg
+oldSys:
+    host: http://gdxypx.xy.com
+    goods: http://gdxypx.xy.com/WitSystem/BussinessApi/NewYxtLogin
+    question: http://192.168.1.121:8057/WordData/GetMeasureList
+    questionDetail: http://192.168.1.121:8057/WordData/GetTopicList
+    studyCheck: http://gdxypx.xy.com/System/BussinessApi/EjStudyCheck
+
+invoice:
+    host: http://192.168.1.222:7077/sys/common/openMplatform/log
+
+liveHost: http://192.168.1.222:6009
+
+fileHost: http://39.108.7.155:9099
+
+exam:
+    applySave: http://192.168.1.7:9099/cd/exam/save
+    applyUpdate: http://192.168.1.7:9099/cd/exam/update
+    applyDelete: http://192.168.1.7:9099/cd/exam/delete
+    subscribeSave: http://192.168.1.7:9099/cd/subscribe/save
+    subscribeSaveExam: http://192.168.1.7:9099/cd/subscribe/save/exam
+    subscribeUpdateExam: http://192.168.1.7:9099/cd/subscribe/update/exam
+    subscribeAddExamNum: http://192.168.1.7:9099/cd/subscribe/add/num
+    subscribeAddExamResult: http://192.168.1.7:9099/cd/exam/add/exam/result
+    subscribeAddCertificate: http://192.168.1.7:9099/cd/exam/add/exam/result/certificate
+    question: http://39.108.7.155:19013/common/question/getMeasureList
+    questionDetail: http://39.108.7.155:19013/common/question/getTopicList
+
+shared:
+    statistics: http://gdxypx.xy.com/WitSystem/BussinessApi/HighSeasData
+    customer: http://gdxypx.xy.com/WitSystem/BussinessApi/CustomerStatsData
+    cert: http://gdxypx.xy.com/WitSystem/BussinessApi/CertStatsData
+    orderArea: http://gdxypx.xy.com/WitSystem/BussinessApi/OrderAreaData
+    rateData: http://gdxypx.xy.com//WitSystem/BussinessApi/CustomerConversionRateData
+    rateTrend: http://gdxypx.xy.com/WitSystem/BussinessApi/CustomerConversionRateTrendData
+    customerOrder: http://gdxypx.xy.com/WitSystem/BussinessApi/CustomerOrderData
+    tenantData: http://gdxypx.xy.com/witsystem/bussinessapi/GetOrgList
+    saleData: http://gdxypx.xy.com/witsystem/bussinessapi/GetSaleListByOrgId
+
+ZsBank:
+    publickey: BNsIe9U0x8IeSe4h/dxUzVEz9pie0hDSfMRINRXc7s1UIXfkExnYECF4QqJ2SnHxLv3z/99gsfDQrQ6dzN5lZj0=
+    privatekey: NBtl7WnuUtA2v5FaebEkU0/Jj1IodLGT6lQqwkzmd2E=
+    sm4key: VuAzSWQhsoNqzn0K
+
+record:
+    downloadPath: http://192.168.1.7:9090/common/user/data/download

+ 194 - 0
zhongzheng-admin-saas/src/main/resources/application-pre.yml

@@ -0,0 +1,194 @@
+# 数据源配置
+spring:
+    datasource:
+        type: com.alibaba.druid.pool.DruidDataSource
+        driverClassName: com.mysql.cj.jdbc.Driver
+        druid:
+            url: jdbc:mysql://192.168.1.222:3306/zz_edu_saas_pre?rewriteBatchedStatements=true&useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&autoReconnect=true
+            username: root
+            password: zhongzheng2021
+            # 初始连接数
+            initialSize: 5
+            # 最小连接池数量
+            minIdle: 10
+            # 最大连接池数量
+            maxActive: 20
+            # 配置获取连接等待超时的时间
+            maxWait: 60000
+            # 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
+            timeBetweenEvictionRunsMillis: 60000
+            # 配置一个连接在池中最小生存的时间,单位是毫秒
+            minEvictableIdleTimeMillis: 300000
+            # 配置一个连接在池中最大生存的时间,单位是毫秒
+            maxEvictableIdleTimeMillis: 900000
+            # 配置检测连接是否有效
+            validationQuery: SELECT 1 FROM DUAL
+            testWhileIdle: true
+            testOnBorrow: false
+            testOnReturn: false
+            webStatFilter:
+                enabled: true
+            statViewServlet:
+                enabled: true
+                # 设置白名单,不填则允许所有访问
+                allow:
+                url-pattern: /druid/*
+                # 控制台管理用户名和密码
+                login-username: ruoyi
+                login-password: 123456
+            filter:
+                stat:
+                    enabled: true
+                    # 慢SQL记录
+                    log-slow-sql: true
+                    slow-sql-millis: 1000
+                    merge-sql: true
+                wall:
+                    config:
+                        multi-statement-allow: true
+    # redis 配置
+    redis:
+        # 地址
+        host: 192.168.1.222
+        # 端口,默认为6379
+        port: 6379
+        # 数据库索引
+        database: 1
+        # 密码
+        password: zhongzheng@@2024
+        # 连接超时时间
+        timeout: 10s
+        lettuce:
+            pool:
+                # 连接池中的最小空闲连接
+                min-idle: 0
+                # 连接池中的最大空闲连接
+                max-idle: 8
+                # 连接池的最大数据库连接数
+                max-active: 8
+                # #连接池最大阻塞等待时间(使用负值表示没有限制)
+                max-wait: -1ms
+aliyun:
+    oss:
+        endpoint: https://file.xyyxt.net # oss对外服务的访问域名
+        accessKeyId: LTAI5tDbpYmpifZYNX8S3kt1  # 访问身份验证中用到用户标识
+        accessKeySecret: jCdSPAj58ZXOLsWpV8bCgNOYrEK0de # 用户用于加密签名字符串和oss用来验证签名字符串的密钥
+        bucketName: zhongzheng-prod # oss的存储空间
+        policy:
+            expire: 30 # 签名有效期(S)
+        maxSize: 100 # 上传文件大小(M)
+        callback: https://cloud.xyyxt.net/aliyun/oss/callback # 文件上传成功后的回调地址
+        dir:
+            prefix: oss/images/ # 上传文件夹路径前缀 `
+
+poliv:
+    token:
+        userid: d5f6d309fe
+        writetoken: 8f14a371-9d02-4ec1-922d-54d7b4f79dca
+        readtoken: f2c397b4-e2a3-46dc-9266-e6a43ac26a35
+        secretkey: xpPrYdcbA1
+
+wx:
+    small:
+        appid: wxd3c8ae80cf43a305
+        appsecret: 193a001ebfd46f227008a21e9d13e750
+    gzh:
+        appid: wx6f48f721d18244eb
+        appsecret: 2f8b2b4ff66e2f6adfb9f08ae22d7474
+        studyNoteTpId: DndIixcAp15Sqgb4KOGTMf73VLF09NlCUifPSel5Y_s
+        qdyTpId: s981yq3SyIODNUEXFzVSWn0OYj90E72aKdtKtSp05_E
+        qdySubTpId: gzE6zddD7OzDLUtOO4GfU-KPCxpMqWFhCj86uXExqB8
+        qdySubStatusTpId: 7oKaAHmc4P7jqfonuiM1wnjfNLh9T662Ywm1OAFaUFA
+        qdyExamTpId: 66LitnYp0AIWFclo0rLdyLQP4-_vVc4pM95fyFs6l-c
+        qdyExamStatusTpId: J7nNogGhD38OD20gI-3CzwawfEMu7lOjR8fsi4LgJ5g
+        signatureTpId: 66LitnYp0AIWFclo0rLdyLQP4-_vVc4pM95fyFs6l-c
+    wepay:
+        mchid: 1342013901
+        key: GdXyPxYjZx1234123yJzXgDxYpXyjpx9
+        appsecret: GdXyPxYjZx1234123yJzXgDxYpXyjpx9
+        notifyUrl: https://api.xyyxt.net/wx/pay/callback
+    scanLogin:
+        host: https://m.xyyxt.net/
+
+wisdomExamRoom:
+    mchid: 10001
+    appid: ZZ-YXT-GZ-20220820-0001
+    app_secret: mt70O1s/Xd5LwuH7yHLpj9R+tKUn5j9vTnCvmgBnbJDA11Hpl7+q4lEZliqPAjN+YHPn9bGmHkAbw5XwhhMiYg==
+    host: http://bg.sam457.site:9020
+
+certificate:
+    host: https://m.xyyxt.net/
+
+liveGotoURL: https://
+
+enCodeVersion: release
+
+oldStudySys:
+    syncPath: https://www.xyyxt.net/System/BussinessApi/PostUserStudyRecords
+    sharePath: https://www.xyyxt.net/witsystem/dataapi/SaleOrder
+    shareCanclePath: https://www.xyyxt.net/witsystem/dataapi/ordercance
+    searchGradeCount: https://www.xyyxt.net/System/BussinessApi/OfficialGradeCount
+    pushGradeCount: https://www.xyyxt.net/System/BussinessApi/OfficialGradeCountAuto
+    educationalInspector: https://zs.gdzzkj.net/EduSystem/BusinessApi/NewYxtUserPrompt
+    classUserListPath: https://www.xyyxt.net/System/BussinessApi/UserCourseCategoryListcno
+    classOpenPath: https://www.xyyxt.net/System/BussinessApi/OpenClass
+    salePassword: http://www.xyyxt.net/WitSystem/BussinessApi/GetSaleInfo
+    updateInvoicePath: http://gdxypx.xy.com/system/BussinessApi/UpdateInvoiceData
+    createExamPath: http://gdxypx.xy.com/system/BussinessApi/CreateSameClass
+
+officialPush:
+    infoPath: https://jypt.gdcic.net/organjxjy/ShangBaoMingdan
+    periodPath: https://jypt.gdcic.net/organjxjy/XueshiShenqing
+    infoAccount: GDSXY
+    token: 01b5d9833987efdff54483cdc9720da6
+    sevenInfoPath: http://sgry.gdcic.net/organjxjy/ShangBaoMingdan
+    sevenPeriodPath: http://sgry.gdcic.net/organjxjy/XueshiShenqing
+
+distributionOldPay:
+    host: https://www.xyyxt.net/System/BussinessApi/AddRedPackData
+
+handouts:
+    savePath: https://attach.xyyxt.net/course/handouts/save
+    updatePath: https://attach.xyyxt.net/course/handouts/edit
+
+Nuonuo:
+    host: https://sdk.nuonuo.com/open/v1/services
+    APPkey: 39149760
+    APPSecret: 07168A248B2844E0
+
+oldOrder:
+    studyRecord: http://test.jqbao.net/WitSystem/BussinessApi/GetStudyRecord
+    orderCheck: http://test.jqbao.net/WitSystem/BussinessApi/AuditUnderOrder
+    finishOrder: http://test.jqbao.net/WitSystem/BussinessApi/CompleteOrder
+    refuseCheck: http://test.jqbao.net/WitSystem/BussinessApi/ReFundAuditResult
+    inputOrderSn: http://test.jqbao.net/WitSystem/BussinessApi/GetNewYxtinputOrderSn
+    checkOrderStudent: http://test.jqbao.net/WitSystem/BussinessApi/ReAuditUnderOrder
+    checkOrderBrokerage: http://test.jqbao.net/WitSystem/BussinessApi/CommissionRate
+    refundPay: http://192.168.1.222:6030/common/platform/pay
+    refundPayHandle: http://192.168.1.222:6030/common/platform/pay/handle
+    updateRemark: http://test.jqbao.net/WitSystem/BussinessApi/UpdateOrderAuditRemark
+
+oldSys:
+    host: http://test.jqbao.net
+
+invoice:
+    host: http://192.168.1.222:8077/sys/common/openMplatform/log
+
+liveHost: http://192.168.1.222:6009
+
+fileHost: http://39.108.7.155:9099
+
+exam:
+    applySave: http://192.168.1.7:9099/cd/exam/save
+    applyUpdate: http://192.168.1.7:9099/cd/exam/update
+    applyDelete: http://192.168.1.7:9099/cd/exam/delete
+    subscribeSave: http://192.168.1.7:9099/cd/subscribe/save
+    subscribeSaveExam: http://192.168.1.7:9099/cd/subscribe/save/exam
+    subscribeUpdateExam: http://192.168.1.7:9099/cd/subscribe/update/exam
+    subscribeAddExamNum: http://192.168.1.7:9099/cd/subscribe/add/num
+    subscribeAddExamResult: http://192.168.1.7:9099/cd/exam/add/exam/result
+
+ZsBank:
+    publickey: BNsIe9U0x8IeSe4h/dxUzVEz9pie0hDSfMRINRXc7s1UIXfkExnYECF4QqJ2SnHxLv3z/99gsfDQrQ6dzN5lZj0=
+    privatekey: NBtl7WnuUtA2v5FaebEkU0/Jj1IodLGT6lQqwkzmd2E=
+    sm4key: VuAzSWQhsoNqzn0K

+ 217 - 0
zhongzheng-admin-saas/src/main/resources/application-prod.yml

@@ -0,0 +1,217 @@
+# 数据源配置
+spring:
+    datasource:
+        type: com.alibaba.druid.pool.DruidDataSource
+        driverClassName: com.mysql.cj.jdbc.Driver
+        druid:
+            url: jdbc:mysql://rm-wz950fu2v70864v85.mysql.rds.aliyuncs.com/zz_edu_saas?rewriteBatchedStatements=true&useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&autoReconnect=true
+            username: root
+            password: gdxy2021!@#zzjykj
+            # 初始连接数
+            initialSize: 5
+            # 最小连接池数量
+            minIdle: 10
+            # 最大连接池数量
+            maxActive: 20
+            # 配置获取连接等待超时的时间
+            maxWait: 60000
+            # 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
+            timeBetweenEvictionRunsMillis: 60000
+            # 配置一个连接在池中最小生存的时间,单位是毫秒
+            minEvictableIdleTimeMillis: 300000
+            # 配置一个连接在池中最大生存的时间,单位是毫秒
+            maxEvictableIdleTimeMillis: 900000
+            # 配置检测连接是否有效
+            validationQuery: SELECT 1 FROM DUAL
+            testWhileIdle: true
+            testOnBorrow: false
+            testOnReturn: false
+            webStatFilter:
+                enabled: true
+            statViewServlet:
+                enabled: true
+                # 设置白名单,不填则允许所有访问
+                allow:
+                url-pattern: /druid/*
+                # 控制台管理用户名和密码
+                login-username: ruoyi
+                login-password: 123456
+            filter:
+                stat:
+                    enabled: true
+                    # 慢SQL记录
+                    log-slow-sql: true
+                    slow-sql-millis: 1000
+                    merge-sql: true
+                wall:
+                    config:
+                        multi-statement-allow: true
+    # redis 配置
+    redis:
+        # 地址
+        host: 172.18.0.148
+        # 端口,默认为6379
+        port: 6379
+        # 数据库索引
+        database: 0
+        # 密码
+        password: zhongzheng@@2024
+        # 连接超时时间
+        timeout: 10s
+        lettuce:
+            pool:
+                # 连接池中的最小空闲连接
+                min-idle: 0
+                # 连接池中的最大空闲连接
+                max-idle: 8
+                # 连接池的最大数据库连接数
+                max-active: 8
+                # #连接池最大阻塞等待时间(使用负值表示没有限制)
+                max-wait: -1ms
+aliyun:
+    oss:
+        endpoint: https://file.xyyxt.net # oss对外服务的访问域名
+        accessKeyId: LTAI5tDbpYmpifZYNX8S3kt1  # 访问身份验证中用到用户标识
+        accessKeySecret: jCdSPAj58ZXOLsWpV8bCgNOYrEK0de # 用户用于加密签名字符串和oss用来验证签名字符串的密钥
+        bucketName: zhongzheng-prod # oss的存储空间
+        policy:
+            expire: 30 # 签名有效期(S)
+        maxSize: 100 # 上传文件大小(M)
+        callback: https://cloud.xyyxt.net/aliyun/oss/callback # 文件上传成功后的回调地址
+        dir:
+            prefix: oss/images/ # 上传文件夹路径前缀 `
+
+poliv:
+    token:
+        userid: d5f6d309fe
+        writetoken: 8f14a371-9d02-4ec1-922d-54d7b4f79dca
+        readtoken: f2c397b4-e2a3-46dc-9266-e6a43ac26a35
+        secretkey: xpPrYdcbA1
+
+wx:
+    small:
+        appid: wxd3c8ae80cf43a305
+        appsecret: 193a001ebfd46f227008a21e9d13e750
+    gzh:
+        appid: wx6f48f721d18244eb
+        appsecret: 2f8b2b4ff66e2f6adfb9f08ae22d7474
+        studyNoteTpId: DndIixcAp15Sqgb4KOGTMf73VLF09NlCUifPSel5Y_s
+        qdyTpId: s981yq3SyIODNUEXFzVSWn0OYj90E72aKdtKtSp05_E
+        qdySubTpId: gzE6zddD7OzDLUtOO4GfU-KPCxpMqWFhCj86uXExqB8
+        qdySubStatusTpId: 7oKaAHmc4P7jqfonuiM1wnjfNLh9T662Ywm1OAFaUFA
+        qdyExamTpId: 66LitnYp0AIWFclo0rLdyLQP4-_vVc4pM95fyFs6l-c
+        qdyExamStatusTpId: J7nNogGhD38OD20gI-3CzwawfEMu7lOjR8fsi4LgJ5g
+        signatureTpId: 66LitnYp0AIWFclo0rLdyLQP4-_vVc4pM95fyFs6l-c
+    wepay:
+        mchid: 1342013901
+        key: GdXyPxYjZx1234123yJzXgDxYpXyjpx9
+        appsecret: GdXyPxYjZx1234123yJzXgDxYpXyjpx9
+        notifyUrl: https://api.xyyxt.net/wx/pay/callback
+    scanLogin:
+        host: https://m.xyyxt.net/
+
+wisdomExamRoom:
+    mchid: 10001
+    appid: ZZ-YXT-GZ-20220820-0001
+    app_secret: mt70O1s/Xd5LwuH7yHLpj9R+tKUn5j9vTnCvmgBnbJDA11Hpl7+q4lEZliqPAjN+YHPn9bGmHkAbw5XwhhMiYg==
+    host: http://bg.sam457.site:9020
+
+certificate:
+    host: https://m.xyyxt.net/
+
+liveGotoURL: https://
+
+enCodeVersion: release
+
+oldStudySys:
+    syncPath: https://www.xyyxt.net/System/BussinessApi/PostUserStudyRecords
+    sharePath: https://www.xyyxt.net/witsystem/dataapi/SaleOrder
+    shareCanclePath: https://www.xyyxt.net/witsystem/dataapi/ordercance
+    searchGradeCount: https://www.xyyxt.net/System/BussinessApi/OfficialGradeCount
+    pushGradeCount: https://www.xyyxt.net/System/BussinessApi/OfficialGradeCountAuto
+    educationalInspector: https://zs.gdzzkj.net/EduSystem/BusinessApi/NewYxtUserPrompt
+    classUserListPath: https://www.xyyxt.net/System/BussinessApi/UserCourseCategoryListcno
+    classOpenPath: https://www.xyyxt.net/System/BussinessApi/OpenClass
+    salePassword: http://www.xyyxt.net/WitSystem/BussinessApi/GetSaleInfo
+    updateInvoicePath: http://www.xyyxt.net/system/BussinessApi/UpdateInvoiceData
+    createExamPath: http://www.xyyxt.net/system/BussinessApi/CreateSameClass
+    saveInvoice: https://www.xyyxt.net/WitSystem/BussinessApi/InvoiceUpdate
+
+officialPush:
+    infoPath: https://jypt.gdcic.net/organjxjy/ShangBaoMingdan
+    periodPath: https://jypt.gdcic.net/organjxjy/XueshiShenqing
+    infoAccount: GDSXY
+    token: 01b5d9833987efdff54483cdc9720da6
+    sevenInfoPath: https://sgry.gdcic.net/organjxjy/ShangBaoMingdan
+    sevenPeriodPath: https://sgry.gdcic.net/organjxjy/XueshiShenqing
+
+distributionOldPay:
+    host: https://www.xyyxt.net/System/BussinessApi/AddRedPackData
+
+handouts:
+    savePath: https://attach.xyyxt.net/course/handouts/save
+    updatePath: https://attach.xyyxt.net/course/handouts/edit
+
+Nuonuo:
+    host: https://sdk.nuonuo.com/open/v1/services
+    APPkey: 39149760
+    APPSecret: 07168A248B2844E0
+
+oldOrder:
+    studyRecord: http://www.xyyxt.net/WitSystem/BussinessApi/GetStudyRecord
+    orderCheck: http://www.xyyxt.net/WitSystem/BussinessApi/AuditUnderOrder
+    finishOrder: http://www.xyyxt.net/WitSystem/BussinessApi/CompleteOrder
+    refuseCheck: http://www.xyyxt.net/WitSystem/BussinessApi/ReFundAuditResult
+    inputOrderSn: http://www.xyyxt.net/WitSystem/BussinessApi/GetNewYxtinputOrderSn
+    checkOrderStudent: http://www.xyyxt.net/WitSystem/BussinessApi/ReAuditUnderOrder
+    checkOrderBrokerage: http://www.xyyxt.net/WitSystem/BussinessApi/CommissionRate
+    refundPay: https://cloud.xyyxt.net/common/platform/pay
+    refundPayHandle: https://cloud.xyyxt.net/common/platform/pay/handle
+    updateRemark: http://www.xyyxt.net/WitSystem/BussinessApi/UpdateOrderAuditRemark
+    getResitTimes: http://www.xyyxt.net/System/BussinessApi/GetResitTimes
+    classEndSaleTipMsg: http://www.xyyxt.net/WitSystem/BussinessApi/ClassEndSaleTipMsg
+oldSys:
+    host: https://www.xyyxt.net
+    goods: http://www.xyyxt.net/system/BussinessApi/NewYxtLogin
+    question: http://192.168.1.121:8057/WordData/GetMeasureList
+    questionDetail: http://192.168.1.121:8057/WordData/GetTopicList
+    studyCheck: http://www.xyyxt.net/System/BussinessApi/EjStudyCheck
+
+invoice:
+    host: https://ptapi.gdzzkj.net/sys/common/openMplatform/log
+
+liveHost: https://sso.xyyxt.net
+
+fileHost: http://39.108.7.155:9099
+
+exam:
+    applySave: http://39.108.7.155:9099/cd/exam/save
+    applyUpdate: http://39.108.7.155:9099/cd/exam/update
+    applyDelete: http://39.108.7.155:9099/cd/exam/delete
+    subscribeSave: http://39.108.7.155:9099/cd/subscribe/save
+    subscribeSaveExam: http://39.108.7.155:9099/cd/subscribe/save/exam
+    subscribeUpdateExam: http://39.108.7.155:9099/cd/subscribe/update/exam
+    subscribeAddExamNum: http://39.108.7.155:9099/cd/subscribe/add/num
+    subscribeAddExamResult: http://39.108.7.155:9099/cd/exam/add/exam/result
+    subscribeAddCertificate: http://39.108.7.155:9099/cd/exam/add/exam/result/certificate
+    question: http://39.108.7.155:19013/common/question/getMeasureList
+    questionDetail: http://39.108.7.155:19013/common/question/getTopicList
+
+shared:
+    statistics: http://www.xyyxt.net/WitSystem/BussinessApi/HighSeasData
+    customer: http://www.xyyxt.net/WitSystem/BussinessApi/CustomerStatsData
+    cert: http://www.xyyxt.net/WitSystem/BussinessApi/CertStatsData
+    orderArea: http://www.xyyxt.net/WitSystem/BussinessApi/OrderAreaData
+    rateData: http://www.xyyxt.net//WitSystem/BussinessApi/CustomerConversionRateData
+    rateTrend: http://www.xyyxt.net/WitSystem/BussinessApi/CustomerConversionRateTrendData
+    customerOrder: http://www.xyyxt.net/WitSystem/BussinessApi/CustomerOrderData
+    tenantData: http://www.xyyxt.net/witsystem/bussinessapi/GetOrgList
+    saleData: http://www.xyyxt.net/witsystem/bussinessapi/GetSaleListByOrgId
+
+ZsBank:
+    publickey: BNsIe9U0x8IeSe4h/dxUzVEz9pie0hDSfMRINRXc7s1UIXfkExnYECF4QqJ2SnHxLv3z/99gsfDQrQ6dzN5lZj0=
+    privatekey: NBtl7WnuUtA2v5FaebEkU0/Jj1IodLGT6lQqwkzmd2E=
+    sm4key: VuAzSWQhsoNqzn0K
+
+record:
+    downloadPath: http://39.108.7.155:9090/common/user/data/download

+ 313 - 0
zhongzheng-admin-saas/src/main/resources/application.yml

@@ -0,0 +1,313 @@
+# 项目相关配置
+zhongzheng:
+  # 名称
+  name: zhongzheng_saas
+  # 版本
+  version: 3.4.0
+  # 版权年份
+  copyrightYear: 2021
+  # 实例演示开关
+  demoEnabled: true
+  # 文件路径,使用jvm系统变量,兼容windows和linux;
+  profile: ${user.dir}/zhongzheng/uploadPath
+  # 获取ip地址开关
+  addressEnabled: false
+
+captcha:
+  # 验证码类型 math 数组计算 char 字符验证
+  captchaType: math
+  # line 线段干扰 circle 圆圈干扰 shear 扭曲干扰
+  captchaCategory: circle
+  # 数字验证码位数
+  captchaNumberLength: 1
+  # 字符验证码长度
+  captchaCharLength: 4
+
+# 开发环境配置
+server:
+  # 服务器的HTTP端口,默认为8080
+  port: 7077
+  servlet:
+    # 应用的访问路径
+    context-path: /
+  # undertow 配置
+  undertow:
+    # HTTP post内容的最大大小。当值为-1时,默认值为大小是无限的
+    max-http-post-size: -1
+    # 以下的配置会影响buffer,这些buffer会用于服务器连接的IO操作,有点类似netty的池化内存管理
+    # 每块buffer的空间大小,越小的空间被利用越充分
+    buffer-size: 512
+    # 设置IO线程数, 它主要执行非阻塞的任务,它们会负责多个连接, 默认设置每个CPU核心一个线程
+    io-threads: 8
+    # 阻塞任务线程池, 当执行类似servlet请求阻塞操作, undertow会从这个线程池中取得线程,它的值设置取决于系统的负载
+    worker-threads: 256
+    # 是否分配的直接内存
+    direct-buffers: true
+#  # tomcat 配置
+#  tomcat:
+#    # tomcat的URI编码
+#    uri-encoding: UTF-8
+#    # tomcat最大线程数,默认为200
+#    max-threads: 500
+#    # Tomcat启动初始化的线程数,默认值25
+#    min-spare-threads: 30
+
+# 日志配置
+logging:
+  level:
+    com.zhongzheng: @logging.level@
+    org.springframework: warn
+  config: classpath:logback.xml
+
+# Spring配置
+spring:
+  mvc:
+    async:
+      request-timeout: 30000
+  main:
+    allow-bean-definition-overriding: true
+  # 资源信息
+  messages:
+    # 国际化资源文件路径
+    basename: i18n/messages
+  profiles:
+    active: @profiles.active@
+  # 文件上传
+  servlet:
+    multipart:
+      # 单个文件大小
+      max-file-size:  10MB
+      # 设置总上传的文件大小
+      max-request-size:  20MB
+  # 服务模块
+  devtools:
+    restart:
+      # 热部署开关
+      enabled: true
+  application:
+    name: zz_edu
+  boot:
+    admin:
+      # Spring Boot Admin Client 客户端的相关配置
+      client:
+        # 设置 Spring Boot Admin Server 地址
+        url: http://localhost:${server.port}${spring.boot.admin.context-path}
+        instance:
+          prefer-ip: true # 注册实例时,优先使用 IP
+      # Spring Boot Admin Server 服务端的相关配置
+      context-path: /admin # 配置 Spring
+
+# Actuator 监控端点的配置项
+management:
+  endpoints:
+    web:
+      # Actuator 提供的 API 接口的根目录。默认为 /actuator
+      base-path: /actuator
+      exposure:
+        # 需要开放的端点。默认值只打开 health 和 info 两个端点。通过设置 * ,可以开放所有端点。
+        include: '*'
+  endpoint:
+    logfile:
+      external-file: ./logs/sys-console.log
+
+# token配置
+token:
+  # 令牌自定义标识
+  header: AuthorizationToken
+  # 令牌密钥
+  secret: abcdefghijklmnopqrstuvwxyz
+  # 令牌有效期(默认30分钟)
+  expireTime: 360
+
+# MyBatis配置
+# https://baomidou.com/config/
+mybatis-plus:
+  # 对应的 XML 文件位置
+  mapperLocations: classpath*:mapper/**/*Mapper.xml
+  # 实体扫描,多个package用逗号或者分号分隔
+  typeAliasesPackage: com.zhongzheng.**.domain
+  # 针对 typeAliasesPackage,如果配置了该属性,则仅仅会扫描路径下以该类作为父类的域对象
+  #typeAliasesSuperType: Class<?>
+  # 如果配置了该属性,SqlSessionFactoryBean 会把该包下面的类注册为对应的 TypeHandler
+  #typeHandlersPackage: null
+  # 如果配置了该属性,会将路径下的枚举类进行注入,让实体类字段能够简单快捷的使用枚举属性
+  #typeEnumsPackage: null
+  # 启动时是否检查 MyBatis XML 文件的存在,默认不检查
+  checkConfigLocation: false
+  # 通过该属性可指定 MyBatis 的执行器,MyBatis 的执行器总共有三种:
+  # SIMPLE:该执行器类型不做特殊的事情,为每个语句的执行创建一个新的预处理语句(PreparedStatement)
+  # REUSE:该执行器类型会复用预处理语句(PreparedStatement)
+  # BATCH:该执行器类型会批量执行所有的更新语句
+  executorType: SIMPLE
+  # 指定外部化 MyBatis Properties 配置,通过该配置可以抽离配置,实现不同环境的配置部署
+  configurationProperties: null
+  typeHandlersPackage: com.zhongzheng.common.type
+  configuration:
+    # 自动驼峰命名规则(camel case)映射
+    # 如果您的数据库命名符合规则无需使用 @TableField 注解指定数据库字段名
+    mapUnderscoreToCamelCase: true
+    # 默认枚举处理类,如果配置了该属性,枚举将统一使用指定处理器进行处理
+    # org.apache.ibatis.type.EnumTypeHandler : 存储枚举的名称
+    # org.apache.ibatis.type.EnumOrdinalTypeHandler : 存储枚举的索引
+    # com.baomidou.mybatisplus.extension.handlers.MybatisEnumTypeHandler : 枚举类需要实现IEnum接口或字段标记@EnumValue注解.
+    defaultEnumTypeHandler: org.apache.ibatis.type.EnumTypeHandler
+    # 当设置为 true 的时候,懒加载的对象可能被任何懒属性全部加载,否则,每个属性都按需加载。需要和 lazyLoadingEnabled 一起使用。
+    aggressiveLazyLoading: true
+    # MyBatis 自动映射策略
+    # NONE:不启用自动映射
+    # PARTIAL:只对非嵌套的 resultMap 进行自动映射
+    # FULL:对所有的 resultMap 都进行自动映射
+    autoMappingBehavior: PARTIAL
+    # MyBatis 自动映射时未知列或未知属性处理策
+    # NONE:不做任何处理 (默认值)
+    # WARNING:以日志的形式打印相关警告信息
+    # FAILING:当作映射失败处理,并抛出异常和详细信息
+    autoMappingUnknownColumnBehavior: NONE
+    # Mybatis一级缓存,默认为 SESSION
+    # SESSION session级别缓存,同一个session相同查询语句不会再次查询数据库
+    # STATEMENT 关闭一级缓存
+    localCacheScope: SESSION
+    # 开启Mybatis二级缓存,默认为 true
+    cacheEnabled: true
+  global-config:
+    # 是否打印 Logo banner
+    banner: true
+    # 是否初始化 SqlRunner
+    enableSqlRunner: false
+    dbConfig:
+      # 主键类型
+      # AUTO 数据库ID自增
+      # NONE 空
+      # INPUT 用户输入ID
+      # ASSIGN_ID 全局唯一ID
+      # ASSIGN_UUID 全局唯一ID UUID
+      idType: AUTO
+      # 表名前缀
+      tablePrefix: null
+      # 字段 format,例: %s,(对主键无效)
+      columnFormat: null
+      # 表名是否使用驼峰转下划线命名,只对表名生效
+      tableUnderline: true
+      # 大写命名,对表名和字段名均生效
+      capitalMode: false
+      # 全局的entity的逻辑删除字段属性名
+      logicDeleteField: null
+      # 逻辑已删除值
+      logicDeleteValue: 2
+      # 逻辑未删除值
+      logicNotDeleteValue: 0
+      # 字段验证策略之 insert,在 insert 的时候的字段验证策略
+      # IGNORED 忽略判断
+      # NOT_NULL 非NULL判断
+      # NOT_EMPTY 非空判断(只对字符串类型字段,其他类型字段依然为非NULL判断)
+      # DEFAULT 默认的,一般只用于注解里
+      # NEVER 不加入 SQL
+      insertStrategy: NOT_EMPTY
+      # 字段验证策略之 update,在 update 的时候的字段验证策略
+      updateStrategy: NOT_EMPTY
+      # 字段验证策略之 select,在 select 的时候的字段验证策略既 wrapper 根据内部 entity 生成的 where 条件
+      selectStrategy: NOT_EMPTY
+  # 开启多租户
+  tenant:
+    enabled-tenant: false
+# PageHelper分页插件
+pagehelper:
+  helperDialect: mysql
+  reasonable: true
+  supportMethodsArguments: true
+  params: count=countSql
+# Swagger配置
+swagger:
+  # 是否开启swagger
+  enabled: true
+  # 请求前缀
+  pathMapping:
+knife4j:
+  enable: true
+  setting:
+    enableFooter: false
+
+# 防止XSS攻击
+xss:
+  # 过滤开关
+  enabled: true
+  # 排除链接(多个用逗号分隔)
+  excludes: /system/notice/*
+  # 匹配链接
+  urlPatterns: /system/*,/monitor/*,/tool/*
+
+feign:
+  # 开启压缩
+  compression:
+    request:
+      enabled: true
+    response:
+      enabled: true
+  okhttp:
+    enabled: true
+  hystrix:
+    enabled: true
+
+phone:
+  conceal: false
+
+poliv:
+  sdk:
+    userid: egsxlptzdq
+    appId: ezl5uy4zei
+    appSecret: 2bf5bb3c31d34531943df10284edd50b
+
+tencent:
+  cloud:
+    SecretId: AKIDd6XkjTw9D1atwkJceS2NSIuHPK1ThfOr
+    SecretKey: GG2ZqrdCWcS6Yx72h6F7k7E4ey2qPnwq
+
+aliyun:
+  sms:
+    signName: 中正教育
+    registerTemplateCode: SMS_228670004
+    loginTemplateCode: SMS_228670005
+    forgetTemplateCode: SMS_228685033
+    pwdTemplateCode: SMS_230220381
+    bindNewTelCode: SMS_232178371
+    accessKeyId: LTAI5tDbpYmpifZYNX8S3kt1
+    accessKeySecret: jCdSPAj58ZXOLsWpV8bCgNOYrEK0de
+    OpenTheGoodsCode: SMS_230970155     #商品开通提醒
+    informationNotificationCode: SMS_230965149  #完善报名资料通知
+    materialReviewCode: SMS_230980165         #报名资料审核通过通知
+    NotificationOfFailureCode: SMS_230980172  #报名资料审核不通过通知
+    remainingDaysValidityCode: SMS_236566823  #开通班级有效期还剩天数
+    completionReminderCode: SMS_230965157   #学时学习完成提醒
+    schoolHoursCode: SMS_230970166    #学时机构审核通过提醒
+    auditFailedCode: SMS_230970167  #学时机构审核不通过提醒
+    ReminderApproval: SMS_231200314 #学时机构审核通过提醒
+    passTheReminder: SMS_230980180  #学时机构审核不通过提醒
+    bookingReminder: SMS_230980181  #考试预约提醒
+    cancellationReminder: SMS_230980183 #考试预约取消提醒
+    reservationSuccess: SMS_230980186 #考试预约成功提醒
+    examinationRemind: SMS_230960195  #考试提醒
+    newExamPass: SMS_230970179  #七大员新考考试通过提醒
+    newExamFail: SMS_235491082  #七大员新考考试不通过提醒
+    openingReminder: SMS_230970209  #七大员题库开通提醒(12-22
+    classRemind: SMS_230965224  #二建继教开班提醒
+    OverdueReminder: SMS_230980259  #班级过期提醒
+    OverdueReminderHave: SMS_230965228  #班级过期提醒有学习次数
+    planReminder: SMS_230970248     #学习计划提醒
+    commitmentCode: SMS_231190546     #承诺书审核通过通知
+    commitmentFailsCode: SMS_231215516     #承诺书审核不通过通知
+    mockBookingReminder: SMS_243430276     #模考预约提醒
+    mockRemind: SMS_243355276      #模考开始提醒
+    liveStartRemind: SMS_243345514      #直播开课提醒
+    buyNotStudyStudentRemind : SMS_247745294  #学生购买未学习
+    buyNotStudyTeacherRemind : SMS_247935257  #学生购买未学习老师
+    longNotStudyStudentRemind: SMS_247910221  #学生长时间未学习
+    longNotStudyTeacherRemind: SMS_247765294  #学生长时间未学习老师
+    signCommitmentRemind: SMS_250390195  #签署承诺书提醒
+    todayExamNotRecordWarn: SMS_257713140  #学员打卡提醒(每日一练)
+    todayExamNotRecordTeachWarn: SMS_257702971  #学员打卡教务提醒(每日一练)
+    noFinishExamNoteCode: SMS_262460267  #未做完试卷通知
+    orderServiceEndRemind : SMS_465555251  #学生购买未学习
+    classEndRemind : SMS_465955572
+
+distributionOldPay:
+      host: http://test.jqbao.net/System/BussinessApi/AddRedPackData

+ 2 - 0
zhongzheng-admin-saas/src/main/resources/banner.txt

@@ -0,0 +1,2 @@
+Application Version: ${zhongzheng.version}
+Spring Boot Version: ${spring-boot.version}

+ 36 - 0
zhongzheng-admin-saas/src/main/resources/i18n/messages.properties

@@ -0,0 +1,36 @@
+#错误消息
+not.null=* 必须填写
+user.jcaptcha.error=验证码错误
+user.jcaptcha.expire=验证码已失效
+user.not.exists=用户不存在/密码错误
+user.password.not.match=用户不存在/密码错误
+user.password.retry.limit.count=密码输入错误{0}次
+user.password.retry.limit.exceed=密码输入错误{0}次,帐户锁定10分钟
+user.password.delete=对不起,您的账号已被删除
+user.blocked=用户已封禁,请联系管理员
+role.blocked=角色已封禁,请联系管理员
+user.logout.success=退出成功
+
+length.not.valid=长度必须在{min}到{max}个字符之间
+
+user.username.not.valid=* 2到20个汉字、字母、数字或下划线组成,且必须以非数字开头
+user.password.not.valid=* 5-50个字符
+ 
+user.email.not.valid=邮箱格式错误
+user.mobile.phone.number.not.valid=手机号格式错误
+user.login.success=登录成功
+user.notfound=请重新登录
+user.forcelogout=管理员强制退出,请重新登录
+user.unknown.error=未知错误,请重新登录
+
+##文件上传消息
+upload.exceed.maxSize=上传的文件大小超出限制的文件大小!<br/>允许的文件最大大小是:{0}MB!
+upload.filename.exceed.length=上传的文件名最长{0}个字符
+
+##权限
+no.permission=您没有数据的权限,请联系管理员添加权限 [{0}]
+no.create.permission=您没有创建数据的权限,请联系管理员添加权限 [{0}]
+no.update.permission=您没有修改数据的权限,请联系管理员添加权限 [{0}]
+no.delete.permission=您没有删除数据的权限,请联系管理员添加权限 [{0}]
+no.export.permission=您没有导出数据的权限,请联系管理员添加权限 [{0}]
+no.view.permission=您没有查看数据的权限,请联系管理员添加权限 [{0}]

+ 108 - 0
zhongzheng-admin-saas/src/main/resources/logback.xml

@@ -0,0 +1,108 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<configuration>
+    <property name="log.path" value="./logs"/>
+    <property name="console.log.pattern"
+              value="%red(%d{yyyy-MM-dd HH:mm:ss}) %green([%thread]) %highlight(%-5level) %boldMagenta(%logger{36}%n) - %msg%n"/>
+    <property name="log.pattern" value="%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n"/>
+
+    <!-- 控制台输出 -->
+    <appender name="console" class="ch.qos.logback.core.ConsoleAppender">
+        <encoder>
+            <pattern>${console.log.pattern}</pattern>
+            <charset>utf-8</charset>
+        </encoder>
+    </appender>
+
+    <!-- 控制台输出 -->
+    <appender name="file_console" class="ch.qos.logback.core.FileAppender">
+        <file>${log.path}/sys-console.log</file>
+        <encoder>
+            <pattern>${log.pattern}</pattern>
+            <charset>utf-8</charset>
+        </encoder>
+        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
+            <!-- 过滤的级别 -->
+            <level>INFO</level>
+        </filter>
+    </appender>
+
+    <!-- 系统日志输出 -->
+    <appender name="file_info" class="ch.qos.logback.core.rolling.RollingFileAppender">
+        <file>${log.path}/sys-info.log</file>
+        <!-- 循环政策:基于时间创建日志文件 -->
+        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
+            <!-- 日志文件名格式 -->
+            <fileNamePattern>${log.path}/sys-info.%d{yyyy-MM-dd}.log</fileNamePattern>
+            <!-- 日志最大的历史 60天 -->
+            <maxHistory>60</maxHistory>
+        </rollingPolicy>
+        <encoder>
+            <pattern>${log.pattern}</pattern>
+        </encoder>
+        <filter class="ch.qos.logback.classic.filter.LevelFilter">
+            <!-- 过滤的级别 -->
+            <level>INFO</level>
+            <!-- 匹配时的操作:接收(记录) -->
+            <onMatch>ACCEPT</onMatch>
+            <!-- 不匹配时的操作:拒绝(不记录) -->
+            <onMismatch>DENY</onMismatch>
+        </filter>
+    </appender>
+
+    <appender name="file_error" class="ch.qos.logback.core.rolling.RollingFileAppender">
+        <file>${log.path}/sys-error.log</file>
+        <!-- 循环政策:基于时间创建日志文件 -->
+        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
+            <!-- 日志文件名格式 -->
+            <fileNamePattern>${log.path}/sys-error.%d{yyyy-MM-dd}.log</fileNamePattern>
+            <!-- 日志最大的历史 60天 -->
+            <maxHistory>60</maxHistory>
+        </rollingPolicy>
+        <encoder>
+            <pattern>${log.pattern}</pattern>
+        </encoder>
+        <filter class="ch.qos.logback.classic.filter.LevelFilter">
+            <!-- 过滤的级别 -->
+            <level>ERROR</level>
+            <!-- 匹配时的操作:接收(记录) -->
+            <onMatch>ACCEPT</onMatch>
+            <!-- 不匹配时的操作:拒绝(不记录) -->
+            <onMismatch>DENY</onMismatch>
+        </filter>
+    </appender>
+
+    <!-- 用户访问日志输出  -->
+    <appender name="sys-user" class="ch.qos.logback.core.rolling.RollingFileAppender">
+        <file>${log.path}/sys-user.log</file>
+        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
+            <!-- 按天回滚 daily -->
+            <fileNamePattern>${log.path}/sys-user.%d{yyyy-MM-dd}.log</fileNamePattern>
+            <!-- 日志最大的历史 60天 -->
+            <maxHistory>60</maxHistory>
+        </rollingPolicy>
+        <encoder>
+            <pattern>${log.pattern}</pattern>
+        </encoder>
+    </appender>
+
+    <!-- 系统模块日志级别控制  -->
+    <logger name="com.zhongzheng" level="info" />
+    <!-- Spring日志级别控制  -->
+    <logger name="org.springframework" level="warn" />
+
+    <root level="info">
+        <appender-ref ref="console" />
+    </root>
+
+    <!--系统操作日志-->
+    <root level="info">
+        <appender-ref ref="file_info" />
+        <appender-ref ref="file_error" />
+        <appender-ref ref="file_console" />
+    </root>
+
+    <!--系统用户操作日志-->
+    <logger name="sys-user" level="info">
+        <appender-ref ref="sys-user"/>
+    </logger>
+</configuration>

+ 0 - 0
zhongzheng-admin-saas/src/main/resources/mybatis/mybatis-config.xml


+ 128 - 0
zhongzheng-admin/pom.xml

@@ -0,0 +1,128 @@
+<?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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <parent>
+        <artifactId>zhongzheng</artifactId>
+        <groupId>com.zhongzheng</groupId>
+        <version>3.4.0</version>
+    </parent>
+    <modelVersion>4.0.0</modelVersion>
+    <packaging>jar</packaging>
+    <artifactId>zhongzheng-admin</artifactId>
+
+    <description>
+        web服务入口
+    </description>
+
+    <dependencies>
+
+        <!-- spring-boot-devtools -->
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-devtools</artifactId>
+            <optional>true</optional> <!-- 表示依赖不会传递 -->
+        </dependency>
+
+
+
+<!--        &lt;!&ndash; swagger2&ndash;&gt;-->
+<!--        <dependency>-->
+<!--            <groupId>io.springfox</groupId>-->
+<!--            <artifactId>springfox-swagger2</artifactId>-->
+<!--        </dependency>-->
+
+<!--        &lt;!&ndash;防止进入swagger页面报类型转换错误,排除2.9.2中的引用,手动增加1.5.21版本&ndash;&gt;-->
+<!--        <dependency>-->
+<!--            <groupId>io.swagger</groupId>-->
+<!--            <artifactId>swagger-annotations</artifactId>-->
+<!--            <version>1.5.21</version>-->
+<!--        </dependency>-->
+
+<!--        <dependency>-->
+<!--            <groupId>io.swagger</groupId>-->
+<!--            <artifactId>swagger-models</artifactId>-->
+<!--            <version>1.5.21</version>-->
+<!--        </dependency>-->
+
+<!--        <dependency>-->
+<!--            <groupId>com.github.xiaoymin</groupId>-->
+<!--            <artifactId>swagger-bootstrap-ui</artifactId>-->
+<!--        </dependency>-->
+
+        <dependency>
+            <groupId>com.github.xiaoymin</groupId>
+            <artifactId>knife4j-spring-boot-starter</artifactId>
+        </dependency>
+
+         <!-- Mysql驱动包 -->
+        <dependency>
+            <groupId>mysql</groupId>
+            <artifactId>mysql-connector-java</artifactId>
+        </dependency>
+
+        <!-- 核心模块-->
+        <dependency>
+            <groupId>com.zhongzheng</groupId>
+            <artifactId>zhongzheng-framework</artifactId>
+        </dependency>
+
+        <!-- 定时任务-->
+        <dependency>
+            <groupId>com.zhongzheng</groupId>
+            <artifactId>zhongzheng-quartz</artifactId>
+        </dependency>
+
+        <!-- 代码生成-->
+        <dependency>
+            <groupId>com.zhongzheng</groupId>
+            <artifactId>zhongzheng-generator</artifactId>
+        </dependency>
+
+
+
+    </dependencies>
+
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>org.springframework.boot</groupId>
+                <artifactId>spring-boot-maven-plugin</artifactId>
+                <version>2.1.1.RELEASE</version>
+                <configuration>
+                    <fork>true</fork> <!-- 如果没有该配置,devtools不会生效 -->
+                </configuration>
+                <executions>
+                    <execution>
+                        <goals>
+                            <goal>repackage</goal>
+                        </goals>
+                    </execution>
+                </executions>
+            </plugin>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-war-plugin</artifactId>
+                <version>3.1.0</version>
+                <configuration>
+                    <failOnMissingWebXml>false</failOnMissingWebXml>
+                    <warName>${project.artifactId}</warName>
+                </configuration>
+           </plugin>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-resources-plugin</artifactId>
+                <configuration>
+                    <encoding>UTF-8</encoding>
+                    <nonFilteredFileExtensions>
+                        <nonFilteredFileExtension>pem</nonFilteredFileExtension>
+                        <nonFilteredFileExtension>pfx</nonFilteredFileExtension>
+                        <nonFilteredFileExtension>p12</nonFilteredFileExtension>
+                    </nonFilteredFileExtensions>
+                </configuration>
+            </plugin>
+        </plugins>
+        <finalName>${project.artifactId}</finalName>
+    </build>
+
+</project>

+ 24 - 0
zhongzheng-admin/src/main/java/com/zhongzheng/ZhongZhengApplication.java

@@ -0,0 +1,24 @@
+package com.zhongzheng;
+
+import com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceAutoConfigure;
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
+import org.springframework.scheduling.annotation.EnableScheduling;
+
+/**
+ * 启动程序
+ *
+ * @author zhongzheng
+ */
+
+@SpringBootApplication(exclude = { DataSourceAutoConfiguration.class })
+@EnableScheduling
+public class ZhongZhengApplication
+{
+    public static void main(String[] args)
+    {
+        SpringApplication.run(ZhongZhengApplication.class, args);
+        System.out.println("(♥◠‿◠)ノ゙  中正启动成功   ლ(´ڡ`ლ)゙"+"ZSADMIN");
+    }
+}

+ 18 - 0
zhongzheng-admin/src/main/java/com/zhongzheng/ZhongZhengServletInitializer.java

@@ -0,0 +1,18 @@
+package com.zhongzheng;
+
+import org.springframework.boot.builder.SpringApplicationBuilder;
+import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;
+
+/**
+ * web容器中进行部署
+ * 
+ * @author zhongzheng
+ */
+public class ZhongZhengServletInitializer extends SpringBootServletInitializer
+{
+    @Override
+    protected SpringApplicationBuilder configure(SpringApplicationBuilder application)
+    {
+        return application.sources(ZhongZhengApplication.class);
+    }
+}

+ 104 - 0
zhongzheng-admin/src/main/java/com/zhongzheng/controller/activity/ActivityRecommendController.java

@@ -0,0 +1,104 @@
+package com.zhongzheng.controller.activity;
+
+import com.zhongzheng.common.annotation.Log;
+import com.zhongzheng.common.core.controller.BaseController;
+import com.zhongzheng.common.core.domain.AjaxResult;
+import com.zhongzheng.common.core.page.TableDataInfo;
+import com.zhongzheng.common.enums.BusinessType;
+import com.zhongzheng.modules.activity.bo.ActivityRecommendAddBo;
+import com.zhongzheng.modules.activity.bo.ActivityRecommendEditBo;
+import com.zhongzheng.modules.activity.bo.ActivityRecommendQueryBo;
+import com.zhongzheng.modules.activity.service.IActivityRecommendService;
+import com.zhongzheng.modules.activity.vo.ActivityRecommendVo;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.RequiredArgsConstructor;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+/**
+ * 商品推荐Controller
+ *
+ * @author hjl
+ * @date 2022-04-13
+ */
+@Api(value = "商品推荐控制器", tags = {"商品推荐管理"})
+@RequiredArgsConstructor(onConstructor_ = @Autowired)
+@RestController
+@RequestMapping("/activity/recommend")
+public class ActivityRecommendController extends BaseController {
+
+    private final IActivityRecommendService iActivityRecommendService;
+
+
+
+
+    /**
+     * 查询商品推荐列表
+     */
+    @ApiOperation("查询商品推荐列表")
+    @PreAuthorize("@ss.hasPermi('system:recommend:list')")
+    @GetMapping("/list")
+    public TableDataInfo<ActivityRecommendVo> list(ActivityRecommendQueryBo bo) {
+        startPage();
+        List<Integer> statusList = new ArrayList<>();
+        statusList.add(1);
+        statusList.add(0);
+        bo.setStatusList(statusList);
+        List<ActivityRecommendVo> list = iActivityRecommendService.selectList(bo);
+        return getDataTable(list);
+    }
+
+
+
+    /**
+     * 获取商品推荐详细信息
+     */
+    @ApiOperation("获取商品推荐详细信息")
+    @PreAuthorize("@ss.hasPermi('system:recommend:query')")
+    @GetMapping("/{recommendId}")
+    public AjaxResult<ActivityRecommendVo> getInfo(@PathVariable("recommendId" ) Long recommendId) {
+        ActivityRecommendQueryBo bo = new ActivityRecommendQueryBo();
+        bo.setRecommendId(recommendId);
+        return AjaxResult.success(iActivityRecommendService.getDetail(bo));
+    }
+
+    /**
+     * 新增商品推荐
+     */
+    @ApiOperation("新增商品推荐")
+    @PreAuthorize("@ss.hasPermi('system:recommend:add')")
+    @Log(title = "商品推荐", businessType = BusinessType.INSERT)
+    @PostMapping()
+    public AjaxResult<Void> add(@RequestBody ActivityRecommendAddBo bo) {
+        return toAjax(iActivityRecommendService.insertByAddBo(bo) ? 1 : 0);
+    }
+
+    /**
+     * 修改商品推荐
+     */
+    @ApiOperation("修改商品推荐")
+    @PreAuthorize("@ss.hasPermi('system:recommend:edit')")
+    @Log(title = "商品推荐", businessType = BusinessType.UPDATE)
+    @PostMapping("/edit")
+    public AjaxResult<Void> edit(@RequestBody ActivityRecommendEditBo bo) {
+        return toAjax(iActivityRecommendService.updateByEditBo(bo) ? 1 : 0);
+    }
+
+    /**
+     * 删除推荐板块商品
+     */
+    @ApiOperation("删除推荐板块")
+    @PreAuthorize("@ss.hasPermi('system:goods:remove')")
+    @Log(title = "删除推荐板块" , businessType = BusinessType.DELETE)
+    @PostMapping("/remove")
+    public AjaxResult<Void> remove(@RequestBody ActivityRecommendEditBo bo) {
+        return toAjax(iActivityRecommendService.deleteWithValidByIds(new ArrayList<Long>(Arrays.asList(bo.getRecommendId())), true) ? 1 : 0);
+    }
+
+}

+ 84 - 0
zhongzheng-admin/src/main/java/com/zhongzheng/controller/activity/ConsultationController.java

@@ -0,0 +1,84 @@
+package com.zhongzheng.controller.activity;
+
+
+import com.zhongzheng.common.core.controller.BaseController;
+import com.zhongzheng.common.core.domain.AjaxResult;
+import com.zhongzheng.common.core.page.TableDataInfo;
+import com.zhongzheng.modules.activity.bo.ConsultationAddBo;
+import com.zhongzheng.modules.activity.bo.ConsultationDelBo;
+import com.zhongzheng.modules.activity.bo.ConsultationQueryBo;
+import com.zhongzheng.modules.activity.bo.ConsultationUpdateBo;
+import com.zhongzheng.modules.activity.service.IConsultationService;
+import com.zhongzheng.modules.activity.vo.ConsultationVo;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.RequiredArgsConstructor;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+/**
+ * 新聞公告Controller
+ *
+ * @author hjl
+ * @date 2022-04-13
+ */
+@Api(value = "新聞公告控制器", tags = {"新聞公告管理"})
+@RequiredArgsConstructor(onConstructor_ = @Autowired)
+@RestController
+@RequestMapping("/consultation")
+public class ConsultationController extends BaseController {
+
+    private final IConsultationService consultationService;
+
+    /**
+     * 新增新聞公告
+     */
+    @ApiOperation("新增新聞公告")
+    @PostMapping("/save")
+    public AjaxResult<Void> add(@RequestBody ConsultationAddBo bo) {
+        return toAjax(consultationService.insertByAddBo(bo) ? 1 : 0);
+    }
+
+    /**
+     * 刪除新聞公告
+     */
+    @ApiOperation("刪除新聞公告")
+    @PostMapping("/batch/del")
+    public AjaxResult<Void> batchDel(@RequestBody ConsultationDelBo bo) {
+        return toAjax(consultationService.batchDel(bo) ? 1 : 0);
+    }
+
+    /**
+     * 查看新聞列表
+     */
+    @ApiOperation("查看新聞列表")
+    @GetMapping("/list")
+    public TableDataInfo<ConsultationVo> list(ConsultationQueryBo bo) {
+        startPage();
+        List<ConsultationVo> list = consultationService.getConsultationlist(bo);
+        return getDataTable(list);
+    }
+
+    /**
+     * 查看新聞詳情
+     */
+    @ApiOperation("查看新聞列表")
+    @GetMapping("/details/{id}")
+    public AjaxResult<ConsultationVo> details(@PathVariable("id") Long id) {
+        ConsultationVo vo = consultationService.getDetails(id);
+        return AjaxResult.success(vo);
+    }
+
+    /**
+     * 修改新聞公告
+     */
+    @ApiOperation("修改新聞公告")
+    @PostMapping("/update")
+    public AjaxResult<Void> updateByBo(@RequestBody ConsultationUpdateBo bo) {
+        return toAjax(consultationService.updateByBo(bo) ? 1 : 0);
+    }
+
+
+}

+ 83 - 0
zhongzheng-admin/src/main/java/com/zhongzheng/controller/alioss/OssController.java

@@ -0,0 +1,83 @@
+package com.zhongzheng.controller.alioss;
+
+
+import com.zhongzheng.common.core.controller.BaseController;
+import com.zhongzheng.common.core.domain.AjaxResult;
+import com.zhongzheng.modules.alioss.bo.OssRequest;
+import com.zhongzheng.modules.alioss.service.OssService;
+import com.zhongzheng.modules.alioss.vo.ResultBean;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.RequiredArgsConstructor;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.servlet.http.HttpServletRequest;
+import java.io.FileNotFoundException;
+import java.io.FileOutputStream;
+import java.io.InputStream;
+import java.util.Map;
+
+/**
+ * 阿里OSS
+ *
+ * @author change
+ * @date 2021-05-17
+ */
+@Api(value = "阿里OSS上传文件控制器", tags = {"阿里OSS上传文件"})
+@RequiredArgsConstructor(onConstructor_ = @Autowired)
+@RestController
+@RequestMapping("/aliyun/oss")
+public class OssController extends BaseController {
+
+    private static Logger log = LoggerFactory.getLogger(OssController.class);
+
+    private final OssService ossService;
+
+    /**
+     * policy获得
+     */
+    @ApiOperation("policy获得")
+    @GetMapping("/policy")
+    public AjaxResult<ResultBean> policy(@Validated OssRequest ossRequest) {
+        ResultBean result = ossService.getPolicy(ossRequest);
+        log.info("服务端生成签名:{}",result);
+        return AjaxResult.success(result);
+    }
+
+    /**
+     * 阿里回调OSS返回参数到前端
+     */
+    @ApiOperation("回调")
+    @PostMapping("/callback")
+    public ResultBean callback(HttpServletRequest request) {
+        ResultBean ossCallbackResult = ossService.callback(request);
+        log.info("oss成功的回调:{}",ossCallbackResult);
+        return ossCallbackResult;
+    }
+
+
+    /**
+     * upload上传文件
+     */
+    @ApiOperation("上传file图片")
+    @PostMapping("/upload")
+    public AjaxResult<String> upload( OssRequest file) throws Exception {
+        String result = ossService.upload(file);
+        log.info("服务端生成签名:{}",result);
+        return AjaxResult.success("返回图片路径",result);
+    }
+
+    @ApiOperation("上传file图片带路径")
+    @PostMapping("/uploadPath")
+    public AjaxResult<String> uploadPath(OssRequest file) throws Exception {
+        String result = ossService.uploadWithPath(file,file.getPath());
+        log.info("服务端生成签名:{}",result);
+        return AjaxResult.success("返回图片路径",result);
+    }
+
+}

+ 162 - 0
zhongzheng-admin/src/main/java/com/zhongzheng/controller/bank/ExamController.java

@@ -0,0 +1,162 @@
+package com.zhongzheng.controller.bank;
+
+import java.util.List;
+import java.util.Arrays;
+
+import com.zhongzheng.modules.bank.bo.*;
+import com.zhongzheng.modules.bank.domain.QuestionBusiness;
+import com.zhongzheng.modules.bank.service.IExamQuestionService;
+import com.zhongzheng.modules.bank.service.IExamService;
+import com.zhongzheng.modules.bank.service.IQuestionBusinessService;
+import com.zhongzheng.modules.bank.vo.ExamQuestionVo;
+import com.zhongzheng.modules.bank.vo.ExamVo;
+import lombok.RequiredArgsConstructor;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.PutMapping;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import com.zhongzheng.common.annotation.Log;
+import com.zhongzheng.common.core.controller.BaseController;
+import com.zhongzheng.common.core.domain.AjaxResult;
+import com.zhongzheng.common.enums.BusinessType;
+import com.zhongzheng.common.utils.poi.ExcelUtil;
+import com.zhongzheng.common.core.page.TableDataInfo;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+
+/**
+ * 试卷Controller
+ *
+ * @author hjl
+ * @date 2021-10-22
+ */
+@Api(value = "试卷控制器", tags = {"试卷管理"})
+@RequiredArgsConstructor(onConstructor_ = @Autowired)
+@RestController
+@RequestMapping("/bank/exam")
+public class ExamController extends BaseController {
+
+    private final IExamService iExamService;
+
+    private final IQuestionBusinessService iQuestionBusinessService;
+
+    private final IExamQuestionService iExamQuestionService;
+
+    /**
+     * 查询试卷列表
+     */
+    @ApiOperation("查询试卷列表")
+    @PreAuthorize("@ss.hasPermi('system:exam:list')")
+    @GetMapping("/list")
+    public TableDataInfo<ExamVo> list(ExamQueryBo bo) {
+        startPage();
+        List<ExamVo> list = iExamService.getList(bo);
+        return getDataTable(list);
+    }
+
+    /**
+     * 试卷批量删除
+     */
+    @ApiOperation("试卷批量删除")
+    @PostMapping("/batch/del")
+    public AjaxResult<Void> batchDelExam(@RequestBody QuestionBatchDelBo bo) {
+        return toAjax(iExamService.batchDelExam(bo) ? 1 : 0);
+    }
+
+
+    /**
+     * 导出试卷列表
+     */
+   /* @ApiOperation("导出试卷列表")
+    @PreAuthorize("@ss.hasPermi('system:exam:export')")
+    @Log(title = "试卷", businessType = BusinessType.EXPORT)
+    @GetMapping("/export")
+    public AjaxResult<ExamVo> export(ExamQueryBo bo) {
+        List<ExamVo> list = iExamService.queryList(bo);
+        ExcelUtil<ExamVo> util = new ExcelUtil<ExamVo>(ExamVo.class);
+        return util.exportExcel(list, "试卷");
+    }*/
+
+    /**
+     * 获取试卷详细信息
+     */
+    @ApiOperation("获取试卷详细信息")
+    @PreAuthorize("@ss.hasPermi('system:exam:query')")
+    @GetMapping("/{examId}")
+    public AjaxResult<ExamVo> getInfo(@PathVariable("examId" ) Long examId) {
+        return AjaxResult.success(iExamService.queryById(examId));
+    }
+
+    /**
+     * 新增试卷
+     */
+    @ApiOperation("新增试卷")
+    @PreAuthorize("@ss.hasPermi('system:exam:add')")
+    @Log(title = "试卷", businessType = BusinessType.INSERT)
+    @PostMapping()
+    public AjaxResult<ExamVo> add(@RequestBody ExamAddBo bo) {
+        return AjaxResult.success(iExamService.insertByAddBo(bo));
+    }
+
+    /**
+     * 新增试卷
+     */
+    @ApiOperation("批量新增试卷")
+    @PreAuthorize("@ss.hasPermi('system:exam:add')")
+    @Log(title = "试卷", businessType = BusinessType.INSERT)
+    @PostMapping("/addMore")
+    public AjaxResult<List<Long>> addMore(@RequestBody List<ExamAddBo> list) {
+        return AjaxResult.success(iExamService.insertByAddBoMore(list));
+    }
+
+    /**
+     * 修改试卷
+     */
+    @ApiOperation("修改试卷")
+    @PreAuthorize("@ss.hasPermi('system:exam:edit')")
+    @Log(title = "试卷", businessType = BusinessType.UPDATE)
+    @PostMapping("/edit")
+    public AjaxResult<Void> edit(@RequestBody ExamEditBo bo) {
+        return toAjax(iExamService.updateByEditBo(bo) ? 1 : 0);
+    }
+
+    /**
+     * 删除试卷
+     */
+   /* @ApiOperation("删除试卷")
+    @PreAuthorize("@ss.hasPermi('system:exam:remove')")
+    @Log(title = "试卷" , businessType = BusinessType.DELETE)
+    @DeleteMapping("/{examIds}")
+    public AjaxResult<Void> remove(@PathVariable Long[] examIds) {
+        return toAjax(iExamService.deleteWithValidByIds(Arrays.asList(examIds), true) ? 1 : 0);
+    }*/
+    /**
+     * 查询题目业务层次关系列表
+     */
+    @ApiOperation("查询业务层次关系列表")
+    @PreAuthorize("@ss.hasPermi('system:business:list')")
+    @GetMapping("/business/list")
+    public TableDataInfo<QuestionBusiness> businessList(QuestionBusinessQueryBo bo) {
+        startPage();
+        bo.setType(QuestionBusiness.TYPE_EXAM);
+        List<QuestionBusiness> list = iQuestionBusinessService.getListById(bo);
+        return getDataTable(list);
+    }
+
+    /**
+     * 查询题目业务层次关系列表
+     */
+    @ApiOperation("查询题目列表")
+    @PreAuthorize("@ss.hasPermi('system:business:list')")
+    @GetMapping("/question/list")
+    public AjaxResult<List<ExamQuestionVo>> questionList(ExamQuestionQueryBo bo) {
+        List<ExamQuestionVo> list = iExamQuestionService.getList(bo);
+        return AjaxResult.success(list);
+    }
+}

+ 162 - 0
zhongzheng-admin/src/main/java/com/zhongzheng/controller/bank/QuestionChapterController.java

@@ -0,0 +1,162 @@
+package com.zhongzheng.controller.bank;
+
+import java.util.List;
+import java.util.Arrays;
+
+import com.zhongzheng.modules.bank.bo.*;
+import com.zhongzheng.modules.bank.domain.QuestionBusiness;
+import com.zhongzheng.modules.bank.service.IQuestionBusinessService;
+import com.zhongzheng.modules.bank.service.IQuestionChapterExamService;
+import com.zhongzheng.modules.bank.service.IQuestionChapterService;
+import com.zhongzheng.modules.bank.vo.ExamQuestionVo;
+import com.zhongzheng.modules.bank.vo.ExamVo;
+import com.zhongzheng.modules.bank.vo.QuestionChapterVo;
+import lombok.RequiredArgsConstructor;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.PutMapping;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import com.zhongzheng.common.annotation.Log;
+import com.zhongzheng.common.core.controller.BaseController;
+import com.zhongzheng.common.core.domain.AjaxResult;
+import com.zhongzheng.common.enums.BusinessType;
+import com.zhongzheng.common.utils.poi.ExcelUtil;
+import com.zhongzheng.common.core.page.TableDataInfo;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+
+/**
+ * 章卷Controller
+ *
+ * @author hjl
+ * @date 2021-10-25
+ */
+@Api(value = "章卷控制器", tags = {"章卷管理"})
+@RequiredArgsConstructor(onConstructor_ = @Autowired)
+@RestController
+@RequestMapping("/bank/chapter")
+public class QuestionChapterController extends BaseController {
+
+    private final IQuestionChapterService iQuestionChapterService;
+
+    private final IQuestionBusinessService iQuestionBusinessService;
+
+    private final IQuestionChapterExamService iQuestionChapterExamService;
+
+    /**
+     * 查询章卷列表
+     */
+    @ApiOperation("查询章卷列表")
+    @PreAuthorize("@ss.hasPermi('system:chapter:list')")
+    @GetMapping("/list")
+    public TableDataInfo<QuestionChapterVo> list(QuestionChapterQueryBo bo) {
+        startPage();
+        List<QuestionChapterVo> list = iQuestionChapterService.getList(bo);
+        return getDataTable(list);
+    }
+
+    /**
+     * 章卷批量删除
+     */
+    @ApiOperation("章卷批量删除")
+    @PostMapping("/batch/del")
+    public AjaxResult<Void> batchDelChapterExam(@RequestBody QuestionBatchDelBo bo) {
+        return toAjax(iQuestionChapterService.batchDelChapterExam(bo) ? 1 : 0);
+    }
+
+    /**
+     * 导出章卷列表
+     */
+  /*  @ApiOperation("导出章卷列表")
+    @PreAuthorize("@ss.hasPermi('system:chapter:export')")
+    @Log(title = "章卷", businessType = BusinessType.EXPORT)
+    @GetMapping("/export")
+    public AjaxResult<QuestionChapterVo> export(QuestionChapterQueryBo bo) {
+        List<QuestionChapterVo> list = iQuestionChapterService.queryList(bo);
+        ExcelUtil<QuestionChapterVo> util = new ExcelUtil<QuestionChapterVo>(QuestionChapterVo.class);
+        return util.exportExcel(list, "章卷");
+    }*/
+
+    /**
+     * 获取章卷详细信息
+     */
+    @ApiOperation("获取章卷详细信息")
+    @PreAuthorize("@ss.hasPermi('system:chapter:query')")
+    @GetMapping("/{chapterExamId}")
+    public AjaxResult<QuestionChapterVo> getInfo(@PathVariable("chapterExamId" ) Long chapterExamId) {
+        return AjaxResult.success(iQuestionChapterService.getById(chapterExamId));
+    }
+
+    /**
+     * 新增章卷
+     */
+    @ApiOperation("新增章卷")
+    @PreAuthorize("@ss.hasPermi('system:chapter:add')")
+    @Log(title = "章卷", businessType = BusinessType.INSERT)
+    @PostMapping()
+    public AjaxResult<Void> add(@RequestBody QuestionChapterAddBo bo) {
+        return toAjax(iQuestionChapterService.insertByAddBo(bo)>0 ? 1 : 0);
+    }
+
+    /**
+     * 新增章卷
+     */
+    @ApiOperation("批量新增章卷")
+    @PreAuthorize("@ss.hasPermi('system:chapter:add')")
+    @Log(title = "章卷", businessType = BusinessType.INSERT)
+    @PostMapping("/addMore")
+    public AjaxResult<List<Long>> addMore(@RequestBody List<QuestionChapterAddBo> list) {
+        return AjaxResult.success(iQuestionChapterService.insertByAddBoMore(list));
+    }
+
+    /**
+     * 修改章卷
+     */
+    @ApiOperation("修改章卷")
+    @PreAuthorize("@ss.hasPermi('system:chapter:edit')")
+    @Log(title = "章卷", businessType = BusinessType.UPDATE)
+    @PostMapping("/edit")
+    public AjaxResult<Void> edit(@RequestBody QuestionChapterEditBo bo) {
+        return toAjax(iQuestionChapterService.updateByEditBo(bo) ? 1 : 0);
+    }
+
+    /**
+     * 删除章卷
+     */
+    /*@ApiOperation("删除章卷")
+    @PreAuthorize("@ss.hasPermi('system:chapter:remove')")
+    @Log(title = "章卷" , businessType = BusinessType.DELETE)
+    @DeleteMapping("/{chapterExamIds}")
+    public AjaxResult<Void> remove(@PathVariable Long[] chapterExamIds) {
+        return toAjax(iQuestionChapterService.deleteWithValidByIds(Arrays.asList(chapterExamIds), true) ? 1 : 0);
+    }*/
+    /**
+     * 查询题目业务层次关系列表
+     */
+    @ApiOperation("查询业务层次关系列表")
+    @PreAuthorize("@ss.hasPermi('system:business:list')")
+    @GetMapping("/business/list")
+    public TableDataInfo<QuestionBusiness> businessList(QuestionBusinessQueryBo bo) {
+        startPage();
+        bo.setType(QuestionBusiness.TYPE_QUESTION_CHAPTER);
+        List<QuestionBusiness> list = iQuestionBusinessService.getListById(bo);
+        return getDataTable(list);
+    }
+    /**
+     * 查询关联试卷列表
+     */
+    @ApiOperation("查询关联试卷列表")
+    @PreAuthorize("@ss.hasPermi('system:business:list')")
+    @GetMapping("/exam/list")
+    public AjaxResult<List<ExamVo>> examList(QuestionChapterExamQueryBo bo) {
+        List<ExamVo> list = iQuestionChapterExamService.getList(bo);
+        return AjaxResult.success(list);
+    }
+
+}

+ 325 - 0
zhongzheng-admin/src/main/java/com/zhongzheng/controller/bank/QuestionController.java

@@ -0,0 +1,325 @@
+package com.zhongzheng.controller.bank;
+
+import java.time.LocalDateTime;
+import java.time.format.DateTimeFormatter;
+import java.util.*;
+
+import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.core.lang.Validator;
+import cn.hutool.http.HttpStatus;
+import com.alibaba.fastjson.JSON;
+import com.github.pagehelper.PageInfo;
+import com.zhongzheng.common.core.domain.entity.SysUser;
+import com.zhongzheng.common.core.domain.model.LoginUser;
+import com.zhongzheng.common.core.page.TableDataInfo;
+import com.zhongzheng.common.utils.ServletUtils;
+import com.zhongzheng.common.utils.poi.EasyPoiUtil;
+import com.zhongzheng.common.utils.poi.ExcelUtil;
+import com.zhongzheng.framework.web.service.TokenService;
+import com.zhongzheng.modules.bank.bo.*;
+import com.zhongzheng.modules.bank.domain.Exam;
+import com.zhongzheng.modules.bank.domain.Question;
+import com.zhongzheng.modules.bank.domain.QuestionBusiness;
+import com.zhongzheng.modules.bank.service.IQuestionBusinessService;
+import com.zhongzheng.modules.bank.service.IQuestionService;
+import com.zhongzheng.modules.bank.vo.*;
+import com.zhongzheng.modules.course.bo.CourseSectionBusinessAddBo;
+import com.zhongzheng.modules.course.vo.CourseSectionImport;
+import com.zhongzheng.modules.goods.vo.GoodsVo;
+import com.zhongzheng.modules.user.vo.UserSubscribeErrorImport;
+import lombok.RequiredArgsConstructor;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.PutMapping;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import com.zhongzheng.common.annotation.Log;
+import com.zhongzheng.common.core.controller.BaseController;
+import com.zhongzheng.common.core.domain.AjaxResult;
+import com.zhongzheng.common.enums.BusinessType;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.web.multipart.MultipartFile;
+
+/**
+ * 题库题目Controller
+ *
+ * @author hjl
+ * @date 2021-10-21
+ */
+@Api(value = "题库题目控制器", tags = {"题库题目管理"})
+@RequiredArgsConstructor(onConstructor_ = @Autowired)
+@RestController
+@RequestMapping("/bank/question")
+public class QuestionController extends BaseController {
+
+    private final IQuestionService iQuestionService;
+
+    private final IQuestionBusinessService iQuestionBusinessService;
+
+    @Autowired
+    private TokenService tokenService;
+
+    /**
+     * 查询题库题目列表
+     */
+    @ApiOperation("查询题库题目列表")
+    @PreAuthorize("@ss.hasPermi('system:question:list')")
+    @GetMapping("/list")
+    public TableDataInfo<QuestionVo> list(QuestionQueryBo bo) {
+        startPage();
+    //    List<QuestionVo> list = ;
+        return iQuestionService.selectListByBo(bo);
+    }
+
+    /**
+     * 题目批量删除
+     */
+    @ApiOperation("题目批量删除")
+    @PostMapping("/batch/del")
+    public AjaxResult<Void> batchDelQuestion(@RequestBody QuestionBatchDelBo bo) {
+        return toAjax(iQuestionService.batchDelQuestion(bo) ? 1 : 0);
+    }
+
+    /**
+     * 导出题库题目列表
+     */
+   /* @ApiOperation("导出题库题目列表")
+    @PreAuthorize("@ss.hasPermi('system:question:export')")
+    @Log(title = "题库题目", businessType = BusinessType.EXPORT)
+    @GetMapping("/export")
+    public AjaxResult<QuestionVo> export(QuestionQueryBo bo) {
+        List<QuestionVo> list = iQuestionService.queryList(bo);
+        ExcelUtil<QuestionVo> util = new ExcelUtil<QuestionVo>(QuestionVo.class);
+        return util.exportExcel(list, "题库题目");
+    }*/
+
+    /**
+     * 获取题库题目详细信息
+     */
+    @ApiOperation("获取题库题目详细信息")
+    @PreAuthorize("@ss.hasPermi('system:question:query')")
+    @GetMapping("/{questionId}")
+    public AjaxResult<QuestionVo> getInfo(@PathVariable("questionId" ) Long questionId) {
+        return AjaxResult.success(iQuestionService.queryById(questionId));
+    }
+
+    /**
+     * 新增题库题目
+     */
+    @ApiOperation("新增题库题目")
+    @PreAuthorize("@ss.hasPermi('system:question:add')")
+    @Log(title = "题库题目", businessType = BusinessType.INSERT)
+    @PostMapping()
+    public AjaxResult<Question> add(@RequestBody QuestionAddBo bo) {
+        return AjaxResult.success(iQuestionService.insertByAddBo(bo));
+    }
+
+    /**
+     * 修改题库题目
+     */
+    @ApiOperation("修改题库题目")
+    @PreAuthorize("@ss.hasPermi('system:question:edit')")
+    @Log(title = "题库题目", businessType = BusinessType.UPDATE)
+    @PostMapping("/edit")
+    public AjaxResult<Void> edit(@RequestBody QuestionEditBo bo) {
+        return toAjax(iQuestionService.updateByEditBo(bo) ? 1 : 0);
+    }
+
+    /**
+     * 删除题库题目
+     */
+    /*@ApiOperation("删除题库题目")
+    @PreAuthorize("@ss.hasPermi('system:question:remove')")
+    @Log(title = "题库题目" , businessType = BusinessType.DELETE)
+    @DeleteMapping("/{questionIds}")
+    public AjaxResult<Void> remove(@PathVariable Long[] questionIds) {
+        return toAjax(iQuestionService.deleteWithValidByIds(Arrays.asList(questionIds), true) ? 1 : 0);
+    }*/
+
+    /**
+     * 查询题目业务层次关系列表
+     */
+    @ApiOperation("查询题目业务层次关系列表")
+    @PreAuthorize("@ss.hasPermi('system:business:list')")
+    @GetMapping("/business/list")
+    public TableDataInfo<QuestionBusiness> businessList(QuestionBusinessQueryBo bo) {
+        startPage();
+        bo.setType(QuestionBusiness.TYPE_QUESTION);
+        List<QuestionBusiness> list = iQuestionBusinessService.getListById(bo);
+        return getDataTable(list);
+    }
+
+    @Log(title = "题目管理", businessType = BusinessType.IMPORT)
+    @ApiOperation("导入题目模板")
+    @PreAuthorize("@ss.hasPermi('system:question:import')")
+    @PostMapping("/importData")
+    public AjaxResult importData(MultipartFile file, boolean updateSupport) throws Exception
+    {
+        List<QuestionImportV2> questionList2 =EasyPoiUtil.importExcel(file,0,2,QuestionImportV2.class);
+        ExcelUtil<QuestionImportV2> util = new ExcelUtil<QuestionImportV2>(QuestionImportV2.class);
+        LoginUser loginUser = tokenService.getLoginUser(ServletUtils.getRequest());
+        String operName = loginUser.getUsername();
+        List<QuestionImport> questionList = new ArrayList<>();
+        List<QuestionImportV2> errorList = iQuestionService.importExcelQuestionV2(questionList2, updateSupport, operName);
+        if(Validator.isNotEmpty(errorList)&&errorList.size()>0){
+            List<QuestionImportV2> errorListExport = new ArrayList<>();
+            for(QuestionImportV2 qi : errorList){
+                QuestionImportV2 item = BeanUtil.toBean(qi, QuestionImportV2.class);
+                errorListExport.add(item);
+            }
+            ExcelUtil<QuestionImportV2> util1 = new ExcelUtil<QuestionImportV2>(QuestionImportV2.class);
+            String timeStr= LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd"));
+            return util.exportEasyExcel(util1.exportEasyData(errorListExport), "导出错误数据"+timeStr);
+        }else{
+            return AjaxResult.success();
+        }
+    }
+
+    @Log(title = "题目管理", businessType = BusinessType.IMPORT)
+    @ApiOperation("导入题目模板返回数组")
+    @PreAuthorize("@ss.hasPermi('system:question:import')")
+    @PostMapping("/importDataBackList")
+    public AjaxResult<Map<String, Object>> importDataBackList(MultipartFile file) throws Exception
+    {
+        List<QuestionImportV2> questionList2 =EasyPoiUtil.importExcel(file,0,2,QuestionImportV2.class);
+
+        ExcelUtil<QuestionImportV2> util = new ExcelUtil<QuestionImportV2>(QuestionImportV2.class);
+        LoginUser loginUser = tokenService.getLoginUser(ServletUtils.getRequest());
+        String operName = loginUser.getUsername();
+        //只返回数据不插入数据库
+        Map<String, Object> rs = iQuestionService.importExcelQuestionV2NotInBank(questionList2, false, operName);
+        List<QuestionImportV2> errorList = (List<QuestionImportV2>)rs.get("errorList");
+        List<QuestionAddBo> nqList = (List<QuestionAddBo>)rs.get("questionList");
+        if(Validator.isNotEmpty(errorList)&&errorList.size()>0){
+            List<QuestionImportV2> errorListExport = new ArrayList<>();
+            for(QuestionImportV2 qi : errorList){
+                QuestionImportV2 item = BeanUtil.toBean(qi, QuestionImportV2.class);
+                errorListExport.add(item);
+            }
+            ExcelUtil<QuestionImportV2> util1 = new ExcelUtil<QuestionImportV2>(QuestionImportV2.class);
+            String timeStr= LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd"));
+            rs.put("errorExcel",util.exportEasyExcel(util1.exportEasyData(errorListExport), "导出错误数据"+timeStr));
+            rs.remove("errorList");
+        }
+        if(questionList2.size()>0&&questionList2.size()>nqList.size()&&nqList.size()>0){
+            rs.put("fullStatus","部分成功");
+        }
+        else if(questionList2.size()==nqList.size()){
+            rs.put("fullStatus","全部成功");
+        }
+        else{
+            rs.put("fullStatus","失败");
+        }
+        return AjaxResult.success(rs);
+    }
+
+    @Log(title = "题目管理", businessType = BusinessType.IMPORT)
+    @ApiOperation("导入旧系统题目模板返回数组")
+    @PreAuthorize("@ss.hasPermi('system:question:import')")
+    @PostMapping("/importDataBackFromOldList")
+    public AjaxResult<Map<String, Object>> importDataBackFromOldList(MultipartFile file) throws Exception
+    {
+        List<QuestionImportV3> questionList2 =EasyPoiUtil.importExcel(file,0,1,QuestionImportV3.class);
+
+        ExcelUtil<QuestionImportV3> util = new ExcelUtil<QuestionImportV3>(QuestionImportV3.class);
+        LoginUser loginUser = tokenService.getLoginUser(ServletUtils.getRequest());
+        String operName = loginUser.getUsername();
+        //只返回数据不插入数据库
+        Map<String, Object> rs = iQuestionService.importExcelQuestionV3NotInBankFromOld(questionList2, false, operName);
+        List<QuestionImportV3> errorList = (List<QuestionImportV3>)rs.get("errorList");
+        List<QuestionAddBo> nqList = (List<QuestionAddBo>)rs.get("questionList");
+        if(Validator.isNotEmpty(errorList)&&errorList.size()>0){
+            List<QuestionImportV3> errorListExport = new ArrayList<>();
+            for(QuestionImportV3 qi : errorList){
+                QuestionImportV3 item = BeanUtil.toBean(qi, QuestionImportV3.class);
+                errorListExport.add(item);
+            }
+            ExcelUtil<QuestionImportV3> util1 = new ExcelUtil<QuestionImportV3>(QuestionImportV3.class);
+            String timeStr= LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd"));
+            rs.put("errorExcel",util.exportEasyExcel(util1.exportEasyData(errorListExport), "导出错误数据"+timeStr));
+            rs.remove("errorList");
+        }
+        if(errorList.size()>0&&nqList.size()>0){
+            rs.put("fullStatus","部分成功");
+        }
+        else if(errorList.size()==0){
+            rs.put("fullStatus","全部成功");
+        }
+        else{
+            rs.put("fullStatus","失败");
+        }
+        return AjaxResult.success(rs);
+    }
+
+    @Log(title = "导入题目Word模板", businessType = BusinessType.IMPORT)
+    @ApiOperation("导入题目Word模板")
+    @PreAuthorize("@ss.hasPermi('system:question:import')")
+    @PostMapping("/importWordData")
+    public AjaxResult importWordData(MultipartFile file, Long eduId, Long projectId, Long businessId, Long subjectId) throws Exception
+    {
+        String errorLog = iQuestionService.importWordQuestion(file,  eduId,  projectId,  businessId, subjectId);
+        return AjaxResult.success(errorLog);
+    }
+
+    @Log(title = "导入题目Word模板列表", businessType = BusinessType.IMPORT)
+    @ApiOperation("导入题目Word模板列表")
+    @PreAuthorize("@ss.hasPermi('system:question:import')")
+    @PostMapping("/importWordQuestionList")
+    public AjaxResult<Map<String,Object>> importWordQuestionList(MultipartFile file, Long eduId, Long projectId, Long businessId, Long subjectId) throws Exception
+    {
+        Map<String,Object> result = iQuestionService.importWordQuestionList(file,  eduId,  projectId,  businessId, subjectId);
+        return AjaxResult.success(result);
+    }
+
+
+    @ApiOperation("导入建匠题目Word模板列表")
+    @PreAuthorize("@ss.hasPermi('system:question:import')")
+    @PostMapping("/importJJWordQuestionList")
+    public AjaxResult<Map<String,Object>> importJJWordQuestionList(MultipartFile file, Long eduId, Long projectId, Long businessId, Long subjectId) throws Exception
+    {
+        Map<String,Object> result = iQuestionService.importJJWordQuestionList(file,  eduId,  projectId,  businessId, subjectId);
+        return AjaxResult.success(result);
+    }
+
+    @ApiOperation("导入学监题目Word模板列表")
+    @PreAuthorize("@ss.hasPermi('system:question:import')")
+    @PostMapping("/importXueJianWordQuestionList")
+    public AjaxResult<Map<String,Object>> importXueJianWordQuestionList(MultipartFile file, Long eduId, Long projectId, Long businessId, Long subjectId) throws Exception
+    {
+        Map<String,Object> result = iQuestionService.importXueJianWordQuestionList(file,  eduId,  projectId,  businessId, subjectId);
+        return AjaxResult.success(result);
+    }
+
+    @ApiOperation("导入学监题目Word模板列表")
+    @PostMapping("/importXlsx")
+    public AjaxResult<Map<String,Object>> importXlsxQuestionList(MultipartFile file,String param) throws Exception
+    {
+        List<QuestionImportV4> questionList2 =EasyPoiUtil.importExcel(file,0,1,QuestionImportV4.class);
+        Map<String,Object> result = iQuestionService.importXlsxQuestionList(questionList2,param);
+        return AjaxResult.success(result);
+    }
+
+
+    @ApiOperation("补充题库图片")
+    @PostMapping("/importImage")
+    public AjaxResult<Map<String,Object>> importImage(MultipartFile file) throws Exception
+    {
+        List<QuestionImageVo> questionList2 =EasyPoiUtil.importExcel(file,0,1,QuestionImageVo.class);
+        Map<String,Object> result = iQuestionService.importImage(questionList2);
+        return AjaxResult.success(result);
+    }
+
+    @ApiOperation("识别图片文案2")
+    @PostMapping("/image/word/two")
+    public AjaxResult<Void> getImageWordTwo(MultipartFile file,String major,String exam) {
+        iQuestionService.getImageWordTwo(file,major,exam);
+        return AjaxResult.success();
+    }
+
+}

+ 155 - 0
zhongzheng-admin/src/main/java/com/zhongzheng/controller/bank/QuestionModuleController.java

@@ -0,0 +1,155 @@
+package com.zhongzheng.controller.bank;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Arrays;
+
+import cn.hutool.core.lang.Validator;
+import com.zhongzheng.modules.bank.bo.*;
+import com.zhongzheng.modules.bank.domain.QuestionBusiness;
+import com.zhongzheng.modules.bank.service.IQuestionBusinessService;
+import com.zhongzheng.modules.bank.service.IQuestionModuleChapterService;
+import com.zhongzheng.modules.bank.service.IQuestionModuleService;
+import com.zhongzheng.modules.bank.vo.ExamQuestionVo;
+import com.zhongzheng.modules.bank.vo.QuestionChapterVo;
+import com.zhongzheng.modules.bank.vo.QuestionModuleVo;
+import com.zhongzheng.modules.goods.bo.GoodsBatchDelBo;
+import lombok.RequiredArgsConstructor;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.PutMapping;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import com.zhongzheng.common.annotation.Log;
+import com.zhongzheng.common.core.controller.BaseController;
+import com.zhongzheng.common.core.domain.AjaxResult;
+import com.zhongzheng.common.enums.BusinessType;
+import com.zhongzheng.common.utils.poi.ExcelUtil;
+import com.zhongzheng.common.core.page.TableDataInfo;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+
+/**
+ * 题目模块Controller
+ *
+ * @author hjl
+ * @date 2021-10-25
+ */
+@Api(value = "题目模块控制器", tags = {"题目模块管理"})
+@RequiredArgsConstructor(onConstructor_ = @Autowired)
+@RestController
+@RequestMapping("/bank/module")
+public class QuestionModuleController extends BaseController {
+
+    private final IQuestionModuleService iQuestionModuleService;
+
+    private final IQuestionBusinessService iQuestionBusinessService;
+
+    private final IQuestionModuleChapterService iQuestionModuleChapterService;
+
+    /**
+     * 查询题目模块列表
+     */
+    @ApiOperation("查询题目模块列表")
+    @PreAuthorize("@ss.hasPermi('system:module:list')")
+    @GetMapping("/list")
+    public TableDataInfo<QuestionModuleVo> list(QuestionModuleQueryBo bo) {
+        startPage();
+        List<QuestionModuleVo> list = iQuestionModuleService.getList(bo);
+        return getDataTable(list);
+    }
+
+    /**
+     * 模块卷批量删除
+     */
+    @ApiOperation("模块卷批量删除")
+    @PostMapping("/batch/del")
+    public AjaxResult<Void> batchDelModuleExam(@RequestBody QuestionBatchDelBo bo) {
+        return toAjax(iQuestionModuleService.batchDelModuleExam(bo) ? 1 : 0);
+    }
+
+    /**
+     * 导出题目模块列表
+     */
+    /*@ApiOperation("导出题目模块列表")
+    @PreAuthorize("@ss.hasPermi('system:module:export')")
+    @Log(title = "题目模块", businessType = BusinessType.EXPORT)
+    @GetMapping("/export")
+    public AjaxResult<QuestionModuleVo> export(QuestionModuleQueryBo bo) {
+        List<QuestionModuleVo> list = iQuestionModuleService.queryList(bo);
+        ExcelUtil<QuestionModuleVo> util = new ExcelUtil<QuestionModuleVo>(QuestionModuleVo.class);
+        return util.exportExcel(list, "题目模块");
+    }*/
+
+    /**
+     * 获取题目模块详细信息
+     */
+    @ApiOperation("获取题目模块详细信息")
+    @PreAuthorize("@ss.hasPermi('system:module:query')")
+    @GetMapping("/{questionModuleId}")
+    public AjaxResult<QuestionModuleVo> getInfo(@PathVariable("questionModuleId" ) Long questionModuleId) {
+        return AjaxResult.success(iQuestionModuleService.queryById(questionModuleId));
+    }
+
+    /**
+     * 新增题目模块
+     */
+    @ApiOperation("新增题目模块")
+    @PreAuthorize("@ss.hasPermi('system:module:add')")
+    @Log(title = "题目模块", businessType = BusinessType.INSERT)
+    @PostMapping()
+    public AjaxResult<Void> add(@RequestBody QuestionModuleAddBo bo) {
+        return toAjax(iQuestionModuleService.insertByAddBo(bo) ? 1 : 0);
+    }
+
+    /**
+     * 修改题目模块
+     */
+    @ApiOperation("修改题目模块")
+    @PreAuthorize("@ss.hasPermi('system:module:edit')")
+    @Log(title = "题目模块", businessType = BusinessType.UPDATE)
+    @PostMapping("/edit")
+    public AjaxResult<Void> edit(@RequestBody QuestionModuleEditBo bo) {
+        return toAjax(iQuestionModuleService.updateByEditBo(bo) ? 1 : 0);
+    }
+
+    /**
+     * 删除题目模块
+     */
+   /* @ApiOperation("删除题目模块")
+    @PreAuthorize("@ss.hasPermi('system:module:remove')")
+    @Log(title = "题目模块" , businessType = BusinessType.DELETE)
+    @DeleteMapping("/{questionModuleIds}")
+    public AjaxResult<Void> remove(@PathVariable Long[] questionModuleIds) {
+        return toAjax(iQuestionModuleService.deleteWithValidByIds(Arrays.asList(questionModuleIds), true) ? 1 : 0);
+    }*/
+
+    /**
+     * 查询题目业务层次关系列表
+     */
+    @ApiOperation("查询业务层次关系列表")
+    @PreAuthorize("@ss.hasPermi('system:business:list')")
+    @GetMapping("/business/list")
+    public TableDataInfo<QuestionBusiness> businessList(QuestionBusinessQueryBo bo) {
+        startPage();
+        bo.setType(QuestionBusiness.TYPE_QUESTION_MODULE);
+        List<QuestionBusiness> list = iQuestionBusinessService.getListById(bo);
+        return getDataTable(list);
+    }
+
+    /**
+     * 查询关联章卷列表
+     */
+    @ApiOperation("查询关联章卷列表")
+    @PreAuthorize("@ss.hasPermi('system:business:list')")
+    @GetMapping("/chapter/list")
+    public AjaxResult<List<QuestionChapterVo>> chapterList(QuestionModuleChapterQueryBo bo) {
+        List<QuestionChapterVo> list = iQuestionModuleChapterService.getList(bo);
+        return AjaxResult.success(list);
+    }
+}

+ 112 - 0
zhongzheng-admin/src/main/java/com/zhongzheng/controller/base/ActivityAdvertisingController.java

@@ -0,0 +1,112 @@
+package com.zhongzheng.controller.base;
+
+import java.util.List;
+import java.util.Arrays;
+
+import com.zhongzheng.modules.base.bo.ActivityAdvertisingAddBo;
+import com.zhongzheng.modules.base.bo.ActivityAdvertisingEditBo;
+import com.zhongzheng.modules.base.bo.ActivityAdvertisingQueryBo;
+import com.zhongzheng.modules.base.service.IActivityAdvertisingService;
+import com.zhongzheng.modules.base.vo.ActivityAdvertisingVo;
+import lombok.RequiredArgsConstructor;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.PutMapping;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import com.zhongzheng.common.annotation.Log;
+import com.zhongzheng.common.core.controller.BaseController;
+import com.zhongzheng.common.core.domain.AjaxResult;
+import com.zhongzheng.common.enums.BusinessType;
+import com.zhongzheng.common.utils.poi.ExcelUtil;
+import com.zhongzheng.common.core.page.TableDataInfo;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+
+/**
+ * 广告发布储存Controller
+ *
+ * @author hjl
+ * @date 2022-01-13
+ */
+@Api(value = "广告发布储存控制器", tags = {"广告发布储存管理"})
+@RequiredArgsConstructor(onConstructor_ = @Autowired)
+@RestController
+@RequestMapping("/base/advertising")
+public class ActivityAdvertisingController extends BaseController {
+
+    private final IActivityAdvertisingService iActivityAdvertisingService;
+
+    /**
+     * 查询广告发布储存列表
+     */
+    @ApiOperation("查询广告发布储存列表")
+    @PreAuthorize("@ss.hasPermi('system:advertising:list')")
+    @GetMapping("/list")
+    public TableDataInfo<ActivityAdvertisingVo> list(ActivityAdvertisingQueryBo bo) {
+        startPage();
+        List<ActivityAdvertisingVo> list = iActivityAdvertisingService.queryList(bo);
+        return getDataTable(list);
+    }
+
+    /**
+     * 导出广告发布储存列表
+     */
+   /* @ApiOperation("导出广告发布储存列表")
+    @PreAuthorize("@ss.hasPermi('system:advertising:export')")
+    @Log(title = "广告发布储存", businessType = BusinessType.EXPORT)
+    @GetMapping("/export")
+    public AjaxResult<ActivityAdvertisingVo> export(ActivityAdvertisingQueryBo bo) {
+        List<ActivityAdvertisingVo> list = iActivityAdvertisingService.queryList(bo);
+        ExcelUtil<ActivityAdvertisingVo> util = new ExcelUtil<ActivityAdvertisingVo>(ActivityAdvertisingVo.class);
+        return util.exportExcel(list, "广告发布储存");
+    }*/
+
+    /**
+     * 获取广告发布储存详细信息
+     */
+    @ApiOperation("获取广告发布储存详细信息")
+    @PreAuthorize("@ss.hasPermi('system:advertising:query')")
+    @GetMapping("/{id}")
+    public AjaxResult<ActivityAdvertisingVo> getInfo(@PathVariable("id" ) Long id) {
+        return AjaxResult.success(iActivityAdvertisingService.queryById(id));
+    }
+
+    /**
+     * 新增广告发布储存
+     */
+    @ApiOperation("新增广告发布储存")
+    @PreAuthorize("@ss.hasPermi('system:advertising:add')")
+    @Log(title = "广告发布储存", businessType = BusinessType.INSERT)
+    @PostMapping()
+    public AjaxResult<Void> add(@RequestBody ActivityAdvertisingAddBo bo) {
+        return toAjax(iActivityAdvertisingService.insertByAddBo(bo) ? 1 : 0);
+    }
+
+    /**
+     * 修改广告发布储存
+     */
+    @ApiOperation("修改广告发布储存")
+    @PreAuthorize("@ss.hasPermi('system:advertising:edit')")
+    @Log(title = "广告发布储存", businessType = BusinessType.UPDATE)
+    @PostMapping("/edit")
+    public AjaxResult<Void> edit(@RequestBody ActivityAdvertisingEditBo bo) {
+        return toAjax(iActivityAdvertisingService.updateByEditBo(bo) ? 1 : 0);
+    }
+
+    /**
+     * 删除广告发布储存
+     */
+   /* @ApiOperation("删除广告发布储存")
+    @PreAuthorize("@ss.hasPermi('system:advertising:remove')")
+    @Log(title = "广告发布储存" , businessType = BusinessType.DELETE)
+    @DeleteMapping("/{ids}")
+    public AjaxResult<Void> remove(@PathVariable Long[] ids) {
+        return toAjax(iActivityAdvertisingService.deleteWithValidByIds(Arrays.asList(ids), true) ? 1 : 0);
+    }*/
+}

+ 112 - 0
zhongzheng-admin/src/main/java/com/zhongzheng/controller/base/ActivityAdvertisingLocationController.java

@@ -0,0 +1,112 @@
+package com.zhongzheng.controller.base;
+
+import java.util.List;
+import java.util.Arrays;
+
+import com.zhongzheng.modules.base.bo.ActivityAdvertisingLocationAddBo;
+import com.zhongzheng.modules.base.bo.ActivityAdvertisingLocationEditBo;
+import com.zhongzheng.modules.base.bo.ActivityAdvertisingLocationQueryBo;
+import com.zhongzheng.modules.base.service.IActivityAdvertisingLocationService;
+import com.zhongzheng.modules.base.vo.ActivityAdvertisingLocationVo;
+import lombok.RequiredArgsConstructor;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.PutMapping;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import com.zhongzheng.common.annotation.Log;
+import com.zhongzheng.common.core.controller.BaseController;
+import com.zhongzheng.common.core.domain.AjaxResult;
+import com.zhongzheng.common.enums.BusinessType;
+import com.zhongzheng.common.utils.poi.ExcelUtil;
+import com.zhongzheng.common.core.page.TableDataInfo;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+
+/**
+ * 广告位Controller
+ *
+ * @author hjl
+ * @date 2022-01-13
+ */
+@Api(value = "广告位控制器", tags = {"广告位管理"})
+@RequiredArgsConstructor(onConstructor_ = @Autowired)
+@RestController
+@RequestMapping("/base/adv/location")
+public class ActivityAdvertisingLocationController extends BaseController {
+
+    private final IActivityAdvertisingLocationService iActivityAdvertisingLocationService;
+
+    /**
+     * 查询广告位列表
+     */
+    @ApiOperation("查询广告位列表")
+    @PreAuthorize("@ss.hasPermi('system:location:list')")
+    @GetMapping("/list")
+    public TableDataInfo<ActivityAdvertisingLocationVo> list(ActivityAdvertisingLocationQueryBo bo) {
+        startPage();
+        List<ActivityAdvertisingLocationVo> list = iActivityAdvertisingLocationService.queryList(bo);
+        return getDataTable(list);
+    }
+
+    /**
+     * 导出广告位列表
+     */
+    /*@ApiOperation("导出广告位列表")
+    @PreAuthorize("@ss.hasPermi('system:location:export')")
+    @Log(title = "广告位", businessType = BusinessType.EXPORT)
+    @GetMapping("/export")
+    public AjaxResult<ActivityAdvertisingLocationVo> export(ActivityAdvertisingLocationQueryBo bo) {
+        List<ActivityAdvertisingLocationVo> list = iActivityAdvertisingLocationService.queryList(bo);
+        ExcelUtil<ActivityAdvertisingLocationVo> util = new ExcelUtil<ActivityAdvertisingLocationVo>(ActivityAdvertisingLocationVo.class);
+        return util.exportExcel(list, "广告位");
+    }*/
+
+    /**
+     * 获取广告位详细信息
+     */
+    @ApiOperation("获取广告位详细信息")
+    @PreAuthorize("@ss.hasPermi('system:location:query')")
+    @GetMapping("/{locationId}")
+    public AjaxResult<ActivityAdvertisingLocationVo> getInfo(@PathVariable("locationId" ) Long locationId) {
+        return AjaxResult.success(iActivityAdvertisingLocationService.queryById(locationId));
+    }
+
+    /**
+     * 新增广告位
+     */
+    @ApiOperation("新增广告位")
+    @PreAuthorize("@ss.hasPermi('system:location:add')")
+    @Log(title = "广告位", businessType = BusinessType.INSERT)
+    @PostMapping()
+    public AjaxResult<Void> add(@RequestBody ActivityAdvertisingLocationAddBo bo) {
+        return toAjax(iActivityAdvertisingLocationService.insertByAddBo(bo) ? 1 : 0);
+    }
+
+    /**
+     * 修改广告位
+     */
+    @ApiOperation("修改广告位")
+    @PreAuthorize("@ss.hasPermi('system:location:edit')")
+    @Log(title = "广告位", businessType = BusinessType.UPDATE)
+    @PostMapping("/edit")
+    public AjaxResult<Void> edit(@RequestBody ActivityAdvertisingLocationEditBo bo) {
+        return toAjax(iActivityAdvertisingLocationService.updateByEditBo(bo) ? 1 : 0);
+    }
+
+    /**
+     * 删除广告位
+     */
+   /* @ApiOperation("删除广告位")
+    @PreAuthorize("@ss.hasPermi('system:location:remove')")
+    @Log(title = "广告位" , businessType = BusinessType.DELETE)
+    @DeleteMapping("/{locationIds}")
+    public AjaxResult<Void> remove(@PathVariable Long[] locationIds) {
+        return toAjax(iActivityAdvertisingLocationService.deleteWithValidByIds(Arrays.asList(locationIds), true) ? 1 : 0);
+    }*/
+}

+ 125 - 0
zhongzheng-admin/src/main/java/com/zhongzheng/controller/base/ApplyAreasController.java

@@ -0,0 +1,125 @@
+package com.zhongzheng.controller.base;
+
+import java.util.List;
+import java.util.Arrays;
+
+import com.zhongzheng.modules.base.bo.ApplyAreasAddBo;
+import com.zhongzheng.modules.base.bo.ApplyAreasEditBo;
+import com.zhongzheng.modules.base.bo.ApplyAreasQueryBo;
+import com.zhongzheng.modules.base.domain.ApplyAreas;
+import com.zhongzheng.modules.base.service.IApplyAreasService;
+import com.zhongzheng.modules.base.vo.ApplyAreasVo;
+import lombok.RequiredArgsConstructor;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.PutMapping;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import com.zhongzheng.common.annotation.Log;
+import com.zhongzheng.common.core.controller.BaseController;
+import com.zhongzheng.common.core.domain.AjaxResult;
+import com.zhongzheng.common.enums.BusinessType;
+import com.zhongzheng.common.utils.poi.ExcelUtil;
+import com.zhongzheng.common.core.page.TableDataInfo;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+
+/**
+ * 报考地区Controller
+ *
+ * @author hjl
+ * @date 2021-10-08
+ */
+@Api(value = "报考省市控制器", tags = {"报考省市管理"})
+@RequiredArgsConstructor(onConstructor_ = @Autowired)
+@RestController
+@RequestMapping("/apply/areas")
+public class ApplyAreasController extends BaseController {
+
+    private final IApplyAreasService iApplyAreasService;
+
+    /**
+     * 查询报考省地区列表
+     */
+    @ApiOperation("查询报考省地区列表")
+    @PreAuthorize("@ss.hasPermi('system:areas:list')")
+    @GetMapping("/list")
+    public TableDataInfo<ApplyAreasVo> list(ApplyAreasQueryBo bo) {
+        startPage();
+        List<ApplyAreasVo> list = iApplyAreasService.queryList(bo);
+        return getDataTable(list);
+    }
+
+    /**
+     * 查询报考市地区列表
+     */
+    @ApiOperation("查询报考市地区列表")
+    @PreAuthorize("@ss.hasPermi('system:areas:city_list')")
+    @GetMapping("/cityList")
+    public TableDataInfo<ApplyAreas> cityList(ApplyAreasQueryBo bo) {
+        startPage();
+        List<ApplyAreas> list = iApplyAreasService.selectCityList(bo);
+        return getDataTable(list);
+    }
+
+    /**
+     * 导出报考地区列表
+     */
+   /* @ApiOperation("导出报考地区列表")
+    @PreAuthorize("@ss.hasPermi('system:areas:export')")
+    @Log(title = "报考地区", businessType = BusinessType.EXPORT)
+    @GetMapping("/export")
+    public AjaxResult<ApplyAreasVo> export(ApplyAreasQueryBo bo) {
+        List<ApplyAreasVo> list = iApplyAreasService.queryList(bo);
+        ExcelUtil<ApplyAreasVo> util = new ExcelUtil<ApplyAreasVo>(ApplyAreasVo.class);
+        return util.exportExcel(list, "报考地区");
+    }*/
+
+    /**
+     * 获取报考地区详细信息
+     */
+    @ApiOperation("获取报考地区详细信息")
+    @PreAuthorize("@ss.hasPermi('system:areas:query')")
+    @GetMapping("/{areaId}")
+    public AjaxResult<ApplyAreasVo> getInfo(@PathVariable("areaId" ) Long areaId) {
+        return AjaxResult.success(iApplyAreasService.queryById(areaId));
+    }
+
+    /**
+     * 新增报考地区
+     */
+    @ApiOperation("新增报考地区")
+    @PreAuthorize("@ss.hasPermi('system:areas:add')")
+    @Log(title = "报考地区", businessType = BusinessType.INSERT)
+    @PostMapping()
+    public AjaxResult<Void> add(@RequestBody ApplyAreasAddBo bo) {
+        return toAjax(iApplyAreasService.insertByAddBo(bo) ? 1 : 0);
+    }
+
+    /**
+     * 修改报考地区
+     */
+    @ApiOperation("修改报考地区")
+    @PreAuthorize("@ss.hasPermi('system:areas:edit')")
+    @Log(title = "报考地区", businessType = BusinessType.UPDATE)
+    @PostMapping("/edit")
+    public AjaxResult<Void> edit(@RequestBody ApplyAreasEditBo bo) {
+        return toAjax(iApplyAreasService.updateByEditBo(bo) ? 1 : 0);
+    }
+
+    /**
+     * 删除报考地区
+     */
+   /* @ApiOperation("删除报考地区")
+    @PreAuthorize("@ss.hasPermi('system:areas:remove')")
+    @Log(title = "报考地区" , businessType = BusinessType.DELETE)
+    @DeleteMapping("/{areaIds}")
+    public AjaxResult<Void> remove(@PathVariable Long[] areaIds) {
+        return toAjax(iApplyAreasService.deleteWithValidByIds(Arrays.asList(areaIds), true) ? 1 : 0);
+    }*/
+}

+ 91 - 0
zhongzheng-admin/src/main/java/com/zhongzheng/controller/base/BaseFilterController.java

@@ -0,0 +1,91 @@
+package com.zhongzheng.controller.base;
+
+import java.util.List;
+import java.util.Arrays;
+
+import com.zhongzheng.modules.base.bo.BaseFilterAddBo;
+import com.zhongzheng.modules.base.bo.BaseFilterEditBo;
+import com.zhongzheng.modules.base.bo.BaseFilterQueryBo;
+import com.zhongzheng.modules.base.service.IBaseFilterService;
+import com.zhongzheng.modules.base.vo.BaseFilterVo;
+import lombok.RequiredArgsConstructor;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.PutMapping;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import com.zhongzheng.common.annotation.Log;
+import com.zhongzheng.common.core.controller.BaseController;
+import com.zhongzheng.common.core.domain.AjaxResult;
+import com.zhongzheng.common.enums.BusinessType;
+import com.zhongzheng.common.utils.poi.ExcelUtil;
+import com.zhongzheng.common.core.page.TableDataInfo;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+
+/**
+ * 业务层次过滤器Controller
+ *
+ * @author hjl
+ * @date 2022-06-22
+ */
+@Api(value = "业务层次过滤器控制器", tags = {"业务层次过滤器管理"})
+@RequiredArgsConstructor(onConstructor_ = @Autowired)
+@RestController
+@RequestMapping("/base/filter")
+public class BaseFilterController extends BaseController {
+
+    private final IBaseFilterService iBaseFilterService;
+
+    /**
+     * 查询业务层次过滤器列表
+     */
+    @ApiOperation("查询业务层次过滤器列表")
+    @PreAuthorize("@ss.hasPermi('system:filter:list')")
+    @GetMapping("/list")
+    public TableDataInfo<BaseFilterVo> list(BaseFilterQueryBo bo) {
+        startPage();
+        List<BaseFilterVo> list = iBaseFilterService.queryList(bo);
+        return getDataTable(list);
+    }
+
+
+
+    /**
+     * 获取业务层次过滤器详细信息
+     */
+    @ApiOperation("获取业务层次过滤器详细信息")
+    @PreAuthorize("@ss.hasPermi('system:filter:query')")
+    @GetMapping("/{id}")
+    public AjaxResult<BaseFilterVo> getInfo(@PathVariable("id" ) Long id) {
+        return AjaxResult.success(iBaseFilterService.queryById(id));
+    }
+
+    /**
+     * 新增业务层次过滤器
+     */
+    @ApiOperation("新增业务层次过滤器")
+    @PreAuthorize("@ss.hasPermi('system:filter:add')")
+    @Log(title = "业务层次过滤器", businessType = BusinessType.INSERT)
+    @PostMapping()
+    public AjaxResult<Void> add(@RequestBody List<BaseFilterAddBo> bo) {
+        return toAjax(iBaseFilterService.insertListByAddBo(bo) ? 1 : 0);
+    }
+
+    /**
+     * 修改业务层次过滤器
+     */
+   /* @ApiOperation("修改业务层次过滤器")
+    @PreAuthorize("@ss.hasPermi('system:filter:edit')")
+    @Log(title = "业务层次过滤器", businessType = BusinessType.UPDATE)
+    @PutMapping()
+    public AjaxResult<Void> edit(@RequestBody BaseFilterEditBo bo) {
+        return toAjax(iBaseFilterService.updateByEditBo(bo) ? 1 : 0);
+    }*/
+
+}

+ 90 - 0
zhongzheng-admin/src/main/java/com/zhongzheng/controller/base/CertificateCommonController.java

@@ -0,0 +1,90 @@
+package com.zhongzheng.controller.base;
+
+import java.util.List;
+import java.util.Arrays;
+
+import com.zhongzheng.modules.base.bo.CertificateCommonAddBo;
+import com.zhongzheng.modules.base.bo.CertificateCommonEditBo;
+import com.zhongzheng.modules.base.bo.CertificateCommonQueryBo;
+import com.zhongzheng.modules.base.service.ICertificateCommonService;
+import com.zhongzheng.modules.base.vo.CertificateCommonVo;
+import lombok.RequiredArgsConstructor;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.PutMapping;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import com.zhongzheng.common.annotation.Log;
+import com.zhongzheng.common.core.controller.BaseController;
+import com.zhongzheng.common.core.domain.AjaxResult;
+import com.zhongzheng.common.enums.BusinessType;
+import com.zhongzheng.common.utils.poi.ExcelUtil;
+import com.zhongzheng.common.core.page.TableDataInfo;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+
+/**
+ * 证书Controller
+ *
+ * @author hjl
+ * @date 2022-06-07
+ */
+@Api(value = "证书控制器", tags = {"证书管理"})
+@RequiredArgsConstructor(onConstructor_ = @Autowired)
+@RestController
+@RequestMapping("/base/certificate/common")
+public class CertificateCommonController extends BaseController {
+
+    private final ICertificateCommonService iCertificateCommonService;
+
+    /**
+     * 查询证书列表
+     */
+    @ApiOperation("查询证书列表")
+    @PreAuthorize("@ss.hasPermi('system:common:list')")
+    @GetMapping("/list")
+    public TableDataInfo<CertificateCommonVo> list(CertificateCommonQueryBo bo) {
+        startPage();
+        List<CertificateCommonVo> list = iCertificateCommonService.getList(bo);
+        return getDataTable(list);
+    }
+
+    /**
+     * 获取证书详细信息
+     */
+    @ApiOperation("获取证书详细信息")
+    @PreAuthorize("@ss.hasPermi('system:common:query')")
+    @GetMapping("/{id}")
+    public AjaxResult<CertificateCommonVo> getInfo(@PathVariable("id" ) Long id) {
+        return AjaxResult.success(iCertificateCommonService.queryById(id));
+    }
+
+    /**
+     * 新增证书
+     */
+    @ApiOperation("新增证书")
+    @PreAuthorize("@ss.hasPermi('system:common:add')")
+    @Log(title = "证书", businessType = BusinessType.INSERT)
+    @PostMapping()
+    public AjaxResult<Void> add(@RequestBody CertificateCommonAddBo bo) {
+        return toAjax(iCertificateCommonService.insertByAddBo(bo) ? 1 : 0);
+    }
+
+    /**
+     * 修改证书
+     */
+    @ApiOperation("修改证书")
+    @PreAuthorize("@ss.hasPermi('system:common:edit')")
+    @Log(title = "证书", businessType = BusinessType.UPDATE)
+    @PostMapping("/edit")
+    public AjaxResult<Void> edit(@RequestBody CertificateCommonEditBo bo) {
+        return toAjax(iCertificateCommonService.updateByEditBo(bo) ? 1 : 0);
+    }
+
+
+}

+ 112 - 0
zhongzheng-admin/src/main/java/com/zhongzheng/controller/base/CertificateController.java

@@ -0,0 +1,112 @@
+package com.zhongzheng.controller.base;
+
+import java.util.List;
+import java.util.Arrays;
+
+import com.zhongzheng.modules.base.bo.CertificateAddBo;
+import com.zhongzheng.modules.base.bo.CertificateEditBo;
+import com.zhongzheng.modules.base.bo.CertificateQueryBo;
+import com.zhongzheng.modules.base.service.ICertificateService;
+import com.zhongzheng.modules.base.vo.CertificateVo;
+import lombok.RequiredArgsConstructor;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.PutMapping;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import com.zhongzheng.common.annotation.Log;
+import com.zhongzheng.common.core.controller.BaseController;
+import com.zhongzheng.common.core.domain.AjaxResult;
+import com.zhongzheng.common.enums.BusinessType;
+import com.zhongzheng.common.utils.poi.ExcelUtil;
+import com.zhongzheng.common.core.page.TableDataInfo;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+
+/**
+ * 证书Controller
+ *
+ * @author ruoyi
+ * @date 2021-10-08
+ */
+@Api(value = "证书类型控制器", tags = {"证书类型管理"})
+@RequiredArgsConstructor(onConstructor_ = @Autowired)
+@RestController
+@RequestMapping("/base/certificate")
+public class CertificateController extends BaseController {
+
+    private final ICertificateService iCertificateService;
+
+    /**
+     * 查询证书列表
+     */
+    @ApiOperation("查询证书类型列表")
+    @PreAuthorize("@ss.hasPermi('system:certificate:list')")
+    @GetMapping("/list")
+    public TableDataInfo<CertificateVo> list(CertificateQueryBo bo) {
+        startPage();
+        List<CertificateVo> list = iCertificateService.queryList(bo);
+        return getDataTable(list);
+    }
+
+    /**
+     * 导出证书列表
+     */
+   /* @ApiOperation("导出证书列表")
+    @PreAuthorize("@ss.hasPermi('system:certificate:export')")
+    @Log(title = "证书", businessType = BusinessType.EXPORT)
+    @GetMapping("/export")
+    public AjaxResult<CertificateVo> export(CertificateQueryBo bo) {
+        List<CertificateVo> list = iCertificateService.queryList(bo);
+        ExcelUtil<CertificateVo> util = new ExcelUtil<CertificateVo>(CertificateVo.class);
+        return util.exportExcel(list, "证书");
+    }*/
+
+    /**
+     * 获取证书详细信息
+     */
+    @ApiOperation("获取证书类型详细信息")
+    @PreAuthorize("@ss.hasPermi('system:certificate:query')")
+    @GetMapping("/{id}")
+    public AjaxResult<CertificateVo> getInfo(@PathVariable("id" ) Long id) {
+        return AjaxResult.success(iCertificateService.queryById(id));
+    }
+
+    /**
+     * 新增证书
+     */
+    @ApiOperation("新增证书类型")
+    @PreAuthorize("@ss.hasPermi('system:certificate:add')")
+    @Log(title = "证书", businessType = BusinessType.INSERT)
+    @PostMapping()
+    public AjaxResult<Void> add(@RequestBody CertificateAddBo bo) {
+        return toAjax(iCertificateService.insertByAddBo(bo) ? 1 : 0);
+    }
+
+    /**
+     * 修改证书
+     */
+    @ApiOperation("修改证书类型")
+    @PreAuthorize("@ss.hasPermi('system:certificate:edit')")
+    @Log(title = "证书", businessType = BusinessType.UPDATE)
+    @PostMapping("/edit")
+    public AjaxResult<Void> edit(@RequestBody CertificateEditBo bo) {
+        return toAjax(iCertificateService.updateByEditBo(bo) ? 1 : 0);
+    }
+
+    /**
+     * 删除证书
+     */
+   /* @ApiOperation("删除证书")
+    @PreAuthorize("@ss.hasPermi('system:certificate:remove')")
+    @Log(title = "证书" , businessType = BusinessType.DELETE)
+    @DeleteMapping("/{ids}")
+    public AjaxResult<Void> remove(@PathVariable Long[] ids) {
+        return toAjax(iCertificateService.deleteWithValidByIds(Arrays.asList(ids), true) ? 1 : 0);
+    }*/
+}

+ 113 - 0
zhongzheng-admin/src/main/java/com/zhongzheng/controller/base/CertificateTpController.java

@@ -0,0 +1,113 @@
+package com.zhongzheng.controller.base;
+
+import java.util.List;
+import java.util.Arrays;
+
+import com.zhongzheng.modules.base.bo.CertificateTpAddBo;
+import com.zhongzheng.modules.base.bo.CertificateTpEditBo;
+import com.zhongzheng.modules.base.bo.CertificateTpQueryBo;
+import com.zhongzheng.modules.base.service.ICertificateTpService;
+import com.zhongzheng.modules.base.vo.CertificateTpVo;
+import com.zhongzheng.modules.grade.bo.ClassGradeUserQueryBo;
+import lombok.RequiredArgsConstructor;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.PutMapping;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import com.zhongzheng.common.annotation.Log;
+import com.zhongzheng.common.core.controller.BaseController;
+import com.zhongzheng.common.core.domain.AjaxResult;
+import com.zhongzheng.common.enums.BusinessType;
+import com.zhongzheng.common.utils.poi.ExcelUtil;
+import com.zhongzheng.common.core.page.TableDataInfo;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+
+/**
+ * 证书模板Controller
+ *
+ * @author hjl
+ * @date 2022-02-16
+ */
+@Api(value = "证书模板控制器", tags = {"证书模板管理"})
+@RequiredArgsConstructor(onConstructor_ = @Autowired)
+@RestController
+@RequestMapping("/certificate/tp")
+public class CertificateTpController extends BaseController {
+
+    private final ICertificateTpService iCertificateTpService;
+
+    /**
+     * 查询证书模板列表
+     */
+    @ApiOperation("查询证书模板列表")
+    @PreAuthorize("@ss.hasPermi('system:tp:list')")
+    @GetMapping("/list")
+    public TableDataInfo<CertificateTpVo> list(CertificateTpQueryBo bo) {
+        startPage();
+        List<CertificateTpVo> list = iCertificateTpService.selectListByBo(bo);
+        return getDataTable(list);
+    }
+
+    /**
+     * 导出证书模板列表
+     */
+    /*@ApiOperation("导出证书模板列表")
+    @PreAuthorize("@ss.hasPermi('system:tp:export')")
+    @Log(title = "证书模板", businessType = BusinessType.EXPORT)
+    @GetMapping("/export")
+    public AjaxResult<CertificateTpVo> export(CertificateTpQueryBo bo) {
+        List<CertificateTpVo> list = iCertificateTpService.queryList(bo);
+        ExcelUtil<CertificateTpVo> util = new ExcelUtil<CertificateTpVo>(CertificateTpVo.class);
+        return util.exportExcel(list, "证书模板");
+    }*/
+
+    /**
+     * 获取证书模板详细信息
+     */
+    @ApiOperation("获取证书模板详细信息")
+    @PreAuthorize("@ss.hasPermi('system:tp:query')")
+    @GetMapping("/{tpId}")
+    public AjaxResult<CertificateTpVo> getInfo(@PathVariable("tpId" ) Long tpId) {
+        return AjaxResult.success(iCertificateTpService.queryById(tpId));
+    }
+
+    /**
+     * 新增证书模板
+     */
+    @ApiOperation("新增证书模板")
+    @PreAuthorize("@ss.hasPermi('system:tp:add')")
+    @Log(title = "证书模板", businessType = BusinessType.INSERT)
+    @PostMapping()
+    public AjaxResult<Void> add(@RequestBody CertificateTpAddBo bo) {
+        return toAjax(iCertificateTpService.insertByAddBo(bo) ? 1 : 0);
+    }
+
+    /**
+     * 修改证书模板
+     */
+    @ApiOperation("修改证书模板")
+    @PreAuthorize("@ss.hasPermi('system:tp:edit')")
+    @Log(title = "证书模板", businessType = BusinessType.UPDATE)
+    @PostMapping("/edit")
+    public AjaxResult<Void> edit(@RequestBody CertificateTpEditBo bo) {
+        return toAjax(iCertificateTpService.updateByEditBo(bo) ? 1 : 0);
+    }
+
+    /**
+     * 删除证书模板
+     */
+    @ApiOperation("生成证书图片")
+    @PreAuthorize("@ss.hasPermi('system:tp:remove')")
+    @Log(title = "证书模板" , businessType = BusinessType.DELETE)
+    @GetMapping("/makePhoto")
+    public AjaxResult<Void> makePhoto(ClassGradeUserQueryBo bo) {
+        return AjaxResult.success(iCertificateTpService.makeCertificatePhoto(bo));
+    }
+}

+ 82 - 0
zhongzheng-admin/src/main/java/com/zhongzheng/controller/base/ConsoleController.java

@@ -0,0 +1,82 @@
+package com.zhongzheng.controller.base;
+
+import com.zhongzheng.common.core.controller.BaseController;
+import com.zhongzheng.common.core.domain.AjaxResult;
+import com.zhongzheng.modules.base.bo.ConsoleQueryBo;
+import com.zhongzheng.modules.base.domain.ApplyAreas;
+import com.zhongzheng.modules.base.service.IConsoleService;
+import com.zhongzheng.modules.user.service.IUserExamRecordService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.RequiredArgsConstructor;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 控制台Controller
+ *
+ * @author hjl
+ * @date 2022-05-05
+ */
+@Api(value = "控制台控制器", tags = {"控制台控制器"})
+@RequiredArgsConstructor(onConstructor_ = @Autowired)
+@RestController
+@RequestMapping("/base/console")
+public class ConsoleController extends BaseController {
+
+    private final IConsoleService iConsoleService;
+
+    @ApiOperation("控制台学员数据")
+    @GetMapping("/studentData")
+    public AjaxResult<Map<String,Object>> studentData(ConsoleQueryBo bo) {
+        Map<String,Object> numMap = iConsoleService.getStudentData(bo);
+        return AjaxResult.success(numMap);
+    }
+
+    @ApiOperation("控制台订单数据")
+    @GetMapping("/orderData")
+    public AjaxResult<Map<String,Object>> orderData(ConsoleQueryBo bo) {
+        Map<String,Object> numMap = iConsoleService.getOrderData(bo);
+        return AjaxResult.success(numMap);
+    }
+
+    @ApiOperation("控制台班级数据")
+    @GetMapping("/gradeData")
+    public AjaxResult<Map<String,Object>> gradeData(ConsoleQueryBo bo) {
+        Map<String,Object> numMap = iConsoleService.getGradeData(bo);
+        return AjaxResult.success(numMap);
+    }
+
+    @ApiOperation("控制台学时数据")
+    @GetMapping("/periodData")
+    public AjaxResult<Map<String,Object>> periodData(ConsoleQueryBo bo) {
+        Map<String,Object> numMap = iConsoleService.getPeriodData(bo);
+        return AjaxResult.success(numMap);
+    }
+
+    @ApiOperation("控制台考试数据")
+    @GetMapping("/testData")
+    public AjaxResult<Map<String,Object>> testData(ConsoleQueryBo bo) {
+        Map<String,Object> numMap = iConsoleService.getTestData(bo);
+        return AjaxResult.success(numMap);
+    }
+
+    @ApiOperation("控制台模考数据")
+    @GetMapping("/mockData")
+    public AjaxResult<Map<String,Object>> mockData(ConsoleQueryBo bo) {
+        Map<String,Object> numMap = iConsoleService.getMockData(bo);
+        return AjaxResult.success(numMap);
+    }
+
+    @ApiOperation("控制台填写资料审核数据")
+    @GetMapping("/profileData")
+    public AjaxResult<Map<String,Object>> profileData(ConsoleQueryBo bo) {
+        Map<String,Object> numMap = iConsoleService.getProfileData(bo);
+        return AjaxResult.success(numMap);
+    }
+}

+ 56 - 0
zhongzheng-admin/src/main/java/com/zhongzheng/controller/base/GoodsFieldController.java

@@ -0,0 +1,56 @@
+package com.zhongzheng.controller.base;
+
+import java.util.List;
+import java.util.Arrays;
+
+import com.zhongzheng.modules.base.bo.GoodsFieldQueryBo;
+import com.zhongzheng.modules.base.service.IGoodsFieldService;
+import com.zhongzheng.modules.base.vo.GoodsFieldVo;
+import lombok.RequiredArgsConstructor;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.PutMapping;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import com.zhongzheng.common.annotation.Log;
+import com.zhongzheng.common.core.controller.BaseController;
+import com.zhongzheng.common.core.domain.AjaxResult;
+import com.zhongzheng.common.enums.BusinessType;
+import com.zhongzheng.common.utils.poi.ExcelUtil;
+import com.zhongzheng.common.core.page.TableDataInfo;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+
+/**
+ * 商品字段Controller
+ *
+ * @author hjl
+ * @date 2022-06-06
+ */
+@Api(value = "商品字段控制器", tags = {"商品字段管理"})
+@RequiredArgsConstructor(onConstructor_ = @Autowired)
+@RestController
+@RequestMapping("/base/goods/field")
+public class GoodsFieldController extends BaseController {
+
+    private final IGoodsFieldService iGoodsFieldService;
+
+    /**
+     * 查询商品字段列表
+     */
+    @ApiOperation("查询商品字段列表")
+    @PreAuthorize("@ss.hasPermi('system:field:list')")
+    @GetMapping("/list")
+    public TableDataInfo<GoodsFieldVo> list(GoodsFieldQueryBo bo) {
+        startPage();
+        bo.setStatus(1);
+        List<GoodsFieldVo> list = iGoodsFieldService.queryList(bo);
+        return getDataTable(list);
+    }
+
+}

+ 112 - 0
zhongzheng-admin/src/main/java/com/zhongzheng/controller/base/ProfileFieldController.java

@@ -0,0 +1,112 @@
+package com.zhongzheng.controller.base;
+
+import java.util.List;
+import java.util.Arrays;
+
+import com.zhongzheng.modules.base.bo.ProfileFieldAddBo;
+import com.zhongzheng.modules.base.bo.ProfileFieldEditBo;
+import com.zhongzheng.modules.base.bo.ProfileFieldQueryBo;
+import com.zhongzheng.modules.base.service.IProfileFieldService;
+import com.zhongzheng.modules.base.vo.ProfileFieldVo;
+import lombok.RequiredArgsConstructor;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.PutMapping;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import com.zhongzheng.common.annotation.Log;
+import com.zhongzheng.common.core.controller.BaseController;
+import com.zhongzheng.common.core.domain.AjaxResult;
+import com.zhongzheng.common.enums.BusinessType;
+import com.zhongzheng.common.utils.poi.ExcelUtil;
+import com.zhongzheng.common.core.page.TableDataInfo;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+
+/**
+ * 资料字段Controller
+ *
+ * @author hjl
+ * @date 2021-11-19
+ */
+@Api(value = "资料字段控制器", tags = {"资料字段管理"})
+@RequiredArgsConstructor(onConstructor_ = @Autowired)
+@RestController
+@RequestMapping("/base/profile/field")
+public class ProfileFieldController extends BaseController {
+
+    private final IProfileFieldService iProfileFieldService;
+
+    /**
+     * 查询资料字段列表
+     */
+    @ApiOperation("查询资料字段列表")
+    @PreAuthorize("@ss.hasPermi('system:field:list')")
+    @GetMapping("/list")
+    public TableDataInfo<ProfileFieldVo> list(ProfileFieldQueryBo bo) {
+        startPage();
+        List<ProfileFieldVo> list = iProfileFieldService.queryList(bo);
+        return getDataTable(list);
+    }
+
+    /**
+     * 导出资料字段列表
+     */
+  /*  @ApiOperation("导出资料字段列表")
+    @PreAuthorize("@ss.hasPermi('system:field:export')")
+    @Log(title = "资料字段", businessType = BusinessType.EXPORT)
+    @GetMapping("/export")
+    public AjaxResult<ProfileFieldVo> export(ProfileFieldQueryBo bo) {
+        List<ProfileFieldVo> list = iProfileFieldService.queryList(bo);
+        ExcelUtil<ProfileFieldVo> util = new ExcelUtil<ProfileFieldVo>(ProfileFieldVo.class);
+        return util.exportExcel(list, "资料字段");
+    }*/
+
+    /**
+     * 获取资料字段详细信息
+     */
+    @ApiOperation("获取资料字段详细信息")
+    @PreAuthorize("@ss.hasPermi('system:field:query')")
+    @GetMapping("/{fieldId}")
+    public AjaxResult<ProfileFieldVo> getInfo(@PathVariable("fieldId" ) Long fieldId) {
+        return AjaxResult.success(iProfileFieldService.queryById(fieldId));
+    }
+
+    /**
+     * 新增资料字段
+     */
+    /*@ApiOperation("新增资料字段")
+    @PreAuthorize("@ss.hasPermi('system:field:add')")
+    @Log(title = "资料字段", businessType = BusinessType.INSERT)
+    @PostMapping()
+    public AjaxResult<Void> add(@RequestBody ProfileFieldAddBo bo) {
+        return toAjax(iProfileFieldService.insertByAddBo(bo) ? 1 : 0);
+    }*/
+
+    /**
+     * 修改资料字段
+     */
+   /* @ApiOperation("修改资料字段")
+    @PreAuthorize("@ss.hasPermi('system:field:edit')")
+    @Log(title = "资料字段", businessType = BusinessType.UPDATE)
+    @PutMapping()
+    public AjaxResult<Void> edit(@RequestBody ProfileFieldEditBo bo) {
+        return toAjax(iProfileFieldService.updateByEditBo(bo) ? 1 : 0);
+    }*/
+
+    /**
+     * 删除资料字段
+     */
+    /*@ApiOperation("删除资料字段")
+    @PreAuthorize("@ss.hasPermi('system:field:remove')")
+    @Log(title = "资料字段" , businessType = BusinessType.DELETE)
+    @DeleteMapping("/{fieldIds}")
+    public AjaxResult<Void> remove(@PathVariable Long[] fieldIds) {
+        return toAjax(iProfileFieldService.deleteWithValidByIds(Arrays.asList(fieldIds), true) ? 1 : 0);
+    }*/
+}

+ 131 - 0
zhongzheng-admin/src/main/java/com/zhongzheng/controller/base/ProfileTpController.java

@@ -0,0 +1,131 @@
+package com.zhongzheng.controller.base;
+
+import java.util.List;
+import java.util.Arrays;
+import java.util.stream.Collectors;
+
+import com.zhongzheng.modules.base.bo.ProfileTpAddBo;
+import com.zhongzheng.modules.base.bo.ProfileTpEditBo;
+import com.zhongzheng.modules.base.bo.ProfileTpQueryBo;
+import com.zhongzheng.modules.base.service.IProfileTpService;
+import com.zhongzheng.modules.base.vo.ProfileTpVo;
+import lombok.RequiredArgsConstructor;
+import net.polyv.common.v1.util.StringUtils;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.PutMapping;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import com.zhongzheng.common.annotation.Log;
+import com.zhongzheng.common.core.controller.BaseController;
+import com.zhongzheng.common.core.domain.AjaxResult;
+import com.zhongzheng.common.enums.BusinessType;
+import com.zhongzheng.common.utils.poi.ExcelUtil;
+import com.zhongzheng.common.core.page.TableDataInfo;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+
+/**
+ * 资料模板Controller
+ *
+ * @author hjl
+ * @date 2021-11-19
+ */
+@Api(value = "资料模板控制器", tags = {"资料模板管理"})
+@RequiredArgsConstructor(onConstructor_ = @Autowired)
+@RestController
+@RequestMapping("/base/profile/tp")
+public class ProfileTpController extends BaseController {
+
+    private final IProfileTpService iProfileTpService;
+
+    /**
+     * 查询资料模板列表
+     */
+    @ApiOperation("查询资料模板列表")
+    @PreAuthorize("@ss.hasPermi('system:tp:list')")
+    @GetMapping("/list")
+    public TableDataInfo<ProfileTpVo> list(ProfileTpQueryBo bo) {
+        startPage();
+        if (StringUtils.isNotBlank(bo.getStatus())){
+            List<Integer> collect = Arrays.asList(bo.getStatus().split(",")).stream().map(x -> Integer.valueOf(x)).collect(Collectors.toList());
+            bo.setStatusList(collect);
+        }
+        List<ProfileTpVo> list = iProfileTpService.selectList(bo);
+        return getDataTable(list);
+    }
+
+    /**
+     * 获取所有使用商品ID
+     */
+    @ApiOperation("获取所有使用商品ID")
+    @PreAuthorize("@ss.hasPermi('system:tp:list')")
+    @GetMapping("/goods_list")
+    public AjaxResult<List<String>> goods_list(ProfileTpQueryBo bo) {
+        List<String> list = iProfileTpService.selectAllUseGoods(bo);
+        return AjaxResult.success(list);
+    }
+
+    /**
+     * 导出资料模板列表
+     */
+   /* @ApiOperation("导出资料模板列表")
+    @PreAuthorize("@ss.hasPermi('system:tp:export')")
+    @Log(title = "资料模板", businessType = BusinessType.EXPORT)
+    @GetMapping("/export")
+    public AjaxResult<ProfileTpVo> export(ProfileTpQueryBo bo) {
+        List<ProfileTpVo> list = iProfileTpService.queryList(bo);
+        ExcelUtil<ProfileTpVo> util = new ExcelUtil<ProfileTpVo>(ProfileTpVo.class);
+        return util.exportExcel(list, "资料模板");
+    }*/
+
+    /**
+     * 获取资料模板详细信息
+     */
+    @ApiOperation("获取资料模板详细信息")
+    @PreAuthorize("@ss.hasPermi('system:tp:query')")
+    @GetMapping("/{profileTpId}")
+    public AjaxResult<ProfileTpVo> getInfo(@PathVariable("profileTpId" ) Long profileTpId) {
+        return AjaxResult.success(iProfileTpService.queryById(profileTpId));
+    }
+
+    /**
+     * 新增资料模板
+     */
+    @ApiOperation("新增资料模板")
+    @PreAuthorize("@ss.hasPermi('system:tp:add')")
+    @Log(title = "资料模板", businessType = BusinessType.INSERT)
+    @PostMapping()
+    public AjaxResult<Void> add(@RequestBody ProfileTpAddBo bo) {
+        return toAjax(iProfileTpService.insertByAddBo(bo) ? 1 : 0);
+    }
+
+    /**
+     * 修改资料模板
+     */
+    @ApiOperation("修改资料模板")
+    @PreAuthorize("@ss.hasPermi('system:tp:edit')")
+    @Log(title = "资料模板", businessType = BusinessType.UPDATE)
+    @PostMapping("/edit")
+    public AjaxResult<Void> edit(@RequestBody ProfileTpEditBo bo) {
+        return toAjax(iProfileTpService.updateByEditBo(bo) ? 1 : 0);
+    }
+
+    /**
+     * 删除资料模板
+     */
+   /* @ApiOperation("删除资料模板")
+    @PreAuthorize("@ss.hasPermi('system:tp:remove')")
+    @Log(title = "资料模板" , businessType = BusinessType.DELETE)
+    @DeleteMapping("/{profileTpIds}")
+    public AjaxResult<Void> remove(@PathVariable Long[] profileTpIds) {
+        return toAjax(iProfileTpService.deleteWithValidByIds(Arrays.asList(profileTpIds), true) ? 1 : 0);
+    }*/
+
+
+}

Некоторые файлы не были показаны из-за большого количества измененных файлов