Browse Source

first commit

Administrator 4 năm trước cách đây
commit
eec7f449c9
100 tập tin đã thay đổi với 8083 bổ sung0 xóa
  1. 43 0
      .gitignore
  2. 21 0
      LICENSE
  3. 12 0
      bin/clean.bat
  4. 12 0
      bin/package.bat
  5. 14 0
      bin/run-auth.bat
  6. 14 0
      bin/run-gateway.bat
  7. 14 0
      bin/run-modules-file.bat
  8. 14 0
      bin/run-modules-gen.bat
  9. 14 0
      bin/run-modules-job.bat
  10. 14 0
      bin/run-modules-system.bat
  11. 14 0
      bin/run-monitor.bat
  12. 40 0
      boman-api/boman-api-gen/pom.xml
  13. 37 0
      boman-api/boman-api-gen/src/main/java/com/boman/gen/api/RemoteGenTableColumnService.java
  14. 36 0
      boman-api/boman-api-gen/src/main/java/com/boman/gen/api/RemoteGenTableService.java
  15. 0 0
      boman-api/boman-api-gen/src/main/resources/META-INF/spring.factories
  16. 22 0
      boman-api/boman-api-jflow/pom.xml
  17. 22 0
      boman-api/boman-api-jflow/src/main/java/com/boman/jflow/api/RemoteJflowProcessService.java
  18. 56 0
      boman-api/boman-api-jflow/src/main/java/com/boman/jflow/api/RemoteJflowTaskService.java
  19. 27 0
      boman-api/boman-api-system/pom.xml
  20. 36 0
      boman-api/boman-api-system/src/main/java/com/boman/system/api/RemoteDeptService.java
  21. 37 0
      boman-api/boman-api-system/src/main/java/com/boman/system/api/RemoteDictDataService.java
  22. 37 0
      boman-api/boman-api-system/src/main/java/com/boman/system/api/RemoteFileService.java
  23. 40 0
      boman-api/boman-api-system/src/main/java/com/boman/system/api/RemoteLogService.java
  24. 36 0
      boman-api/boman-api-system/src/main/java/com/boman/system/api/RemoteMenuService.java
  25. 39 0
      boman-api/boman-api-system/src/main/java/com/boman/system/api/RemoteRoleDataService.java
  26. 49 0
      boman-api/boman-api-system/src/main/java/com/boman/system/api/RemoteSysMenuService.java
  27. 41 0
      boman-api/boman-api-system/src/main/java/com/boman/system/api/RemoteUserService.java
  28. 46 0
      boman-api/boman-api-system/src/main/java/com/boman/system/api/factory/RemoteFileFallbackFactory.java
  29. 41 0
      boman-api/boman-api-system/src/main/java/com/boman/system/api/factory/RemoteLogFallbackFactory.java
  30. 27 0
      boman-api/boman-api-system/src/main/java/com/boman/system/api/factory/RemoteUserFallbackFactory.java
  31. 192 0
      boman-api/boman-api-system/src/main/java/com/boman/system/api/model/LoginUser.java
  32. 4 0
      boman-api/boman-api-system/src/main/resources/META-INF/spring.factories
  33. 16 0
      boman-api/boman-api-system/src/main/resources/rebel.xml
  34. 27 0
      boman-api/boman-api-web-core/pom.xml
  35. 48 0
      boman-api/boman-api-web-core/src/main/java/com/boman/web/core/api/RemoteObjService.java
  36. 61 0
      boman-api/boman-domain/pom.xml
  37. 114 0
      boman-api/boman-domain/src/main/java/com.boman.domain/BaseEntity.java
  38. 615 0
      boman-api/boman-domain/src/main/java/com.boman.domain/GenTable.java
  39. 675 0
      boman-api/boman-domain/src/main/java/com.boman.domain/GenTableColumn.java
  40. 166 0
      boman-api/boman-domain/src/main/java/com.boman.domain/GenTableRelation.java
  41. 141 0
      boman-api/boman-domain/src/main/java/com.boman.domain/RoleEnum.java
  42. 200 0
      boman-api/boman-domain/src/main/java/com.boman.domain/SysDept.java
  43. 170 0
      boman-api/boman-domain/src/main/java/com.boman.domain/SysDictData.java
  44. 66 0
      boman-api/boman-domain/src/main/java/com.boman.domain/SysFile.java
  45. 292 0
      boman-api/boman-domain/src/main/java/com.boman.domain/SysMenu.java
  46. 241 0
      boman-api/boman-domain/src/main/java/com.boman.domain/SysOperLog.java
  47. 225 0
      boman-api/boman-domain/src/main/java/com.boman.domain/SysRole.java
  48. 183 0
      boman-api/boman-domain/src/main/java/com.boman.domain/SysRoleData.java
  49. 326 0
      boman-api/boman-domain/src/main/java/com.boman.domain/SysUser.java
  50. 65 0
      boman-api/boman-domain/src/main/java/com.boman.domain/TableSql.java
  51. 160 0
      boman-api/boman-domain/src/main/java/com.boman.domain/annotation/Excel.java
  52. 18 0
      boman-api/boman-domain/src/main/java/com.boman.domain/annotation/Excels.java
  53. 46 0
      boman-api/boman-domain/src/main/java/com.boman.domain/constant/AttendanceConst.java
  54. 24 0
      boman-api/boman-domain/src/main/java/com.boman.domain/constant/AttendanceRulesConst.java
  55. 37 0
      boman-api/boman-domain/src/main/java/com.boman.domain/constant/BillConst.java
  56. 39 0
      boman-api/boman-domain/src/main/java/com.boman.domain/constant/CacheConstants.java
  57. 119 0
      boman-api/boman-domain/src/main/java/com.boman.domain/constant/Constants.java
  58. 11 0
      boman-api/boman-domain/src/main/java/com.boman.domain/constant/DictConstant.java
  59. 197 0
      boman-api/boman-domain/src/main/java/com.boman.domain/constant/FormDataConstant.java
  60. 114 0
      boman-api/boman-domain/src/main/java/com.boman.domain/constant/GenConstants.java
  61. 29 0
      boman-api/boman-domain/src/main/java/com.boman.domain/constant/GlobalBtn.java
  62. 94 0
      boman-api/boman-domain/src/main/java/com.boman.domain/constant/HttpStatus.java
  63. 19 0
      boman-api/boman-domain/src/main/java/com.boman.domain/constant/LeaveConst.java
  64. 33 0
      boman-api/boman-domain/src/main/java/com.boman.domain/constant/MaskConstant.java
  65. 23 0
      boman-api/boman-domain/src/main/java/com.boman.domain/constant/MysqlDataTypeConst.java
  66. 50 0
      boman-api/boman-domain/src/main/java/com.boman.domain/constant/ScheduleConstants.java
  67. 39 0
      boman-api/boman-domain/src/main/java/com.boman.domain/constant/ServiceNameConstants.java
  68. 46 0
      boman-api/boman-domain/src/main/java/com.boman.domain/constant/SqlConstant.java
  69. 73 0
      boman-api/boman-domain/src/main/java/com.boman.domain/constant/SubmitConstant.java
  70. 13 0
      boman-api/boman-domain/src/main/java/com.boman.domain/constant/TableNameConst.java
  71. 30 0
      boman-api/boman-domain/src/main/java/com.boman.domain/constant/TriggerActionConstant.java
  72. 93 0
      boman-api/boman-domain/src/main/java/com.boman.domain/constant/UserConstants.java
  73. 20 0
      boman-api/boman-domain/src/main/java/com.boman.domain/constant/UserEnvConstant.java
  74. 22 0
      boman-api/boman-domain/src/main/java/com.boman.domain/constant/ViewTypeConst.java
  75. 181 0
      boman-api/boman-domain/src/main/java/com.boman.domain/dto/AjaxResult.java
  76. 219 0
      boman-api/boman-domain/src/main/java/com.boman.domain/dto/BaseDto.java
  77. 26 0
      boman-api/boman-domain/src/main/java/com.boman.domain/dto/ClockOnDto.java
  78. 38 0
      boman-api/boman-domain/src/main/java/com.boman.domain/dto/ExportExcelDto.java
  79. 240 0
      boman-api/boman-domain/src/main/java/com.boman.domain/dto/FormDataDto.java
  80. 33 0
      boman-api/boman-domain/src/main/java/com.boman.domain/dto/ImportExcelDto.java
  81. 178 0
      boman-api/boman-domain/src/main/java/com.boman.domain/dto/ProcessDto.java
  82. 114 0
      boman-api/boman-domain/src/main/java/com.boman.domain/dto/R.java
  83. 71 0
      boman-api/boman-domain/src/main/java/com.boman.domain/dto/RoleMenuDto.java
  84. 232 0
      boman-api/boman-domain/src/main/java/com.boman.domain/dto/TaskDto.java
  85. 81 0
      boman-api/boman-domain/src/main/java/com.boman.domain/dto/TreeEntity.java
  86. 15 0
      boman-api/boman-domain/src/main/java/com.boman.domain/exception/NoSuchFunctionException.java
  87. 15 0
      boman-api/boman-domain/src/main/java/com.boman.domain/exception/UnknownColumnException.java
  88. 26 0
      boman-api/pom.xml
  89. 87 0
      boman-auth/pom.xml
  90. 31 0
      boman-auth/src/main/java/com/boman/auth/RuoYiAuthApplication.java
  91. 74 0
      boman-auth/src/main/java/com/boman/auth/controller/OauthController.java
  92. 65 0
      boman-auth/src/main/java/com/boman/auth/controller/TokenController.java
  93. 39 0
      boman-auth/src/main/java/com/boman/auth/form/LoginBody.java
  94. 95 0
      boman-auth/src/main/java/com/boman/auth/service/SysLoginService.java
  95. 10 0
      boman-auth/src/main/resources/banner.txt
  96. 27 0
      boman-auth/src/main/resources/bootstrap-prod.yml
  97. 27 0
      boman-auth/src/main/resources/bootstrap-test.yml
  98. 38 0
      boman-auth/src/main/resources/bootstrap.yml
  99. 74 0
      boman-auth/src/main/resources/logback.xml
  100. 16 0
      boman-auth/src/main/resources/rebel.xml

+ 43 - 0
.gitignore

@@ -0,0 +1,43 @@
+######################################################################
+# 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
+
+!*/build/*.java
+!*/build/*.html
+!*/build/*.xml

+ 21 - 0
LICENSE

@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) 2020 若依
+
+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.

+ 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-auth.bat

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

+ 14 - 0
bin/run-gateway.bat

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

+ 14 - 0
bin/run-modules-file.bat

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

+ 14 - 0
bin/run-modules-gen.bat

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

+ 14 - 0
bin/run-modules-job.bat

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

+ 14 - 0
bin/run-modules-system.bat

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

+ 14 - 0
bin/run-monitor.bat

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

+ 40 - 0
boman-api/boman-api-gen/pom.xml

@@ -0,0 +1,40 @@
+<?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>boman-api</artifactId>
+        <groupId>com.boman</groupId>
+        <version>2.5.0-SNAPSHOT</version>
+    </parent>
+    <modelVersion>4.0.0</modelVersion>
+
+    <artifactId>boman-api-gen</artifactId>
+
+    <description>
+        boman-api-gen生成代码接口模块
+    </description>
+
+    <dependencies>
+
+        <!-- RuoYi Common Core-->
+<!--        <dependency>-->
+<!--            <groupId>com.boman</groupId>-->
+<!--            <artifactId>boman-common-core</artifactId>-->
+<!--        </dependency>-->
+
+        <dependency>
+            <groupId>com.boman</groupId>
+            <artifactId>boman-domain</artifactId>
+            <version>2.5.0-SNAPSHOT</version>
+        </dependency>
+        <!--        <dependency>-->
+        <!--            <groupId>com.boman</groupId>-->
+        <!--            <artifactId>boman-modules-gen</artifactId>-->
+        <!--            <version>2.5.0</version>-->
+        <!--            <scope>compile</scope>-->
+        <!--        </dependency>-->
+
+    </dependencies>
+
+</project>

+ 37 - 0
boman-api/boman-api-gen/src/main/java/com/boman/gen/api/RemoteGenTableColumnService.java

@@ -0,0 +1,37 @@
+package com.boman.gen.api;
+
+import com.boman.domain.constant.ServiceNameConstants;
+import com.boman.domain.dto.AjaxResult;
+import com.boman.domain.GenTableColumn;
+import org.springframework.cloud.openfeign.FeignClient;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+
+import java.util.List;
+
+/**
+ * 生成代码模块,远程调用入口,如需其他接口,在此添加
+ *
+ * @author shiqian
+ * @date 2021年04月06日 14:22
+ **/
+@FeignClient(contextId = "remoteGenTableColumnService", value = ServiceNameConstants.GEN_SERVICE)
+public interface RemoteGenTableColumnService {
+
+
+    /**
+     * 功能描述: 通过表名查找表对应的所有的列
+     *
+     * @param tableId tableId
+     * @return GenTable
+     */
+    @GetMapping(value = "/genTableColumn/{tableId}")
+    AjaxResult listColumnsByTableId(@PathVariable("tableId") Long tableId);
+
+    @GetMapping(value = "/genTableColumn/pk/{columnId}")
+    GenTableColumn getById(@PathVariable("columnId") Long columnId);
+
+    @GetMapping(value = "/genTableColumn/listColumnsByTableName/{tableName}")
+    List<GenTableColumn> listColumnsByTableName(@PathVariable("tableName") String tableName);
+
+}

+ 36 - 0
boman-api/boman-api-gen/src/main/java/com/boman/gen/api/RemoteGenTableService.java

@@ -0,0 +1,36 @@
+package com.boman.gen.api;
+
+import com.boman.domain.constant.ServiceNameConstants;
+import com.boman.domain.GenTable;
+import org.springframework.cloud.openfeign.FeignClient;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+
+/**
+ * 生成代码模块,远程调用入口,如需其他接口,在此添加
+ *
+ * @author shiqian
+ * @date 2021年04月06日 14:22
+ **/
+@FeignClient(contextId = "remoteGenTableService", value = ServiceNameConstants.GEN_SERVICE)
+public interface RemoteGenTableService {
+
+    /**
+     * 功能描述: 通过表名查找表对应的所有的列
+     *
+     * @param tableId tableId
+     * @return GenTable
+     */
+    @GetMapping(value = "/gen/tableId/{tableId}")
+    GenTable getByTableId(@PathVariable("tableId") Long tableId);
+
+
+    /**
+     * 功能描述: 通过表名查找表信息
+     *
+     * @param tableName tableName
+     * @return GenTable
+     */
+    @GetMapping(value = "/gen/table/{tableName}")
+    GenTable getByTableName(@PathVariable("tableName") String tableName);
+}

+ 0 - 0
boman-api/boman-api-gen/src/main/resources/META-INF/spring.factories


+ 22 - 0
boman-api/boman-api-jflow/pom.xml

@@ -0,0 +1,22 @@
+<?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>boman-api</artifactId>
+        <groupId>com.boman</groupId>
+        <version>2.5.0-SNAPSHOT</version>
+    </parent>
+
+    <modelVersion>4.0.0</modelVersion>
+    <artifactId>boman-api-jflow</artifactId>
+
+    <dependencies>
+        <dependency>
+            <groupId>com.boman</groupId>
+            <artifactId>boman-domain</artifactId>
+            <version>2.5.0-SNAPSHOT</version>
+        </dependency>
+    </dependencies>
+
+</project>

+ 22 - 0
boman-api/boman-api-jflow/src/main/java/com/boman/jflow/api/RemoteJflowProcessService.java

@@ -0,0 +1,22 @@
+package com.boman.jflow.api;
+
+import com.alibaba.fastjson.JSONObject;
+import com.boman.domain.constant.ServiceNameConstants;
+import com.boman.domain.dto.AjaxResult;
+import com.boman.domain.dto.ProcessDto;
+import com.boman.domain.dto.TaskDto;
+import org.springframework.cloud.openfeign.FeignClient;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+
+/**
+ * @author zhong.h
+ * @date 2021年05月26日 15:09
+ **/
+@FeignClient(contextId = "remoteJflowProcessService", name = ServiceNameConstants.JFLOW_SERVICE)
+public interface RemoteJflowProcessService {
+
+    @PostMapping("/jflow/p/c/process/launch")
+    AjaxResult launch(@RequestBody ProcessDto processDto);
+}

+ 56 - 0
boman-api/boman-api-jflow/src/main/java/com/boman/jflow/api/RemoteJflowTaskService.java

@@ -0,0 +1,56 @@
+package com.boman.jflow.api;
+
+import com.alibaba.fastjson.JSONObject;
+import com.boman.domain.constant.ServiceNameConstants;
+import com.boman.domain.dto.AjaxResult;
+import com.boman.domain.dto.TaskDto;
+import org.springframework.cloud.openfeign.FeignClient;
+import org.springframework.web.bind.annotation.*;
+
+/**
+ * @author zhong.hui
+ * @date 2021年05月26日 15:09
+ **/
+@FeignClient(contextId = "remoteJflowTaskService", name = ServiceNameConstants.JFLOW_SERVICE)
+public interface RemoteJflowTaskService {
+
+    /**
+     * 历史审批接口调用
+     *
+     * @param taskDto
+     * @return
+     */
+    @PostMapping("/jflow/p/cs/task/history/list")
+    AjaxResult historySearchInPage(@RequestBody(required = false) TaskDto taskDto);
+
+    /**
+     * 代办审批接口调用
+     *
+     * @param taskDto
+     * @return
+     */
+    @PostMapping("/jflow/p/cs/task/backlog/list")
+    AjaxResult pendingTaskSearch(@RequestBody TaskDto taskDto);
+
+    /**
+     * 同意申请
+     * @param taskDto
+     * @return
+     */
+    @PostMapping("/jflow/p/c/task/page/pass")
+    AjaxResult pagePass(@RequestBody TaskDto taskDto);
+
+    /**
+     * 驳回
+     * @param taskDto
+     * @return
+     */
+    @PostMapping("/jflow/p/c/task/page/deny")
+    AjaxResult pageDeny(@RequestBody TaskDto taskDto);
+
+    @GetMapping("/jflow/p/cs/task/count")
+    JSONObject approvalStatistics(@RequestBody TaskDto taskDto);
+
+    @PostMapping("/jflow/p/c/task/backlog/detail")
+    AjaxResult pageDetail(@RequestBody TaskDto taskDto);
+}

+ 27 - 0
boman-api/boman-api-system/pom.xml

@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xmlns="http://maven.apache.org/POM/4.0.0"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <parent>
+        <groupId>com.boman</groupId>
+        <artifactId>boman-api</artifactId>
+        <version>2.5.0-SNAPSHOT</version>
+    </parent>
+    <modelVersion>4.0.0</modelVersion>
+    
+    <artifactId>boman-api-system</artifactId>
+
+    <description>
+        boman-api-system系统接口模块
+    </description>
+
+    <dependencies>
+        <dependency>
+            <groupId>com.boman</groupId>
+            <artifactId>boman-domain</artifactId>
+            <version>2.5.0-SNAPSHOT</version>
+        </dependency>
+        
+    </dependencies>
+
+</project>

+ 36 - 0
boman-api/boman-api-system/src/main/java/com/boman/system/api/RemoteDeptService.java

@@ -0,0 +1,36 @@
+package com.boman.system.api;
+
+import com.boman.domain.constant.ServiceNameConstants;
+import com.boman.domain.SysDept;
+import org.springframework.cloud.openfeign.FeignClient;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+
+import java.util.List;
+
+/**
+ * @author shiqian
+ * @date 2021年04月07日 10:31
+ **/
+@FeignClient(contextId = "remoteDeptService", value = ServiceNameConstants.SYSTEM_SERVICE)
+public interface RemoteDeptService {
+
+    /**
+     * 功能描述: 根据id查找
+     *
+     * @param id deptId
+     * @return com.boman.domain.dto.AjaxResult
+     */
+    @GetMapping(value = "/dept/getById/{id}")
+    SysDept getById(@PathVariable("id") Long id);
+
+    /**
+     * 功能描述: 拿到部门下所有的部门, 包含传过来的deptId
+     *
+     * @param deptId deptId
+     * @return com.boman.domain.dto.AjaxResult
+     */
+    @GetMapping("/dept/list/children/depts/{deptId}")
+    List<SysDept> listChildrenDepts(@PathVariable(value = "deptId") Long deptId);
+}
+

+ 37 - 0
boman-api/boman-api-system/src/main/java/com/boman/system/api/RemoteDictDataService.java

@@ -0,0 +1,37 @@
+package com.boman.system.api;
+
+import com.boman.domain.constant.ServiceNameConstants;
+import com.boman.domain.SysDictData;
+import org.springframework.cloud.openfeign.FeignClient;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+
+import java.util.List;
+
+/**
+ * @author shiqian
+ * @date 2021年04月07日 10:31
+ **/
+@FeignClient(contextId = "remoteDictDataService", value = ServiceNameConstants.SYSTEM_SERVICE)
+public interface RemoteDictDataService {
+
+    /**
+     * 功能描述: 根据type查字典值
+     *
+     * @param dictType dictType
+     * @return List<SysDictData>
+     */
+    @GetMapping(value = "/dict/data/type/data/{dictType}")
+    List<SysDictData> listByType(@PathVariable(value = "dictType") String dictType);
+
+    /**
+     * 功能描述: 根据type和value查字典值
+     *
+     * @param dictType  dictType
+     * @param dictValue dictValue
+     * @return java.lang.String
+     */
+    @GetMapping(value = "/dict/data/type/data/{dictType}/{dictValue}")
+    String selectDictLabel(@PathVariable("dictType") String dictType, @PathVariable("dictValue") String dictValue);
+}
+

+ 37 - 0
boman-api/boman-api-system/src/main/java/com/boman/system/api/RemoteFileService.java

@@ -0,0 +1,37 @@
+package com.boman.system.api;
+
+import com.boman.domain.dto.AjaxResult;
+import org.springframework.cloud.openfeign.FeignClient;
+import org.springframework.http.MediaType;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestPart;
+import org.springframework.web.multipart.MultipartFile;
+import com.boman.domain.constant.ServiceNameConstants;
+import com.boman.domain.dto.R;
+import com.boman.domain.SysFile;
+import com.boman.system.api.factory.RemoteFileFallbackFactory;
+
+/**
+ * 文件服务
+ * 
+ * @author ruoyi
+ */
+@FeignClient(contextId = "remoteFileService", value = ServiceNameConstants.FILE_SERVICE, fallbackFactory = RemoteFileFallbackFactory.class)
+public interface RemoteFileService
+{
+    /**
+     * 上传文件
+     *
+     * @param file 文件信息
+     * @return 结果
+     */
+    @PostMapping(value = "/upload", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
+    public R<SysFile> upload(@RequestPart(value = "file") MultipartFile file);
+
+    /**
+     * 通用上传请求
+     */
+    @PostMapping("/upload/base64")
+    AjaxResult uploadFileBase64(@RequestBody String base64);
+}

+ 40 - 0
boman-api/boman-api-system/src/main/java/com/boman/system/api/RemoteLogService.java

@@ -0,0 +1,40 @@
+package com.boman.system.api;
+
+import org.springframework.cloud.openfeign.FeignClient;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestParam;
+import com.boman.domain.constant.ServiceNameConstants;
+import com.boman.domain.dto.R;
+import com.boman.domain.SysOperLog;
+import com.boman.system.api.factory.RemoteLogFallbackFactory;
+
+/**
+ * 日志服务
+ * 
+ * @author ruoyi
+ */
+@FeignClient(contextId = "remoteLogService", value = ServiceNameConstants.SYSTEM_SERVICE, fallbackFactory = RemoteLogFallbackFactory.class)
+public interface RemoteLogService
+{
+    /**
+     * 保存系统日志
+     *
+     * @param sysOperLog 日志实体
+     * @return 结果
+     */
+    @PostMapping("/operlog")
+    R<Boolean> saveLog(@RequestBody SysOperLog sysOperLog);
+
+    /**
+     * 保存访问记录
+     *
+     * @param username 用户名称
+     * @param status 状态
+     * @param message 消息
+     * @return 结果
+     */
+    @PostMapping("/logininfor")
+    R<Boolean> saveLogininfor(@RequestParam("username") String username, @RequestParam("status") String status,
+            @RequestParam("message") String message);
+}

+ 36 - 0
boman-api/boman-api-system/src/main/java/com/boman/system/api/RemoteMenuService.java

@@ -0,0 +1,36 @@
+package com.boman.system.api;
+
+import com.boman.domain.constant.ServiceNameConstants;
+import com.boman.domain.SysMenu;
+import org.springframework.cloud.openfeign.FeignClient;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+
+import java.util.List;
+
+/**
+ * @author shiqian
+ * @date 2021年04月07日 10:31
+ **/
+@FeignClient(contextId = "remoteMenuService", value = ServiceNameConstants.SYSTEM_SERVICE)
+public interface RemoteMenuService {
+
+    /**
+     * 功能描述: 根据userId查找此人的所有菜单
+     *
+     * @param userId userId
+     * @return java.util.List<com.boman.domain.SysMenu>
+     */
+    @GetMapping("/menu/listMenusByUserId/{userId}")
+    List<SysMenu> listMenusByUserId(@PathVariable("userId") Long userId);
+
+    /**
+     * 根据用户ID查询按钮
+     *
+     * @param userId 用户ID
+     * @return 菜单列表
+     */
+    @GetMapping("/menu/listBtnByUserId/{userId}")
+    List<SysMenu> listBtnByUserId(@PathVariable("userId") Long userId);
+}
+

+ 39 - 0
boman-api/boman-api-system/src/main/java/com/boman/system/api/RemoteRoleDataService.java

@@ -0,0 +1,39 @@
+package com.boman.system.api;
+
+import com.boman.domain.constant.ServiceNameConstants;
+import com.boman.domain.SysRoleData;
+import org.springframework.cloud.openfeign.FeignClient;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+
+import java.util.List;
+
+/**
+ * @author shiqian
+ * @date 2021年04月07日 10:31
+ **/
+@FeignClient(contextId = "remoteRoleDataService", value = ServiceNameConstants.SYSTEM_SERVICE)
+public interface RemoteRoleDataService {
+
+    /**
+     * 功能描述: 根据userId查找此人的所有roleData
+     *
+     * @param idList idList
+     * @return java.util.List<com.boman.domain.SysMenu>
+     */
+    @PostMapping(value = "/roleData/listByRoleIdList")
+    List<SysRoleData> listByRoleIdList(@RequestBody List<Long> idList);
+
+    /**
+     * 功能描述: 根据roleIds和tableName查找
+     *
+     * @param roleIds   逗号相隔的roleIdS
+     * @param tableName tableName
+     * @return java.util.List<com.boman.domain.SysRoleData>
+     */
+    @GetMapping(value = "/roleData/list/roleIds/{roleIds}/tableName/{tableName}")
+    List<SysRoleData> listByRoleIdListTableName(@PathVariable("roleIds") String roleIds, @PathVariable("tableName") String tableName);
+}
+

+ 49 - 0
boman-api/boman-api-system/src/main/java/com/boman/system/api/RemoteSysMenuService.java

@@ -0,0 +1,49 @@
+package com.boman.system.api;
+
+import com.boman.domain.constant.ServiceNameConstants;
+import com.boman.domain.dto.AjaxResult;
+import com.boman.domain.SysMenu;
+import org.springframework.cloud.openfeign.FeignClient;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+/**
+ * @author tjf
+ * @Date: 2021/04/13/9:53
+ */
+@FeignClient(contextId = "remoteSysMenuService", value = ServiceNameConstants.SYSTEM_SERVICE)
+public interface RemoteSysMenuService {
+
+    /**
+     * 新增菜单
+     *
+     * @param menu 菜单
+     * @return
+     */
+    @PostMapping("/menu")
+    public AjaxResult add(@Validated @RequestBody SysMenu menu);
+
+    /**
+     * 查询菜单信息
+     *
+     * @param menu
+     * @return
+     */
+    @PostMapping("/menu/listAll")
+    public List<SysMenu> listAll(@Validated @RequestBody SysMenu menu);
+
+    /**
+     * 删除菜单
+     * @param id
+     * @return
+     */
+    @DeleteMapping("/menu/remove/{id}")
+    public AjaxResult remove(@PathVariable("id") Long id);
+
+    @PutMapping("/menu")
+    public AjaxResult edit(@Validated @RequestBody SysMenu menu);
+
+
+}

+ 41 - 0
boman-api/boman-api-system/src/main/java/com/boman/system/api/RemoteUserService.java

@@ -0,0 +1,41 @@
+package com.boman.system.api;
+
+import com.boman.domain.SysUser;
+import org.springframework.cloud.openfeign.FeignClient;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import com.boman.domain.constant.ServiceNameConstants;
+import com.boman.domain.dto.R;
+import com.boman.system.api.factory.RemoteUserFallbackFactory;
+import com.boman.system.api.model.LoginUser;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+
+import java.util.List;
+
+/**
+ * 用户服务
+ * 
+ * @author ruoyi
+ */
+@FeignClient(contextId = "remoteUserService", value = ServiceNameConstants.SYSTEM_SERVICE, fallbackFactory = RemoteUserFallbackFactory.class)
+public interface RemoteUserService
+{
+    /**
+     * 通过用户名查询用户信息
+     *
+     * @param username 用户名
+     * @return 结果
+     */
+    @GetMapping(value = "/user/info/{username}")
+    public R<LoginUser> getUserInfo(@PathVariable("username") String username);
+
+    /**
+     * 部门下所有人
+     *
+     * @param deptIdList deptIdList
+     * @return 结果
+     */
+    @PostMapping("/user/listByDeptId")
+    List<SysUser> listByDeptId(@RequestBody List<Long> deptIdList);
+}

+ 46 - 0
boman-api/boman-api-system/src/main/java/com/boman/system/api/factory/RemoteFileFallbackFactory.java

@@ -0,0 +1,46 @@
+package com.boman.system.api.factory;
+
+import com.boman.domain.dto.AjaxResult;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.stereotype.Component;
+import org.springframework.web.multipart.MultipartFile;
+import com.boman.domain.dto.R;
+import com.boman.system.api.RemoteFileService;
+import com.boman.domain.SysFile;
+import feign.hystrix.FallbackFactory;
+
+/**
+ * 文件服务降级处理
+ * 
+ * @author ruoyi
+ */
+@Component
+public class RemoteFileFallbackFactory implements FallbackFactory<RemoteFileService>
+{
+    private static final Logger log = LoggerFactory.getLogger(RemoteFileFallbackFactory.class);
+
+    @Override
+    public RemoteFileService create(Throwable throwable)
+    {
+        log.error("文件服务调用失败:{}", throwable.getMessage());
+        return new RemoteFileService()
+        {
+            @Override
+            public R<SysFile> upload(MultipartFile file)
+            {
+                return R.fail("上传文件失败:" + throwable.getMessage());
+            }
+
+            /**
+             * 通用上传请求
+             *
+             * @param base64
+             */
+            @Override
+            public AjaxResult uploadFileBase64(String base64) {
+                return AjaxResult.error("上传文件失败:" + throwable.getMessage());
+            }
+        };
+    }
+}

+ 41 - 0
boman-api/boman-api-system/src/main/java/com/boman/system/api/factory/RemoteLogFallbackFactory.java

@@ -0,0 +1,41 @@
+package com.boman.system.api.factory;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.stereotype.Component;
+import com.boman.domain.dto.R;
+import com.boman.system.api.RemoteLogService;
+import com.boman.domain.SysOperLog;
+import feign.hystrix.FallbackFactory;
+
+/**
+ * 日志服务降级处理
+ * 
+ * @author ruoyi
+ */
+@Component
+public class RemoteLogFallbackFactory implements FallbackFactory<RemoteLogService>
+{
+    private static final Logger log = LoggerFactory.getLogger(RemoteLogFallbackFactory.class);
+
+    @Override
+    public RemoteLogService create(Throwable throwable)
+    {
+        log.error("日志服务调用失败:{}", throwable.getMessage());
+        return new RemoteLogService()
+        {
+            @Override
+            public R<Boolean> saveLog(SysOperLog sysOperLog)
+            {
+                return null;
+            }
+
+            @Override
+            public R<Boolean> saveLogininfor(String username, String status, String message)
+            {
+                return null;
+            }
+        };
+
+    }
+}

+ 27 - 0
boman-api/boman-api-system/src/main/java/com/boman/system/api/factory/RemoteUserFallbackFactory.java

@@ -0,0 +1,27 @@
+package com.boman.system.api.factory;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.stereotype.Component;
+import com.boman.domain.dto.R;
+import com.boman.system.api.RemoteUserService;
+import com.boman.system.api.model.LoginUser;
+import feign.hystrix.FallbackFactory;
+
+/**
+ * 用户服务降级处理
+ * 
+ * @author ruoyi
+ */
+@Component
+public class RemoteUserFallbackFactory implements FallbackFactory<RemoteUserService>
+{
+    private static final Logger log = LoggerFactory.getLogger(RemoteUserFallbackFactory.class);
+
+    @Override
+    public RemoteUserService create(Throwable throwable)
+    {
+
+        return null;
+    }
+}

+ 192 - 0
boman-api/boman-api-system/src/main/java/com/boman/system/api/model/LoginUser.java

@@ -0,0 +1,192 @@
+package com.boman.system.api.model;
+
+import java.io.Serializable;
+import java.util.List;
+import java.util.Set;
+
+import com.alibaba.fastjson.JSONObject;
+import com.boman.domain.SysUser;
+
+/**
+ * 用户信息
+ *
+ * @author ruoyi
+ */
+public class LoginUser implements Serializable
+{
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 用户唯一标识
+     */
+    private String token;
+
+    /**
+     * 用户名id
+     */
+    private Long userid;
+
+    /**
+     * 用户名
+     */
+    private String username;
+
+    /**
+     * 登录时间
+     */
+    private Long loginTime;
+
+    /**
+     * 过期时间
+     */
+    private Long expireTime;
+
+    /**
+     * 登录IP地址
+     */
+    private String ipaddr;
+
+    /**
+     * 权限列表
+     */
+    private Set<String> permissions;
+
+    /**
+     * 角色列表
+     */
+    private Set<String> roles;
+
+    /**
+     * 用户信息
+     */
+    private SysUser sysUser;
+
+    /**
+     * 用户变量 登录的时候塞进去的
+     */
+    private JSONObject userEnv;
+
+    /**
+     * 当前人所在部门以及下属部门所有人的userId
+     */
+    private List<Long> subDeptUserIds;
+
+    /**
+     * 当前人所在部门所有人的userId, 不包含子部门
+     */
+    private List<Long> deptUserIds;
+
+    public String getToken()
+    {
+        return token;
+    }
+
+    public void setToken(String token)
+    {
+        this.token = token;
+    }
+
+    public Long getUserid()
+    {
+        return userid;
+    }
+
+    public void setUserid(Long userid)
+    {
+        this.userid = userid;
+    }
+
+    public String getUsername()
+    {
+        return username;
+    }
+
+    public void setUsername(String username)
+    {
+        this.username = username;
+    }
+
+    public Long getLoginTime()
+    {
+        return loginTime;
+    }
+
+    public void setLoginTime(Long loginTime)
+    {
+        this.loginTime = loginTime;
+    }
+
+    public Long getExpireTime()
+    {
+        return expireTime;
+    }
+
+    public void setExpireTime(Long expireTime)
+    {
+        this.expireTime = expireTime;
+    }
+
+    public String getIpaddr()
+    {
+        return ipaddr;
+    }
+
+    public void setIpaddr(String ipaddr)
+    {
+        this.ipaddr = ipaddr;
+    }
+
+    public Set<String> getPermissions()
+    {
+        return permissions;
+    }
+
+    public void setPermissions(Set<String> permissions)
+    {
+        this.permissions = permissions;
+    }
+
+    public Set<String> getRoles()
+    {
+        return roles;
+    }
+
+    public void setRoles(Set<String> roles)
+    {
+        this.roles = roles;
+    }
+
+    public SysUser getSysUser()
+    {
+        return sysUser;
+    }
+
+    public void setSysUser(SysUser sysUser)
+    {
+        this.sysUser = sysUser;
+    }
+
+    public JSONObject getUserEnv() {
+        return userEnv;
+    }
+
+    public void setUserEnv(JSONObject userEnv) {
+        this.userEnv = userEnv;
+    }
+
+    public List<Long> getSubDeptUserIds() {
+        return subDeptUserIds;
+    }
+
+    public void setSubDeptUserIds(List<Long> subDeptUserIds) {
+        this.subDeptUserIds = subDeptUserIds;
+    }
+
+    public List<Long> getDeptUserIds() {
+        return deptUserIds;
+    }
+
+    public void setDeptUserIds(List<Long> deptUserIds) {
+        this.deptUserIds = deptUserIds;
+    }
+}

+ 4 - 0
boman-api/boman-api-system/src/main/resources/META-INF/spring.factories

@@ -0,0 +1,4 @@
+org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
+  com.boman.system.api.factory.RemoteUserFallbackFactory,\
+  com.boman.system.api.factory.RemoteLogFallbackFactory, \
+  com.boman.system.api.factory.RemoteFileFallbackFactory

+ 16 - 0
boman-api/boman-api-system/src/main/resources/rebel.xml

@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+  This is the JRebel configuration file. It maps the running application to your IDE workspace, enabling JRebel reloading for this project.
+  Refer to https://manuals.jrebel.com/jrebel/standalone/config.html for more information.
+-->
+<application generated-by="intellij" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.zeroturnaround.com" xsi:schemaLocation="http://www.zeroturnaround.com http://update.zeroturnaround.com/jrebel/rebel-2_3.xsd">
+
+	<id>boman-api-system</id>
+
+	<classpath>
+		<dir name="E:/boman-framwork/boman-api/boman-api-system/target/classes">
+		</dir>
+	</classpath>
+
+</application>

+ 27 - 0
boman-api/boman-api-web-core/pom.xml

@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xmlns="http://maven.apache.org/POM/4.0.0"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+<parent>
+    <groupId>com.boman</groupId>
+    <artifactId>boman-api</artifactId>
+    <version>2.5.0-SNAPSHOT</version>
+</parent>
+<modelVersion>4.0.0</modelVersion>
+
+<artifactId>boman-api-web-core</artifactId>
+
+<description>
+    boman-api-web-core系统接口模块
+</description>
+
+<dependencies>
+    <dependency>
+        <groupId>com.boman</groupId>
+        <artifactId>boman-domain</artifactId>
+        <version>2.5.0-SNAPSHOT</version>
+    </dependency>
+
+</dependencies>
+
+</project>

+ 48 - 0
boman-api/boman-api-web-core/src/main/java/com/boman/web/core/api/RemoteObjService.java

@@ -0,0 +1,48 @@
+package com.boman.web.core.api;
+
+import com.boman.domain.constant.ServiceNameConstants;
+import com.boman.domain.dto.AjaxResult;
+import com.boman.domain.dto.FormDataDto;
+import com.boman.domain.dto.ImportExcelDto;
+import org.springframework.cloud.openfeign.FeignClient;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+
+/**
+ * @author shiqian
+ * @date 2021年04月07日 10:31
+ **/
+@FeignClient(contextId = "remoteObjService", value = ServiceNameConstants.WEB_CORE_SERVICE)
+public interface RemoteObjService {
+
+    /**
+     * 功能描述: 根据id查找
+     *
+     * @param tableName tableName
+     * @param pkName    pkName
+     * @return com.boman.domain.dto.AjaxResult
+     */
+    @GetMapping("common/tableName/{tableName}/pkName/{pkName}")
+    Long getMaxId(@PathVariable("tableName") String tableName, @PathVariable("pkName") String pkName);
+
+    /**
+     * 功能描述: 批量导入数据
+     *
+     * @param dto dto
+     * @return com.boman.domain.dto.AjaxResult
+     */
+    @PostMapping("web-core/file/common/import")
+    AjaxResult importCommonData(@RequestBody ImportExcelDto dto);
+
+    /**
+     * 功能描述: 根据表名和自定义字段查找
+     *
+     * @param dto dto
+     * @return com.boman.domain.dto.AjaxResult
+     */
+    @PostMapping("common/")
+    AjaxResult getByMap(@RequestBody FormDataDto dto);
+}
+

+ 61 - 0
boman-api/boman-domain/pom.xml

@@ -0,0 +1,61 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xmlns="http://maven.apache.org/POM/4.0.0"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <parent>
+        <groupId>com.boman</groupId>
+        <artifactId>boman-api</artifactId>
+        <version>2.5.0-SNAPSHOT</version>
+    </parent>
+    <modelVersion>4.0.0</modelVersion>
+
+    <artifactId>boman-domain</artifactId>
+
+    <description>
+        boman-domain
+    </description>
+
+    <dependencies>
+<!--        <dependency>
+            <groupId>com.boman</groupId>
+            <artifactId>boman-common-core</artifactId>
+            <version>2.5.0-SNAPSHOT</version>
+        </dependency>-->
+
+        <!-- Jackson -->
+        <dependency>
+            <groupId>com.fasterxml.jackson.core</groupId>
+            <artifactId>jackson-databind</artifactId>
+        </dependency>
+
+        <!-- Apache Lang3 -->
+        <dependency>
+            <groupId>org.apache.commons</groupId>
+            <artifactId>commons-lang3</artifactId>
+        </dependency>
+
+        <!-- Hibernate Validator -->
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-validation</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>com.alibaba</groupId>
+            <artifactId>fastjson</artifactId>
+        </dependency>
+
+        <!-- SpringCloud Openfeign -->
+        <dependency>
+            <groupId>org.springframework.cloud</groupId>
+            <artifactId>spring-cloud-starter-openfeign</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>org.projectlombok</groupId>
+            <artifactId>lombok</artifactId>
+            <version>1.18.4</version>
+        </dependency>
+    </dependencies>
+
+</project>

+ 114 - 0
boman-api/boman-domain/src/main/java/com.boman.domain/BaseEntity.java

@@ -0,0 +1,114 @@
+package com.boman.domain;
+
+
+import java.io.Serializable;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * Entity基类
+ * 
+ * @author ruoyi
+ */
+public class BaseEntity implements Serializable
+{
+    private static final long serialVersionUID = 1L;
+
+    /** 搜索值 */
+    private String searchValue;
+
+    /** 创建者 */
+    private String createBy;
+
+    /** 创建时间 */
+//    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private Date createTime;
+
+    /** 更新者 */
+    private String updateBy;
+
+    /** 更新时间 */
+//    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private Date updateTime;
+
+    /** 备注 */
+    private String remark;
+
+    /** 请求参数 */
+    private Map<String, Object> params;
+
+    public String getSearchValue()
+    {
+        return searchValue;
+    }
+
+    public void setSearchValue(String searchValue)
+    {
+        this.searchValue = searchValue;
+    }
+
+    public String getCreateBy()
+    {
+        return createBy;
+    }
+
+    public void setCreateBy(String createBy)
+    {
+        this.createBy = createBy;
+    }
+
+    public Date getCreateTime()
+    {
+        return createTime;
+    }
+
+    public void setCreateTime(Date createTime)
+    {
+        this.createTime = createTime;
+    }
+
+    public String getUpdateBy()
+    {
+        return updateBy;
+    }
+
+    public void setUpdateBy(String updateBy)
+    {
+        this.updateBy = updateBy;
+    }
+
+    public Date getUpdateTime()
+    {
+        return updateTime;
+    }
+
+    public void setUpdateTime(Date updateTime)
+    {
+        this.updateTime = updateTime;
+    }
+
+    public String getRemark()
+    {
+        return remark;
+    }
+
+    public void setRemark(String remark)
+    {
+        this.remark = remark;
+    }
+
+    public Map<String, Object> getParams()
+    {
+        if (params == null)
+        {
+            params = new HashMap<>();
+        }
+        return params;
+    }
+
+    public void setParams(Map<String, Object> params)
+    {
+        this.params = params;
+    }
+}

+ 615 - 0
boman-api/boman-domain/src/main/java/com.boman.domain/GenTable.java

@@ -0,0 +1,615 @@
+package com.boman.domain;
+
+import java.util.List;
+
+/**
+ * 业务表 gen_table
+ * 
+ * @author ruoyi
+ */
+public class GenTable extends BaseEntity
+{
+    private static final long serialVersionUID = 1L;
+
+    /** 编号 */
+    private Long id;
+    /**
+     * 前端传来提示修改的状态 1:修改gen_table  2:修改gen_table_column
+     */
+    private String updateType;
+
+    /** 表名称 */
+//    @NotBlank(message = "表名称不能为空")
+    private String tableName;
+
+    /** 表描述 */
+//    @NotBlank(message = "表描述不能为空")
+    private String tableComment;
+
+    /** 关联父表的表名 */
+    private String subTableName;
+
+    /** 本表关联父表的外键名 */
+    private String subTableFkName;
+
+    /** 实体类名称(首字母大写) */
+    //@NotBlank(message = "实体类名称不能为空")
+    private String className;
+
+    /** 使用的模板(crud单表操作 tree树表操作 sub主子表操作) */
+    private String tplCategory;
+
+    /** 生成包路径 */
+    //@NotBlank(message = "生成包路径不能为空")
+    private String packageName;
+
+    /** 生成模块名 */
+    //@NotBlank(message = "生成模块名不能为空")
+    private String moduleName;
+
+    /** 生成业务名 */
+    //@NotBlank(message = "生成业务名不能为空")
+    private String businessName;
+
+    /** 生成功能名 */
+    //@NotBlank(message = "生成功能名不能为空")
+    private String functionName;
+
+    /** 生成作者 */
+    //@NotBlank(message = "作者不能为空")
+    private String functionAuthor;
+
+    /** 生成代码方式(0zip压缩包 1自定义路径) */
+    private String genType;
+
+    /** 生成路径(不填默认项目路径) */
+    private String genPath;
+
+    /** 主键信息 */
+    private GenTableColumn pkColumn;
+
+    /** 子表信息 */
+    private GenTable subTable;
+
+    /** 表列信息 */
+//    @Valid
+    private List<GenTableColumn> columns;
+
+    /** 主表关联的附表信息(附表包含字段信息) */
+//    @Valid
+    private List<GenTable> relationList;
+
+    /** 其它生成选项 */
+    private String options;
+
+    /**
+     * 是否菜单
+     */
+    private String isMenu;
+
+    /**
+     * 菜单权限(AMDQSUE)
+     */
+//    @NotBlank(message = "菜单权限不能为空")
+    private String menuRole;
+
+    /**
+     * 输入字段
+     */
+    private Long akColumn;
+    private String akColumnName;
+
+    /**
+     * 输出字段
+     */
+    private Long dkColumn;
+    private String dkColumnName;
+
+    /**
+     * 新增触发器
+     */
+    private String triggerCreate;
+
+    /**
+     * 检索触发器
+     */
+    private String triggerRetrieve;
+
+    /**
+     * 修改触发器
+     */
+    private String triggerUpdate;
+
+    /**
+     * 删除触发器
+     */
+    private String triggerDelete;
+
+    /**
+     * 提交触发器
+     */
+    private String triggerSubmit;
+
+    /**
+     * 实际数据库名称
+     */
+    private String realTableName;
+
+    /**
+     * 过滤条件
+     */
+    private String filterConditions;
+
+    /**
+     * 扩展属性
+     */
+    private String extendedAttributes;
+
+
+    /** 树编码字段 */
+    private String treeCode;
+
+    /** 树父编码字段 */
+    private String treeParentCode;
+
+    /** 树名称字段 */
+    private String treeName;
+
+    /** 上级菜单ID字段 */
+    private String parentMenuId;
+
+    /** 上级菜单名称字段 */
+    private String parentMenuName;
+
+
+    /**
+     * 对应表主键
+     */
+    private Long tablePrimaryKey;
+
+    /**
+     * 主键名称
+     */
+    private String tablePrimaryKeyName;
+
+    /**
+     * 此表中的字段是否含有blob的列, true含
+     */
+    private Boolean isContainsBlob;
+
+    /**
+     * 列宽
+     */
+    private Integer tableColumn;
+
+
+    public Integer getTableColumn() {
+        return tableColumn;
+    }
+
+    public void setTableColumn(Integer tableColumn) {
+        this.tableColumn = tableColumn;
+    }
+
+    public String getUpdateType() {
+        return updateType;
+    }
+
+    public void setUpdateType(String updateType) {
+        this.updateType = updateType;
+    }
+
+    public String getAkColumnName() {
+        return akColumnName;
+    }
+
+    public void setAkColumnName(String akColumnName) {
+        this.akColumnName = akColumnName;
+    }
+
+    public String getDkColumnName() {
+        return dkColumnName;
+    }
+
+    public void setDkColumnName(String dkColumnName) {
+        this.dkColumnName = dkColumnName;
+    }
+
+    public String getTablePrimaryKeyName() {
+        return tablePrimaryKeyName;
+    }
+
+    public void setTablePrimaryKeyName(String tablePrimaryKeyName) {
+        this.tablePrimaryKeyName = tablePrimaryKeyName;
+    }
+
+    public Long getTablePrimaryKey() {
+        return tablePrimaryKey;
+    }
+
+    public void setTablePrimaryKey(Long tablePrimaryKey) {
+        this.tablePrimaryKey = tablePrimaryKey;
+    }
+
+    public String getRealTableName() {
+        return realTableName;
+    }
+
+    public void setRealTableName(String realTableName) {
+        this.realTableName = realTableName;
+    }
+
+    public String getFilterConditions() {
+        return filterConditions;
+    }
+
+    public void setFilterConditions(String filterConditions) {
+        this.filterConditions = filterConditions;
+    }
+
+    public String getExtendedAttributes() {
+        return extendedAttributes;
+    }
+
+    public void setExtendedAttributes(String extendedAttributes) {
+        this.extendedAttributes = extendedAttributes;
+    }
+
+    public String getTriggerCreate() {
+        return triggerCreate;
+    }
+
+    public void setTriggerCreate(String triggerCreate) {
+        this.triggerCreate = triggerCreate;
+    }
+
+    public String getTriggerRetrieve() {
+        return triggerRetrieve;
+    }
+
+    public void setTriggerRetrieve(String triggerRetrieve) {
+        this.triggerRetrieve = triggerRetrieve;
+    }
+
+    public String getTriggerUpdate() {
+        return triggerUpdate;
+    }
+
+    public void setTriggerUpdate(String triggerUpdate) {
+        this.triggerUpdate = triggerUpdate;
+    }
+
+    public String getTriggerDelete() {
+        return triggerDelete;
+    }
+
+    public void setTriggerDelete(String triggerDelete) {
+        this.triggerDelete = triggerDelete;
+    }
+
+    public String getTriggerSubmit() {
+        return triggerSubmit;
+    }
+
+    public void setTriggerSubmit(String triggerSubmit) {
+        this.triggerSubmit = triggerSubmit;
+    }
+
+    public Long getAkColumn() {
+        return akColumn;
+    }
+
+    public void setAkColumn(Long akColumn) {
+        this.akColumn = akColumn;
+    }
+
+    public Long getDkColumn() {
+        return dkColumn;
+    }
+
+    public void setDkColumn(Long dkColumn) {
+        this.dkColumn = dkColumn;
+    }
+
+    public String getIsMenu() {
+        return isMenu;
+    }
+
+    public void setIsMenu(String isMenu) {
+        this.isMenu = isMenu;
+    }
+
+    public String getMenuRole() {
+        return menuRole;
+    }
+
+    public void setMenuRole(String menuRole) {
+        this.menuRole = menuRole;
+    }
+
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    public String getTableName()
+    {
+        return tableName;
+    }
+
+    public void setTableName(String tableName)
+    {
+        this.tableName = tableName;
+    }
+
+    public String getTableComment()
+    {
+        return tableComment;
+    }
+
+    public void setTableComment(String tableComment)
+    {
+        this.tableComment = tableComment;
+    }
+
+    public String getSubTableName()
+    {
+        return subTableName;
+    }
+
+    public void setSubTableName(String subTableName)
+    {
+        this.subTableName = subTableName;
+    }
+
+    public String getSubTableFkName()
+    {
+        return subTableFkName;
+    }
+
+    public void setSubTableFkName(String subTableFkName)
+    {
+        this.subTableFkName = subTableFkName;
+    }
+
+    public String getClassName()
+    {
+        return className;
+    }
+
+    public void setClassName(String className)
+    {
+        this.className = className;
+    }
+
+    public String getTplCategory()
+    {
+        return tplCategory;
+    }
+
+    public void setTplCategory(String tplCategory)
+    {
+        this.tplCategory = tplCategory;
+    }
+
+    public String getPackageName()
+    {
+        return packageName;
+    }
+
+    public void setPackageName(String packageName)
+    {
+        this.packageName = packageName;
+    }
+
+    public String getModuleName()
+    {
+        return moduleName;
+    }
+
+    public void setModuleName(String moduleName)
+    {
+        this.moduleName = moduleName;
+    }
+
+    public String getBusinessName()
+    {
+        return businessName;
+    }
+
+    public void setBusinessName(String businessName)
+    {
+        this.businessName = businessName;
+    }
+
+    public String getFunctionName()
+    {
+        return functionName;
+    }
+
+    public void setFunctionName(String functionName)
+    {
+        this.functionName = functionName;
+    }
+
+    public String getFunctionAuthor()
+    {
+        return functionAuthor;
+    }
+
+    public void setFunctionAuthor(String functionAuthor)
+    {
+        this.functionAuthor = functionAuthor;
+    }
+
+    public String getGenType()
+    {
+        return genType;
+    }
+
+    public void setGenType(String genType)
+    {
+        this.genType = genType;
+    }
+
+    public String getGenPath()
+    {
+        return genPath;
+    }
+
+    public void setGenPath(String genPath)
+    {
+        this.genPath = genPath;
+    }
+
+    public GenTableColumn getPkColumn()
+    {
+        return pkColumn;
+    }
+
+    public void setPkColumn(GenTableColumn pkColumn)
+    {
+        this.pkColumn = pkColumn;
+    }
+
+    public GenTable getSubTable()
+    {
+        return subTable;
+    }
+
+    public void setSubTable(GenTable subTable)
+    {
+        this.subTable = subTable;
+    }
+    public List<GenTableColumn> getColumns()
+    {
+        return columns;
+    }
+
+    public void setColumns(List<GenTableColumn> columns)
+    {
+        this.columns = columns;
+    }
+
+    public String getOptions()
+    {
+        return options;
+    }
+
+    public void setOptions(String options)
+    {
+        this.options = options;
+    }
+
+    public String getTreeCode()
+    {
+        return treeCode;
+    }
+
+    public void setTreeCode(String treeCode)
+    {
+        this.treeCode = treeCode;
+    }
+
+    public String getTreeParentCode()
+    {
+        return treeParentCode;
+    }
+
+    public void setTreeParentCode(String treeParentCode)
+    {
+        this.treeParentCode = treeParentCode;
+    }
+
+    public String getTreeName()
+    {
+        return treeName;
+    }
+
+    public void setTreeName(String treeName)
+    {
+        this.treeName = treeName;
+    }
+
+    public String getParentMenuId()
+    {
+        return parentMenuId;
+    }
+
+    public void setParentMenuId(String parentMenuId)
+    {
+        this.parentMenuId = parentMenuId;
+    }
+
+    public String getParentMenuName()
+    {
+        return parentMenuName;
+    }
+
+    public void setParentMenuName(String parentMenuName)
+    {
+        this.parentMenuName = parentMenuName;
+    }
+
+//    public boolean isSub()
+//    {
+//        return isSub(this.tplCategory);
+//    }
+//
+//    public static boolean isSub(String tplCategory)
+//    {
+//        return tplCategory != null && StringUtils.equals(GenConstants.TPL_SUB, tplCategory);
+//    }
+//    public boolean isTree()
+//    {
+//        return isTree(this.tplCategory);
+//    }
+//
+//    public static boolean isTree(String tplCategory)
+//    {
+//        return tplCategory != null && StringUtils.equals(GenConstants.TPL_TREE, tplCategory);
+//    }
+//
+//    public boolean isCrud()
+//    {
+//        return isCrud(this.tplCategory);
+//    }
+
+//    public static boolean isCrud(String tplCategory)
+//    {
+//        return tplCategory != null && StringUtils.equals(GenConstants.TPL_CRUD, tplCategory);
+//    }
+
+//    public boolean isSuperColumn(String javaField)
+//    {
+//        return isSuperColumn(this.tplCategory, javaField);
+//    }
+
+//    public static boolean isSuperColumn(String tplCategory, String javaField)
+//    {
+//        if (isTree(tplCategory))
+//        {
+//            return StringUtils.equalsAnyIgnoreCase(javaField, ArrayUtils.addAll(GenConstants.TREE_ENTITY, GenConstants.BASE_ENTITY));
+//        }
+//        return StringUtils.equalsAnyIgnoreCase(javaField, GenConstants.BASE_ENTITY);
+//    }
+
+    public List<GenTable> getRelationList() {
+        return relationList;
+    }
+
+    public void setRelationList(List<GenTable> relationList) {
+        this.relationList = relationList;
+    }
+
+    public Boolean getIsContainsBlob() {
+        return isContainsBlob;
+    }
+
+    public void setIsContainsBlob(Boolean isContainsBlob) {
+        this.isContainsBlob = isContainsBlob;
+    }
+}

+ 675 - 0
boman-api/boman-domain/src/main/java/com.boman.domain/GenTableColumn.java

@@ -0,0 +1,675 @@
+package com.boman.domain;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 代码生成业务字段表 gen_table_column
+ *
+ * @author ruoyi
+ */
+public class GenTableColumn extends BaseEntity
+{
+    private static final long serialVersionUID = 1L;
+
+    /** 是查询字段 */
+    public static final String IS_QUERY = "1";
+
+    /** 主键 */
+    public static final String IS_PK = "1";
+
+    /** 必填 */
+    public static final String IS_REQUIRED = "1";
+
+    /** 编号 */
+    private Long id;
+
+    /** 归属表编号 */
+    private Long tableId;
+
+    /** 归属表名 数据库没有此字段*/
+    private String tableName;
+
+    /** 列名称 */
+    private String columnName;
+
+    /** 列描述 */
+    private String columnComment;
+
+    /** 列类型 */
+    private String columnType;
+
+    /** JAVA类型 */
+    private String javaType;
+
+    /** JAVA字段名 */
+    //@NotBlank(message = "Java属性不能为空")
+    private String javaField;
+
+    /** 是否主键(1是) */
+    private String isPk;
+
+    /** 是否自增(1是) */
+    private String isIncrement;
+
+    /** 是否必填(1是) */
+    private String isRequired;
+
+    /** 是否为插入字段(1是) */
+    private String isInsert;
+
+    /** 是否编辑字段(1是) */
+    private String isEdit;
+
+    /** 是否列表字段(1是) */
+    private String isList;
+
+    /** 是否查询字段(1是) */
+    private String isQuery;
+
+    /** 查询方式(EQ等于、NE不等于、GT大于、LT小于、LIKE模糊、BETWEEN范围) */
+    private String queryType;
+
+    /** 显示类型(input文本框、textarea文本域、select下拉框、checkbox复选框、radio单选框、datetime日期控件、image图片上传控件、upload文件上传控件、editor富文本控件) */
+    private String htmlType;
+
+    /**
+     * 外键(表明该表哪个字段是外键,取值id)
+     */
+    private Long foreignKey;
+
+    /**
+     * 外键名称(仅仅给前端展示使用)
+     */
+    private String foreignKeyName;
+
+    /** 字典类型 */
+    private String dictType;
+
+    /** 排序 */
+    private Integer sort;
+
+    /** 如果是下拉框,单选,复选框 对应的子节点的值 */
+    private List<SysDictData> sysDictData;
+
+    /** 哪些字段属于这些hr的 */
+    private Long hrParentId;
+    /**
+     * hr名称(仅仅给前端展示使用)
+     */
+    private String hrParentName;
+
+    /** hr的孩子们 */
+    private List<GenTableColumn> hrChildren;
+
+    /**
+     * 字段排序规则
+     */
+    private String mask;
+    /**
+     * 默认值
+     */
+    private String defaultValue;
+
+    /**
+     * 行数
+     */
+    private String numRows;
+    /**
+     * 列数
+     */
+    private String numColumns;
+
+    /**
+     * 字段翻译器
+     */
+    private String fieldTranslator;
+
+    /**
+     * 扩展属性 eg:{"col":["start_time","end_time"],"comp":"end_time-start_time"}
+     */
+    private String extendedAttributes;
+
+    /**
+     *是否输入 Y是
+     */
+    private String isIn;
+
+    /**
+     * 是否显示 Y是
+     */
+    private String isOut;
+
+    /**
+     * 此列对应的值
+     */
+    private Object columnValue;
+
+    /**
+     * 正则表达式
+     */
+    private String regular;
+
+    /**
+     * readonly, 前端回显的时候,判断是否可编辑
+     */
+    private boolean readonly;
+
+    /**
+     * 查询时:{"fkTableName":"外键表的表名", "fkColumnName":"关联外键表的列名", "dkColumnName":"关联表需要展示的字段名"}
+     * 根据列名获取关联表字段的值和名称{"name":"12", "value":"dept_id"}
+     */
+    private Map<String, Object> fkInfo;
+
+    private List<SysFile> annex;
+
+    /**
+     * 前端单对象展示样式
+     */
+    private String cssClass;
+    /**
+     * 表.字段全称
+     */
+    private String tableColumnName;
+    /**
+     * 前端再计算的时候,是否用到该列的扩展属性 extendedAttributes
+     */
+    private Boolean isUseExtend;
+    /**
+     * 单据编号规则表名称
+     */
+    private String seqName;
+
+    public String getSeqName() {
+        return seqName;
+    }
+
+    public void setSeqName(String seqName) {
+        this.seqName = seqName;
+    }
+
+    public Boolean getIsUseExtend() {
+        return isUseExtend;
+    }
+
+    public void setIsUseExtend(Boolean isUseExtend) {
+        this.isUseExtend = isUseExtend;
+    }
+
+    public String getTableColumnName() {
+        return tableColumnName;
+    }
+
+    public void setTableColumnName(String tableColumnName) {
+        this.tableColumnName = tableColumnName;
+    }
+
+    public String getCssClass() {
+        return cssClass;
+    }
+
+    public void setCssClass(String cssClass) {
+        this.cssClass = cssClass;
+    }
+
+    public List<SysFile> getAnnex() {
+        return annex;
+    }
+
+    public void setAnnex(List<SysFile> annex) {
+        this.annex = annex;
+    }
+
+    public Map<String, Object> getFkInfo() {
+        return fkInfo;
+    }
+
+    public void setFkInfo(Map<String, Object> fkInfo) {
+        this.fkInfo = fkInfo;
+    }
+
+    public String getRegular() {
+        return regular;
+    }
+
+    public void setRegular(String regular) {
+        this.regular = regular;
+    }
+
+    public String getFieldTranslator() {
+        return fieldTranslator;
+    }
+
+    public void setFieldTranslator(String fieldTranslator) {
+        this.fieldTranslator = fieldTranslator;
+    }
+
+    public String getExtendedAttributes() {
+        return extendedAttributes;
+    }
+
+    public void setExtendedAttributes(String extendedAttributes) {
+        this.extendedAttributes = extendedAttributes;
+    }
+
+    public String getIsIn() {
+        return isIn;
+    }
+
+    public void setIsIn(String isIn) {
+        this.isIn = isIn;
+    }
+
+    public String getIsOut() {
+        return isOut;
+    }
+
+    public void setIsOut(String isOut) {
+        this.isOut = isOut;
+    }
+
+    public String getMask() {
+        return mask;
+    }
+
+    public void setMask(String mask) {
+        this.mask = mask;
+    }
+
+    public String getDefaultValue() {
+        return defaultValue;
+    }
+
+    public void setDefaultValue(String defaultValue) {
+        this.defaultValue = defaultValue;
+    }
+
+    public String getNumRows() {
+        return numRows;
+    }
+
+    public void setNumRows(String numRows) {
+        this.numRows = numRows;
+    }
+
+    public String getNumColumns() {
+        return numColumns;
+    }
+
+    public void setNumColumns(String numColumns) {
+        this.numColumns = numColumns;
+    }
+
+    public Long getForeignKey() {
+        return foreignKey;
+    }
+
+    public void setForeignKey(Long foreignKey) {
+        this.foreignKey = foreignKey;
+    }
+
+    public String getForeignKeyName() {
+        return foreignKeyName;
+    }
+
+    public void setForeignKeyName(String foreignKeyName) {
+        this.foreignKeyName = foreignKeyName;
+    }
+
+    public String getHrParentName() {
+        return hrParentName;
+    }
+
+    public void setHrParentName(String hrParentName) {
+        this.hrParentName = hrParentName;
+    }
+
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    public void setTableId(Long tableId)
+    {
+        this.tableId = tableId;
+    }
+
+    public Long getTableId()
+    {
+        return tableId;
+    }
+
+    public void setColumnName(String columnName)
+    {
+        this.columnName = columnName;
+    }
+
+    public String getColumnName()
+    {
+        return columnName;
+    }
+
+    public void setColumnComment(String columnComment)
+    {
+        this.columnComment = columnComment;
+    }
+
+    public String getColumnComment()
+    {
+        return columnComment;
+    }
+
+    public void setColumnType(String columnType)
+    {
+        this.columnType = columnType;
+    }
+
+    public String getColumnType()
+    {
+        return columnType;
+    }
+
+    public void setJavaType(String javaType)
+    {
+        this.javaType = javaType;
+    }
+
+    public String getJavaType()
+    {
+        return javaType;
+    }
+
+    public void setJavaField(String javaField)
+    {
+        this.javaField = javaField;
+    }
+
+    public String getJavaField()
+    {
+        return javaField;
+    }
+
+//    public String getCapJavaField()
+//    {
+//        return StringUtils.capitalize(javaField);
+//    }
+
+    public void setIsPk(String isPk)
+    {
+        this.isPk = isPk;
+    }
+
+    public String getIsPk()
+    {
+        return isPk;
+    }
+
+//    public boolean isPk()
+//    {
+//        return isPk(this.isPk);
+//    }
+
+//    public boolean isPk(String isPk)
+//    {
+//        return isPk != null && StringUtils.equals("1", isPk);
+//    }
+
+    public String getIsIncrement()
+    {
+        return isIncrement;
+    }
+
+    public void setIsIncrement(String isIncrement)
+    {
+        this.isIncrement = isIncrement;
+    }
+
+//    public boolean isIncrement()
+//    {
+//        return isIncrement(this.isIncrement);
+//    }
+
+//    public boolean isIncrement(String isIncrement)
+//    {
+//        return isIncrement != null && StringUtils.equals("1", isIncrement);
+//    }
+
+    public void setIsRequired(String isRequired)
+    {
+        this.isRequired = isRequired;
+    }
+
+    public String getIsRequired()
+    {
+        return isRequired;
+    }
+
+//    public boolean isRequired()
+//    {
+//        return isRequired(this.isRequired);
+//    }
+
+//    public boolean isRequired(String isRequired)
+//    {
+//        return isRequired != null && StringUtils.equals("1", isRequired);
+//    }
+
+    public void setIsInsert(String isInsert)
+    {
+        this.isInsert = isInsert;
+    }
+
+    public String getIsInsert()
+    {
+        return isInsert;
+    }
+
+//    public boolean isInsert()
+//    {
+//        return isInsert(this.isInsert);
+//    }
+
+//    public boolean isInsert(String isInsert)
+//    {
+//        return isInsert != null && StringUtils.equals("1", isInsert);
+//    }
+
+    public void setIsEdit(String isEdit)
+    {
+        this.isEdit = isEdit;
+    }
+
+    public String getIsEdit()
+    {
+        return isEdit;
+    }
+
+//    public boolean isEdit()
+//    {
+//        return isInsert(this.isEdit);
+//    }
+
+//    public boolean isEdit(String isEdit)
+//    {
+//        return isEdit != null && StringUtils.equals("1", isEdit);
+//    }
+
+    public void setIsList(String isList)
+    {
+        this.isList = isList;
+    }
+
+    public String getIsList()
+    {
+        return isList;
+    }
+
+//    public boolean isList()
+//    {
+//        return isList(this.isList);
+//    }
+//
+//    public boolean isList(String isList)
+//    {
+//        return isList != null && StringUtils.equals("1", isList);
+//    }
+
+    public void setIsQuery(String isQuery)
+    {
+        this.isQuery = isQuery;
+    }
+
+    public String getIsQuery()
+    {
+        return isQuery;
+    }
+
+//    public boolean isQuery()
+//    {
+//        return isQuery(this.isQuery);
+//    }
+
+//    public boolean isQuery(String isQuery)
+//    {
+//        return isQuery != null && StringUtils.equals("1", isQuery);
+//    }
+
+    public void setQueryType(String queryType)
+    {
+        this.queryType = queryType;
+    }
+
+    public String getQueryType()
+    {
+        return queryType;
+    }
+
+    public String getHtmlType()
+    {
+        return htmlType;
+    }
+
+    public void setHtmlType(String htmlType)
+    {
+        this.htmlType = htmlType;
+    }
+
+    public void setDictType(String dictType)
+    {
+        this.dictType = dictType;
+    }
+
+    public String getDictType()
+    {
+        return dictType;
+    }
+
+    public void setSort(Integer sort)
+    {
+        this.sort = sort;
+    }
+
+    public Integer getSort()
+    {
+        return sort;
+    }
+
+//    public boolean isSuperColumn()
+//    {
+//        return isSuperColumn(this.javaField);
+//    }
+//
+//    public static boolean isSuperColumn(String javaField)
+//    {
+//        return StringUtils.equalsAnyIgnoreCase(javaField,
+//                // BaseEntity
+//                "createBy", "createTime", "updateBy", "updateTime", "remark",
+//                // TreeEntity
+//                "parentName", "parentId", "orderNum", "ancestors");
+//    }
+
+//    public boolean isUsableColumn()
+//    {
+//        return isUsableColumn(javaField);
+//    }
+
+//    public static boolean isUsableColumn(String javaField)
+//    {
+//        // isSuperColumn()中的名单用于避免生成多余Domain属性,若某些属性在生成页面时需要用到不能忽略,则放在此处白名单
+//        return StringUtils.equalsAnyIgnoreCase(javaField, "parentId", "orderNum", "remark");
+//    }
+
+//    public String readConverterExp()
+//    {
+//        String remarks = StringUtils.substringBetween(this.columnComment, "(", ")");
+//        StringBuffer sb = new StringBuffer();
+//        if (StringUtils.isNotEmpty(remarks))
+//        {
+//            for (String value : remarks.split(" "))
+//            {
+//                if (StringUtils.isNotEmpty(value))
+//                {
+//                    Object startStr = value.subSequence(0, 1);
+//                    String endStr = value.substring(1);
+//                    sb.append("").append(startStr).append("=").append(endStr).append(",");
+//                }
+//            }
+//            return sb.deleteCharAt(sb.length() - 1).toString();
+//        }
+//        else
+//        {
+//            return this.columnComment;
+//        }
+//    }
+
+    public List<SysDictData> getSysDictData() {
+        return sysDictData;
+    }
+
+    public void setSysDictData(List<SysDictData> sysDictData) {
+        this.sysDictData = sysDictData;
+    }
+
+    public Long getHrParentId() {
+        return hrParentId;
+    }
+
+    public void setHrParentId(Long hrParentId) {
+        this.hrParentId = hrParentId;
+    }
+
+    public List<GenTableColumn> getHrChildren() {
+        return hrChildren;
+    }
+
+    public void setHrChildren(List<GenTableColumn> hrChildren) {
+        this.hrChildren = hrChildren;
+    }
+
+    public String getTableName() {
+        return tableName;
+    }
+
+    public void setTableName(String tableName) {
+        this.tableName = tableName;
+    }
+
+    public Object getColumnValue() {
+        return columnValue;
+    }
+
+    public void setColumnValue(Object columnValue) {
+        this.columnValue = columnValue;
+    }
+
+    public boolean isReadonly() {
+        return readonly;
+    }
+
+    public void setReadonly(boolean readonly) {
+        this.readonly = readonly;
+    }
+}

+ 166 - 0
boman-api/boman-domain/src/main/java/com.boman.domain/GenTableRelation.java

@@ -0,0 +1,166 @@
+package com.boman.domain;
+
+
+/**
+ * @author tjf
+ * @Date: 2021/03/25/16:04
+ */
+public class GenTableRelation extends BaseEntity {
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 主键
+     */
+    private Long id;
+
+    /**
+     * 描述(tap页显示的名称)
+     */
+    private String description;
+
+    /**
+     * 关联表(gen_table的id)
+     */
+    private Long relationParentId;
+
+    /**
+     * 字段(关联主表PK gen_table_column的id)
+     */
+    private Long relationChildId;
+
+    /**
+     *关联方式(1:1 1:N 取值字典表)
+     */
+    private Long relationType;
+
+    /**
+     * 内嵌查询
+     */
+    private Long embedEdit;
+
+    /**
+     * 显示条件
+     */
+    private String displayConditions;
+
+    /**
+     * 排序
+     */
+    private Long sort;
+
+    /**
+     * 是否删除(Y是)
+     */
+    private String isDel;
+    /**
+     * 字段名称
+     */
+    private String columnName;
+
+    /**
+     * 表名称
+     */
+    private String tableName;
+
+    public String getColumnName() {
+        return columnName;
+    }
+
+    public void setColumnName(String columnName) {
+        this.columnName = columnName;
+    }
+
+    public String getTableName() {
+        return tableName;
+    }
+
+    public void setTableName(String tableName) {
+        this.tableName = tableName;
+    }
+
+    public Long getEmbedEdit() {
+        return embedEdit;
+    }
+
+    public void setEmbedEdit(Long embedEdit) {
+        this.embedEdit = embedEdit;
+    }
+
+    public String getDisplayConditions() {
+        return displayConditions;
+    }
+
+    public void setDisplayConditions(String displayConditions) {
+        this.displayConditions = displayConditions;
+    }
+
+    public Long getSort() {
+        return sort;
+    }
+
+    public void setSort(Long sort) {
+        this.sort = sort;
+    }
+
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    public String getDescription() {
+        return description;
+    }
+
+    public void setDescription(String description) {
+        this.description = description;
+    }
+
+    public Long getRelationParentId() {
+        return relationParentId;
+    }
+
+    public void setRelationParentId(Long relationParentId) {
+        this.relationParentId = relationParentId;
+    }
+
+    public Long getRelationChildId() {
+        return relationChildId;
+    }
+
+    public void setRelationChildId(Long relationChildId) {
+        this.relationChildId = relationChildId;
+    }
+
+    public Long getRelationType() {
+        return relationType;
+    }
+
+    public void setRelationType(Long relationType) {
+        this.relationType = relationType;
+    }
+
+    public String getIsDel() {
+        return isDel;
+    }
+
+    public void setIsDel(String isDel) {
+        this.isDel = isDel;
+    }
+
+
+    @Override
+    public String toString() {
+        return "GenTableRelation{" +
+                "id=" + id +
+                ", description='" + description + '\'' +
+                ", relationParentId=" + relationParentId +
+                ", relationChildId=" + relationChildId +
+                ", relationType=" + relationType +
+                ", sort=" + sort +
+                ", isDel='" + isDel + '\'' +
+                '}';
+    }
+}

+ 141 - 0
boman-api/boman-domain/src/main/java/com.boman.domain/RoleEnum.java

@@ -0,0 +1,141 @@
+package com.boman.domain;
+
+import java.util.*;
+import java.util.stream.Collectors;
+
+/**
+ * @author tjf
+ * @Date: 2021/04/22/15:16
+ */
+public enum RoleEnum {
+
+    /** 新增 */
+    A("A","新增"),
+    /** 修改 */
+    M("M","修改"),
+    /** 删除 */
+    D("D","删除"),
+    /** 查询 */
+    Q("Q","查询"),
+    /** 提交 */
+    S("S","提交"),
+    /** 反提交 */
+    U("U","反提交"),
+    /** 导入 */
+    I("I","导入"),
+    /** 导出 */
+    E("E","导出");
+
+    private final String role;
+    private final String name;
+
+    RoleEnum(String role, String name) {
+        this.role = role;
+        this.name = name;
+    }
+
+    public String getRole() {
+        return role;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    /**
+     *
+     * @param role
+     * @return
+     */
+    public static String getValue(String role) {
+        if(null != role){
+            for(RoleEnum roleEnum : RoleEnum.values()){
+                if(role.equals(roleEnum.getRole())){
+                    return roleEnum.getName();
+                }
+            }
+        }
+        return null;
+    }
+
+    /**
+     * 功能描述: 拿到所有的名称 eg: 新增、修改.....
+     *
+     * @param
+     * @return java.util.List<java.lang.String>
+     */
+    public static List<String> names(){
+        RoleEnum[] values = RoleEnum.values();
+        return Arrays.stream(values).map(RoleEnum::getName).collect(Collectors.toList());
+    }
+
+    /**
+     * 功能描述: 拿到所有的roles, 顺序很重要
+     * eg: A、M.....
+     *
+     * @return java.util.List<java.lang.String>
+     */
+    public static List<String> roles(){
+        RoleEnum[] values = RoleEnum.values();
+        return Arrays.stream(values).map(RoleEnum::getRole).collect(Collectors.toList());
+    }
+
+    /**
+     * 功能描述: 拿到所有的roles eg: A、M.....
+     *
+     * @return java.util.List<java.lang.String>
+     */
+    public static List<Map<String, String>> all() {
+        RoleEnum[] values = RoleEnum.values();
+        List<Map<String, String>> result = new ArrayList<>(values.length);
+        for (RoleEnum value : values) {
+            Map<String, String> map = new HashMap<>(2);
+            map.put("name", value.name);
+            map.put("role", value.role);
+            result.add(map);
+        }
+        return result;
+    }
+
+   /**
+    * 功能描述: 拿到所有的roles eg: A、M.....
+    *
+    * @return java.util.List<java.util.Map<java.lang.String,java.lang.Object>>
+    */
+    public static List<Map<String, Object>> initData() {
+        List<String> roles = roles();
+        List<Map<String, Object>> result = new ArrayList<>(roles.size());
+        for (String role : roles) {
+            Map<String, Object> jsonObject = new HashMap<>(2);
+            jsonObject.put("name", role);
+            jsonObject.put("type", "0");
+            result.add(jsonObject);
+        }
+
+        return result;
+    }
+
+   /**
+    * 功能描述: 新配的角色,点选菜单,判断菜单对应的表的menuRole
+    *
+    * @param btnList 点选菜单,判断菜单对应的表的menuRoleList
+    * @return java.util.List<java.util.Map<java.lang.String,java.lang.Object>>
+    */
+    public static List<Map<String, Object>> initDataByBtnList(List<String> btnList) {
+        List<String> roles = roles();
+        List<Map<String, Object>> result = new ArrayList<>(roles.size());
+        for (String role : roles) {
+            Map<String, Object> jsonObject = new HashMap<>(2);
+            jsonObject.put("name", role);
+            if (btnList.contains(role)) {
+                // 显示框框,但是不勾选
+                jsonObject.put("type", false);
+            } else {
+                jsonObject.put("type", "0");
+            }
+            result.add(jsonObject);
+        }
+
+        return result;
+    }
+}

+ 200 - 0
boman-api/boman-domain/src/main/java/com.boman.domain/SysDept.java

@@ -0,0 +1,200 @@
+package com.boman.domain;
+
+import java.util.ArrayList;
+import java.util.List;
+import javax.validation.constraints.Email;
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.Size;
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
+import com.boman.domain.BaseEntity;
+
+/**
+ * 部门表 sys_dept
+ * 
+ * @author ruoyi
+ */
+public class SysDept extends BaseEntity
+{
+    private static final long serialVersionUID = 1L;
+
+    /** 部门ID */
+    private Long id;
+
+    /** 父部门ID */
+    private Long parentId;
+
+    /** 祖级列表 */
+    private String ancestors;
+
+    /** 部门名称 */
+    private String deptName;
+
+    /** 显示顺序 */
+    private String orderNum;
+
+    /** 负责人 */
+    private String leader;
+
+    /** 联系电话 */
+    private String phone;
+
+    /** 邮箱 */
+    private String email;
+
+    /** 部门状态:0正常,1停用 */
+    private String status;
+
+    /** 删除标志(0代表存在 2代表删除) */
+    private String delFlag;
+
+    /** 父部门名称 */
+    private String parentName;
+    
+    /** 子部门 */
+    private List<SysDept> children = new ArrayList<SysDept>();
+
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    public Long getParentId()
+    {
+        return parentId;
+    }
+
+    public void setParentId(Long parentId)
+    {
+        this.parentId = parentId;
+    }
+
+    public String getAncestors()
+    {
+        return ancestors;
+    }
+
+    public void setAncestors(String ancestors)
+    {
+        this.ancestors = ancestors;
+    }
+
+    @NotBlank(message = "部门名称不能为空")
+    @Size(min = 0, max = 30, message = "部门名称长度不能超过30个字符")
+    public String getDeptName()
+    {
+        return deptName;
+    }
+
+    public void setDeptName(String deptName)
+    {
+        this.deptName = deptName;
+    }
+
+    @NotBlank(message = "显示顺序不能为空")
+    public String getOrderNum()
+    {
+        return orderNum;
+    }
+
+    public void setOrderNum(String orderNum)
+    {
+        this.orderNum = orderNum;
+    }
+
+    public String getLeader()
+    {
+        return leader;
+    }
+
+    public void setLeader(String leader)
+    {
+        this.leader = leader;
+    }
+
+    @Size(min = 0, max = 11, message = "联系电话长度不能超过11个字符")
+    public String getPhone()
+    {
+        return phone;
+    }
+
+    public void setPhone(String phone)
+    {
+        this.phone = phone;
+    }
+
+    @Email(message = "邮箱格式不正确")
+    @Size(min = 0, max = 50, message = "邮箱长度不能超过50个字符")
+    public String getEmail()
+    {
+        return email;
+    }
+
+    public void setEmail(String email)
+    {
+        this.email = email;
+    }
+
+    public String getStatus()
+    {
+        return status;
+    }
+
+    public void setStatus(String status)
+    {
+        this.status = status;
+    }
+
+    public String getDelFlag()
+    {
+        return delFlag;
+    }
+
+    public void setDelFlag(String delFlag)
+    {
+        this.delFlag = delFlag;
+    }
+
+    public String getParentName()
+    {
+        return parentName;
+    }
+
+    public void setParentName(String parentName)
+    {
+        this.parentName = parentName;
+    }
+
+    public List<SysDept> getChildren()
+    {
+        return children;
+    }
+
+    public void setChildren(List<SysDept> children)
+    {
+        this.children = children;
+    }
+
+    @Override
+    public String toString() {
+        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
+            .append("id", getId())
+            .append("parentId", getParentId())
+            .append("ancestors", getAncestors())
+            .append("deptName", getDeptName())
+            .append("orderNum", getOrderNum())
+            .append("leader", getLeader())
+            .append("phone", getPhone())
+            .append("email", getEmail())
+            .append("status", getStatus())
+            .append("delFlag", getDelFlag())
+            .append("createBy", getCreateBy())
+            .append("createTime", getCreateTime())
+            .append("updateBy", getUpdateBy())
+            .append("updateTime", getUpdateTime())
+            .toString();
+    }
+}

+ 170 - 0
boman-api/boman-domain/src/main/java/com.boman.domain/SysDictData.java

@@ -0,0 +1,170 @@
+package com.boman.domain;
+
+import com.boman.domain.annotation.Excel;
+import com.boman.domain.constant.UserConstants;
+
+/**
+ * 字典数据表 sys_dict_data
+ * 
+ * @author ruoyi
+ */
+public class SysDictData extends BaseEntity
+{
+    private static final long serialVersionUID = 1L;
+
+    /** 字典编码 */
+//    @Excel(name = "字典编码", cellType = ColumnType.NUMERIC)
+    private Long id;
+
+    /** 字典排序 */
+    @Excel(name = "字典排序", cellType = Excel.ColumnType.NUMERIC)
+    private Long dictSort;
+
+    /** 字典标签 */
+    @Excel(name = "字典标签")
+    private String dictLabel;
+
+    /** 字典键值 */
+    @Excel(name = "字典键值")
+    private String dictValue;
+
+    /** 字典类型 */
+//    @Excel(name = "字典类型")
+    private String dictType;
+
+    /** 样式属性(其他样式扩展) */
+    private String cssClass;
+
+    /** 表格字典样式 */
+    private String listClass;
+
+    /** 是否默认(Y是 N否) */
+//    @Excel(name = "是否默认", readConverterExp = "Y=是,N=否")
+    private String isDefault;
+
+    /** 状态(0正常 1停用) */
+//    @Excel(name = "状态", readConverterExp = "0=正常,1=停用")
+    private String status;
+
+    public Long getId()
+    {
+        return id;
+    }
+
+    public void setId(Long id)
+    {
+        this.id = id;
+    }
+
+    public Long getDictSort()
+    {
+        return dictSort;
+    }
+
+    public void setDictSort(Long dictSort)
+    {
+        this.dictSort = dictSort;
+    }
+
+//    @NotBlank(message = "字典标签不能为空")
+//    @Size(min = 0, max = 100, message = "字典标签长度不能超过100个字符")
+    public String getDictLabel()
+    {
+        return dictLabel;
+    }
+
+    public void setDictLabel(String dictLabel)
+    {
+        this.dictLabel = dictLabel;
+    }
+
+//    @NotBlank(message = "字典键值不能为空")
+//    @Size(min = 0, max = 100, message = "字典键值长度不能超过100个字符")
+    public String getDictValue()
+    {
+        return dictValue;
+    }
+
+    public void setDictValue(String dictValue)
+    {
+        this.dictValue = dictValue;
+    }
+
+//    @NotBlank(message = "字典类型不能为空")
+//    @Size(min = 0, max = 100, message = "字典类型长度不能超过100个字符")
+    public String getDictType()
+    {
+        return dictType;
+    }
+
+    public void setDictType(String dictType)
+    {
+        this.dictType = dictType;
+    }
+
+//    @Size(min = 0, max = 100, message = "样式属性长度不能超过100个字符")
+    public String getCssClass()
+    {
+        return cssClass;
+    }
+
+    public void setCssClass(String cssClass)
+    {
+        this.cssClass = cssClass;
+    }
+
+    public String getListClass()
+    {
+        return listClass;
+    }
+
+    public void setListClass(String listClass)
+    {
+        this.listClass = listClass;
+    }
+
+//    public boolean getDefault()
+//    {
+//        return UserConstants.YES.equals(this.isDefault) ? true : false;
+//    }
+
+    public String getIsDefault()
+    {
+        return isDefault;
+    }
+
+    public void setIsDefault(String isDefault)
+    {
+        this.isDefault = isDefault;
+    }
+
+    public String getStatus()
+    {
+        return status;
+    }
+
+    public void setStatus(String status)
+    {
+        this.status = status;
+    }
+    
+//    @Override
+//    public String toString() {
+//        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
+//            .append("id", getId())
+//            .append("dictSort", getDictSort())
+//            .append("dictLabel", getDictLabel())
+//            .append("dictValue", getDictValue())
+//            .append("dictType", getDictType())
+//            .append("cssClass", getCssClass())
+//            .append("listClass", getListClass())
+//            .append("isDefault", getIsDefault())
+//            .append("status", getStatus())
+//            .append("createBy", getCreateBy())
+//            .append("createTime", getCreateTime())
+//            .append("updateBy", getUpdateBy())
+//            .append("updateTime", getUpdateTime())
+//            .append("remark", getRemark())
+//            .toString();
+//    }
+}

+ 66 - 0
boman-api/boman-domain/src/main/java/com.boman.domain/SysFile.java

@@ -0,0 +1,66 @@
+package com.boman.domain;
+
+/**
+ * 文件信息
+ * 
+ * @author ruoyi
+ */
+public class SysFile
+{
+    /**
+     * 文件名称
+     */
+    private String name;
+
+    /**
+     * 文件地址
+     */
+    private String url;
+
+    /**
+     * vue上传组件带的 为了取的时候不要来回去转,直接用此接受
+     */
+    private String status;
+
+    /**
+     * vue上传组件带的
+     */
+    private String uid;
+
+    public String getName()
+    {
+        return name;
+    }
+
+    public void setName(String name)
+    {
+        this.name = name;
+    }
+
+    public String getUrl()
+    {
+        return url;
+    }
+
+    public void setUrl(String url)
+    {
+        this.url = url;
+    }
+
+    public String getStatus() {
+        return status;
+    }
+
+    public void setStatus(String status) {
+        this.status = status;
+    }
+
+    public String getUid() {
+        return uid;
+    }
+
+    public void setUid(String uid) {
+        this.uid = uid;
+    }
+
+}

+ 292 - 0
boman-api/boman-domain/src/main/java/com.boman.domain/SysMenu.java

@@ -0,0 +1,292 @@
+package com.boman.domain;
+
+import com.boman.domain.BaseEntity;
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.Size;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 菜单权限表 sys_menu
+ * 
+ * @author ruoyi
+ */
+public class SysMenu extends BaseEntity
+{
+    private static final long serialVersionUID = 1L;
+
+    /** 目录*/
+    public static final String DICTIONARY = "M";
+    /** 菜单*/
+    public static final String MENU = "C";
+    /** 按钮*/
+    public static final String BUTTON = "F";
+
+    /** 菜单ID */
+    private Long id;
+
+    /** 菜单名称 */
+    private String menuName;
+
+    /** 父菜单名称 */
+    private String parentName;
+
+    /** 父菜单ID */
+    private Long parentId;
+
+    /** 显示顺序 */
+    private String orderNum;
+
+    /** 路由地址 */
+    private String path;
+
+    /** 组件路径 */
+    private String component;
+
+    /** 是否为外链(0是 1否) */
+    private String isFrame;
+
+    /** 是否缓存(0缓存 1不缓存) */
+    private String isCache;
+
+    /** 类型(M目录 C菜单 F按钮) */
+    private String menuType;
+
+    /** 显示状态(0显示 1隐藏) */
+    private String visible;
+    
+    /** 菜单状态(0显示 1隐藏) */
+    private String status;
+
+    /** 权限字符串 */
+    private String perms;
+
+    /** 菜单图标 */
+    private String icon;
+
+    /** 子菜单 */
+    private List<SysMenu> children = new ArrayList<SysMenu>();
+
+    /** 父级菜单 */
+    private SysMenu parent;
+    /**
+     * 对应的表名称
+     */
+    private String sysTableName;
+
+    /**
+     * true 此表中有此菜单并且选中
+     * false 此表中有此菜单,但是未选择
+     * 0 此表中无此菜单
+     */
+    private List<Map<String, Object>> containsHead;
+
+    public List<Map<String, Object>> getContainsHead() {
+        return containsHead;
+    }
+
+    public void setContainsHead(List<Map<String, Object>> containsHead) {
+        this.containsHead = containsHead;
+    }
+
+    public SysMenu getParent() {
+        return parent;
+    }
+
+    public void setParent(SysMenu parent) {
+        this.parent = parent;
+    }
+
+    public String getSysTableName() {
+        return sysTableName;
+    }
+
+    public void setSysTableName(String sysTableName) {
+        this.sysTableName = sysTableName;
+    }
+
+    public Long getId()
+    {
+        return id;
+    }
+
+    public void setId(Long id)
+    {
+        this.id = id;
+    }
+
+    @NotBlank(message = "菜单名称不能为空")
+    @Size(min = 0, max = 50, message = "菜单名称长度不能超过50个字符")
+    public String getMenuName()
+    {
+        return menuName;
+    }
+
+    public void setMenuName(String menuName)
+    {
+        this.menuName = menuName;
+    }
+
+    public String getParentName()
+    {
+        return parentName;
+    }
+
+    public void setParentName(String parentName)
+    {
+        this.parentName = parentName;
+    }
+
+    public Long getParentId()
+    {
+        return parentId;
+    }
+
+    public void setParentId(Long parentId)
+    {
+        this.parentId = parentId;
+    }
+
+    @NotBlank(message = "显示顺序不能为空")
+    public String getOrderNum()
+    {
+        return orderNum;
+    }
+
+    public void setOrderNum(String orderNum)
+    {
+        this.orderNum = orderNum;
+    }
+
+    @Size(min = 0, max = 200, message = "路由地址不能超过200个字符")
+    public String getPath()
+    {
+        return path;
+    }
+
+    public void setPath(String path)
+    {
+        this.path = path;
+    }
+
+    @Size(min = 0, max = 200, message = "组件路径不能超过255个字符")
+    public String getComponent()
+    {
+        return component;
+    }
+
+    public void setComponent(String component)
+    {
+        this.component = component;
+    }
+
+    public String getIsFrame()
+    {
+        return isFrame;
+    }
+
+    public void setIsFrame(String isFrame)
+    {
+        this.isFrame = isFrame;
+    }
+
+    public String getIsCache()
+    {
+        return isCache;
+    }
+
+    public void setIsCache(String isCache)
+    {
+        this.isCache = isCache;
+    }
+
+    @NotBlank(message = "菜单类型不能为空")
+    public String getMenuType()
+    {
+        return menuType;
+    }
+
+    public void setMenuType(String menuType)
+    {
+        this.menuType = menuType;
+    }
+
+    public String getVisible()
+    {
+        return visible;
+    }
+
+    public void setVisible(String visible)
+    {
+        this.visible = visible;
+    }
+
+    public String getStatus()
+    {
+        return status;
+    }
+
+    public void setStatus(String status)
+    {
+        this.status = status;
+    }
+
+    @Size(min = 0, max = 100, message = "权限标识长度不能超过100个字符")
+    public String getPerms()
+    {
+        return perms;
+    }
+
+    public void setPerms(String perms)
+    {
+        this.perms = perms;
+    }
+
+    public String getIcon()
+    {
+        return icon;
+    }
+
+    public void setIcon(String icon)
+    {
+        this.icon = icon;
+    }
+
+    public List<SysMenu> getChildren()
+    {
+        return children;
+    }
+
+    public void setChildren(List<SysMenu> children)
+    {
+        this.children = children;
+    }
+    
+    @Override
+    public String toString() {
+        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
+            .append("id", getId())
+            .append("menuName", getMenuName())
+            .append("parentId", getParentId())
+            .append("orderNum", getOrderNum())
+            .append("path", getPath())
+            .append("component", getComponent())
+            .append("isFrame", getIsFrame())
+            .append("IsCache", getIsCache())
+            .append("menuType", getMenuType())
+            .append("visible", getVisible())
+            .append("status ", getStatus())
+            .append("perms", getPerms())
+            .append("icon", getIcon())
+            .append("createBy", getCreateBy())
+            .append("createTime", getCreateTime())
+            .append("updateBy", getUpdateBy())
+            .append("updateTime", getUpdateTime())
+            .append("remark", getRemark())
+            .toString();
+    }
+}

+ 241 - 0
boman-api/boman-domain/src/main/java/com.boman.domain/SysOperLog.java

@@ -0,0 +1,241 @@
+package com.boman.domain;
+
+import java.util.Date;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.boman.domain.annotation.Excel;
+import com.boman.domain.annotation.Excel.ColumnType;
+import com.boman.domain.BaseEntity;
+
+/**
+ * 操作日志记录表 oper_log
+ * 
+ * @author ruoyi
+ */
+public class SysOperLog extends BaseEntity
+{
+    private static final long serialVersionUID = 1L;
+
+    /** 日志主键 */
+    @Excel(name = "操作序号", cellType = ColumnType.NUMERIC)
+    private Long id;
+
+    /** 操作模块 */
+    @Excel(name = "操作模块")
+    private String title;
+
+    /** 业务类型(0其它 1新增 2修改 3删除) */
+    @Excel(name = "业务类型", readConverterExp = "0=其它,1=新增,2=修改,3=删除,4=授权,5=导出,6=导入,7=强退,8=生成代码,9=清空数据")
+    private Integer businessType;
+
+    /** 业务类型数组 */
+    private Integer[] businessTypes;
+
+    /** 请求方法 */
+    @Excel(name = "请求方法")
+    private String method;
+
+    /** 请求方式 */
+    @Excel(name = "请求方式")
+    private String requestMethod;
+
+    /** 操作类别(0其它 1后台用户 2手机端用户) */
+    @Excel(name = "操作类别", readConverterExp = "0=其它,1=后台用户,2=手机端用户")
+    private Integer operatorType;
+
+    /** 操作人员 */
+    @Excel(name = "操作人员")
+    private String operName;
+
+    /** 部门名称 */
+    @Excel(name = "部门名称")
+    private String deptName;
+
+    /** 请求url */
+    @Excel(name = "请求地址")
+    private String operUrl;
+
+    /** 操作地址 */
+    @Excel(name = "操作地址")
+    private String operIp;
+
+    /** 请求参数 */
+    @Excel(name = "请求参数")
+    private String operParam;
+
+    /** 返回参数 */
+    @Excel(name = "返回参数")
+    private String jsonResult;
+
+    /** 操作状态(0正常 1异常) */
+    @Excel(name = "状态", readConverterExp = "0=正常,1=异常")
+    private Integer status;
+
+    /** 错误消息 */
+    @Excel(name = "错误消息")
+    private String errorMsg;
+
+    /** 操作时间 */
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @Excel(name = "操作时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
+    private Date operTime;
+
+    public Long getid()
+    {
+        return id;
+    }
+
+    public void setid(Long id)
+    {
+        this.id = id;
+    }
+
+    public String getTitle()
+    {
+        return title;
+    }
+
+    public void setTitle(String title)
+    {
+        this.title = title;
+    }
+
+    public Integer getBusinessType()
+    {
+        return businessType;
+    }
+
+    public void setBusinessType(Integer businessType)
+    {
+        this.businessType = businessType;
+    }
+
+    public Integer[] getBusinessTypes()
+    {
+        return businessTypes;
+    }
+
+    public void setBusinessTypes(Integer[] businessTypes)
+    {
+        this.businessTypes = businessTypes;
+    }
+
+    public String getMethod()
+    {
+        return method;
+    }
+
+    public void setMethod(String method)
+    {
+        this.method = method;
+    }
+
+    public String getRequestMethod()
+    {
+        return requestMethod;
+    }
+
+    public void setRequestMethod(String requestMethod)
+    {
+        this.requestMethod = requestMethod;
+    }
+
+    public Integer getOperatorType()
+    {
+        return operatorType;
+    }
+
+    public void setOperatorType(Integer operatorType)
+    {
+        this.operatorType = operatorType;
+    }
+
+    public String getOperName()
+    {
+        return operName;
+    }
+
+    public void setOperName(String operName)
+    {
+        this.operName = operName;
+    }
+
+    public String getDeptName()
+    {
+        return deptName;
+    }
+
+    public void setDeptName(String deptName)
+    {
+        this.deptName = deptName;
+    }
+
+    public String getOperUrl()
+    {
+        return operUrl;
+    }
+
+    public void setOperUrl(String operUrl)
+    {
+        this.operUrl = operUrl;
+    }
+
+    public String getOperIp()
+    {
+        return operIp;
+    }
+
+    public void setOperIp(String operIp)
+    {
+        this.operIp = operIp;
+    }
+
+    public String getOperParam()
+    {
+        return operParam;
+    }
+
+    public void setOperParam(String operParam)
+    {
+        this.operParam = operParam;
+    }
+
+    public String getJsonResult()
+    {
+        return jsonResult;
+    }
+
+    public void setJsonResult(String jsonResult)
+    {
+        this.jsonResult = jsonResult;
+    }
+
+    public Integer getStatus()
+    {
+        return status;
+    }
+
+    public void setStatus(Integer status)
+    {
+        this.status = status;
+    }
+
+    public String getErrorMsg()
+    {
+        return errorMsg;
+    }
+
+    public void setErrorMsg(String errorMsg)
+    {
+        this.errorMsg = errorMsg;
+    }
+
+    public Date getOperTime()
+    {
+        return operTime;
+    }
+
+    public void setOperTime(Date operTime)
+    {
+        this.operTime = operTime;
+    }
+}

+ 225 - 0
boman-api/boman-domain/src/main/java/com.boman.domain/SysRole.java

@@ -0,0 +1,225 @@
+package com.boman.domain;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.Size;
+
+import com.boman.domain.annotation.Excel;
+import com.boman.domain.annotation.Excel.ColumnType;
+import com.boman.domain.BaseEntity;
+
+import java.util.Arrays;
+
+/**
+ * 角色表 sys_role
+ * 
+ * @author ruoyi
+ */
+public class SysRole extends BaseEntity
+{
+    private static final long serialVersionUID = 1L;
+
+    /** 角色ID */
+    @Excel(name = "角色序号", cellType = ColumnType.NUMERIC)
+    private Long id;
+
+    /** 角色名称 */
+    @Excel(name = "角色名称")
+    private String roleName;
+
+    /** 角色权限 */
+    @Excel(name = "角色权限")
+    private String roleKey;
+
+    /** 角色排序 */
+    @Excel(name = "角色排序")
+    private String roleSort;
+
+    /** 数据范围(1:所有数据权限;2:自定义数据权限;3:本部门数据权限;4:本部门及以下数据权限) */
+    @Excel(name = "数据范围", readConverterExp = "1=所有数据权限,2=自定义数据权限,3=本部门数据权限,4=本部门及以下数据权限")
+    private String dataScope;
+
+    /** 菜单树选择项是否关联显示( 0:父子不互相关联显示 1:父子互相关联显示) */
+    private boolean menuCheckStrictly;
+
+    /** 部门树选择项是否关联显示(0:父子不互相关联显示 1:父子互相关联显示 ) */
+    private boolean deptCheckStrictly;
+
+    /** 角色状态(0正常 1停用) */
+    @Excel(name = "角色状态", readConverterExp = "0=正常,1=停用")
+    private String status;
+
+    /** 删除标志(0代表存在 2代表删除) */
+    private String delFlag;
+
+    /** 用户是否存在此角色标识 默认不存在 */
+    private boolean flag = false;
+
+    /** 菜单组 */
+    private Long[] menuIds;
+
+    /** 部门组(数据权限) */
+    private Long[] deptIds;
+
+    public SysRole()
+    {
+
+    }
+
+    public SysRole(Long id)
+    {
+        this.id = id;
+    }
+
+    public Long getId()
+    {
+        return id;
+    }
+
+    public void setId(Long id)
+    {
+        this.id = id;
+    }
+
+    public boolean isAdmin()
+    {
+        return isAdmin(this.id);
+    }
+
+    public static boolean isAdmin(Long id)
+    {
+        return id != null && 1L == id;
+    }
+
+    @NotBlank(message = "角色名称不能为空")
+    @Size(min = 0, max = 30, message = "角色名称长度不能超过30个字符")
+    public String getRoleName()
+    {
+        return roleName;
+    }
+
+    public void setRoleName(String roleName)
+    {
+        this.roleName = roleName;
+    }
+
+    @NotBlank(message = "权限字符不能为空")
+    @Size(min = 0, max = 100, message = "权限字符长度不能超过100个字符")
+    public String getRoleKey()
+    {
+        return roleKey;
+    }
+
+    public void setRoleKey(String roleKey)
+    {
+        this.roleKey = roleKey;
+    }
+
+    @NotBlank(message = "显示顺序不能为空")
+    public String getRoleSort()
+    {
+        return roleSort;
+    }
+
+    public void setRoleSort(String roleSort)
+    {
+        this.roleSort = roleSort;
+    }
+
+    public String getDataScope()
+    {
+        return dataScope;
+    }
+
+    public void setDataScope(String dataScope)
+    {
+        this.dataScope = dataScope;
+    }
+
+    public boolean isMenuCheckStrictly()
+    {
+        return menuCheckStrictly;
+    }
+
+    public void setMenuCheckStrictly(boolean menuCheckStrictly)
+    {
+        this.menuCheckStrictly = menuCheckStrictly;
+    }
+
+    public boolean isDeptCheckStrictly()
+    {
+        return deptCheckStrictly;
+    }
+
+    public void setDeptCheckStrictly(boolean deptCheckStrictly)
+    {
+        this.deptCheckStrictly = deptCheckStrictly;
+    }
+
+    public String getStatus()
+    {
+        return status;
+    }
+
+    public void setStatus(String status)
+    {
+        this.status = status;
+    }
+
+    public String getDelFlag()
+    {
+        return delFlag;
+    }
+
+    public void setDelFlag(String delFlag)
+    {
+        this.delFlag = delFlag;
+    }
+
+    public boolean isFlag()
+    {
+        return flag;
+    }
+
+    public void setFlag(boolean flag)
+    {
+        this.flag = flag;
+    }
+
+    public Long[] getMenuIds()
+    {
+        return menuIds;
+    }
+
+    public void setMenuIds(Long[] menuIds)
+    {
+        this.menuIds = menuIds;
+    }
+
+    public Long[] getDeptIds()
+    {
+        return deptIds;
+    }
+
+    public void setDeptIds(Long[] deptIds)
+    {
+        this.deptIds = deptIds;
+    }
+
+    @Override
+    public String toString() {
+        return "SysRole{" +
+                "id=" + id +
+                ", roleName='" + roleName + '\'' +
+                ", roleKey='" + roleKey + '\'' +
+                ", roleSort='" + roleSort + '\'' +
+                ", dataScope='" + dataScope + '\'' +
+                ", menuCheckStrictly=" + menuCheckStrictly +
+                ", deptCheckStrictly=" + deptCheckStrictly +
+                ", status='" + status + '\'' +
+                ", delFlag='" + delFlag + '\'' +
+                ", flag=" + flag +
+                ", menuIds=" + Arrays.toString(menuIds) +
+                ", deptIds=" + Arrays.toString(deptIds) +
+                '}';
+    }
+}

+ 183 - 0
boman-api/boman-domain/src/main/java/com.boman.domain/SysRoleData.java

@@ -0,0 +1,183 @@
+package com.boman.domain;
+
+import java.util.Date;
+
+/**
+ * 角色权限数据对象 sys_role_data
+ * 
+ * @author ruoyi
+ * @date 2021-04-26
+ */
+public class SysRoleData extends BaseEntity
+{
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 1:全部数据权限 2:自定数据权限 3:本部门数据权限 4:本部门及以下数据权限)5 :仅本人数据
+     */
+    public static final String ALL_DATA = "1";
+    public static final String DIY_DATA = "2";
+    public static final String SELF_DEPT_DATA = "3";
+    public static final String SUB_DEPT_DATA = "4";
+    public static final String MYSELF_DATA = "5";
+
+    /** 角色权限id */
+    private Long id;
+
+    /** 角色id */
+    private Long roleId;
+
+    private String roleName;
+
+    /** 显示顺序 */
+    private Integer roleSort;
+
+    /** 权限表单 */
+    private String tableName;
+
+    /** 数据过滤(字典表)(1:全部数据权限 2:自定数据权限 3:本部门数据权限 4:本部门及以下数据权限) */
+    private String dataScope;
+
+    /** 是否可用(Y是) */
+    private String isUse;
+
+    /** 是否删除(Y是) */
+    private String isDel;
+
+    /** 创建者 */
+    private String createBy;
+
+    /** 创建时间 */
+    private Date createTime;
+
+    /** 更新者 */
+    private String updateBy;
+
+    /** 更新时间 */
+    private Date updateTime;
+
+    /** 备注 */
+    private String remark;
+
+    public String getRoleName() {
+        return roleName;
+    }
+
+    public void setRoleName(String roleName) {
+        this.roleName = roleName;
+    }
+
+    public void setId(Long id)
+    {
+        this.id = id;
+    }
+
+    public Long getId() 
+    {
+        return id;
+    }
+    public void setRoleId(Long roleId) 
+    {
+        this.roleId = roleId;
+    }
+
+    public Long getRoleId() 
+    {
+        return roleId;
+    }
+    public void setRoleSort(Integer roleSort) 
+    {
+        this.roleSort = roleSort;
+    }
+
+    public Integer getRoleSort() 
+    {
+        return roleSort;
+    }
+    public void setTableName(String tableName) 
+    {
+        this.tableName = tableName;
+    }
+
+    public String getTableName() 
+    {
+        return tableName;
+    }
+    public void setDataScope(String dataScope) 
+    {
+        this.dataScope = dataScope;
+    }
+
+    public String getDataScope() 
+    {
+        return dataScope;
+    }
+    public void setIsUse(String isUse) 
+    {
+        this.isUse = isUse;
+    }
+
+    public String getIsUse() 
+    {
+        return isUse;
+    }
+    public void setIsDel(String isDel) 
+    {
+        this.isDel = isDel;
+    }
+
+    public String getIsDel() 
+    {
+        return isDel;
+    }
+
+    @Override
+    public String getCreateBy() {
+        return createBy;
+    }
+
+    @Override
+    public void setCreateBy(String createBy) {
+        this.createBy = createBy;
+    }
+
+    @Override
+    public Date getCreateTime() {
+        return createTime;
+    }
+
+    @Override
+    public void setCreateTime(Date createTime) {
+        this.createTime = createTime;
+    }
+
+    @Override
+    public String getUpdateBy() {
+        return updateBy;
+    }
+
+    @Override
+    public void setUpdateBy(String updateBy) {
+        this.updateBy = updateBy;
+    }
+
+    @Override
+    public Date getUpdateTime() {
+        return updateTime;
+    }
+
+    @Override
+    public void setUpdateTime(Date updateTime) {
+        this.updateTime = updateTime;
+    }
+
+    @Override
+    public String getRemark() {
+        return remark;
+    }
+
+    @Override
+    public void setRemark(String remark) {
+        this.remark = remark;
+    }
+}

+ 326 - 0
boman-api/boman-domain/src/main/java/com.boman.domain/SysUser.java

@@ -0,0 +1,326 @@
+package com.boman.domain;
+
+import java.util.Date;
+import java.util.List;
+import javax.validation.constraints.Email;
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.Size;
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.boman.domain.annotation.Excel;
+import com.boman.domain.annotation.Excel.ColumnType;
+import com.boman.domain.annotation.Excel.Type;
+import com.boman.domain.annotation.Excels;
+import com.boman.domain.BaseEntity;
+
+/**
+ * 用户对象 sys_user
+ * 
+ * @author ruoyi
+ */
+public class SysUser extends BaseEntity
+{
+    private static final long serialVersionUID = 1L;
+
+    /** 用户ID */
+    @Excel(name = "用户序号", cellType = ColumnType.NUMERIC, prompt = "用户编号")
+    private Long id;
+
+    /** 部门ID */
+    @Excel(name = "部门编号", type = Type.IMPORT)
+    private Long deptId;
+
+    /** 用户账号 */
+    @Excel(name = "登录名称")
+    private String userName;
+
+    /** 用户昵称 */
+    @Excel(name = "用户名称")
+    private String nickName;
+
+    /** 用户邮箱 */
+    @Excel(name = "用户邮箱")
+    private String email;
+
+    /** 手机号码 */
+    @Excel(name = "手机号码")
+    private String phonenumber;
+
+    /** 用户性别 */
+    @Excel(name = "用户性别", readConverterExp = "0=男,1=女,2=未知")
+    private String sex;
+
+    /** 用户头像 */
+    private String avatar;
+
+    /** 密码 */
+    private String password;
+
+    /** 盐加密 */
+    private String salt;
+
+    /** 帐号状态(0正常 1停用) */
+    @Excel(name = "帐号状态", readConverterExp = "0=正常,1=停用")
+    private String status;
+
+    /** 删除标志(0代表存在 2代表删除) */
+    private String delFlag;
+
+    /** 最后登录IP */
+    @Excel(name = "最后登录IP", type = Type.EXPORT)
+    private String loginIp;
+
+    /** 最后登录时间 */
+    @Excel(name = "最后登录时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss", type = Type.EXPORT)
+    private Date loginDate;
+
+    /** 部门对象 */
+    @Excels({
+        @Excel(name = "部门名称", targetAttr = "deptName", type = Type.EXPORT),
+        @Excel(name = "部门负责人", targetAttr = "leader", type = Type.EXPORT)
+    })
+    private SysDept dept;
+
+    /** 角色对象 */
+    private List<SysRole> roles;
+
+    /** 角色组 */
+    private Long[] roleIds;
+
+    /** 岗位组 */
+    private Long[] postIds;
+
+    public SysUser()
+    {
+
+    }
+
+    public SysUser(Long id)
+    {
+        this.id = id;
+    }
+
+    public Long getId()
+    {
+        return id;
+    }
+
+    public void setId(Long id)
+    {
+        this.id = id;
+    }
+
+    public boolean isAdmin()
+    {
+        return isAdmin(this.id);
+    }
+
+    public static boolean isAdmin(Long id)
+    {
+        return id != null && 1L == id;
+    }
+
+    public Long getDeptId()
+    {
+        return deptId;
+    }
+
+    public void setDeptId(Long deptId)
+    {
+        this.deptId = deptId;
+    }
+
+    @Size(min = 0, max = 30, message = "用户昵称长度不能超过30个字符")
+    public String getNickName()
+    {
+        return nickName;
+    }
+
+    public void setNickName(String nickName)
+    {
+        this.nickName = nickName;
+    }
+
+    @NotBlank(message = "用户账号不能为空")
+    @Size(min = 0, max = 30, message = "用户账号长度不能超过30个字符")
+    public String getUserName()
+    {
+        return userName;
+    }
+
+    public void setUserName(String userName)
+    {
+        this.userName = userName;
+    }
+
+    @Email(message = "邮箱格式不正确")
+    @Size(min = 0, max = 50, message = "邮箱长度不能超过50个字符")
+    public String getEmail()
+    {
+        return email;
+    }
+
+    public void setEmail(String email)
+    {
+        this.email = email;
+    }
+
+    @Size(min = 0, max = 11, message = "手机号码长度不能超过11个字符")
+    public String getPhonenumber()
+    {
+        return phonenumber;
+    }
+
+    public void setPhonenumber(String phonenumber)
+    {
+        this.phonenumber = phonenumber;
+    }
+
+    public String getSex()
+    {
+        return sex;
+    }
+
+    public void setSex(String sex)
+    {
+        this.sex = sex;
+    }
+
+    public String getAvatar()
+    {
+        return avatar;
+    }
+
+    public void setAvatar(String avatar)
+    {
+        this.avatar = avatar;
+    }
+
+    @JsonProperty
+    public String getPassword()
+    {
+        return password;
+    }
+
+    public void setPassword(String password)
+    {
+        this.password = password;
+    }
+
+    public String getSalt()
+    {
+        return salt;
+    }
+
+    public void setSalt(String salt)
+    {
+        this.salt = salt;
+    }
+
+    public String getStatus()
+    {
+        return status;
+    }
+
+    public void setStatus(String status)
+    {
+        this.status = status;
+    }
+
+    public String getDelFlag()
+    {
+        return delFlag;
+    }
+
+    public void setDelFlag(String delFlag)
+    {
+        this.delFlag = delFlag;
+    }
+
+    public String getLoginIp()
+    {
+        return loginIp;
+    }
+
+    public void setLoginIp(String loginIp)
+    {
+        this.loginIp = loginIp;
+    }
+
+    public Date getLoginDate()
+    {
+        return loginDate;
+    }
+
+    public void setLoginDate(Date loginDate)
+    {
+        this.loginDate = loginDate;
+    }
+
+    public SysDept getDept()
+    {
+        return dept;
+    }
+
+    public void setDept(SysDept dept)
+    {
+        this.dept = dept;
+    }
+
+    public List<SysRole> getRoles()
+    {
+        return roles;
+    }
+
+    public void setRoles(List<SysRole> roles)
+    {
+        this.roles = roles;
+    }
+
+    public Long[] getRoleIds()
+    {
+        return roleIds;
+    }
+
+    public void setRoleIds(Long[] roleIds)
+    {
+        this.roleIds = roleIds;
+    }
+
+    public Long[] getPostIds()
+    {
+        return postIds;
+    }
+
+    public void setPostIds(Long[] postIds)
+    {
+        this.postIds = postIds;
+    }
+    
+    @Override
+    public String toString() {
+        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
+            .append("id", getId())
+            .append("deptId", getDeptId())
+            .append("userName", getUserName())
+            .append("nickName", getNickName())
+            .append("email", getEmail())
+            .append("phonenumber", getPhonenumber())
+            .append("sex", getSex())
+            .append("avatar", getAvatar())
+            .append("password", getPassword())
+            .append("salt", getSalt())
+            .append("status", getStatus())
+            .append("delFlag", getDelFlag())
+            .append("loginIp", getLoginIp())
+            .append("loginDate", getLoginDate())
+            .append("createBy", getCreateBy())
+            .append("createTime", getCreateTime())
+            .append("updateBy", getUpdateBy())
+            .append("updateTime", getUpdateTime())
+            .append("remark", getRemark())
+            .append("dept", getDept())
+            .toString();
+    }
+}

+ 65 - 0
boman-api/boman-domain/src/main/java/com.boman.domain/TableSql.java

@@ -0,0 +1,65 @@
+package com.boman.domain;
+
+
+/**
+ * @author tjf
+ * @Date: 2021/04/14/10:56
+ */
+public class TableSql extends BaseEntity {
+    private Long id;
+    private Long tableId;
+    private String createSql;
+    private String createLog;
+    private String isDel;
+
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    public Long getTableId() {
+        return tableId;
+    }
+
+    public void setTableId(Long tableId) {
+        this.tableId = tableId;
+    }
+
+    public String getCreateSql() {
+        return createSql;
+    }
+
+    public void setCreateSql(String createSql) {
+        this.createSql = createSql;
+    }
+
+    public String getCreateLog() {
+        return createLog;
+    }
+
+    public void setCreateLog(String createLog) {
+        this.createLog = createLog;
+    }
+
+    public String getIsDel() {
+        return isDel;
+    }
+
+    public void setIsDel(String isDel) {
+        this.isDel = isDel;
+    }
+
+    @Override
+    public String toString() {
+        return "TableSql{" +
+                "id=" + id +
+                ", tableId=" + tableId +
+                ", createSql='" + createSql + '\'' +
+                ", createLog='" + createLog + '\'' +
+                ", isDel='" + isDel + '\'' +
+                '}';
+    }
+}

+ 160 - 0
boman-api/boman-domain/src/main/java/com.boman.domain/annotation/Excel.java

@@ -0,0 +1,160 @@
+package com.boman.domain.annotation;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+import java.math.BigDecimal;
+
+/**
+ * 自定义导出Excel数据注解
+ * 
+ * @author ruoyi
+ */
+@Retention(RetentionPolicy.RUNTIME)
+@Target(ElementType.FIELD)
+public @interface Excel
+{
+    /**
+     * 导出时在excel中排序
+     */
+    public int sort() default Integer.MAX_VALUE;
+
+    /**
+     * 导出到Excel中的名字.
+     */
+    public String name() default "";
+
+    /**
+     * 日期格式, 如: yyyy-MM-dd
+     */
+    public String dateFormat() default "";
+
+    /**
+     * 读取内容转表达式 (如: 0=男,1=女,2=未知)
+     */
+    public String readConverterExp() default "";
+
+    /**
+     * 分隔符,读取字符串组内容
+     */
+    public String separator() default ",";
+
+    /**
+     * BigDecimal 精度 默认:-1(默认不开启BigDecimal格式化)
+     */
+    public int scale() default -1;
+
+    /**
+     * BigDecimal 舍入规则 默认:BigDecimal.ROUND_HALF_EVEN
+     */
+    public int roundingMode() default BigDecimal.ROUND_HALF_EVEN;
+
+    /**
+     * 导出类型(0数字 1字符串)
+     */
+    public ColumnType cellType() default ColumnType.STRING;
+
+    /**
+     * 导出时在excel中每个列的高度 单位为字符
+     */
+    public double height() default 14;
+
+    /**
+     * 导出时在excel中每个列的宽 单位为字符
+     */
+    public double width() default 16;
+
+    /**
+     * 文字后缀,如% 90 变成90%
+     */
+    public String suffix() default "";
+
+    /**
+     * 当值为空时,字段的默认值
+     */
+    public String defaultValue() default "";
+
+    /**
+     * 提示信息
+     */
+    public String prompt() default "";
+
+    /**
+     * 设置只能选择不能输入的列内容.
+     */
+    public String[] combo() default {};
+
+    /**
+     * 是否导出数据,应对需求:有时我们需要导出一份模板,这是标题需要但内容需要用户手工填写.
+     */
+    public boolean isExport() default true;
+
+    /**
+     * 另一个类中的属性名称,支持多级获取,以小数点隔开
+     */
+    public String targetAttr() default "";
+
+    /**
+     * 是否自动统计数据,在最后追加一行统计数据总和
+     */
+    public boolean isStatistics() default false;
+
+    /**
+     * 导出字段对齐方式(0:默认;1:靠左;2:居中;3:靠右)
+     */
+    Align align() default Align.AUTO;
+
+    public enum Align
+    {
+        AUTO(0), LEFT(1), CENTER(2), RIGHT(3);
+        private final int value;
+
+        Align(int value)
+        {
+            this.value = value;
+        }
+
+        public int value()
+        {
+            return this.value;
+        }
+    }
+
+    /**
+     * 字段类型(0:导出导入;1:仅导出;2:仅导入)
+     */
+    Type type() default Type.ALL;
+
+    public enum Type
+    {
+        ALL(0), EXPORT(1), IMPORT(2);
+        private final int value;
+
+        Type(int value)
+        {
+            this.value = value;
+        }
+
+        public int value()
+        {
+            return this.value;
+        }
+    }
+
+    public enum ColumnType
+    {
+        NUMERIC(0), STRING(1), IMAGE(2);
+        private final int value;
+
+        ColumnType(int value)
+        {
+            this.value = value;
+        }
+
+        public int value()
+        {
+            return this.value;
+        }
+    }
+}

+ 18 - 0
boman-api/boman-domain/src/main/java/com.boman.domain/annotation/Excels.java

@@ -0,0 +1,18 @@
+package com.boman.domain.annotation;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+/**
+ * Excel注解集
+ * 
+ * @author ruoyi
+ */
+@Target(ElementType.FIELD)
+@Retention(RetentionPolicy.RUNTIME)
+public @interface Excels
+{
+    Excel[] value();
+}

+ 46 - 0
boman-api/boman-domain/src/main/java/com.boman.domain/constant/AttendanceConst.java

@@ -0,0 +1,46 @@
+package com.boman.domain.constant;
+
+
+/**
+ * @author shiqian
+ * @date 2021年05月26日 15:29
+ **/
+public class AttendanceConst {
+
+    /** 考勤人员姓名 **/
+    public static final String ATTENDANCE_USER_NAME = "attendance_table_username";
+
+    /** 是否考勤异常 **/
+    public static final String ATTENDANCE_ABNORMAL = "attendance_abnormal";
+    /** 是否迟到 **/
+    public static final String ATTENDANCE_TABLE_LATE = "attendance_table_late";
+    /** 是否早退 **/
+    public static final String ATTENDANCE_TABLE_LEAVE_EARLY = "attendance_table_leave";
+
+    /** 当天时间 yyyy-MM-dd 查询的时候是 in **/
+    public static final String ATTENDANCE_TABLE_TODAYTIME = "attendance_table_todaytime";
+
+    /** 上班打卡时间 **/
+    public static final String ATTENDANCE_TABLE_WORK = "attendance_table_work";
+
+    /** 下班打卡时间 **/
+    public static final String ATTENDANCE_TABLE_OFFWORK = "attendance_table_offwork";
+
+    /** 创建时间 **/
+    public static final String ATTENDANCE_TABLE_CREATE_TIME = "create_time";
+
+    /** 经度 **/
+    public static final String ATTENDANCE_TABLE_LONGITUDE = "longitude";
+
+    /** 纬度 **/
+    public static final String ATTENDANCE_TABLE_LATITUDE = "latitude";
+
+    public static final String Y = "Y";
+    /**  上班打卡 **/
+    public static final int GO_TO_WORK_TYPE = 1;
+    /**  下班打卡 **/
+    public static final int GO_OFF_WORK_TYPE = 2;
+    public static final String GO_TO_WORK = "上班打卡";
+    public static final String GO_OFF_WORK = "下班打卡";
+
+}

+ 24 - 0
boman-api/boman-domain/src/main/java/com.boman.domain/constant/AttendanceRulesConst.java

@@ -0,0 +1,24 @@
+package com.boman.domain.constant;
+
+
+/**
+ * @author shiqian
+ * @date 2021年05月26日 15:29
+ **/
+public class AttendanceRulesConst {
+
+    /** 规则表名 **/
+    public static final String ATTENDANCE_RULES_TABLE_NAME = "attendance_rules";
+
+    /** 规定上班时间 **/
+    public static final String ATTENDANCE_RULES_START_TIME = "attendance_rules_start_time";
+
+    /** 规定下班时间 **/
+    public static final String ATTENDANCE_RULES_END_TIME = "attendance_rules_end_time";
+
+    /**部门id **/
+    public static final String ATTENDANCE_RULES_DEPT_ID = "attendance_rules_dept_id";
+
+
+
+}

+ 37 - 0
boman-api/boman-domain/src/main/java/com.boman.domain/constant/BillConst.java

@@ -0,0 +1,37 @@
+package com.boman.domain.constant;
+
+
+/** 单据生成规则
+ * @author shiqian
+ * @date 2021年05月19日 13:32
+ **/
+public class BillConst {
+
+
+    /** 表名 */
+    public static final String SYS_SEQ_TABLE_NAME = "sys_seq";
+
+    /** seqName */
+    public static final String SEQ_NAME = "seq_name";
+
+    /** 增量 */
+    public static final String INCREMENTAL = "incremental";
+
+    /** 当前值 */
+    public static final String CURRENT_VALUE = "current_value";
+
+    /** 起始值 */
+    public static final String START_NUMBER = "start_number";
+
+    /** 格式 */
+    public static final String FORMAT = "format";
+
+    /** YEAR */
+    public static final String YEAR = "year";
+
+    /** MONTH */
+    public static final String MONTH = "month";
+
+    /** DAY */
+    public static final String DAY = "day";
+}

+ 39 - 0
boman-api/boman-domain/src/main/java/com.boman.domain/constant/CacheConstants.java

@@ -0,0 +1,39 @@
+package com.boman.domain.constant;
+
+/**
+ * 缓存的key 常量
+ * 
+ * @author ruoyi
+ */
+public class CacheConstants
+{
+    /**
+     * 令牌自定义标识
+     */
+    public static final String HEADER = "Authorization";
+
+    /**
+     * 令牌前缀
+     */
+    public static final String TOKEN_PREFIX = "Bearer ";
+
+    /**
+     * 权限缓存前缀
+     */
+    public final static String LOGIN_TOKEN_KEY = "login_tokens:";
+
+    /**
+     * 用户ID字段
+     */
+    public static final String DETAILS_USER_ID = "user_id";
+
+    /**
+     * 用户名字段
+     */
+    public static final String DETAILS_USERNAME = "username";
+
+    /**
+     * 授权信息字段
+     */
+    public static final String AUTHORIZATION_HEADER = "authorization";
+}

+ 119 - 0
boman-api/boman-domain/src/main/java/com.boman.domain/constant/Constants.java

@@ -0,0 +1,119 @@
+package com.boman.domain.constant;
+
+import java.util.HashMap;
+
+/**
+ * 通用常量信息
+ * 
+ * @author ruoyi
+ */
+public class Constants
+{
+    /**
+     * UTF-8 字符集
+     */
+    public static final String UTF8 = "UTF-8";
+
+    /**
+     * GBK 字符集
+     */
+    public static final String GBK = "GBK";
+
+    /**
+     * http请求
+     */
+    public static final String HTTP = "http://";
+
+    /**
+     * https请求
+     */
+    public static final String HTTPS = "https://";
+
+    /**
+     * 成功标记
+     */
+    public static final Integer SUCCESS = 200;
+
+    /**
+     * 登录状态失效
+     */
+    public static final Integer LOGIN_EXPIRE = 401;
+
+    /**
+     * 失败标记
+     */
+    public static final Integer FAIL = 500;
+
+    /**
+     * 登录成功
+     */
+    public static final String LOGIN_SUCCESS = "Success";
+
+    /**
+     * 注销
+     */
+    public static final String LOGOUT = "Logout";
+
+    /**
+     * 注册
+     */
+    public static final String REGISTER = "Register";
+
+    /**
+     * 登录失败
+     */
+    public static final String LOGIN_FAIL = "Error";
+
+    /**
+     * 当前记录起始索引
+     */
+    public static final String PAGE_NUM = "pageNum";
+
+    /**
+     * 每页显示记录数
+     */
+    public static final String PAGE_SIZE = "pageSize";
+
+    /**
+     * 排序列
+     */
+    public static final String ORDER_BY_COLUMN = "orderByColumn";
+
+    /**
+     * 排序的方向 "desc" 或者 "asc".
+     */
+    public static final String IS_ASC = "isAsc";
+
+    /**
+     * 验证码 redis key
+     */
+    public static final String CAPTCHA_CODE_KEY = "captcha_codes:";
+
+    /**
+     * 验证码有效期(分钟)
+     */
+    public static final long CAPTCHA_EXPIRATION = 2;
+
+    /**
+     * 令牌有效期(分钟)
+     */
+    public final static long TOKEN_EXPIRE = 720;
+
+    /**
+     * 参数管理 cache key
+     */
+    public static final String SYS_CONFIG_KEY = "sys_config:";
+
+    /**
+     * 字典管理 cache key
+     */
+    public static final String SYS_DICT_KEY = "sys_dict:";
+
+    /**
+     * 资源映射路径 前缀
+     */
+    public static final String RESOURCE_PREFIX = "/profile";
+
+    public static final String[] MENU_NAME = new String[]{"新增", "查看","编辑","删除","提交","反提交","导入","导出"};
+
+}

+ 11 - 0
boman-api/boman-domain/src/main/java/com.boman.domain/constant/DictConstant.java

@@ -0,0 +1,11 @@
+package com.boman.domain.constant;
+
+/**
+ * @author shiqian
+ * @date 2021年04月02日 14:52
+ **/
+public class DictConstant {
+
+    public static final String DICT_LABEL = "dictLabel";
+    public static final String DICT_VALUE = "dictValue";
+}

+ 197 - 0
boman-api/boman-domain/src/main/java/com.boman.domain/constant/FormDataConstant.java

@@ -0,0 +1,197 @@
+package com.boman.domain.constant;
+
+
+import java.util.List;
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
+
+/**
+ * @author shiqian
+ * @date 2021年03月26日 09:47
+ **/
+public class FormDataConstant {
+
+    /**
+     * 删除数据时,需要删除的业务表的主键
+     */
+    public static final String ID_LIST = "idList";
+
+    /**
+     * id标识
+     */
+    public static final String ID = "id";
+
+    /**
+     * 查询的条件
+     */
+    public static final String CONDITION = "condition";
+
+    /**
+     * 查询后需要返回到前台的字段
+     */
+    public static final String SHOW_DATA = "showData";
+
+
+    /**
+     * equals
+     */
+    public static final String EQ = "EQ";
+
+    /**
+     * like
+     */
+    public static final String LIKE = "LIKE";
+
+    /**
+     * not equals
+     */
+    public static final String NE = "NE";
+
+    /**
+     * greater than
+     */
+    public static final String GT = "GT";
+
+    /**
+     * greater than or equal to
+     */
+    public static final String GTE = "GTE";
+
+    /**
+     * less than
+     */
+    public static final String LT = "LT";
+
+    /**
+     * less than or equal to
+     */
+    public static final String LTE = "LTE";
+
+    /**
+     * between and
+     */
+    public static final String BETWEEN = "BETWEEN";
+
+    /**
+     * 需要转义
+     */
+    public static final String VARCHAR = "varchar";
+
+    public static final String BLOB = "blob";
+    public static final String TINYBLOB = "tinyblob";
+    public static final String MEDIUMBLOB = "mediumblob";
+    public static final String LONGBLOB = "longblob";
+    /**
+     * Blob
+     */
+    public static final List<String> BLOB_LIST = Stream.of(BLOB, TINYBLOB, MEDIUMBLOB, LONGBLOB).collect(Collectors.toList());
+
+    public static final String BYTE_ARRAY = "byte[]";
+
+    public static final String CHAR = "char";
+    public static final String DATETIME = "datetime";
+    public static final String TIMESTAMP = "timestamp";
+
+    /**  根据表名查询表单时,返回给前台的查询字段   */
+    public static final String QUERY_LIST = "queryList";
+
+    /**  根据表名查询表单时,返回给前台的按钮 (其实不是list而是 "AMDQSUE"的字符串 */
+    public static final String BUTTON_LIST = "buttonList";
+
+    /**  根据表名查询表单时,返回给前台列表展示的列*/
+    public static final String TABLE_HEAD_LIST = "tableHeadList";
+    /**
+     * 查询主表的子表对象的头
+     */
+    public static final String REF = "ref";
+
+    /**  分页  总条数*/
+    public static final String PAGE_TOTAL = "total";
+
+    /**  分页 总记录*/
+    public static final String PAGE_ROWS = "rows";
+
+
+    /**  暂时是用作新增时,成功的记录数 */
+    public static final String SUCCESS_CNT = "successCnt";
+
+
+    /**  数据库字段创建人*/
+    public static final String UPDATE_BY = "UPDATE_BY";
+
+
+    /**  数据库字段创建时间*/
+    public static final String UPDATE_TIME = "UPDATE_TIME";
+
+    /**  数据库字段创建人*/
+    public static final String CREATE_BY = "create_by";
+
+    /**  数据库字段创建时间*/
+    public static final String CREATE_TIME = "create_time";
+
+
+    /**  状态 */
+    public static final String STATUS = "status";
+
+
+    /**  单选框 */
+    public static final String RADIO = "radio";
+
+
+    /**  复选框 */
+    public static final String CHECKBOX = "checkbox";
+
+
+    /**  下拉框 */
+    public static final String SELECT = "select";
+
+
+    /**  需要查字典表的框框 */
+    public static final List<String> NEED_QUERY_DICT_LIST = Stream.of(RADIO, CHECKBOX, SELECT).collect(Collectors.toList());
+
+    /**  需要转换时间类型的 */
+    public static final List<String> NEED_CONVERT_DATE_LIST = Stream.of(DATETIME).collect(Collectors.toList());
+
+    /**  hr 日志、基础信息..... */
+    public static final String HR = "HR";
+
+    /**  返回单对象时,封装的name..... */
+    public static final String SINGLE_OBJ_NAME = "name";
+
+    /**  返回单对象时,封装的value..... */
+    public static final String SINGLE_OBJ_VALUE = "value";
+
+    /**  返回单对象时,封装的type,input、radio、checkbox、select.....中的其中一种 */
+    public static final String SINGLE_OBJ_TYPE = "type";
+
+    /**  返回单对象时,封装的types,input、radio、checkbox、select.....
+     * 其中一种对应的所有值,比如:radio:要把男和女对应的信息全部返回给前台 */
+    public static final String SINGLE_OBJ_TYPES = "types";
+
+
+    /** 附件的url */
+    public static final String URL = "url";
+    /** fkTableName */
+    public static final String FK_TABLE_NAME = "fkTableName";
+    /** fkColumnName */
+    public static final String FK_COLUMN_NAME = "fkColumnName";
+    /** dkColumnName */
+    public static final String DK_COLUMN_NAME = "dkColumnName";
+
+    /** rules */
+    public static final String RULES = "rules";
+    public static final String TRIGGER = "trigger";
+    public static final String MESSAGE = "message";
+    public static final String PATTERN = "pattern";
+    public static final String BLUR = "blur";
+    public static final String REQUIRED = "required";
+    public static final String TABLE_COLUMN = "table_column";
+
+    /** 冒号 */
+    public static final String COLON = ":";
+    /** 前台有时候需要计算时长等的标识 */
+    public static final String COL = "col";
+    /** 前台有时候需要计算时长等的标识,用到的列 */
+    public static final String IS_USE_EXTEND = "isUseExtend";
+
+}

+ 114 - 0
boman-api/boman-domain/src/main/java/com.boman.domain/constant/GenConstants.java

@@ -0,0 +1,114 @@
+package com.boman.domain.constant;
+
+/**
+ * 代码生成通用常量
+ * 
+ * @author ruoyi
+ */
+public class GenConstants
+{
+    /** 单表(增删改查) */
+    public static final String TPL_CRUD = "crud";
+
+    /** 树表(增删改查) */
+    public static final String TPL_TREE = "tree";
+
+    /** 主子表(增删改查) */
+    public static final String TPL_SUB = "sub";
+
+    /** 树编码字段 */
+    public static final String TREE_CODE = "treeCode";
+
+    /** 树父编码字段 */
+    public static final String TREE_PARENT_CODE = "treeParentCode";
+
+    /** 树名称字段 */
+    public static final String TREE_NAME = "treeName";
+
+    /** 上级菜单ID字段 */
+    public static final String PARENT_MENU_ID = "parentMenuId";
+
+    /** 上级菜单名称字段 */
+    public static final String PARENT_MENU_NAME = "parentMenuName";
+
+    /** 数据库字符串类型 */
+    public static final String[] COLUMNTYPE_STR = { "char", "varchar", "nvarchar", "varchar2" };
+
+    /** 数据库文本类型 */
+    public static final String[] COLUMNTYPE_TEXT = { "tinytext", "text", "mediumtext", "longtext" };
+
+    /** 数据库时间类型 */
+    public static final String[] COLUMNTYPE_TIME = { "datetime", "time", "date", "timestamp" };
+
+    /** 数据库数字类型 */
+    public static final String[] COLUMNTYPE_NUMBER = { "tinyint", "smallint", "mediumint", "int", "number", "integer",
+            "bigint", "float", "double", "decimal" };
+
+    /** 页面不需要编辑字段 */
+    public static final String[] COLUMNNAME_NOT_EDIT = { "id", "create_by", "create_time", "del_flag" };
+
+    /** 页面不需要显示的列表字段 */
+    public static final String[] COLUMNNAME_NOT_LIST = { "id", "create_by", "create_time", "del_flag", "update_by",
+            "update_time" };
+
+    /** 页面不需要查询字段 */
+    public static final String[] COLUMNNAME_NOT_QUERY = { "id", "create_by", "create_time", "del_flag", "update_by",
+            "update_time", "remark" };
+
+    /** Entity基类字段 */
+    public static final String[] BASE_ENTITY = { "createBy", "createTime", "updateBy", "updateTime", "remark" };
+
+    /** Tree基类字段 */
+    public static final String[] TREE_ENTITY = { "parentName", "parentId", "orderNum", "ancestors" };
+
+    /** 文本框 */
+    public static final String HTML_INPUT = "input";
+
+    /** 文本域 */
+    public static final String HTML_TEXTAREA = "textarea";
+
+    /** 下拉框 */
+    public static final String HTML_SELECT = "select";
+
+    /** 单选框 */
+    public static final String HTML_RADIO = "radio";
+
+    /** 复选框 */
+    public static final String HTML_CHECKBOX = "checkbox";
+
+    /** 日期控件 */
+    public static final String HTML_DATETIME = "datetime";
+
+    /** 图片上传控件 */
+    public static final String HTML_IMAGE_UPLOAD = "imageUpload";
+
+    /** 文件上传控件 */
+    public static final String HTML_FILE_UPLOAD = "fileUpload";
+
+    /** 富文本控件 */
+    public static final String HTML_EDITOR = "editor";
+
+    /** 字符串类型 */
+    public static final String TYPE_STRING = "String";
+
+    /** 整型 */
+    public static final String TYPE_INTEGER = "Integer";
+
+    /** 长整型 */
+    public static final String TYPE_LONG = "Long";
+
+    /** 浮点型 */
+    public static final String TYPE_DOUBLE = "Double";
+
+    /** 高精度计算类型 */
+    public static final String TYPE_BIGDECIMAL = "BigDecimal";
+
+    /** 时间类型 */
+    public static final String TYPE_DATE = "Date";
+
+    /** 模糊查询 */
+    public static final String QUERY_LIKE = "LIKE";
+
+    /** 需要 */
+    public static final String REQUIRE = "1";
+}

+ 29 - 0
boman-api/boman-domain/src/main/java/com.boman.domain/constant/GlobalBtn.java

@@ -0,0 +1,29 @@
+package com.boman.domain.constant;
+
+/**
+ * @author shiqian
+ * @date 2021年05月06日 15:28
+ **/
+public class GlobalBtn {
+
+
+    /** {@link com.boman.web.core.utils.AuthUtils#funcType(java.lang.String)}*/
+
+    /** add */
+    public static final String A = "A";
+    /** modify */
+    public static final String M = "M";
+    /** delete */
+    public static final String D = "D";
+    /** query */
+    public static final String Q = "Q";
+    /** submit */
+    public static final String S = "S";
+    /** unsubmit */
+    public static final String U = "U";
+    /** export */
+    public static final String E = "E";
+    /** import */
+    public static final String I = "I";
+
+}

+ 94 - 0
boman-api/boman-domain/src/main/java/com.boman.domain/constant/HttpStatus.java

@@ -0,0 +1,94 @@
+package com.boman.domain.constant;
+
+/**
+ * 返回状态码
+ * 
+ * @author ruoyi
+ */
+public class HttpStatus
+{
+    /**
+     * 操作成功
+     */
+    public static final int SUCCESS = 200;
+
+
+    /**
+     * 操作成功
+     */
+    public static final int ZEROSUCCESS = 0;
+    /**
+     * 对象创建成功
+     */
+    public static final int CREATED = 201;
+
+    /**
+     * 请求已经被接受
+     */
+    public static final int ACCEPTED = 202;
+
+    /**
+     * 操作已经执行成功,但是没有返回数据
+     */
+    public static final int NO_CONTENT = 204;
+
+    /**
+     * 资源已被移除
+     */
+    public static final int MOVED_PERM = 301;
+
+    /**
+     * 重定向
+     */
+    public static final int SEE_OTHER = 303;
+
+    /**
+     * 资源没有被修改
+     */
+    public static final int NOT_MODIFIED = 304;
+
+    /**
+     * 参数列表错误(缺少,格式不匹配)
+     */
+    public static final int BAD_REQUEST = 400;
+
+    /**
+     * 未授权
+     */
+    public static final int UNAUTHORIZED = 401;
+
+    /**
+     * 访问受限,授权过期
+     */
+    public static final int FORBIDDEN = 403;
+
+    /**
+     * 资源,服务未找到
+     */
+    public static final int NOT_FOUND = 404;
+
+    /**
+     * 不允许的http方法
+     */
+    public static final int BAD_METHOD = 405;
+
+    /**
+     * 资源冲突,或者资源被锁
+     */
+    public static final int CONFLICT = 409;
+
+    /**
+     * 不支持的数据,媒体类型
+     */
+    public static final int UNSUPPORTED_TYPE = 415;
+
+    /**
+     * 系统内部错误
+     */
+    public static final int ERROR = 500;
+
+    /**
+     * 接口未实现
+     */
+    public static final int NOT_IMPLEMENTED = 501;
+}

+ 19 - 0
boman-api/boman-domain/src/main/java/com.boman.domain/constant/LeaveConst.java

@@ -0,0 +1,19 @@
+package com.boman.domain.constant;
+
+
+/**
+ * @author shiqian
+ * @date 2021年06月17日 17:24
+ **/
+public class LeaveConst {
+
+    public static final String TABLE_NAME = "leavefrom";
+    public static final String LEAVEFROM_START_TIME = "leavefrom_start_time";
+    public static final String LEAVEFROM_END_TIME = "leavefrom_end_time";
+    public static final int DAY = 1;
+    public static final int MONTH = 2;
+    public static final int YEAR = 3;
+
+    public static final String MONTH_LEAVE_COUNT = "month";
+    public static final String YEAR_LEAVE_COUNT = "year";
+}

+ 33 - 0
boman-api/boman-domain/src/main/java/com.boman.domain/constant/MaskConstant.java

@@ -0,0 +1,33 @@
+package com.boman.domain.constant;
+
+
+/**
+ * @author shiqian
+ * @date 2021年04月13日 13:29
+ **/
+public class MaskConstant {
+
+    /**  新增可修改  **/
+    public static final String INSERT_CAN_EDIT = "1";
+
+    /**  新增可见  **/
+    public static final String INSERT_VISIBLE = "1";
+
+    /**  新增不可见  **/
+    public static final String INSERT_NOT_VISIBLE = "0";
+
+    /**  修改可修改  **/
+    public static final String UPDATE_CAN_EDIT = "1";
+
+    /**  修改可见  **/
+    public static final String UPDATE_VISIBLE = "1";
+
+    /**  修改不可见  **/
+    public static final String UPDATE_NOT_VISIBLE = "0";
+
+    /**  列表可见  **/
+    public static final String LIST_VISIBLE = "1";
+
+    /**  列表可修改  **/
+    public static final String LIST_CAN_EDIT = "1";
+}

+ 23 - 0
boman-api/boman-domain/src/main/java/com.boman.domain/constant/MysqlDataTypeConst.java

@@ -0,0 +1,23 @@
+package com.boman.domain.constant;
+
+import java.util.List;
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
+
+/**
+ * @author shiqian
+ * @date 2021年05月13日 18:06
+ **/
+public class MysqlDataTypeConst {
+
+    public static final String BIT_INT = "bigint";
+    public static final String INT = "int";
+    public static final String TINY_INT = "tinyint";
+    public static final String INTEGER = "integer";
+    public static final String MEDIUM_INT = "mediumint";
+
+    public static final List<String> NUMBER = Stream.of(BIT_INT, INT, TINY_INT, INTEGER, MEDIUM_INT)
+            .collect(Collectors.toList());
+
+
+}

+ 50 - 0
boman-api/boman-domain/src/main/java/com.boman.domain/constant/ScheduleConstants.java

@@ -0,0 +1,50 @@
+package com.boman.domain.constant;
+
+/**
+ * 任务调度通用常量
+ * 
+ * @author ruoyi
+ */
+public class ScheduleConstants
+{
+    public static final String TASK_CLASS_NAME = "TASK_CLASS_NAME";
+
+    /** 执行目标key */
+    public static final String TASK_PROPERTIES = "TASK_PROPERTIES";
+
+    /** 默认 */
+    public static final String MISFIRE_DEFAULT = "0";
+
+    /** 立即触发执行 */
+    public static final String MISFIRE_IGNORE_MISFIRES = "1";
+
+    /** 触发一次执行 */
+    public static final String MISFIRE_FIRE_AND_PROCEED = "2";
+
+    /** 不触发立即执行 */
+    public static final String MISFIRE_DO_NOTHING = "3";
+
+    public enum Status
+    {
+        /**
+         * 正常
+         */
+        NORMAL("0"),
+        /**
+         * 暂停
+         */
+        PAUSE("1");
+
+        private String value;
+
+        private Status(String value)
+        {
+            this.value = value;
+        }
+
+        public String getValue()
+        {
+            return value;
+        }
+    }
+}

+ 39 - 0
boman-api/boman-domain/src/main/java/com.boman.domain/constant/ServiceNameConstants.java

@@ -0,0 +1,39 @@
+package com.boman.domain.constant;
+
+/**
+ * 服务名称
+ * 
+ * @author ruoyi
+ */
+public class ServiceNameConstants
+{
+    /**
+     * 认证服务的serviceid
+     */
+    public static final String AUTH_SERVICE = "boman-auth";
+
+    /**
+     * 系统模块的serviceid
+     */
+    public static final String SYSTEM_SERVICE = "boman-system";
+
+    /**
+     * 文件服务的serviceid
+     */
+    public static final String FILE_SERVICE = "boman-file";
+
+    /**
+     * 代生成服务的serviceid
+     */
+    public static final String GEN_SERVICE = "boman-gen";
+
+    /**
+     * boman-web-core
+     */
+    public static final String WEB_CORE_SERVICE = "boman-web-core";
+
+    /**
+     * boman-jflow
+     */
+    public static final String JFLOW_SERVICE = "boman-jflow";
+}

+ 46 - 0
boman-api/boman-domain/src/main/java/com.boman.domain/constant/SqlConstant.java

@@ -0,0 +1,46 @@
+package com.boman.domain.constant;
+
+
+/**
+ * @author shiqian
+ * @date 2021年04月16日 16:10
+ **/
+public class SqlConstant {
+
+    public static final String SELECT = " select ";
+    public static final String UPDATE = " update ";
+    public static final String DELETE = " delete ";
+    public static final String INSERT_INTO = " insert into ";
+    public static final String VALUES = " values ";
+    public static final String ALL = " * ";
+    public static final String SET = " set ";
+    public static final String FROM = " from ";
+    public static final String COMMA = " , ";
+    public static final String LIMIT = " limit ";
+    public static final String OFFSET = " offset ";
+    public static final String ORDER_BY = " orderBy ";
+    public static final String PK_NAME = " pkName ";
+    public static final String TABLE_NAME = " tableName ";
+    public static final String COUNT_1 = " count(1) ";
+    public static final String WHERE = " where ";
+    public static final String AND = " and ";
+    public static final String OR = " or ";
+    public static final String LIKE = " like ";
+    public static final String EQ = " = ";
+    public static final String NOT_EQ = " != ";
+    public static final String GT = " &gt; ";
+    public static final String GT_EQ = " &gt;= ";
+    public static final String LT = " &lt; ";
+    public static final String LT_EQ = " &lt;= ";
+    public static final String BETWEEN = " between ";
+    public static final String PERCENT = " % ";
+    public static final String LEFT = " ( ";
+    public static final String RIGHT = " ) ";
+    public static final String IN = " in ";
+    public static final String GROUP_BY = " group by ";
+    public static final String JING_LEFT = " #{model. ";
+    public static final String ID_LIST = " #{idList ";
+    public static final String BIG_RIGHT = " } ";
+
+
+}

+ 73 - 0
boman-api/boman-domain/src/main/java/com.boman.domain/constant/SubmitConstant.java

@@ -0,0 +1,73 @@
+package com.boman.domain.constant;
+
+/**
+ * @author shiqian
+ * @date 2021年04月01日 13:56
+ **/
+public class SubmitConstant {
+
+    /**
+     * 提交人
+     */
+    public static final String SUBMIT_USERID = "submit_userid";
+
+    /**
+     * 提交时间
+     */
+    public static final  String SUBMIT_TIME = "submit_time";
+
+    /**
+     * 提交备注
+     */
+    public static final  String REMARK = "remark";
+
+    /**
+     * 未提交
+     */
+    public static final String NOT_SUBMIT = "1";
+
+    /**
+     * 已经提交了
+     */
+    public static final String SUBMITTED = "2";
+
+    /**
+     * 驳回
+     */
+    public static final String REJECT = "3";
+
+    /**
+     * 审核中
+     */
+    public static final String CHECKING = "4";
+
+    /**
+     * 批量提交的时候,状态符合标识
+     */
+    public static final String SUBMIT_RESULT = "submitResult";
+
+    /**
+     * 批量提交的时候,状态符合标识,且成功
+     */
+    public static final String SUCCESS = "SUCCESS";
+
+    /**
+     * 批量提交的时候,状态符合, 但是不知道什么原因失败了
+     */
+    public static final String FAIL = "FAIL";
+
+    /**
+     * 批量提交的时候,状态压根就不符合
+     */
+    public static final String NOT_ALLOWED = "NOT_ALLOWED";
+
+    /**
+     * STATUS
+     */
+    public static final String STATUS = "status";
+
+    /**
+     * READ_ONLY
+     */
+    public static final boolean READONLY = true;
+}

+ 13 - 0
boman-api/boman-domain/src/main/java/com.boman.domain/constant/TableNameConst.java

@@ -0,0 +1,13 @@
+package com.boman.domain.constant;
+
+/**
+ * @author shiqian
+ * @date 2021年05月06日 09:21
+ **/
+public class TableNameConst {
+
+
+    public static final String ID = "id";
+
+    public static final String SYS_ROLE_MENU = "sys_role_menu";
+}

+ 30 - 0
boman-api/boman-domain/src/main/java/com.boman.domain/constant/TriggerActionConstant.java

@@ -0,0 +1,30 @@
+package com.boman.domain.constant;
+
+/**
+ * @author tjf
+ * @Date: 2021/04/01/16:33
+ */
+public class TriggerActionConstant {
+
+    /**
+     * 新增
+     */
+    public static final String ACTION_CREATE = "trigger_create";
+
+    /**
+     * 查询
+     */
+    public static final String ACTION_RETRIEVE = "trigger_retrieve";
+    /**
+     * 修改
+     */
+    public static final String ACTION_UPDATE = "trigger_update";
+    /**
+     * 删除
+     */
+    public static final String ACTION_DELETE = "trigger_delete";
+    /**
+     * 提交
+     */
+    public static final String ACTION_SUBMIT = "trigger_submit";
+}

+ 93 - 0
boman-api/boman-domain/src/main/java/com.boman.domain/constant/UserConstants.java

@@ -0,0 +1,93 @@
+package com.boman.domain.constant;
+
+/**
+ * 用户常量信息
+ * 
+ * @author ruoyi
+ */
+public class UserConstants
+{
+    /**
+     * 平台内系统用户的唯一标志
+     */
+    public static final String SYS_USER = "SYS_USER";
+
+    /** 正常状态 */
+    public static final String NORMAL = "0";
+
+    /** 异常状态 */
+    public static final String EXCEPTION = "1";
+
+    /** 用户封禁状态 */
+    public static final String USER_DISABLE = "1";
+
+    /** 角色封禁状态 */
+    public static final String ROLE_DISABLE = "1";
+
+    /** 部门正常状态 */
+    public static final String DEPT_NORMAL = "0";
+
+    /** 部门停用状态 */
+    public static final String DEPT_DISABLE = "1";
+
+    /** 字典正常状态 */
+    public static final String DICT_NORMAL = "0";
+
+    /** 是否为系统默认(是) */
+    public static final String YES = "Y";
+
+    /** 是否菜单外链(是) */
+    public static final String YES_FRAME = "0";
+
+    /** 是否菜单外链(否) */
+    public static final String NO_FRAME = "1";
+
+    /** 菜单类型(目录) */
+    public static final String TYPE_DIR = "M";
+
+    /** 菜单类型(菜单) */
+    public static final String TYPE_MENU = "C";
+
+    /** 菜单类型(按钮) */
+    public static final String TYPE_BUTTON = "F";
+
+    /** Layout组件标识 */
+    public final static String LAYOUT = "Layout";
+
+    /** ParentView组件标识 */
+    public final static String PARENT_VIEW = "ParentView";
+
+    /** 校验返回结果码 */
+    public final static String UNIQUE = "0";
+
+    public final static String NOT_UNIQUE = "1";
+
+    /**
+     * 用户名长度限制
+     */
+    public static final int USERNAME_MIN_LENGTH = 2;
+
+    public static final int USERNAME_MAX_LENGTH = 20;
+
+    /**
+     * 密码长度限制
+     */
+    public static final int PASSWORD_MIN_LENGTH = 5;
+
+    public static final int PASSWORD_MAX_LENGTH = 20;
+
+    /**
+     * 是自增/是主键
+     */
+    public static final String INCREMENT = "1";
+
+    public static final String ISMENU = "Y";
+    /**
+     * 基本信息保存
+     */
+    public static final String UPLOAD_TYPE = "1";
+    /**
+     * 字段保存
+     */
+    public static final String UPLOAD_TYPE_TWO = "2";
+}

+ 20 - 0
boman-api/boman-domain/src/main/java/com.boman.domain/constant/UserEnvConstant.java

@@ -0,0 +1,20 @@
+package com.boman.domain.constant;
+
+
+
+/**
+ * @author shiqian
+ * @date 2021年04月14日 09:46
+ **/
+public class UserEnvConstant {
+
+
+    public static String USER_ID = "user.id";
+    public static final String USERNAME = "user.name";
+    public static final String USER_DEPT_ID = "user.dept.id";
+    public static final String USER_DEPT_NAME = "user.dept.name";
+    public static final String USER_PARENT_DEPT_ID = "user.parent.dept.id";
+    public static final String USER_PARENT_DEPT_NAME = "user.parent.dept.name";
+
+
+}

+ 22 - 0
boman-api/boman-domain/src/main/java/com.boman.domain/constant/ViewTypeConst.java

@@ -0,0 +1,22 @@
+package com.boman.domain.constant;
+
+/**
+ * @author shiqian
+ * @date 2021年04月20日 16:20
+ **/
+public class ViewTypeConst {
+
+    public static final String VIEW_TYPE = "viewType";
+
+    /**  只有主表展示信息的模板  页面   **/
+   public static final String CRUD = "crud";
+
+    /**  上面展示主表信息、下面是列表  页面   **/
+   public static final String HEAD_TAB = "headTab";
+
+    /**  tab切换子表信息 页面    **/
+   public static final String ITEM_TAB = "itemTab";
+
+    /**  tree 页面    **/
+   public static final String TREE = "tree";
+}

+ 181 - 0
boman-api/boman-domain/src/main/java/com.boman.domain/dto/AjaxResult.java

@@ -0,0 +1,181 @@
+package com.boman.domain.dto;
+
+import java.util.HashMap;
+import com.boman.domain.constant.HttpStatus;
+
+/**
+ * 操作消息提醒
+ * 
+ * @author ruoyi
+ */
+public class AjaxResult extends HashMap<String, Object>
+{
+    private static final long serialVersionUID = 1L;
+
+    /** 状态码 */
+    public static final String CODE_TAG = "code";
+
+    /** 返回内容 */
+    public static final String MSG_TAG = "msg";
+
+    /** 数据对象 */
+    public static final String DATA_TAG = "data";
+
+    /**
+     * 初始化一个新创建的 AjaxResult 对象,使其表示一个空消息。
+     */
+    public AjaxResult()
+    {
+    }
+
+    /**
+     * 初始化一个新创建的 AjaxResult 对象
+     * 
+     * @param code 状态码
+     * @param msg 返回内容
+     */
+    public AjaxResult(int code, String msg)
+    {
+        super.put(CODE_TAG, code);
+        super.put(MSG_TAG, msg);
+    }
+
+    /**
+     * 初始化一个新创建的 AjaxResult 对象
+     * 
+     * @param code 状态码
+     * @param msg 返回内容
+     * @param data 数据对象
+     */
+    public AjaxResult(int code, String msg, Object data)
+    {
+        super.put(CODE_TAG, code);
+        super.put(MSG_TAG, msg);
+        if (null != data)
+        {
+            super.put(DATA_TAG, data);
+        }
+    }
+    
+    /**
+     * 方便链式调用
+     *
+     * @param key
+     * @param value
+     * @return
+     */
+    @Override
+    public AjaxResult put(String key, Object value)
+    {
+        super.put(key, value);
+        return this;
+    }
+
+    /**
+     * 返回成功消息
+     * 
+     * @return 成功消息
+     */
+    public static AjaxResult success()
+    {
+        return AjaxResult.success("操作成功");
+    }
+
+    /**
+     * 返回成功数据
+     * 
+     * @return 成功消息
+     */
+    public static AjaxResult success(Object data)
+    {
+        return AjaxResult.success("操作成功", data);
+    }
+
+    /**
+     * 返回成功消息
+     * 
+     * @param msg 返回内容
+     * @return 成功消息
+     */
+    public static AjaxResult success(String msg)
+    {
+        return AjaxResult.success(msg, null);
+    }
+
+    /**
+     * 返回成功消息
+     * 
+     * @param msg 返回内容
+     * @param data 数据对象
+     * @return 成功消息
+     */
+    public static AjaxResult success(String msg, Object data)
+    {
+        return new AjaxResult(HttpStatus.SUCCESS, msg, data);
+    }
+
+    /**
+     * 返回成功消息
+     *
+     * @param msg 返回内容
+     * @param data 数据对象
+     * @return 成功消息
+     */
+    public static AjaxResult successZero( Object data)
+    {
+        return new AjaxResult(HttpStatus.ZEROSUCCESS, "", data);
+    }
+
+    /**
+     * 返回错误消息
+     * 
+     * @return
+     */
+    public static AjaxResult error()
+    {
+        return AjaxResult.error("操作失败");
+    }
+
+    /**
+     * 返回错误消息
+     * 
+     * @param msg 返回内容
+     * @return 警告消息
+     */
+    public static AjaxResult error(String msg)
+    {
+        return AjaxResult.error(msg, null);
+    }
+
+    /**
+     * 返回错误消息
+     * 
+     * @param msg 返回内容
+     * @param data 数据对象
+     * @return 警告消息
+     */
+    public static AjaxResult error(String msg, Object data)
+    {
+        return new AjaxResult(HttpStatus.ERROR, msg, data);
+    }
+
+    /**
+     * 返回错误消息
+     * 
+     * @param code 状态码
+     * @param msg 返回内容
+     * @return 警告消息
+     */
+    public static AjaxResult error(int code, String msg)
+    {
+        return new AjaxResult(code, msg, null);
+    }
+
+    public static boolean checkSuccess(AjaxResult ajaxResult){
+        return null != ajaxResult && HttpStatus.SUCCESS == ((int) ajaxResult.get(CODE_TAG));
+    }
+
+    public static boolean checkFail(AjaxResult ajaxResult){
+        return !checkSuccess(ajaxResult);
+    }
+}

+ 219 - 0
boman-api/boman-domain/src/main/java/com.boman.domain/dto/BaseDto.java

@@ -0,0 +1,219 @@
+package com.boman.domain.dto;
+
+import com.alibaba.fastjson.annotation.JSONField;
+import java.io.Serializable;
+
+public class BaseDto implements Serializable {
+    protected static final String PAGE_SIZE = "pageSize";
+    protected static final String PAGE = "page";
+    protected static final String LAST_END_ID = "lastEndId";
+    protected static final String DESCS = "descs";
+    protected static final String ASCS = "ascs";
+    private static final long serialVersionUID = -1L;
+    
+    @JSONField(
+            name = "page"
+    )
+    protected Long page;
+    
+    @JSONField(
+            name = "pageSize"
+    )
+    protected Long pageSize;
+    
+    @JSONField(
+            name = "lastEndId"
+    )
+    protected Long lastEndId;
+   
+    @JSONField(
+            name = "descs"
+    )
+    protected String descs;
+    
+    @JSONField(
+            name = "ascs"
+    )
+    protected String ascs;
+    @JSONField(
+            name = "chain_id",
+            serialize = false
+    )
+    protected String chainId;
+    @JSONField(
+            name = "event_id",
+            serialize = false
+    )
+    protected String eventId;
+
+    public BaseDto() {
+    }
+
+    public Long getPage() {
+        return this.page;
+    }
+
+    public Long getPageSize() {
+        return this.pageSize;
+    }
+
+    public Long getLastEndId() {
+        return this.lastEndId;
+    }
+
+    public String getDescs() {
+        return this.descs;
+    }
+
+    public String getAscs() {
+        return this.ascs;
+    }
+
+    public String getChainId() {
+        return this.chainId;
+    }
+
+    public String getEventId() {
+        return this.eventId;
+    }
+
+    public BaseDto setPage(Long page) {
+        this.page = page;
+        return this;
+    }
+
+    public BaseDto setPageSize(Long pageSize) {
+        this.pageSize = pageSize;
+        return this;
+    }
+
+    public BaseDto setLastEndId(Long lastEndId) {
+        this.lastEndId = lastEndId;
+        return this;
+    }
+
+    public BaseDto setDescs(String descs) {
+        this.descs = descs;
+        return this;
+    }
+
+    public BaseDto setAscs(String ascs) {
+        this.ascs = ascs;
+        return this;
+    }
+
+    public BaseDto setChainId(String chainId) {
+        this.chainId = chainId;
+        return this;
+    }
+
+    public BaseDto setEventId(String eventId) {
+        this.eventId = eventId;
+        return this;
+    }
+
+    public boolean equals(Object o) {
+        if (o == this) {
+            return true;
+        } else if (!(o instanceof BaseDto)) {
+            return false;
+        } else {
+            BaseDto other = (BaseDto)o;
+            if (!other.canEqual(this)) {
+                return false;
+            } else {
+                label95: {
+                    Object this$page = this.getPage();
+                    Object other$page = other.getPage();
+                    if (this$page == null) {
+                        if (other$page == null) {
+                            break label95;
+                        }
+                    } else if (this$page.equals(other$page)) {
+                        break label95;
+                    }
+
+                    return false;
+                }
+
+                Object this$pageSize = this.getPageSize();
+                Object other$pageSize = other.getPageSize();
+                if (this$pageSize == null) {
+                    if (other$pageSize != null) {
+                        return false;
+                    }
+                } else if (!this$pageSize.equals(other$pageSize)) {
+                    return false;
+                }
+
+                Object this$lastEndId = this.getLastEndId();
+                Object other$lastEndId = other.getLastEndId();
+                if (this$lastEndId == null) {
+                    if (other$lastEndId != null) {
+                        return false;
+                    }
+                } else if (!this$lastEndId.equals(other$lastEndId)) {
+                    return false;
+                }
+
+                label74: {
+                    Object this$descs = this.getDescs();
+                    Object other$descs = other.getDescs();
+                    if (this$descs == null) {
+                        if (other$descs == null) {
+                            break label74;
+                        }
+                    } else if (this$descs.equals(other$descs)) {
+                        break label74;
+                    }
+
+                    return false;
+                }
+
+                label67: {
+                    Object this$ascs = this.getAscs();
+                    Object other$ascs = other.getAscs();
+                    if (this$ascs == null) {
+                        if (other$ascs == null) {
+                            break label67;
+                        }
+                    } else if (this$ascs.equals(other$ascs)) {
+                        break label67;
+                    }
+
+                    return false;
+                }
+
+                Object this$chainId = this.getChainId();
+                Object other$chainId = other.getChainId();
+                if (this$chainId == null) {
+                    if (other$chainId != null) {
+                        return false;
+                    }
+                } else if (!this$chainId.equals(other$chainId)) {
+                    return false;
+                }
+
+                Object this$eventId = this.getEventId();
+                Object other$eventId = other.getEventId();
+                if (this$eventId == null) {
+                    if (other$eventId != null) {
+                        return false;
+                    }
+                } else if (!this$eventId.equals(other$eventId)) {
+                    return false;
+                }
+
+                return true;
+            }
+        }
+    }
+
+    protected boolean canEqual(Object other) {
+        return other instanceof BaseDto;
+    }
+
+    public String toString() {
+        return "BaseDto(page=" + this.getPage() + ", pageSize=" + this.getPageSize() + ", lastEndId=" + this.getLastEndId() + ", descs=" + this.getDescs() + ", ascs=" + this.getAscs() + ", chainId=" + this.getChainId() + ", eventId=" + this.getEventId() + ")";
+    }
+}

+ 26 - 0
boman-api/boman-domain/src/main/java/com.boman.domain/dto/ClockOnDto.java

@@ -0,0 +1,26 @@
+package com.boman.domain.dto;
+
+
+import lombok.Data;
+
+/**
+ * @author shiqian
+ * @date 2021年06月16日 10:12
+ **/
+@Data
+public class ClockOnDto {
+
+    /** 1(上班打卡)  2(下班打卡) **/
+    private int type;
+
+    /** attendance_table 考勤表 **/
+    private String tableName;
+
+    /** 经度**/
+    private String longitude;
+
+    /** 纬度 **/
+    private String latitude;
+
+
+}

+ 38 - 0
boman-api/boman-domain/src/main/java/com.boman.domain/dto/ExportExcelDto.java

@@ -0,0 +1,38 @@
+package com.boman.domain.dto;
+
+import java.util.Map;
+
+/**
+ * @author shiqian
+ * @date 2021年06月10日 09:24
+ **/
+public class ExportExcelDto {
+
+    private String tableName;
+    private Boolean empty;
+    private Map<String, Object> condition;
+
+    public String getTableName() {
+        return tableName;
+    }
+
+    public void setTableName(String tableName) {
+        this.tableName = tableName;
+    }
+
+    public Boolean getEmpty() {
+        return empty;
+    }
+
+    public void setEmpty(Boolean empty) {
+        this.empty = empty;
+    }
+
+    public Map<String, Object> getCondition() {
+        return condition;
+    }
+
+    public void setCondition(Map<String, Object> condition) {
+        this.condition = condition;
+    }
+}

+ 240 - 0
boman-api/boman-domain/src/main/java/com.boman.domain/dto/FormDataDto.java

@@ -0,0 +1,240 @@
+package com.boman.domain.dto;
+
+import com.alibaba.fastjson.JSONObject;
+import com.alibaba.fastjson.annotation.JSONField;
+
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * @author:zc
+ * @since:2018/12/27
+ * @createat:2018/12/274:41 PM
+ */
+public class FormDataDto implements Serializable {
+
+    private static final long serialVersionUID = -8653990707913725671L;
+    @JSONField(name = "objId")
+    private Long objId;
+
+    @JSONField(name = "fixedData")
+    private JSONObject fixedData;
+
+    @JSONField(name = "table")
+    private String table;
+
+    /**
+     * 逻辑删除,数据库对应的属性名称
+     */
+    @JSONField(name = "logicDelName")
+    private String logicDelName;
+
+    /**
+     * 逻辑删除,数据库对应的属性值
+     */
+    @JSONField(name = "logicDelValue")
+    private String logicDelValue;
+
+    /**
+     * 删除时,前台传过来需要删除的idList
+     */
+    @JSONField(name = "idList")
+    private List<Long> idList;
+
+    /**
+     * 批量提交时,提交到后台的数据
+     */
+    @JSONField(name = "commitData")
+    private List<JSONObject> commitData;
+
+    /**
+     * orderBy eg: order_by columnName desc
+     */
+    @JSONField(name = "orderBy")
+    private String orderBy;
+
+    /**
+     * 分页
+     */
+    @JSONField(name = "pageNo")
+    private Integer pageNo;
+
+    /**
+     * 分页
+     */
+    @JSONField(name = "pageSize")
+    private Integer pageSize;
+
+    /**
+     * 状态
+     */
+    @JSONField(name = "status")
+    private String status;
+
+    /**
+     * username
+     */
+    private String username;
+
+    /**
+     * 跳转新增或者编辑页面显示的类型带不带折叠,如果isUi=true, 带折叠
+     */
+    @JSONField(name = "isUi")
+    private Boolean isUi;
+
+    /**
+     * 表单类型
+     */
+    private String other;
+
+    /**
+     * 提交来源
+     * @return
+     */
+    private String submitSource;
+
+
+    public int getLimit() {
+        try {
+            return pageNo == 0 ? 0 : (pageNo - 1) * pageSize;
+        } catch (Exception e) {
+            e.printStackTrace();
+            return 1;
+        }
+    }
+
+    public int getOffset(){
+        try {
+            return pageSize == 0 ? 10 : pageSize;
+        } catch (Exception e) {
+            e.printStackTrace();
+            return 10;
+        }
+    }
+
+    public static long getSerialVersionUID() {
+        return serialVersionUID;
+    }
+
+    public Long getObjId() {
+        return objId;
+    }
+
+    public void setObjId(Long objId) {
+        this.objId = objId;
+    }
+
+    public JSONObject getFixedData() {
+        return fixedData;
+    }
+
+    public void setFixedData(JSONObject fixedData) {
+        this.fixedData = fixedData;
+    }
+
+    public String getTable() {
+        return table;
+    }
+
+    public void setTable(String table) {
+        this.table = table;
+    }
+
+    public String getLogicDelName() {
+        return logicDelName;
+    }
+
+    public void setLogicDelName(String logicDelName) {
+        this.logicDelName = logicDelName;
+    }
+
+    public String getLogicDelValue() {
+        return logicDelValue;
+    }
+
+    public void setLogicDelValue(String logicDelValue) {
+        this.logicDelValue = logicDelValue;
+    }
+
+    public List<Long> getIdList() {
+        return idList;
+    }
+
+    public void setIdList(List<Long> idList) {
+        this.idList = idList;
+    }
+
+    public List<JSONObject> getCommitData() {
+        return commitData;
+    }
+
+    public void setCommitData(List<JSONObject> commitData) {
+        this.commitData = commitData;
+    }
+
+    public String getOrderBy() {
+        return orderBy;
+    }
+
+    public void setOrderBy(String orderBy) {
+        this.orderBy = orderBy;
+    }
+
+    public String getStatus() {
+        return status;
+    }
+
+    public void setStatus(String status) {
+        this.status = status;
+    }
+
+    public Integer getPageNo() {
+        return pageNo;
+    }
+
+    public void setPageNo(Integer pageNo) {
+        this.pageNo = pageNo;
+    }
+
+    public Integer getPageSize() {
+        return pageSize;
+    }
+
+    public void setPageSize(Integer pageSize) {
+        this.pageSize = pageSize;
+    }
+
+    public Boolean getIsUi() {
+        return isUi;
+    }
+
+    public void setIsUi(Boolean ui) {
+        isUi = ui;
+    }
+
+    public String getUsername() {
+        return username;
+    }
+
+    public void setUsername(String username) {
+        this.username = username;
+    }
+
+    public String getOther() {
+        return other;
+    }
+
+    public void setOther(String other) {
+        this.other = other;
+    }
+
+    public String getSubmitSource() {
+        return submitSource;
+    }
+
+    public void setSubmitSource(String submitSource) {
+        this.submitSource = submitSource;
+    }
+}
+
+

+ 33 - 0
boman-api/boman-domain/src/main/java/com.boman.domain/dto/ImportExcelDto.java

@@ -0,0 +1,33 @@
+package com.boman.domain.dto;
+
+import com.alibaba.fastjson.JSONObject;
+
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * @author shiqian
+ * @date 2021年06月08日 09:14
+ **/
+public class ImportExcelDto implements Serializable {
+
+    private List<JSONObject> dataList;
+
+    private String tableName;
+
+    public String getTableName() {
+        return tableName;
+    }
+
+    public void setTableName(String tableName) {
+        this.tableName = tableName;
+    }
+
+    public List<JSONObject> getDataList() {
+        return dataList;
+    }
+
+    public void setDataList(List<JSONObject> dataList) {
+        this.dataList = dataList;
+    }
+}

+ 178 - 0
boman-api/boman-domain/src/main/java/com.boman.domain/dto/ProcessDto.java

@@ -0,0 +1,178 @@
+package com.boman.domain.dto;
+
+
+import com.alibaba.fastjson.JSONObject;
+import com.alibaba.fastjson.annotation.JSONField;
+import lombok.Data;
+
+import java.util.*;
+
+/**
+ * @author shiqian
+ * @date 2021年05月26日 15:29
+ **/
+@Data
+public class ProcessDto {
+
+    /**
+     *
+     */
+    private  String dbname;
+
+    private JSONObject businessObj;
+    /**
+     * 流程实例id
+     */
+    @JSONField
+    private Long instanceId;
+
+    /**
+     * 流程实例id-多个
+     */
+    @JSONField
+    private String instanceIds;
+
+    /**
+     * 流程实例版本
+     */
+    private Integer rev;
+
+    @JSONField
+    private Long initiator;
+
+    /**
+     * 发起人:称谓
+     */
+    @JSONField
+    private String initiatorName;
+
+    /**
+     * 业务数据编号
+     */
+    @JSONField
+    private Long businessCode;
+
+    /**
+     * 业务数据
+     */
+    @JSONField(serialize = false, deserialize = false)
+    private JSONObject businessBody;
+
+    /**
+     * 业务回调路径
+     */
+    @JSONField
+    private String businessUrl;
+
+    /**
+     * 业务回调路径
+     */
+    @JSONField
+    private String formUrl;
+
+    /**
+     * 业务单据修改明细
+     */
+    @JSONField
+    private JSONObject changeDetail;
+
+    /**
+     * 流程状态
+     */
+    @JSONField
+    private Short status;
+
+    /**
+     * 检索开始时间
+     */
+    @JSONField(format = "yyyy-MM-dd HH:mm")
+    private Date startTime;
+
+    /**
+     * 检索结束时间
+     */
+    @JSONField(format = "yyyy-MM-dd HH:mm")
+    private Date endTime;
+
+    @JSONField
+    private Long moduleId;
+
+    @JSONField(serialize = false, deserialize = false)
+    private Long nodeId;
+
+    @JSONField
+    private Long businessType;
+
+    @JSONField
+    private Long changeUser;
+
+    @JSONField
+    private String userName;
+
+    /**
+     * 业务测单据id的集合
+     */
+    @JSONField(name = "businessCodes")
+    private String businessCodes;
+
+    /**
+     * 业务测英文表名
+     */
+    @JSONField
+    private String businessTypeName;
+
+    /**
+     * 业务系统需要校验的单对象id
+     */
+    @JSONField
+    private List<Long> businessCheckData;
+
+    /**
+     * 异常编号
+     */
+    private String errorCode;
+
+    /**
+     * 索引信息
+     */
+    private String businessNumber;
+
+    /**
+     * 定制页面可能需要提交的业务数据体
+     */
+    @JSONField
+    private JSONObject customizeBody;
+
+    @JSONField(serialize = false, deserialize = false)
+    private Set<Short> statusSets;
+
+    @JSONField(serialize = false, deserialize = false)
+    private List<Long> businessCodeList;
+
+    @JSONField(serialize = false, deserialize = false)
+    private Boolean async;
+
+    /**
+     * 强制终止
+     */
+    private Boolean hardShut;
+
+    /**
+     * 转储业务编号
+     *
+     * @return
+     */
+    public ProcessDto collectBusinessCodes() {
+        Set<Long> businessCodeSet = new HashSet<>(1);
+        if (businessCode != null) {
+            businessCodeSet.add(businessCode);
+        }
+        if (businessCodes != null && businessCodes.trim().length() != 0) {
+            String[] codeArray = businessCodes.trim().split(",");
+            Arrays.stream(codeArray).forEach(code -> businessCodeSet.add(Long.parseLong(code)));
+        }
+        businessCodeList = new ArrayList<>(businessCodeSet);
+        return this;
+    }
+
+}

+ 114 - 0
boman-api/boman-domain/src/main/java/com.boman.domain/dto/R.java

@@ -0,0 +1,114 @@
+package com.boman.domain.dto;
+
+import java.io.Serializable;
+import com.boman.domain.constant.Constants;
+
+/**
+ * 响应信息主体
+ *
+ * @author ruoyi
+ */
+public class R<T> implements Serializable
+{
+    private static final long serialVersionUID = 1L;
+
+    /** 成功 */
+    public static final int SUCCESS = Constants.SUCCESS;
+
+    /** 失败 */
+    public static final int FAIL = Constants.FAIL;
+    /**
+     * 登录状态失效
+     */
+    public static final Integer LOGIN_EXPIRE = Constants.LOGIN_EXPIRE;
+
+    private int code;
+
+    private String msg;
+
+    private T data;
+
+    public static <T> R<T> ok()
+    {
+        return restResult(null, SUCCESS, null);
+    }
+
+    public static <T> R<T> ok(T data)
+    {
+        return restResult(data, SUCCESS, null);
+    }
+
+    public static <T> R<T> ok(T data, String msg)
+    {
+        return restResult(data, SUCCESS, msg);
+    }
+
+    public static <T> R<T> fail()
+    {
+        return restResult(null, FAIL, null);
+    }
+
+    public static <T> R<T> fail(String msg)
+    {
+        return restResult(null, FAIL, msg);
+    }
+
+    public static <T> R<T> loginExpire(String msg)
+    {
+        return restResult(null, LOGIN_EXPIRE, msg);
+    }
+
+    public static <T> R<T> fail(T data)
+    {
+        return restResult(data, FAIL, null);
+    }
+
+    public static <T> R<T> fail(T data, String msg)
+    {
+        return restResult(data, FAIL, msg);
+    }
+
+    public static <T> R<T> fail(int code, String msg)
+    {
+        return restResult(null, code, msg);
+    }
+
+    private static <T> R<T> restResult(T data, int code, String msg)
+    {
+        R<T> apiResult = new R<>();
+        apiResult.setCode(code);
+        apiResult.setData(data);
+        apiResult.setMsg(msg);
+        return apiResult;
+    }
+
+    public int getCode()
+    {
+        return code;
+    }
+
+    public void setCode(int code)
+    {
+        this.code = code;
+    }
+
+    public String getMsg()
+    {
+        return msg;
+    }
+
+    public void setMsg(String msg)
+    {
+        this.msg = msg;
+    }
+
+    public T getData()
+    {
+        return data;
+    }
+
+    public void setData(T data)
+    {
+        this.data = data;
+    }
+}

+ 71 - 0
boman-api/boman-domain/src/main/java/com.boman.domain/dto/RoleMenuDto.java

@@ -0,0 +1,71 @@
+package com.boman.domain.dto;
+
+
+import java.util.List;
+
+/**
+ * @author shiqian
+ * @date 2021年05月06日 17:25
+ **/
+public class RoleMenuDto {
+
+    private Long menuId;
+    private Long roleId;
+    /** A M D..... **/
+    private List<String> head;
+
+    /**
+     * 功能描述: 返回A M D......
+     *
+     * @param perms perms
+     * @return java.lang.String
+     */
+    public static String getBtnFromPerms(String perms) {
+        // sys_user:A
+        String[] split = perms.split(":");
+        if (split.length == 0) {
+            throw new IllegalArgumentException("menu对应的perms未配置");
+        }
+        // A
+        return split[1];
+    }
+
+    /**
+     * 功能描述: 返回tableName, menu表中有sys_table_name
+     *
+     * @param perms perms
+     * @return java.lang.String
+     */
+    @Deprecated
+    public static String getTableNameFromPerms(String perms) {
+        // sys_user:A
+        String[] split = perms.split(":");
+        assert split.length == 2;
+        // sys_user
+        return split[0];
+    }
+
+    public Long getMenuId() {
+        return menuId;
+    }
+
+    public void setMenuId(Long menuId) {
+        this.menuId = menuId;
+    }
+
+    public Long getRoleId() {
+        return roleId;
+    }
+
+    public void setRoleId(Long roleId) {
+        this.roleId = roleId;
+    }
+
+    public List<String> getHead() {
+        return head;
+    }
+
+    public void setHead(List<String> head) {
+        this.head = head;
+    }
+}

+ 232 - 0
boman-api/boman-domain/src/main/java/com.boman.domain/dto/TaskDto.java

@@ -0,0 +1,232 @@
+package com.boman.domain.dto;
+
+
+import com.alibaba.fastjson.annotation.JSONField;
+import lombok.Data;
+import lombok.experimental.Accessors;
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @author zhong.h
+ * createTime: 2021/6/17
+ * description:任务中心的DTO
+ */
+
+@Data
+@Accessors(chain = true)
+public class TaskDto extends BaseDto {
+    private static final long serialVersionUID = -1L;
+
+    /**
+     * 主键id
+     */
+    @JSONField
+    private Long id;
+
+    /**
+     * 上一次的任务id
+     */
+    private Long lastTaskId;
+
+    /**
+     * 批处理数据的id以","分隔
+     */
+    private String ids;
+
+    /**
+     * 任务所属节点id
+     */
+    private Long nodeId;
+
+    /**
+     * 流程实例id
+     */
+    @JSONField
+    private Long instanceId;
+
+    /**
+     * 任务所属动作
+     */
+    private Long actId;
+
+    /**
+     * 任务动作类别:定时任务设置的就算作自动
+     */
+    private Short actType;
+
+    /**
+     * 版本
+     */
+    private Integer rev;
+
+    /**
+     * 任务描述
+     */
+    private String description;
+
+    /**
+     * 任务创建时间
+     */
+    @JSONField(name = "startTime", format = "yyyy-MM-dd HH:mm")
+    private Date createTime;
+
+    /**
+     * 任务修改时间
+     */
+    @JSONField(format = "yyyy-MM-dd HH:mm")
+    private Date updateTime;
+
+    private String approvedTime;
+
+    /**
+     * 上一步任务实例
+     */
+    private Long lastTask;
+
+    /**
+     * 任务执行状态
+     */
+    private Short excuStatus;
+
+    /**
+     * 审批人编号
+     */
+    private Long approver;
+
+    /**
+     * 转派人编号
+     */
+    private Long delegateId;
+
+
+    /**
+     * 详情查询类型:待办为0,历史为1
+     */
+    private Integer loadType;
+
+    /**
+     * 操作类型:同意,驳回,转派
+     */
+    private Short type;
+
+    /**
+     * 业务编号
+     */
+    private Long businessCode;
+
+    /**
+     * 业务类型
+     */
+    private Long businessType;
+
+    /**
+     * 业务单据
+     */
+    private String businessBody;
+
+    /**
+     * 发起人id
+     */
+    private Long initiator;
+
+    /**
+     * 发起人中文名
+     */
+    private String initiatorName;
+
+    /**
+     * 是否是本人
+     */
+    private Boolean isinitiator;
+
+    /**
+     * 当前用户id
+     */
+    private Long userId;
+
+    /**
+     * 列表查询类型
+     */
+    private String searchType;
+
+    /**
+     * 审批人类型
+     */
+    private Short approverType;
+
+    /**
+     * 用于时间段的截至时间
+     */
+    private String endTime;
+
+    /**
+     * 驳回节点
+     */
+    private Long backId;
+
+    /**
+     * 模板id
+     */
+    private Long moduleId;
+
+    /**
+     * 流程状态
+     */
+    private Short processStatus;
+
+    //业务数据编号
+    private String businessNumber;
+
+    /**
+     * 审批人中文名
+     */
+    private String approverName;
+
+    /**
+     * 单据类型中文名
+     */
+    private String businessTypeName;
+
+    /**
+     * 掌云或条件搜索字段
+     */
+    private String searchField;
+
+    /**
+     * 审批人id,和审批人中文名
+     */
+    private List<Map<String,String>> approverInfo;
+
+    /**
+     * 批次号
+     */
+    private Integer batch;
+
+    /**
+     * 人工干预驳回节点id
+     */
+    private Long backNodeId;
+
+    /**
+     * 人工干预同意节点id
+     */
+    private Long passNodeId;
+
+    /**
+     * 是否轮询
+     */
+    private Boolean isPoll;
+
+    /**
+     * 节点名称,代办列表的节点名称筛
+     */
+    private String nodeName;
+
+    /** 表名 */
+    private String tableName;
+
+    /***/
+    private String other;
+}

+ 81 - 0
boman-api/boman-domain/src/main/java/com.boman.domain/dto/TreeEntity.java

@@ -0,0 +1,81 @@
+package com.boman.domain.dto;
+
+import com.boman.domain.BaseEntity;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * Tree基类
+ * 
+ * @author ruoyi
+ */
+public class TreeEntity extends BaseEntity
+{
+    private static final long serialVersionUID = 1L;
+
+    /** 父菜单名称 */
+    private String parentName;
+
+    /** 父菜单ID */
+    private Long parentId;
+
+    /** 显示顺序 */
+    private Integer orderNum;
+
+    /** 祖级列表 */
+    private String ancestors;
+
+    /** 子部门 */
+    private List<?> children = new ArrayList<>();
+
+    public String getParentName()
+    {
+        return parentName;
+    }
+
+    public void setParentName(String parentName)
+    {
+        this.parentName = parentName;
+    }
+
+    public Long getParentId()
+    {
+        return parentId;
+    }
+
+    public void setParentId(Long parentId)
+    {
+        this.parentId = parentId;
+    }
+
+    public Integer getOrderNum()
+    {
+        return orderNum;
+    }
+
+    public void setOrderNum(Integer orderNum)
+    {
+        this.orderNum = orderNum;
+    }
+
+    public String getAncestors()
+    {
+        return ancestors;
+    }
+
+    public void setAncestors(String ancestors)
+    {
+        this.ancestors = ancestors;
+    }
+
+    public List<?> getChildren()
+    {
+        return children;
+    }
+
+    public void setChildren(List<?> children)
+    {
+        this.children = children;
+    }
+}

+ 15 - 0
boman-api/boman-domain/src/main/java/com.boman.domain/exception/NoSuchFunctionException.java

@@ -0,0 +1,15 @@
+package com.boman.domain.exception;
+
+/**
+ * @author shiqian
+ * @date 2021年04月21日 15:44
+ **/
+public class NoSuchFunctionException extends RuntimeException{
+
+    public NoSuchFunctionException(){}
+
+    public NoSuchFunctionException(String errorMsg){
+        super(errorMsg);
+    }
+
+}

+ 15 - 0
boman-api/boman-domain/src/main/java/com.boman.domain/exception/UnknownColumnException.java

@@ -0,0 +1,15 @@
+package com.boman.domain.exception;
+
+/**
+ * @author shiqian
+ * @date 2021年04月21日 15:44
+ **/
+public class UnknownColumnException extends RuntimeException{
+
+    public UnknownColumnException(){}
+
+    public UnknownColumnException(String errorMsg){
+        super(errorMsg);
+    }
+
+}

+ 26 - 0
boman-api/pom.xml

@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://maven.apache.org/POM/4.0.0"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <parent>
+        <groupId>com.boman</groupId>
+        <artifactId>boman</artifactId>
+        <version>2.5.0-SNAPSHOT</version>
+    </parent>
+    <modelVersion>4.0.0</modelVersion>
+
+    <modules>
+        <module>boman-api-system</module>
+        <module>boman-api-gen</module>
+        <module>boman-domain</module>
+        <module>boman-api-web-core</module>
+        <module>boman-api-jflow</module>
+    </modules>
+
+    <artifactId>boman-api</artifactId>
+    <packaging>pom</packaging>
+
+    <description>
+        boman-api系统接口
+    </description>
+
+</project>

+ 87 - 0
boman-auth/pom.xml

@@ -0,0 +1,87 @@
+<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>
+        <groupId>com.boman</groupId>
+        <artifactId>boman</artifactId>
+        <version>2.5.0-SNAPSHOT</version>
+    </parent>
+    <modelVersion>4.0.0</modelVersion>
+    
+    <artifactId>boman-auth</artifactId>
+	
+    <description>
+        boman-auth认证授权中心
+    </description>
+    
+    <dependencies>
+
+        <!--集成第三方登录-->
+        <dependency>
+            <groupId>com.xkcoding.justauth</groupId>
+            <artifactId>justauth-spring-boot-starter</artifactId>
+            <version>1.4.0</version>
+        </dependency>
+        
+        <!-- SpringCloud Ailibaba Nacos -->
+        <dependency>
+            <groupId>com.alibaba.cloud</groupId>
+            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
+        </dependency>
+        
+        <!-- SpringCloud Ailibaba Nacos Config -->
+        <dependency>
+            <groupId>com.alibaba.cloud</groupId>
+            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
+        </dependency>
+        
+        <!-- SpringCloud Ailibaba Sentinel -->
+        <dependency>
+            <groupId>com.alibaba.cloud</groupId>
+            <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
+        </dependency>
+		
+        <!-- SpringBoot Web -->
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-web</artifactId>
+        </dependency>
+        
+        <!-- SpringBoot Actuator -->
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-actuator</artifactId>
+        </dependency>
+        
+        <!-- Mysql Connector -->
+        <dependency>
+            <groupId>mysql</groupId>
+            <artifactId>mysql-connector-java</artifactId>
+        </dependency>
+		
+        <!-- RuoYi Common Security-->
+        <dependency>
+            <groupId>com.boman</groupId>
+            <artifactId>boman-common-security</artifactId>
+        </dependency>
+        
+    </dependencies>
+	
+    <build>
+        <finalName>${project.artifactId}</finalName>
+        <plugins>
+            <plugin>
+                <groupId>org.springframework.boot</groupId>
+                <artifactId>spring-boot-maven-plugin</artifactId>
+                <executions>
+                    <execution>
+                        <goals>
+                            <goal>repackage</goal>
+                        </goals>
+                    </execution>
+                </executions>
+            </plugin>
+        </plugins>
+    </build>
+   
+</project>

+ 31 - 0
boman-auth/src/main/java/com/boman/auth/RuoYiAuthApplication.java

@@ -0,0 +1,31 @@
+package com.boman.auth;
+
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
+import com.boman.common.security.annotation.EnableRyFeignClients;
+
+/**
+ * 认证授权中心
+ * 
+ * @author ruoyi
+ */
+@EnableRyFeignClients
+@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class })
+public class RuoYiAuthApplication
+{
+    public static void main(String[] args)
+    {
+        SpringApplication.run(RuoYiAuthApplication.class, args);
+        System.out.println("(♥◠‿◠)ノ゙  认证授权中心启动成功   ლ(´ڡ`ლ)゙  \n" +
+                " .-------.       ____     __        \n" +
+                " |  _ _   \\      \\   \\   /  /    \n" +
+                " | ( ' )  |       \\  _. /  '       \n" +
+                " |(_ o _) /        _( )_ .'         \n" +
+                " | (_,_).' __  ___(_ o _)'          \n" +
+                " |  |\\ \\  |  ||   |(_,_)'         \n" +
+                " |  | \\ `'   /|   `-'  /           \n" +
+                " |  |  \\    /  \\      /           \n" +
+                " ''-'   `'-'    `-..-'              ");
+    }
+}

+ 74 - 0
boman-auth/src/main/java/com/boman/auth/controller/OauthController.java

@@ -0,0 +1,74 @@
+package com.boman.auth.controller;
+
+import cn.hutool.core.util.StrUtil;
+import com.alibaba.fastjson.JSON;
+import com.boman.common.core.utils.JSONArrayUtils;
+import com.boman.common.core.utils.StringUtils;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.xkcoding.justauth.AuthRequestFactory;
+import io.micrometer.core.instrument.util.JsonUtils;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import me.zhyd.oauth.config.AuthSource;
+import me.zhyd.oauth.model.AuthCallback;
+import me.zhyd.oauth.model.AuthResponse;
+import me.zhyd.oauth.request.AuthRequest;
+import me.zhyd.oauth.utils.AuthStateUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+/**
+ * @author tjf
+ * @Date: 2021/05/24/11:41
+ */
+@Slf4j
+@RestController
+@RequestMapping("/oauth")
+@RequiredArgsConstructor(onConstructor_ = @Autowired)
+public class OauthController {
+    private final AuthRequestFactory factory;
+
+    @GetMapping
+    public List<String> list() {
+        return factory.oauthList();
+    }
+
+    @GetMapping("/login/{type}")
+    public void login(@PathVariable String type, HttpServletResponse response) throws IOException {
+        AuthRequest authRequest = factory.get(type);
+        //生成授权地址,并重定向
+        String authorize = authRequest.authorize(type + "::" + AuthStateUtils.createState());
+        response.sendRedirect(authorize);
+    }
+
+    /**
+     * 回调登录
+     * @param type
+     * @param callback
+     * @return
+     */
+    @RequestMapping("/{type}/callback")
+    public AuthResponse login(@PathVariable String type, AuthCallback callback) {
+        AuthRequest authRequest = factory.get(getAuthSource(type));
+        AuthResponse response = authRequest.login(callback);
+        log.info("【response】= {}", JSON.toJSONString(response));
+        return response;
+    }
+
+    private String getAuthSource(String type) {
+        if (StrUtil.isNotBlank(type)) {
+            return type.toUpperCase();
+        } else {
+            throw new RuntimeException("类型为空");
+        }
+    }
+}

+ 65 - 0
boman-auth/src/main/java/com/boman/auth/controller/TokenController.java

@@ -0,0 +1,65 @@
+package com.boman.auth.controller;
+
+import javax.servlet.http.HttpServletRequest;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+import com.boman.auth.form.LoginBody;
+import com.boman.auth.service.SysLoginService;
+import com.boman.domain.dto.R;
+import com.boman.common.core.utils.StringUtils;
+import com.boman.common.security.service.TokenService;
+import com.boman.system.api.model.LoginUser;
+
+/**
+ * token 控制
+ * 
+ * @author ruoyi
+ */
+@RestController
+//@CrossOrigin
+public class TokenController
+{
+    @Autowired
+    private TokenService tokenService;
+
+    @Autowired
+    private SysLoginService sysLoginService;
+
+    @PostMapping("login")
+    public R<?> login(@RequestBody LoginBody form)
+    {
+        // 用户登录
+        LoginUser userInfo = sysLoginService.login(form.getUsername(), form.getPassword());
+        // 获取登录token
+        return R.ok(tokenService.createToken(userInfo));
+    }
+
+    @DeleteMapping("logout")
+    public R<?> logout(HttpServletRequest request)
+    {
+        LoginUser loginUser = tokenService.getLoginUser(request);
+        if (StringUtils.isNotNull(loginUser))
+        {
+            String username = loginUser.getUsername();
+            // 删除用户缓存记录
+            tokenService.delLoginUser(loginUser.getToken());
+            // 记录用户退出日志
+            sysLoginService.logout(username);
+        }
+        return R.ok();
+    }
+
+    @PostMapping("refresh")
+    public R<?> refresh(HttpServletRequest request)
+    {
+        LoginUser loginUser = tokenService.getLoginUser(request);
+        if (StringUtils.isNotNull(loginUser))
+        {
+            // 刷新令牌有效期
+            tokenService.refreshToken(loginUser);
+            return R.ok();
+        }
+        return R.ok();
+    }
+}

+ 39 - 0
boman-auth/src/main/java/com/boman/auth/form/LoginBody.java

@@ -0,0 +1,39 @@
+package com.boman.auth.form;
+
+/**
+ * 用户登录对象
+ * 
+ * @author ruoyi
+ */
+public class LoginBody
+{
+    /**
+     * 用户名
+     */
+    private String username;
+
+    /**
+     * 用户密码
+     */
+    private String password;
+
+    public String getUsername()
+    {
+        return username;
+    }
+
+    public void setUsername(String username)
+    {
+        this.username = username;
+    }
+
+    public String getPassword()
+    {
+        return password;
+    }
+
+    public void setPassword(String password)
+    {
+        this.password = password;
+    }
+}

+ 95 - 0
boman-auth/src/main/java/com/boman/auth/service/SysLoginService.java

@@ -0,0 +1,95 @@
+package com.boman.auth.service;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+import com.boman.domain.constant.Constants;
+import com.boman.domain.constant.UserConstants;
+import com.boman.domain.dto.R;
+import com.boman.common.core.enums.UserStatus;
+import com.boman.common.core.exception.BaseException;
+import com.boman.common.core.utils.SecurityUtils;
+import com.boman.common.core.utils.StringUtils;
+import com.boman.system.api.RemoteLogService;
+import com.boman.system.api.RemoteUserService;
+import com.boman.domain.SysUser;
+import com.boman.system.api.model.LoginUser;
+
+/**
+ * 登录校验方法
+ * 
+ * @author ruoyi
+ */
+@Component
+public class SysLoginService
+{
+    @Autowired
+    private RemoteLogService remoteLogService;
+
+    @Autowired
+    private RemoteUserService remoteUserService;
+
+    /**
+     * 登录
+     */
+    public LoginUser login(String username, String password)
+    {
+        // 用户名或密码为空 错误
+        if (StringUtils.isAnyBlank(username, password))
+        {
+            remoteLogService.saveLogininfor(username, Constants.LOGIN_FAIL, "用户/密码必须填写");
+            throw new BaseException("用户/密码必须填写");
+        }
+        // 密码如果不在指定范围内 错误
+        if (password.length() < UserConstants.PASSWORD_MIN_LENGTH
+                || password.length() > UserConstants.PASSWORD_MAX_LENGTH)
+        {
+            remoteLogService.saveLogininfor(username, Constants.LOGIN_FAIL, "用户密码不在指定范围");
+            throw new BaseException("用户密码不在指定范围");
+        }
+        // 用户名不在指定范围内 错误
+        if (username.length() < UserConstants.USERNAME_MIN_LENGTH
+                || username.length() > UserConstants.USERNAME_MAX_LENGTH)
+        {
+            remoteLogService.saveLogininfor(username, Constants.LOGIN_FAIL, "用户名不在指定范围");
+            throw new BaseException("用户名不在指定范围");
+        }
+        // 查询用户信息
+        R<LoginUser> userResult = remoteUserService.getUserInfo(username);
+
+        if (R.FAIL == userResult.getCode())
+        {
+            throw new BaseException(userResult.getMsg());
+        }
+
+        if (StringUtils.isNull(userResult) || StringUtils.isNull(userResult.getData()))
+        {
+            remoteLogService.saveLogininfor(username, Constants.LOGIN_FAIL, "登录用户不存在");
+            throw new BaseException("登录用户:" + username + " 不存在");
+        }
+        LoginUser userInfo = userResult.getData();
+        SysUser user = userResult.getData().getSysUser();
+        if (UserStatus.DELETED.getCode().equals(user.getDelFlag()))
+        {
+            remoteLogService.saveLogininfor(username, Constants.LOGIN_FAIL, "对不起,您的账号已被删除");
+
+            throw new BaseException("对不起,您的账号:" + username + " 已被删除");
+        }
+        if (UserStatus.DISABLE.getCode().equals(user.getStatus()))
+        {
+            remoteLogService.saveLogininfor(username, Constants.LOGIN_FAIL, "用户已停用,请联系管理员");
+            throw new BaseException("对不起,您的账号:" + username + " 已停用");
+        }
+        if (!SecurityUtils.matchesPassword(password, user.getPassword()))
+        {
+            remoteLogService.saveLogininfor(username, Constants.LOGIN_FAIL, "用户密码错误");
+            throw new BaseException("用户不存在/密码错误");
+        }
+        remoteLogService.saveLogininfor(username, Constants.LOGIN_SUCCESS, "登录成功");
+        return userInfo;
+    }
+
+    public void logout(String loginName)
+    {
+        remoteLogService.saveLogininfor(loginName, Constants.LOGOUT, "退出成功");
+    }
+}

+ 10 - 0
boman-auth/src/main/resources/banner.txt

@@ -0,0 +1,10 @@
+Spring Boot Version: ${spring-boot.version}
+Spring Application Name: ${spring.application.name}
+                            _                        _    _     
+                           (_)                      | |  | |    
+ _ __  _   _   ___   _   _  _  ______   __ _  _   _ | |_ | |__  
+| '__|| | | | / _ \ | | | || ||______| / _` || | | || __|| '_ \ 
+| |   | |_| || (_) || |_| || |        | (_| || |_| || |_ | | | |
+|_|    \__,_| \___/  \__, ||_|         \__,_| \__,_| \__||_| |_|
+                      __/ |                                     
+                     |___/                                      

+ 27 - 0
boman-auth/src/main/resources/bootstrap-prod.yml

@@ -0,0 +1,27 @@
+# Tomcat
+server: 
+  port: 7200
+
+# Spring
+spring: 
+  application:
+    # 应用名称
+    name: boman-auth
+  profiles:
+    # 环境配置
+    active: prod
+  cloud:
+    nacos:
+      discovery:
+        # 服务注册地址
+        server-addr: 118.178.139.79:8848
+        namespace: 5d3b2dc4-f69e-47de-baa1-234d60012c04
+      config:
+        # 配置中心地址
+        server-addr: 118.178.139.79:8848
+        # 配置文件格式
+        file-extension: yml
+        # 共享配置
+        shared-configs:
+          - application-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension}
+        namespace: 5d3b2dc4-f69e-47de-baa1-234d60012c04

+ 27 - 0
boman-auth/src/main/resources/bootstrap-test.yml

@@ -0,0 +1,27 @@
+# Tomcat
+server: 
+  port: 7200
+
+# Spring
+spring: 
+  application:
+    # 应用名称
+    name: boman-auth
+  profiles:
+    # 环境配置
+    active: test
+  cloud:
+    nacos:
+      discovery:
+        # 服务注册地址
+        server-addr: 192.168.101.10:8848
+        namespace: 9690deba-607a-472c-9444-5a6a3b660db3
+      config:
+        # 配置中心地址
+        server-addr: 192.168.101.10:8848
+        # 配置文件格式
+        file-extension: yml
+        # 共享配置
+        shared-configs:
+          - application-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension}
+        namespace: 9690deba-607a-472c-9444-5a6a3b660db3

+ 38 - 0
boman-auth/src/main/resources/bootstrap.yml

@@ -0,0 +1,38 @@
+# Tomcat
+server: 
+  port: 9200
+
+# Spring
+spring: 
+  application:
+    # 应用名称
+    name: boman-auth
+  profiles:
+    # 环境配置
+    active: dev
+  cloud:
+    nacos:
+      discovery:
+        # 服务注册地址
+        server-addr: 192.168.101.10:8848
+        namespace: 0886e975-9ff6-4602-8ed2-f17b4d0ef1bc  #潜山数据局
+      config:
+        # 配置中心地址
+        server-addr: 192.168.101.10:8848
+        # 配置文件格式
+        file-extension: yml
+        # 共享配置
+        shared-configs:
+          - application-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension}
+        namespace: 0886e975-9ff6-4602-8ed2-f17b4d0ef1bc  #潜山数据局
+justauth:
+  enabled: true
+  type:
+    WECHAT_OPEN:
+      client-id: wxbd7b37548b5433ea
+      client-secret: 1a3c713279e80163ae1e39b0713ca711
+      redirect-uri: http://tx.xhsoftware.cn:9070/oauth/WECHAT_OPEN/callback
+  cache:
+    type: redis
+    prefix: 'SOCIAL::STATE::'
+    timeout: 1h

+ 74 - 0
boman-auth/src/main/resources/logback.xml

@@ -0,0 +1,74 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<configuration scan="true" scanPeriod="60 seconds" debug="false">
+    <!-- 日志存放路径 -->
+	<property name="log.path" value="logs/boman-auth" />
+   <!-- 日志输出格式 -->
+	<property name="log.pattern" value="%d{HH:mm:ss.SSS} [%thread] %-5level %logger{20} - [%method,%line] - %msg%n" />
+
+    <!-- 控制台输出 -->
+	<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
+		<encoder>
+			<pattern>${log.pattern}</pattern>
+		</encoder>
+	</appender>
+
+    <!-- 系统日志输出 -->
+	<appender name="file_info" class="ch.qos.logback.core.rolling.RollingFileAppender">
+	    <file>${log.path}/info.log</file>
+        <!-- 循环政策:基于时间创建日志文件 -->
+		<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
+            <!-- 日志文件名格式 -->
+			<fileNamePattern>${log.path}/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}/error.log</file>
+        <!-- 循环政策:基于时间创建日志文件 -->
+        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
+            <!-- 日志文件名格式 -->
+            <fileNamePattern>${log.path}/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>
+
+    <!-- 系统模块日志级别控制  -->
+	<logger name="com.boman" 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" />
+    </root>
+</configuration>

+ 16 - 0
boman-auth/src/main/resources/rebel.xml

@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+  This is the JRebel configuration file. It maps the running application to your IDE workspace, enabling JRebel reloading for this project.
+  Refer to https://manuals.jrebel.com/jrebel/standalone/config.html for more information.
+-->
+<application generated-by="intellij" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.zeroturnaround.com" xsi:schemaLocation="http://www.zeroturnaround.com http://update.zeroturnaround.com/jrebel/rebel-2_3.xsd">
+
+	<id>boman-auth</id>
+
+	<classpath>
+		<dir name="E:/boman-framwork/boman-auth/target/classes">
+		</dir>
+	</classpath>
+
+</application>

Một số tệp đã không được hiển thị bởi vì quá nhiều tập tin thay đổi trong này khác