diff --git a/jeecg-boot/jeecg-boot-module-system/Dockerfile b/jeecg-boot/jeecg-boot-module-system/Dockerfile
index 5fa43c3..e7803b0 100644
--- a/jeecg-boot/jeecg-boot-module-system/Dockerfile
+++ b/jeecg-boot/jeecg-boot-module-system/Dockerfile
@@ -11,6 +11,6 @@ WORKDIR /jeecg-boot
 EXPOSE 8080
 
 ADD ./src/main/resources/jeecg ./config/jeecg
-ADD ./target/jeecg-boot-module-system-3.1.0.jar ./
+ADD ./target/jeecg-boot-module-system-3.2.0.jar ./
 
-CMD sleep 60;java -Djava.security.egd=file:/dev/./urandom -jar jeecg-boot-module-system-3.1.0.jar
\ No newline at end of file
+CMD sleep 60;java -Djava.security.egd=file:/dev/./urandom -jar jeecg-boot-module-system-3.2.0.jar
\ No newline at end of file
diff --git a/jeecg-boot/jeecg-boot-module-system/pom.xml b/jeecg-boot/jeecg-boot-module-system/pom.xml
index 5b43eef..7cc1445 100644
--- a/jeecg-boot/jeecg-boot-module-system/pom.xml
+++ b/jeecg-boot/jeecg-boot-module-system/pom.xml
@@ -4,7 +4,7 @@
 	<parent>
 		<groupId>org.jeecgframework.boot</groupId>
 		<artifactId>jeecg-boot-parent</artifactId>
-		<version>3.1.0</version>
+		<version>3.2.0</version>
 	</parent>
 	<modelVersion>4.0.0</modelVersion>
 
@@ -34,35 +34,23 @@
 			<groupId>org.jeecgframework.boot</groupId>
 			<artifactId>jeecg-system-local-api</artifactId>
 		</dependency>
-		<!-- jeewx api -->
+		<!-- 企业微信/钉钉 api -->
 		<dependency>
 			<groupId>org.jeecgframework</groupId>
 			<artifactId>jeewx-api</artifactId>
-			<version>1.4.7</version>
-			<exclusions>
-				<exclusion>
-					<artifactId>commons-beanutils</artifactId>
-					<groupId>commons-beanutils</groupId>
-				</exclusion>
-				<exclusion>
-					<artifactId>commons-lang</artifactId>
-					<groupId>commons-lang</groupId>
-				</exclusion>
-			</exclusions>
 		</dependency>
 		<!-- 积木报表 -->
 		<dependency>
 			<groupId>org.jeecgframework.jimureport</groupId>
 			<artifactId>jimureport-spring-boot-starter</artifactId>
-			<version>1.4.4-beta</version>
+			<version>1.5.0-beta</version>
 		</dependency>
 
-
-		<!-- DEMO 示例模块【微服务启动请注释掉】 -->
+		<!-- DEMO 示例模块 -->
 		<dependency>
 			<groupId>org.jeecgframework.boot</groupId>
 			<artifactId>jeecg-boot-module-demo</artifactId>
-			<version>3.1.0</version>
+			<version>${jeecgboot.version}</version>
 		</dependency>
 
 	</dependencies>
diff --git a/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/JeecgOneToMainUtil.java b/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/JeecgOneToMainUtil.java
index 7546ca9..1e493a9 100644
--- a/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/JeecgOneToMainUtil.java
+++ b/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/JeecgOneToMainUtil.java
@@ -22,19 +22,27 @@ public class JeecgOneToMainUtil {
 	public static void main(String[] args) {
 		//第一步:设置主表配置
 		MainTableVo mainTable = new MainTableVo();
-		mainTable.setTableName("jeecg_order_main");//表名
-		mainTable.setEntityName("GuiTestOrderMain");	 //实体名
-		mainTable.setEntityPackage("gui");	 //包名
-		mainTable.setFtlDescription("GUI订单管理");	 //描述
+        //表名
+		mainTable.setTableName("jeecg_order_main");
+        //实体名
+		mainTable.setEntityName("GuiTestOrderMain");
+        //包名
+		mainTable.setEntityPackage("gui");
+        //描述
+		mainTable.setFtlDescription("GUI订单管理");
 		
 		//第二步:设置子表集合配置
 		List<SubTableVo> subTables = new ArrayList<SubTableVo>();
 		//[1].子表一
 		SubTableVo po = new SubTableVo();
-		po.setTableName("jeecg_order_customer");//表名
-		po.setEntityName("GuiTestOrderCustom");	    //实体名
-		po.setEntityPackage("gui");	        //包名
-		po.setFtlDescription("客户明细");       //描述
+        //表名
+		po.setTableName("jeecg_order_customer");
+        //实体名
+		po.setEntityName("GuiTestOrderCustom");
+        //包名
+		po.setEntityPackage("gui");
+        //描述
+		po.setFtlDescription("客户明细");
 		//子表外键参数配置
 		/*说明: 
 		 * a) 子表引用主表主键ID作为外键,外键字段必须以_ID结尾;
@@ -45,10 +53,14 @@ public class JeecgOneToMainUtil {
 		subTables.add(po);
 		//[2].子表二
 		SubTableVo po2 = new SubTableVo();
-		po2.setTableName("jeecg_order_ticket");		//表名
-		po2.setEntityName("GuiTestOrderTicket");			//实体名
-		po2.setEntityPackage("gui"); 				//包名
-		po2.setFtlDescription("产品明细");			//描述
+        //表名
+		po2.setTableName("jeecg_order_ticket");
+        //实体名
+		po2.setEntityName("GuiTestOrderTicket");
+        //包名
+		po2.setEntityPackage("gui");
+        //描述
+		po2.setFtlDescription("产品明细");
 		//子表外键参数配置
 		/*说明: 
 		 * a) 子表引用主表主键ID作为外键,外键字段必须以_ID结尾;
diff --git a/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/JeecgSystemApplication.java b/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/JeecgSystemApplication.java
index f709911..129c771 100644
--- a/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/JeecgSystemApplication.java
+++ b/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/JeecgSystemApplication.java
@@ -1,19 +1,14 @@
 package org.jeecg;
 
 import lombok.extern.slf4j.Slf4j;
-import org.apache.catalina.Context;
-import org.apache.tomcat.util.scan.StandardJarScanner;
 import org.jeecg.common.util.oConvertUtils;
 import org.springframework.boot.SpringApplication;
-//import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
 import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
 import org.springframework.boot.autoconfigure.mongo.MongoAutoConfiguration;
 import org.springframework.boot.builder.SpringApplicationBuilder;
-import org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory;
 import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;
 import org.springframework.context.ConfigurableApplicationContext;
-import org.springframework.context.annotation.Bean;
 import org.springframework.core.env.Environment;
 
 import java.net.InetAddress;
diff --git a/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/config/init/CodeGenerateDbConfig.java b/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/config/init/CodeGenerateDbConfig.java
index be63002..6f8a77d 100644
--- a/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/config/init/CodeGenerateDbConfig.java
+++ b/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/config/init/CodeGenerateDbConfig.java
@@ -43,7 +43,7 @@ public class CodeGenerateDbConfig {
                 }
             }
             CodegenDatasourceConfig.initDbConfig(driverClassName,url, username, password);
-            log.info(" 代码生成器数据库连接,使用application.yml的DB配置 ###################");
+            log.info(" Init CodeGenerate Config [ Get Db Config From application.yml ] ");
         }
         return null;
     }
diff --git a/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/config/jimureport/JimuReportTokenService.java b/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/config/jimureport/JimuReportTokenService.java
index 4d9f0e4..de0fdba 100644
--- a/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/config/jimureport/JimuReportTokenService.java
+++ b/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/config/jimureport/JimuReportTokenService.java
@@ -1,12 +1,12 @@
 package org.jeecg.config.jimureport;
 
 import lombok.extern.slf4j.Slf4j;
-import org.jeecg.common.system.api.ISysBaseAPI;
 import org.jeecg.common.system.util.JwtUtil;
 import org.jeecg.common.system.vo.SysUserCacheInfo;
 import org.jeecg.common.util.RedisUtil;
 import org.jeecg.common.util.TokenUtils;
 import org.jeecg.modules.jmreport.api.JmReportTokenServiceI;
+import org.jeecg.modules.system.service.impl.SysBaseApiImpl;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.context.annotation.Lazy;
 import org.springframework.stereotype.Component;
@@ -19,6 +19,7 @@ import java.util.Map;
  * 自定义积木报表鉴权(如果不进行自定义,则所有请求不做权限控制)
  *  * 1.自定义获取登录token
  *  * 2.自定义获取登录用户
+ * @author: jeecg-boot
  */
 
 
@@ -26,7 +27,7 @@ import java.util.Map;
 @Component
 public class JimuReportTokenService implements JmReportTokenServiceI {
     @Autowired
-    private ISysBaseAPI sysBaseAPI;
+    private SysBaseApiImpl sysBaseApi;
     @Autowired
     @Lazy
     private RedisUtil redisUtil;
@@ -43,17 +44,17 @@ public class JimuReportTokenService implements JmReportTokenServiceI {
 
     @Override
     public Boolean verifyToken(String token) {
-        return TokenUtils.verifyToken(token, sysBaseAPI, redisUtil);
+        return TokenUtils.verifyToken(token, sysBaseApi, redisUtil);
     }
 
     @Override
     public Map<String, Object> getUserInfo(String token) {
-        Map<String, Object> map = new HashMap<String, Object>();
+        Map<String, Object> map = new HashMap(5);
         String username = JwtUtil.getUsername(token);
         //此处通过token只能拿到一个信息 用户账号  后面的就是根据账号获取其他信息 查询数据或是走redis 用户根据自身业务可自定义
         SysUserCacheInfo userInfo = null;
         try {
-            userInfo = sysBaseAPI.getCacheUser(username);
+            userInfo = sysBaseApi.getCacheUser(username);
         } catch (Exception e) {
             log.error("获取用户信息异常:"+ e.getMessage());
             return map;
diff --git a/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/api/controller/SystemAPIController.java b/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/api/controller/SystemAPIController.java
index e5cc51f..5d2aa63 100644
--- a/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/api/controller/SystemAPIController.java
+++ b/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/api/controller/SystemAPIController.java
@@ -1,11 +1,12 @@
 package org.jeecg.modules.api.controller;
 
 import com.alibaba.fastjson.JSONObject;
+import lombok.extern.slf4j.Slf4j;
 import org.jeecg.common.api.dto.OnlineAuthDTO;
 import org.jeecg.common.api.dto.message.*;
-import org.jeecg.common.system.api.ISysBaseAPI;
 import org.jeecg.common.system.vo.*;
 import org.jeecg.modules.system.service.ISysUserService;
+import org.jeecg.modules.system.service.impl.SysBaseApiImpl;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 
@@ -16,14 +17,15 @@ import java.util.Set;
 
 /**
  * 服务化 system模块 对外接口请求类
+ * @author: jeecg-boot
  */
+@Slf4j
 @RestController
 @RequestMapping("/sys/api")
 public class SystemAPIController {
 
     @Autowired
-    private ISysBaseAPI sysBaseAPI;
-
+    private SysBaseApiImpl sysBaseApi;
     @Autowired
     private ISysUserService sysUserService;
 
@@ -34,7 +36,7 @@ public class SystemAPIController {
      */
     @PostMapping("/sendSysAnnouncement")
     public void sendSysAnnouncement(@RequestBody MessageDTO message){
-        sysBaseAPI.sendSysAnnouncement(message);
+        sysBaseApi.sendSysAnnouncement(message);
     }
 
     /**
@@ -43,7 +45,7 @@ public class SystemAPIController {
      */
     @PostMapping("/sendBusAnnouncement")
     public void sendBusAnnouncement(@RequestBody BusMessageDTO message){
-        sysBaseAPI.sendBusAnnouncement(message);
+        sysBaseApi.sendBusAnnouncement(message);
     }
 
     /**
@@ -52,7 +54,7 @@ public class SystemAPIController {
      */
     @PostMapping("/sendTemplateAnnouncement")
     public void sendTemplateAnnouncement(@RequestBody TemplateMessageDTO message){
-        sysBaseAPI.sendTemplateAnnouncement(message);
+        sysBaseApi.sendTemplateAnnouncement(message);
     }
 
     /**
@@ -61,7 +63,7 @@ public class SystemAPIController {
      */
     @PostMapping("/sendBusTemplateAnnouncement")
     public void sendBusTemplateAnnouncement(@RequestBody BusTemplateMessageDTO message){
-        sysBaseAPI.sendBusTemplateAnnouncement(message);
+        sysBaseApi.sendBusTemplateAnnouncement(message);
     }
 
     /**
@@ -71,7 +73,7 @@ public class SystemAPIController {
      */
     @PostMapping("/parseTemplateByCode")
     public String parseTemplateByCode(@RequestBody TemplateDTO templateDTO){
-        return sysBaseAPI.parseTemplateByCode(templateDTO);
+        return sysBaseApi.parseTemplateByCode(templateDTO);
     }
 
     /**
@@ -79,7 +81,7 @@ public class SystemAPIController {
      */
     @GetMapping("/updateSysAnnounReadFlag")
     public void updateSysAnnounReadFlag(@RequestParam("busType") String busType, @RequestParam("busId")String busId){
-        sysBaseAPI.updateSysAnnounReadFlag(busType, busId);
+        sysBaseApi.updateSysAnnounReadFlag(busType, busId);
     }
 
     /**
@@ -89,7 +91,7 @@ public class SystemAPIController {
      */
     @GetMapping("/getUserByName")
     public LoginUser getUserByName(@RequestParam("username") String username){
-        return sysBaseAPI.getUserByName(username);
+        return sysBaseApi.getUserByName(username);
     }
 
     /**
@@ -99,7 +101,7 @@ public class SystemAPIController {
      */
     @GetMapping("/getUserById")
     LoginUser getUserById(@RequestParam("id") String id){
-        return sysBaseAPI.getUserById(id);
+        return sysBaseApi.getUserById(id);
     }
 
     /**
@@ -109,7 +111,7 @@ public class SystemAPIController {
      */
     @GetMapping("/getRolesByUsername")
     List<String> getRolesByUsername(@RequestParam("username") String username){
-        return sysBaseAPI.getRolesByUsername(username);
+        return sysBaseApi.getRolesByUsername(username);
     }
 
     /**
@@ -119,7 +121,7 @@ public class SystemAPIController {
      */
     @GetMapping("/getDepartIdsByUsername")
     List<String> getDepartIdsByUsername(@RequestParam("username") String username){
-        return sysBaseAPI.getDepartIdsByUsername(username);
+        return sysBaseApi.getDepartIdsByUsername(username);
     }
 
     /**
@@ -129,7 +131,7 @@ public class SystemAPIController {
      */
     @GetMapping("/getDepartNamesByUsername")
     List<String> getDepartNamesByUsername(@RequestParam("username") String username){
-        return sysBaseAPI.getDepartNamesByUsername(username);
+        return sysBaseApi.getDepartNamesByUsername(username);
     }
 
 
@@ -140,7 +142,7 @@ public class SystemAPIController {
      */
     @GetMapping("/queryDictItemsByCode")
     List<DictModel> queryDictItemsByCode(@RequestParam("code") String code){
-        return sysBaseAPI.queryDictItemsByCode(code);
+        return sysBaseApi.queryDictItemsByCode(code);
     }
 
     /**
@@ -150,23 +152,31 @@ public class SystemAPIController {
      */
     @GetMapping("/queryEnableDictItemsByCode")
     List<DictModel> queryEnableDictItemsByCode(@RequestParam("code") String code){
-        return sysBaseAPI.queryEnableDictItemsByCode(code);
+        return sysBaseApi.queryEnableDictItemsByCode(code);
     }
 
 
     /** 查询所有的父级字典,按照create_time排序 */
     @GetMapping("/queryAllDict")
     List<DictModel> queryAllDict(){
-        return sysBaseAPI.queryAllDict();
+//        try{
+//            //睡10秒,gateway网关5秒超时,会触发熔断降级操作
+//            Thread.sleep(10000);
+//        }catch (Exception e){
+//            e.printStackTrace();
+//        }
+
+        log.info("--微服务接口被调用--");
+        return sysBaseApi.queryAllDict();
     }
 
     /**
      * 查询所有分类字典
      * @return
      */
-    @GetMapping("/queryAllDSysCategory")
-    List<SysCategoryModel> queryAllDSysCategory(){
-        return sysBaseAPI.queryAllDSysCategory();
+    @GetMapping("/queryAllSysCategory")
+    List<SysCategoryModel> queryAllSysCategory(){
+        return sysBaseApi.queryAllSysCategory();
     }
 
 
@@ -176,7 +186,7 @@ public class SystemAPIController {
      */
     @GetMapping("/queryAllDepartBackDictModel")
     List<DictModel> queryAllDepartBackDictModel(){
-        return sysBaseAPI.queryAllDepartBackDictModel();
+        return sysBaseApi.queryAllDepartBackDictModel();
     }
 
     /**
@@ -187,9 +197,9 @@ public class SystemAPIController {
     @GetMapping("/queryAllRole")
     public List<ComboModel> queryAllRole(@RequestParam(name = "roleIds",required = false)String[] roleIds){
         if(roleIds==null || roleIds.length==0){
-            return sysBaseAPI.queryAllRole();
+            return sysBaseApi.queryAllRole();
         }else{
-            return sysBaseAPI.queryAllRole(roleIds);
+            return sysBaseApi.queryAllRole(roleIds);
         }
     }
 
@@ -200,7 +210,7 @@ public class SystemAPIController {
      */
     @GetMapping("/getRoleIdsByUsername")
     public List<String> getRoleIdsByUsername(@RequestParam("username")String username){
-        return sysBaseAPI.getRoleIdsByUsername(username);
+        return sysBaseApi.getRoleIdsByUsername(username);
     }
 
     /**
@@ -210,7 +220,7 @@ public class SystemAPIController {
      */
     @GetMapping("/getDepartIdsByOrgCode")
     public String getDepartIdsByOrgCode(@RequestParam("orgCode")String orgCode){
-        return sysBaseAPI.getDepartIdsByOrgCode(orgCode);
+        return sysBaseApi.getDepartIdsByOrgCode(orgCode);
     }
 
     /**
@@ -219,7 +229,7 @@ public class SystemAPIController {
      */
     @GetMapping("/getAllSysDepart")
     public List<SysDepartModel> getAllSysDepart(){
-        return sysBaseAPI.getAllSysDepart();
+        return sysBaseApi.getAllSysDepart();
     }
 
     /**
@@ -230,7 +240,7 @@ public class SystemAPIController {
      */
     @GetMapping("/getDynamicDbSourceById")
     DynamicDataSourceModel getDynamicDbSourceById(@RequestParam("dbSourceId")String dbSourceId){
-        return sysBaseAPI.getDynamicDbSourceById(dbSourceId);
+        return sysBaseApi.getDynamicDbSourceById(dbSourceId);
     }
 
 
@@ -242,7 +252,7 @@ public class SystemAPIController {
      */
     @GetMapping("/getDeptHeadByDepId")
     public List<String> getDeptHeadByDepId(@RequestParam("deptId") String deptId){
-        return sysBaseAPI.getDeptHeadByDepId(deptId);
+        return sysBaseApi.getDeptHeadByDepId(deptId);
     }
 
     /**
@@ -252,7 +262,7 @@ public class SystemAPIController {
      */
     @GetMapping("/getParentDepartId")
     public DictModel getParentDepartId(@RequestParam("departId")String departId){
-        return sysBaseAPI.getParentDepartId(departId);
+        return sysBaseApi.getParentDepartId(departId);
     }
 
     /**
@@ -263,7 +273,7 @@ public class SystemAPIController {
      */
     @GetMapping("/getDynamicDbSourceByCode")
     public DynamicDataSourceModel getDynamicDbSourceByCode(@RequestParam("dbSourceCode") String dbSourceCode){
-        return sysBaseAPI.getDynamicDbSourceByCode(dbSourceCode);
+        return sysBaseApi.getDynamicDbSourceByCode(dbSourceCode);
     }
 
     /**
@@ -273,7 +283,7 @@ public class SystemAPIController {
      */
     @GetMapping("/sendWebSocketMsg")
     public void sendWebSocketMsg(String[] userIds, String cmd){
-        sysBaseAPI.sendWebSocketMsg(userIds, cmd);
+        sysBaseApi.sendWebSocketMsg(userIds, cmd);
     }
 
 
@@ -284,7 +294,7 @@ public class SystemAPIController {
      */
     @GetMapping("/queryAllUserByIds")
     public List<LoginUser> queryAllUserByIds(@RequestParam("userIds") String[] userIds){
-        return sysBaseAPI.queryAllUserByIds(userIds);
+        return sysBaseApi.queryAllUserByIds(userIds);
     }
 
     /**
@@ -293,7 +303,7 @@ public class SystemAPIController {
      */
     @GetMapping("/queryAllUserBackCombo")
     public List<ComboModel> queryAllUserBackCombo(){
-        return sysBaseAPI.queryAllUserBackCombo();
+        return sysBaseApi.queryAllUserBackCombo();
     }
 
     /**
@@ -302,7 +312,7 @@ public class SystemAPIController {
      */
     @GetMapping("/queryAllUser")
     public JSONObject queryAllUser(@RequestParam(name="userIds",required=false)String userIds, @RequestParam(name="pageNo",required=false) Integer pageNo,@RequestParam(name="pageSize",required=false) int pageSize){
-        return sysBaseAPI.queryAllUser(userIds, pageNo, pageSize);
+        return sysBaseApi.queryAllUser(userIds, pageNo, pageSize);
     }
 
 
@@ -315,7 +325,7 @@ public class SystemAPIController {
      */
     @GetMapping("/meetingSignWebsocket")
     public void meetingSignWebsocket(@RequestParam("userId")String userId){
-        sysBaseAPI.meetingSignWebsocket(userId);
+        sysBaseApi.meetingSignWebsocket(userId);
     }
 
     /**
@@ -325,7 +335,7 @@ public class SystemAPIController {
      */
     @GetMapping("/queryUserByNames")
     public List<LoginUser> queryUserByNames(@RequestParam("userNames")String[] userNames){
-        return sysBaseAPI.queryUserByNames(userNames);
+        return sysBaseApi.queryUserByNames(userNames);
     }
 
     /**
@@ -335,7 +345,7 @@ public class SystemAPIController {
      */
     @GetMapping("/getUserRoleSet")
     public Set<String> getUserRoleSet(@RequestParam("username")String username){
-        return sysBaseAPI.getUserRoleSet(username);
+        return sysBaseApi.getUserRoleSet(username);
     }
 
     /**
@@ -345,7 +355,7 @@ public class SystemAPIController {
      */
     @GetMapping("/getUserPermissionSet")
     public Set<String> getUserPermissionSet(@RequestParam("username") String username){
-        return sysBaseAPI.getUserPermissionSet(username);
+        return sysBaseApi.getUserPermissionSet(username);
     }
 
     //-----
@@ -357,7 +367,7 @@ public class SystemAPIController {
      */
     @PostMapping("/hasOnlineAuth")
     public boolean hasOnlineAuth(@RequestBody OnlineAuthDTO onlineAuthDTO){
-        return sysBaseAPI.hasOnlineAuth(onlineAuthDTO);
+        return sysBaseApi.hasOnlineAuth(onlineAuthDTO);
     }
 
     /**
@@ -386,7 +396,7 @@ public class SystemAPIController {
      */
     @GetMapping("/selectAllById")
     public SysDepartModel selectAllById(@RequestParam("id") String id){
-        return sysBaseAPI.selectAllById(id);
+        return sysBaseApi.selectAllById(id);
     }
 
     /**
@@ -396,7 +406,7 @@ public class SystemAPIController {
      */
     @GetMapping("/queryDeptUsersByUserId")
     public List<String> queryDeptUsersByUserId(@RequestParam("userId") String userId){
-        return sysBaseAPI.queryDeptUsersByUserId(userId);
+        return sysBaseApi.queryDeptUsersByUserId(userId);
     }
 
 
@@ -406,7 +416,7 @@ public class SystemAPIController {
      */
     @GetMapping("/queryPermissionDataRule")
     public List<SysPermissionDataRuleModel> queryPermissionDataRule(@RequestParam("component") String component, @RequestParam("requestPath")String requestPath, @RequestParam("username") String username){
-        return sysBaseAPI.queryPermissionDataRule(component, requestPath, username);
+        return sysBaseApi.queryPermissionDataRule(component, requestPath, username);
     }
 
     /**
@@ -416,7 +426,7 @@ public class SystemAPIController {
      */
     @GetMapping("/getCacheUser")
     public SysUserCacheInfo getCacheUser(@RequestParam("username") String username){
-        return sysBaseAPI.getCacheUser(username);
+        return sysBaseApi.getCacheUser(username);
     }
 
     /**
@@ -427,7 +437,7 @@ public class SystemAPIController {
      */
     @GetMapping("/translateDict")
     public String translateDict(@RequestParam("code") String code, @RequestParam("key") String key){
-        return sysBaseAPI.translateDict(code, key);
+        return sysBaseApi.translateDict(code, key);
     }
 
 
@@ -438,7 +448,7 @@ public class SystemAPIController {
      */
     @RequestMapping("/queryUsersByUsernames")
     List<JSONObject> queryUsersByUsernames(@RequestParam("usernames") String usernames){
-        return this.sysBaseAPI.queryUsersByUsernames(usernames);
+        return this.sysBaseApi.queryUsersByUsernames(usernames);
     }
 
     /**
@@ -448,7 +458,7 @@ public class SystemAPIController {
      */
     @RequestMapping("/queryUsersByIds")
     List<JSONObject> queryUsersByIds(@RequestParam("ids") String ids){
-        return this.sysBaseAPI.queryUsersByIds(ids);
+        return this.sysBaseApi.queryUsersByIds(ids);
     }
 
     /**
@@ -458,7 +468,7 @@ public class SystemAPIController {
      */
     @GetMapping("/queryDepartsByOrgcodes")
     List<JSONObject> queryDepartsByOrgcodes(@RequestParam("orgCodes") String orgCodes){
-        return this.sysBaseAPI.queryDepartsByOrgcodes(orgCodes);
+        return this.sysBaseApi.queryDepartsByOrgcodes(orgCodes);
     }
 
     /**
@@ -468,7 +478,7 @@ public class SystemAPIController {
      */
     @GetMapping("/queryDepartsByIds")
     List<JSONObject> queryDepartsByIds(@RequestParam("ids") String ids){
-        return this.sysBaseAPI.queryDepartsByIds(ids);
+        return this.sysBaseApi.queryDepartsByIds(ids);
     }
 
     /**
@@ -479,7 +489,7 @@ public class SystemAPIController {
      */
     @GetMapping("/sendEmailMsg")
     public void sendEmailMsg(@RequestParam("email")String email,@RequestParam("title")String title,@RequestParam("content")String content){
-         this.sysBaseAPI.sendEmailMsg(email,title,content);
+         this.sysBaseApi.sendEmailMsg(email,title,content);
     };
     /**
      * 41 获取公司下级部门和公司下所有用户信息
@@ -487,7 +497,7 @@ public class SystemAPIController {
      */
     @GetMapping("/getDeptUserByOrgCode")
     List<Map> getDeptUserByOrgCode(@RequestParam("orgCode")String orgCode){
-       return this.sysBaseAPI.getDeptUserByOrgCode(orgCode);
+       return this.sysBaseApi.getDeptUserByOrgCode(orgCode);
     }
 
     /**
@@ -498,7 +508,7 @@ public class SystemAPIController {
      */
     @GetMapping("/loadCategoryDictItem")
     public List<String> loadCategoryDictItem(@RequestParam("ids") String ids) {
-        return sysBaseAPI.loadCategoryDictItem(ids);
+        return sysBaseApi.loadCategoryDictItem(ids);
     }
 
     /**
@@ -510,7 +520,7 @@ public class SystemAPIController {
      */
     @GetMapping("/loadDictItem")
     public List<String> loadDictItem(@RequestParam("dictCode") String dictCode, @RequestParam("keys") String keys) {
-        return sysBaseAPI.loadDictItem(dictCode, keys);
+        return sysBaseApi.loadDictItem(dictCode, keys);
     }
 
     /**
@@ -522,7 +532,7 @@ public class SystemAPIController {
      */
     @GetMapping("/getDictItems")
     public List<DictModel> getDictItems(@RequestParam("dictCode") String dictCode) {
-        return sysBaseAPI.getDictItems(dictCode);
+        return sysBaseApi.getDictItems(dictCode);
     }
 
     /**
@@ -533,7 +543,7 @@ public class SystemAPIController {
      */
     @RequestMapping("/getManyDictItems")
     public Map<String, List<DictModel>> getManyDictItems(@RequestParam("dictCodeList") List<String> dictCodeList) {
-        return sysBaseAPI.getManyDictItems(dictCodeList);
+        return sysBaseApi.getManyDictItems(dictCodeList);
     }
 
     /**
@@ -546,7 +556,7 @@ public class SystemAPIController {
      */
     @GetMapping("/loadDictItemByKeyword")
     public List<DictModel> loadDictItemByKeyword(@RequestParam("dictCode") String dictCode, @RequestParam("keyword") String keyword, @RequestParam(value = "pageSize", required = false) Integer pageSize) {
-        return sysBaseAPI.loadDictItemByKeyword(dictCode, keyword, pageSize);
+        return sysBaseApi.loadDictItemByKeyword(dictCode, keyword, pageSize);
     }
 
     /**
@@ -557,7 +567,7 @@ public class SystemAPIController {
      */
     @GetMapping("/translateManyDict")
     public Map<String, List<DictModel>> translateManyDict(@RequestParam("dictCodes") String dictCodes, @RequestParam("keys") String keys){
-        return this.sysBaseAPI.translateManyDict(dictCodes, keys);
+        return this.sysBaseApi.translateManyDict(dictCodes, keys);
     }
 
 
@@ -570,7 +580,7 @@ public class SystemAPIController {
      */
     @GetMapping("/queryTableDictItemsByCode")
     List<DictModel> queryTableDictItemsByCode(@RequestParam("table") String table, @RequestParam("text") String text, @RequestParam("code") String code){
-        return sysBaseAPI.queryTableDictItemsByCode(table, text, code);
+        return sysBaseApi.queryTableDictItemsByCode(table, text, code);
     }
 
     /**
@@ -583,7 +593,7 @@ public class SystemAPIController {
      */
     @GetMapping("/queryFilterTableDictInfo")
     List<DictModel> queryFilterTableDictInfo(@RequestParam("table") String table, @RequestParam("text") String text, @RequestParam("code") String code, @RequestParam("filterSql") String filterSql){
-        return sysBaseAPI.queryFilterTableDictInfo(table, text, code, filterSql);
+        return sysBaseApi.queryFilterTableDictInfo(table, text, code, filterSql);
     }
 
     /**
@@ -598,7 +608,7 @@ public class SystemAPIController {
     @Deprecated
     @GetMapping("/queryTableDictByKeys")
     public List<String> queryTableDictByKeys(@RequestParam("table") String table, @RequestParam("text") String text, @RequestParam("code") String code, @RequestParam("keyArray") String[] keyArray){
-        return sysBaseAPI.queryTableDictByKeys(table, text, code, keyArray);
+        return sysBaseApi.queryTableDictByKeys(table, text, code, keyArray);
     }
 
 
@@ -612,7 +622,7 @@ public class SystemAPIController {
      */
     @GetMapping("/translateDictFromTable")
     public String translateDictFromTable(@RequestParam("table") String table, @RequestParam("text") String text, @RequestParam("code") String code, @RequestParam("key") String key){
-        return sysBaseAPI.translateDictFromTable(table, text, code, key);
+        return sysBaseApi.translateDictFromTable(table, text, code, key);
     }
 
 
@@ -628,7 +638,7 @@ public class SystemAPIController {
      */
     @GetMapping("/translateDictFromTableByKeys")
     public List<DictModel> translateDictFromTableByKeys(@RequestParam("table") String table, @RequestParam("text") String text, @RequestParam("code") String code, @RequestParam("keys") String keys) {
-        return this.sysBaseAPI.translateDictFromTableByKeys(table, text, code, keys);
+        return this.sysBaseApi.translateDictFromTableByKeys(table, text, code, keys);
     }
 
 }
diff --git a/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/cas/util/CASServiceUtil.java b/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/cas/util/CASServiceUtil.java
index 5db7028..1b609f6 100644
--- a/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/cas/util/CASServiceUtil.java
+++ b/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/cas/util/CASServiceUtil.java
@@ -16,6 +16,10 @@ import org.apache.http.conn.ssl.SSLConnectionSocketFactory;
 import org.apache.http.impl.client.CloseableHttpClient;
 import org.apache.http.impl.client.HttpClients;
 
+/**
+ * @Description: CASServiceUtil
+ * @author: jeecg-boot
+ */
 public class CASServiceUtil {
 	
 	public static void main(String[] args) {
diff --git a/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/cas/util/XmlUtils.java b/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/cas/util/XmlUtils.java
index 98213ea..bcd7d64 100644
--- a/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/cas/util/XmlUtils.java
+++ b/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/cas/util/XmlUtils.java
@@ -25,7 +25,7 @@ import lombok.extern.slf4j.Slf4j;
 
 /**
  * 解析cas,ST验证后的xml
- *
+ * @author: jeecg-boot
  */
 @Slf4j
 public final class XmlUtils {
@@ -39,7 +39,7 @@ public final class XmlUtils {
      */
     public static Document newDocument(final String xml) {
         final DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
-        final Map<String, Boolean> features = new HashMap<String, Boolean>();
+        final Map<String, Boolean> features = new HashMap(5);
         features.put(XMLConstants.FEATURE_SECURE_PROCESSING, true);
         features.put("http://apache.org/xml/features/nonvalidating/load-external-dtd", false);
         for (final Map.Entry<String, Boolean> entry : features.entrySet()) {
@@ -94,13 +94,15 @@ public final class XmlUtils {
 
             private StringBuilder buffer = new StringBuilder();
 
+            @Override
             public void startElement(final String uri, final String localName, final String qName,
-                    final Attributes attributes) throws SAXException {
+                                     final Attributes attributes) throws SAXException {
                 if (localName.equals(element)) {
                     this.foundElement = true;
                 }
             }
 
+            @Override
             public void endElement(final String uri, final String localName, final String qName) throws SAXException {
                 if (localName.equals(element)) {
                     this.foundElement = false;
@@ -109,6 +111,7 @@ public final class XmlUtils {
                 }
             }
 
+            @Override
             public void characters(char[] ch, int start, int length) throws SAXException {
                 if (this.foundElement) {
                     this.buffer.append(ch, start, length);
@@ -145,19 +148,22 @@ public final class XmlUtils {
 
             private boolean foundElement = false;
 
+            @Override
             public void startElement(final String uri, final String localName, final String qName,
-                    final Attributes attributes) throws SAXException {
+                                     final Attributes attributes) throws SAXException {
                 if (localName.equals(element)) {
                     this.foundElement = true;
                 }
             }
 
+            @Override
             public void endElement(final String uri, final String localName, final String qName) throws SAXException {
                 if (localName.equals(element)) {
                     this.foundElement = false;
                 }
             }
 
+            @Override
             public void characters(char[] ch, int start, int length) throws SAXException {
                 if (this.foundElement) {
                     builder.append(ch, start, length);
@@ -208,7 +214,7 @@ public final class XmlUtils {
 
         @Override
         public void startDocument() throws SAXException {
-            this.attributes = new HashMap<String, Object>();
+            this.attributes = new HashMap(5);
         }
 
         @Override
diff --git a/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/message/entity/MsgParams.java b/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/message/entity/MsgParams.java
index a640742..7bb6367 100644
--- a/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/message/entity/MsgParams.java
+++ b/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/message/entity/MsgParams.java
@@ -6,18 +6,30 @@ import lombok.Data;
 
 /**
  * 发送消息实体
+ * @author: jeecg-boot
  */
 @Data
 public class MsgParams implements Serializable  {
 	
 	private static final long serialVersionUID = 1L;
-	/*消息类型*/
+	/**
+     * 消息类型
+     */
 	private String msgType;
-	/*消息接收方*/
+
+    /**
+     * 消息接收方
+     */
 	private String receiver;
-	/*消息模板码*/
+
+    /**
+     * 消息模板码
+     */
 	private String templateCode;
-	/*测试数据*/
+
+    /**
+     * 测试数据
+     */
 	private String testData;
 	
 }
diff --git a/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/message/handle/ISendMsgHandle.java b/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/message/handle/ISendMsgHandle.java
index 87a2e18..1be8274 100644
--- a/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/message/handle/ISendMsgHandle.java
+++ b/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/message/handle/ISendMsgHandle.java
@@ -1,6 +1,16 @@
 package org.jeecg.modules.message.handle;
 
+/**
+ * @Description: 发送信息接口
+ * @author: jeecg-boot
+ */
 public interface ISendMsgHandle {
 
+    /**
+     * 发送信息
+     * @param es_receiver 发送人
+     * @param es_title 标题
+     * @param es_content 内容
+     */
 	void SendMsg(String es_receiver, String es_title, String es_content);
 }
diff --git a/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/message/handle/enums/SendMsgStatusEnum.java b/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/message/handle/enums/SendMsgStatusEnum.java
index 5b062b1..bfdf075 100644
--- a/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/message/handle/enums/SendMsgStatusEnum.java
+++ b/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/message/handle/enums/SendMsgStatusEnum.java
@@ -2,6 +2,7 @@ package org.jeecg.modules.message.handle.enums;
 
 /**
  * 推送状态枚举
+ * @author: jeecg-boot
  */
 public enum SendMsgStatusEnum {
 
diff --git a/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/message/handle/enums/SendMsgTypeEnum.java b/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/message/handle/enums/SendMsgTypeEnum.java
index bf86d5f..a47b7e2 100644
--- a/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/message/handle/enums/SendMsgTypeEnum.java
+++ b/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/message/handle/enums/SendMsgTypeEnum.java
@@ -4,13 +4,26 @@ import org.jeecg.common.util.oConvertUtils;
 
 /**
  * 发送消息类型枚举
+ * @author: jeecg-boot
  */
 public enum SendMsgTypeEnum {
 
-//推送方式:1短信 2邮件 3微信
+    /**
+     * 短信
+     */
 	SMS("1", "org.jeecg.modules.message.handle.impl.SmsSendMsgHandle"),
+    /**
+     * 邮件
+     */
 	EMAIL("2", "org.jeecg.modules.message.handle.impl.EmailSendMsgHandle"),
-	WX("3","org.jeecg.modules.message.handle.impl.WxSendMsgHandle");
+    /**
+     * 微信
+     */
+	WX("3","org.jeecg.modules.message.handle.impl.WxSendMsgHandle"),
+    /**
+     * 系统消息
+     */
+	SYSTEM_MESSAGE("4","org.jeecg.modules.message.handle.impl.SystemSendMsgHandle");
 
 	private String type;
 
diff --git a/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/message/handle/impl/EmailSendMsgHandle.java b/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/message/handle/impl/EmailSendMsgHandle.java
index 6ed3570..92addb1 100644
--- a/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/message/handle/impl/EmailSendMsgHandle.java
+++ b/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/message/handle/impl/EmailSendMsgHandle.java
@@ -11,6 +11,10 @@ import org.springframework.mail.javamail.MimeMessageHelper;
 import javax.mail.MessagingException;
 import javax.mail.internet.MimeMessage;
 
+/**
+ * @Description: 邮箱发送信息
+ * @author: jeecg-boot
+ */
 public class EmailSendMsgHandle implements ISendMsgHandle {
     static String emailFrom;
 
diff --git a/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/message/handle/impl/SmsSendMsgHandle.java b/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/message/handle/impl/SmsSendMsgHandle.java
index 0691bf1..c08ac2d 100644
--- a/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/message/handle/impl/SmsSendMsgHandle.java
+++ b/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/message/handle/impl/SmsSendMsgHandle.java
@@ -3,6 +3,10 @@ package org.jeecg.modules.message.handle.impl;
 import lombok.extern.slf4j.Slf4j;
 import org.jeecg.modules.message.handle.ISendMsgHandle;
 
+/**
+ * @Description: 短信发送
+ * @author: jeecg-boot
+ */
 @Slf4j
 public class SmsSendMsgHandle implements ISendMsgHandle {
 
diff --git a/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/message/handle/impl/SystemSendMsgHandle.java b/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/message/handle/impl/SystemSendMsgHandle.java
new file mode 100644
index 0000000..0ad5007
--- /dev/null
+++ b/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/message/handle/impl/SystemSendMsgHandle.java
@@ -0,0 +1,28 @@
+package org.jeecg.modules.message.handle.impl;
+
+import org.jeecg.common.api.dto.message.MessageDTO;
+import org.jeecg.common.exception.JeecgBootException;
+import org.jeecg.common.system.api.ISysBaseAPI;
+import org.jeecg.common.util.SpringContextUtils;
+import org.jeecg.common.util.oConvertUtils;
+import org.jeecg.modules.message.handle.ISendMsgHandle;
+
+/**
+* @Description: 发送系统消息
+* @Author: wangshuai
+* @Date: 2022年3月22日 18:48:20
+*/
+public class SystemSendMsgHandle implements ISendMsgHandle {
+
+    public static final String FROM_USER="system";
+
+    @Override
+    public void SendMsg(String es_receiver, String es_title, String es_content) {
+        if(oConvertUtils.isEmpty(es_receiver)){
+            throw  new JeecgBootException("被发送人不能为空");
+        }
+        ISysBaseAPI sysBaseAPI = SpringContextUtils.getBean(ISysBaseAPI.class);
+        MessageDTO messageDTO = new MessageDTO(FROM_USER,es_receiver,es_title,es_content);
+        sysBaseAPI.sendSysAnnouncement(messageDTO);
+    }
+}
\ No newline at end of file
diff --git a/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/message/handle/impl/WxSendMsgHandle.java b/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/message/handle/impl/WxSendMsgHandle.java
index 26e807a..a1d76f7 100644
--- a/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/message/handle/impl/WxSendMsgHandle.java
+++ b/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/message/handle/impl/WxSendMsgHandle.java
@@ -2,6 +2,11 @@ package org.jeecg.modules.message.handle.impl;
 
 import lombok.extern.slf4j.Slf4j;
 import org.jeecg.modules.message.handle.ISendMsgHandle;
+
+/**
+ * @Description: 发微信消息模板
+ * @author: jeecg-boot
+ */
 @Slf4j
 public class WxSendMsgHandle implements ISendMsgHandle {
 
diff --git a/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/message/job/SendMsgJob.java b/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/message/job/SendMsgJob.java
index 7408be3..6230074 100644
--- a/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/message/job/SendMsgJob.java
+++ b/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/message/job/SendMsgJob.java
@@ -19,6 +19,7 @@ import lombok.extern.slf4j.Slf4j;
 
 /**
  * 发送消息任务
+ * @author: jeecg-boot
  */
 
 @Slf4j
@@ -48,16 +49,24 @@ public class SendMsgJob implements Job {
 					sendMsgHandle = (ISendMsgHandle) Class.forName(SendMsgTypeEnum.SMS.getImplClass()).newInstance();
 				} else if (sysMessage.getEsType().equals(SendMsgTypeEnum.WX.getType())) {
 					sendMsgHandle = (ISendMsgHandle) Class.forName(SendMsgTypeEnum.WX.getImplClass()).newInstance();
+				} else if(sysMessage.getEsType().equals(SendMsgTypeEnum.SYSTEM_MESSAGE.getType())){
+                    //update-begin---author:wangshuai ---date:20220323  for:[issues/I4X698]根据模板发送系统消息,发送失败------------
+				    sendMsgHandle = (ISendMsgHandle) Class.forName(SendMsgTypeEnum.SYSTEM_MESSAGE.getImplClass()).newInstance();
+                    //update-end---author:wangshuai ---date:20220323  for:[issues/I4X698]根据模板发送系统消息,发送失败------------
 				}
 			} catch (Exception e) {
 				log.error(e.getMessage(),e);
 			}
 			Integer sendNum = sysMessage.getEsSendNum();
 			try {
-				sendMsgHandle.SendMsg(sysMessage.getEsReceiver(), sysMessage.getEsTitle(),
-						sysMessage.getEsContent().toString());
-				// 发送消息成功
-				sysMessage.setEsSendStatus(SendMsgStatusEnum.SUCCESS.getCode());
+                //update-begin---author:wangshuai ---date:20220323  for:[issues/I4X698]模板管理发送消息出现NullPointerException 錯誤------------
+                if(null != sendMsgHandle){
+                    sendMsgHandle.SendMsg(sysMessage.getEsReceiver(), sysMessage.getEsTitle(),
+                            sysMessage.getEsContent().toString());
+                    //发送消息成功
+                    sysMessage.setEsSendStatus(SendMsgStatusEnum.SUCCESS.getCode());
+                }
+                //update-end---author:wangshuai ---date:20220323  for:[issues/I4X698]模板管理发送消息出现NullPointerException 錯誤------------
 			} catch (Exception e) {
 				e.printStackTrace();
 				// 发送消息出现异常
diff --git a/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/message/mapper/SysMessageTemplateMapper.java b/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/message/mapper/SysMessageTemplateMapper.java
index fd0c650..98de4bd 100644
--- a/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/message/mapper/SysMessageTemplateMapper.java
+++ b/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/message/mapper/SysMessageTemplateMapper.java
@@ -13,6 +13,12 @@ import java.util.List;
  * @Version: V1.0
  */
 public interface SysMessageTemplateMapper extends BaseMapper<SysMessageTemplate> {
+
+    /**
+     * 通过模板CODE查询消息模板
+     * @param code 模板CODE
+     * @return List<SysMessageTemplate>
+     */
     @Select("SELECT * FROM SYS_SMS_TEMPLATE WHERE TEMPLATE_CODE = #{code}")
     List<SysMessageTemplate> selectByCode(String code);
 }
diff --git a/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/message/service/ISysMessageTemplateService.java b/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/message/service/ISysMessageTemplateService.java
index d81c5e6..da3e78e 100644
--- a/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/message/service/ISysMessageTemplateService.java
+++ b/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/message/service/ISysMessageTemplateService.java
@@ -12,5 +12,11 @@ import org.jeecg.modules.message.entity.SysMessageTemplate;
  * @Version: V1.0
  */
 public interface ISysMessageTemplateService extends JeecgService<SysMessageTemplate> {
+
+    /**
+     * 通过模板CODE查询消息模板
+     * @param code 模板CODE
+     * @return
+     */
     List<SysMessageTemplate> selectByCode(String code);
 }
diff --git a/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/message/util/PushMsgUtil.java b/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/message/util/PushMsgUtil.java
index f04acca..84f6f04 100644
--- a/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/message/util/PushMsgUtil.java
+++ b/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/message/util/PushMsgUtil.java
@@ -21,6 +21,7 @@ import java.util.Map;
 
 /**
  * 消息生成工具
+ * @author: jeecg-boot
  */
 
 @Component
diff --git a/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/message/websocket/SocketHandler.java b/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/message/websocket/SocketHandler.java
index 266ab6c..53eb9dc 100644
--- a/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/message/websocket/SocketHandler.java
+++ b/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/message/websocket/SocketHandler.java
@@ -4,16 +4,17 @@ import cn.hutool.core.util.ObjectUtil;
 import lombok.extern.slf4j.Slf4j;
 import org.jeecg.common.base.BaseMap;
 import org.jeecg.common.constant.CommonSendStatus;
-import org.jeecg.common.modules.redis.listener.JeecgRedisListerer;
+import org.jeecg.common.modules.redis.listener.JeecgRedisListener;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
 
 /**
  * 监听消息(采用redis发布订阅方式发送消息)
+ * @author: jeecg-boot
  */
 @Slf4j
 @Component
-public class SocketHandler implements JeecgRedisListerer {
+public class SocketHandler implements JeecgRedisListener {
 
     @Autowired
     private WebSocket webSocket;
diff --git a/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/message/websocket/TestSocketController.java b/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/message/websocket/TestSocketController.java
index cd8a934..fe70566 100644
--- a/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/message/websocket/TestSocketController.java
+++ b/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/message/websocket/TestSocketController.java
@@ -10,6 +10,10 @@ import org.springframework.web.bind.annotation.RestController;
 
 import com.alibaba.fastjson.JSONObject;
 
+/**
+ * @Description: TestSocketController
+ * @author: jeecg-boot
+ */
 @RestController
 @RequestMapping("/sys/socketTest")
 public class TestSocketController {
diff --git a/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/message/websocket/WebSocket.java b/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/message/websocket/WebSocket.java
index 3bb06c3..f5c2de5 100644
--- a/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/message/websocket/WebSocket.java
+++ b/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/message/websocket/WebSocket.java
@@ -2,6 +2,7 @@ package org.jeecg.modules.message.websocket;
 
 import java.util.HashMap;
 import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.CopyOnWriteArraySet;
 
 import javax.annotation.Resource;
@@ -28,11 +29,14 @@ import lombok.extern.slf4j.Slf4j;
  */
 @Component
 @Slf4j
-@ServerEndpoint("/websocket/{userId}") //此注解相当于设置访问URL
+@ServerEndpoint("/websocket/{userId}")
 public class WebSocket {
 
     private Session session;
 
+    /**
+     * 用户ID
+     */
     private String userId;
 
     private static final String REDIS_TOPIC_NAME = "socketHandler";
@@ -44,12 +48,15 @@ public class WebSocket {
      * 缓存 webSocket连接到单机服务class中(整体方案支持集群)
      */
     private static CopyOnWriteArraySet<WebSocket> webSockets = new CopyOnWriteArraySet<>();
-    private static Map<String, Session> sessionPool = new HashMap<String, Session>();
-
+    /**
+     * 线程安全Map
+     */
+    private static ConcurrentHashMap<String, Session> sessionPool = new ConcurrentHashMap<>();
 
     @OnOpen
     public void onOpen(Session session, @PathParam(value = "userId") String userId) {
         try {
+            //TODO 通过header中获取token,进行check
             this.session = session;
             this.userId = userId;
             webSockets.add(this);
@@ -113,9 +120,11 @@ public class WebSocket {
         obj.put(WebsocketConst.MSG_CMD, WebsocketConst.CMD_CHECK);
         //消息内容
         obj.put(WebsocketConst.MSG_TXT, "心跳响应");
+        //update-begin-author:taoyan date:20220308 for: 消息通知长连接启动心跳机制,后端代码小bug #3473
         for (WebSocket webSocket : webSockets) {
-            webSocket.pushMessage(message);
+            webSocket.pushMessage(obj.toJSONString());
         }
+        //update-end-author:taoyan date:20220308 for: 消息通知长连接启动心跳机制,后端代码小bug #3473
     }
 
     /**
diff --git a/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/monitor/controller/ActuatorRedisController.java b/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/monitor/controller/ActuatorRedisController.java
index c983581..383eb1a 100644
--- a/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/monitor/controller/ActuatorRedisController.java
+++ b/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/monitor/controller/ActuatorRedisController.java
@@ -19,6 +19,10 @@ import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 
+/**
+ * @Description: ActuatorRedisController
+ * @author: jeecg-boot
+ */
 @Slf4j
 @RestController
 @RequestMapping("/sys/actuator/redis")
@@ -100,7 +104,7 @@ public class ActuatorRedisController {
   	        	if(fs[i].getTotalSpace()==0) {
   	        		continue;
   	        	}
-  	        	Map<String,Object> map = new HashMap<>();
+  	        	Map<String,Object> map = new HashMap(5);
   	        	map.put("name", fsv.getSystemDisplayName(fs[i]));
   	        	map.put("max", fs[i].getTotalSpace());
   	        	map.put("rest", fs[i].getFreeSpace());
diff --git a/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/monitor/domain/RedisInfo.java b/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/monitor/domain/RedisInfo.java
index e605f9a..2249221 100644
--- a/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/monitor/domain/RedisInfo.java
+++ b/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/monitor/domain/RedisInfo.java
@@ -3,9 +3,13 @@ package org.jeecg.modules.monitor.domain;
 import java.util.HashMap;
 import java.util.Map;
 
+/**
+ * @Description: redis信息
+ * @author: jeecg-boot
+ */
 public class RedisInfo {
 
-	private static Map<String, String> map = new HashMap<>();
+	private static Map<String, String> map = new HashMap(5);
 
 	static {
 		map.put("redis_version", "Redis 服务器版本");
diff --git a/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/monitor/exception/RedisConnectException.java b/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/monitor/exception/RedisConnectException.java
index 0391c2a..0cc67b2 100644
--- a/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/monitor/exception/RedisConnectException.java
+++ b/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/monitor/exception/RedisConnectException.java
@@ -2,6 +2,7 @@ package org.jeecg.modules.monitor.exception;
 
 /**
  * Redis 连接异常
+ * @author: jeecg-boot
  */
 public class RedisConnectException extends Exception {
 
diff --git a/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/monitor/service/RedisService.java b/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/monitor/service/RedisService.java
index 4e6b41c..ebb6755 100644
--- a/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/monitor/service/RedisService.java
+++ b/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/monitor/service/RedisService.java
@@ -8,12 +8,17 @@ import com.alibaba.fastjson.JSONArray;
 import org.jeecg.modules.monitor.domain.RedisInfo;
 import org.jeecg.modules.monitor.exception.RedisConnectException;
 
+/**
+ * @Description: redis信息service接口
+ * @author: jeecg-boot
+ */
 public interface RedisService {
 
 	/**
 	 * 获取 redis 的详细信息
 	 *
 	 * @return List
+     * @throws RedisConnectException
 	 */
 	List<RedisInfo> getRedisInfo() throws RedisConnectException;
 
@@ -21,6 +26,7 @@ public interface RedisService {
 	 * 获取 redis key 数量
 	 *
 	 * @return Map
+     * @throws RedisConnectException
 	 */
 	Map<String, Object> getKeysSize() throws RedisConnectException;
 
@@ -28,12 +34,14 @@ public interface RedisService {
 	 * 获取 redis 内存信息
 	 *
 	 * @return Map
+     * @throws RedisConnectException
 	 */
 	Map<String, Object> getMemoryInfo() throws RedisConnectException;
 	/**
 	 * 获取 报表需要个redis信息
-	 *
+	 * @param type
 	 * @return Map
+     * @throws RedisConnectException
 	 */
 	Map<String, JSONArray> getMapForReport(String type) throws RedisConnectException ;
 }
diff --git a/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/monitor/service/impl/RedisServiceImpl.java b/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/monitor/service/impl/RedisServiceImpl.java
index 5211ab8..5ab7213 100644
--- a/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/monitor/service/impl/RedisServiceImpl.java
+++ b/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/monitor/service/impl/RedisServiceImpl.java
@@ -54,11 +54,11 @@ public class RedisServiceImpl implements RedisService {
 	@Override
 	public Map<String, Object> getKeysSize() throws RedisConnectException {
 		Long dbSize = redisConnectionFactory.getConnection().dbSize();
-		Map<String, Object> map = new HashMap<>();
+		Map<String, Object> map = new HashMap(5);
 		map.put("create_time", System.currentTimeMillis());
 		map.put("dbSize", dbSize);
 
-		log.info("--getKeysSize--: " + map.toString());
+		log.debug("--getKeysSize--: " + map.toString());
 		return map;
 	}
 
@@ -69,12 +69,12 @@ public class RedisServiceImpl implements RedisService {
 		for (Map.Entry<Object, Object> entry : info.entrySet()) {
 			String key = oConvertUtils.getString(entry.getKey());
 			if ("used_memory".equals(key)) {
-				map = new HashMap<>();
+				map = new HashMap(5);
 				map.put("used_memory", entry.getValue());
 				map.put("create_time", System.currentTimeMillis());
 			}
 		}
-		log.info("--getMemoryInfo--: " + map.toString());
+		log.debug("--getMemoryInfo--: " + map.toString());
 		return map;
 	}
 
@@ -86,7 +86,7 @@ public class RedisServiceImpl implements RedisService {
      */
 	@Override
 	public Map<String, JSONArray> getMapForReport(String type)  throws RedisConnectException {
-		Map<String,JSONArray> mapJson=new HashMap<String, JSONArray> ();
+		Map<String,JSONArray> mapJson=new HashMap(5);
 		JSONArray json = new JSONArray();
 		if("3".equals(type)){
 			List<RedisInfo> redisInfo = getRedisInfo();
diff --git a/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/ngalain/service/NgAlainService.java b/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/ngalain/service/NgAlainService.java
index dd450cd..85d605d 100644
--- a/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/ngalain/service/NgAlainService.java
+++ b/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/ngalain/service/NgAlainService.java
@@ -5,8 +5,33 @@ import com.alibaba.fastjson.JSONArray;
 import java.util.List;
 import java.util.Map;
 
+/**
+ * @Description: NgAlainService接口
+ * @author: jeecg-boot
+ */
 public interface NgAlainService {
+    /**
+     * 菜单
+     * @param id
+     * @return JSONArray
+     * @throws Exception
+     */
     public JSONArray getMenu(String id) throws Exception;
+
+    /**
+     * jeecg菜单
+     * @param id
+     * @return JSONArray
+     * @throws Exception
+     */
     public JSONArray getJeecgMenu(String id) throws Exception;
+
+    /**
+     * 获取字典值
+     * @param table
+     * @param key
+     * @param value
+     * @return List<Map<String, String>>
+     */
     public List<Map<String, String>> getDictByTable(String table, String key, String value);
 }
diff --git a/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/ngalain/service/impl/NgAlainServiceImpl.java b/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/ngalain/service/impl/NgAlainServiceImpl.java
index d2786b5..6e93496 100644
--- a/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/ngalain/service/impl/NgAlainServiceImpl.java
+++ b/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/ngalain/service/impl/NgAlainServiceImpl.java
@@ -15,6 +15,10 @@ import java.util.Base64;
 import java.util.List;
 import java.util.Map;
 
+/**
+ * @Description: NgAlainServiceImpl 实现类
+ * @author: jeecg-boot
+ */
 @Service("ngAlainService")
 public class NgAlainServiceImpl implements NgAlainService {
     @Autowired
diff --git a/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/oss/controller/OSSFileController.java b/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/oss/controller/OSSFileController.java
index 5ae7166..12995a4 100644
--- a/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/oss/controller/OSSFileController.java
+++ b/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/oss/controller/OSSFileController.java
@@ -20,6 +20,7 @@ import lombok.extern.slf4j.Slf4j;
 
 /**
  * 云存储示例 DEMO
+ * @author: jeecg-boot
  */
 @Slf4j
 @Controller
diff --git a/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/oss/entity/OSSFile.java b/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/oss/entity/OSSFile.java
index c62e527..92a187d 100644
--- a/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/oss/entity/OSSFile.java
+++ b/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/oss/entity/OSSFile.java
@@ -7,6 +7,10 @@ import lombok.experimental.Accessors;
 import org.jeecg.common.system.base.entity.JeecgEntity;
 import org.jeecgframework.poi.excel.annotation.Excel;
 
+/**
+ * @Description: oss云存储实体类
+ * @author: jeecg-boot
+ */
 @Data
 @TableName("oss_file")
 @EqualsAndHashCode(callSuper = false)
diff --git a/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/oss/mapper/OSSFileMapper.java b/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/oss/mapper/OSSFileMapper.java
index 3baebef..2290c45 100644
--- a/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/oss/mapper/OSSFileMapper.java
+++ b/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/oss/mapper/OSSFileMapper.java
@@ -3,6 +3,10 @@ package org.jeecg.modules.oss.mapper;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import org.jeecg.modules.oss.entity.OSSFile;
 
+/**
+ * @Description: oss云存储Mapper
+ * @author: jeecg-boot
+ */
 public interface OSSFileMapper extends BaseMapper<OSSFile> {
 
 }
diff --git a/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/oss/service/IOSSFileService.java b/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/oss/service/IOSSFileService.java
index e50d8df..d3abd57 100644
--- a/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/oss/service/IOSSFileService.java
+++ b/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/oss/service/IOSSFileService.java
@@ -6,10 +6,24 @@ import com.baomidou.mybatisplus.extension.service.IService;
 import org.jeecg.modules.oss.entity.OSSFile;
 import org.springframework.web.multipart.MultipartFile;
 
+/**
+ * @Description: OOS云存储service接口
+ * @author: jeecg-boot
+ */
 public interface IOSSFileService extends IService<OSSFile> {
 
+    /**
+     * oss文件上传
+     * @param multipartFile
+     * @throws IOException
+     */
 	void upload(MultipartFile multipartFile) throws IOException;
 
+    /**
+     * oss文件删除
+     * @param ossFile OSSFile对象
+     * @return
+     */
 	boolean delete(OSSFile ossFile);
 
 }
diff --git a/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/oss/service/impl/OSSFileServiceImpl.java b/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/oss/service/impl/OSSFileServiceImpl.java
index 98fc0a0..a5e7099 100644
--- a/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/oss/service/impl/OSSFileServiceImpl.java
+++ b/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/oss/service/impl/OSSFileServiceImpl.java
@@ -11,6 +11,10 @@ import org.springframework.web.multipart.MultipartFile;
 
 import java.io.IOException;
 
+/**
+ * @Description: OSS云存储实现类
+ * @author: jeecg-boot
+ */
 @Service("ossFileService")
 public class OSSFileServiceImpl extends ServiceImpl<OSSFileMapper, OSSFile> implements IOSSFileService {
 
diff --git a/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/quartz/controller/QuartzJobController.java b/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/quartz/controller/QuartzJobController.java
index d2e6d54..881e8ae 100644
--- a/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/quartz/controller/QuartzJobController.java
+++ b/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/quartz/controller/QuartzJobController.java
@@ -228,7 +228,8 @@ public class QuartzJobController {
 		List<String> errorMessage = new ArrayList<>();
 		int successLines = 0, errorLines = 0;
 		for (Map.Entry<String, MultipartFile> entity : fileMap.entrySet()) {
-			MultipartFile file = entity.getValue();// 获取上传文件对象
+            // 获取上传文件对象
+			MultipartFile file = entity.getValue();
 			ImportParams params = new ImportParams();
 			params.setTitleRows(2);
 			params.setHeadRows(1);
diff --git a/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/quartz/mapper/QuartzJobMapper.java b/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/quartz/mapper/QuartzJobMapper.java
index 764019e..a84c3c6 100644
--- a/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/quartz/mapper/QuartzJobMapper.java
+++ b/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/quartz/mapper/QuartzJobMapper.java
@@ -15,6 +15,11 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
  */
 public interface QuartzJobMapper extends BaseMapper<QuartzJob> {
 
+    /**
+     * 根据jobClassName查询
+     * @param jobClassName 任务类名
+     * @return
+     */
 	public List<QuartzJob> findByJobClassName(@Param("jobClassName") String jobClassName);
 
 }
diff --git a/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/quartz/service/IQuartzJobService.java b/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/quartz/service/IQuartzJobService.java
index a2250bb..cf90d13 100644
--- a/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/quartz/service/IQuartzJobService.java
+++ b/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/quartz/service/IQuartzJobService.java
@@ -15,19 +15,46 @@ import com.baomidou.mybatisplus.extension.service.IService;
  */
 public interface IQuartzJobService extends IService<QuartzJob> {
 
+    /**
+     * 通过类名寻找定时任务
+     * @param jobClassName 类名
+     * @return List<QuartzJob>
+     */
 	List<QuartzJob> findByJobClassName(String jobClassName);
 
+    /**
+     * 保存定时任务
+     * @param quartzJob
+     * @return boolean
+     */
 	boolean saveAndScheduleJob(QuartzJob quartzJob);
 
+    /**
+     * 编辑定时任务
+     * @param quartzJob
+     * @return boolean
+     * @throws SchedulerException
+     */
 	boolean editAndScheduleJob(QuartzJob quartzJob) throws SchedulerException;
 
+    /**
+     * 删除定时任务
+     * @param quartzJob
+     * @return boolean
+     */
 	boolean deleteAndStopJob(QuartzJob quartzJob);
 
+    /**
+     * 恢复定时任务
+     * @param quartzJob
+     * @return
+     */
 	boolean resumeJob(QuartzJob quartzJob);
 
 	/**
 	 * 执行定时任务
 	 * @param quartzJob
+     * @throws Exception
 	 */
 	void execute(QuartzJob quartzJob) throws Exception;
 
diff --git a/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/controller/CommonController.java b/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/controller/CommonController.java
index 796a938..760efa2 100644
--- a/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/controller/CommonController.java
+++ b/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/controller/CommonController.java
@@ -11,7 +11,6 @@ import org.jeecg.common.util.CommonUtils;
 import org.jeecg.common.util.RestUtil;
 import org.jeecg.common.util.TokenUtils;
 import org.jeecg.common.util.oConvertUtils;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.http.HttpHeaders;
 import org.springframework.http.HttpMethod;
@@ -42,9 +41,6 @@ import java.net.URLDecoder;
 @RequestMapping("/sys/common")
 public class CommonController {
 
-    @Autowired
-    private ISysBaseAPI sysBaseAPI;
-
     @Value(value = "${jeecg.path.upload}")
     private String uploadpath;
 
@@ -81,7 +77,8 @@ public class CommonController {
         }
 
         MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;
-        MultipartFile file = multipartRequest.getFile("file");// 获取上传文件对象
+        // 获取上传文件对象
+        MultipartFile file = multipartRequest.getFile("file");
         if(oConvertUtils.isEmpty(bizPath)){
             if(CommonConstant.UPLOAD_TYPE_OSS.equals(uploadType)){
                 //未指定目录,则用阿里云默认目录 upload
@@ -135,9 +132,11 @@ public class CommonController {
             String fileName = null;
             File file = new File(ctxPath + File.separator + bizPath + File.separator );
             if (!file.exists()) {
-                file.mkdirs();// 创建文件根目录
+                // 创建文件根目录
+                file.mkdirs();
             }
-            String orgName = mf.getOriginalFilename();// 获取文件名
+            // 获取文件名
+            String orgName = mf.getOriginalFilename();
             orgName = CommonUtils.getFileName(orgName);
             if(orgName.indexOf(".")!=-1){
                 fileName = orgName.substring(0, orgName.lastIndexOf(".")) + "_" + System.currentTimeMillis() + orgName.substring(orgName.lastIndexOf("."));
@@ -228,7 +227,8 @@ public class CommonController {
                 response.setStatus(404);
                 throw new RuntimeException("文件["+imgPath+"]不存在..");
             }
-            response.setContentType("application/force-download");// 设置强制下载不打开
+            // 设置强制下载不打开
+            response.setContentType("application/force-download");
             response.addHeader("Content-Disposition", "attachment;fileName=" + new String(file.getName().getBytes("UTF-8"),"iso-8859-1"));
             inputStream = new BufferedInputStream(new FileInputStream(filePath));
             outputStream = response.getOutputStream();
diff --git a/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/controller/DuplicateCheckController.java b/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/controller/DuplicateCheckController.java
index e08b442..04960c8 100644
--- a/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/controller/DuplicateCheckController.java
+++ b/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/controller/DuplicateCheckController.java
@@ -4,9 +4,11 @@ import javax.servlet.http.HttpServletRequest;
 
 import org.apache.commons.lang.StringUtils;
 import org.jeecg.common.api.vo.Result;
+import org.jeecg.common.constant.SymbolConstant;
 import org.jeecg.common.util.SqlInjectionUtil;
 import org.jeecg.modules.system.mapper.SysDictMapper;
 import org.jeecg.modules.system.model.DuplicateCheckVo;
+import org.jeecg.modules.system.security.DictQueryBlackListHandler;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RequestMethod;
@@ -32,6 +34,9 @@ public class DuplicateCheckController {
 	@Autowired
 	SysDictMapper sysDictMapper;
 
+	@Autowired
+	DictQueryBlackListHandler dictQueryBlackListHandler;
+
 	/**
 	 * 校验数据是否在系统中是否存在
 	 * 
@@ -55,6 +60,12 @@ public class DuplicateCheckController {
 			rs.setMessage("数据为空,不作处理!");
 			return rs;
 		}
+		//update-begin-author:taoyan date:20220329 for: VUEN-223【安全漏洞】当前被攻击的接口
+		String checkSql = duplicateCheckVo.getTableName() + SymbolConstant.COMMA + duplicateCheckVo.getFieldName() + SymbolConstant.COMMA;
+		if(!dictQueryBlackListHandler.isPass(checkSql)){
+			return Result.error(dictQueryBlackListHandler.getError());
+		}
+		//update-end-author:taoyan date:20220329 for: VUEN-223【安全漏洞】当前被攻击的接口
 		// update-end-author:taoyan date:20211227 for: JTC-25 【online报表】oracle 操作问题 录入弹框啥都不填直接保存 ①编码不是应该提示必填么?②报错也应该是具体文字提示,不是后台错误日志
 		if (StringUtils.isNotBlank(duplicateCheckVo.getDataId())) {
 			// [2].编辑页面校验
diff --git a/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/controller/LoginController.java b/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/controller/LoginController.java
index 67e7f0a..b8490ec 100644
--- a/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/controller/LoginController.java
+++ b/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/controller/LoginController.java
@@ -12,7 +12,6 @@ import org.apache.shiro.SecurityUtils;
 import org.jeecg.common.api.vo.Result;
 import org.jeecg.common.constant.CacheConstant;
 import org.jeecg.common.constant.CommonConstant;
-import org.jeecg.common.system.api.ISysBaseAPI;
 import org.jeecg.common.system.util.JwtUtil;
 import org.jeecg.common.system.vo.LoginUser;
 import org.jeecg.common.util.*;
@@ -23,6 +22,7 @@ import org.jeecg.modules.system.entity.SysTenant;
 import org.jeecg.modules.system.entity.SysUser;
 import org.jeecg.modules.system.model.SysLoginModel;
 import org.jeecg.modules.system.service.*;
+import org.jeecg.modules.system.service.impl.SysBaseApiImpl;
 import org.jeecg.modules.system.util.RandImageUtil;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -45,7 +45,7 @@ public class LoginController {
 	@Autowired
 	private ISysUserService sysUserService;
 	@Autowired
-	private ISysBaseAPI sysBaseAPI;
+	private SysBaseApiImpl sysBaseApi;
 	@Autowired
 	private ISysLogService logService;
 	@Autowired
@@ -77,7 +77,7 @@ public class LoginController {
             return result;
         }
         String lowerCaseCaptcha = captcha.toLowerCase();
-		String realKey = MD5Util.MD5Encode(lowerCaseCaptcha+sysLoginModel.getCheckKey(), "utf-8");
+		String realKey = Md5Util.md5Encode(lowerCaseCaptcha+sysLoginModel.getCheckKey(), "utf-8");
 		Object checkCode = redisUtil.get(realKey);
 		//当进入登录页时,有一定几率出现验证码错误 #1714
 		if(checkCode==null || !checkCode.toString().equals(lowerCaseCaptcha)) {
@@ -129,11 +129,8 @@ public class LoginController {
 		if(oConvertUtils.isNotEmpty(username)) {
 			// 根据用户名查询用户信息
 			SysUser sysUser = sysUserService.getUserByName(username);
-			//用户登录信息
-			Result<JSONObject> resultObj=userInfo(sysUser, result);
-			JSONObject jsonObject=resultObj.getResult();
 			JSONObject obj=new JSONObject();
-			obj.put("userInfo",jsonObject.get("userInfo"));
+			obj.put("userInfo",sysUser);
 			obj.put("sysAllDictItems", sysDictService.queryAllDictItems());
 			result.setResult(obj);
 			result.success("");
@@ -156,7 +153,7 @@ public class LoginController {
 	    	return Result.error("退出登录失败!");
 	    }
 	    String username = JwtUtil.getUsername(token);
-		LoginUser sysUser = sysBaseAPI.getUserByName(username);
+		LoginUser sysUser = sysBaseApi.getUserByName(username);
 	    if(sysUser!=null) {
 			//update-begin--Author:wangshuai  Date:20200714  for:登出日志没有记录人员
 			baseCommonService.addLog("用户名: "+sysUser.getRealname()+",退出成功!", CommonConstant.LOG_TYPE_1, null,sysUser);
@@ -436,7 +433,7 @@ public class LoginController {
 	@GetMapping(value = "/getEncryptedString")
 	public Result<Map<String,String>> getEncryptedString(){
 		Result<Map<String,String>> result = new Result<Map<String,String>>();
-		Map<String,String> map = new HashMap<String,String>();
+		Map<String,String> map = new HashMap(5);
 		map.put("key", EncryptedString.key);
 		map.put("iv",EncryptedString.iv);
 		result.setResult(map);
@@ -450,7 +447,7 @@ public class LoginController {
 	 */
 	@ApiOperation("获取验证码")
 	@GetMapping(value = "/randomImage/{key}")
-	public Result<String> randomImage(HttpServletResponse response,@PathVariable String key){
+	public Result<String> randomImage(HttpServletResponse response,@PathVariable("key") String key){
 		Result<String> res = new Result<String>();
 		try {
 			//生成验证码
@@ -459,7 +456,7 @@ public class LoginController {
 
 			//存到redis中
 			String lowerCaseCode = code.toLowerCase();
-			String realKey = MD5Util.MD5Encode(lowerCaseCode+key, "utf-8");
+			String realKey = Md5Util.md5Encode(lowerCaseCode+key, "utf-8");
             log.info("获取验证码,Redis checkCode = {},key = {}", code, key);
 			redisUtil.set(realKey, lowerCaseCode, 60);
 
@@ -548,7 +545,7 @@ public class LoginController {
 			return Result.error("验证码无效");
 		}
 		String lowerCaseCaptcha = captcha.toLowerCase();
-		String realKey = MD5Util.MD5Encode(lowerCaseCaptcha+checkKey, "utf-8");
+		String realKey = Md5Util.md5Encode(lowerCaseCaptcha+checkKey, "utf-8");
 		Object checkCode = redisUtil.get(realKey);
 		if(checkCode==null || !checkCode.equals(lowerCaseCaptcha)) {
 			return Result.error("验证码错误");
@@ -593,7 +590,7 @@ public class LoginController {
 	@GetMapping("/getQrcodeToken")
 	public Result getQrcodeToken(@RequestParam String qrcodeId) {
 		Object token = redisUtil.get(CommonConstant.LOGIN_QRCODE_TOKEN + qrcodeId);
-		Map result = new HashMap();
+		Map result = new HashMap(5);
 		Object qrcodeIdExpire = redisUtil.get(CommonConstant.LOGIN_QRCODE + qrcodeId);
 		if (oConvertUtils.isEmpty(qrcodeIdExpire)) {
 			//二维码过期通知前台刷新
diff --git a/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/controller/SysAnnouncementController.java b/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/controller/SysAnnouncementController.java
index 0891101..e3f78e1 100644
--- a/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/controller/SysAnnouncementController.java
+++ b/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/controller/SysAnnouncementController.java
@@ -13,7 +13,6 @@ import org.jeecg.common.api.vo.Result;
 import org.jeecg.common.constant.CommonConstant;
 import org.jeecg.common.constant.CommonSendStatus;
 import org.jeecg.common.constant.WebsocketConst;
-import org.jeecg.common.system.api.ISysBaseAPI;
 import org.jeecg.common.system.query.QueryGenerator;
 import org.jeecg.common.system.util.JwtUtil;
 import org.jeecg.common.system.vo.LoginUser;
@@ -25,6 +24,7 @@ import org.jeecg.modules.system.entity.SysAnnouncement;
 import org.jeecg.modules.system.entity.SysAnnouncementSend;
 import org.jeecg.modules.system.service.ISysAnnouncementSendService;
 import org.jeecg.modules.system.service.ISysAnnouncementService;
+import org.jeecg.modules.system.service.impl.SysBaseApiImpl;
 import org.jeecg.modules.system.service.impl.ThirdAppDingtalkServiceImpl;
 import org.jeecg.modules.system.service.impl.ThirdAppWechatEnterpriseServiceImpl;
 import org.jeecg.modules.system.util.XSSUtils;
@@ -74,7 +74,7 @@ public class SysAnnouncementController {
 	@Autowired
 	ThirdAppDingtalkServiceImpl dingtalkService;
 	@Autowired
-	private ISysBaseAPI sysBaseAPI;
+	private SysBaseApiImpl sysBaseApi;
 	@Autowired
 	@Lazy
 	private RedisUtil redisUtil;
@@ -129,7 +129,8 @@ public class SysAnnouncementController {
 			sysAnnouncement.setTitile(title);
 			// update-end-author:liusq date:20210804 for:标题处理xss攻击的问题
 			sysAnnouncement.setDelFlag(CommonConstant.DEL_FLAG_0.toString());
-			sysAnnouncement.setSendStatus(CommonSendStatus.UNPUBLISHED_STATUS_0);//未发布
+            //未发布
+			sysAnnouncement.setSendStatus(CommonSendStatus.UNPUBLISHED_STATUS_0);
 			sysAnnouncementService.saveAnnouncement(sysAnnouncement);
 			result.success("添加成功!");
 		} catch (Exception e) {
@@ -239,7 +240,8 @@ public class SysAnnouncementController {
 		if(sysAnnouncement==null) {
 			result.error500("未找到对应实体");
 		}else {
-			sysAnnouncement.setSendStatus(CommonSendStatus.PUBLISHED_STATUS_1);//发布中
+            //发布中
+			sysAnnouncement.setSendStatus(CommonSendStatus.PUBLISHED_STATUS_1);
 			sysAnnouncement.setSendTime(new Date());
 			String currentUserName = JwtUtil.getUserNameByToken(request);
 			sysAnnouncement.setSender(currentUserName);
@@ -295,7 +297,8 @@ public class SysAnnouncementController {
 		if(sysAnnouncement==null) {
 			result.error500("未找到对应实体");
 		}else {
-			sysAnnouncement.setSendStatus(CommonSendStatus.REVOKE_STATUS_2);//撤销发布
+            //撤销发布
+			sysAnnouncement.setSendStatus(CommonSendStatus.REVOKE_STATUS_2);
 			sysAnnouncement.setCancelTime(new Date());
 			boolean ok = sysAnnouncementService.updateById(sysAnnouncement);
 			if(ok) {
@@ -324,10 +327,14 @@ public class SysAnnouncementController {
 		String userId = sysUser.getId();
 		// 1.将系统消息补充到用户通告阅读标记表中
 		LambdaQueryWrapper<SysAnnouncement> querySaWrapper = new LambdaQueryWrapper<SysAnnouncement>();
-		querySaWrapper.eq(SysAnnouncement::getMsgType,CommonConstant.MSG_TYPE_ALL); // 全部人员
-		querySaWrapper.eq(SysAnnouncement::getDelFlag,CommonConstant.DEL_FLAG_0.toString());  // 未删除
-		querySaWrapper.eq(SysAnnouncement::getSendStatus, CommonConstant.HAS_SEND); //已发布
-		querySaWrapper.ge(SysAnnouncement::getEndTime, sysUser.getCreateTime()); //新注册用户不看结束通知
+        //全部人员
+		querySaWrapper.eq(SysAnnouncement::getMsgType,CommonConstant.MSG_TYPE_ALL);
+        //未删除
+		querySaWrapper.eq(SysAnnouncement::getDelFlag,CommonConstant.DEL_FLAG_0.toString());
+        //已发布
+		querySaWrapper.eq(SysAnnouncement::getSendStatus, CommonConstant.HAS_SEND);
+        //新注册用户不看结束通知
+		querySaWrapper.ge(SysAnnouncement::getEndTime, sysUser.getCreateTime());
 		//update-begin--Author:liusq  Date:20210108 for:[JT-424] 【开源issue】bug处理--------------------
 		querySaWrapper.notInSql(SysAnnouncement::getId,"select annt_id from sys_announcement_send where user_id='"+userId+"'");
 		//update-begin--Author:liusq  Date:20210108  for: [JT-424] 【开源issue】bug处理--------------------
@@ -354,10 +361,12 @@ public class SysAnnouncementController {
 		}
 		// 2.查询用户未读的系统消息
 		Page<SysAnnouncement> anntMsgList = new Page<SysAnnouncement>(0, pageSize);
-		anntMsgList = sysAnnouncementService.querySysCementPageByUserId(anntMsgList,userId,"1");//通知公告消息
+        //通知公告消息
+		anntMsgList = sysAnnouncementService.querySysCementPageByUserId(anntMsgList,userId,"1");
 		Page<SysAnnouncement> sysMsgList = new Page<SysAnnouncement>(0, pageSize);
-		sysMsgList = sysAnnouncementService.querySysCementPageByUserId(sysMsgList,userId,"2");//系统消息
-		Map<String,Object> sysMsgMap = new HashMap<String, Object>();
+        //系统消息
+		sysMsgList = sysAnnouncementService.querySysCementPageByUserId(sysMsgList,userId,"2");
+		Map<String,Object> sysMsgMap = new HashMap(5);
 		sysMsgMap.put("sysMsgList", sysMsgList.getRecords());
 		sysMsgMap.put("sysMsgTotal", sysMsgList.getTotal());
 		sysMsgMap.put("anntMsgList", anntMsgList.getRecords());
@@ -402,7 +411,8 @@ public class SysAnnouncementController {
         MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;
         Map<String, MultipartFile> fileMap = multipartRequest.getFileMap();
         for (Map.Entry<String, MultipartFile> entity : fileMap.entrySet()) {
-            MultipartFile file = entity.getValue();// 获取上传文件对象
+            // 获取上传文件对象
+            MultipartFile file = entity.getValue();
             ImportParams params = new ImportParams();
             params.setTitleRows(2);
             params.setHeadRows(1);
@@ -481,7 +491,7 @@ public class SysAnnouncementController {
             boolean tokenOK = false;
             try {
                 // 验证Token有效性
-                tokenOK = TokenUtils.verifyToken(request, sysBaseAPI, redisUtil);
+                tokenOK = TokenUtils.verifyToken(request, sysBaseApi, redisUtil);
             } catch (Exception ignored) {
             }
             // 判断是否传递了Token,并且Token有效,如果传了就不做查看限制,直接返回
diff --git a/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/controller/SysCategoryController.java b/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/controller/SysCategoryController.java
index 60bada8..719adcc 100644
--- a/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/controller/SysCategoryController.java
+++ b/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/controller/SysCategoryController.java
@@ -230,7 +230,8 @@ public class SysCategoryController {
 	  List<String> errorMessage = new ArrayList<>();
 	  int successLines = 0, errorLines = 0;
 	  for (Map.Entry<String, MultipartFile> entity : fileMap.entrySet()) {
-          MultipartFile file = entity.getValue();// 获取上传文件对象
+          // 获取上传文件对象
+          MultipartFile file = entity.getValue();
           ImportParams params = new ImportParams();
           params.setTitleRows(2);
           params.setHeadRows(1);
diff --git a/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/controller/SysDataLogController.java b/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/controller/SysDataLogController.java
index 14a56eb..bcba5d7 100644
--- a/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/controller/SysDataLogController.java
+++ b/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/controller/SysDataLogController.java
@@ -22,6 +22,10 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 
 import lombok.extern.slf4j.Slf4j;
 
+/**
+ * @Description: 系统数据日志
+ * @author: jeecg-boot
+ */
 @RestController
 @RequestMapping("/sys/dataLog")
 @Slf4j
diff --git a/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/controller/SysDataSourceController.java b/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/controller/SysDataSourceController.java
index 98417c1..9474d88 100644
--- a/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/controller/SysDataSourceController.java
+++ b/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/controller/SysDataSourceController.java
@@ -58,7 +58,7 @@ public class SysDataSourceController extends JeecgController<SysDataSource, ISys
      */
     @AutoLog(value = "多数据源管理-分页列表查询")
     @ApiOperation(value = "多数据源管理-分页列表查询", notes = "多数据源管理-分页列表查询")
-    //@RequiresRoles("admin")
+    @RequiresRoles("admin")
     @GetMapping(value = "/list")
     public Result<?> queryPageList(
             SysDataSource sysDataSource,
diff --git a/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/controller/SysDepartController.java b/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/controller/SysDepartController.java
index 3df03e7..5f32d45 100644
--- a/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/controller/SysDepartController.java
+++ b/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/controller/SysDepartController.java
@@ -171,7 +171,7 @@ public class SysDepartController {
 	 * @param sysDepart
 	 * @return
 	 */
-	//@RequiresRoles({"admin"})
+	@RequiresRoles({"admin"})
 	@RequestMapping(value = "/add", method = RequestMethod.POST)
 	@CacheEvict(value= {CacheConstant.SYS_DEPARTS_CACHE,CacheConstant.SYS_DEPART_IDS_CACHE}, allEntries=true)
 	public Result<SysDepart> add(@RequestBody SysDepart sysDepart, HttpServletRequest request) {
@@ -197,7 +197,7 @@ public class SysDepartController {
 	 * @param sysDepart
 	 * @return
 	 */
-	//@RequiresRoles({"admin"})
+	@RequiresRoles({"admin"})
 	@RequestMapping(value = "/edit", method = {RequestMethod.PUT,RequestMethod.POST})
 	@CacheEvict(value= {CacheConstant.SYS_DEPARTS_CACHE,CacheConstant.SYS_DEPART_IDS_CACHE}, allEntries=true)
 	public Result<SysDepart> edit(@RequestBody SysDepart sysDepart, HttpServletRequest request) {
@@ -225,7 +225,7 @@ public class SysDepartController {
     * @param id
     * @return
     */
-	//@RequiresRoles({"admin"})
+	@RequiresRoles({"admin"})
     @RequestMapping(value = "/delete", method = RequestMethod.DELETE)
 	@CacheEvict(value= {CacheConstant.SYS_DEPARTS_CACHE,CacheConstant.SYS_DEPART_IDS_CACHE}, allEntries=true)
    public Result<SysDepart> delete(@RequestParam(name="id",required=true) String id) {
@@ -253,7 +253,7 @@ public class SysDepartController {
 	 * @param ids
 	 * @return
 	 */
-	//@RequiresRoles({"admin"})
+	@RequiresRoles({"admin"})
 	@RequestMapping(value = "/deleteBatch", method = RequestMethod.DELETE)
 	@CacheEvict(value= {CacheConstant.SYS_DEPARTS_CACHE,CacheConstant.SYS_DEPART_IDS_CACHE}, allEntries=true)
 	public Result<SysDepart> deleteBatch(@RequestParam(name = "ids", required = true) String ids) {
@@ -370,7 +370,7 @@ public class SysDepartController {
      * @param response
      * @return
      */
-    //@RequiresRoles({"admin"})
+    @RequiresRoles({"admin"})
     @RequestMapping(value = "/importExcel", method = RequestMethod.POST)
 	@CacheEvict(value= {CacheConstant.SYS_DEPARTS_CACHE,CacheConstant.SYS_DEPART_IDS_CACHE}, allEntries=true)
     public Result<?> importExcel(HttpServletRequest request, HttpServletResponse response) {
@@ -379,14 +379,15 @@ public class SysDepartController {
 		List<SysDepart> listSysDeparts = null;
         Map<String, MultipartFile> fileMap = multipartRequest.getFileMap();
         for (Map.Entry<String, MultipartFile> entity : fileMap.entrySet()) {
-            MultipartFile file = entity.getValue();// 获取上传文件对象
+            // 获取上传文件对象
+            MultipartFile file = entity.getValue();
             ImportParams params = new ImportParams();
             params.setTitleRows(2);
             params.setHeadRows(1);
             params.setNeedSave(true);
             try {
             	// orgCode编码长度
-            	int codeLength = YouBianCodeUtil.zhanweiLength;
+            	int codeLength = YouBianCodeUtil.ZHANWEI_LENGTH;
                 listSysDeparts = ExcelImportUtil.importExcel(file.getInputStream(), SysDepart.class, params);
                 //按长度排序
                 Collections.sort(listSysDeparts, new Comparator<SysDepart>() {
@@ -476,7 +477,7 @@ public class SysDepartController {
 	public Result<Map<String,Object>> queryTreeByKeyWord(@RequestParam(name = "keyWord", required = false) String keyWord) {
 		Result<Map<String,Object>> result = new Result<>();
 		try {
-			Map<String,Object> map=new HashMap<String,Object>();
+			Map<String,Object> map=new HashMap(5);
 			List<SysDepartTreeModel> list = sysDepartService.queryTreeByKeyWord(keyWord);
 			//根据keyWord获取用户信息
 			LambdaQueryWrapper<SysUser> queryUser = new LambdaQueryWrapper<SysUser>();
diff --git a/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/controller/SysDepartPermissionController.java b/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/controller/SysDepartPermissionController.java
index 7ca751f..74a765a 100644
--- a/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/controller/SysDepartPermissionController.java
+++ b/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/controller/SysDepartPermissionController.java
@@ -2,16 +2,20 @@ package org.jeecg.modules.system.controller;
 
 import java.util.*;
 import java.util.stream.Collectors;
+import javax.annotation.Resource;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import org.apache.shiro.SecurityUtils;
 import org.jeecg.common.api.vo.Result;
 import org.jeecg.common.constant.CommonConstant;
 import org.jeecg.common.system.query.QueryGenerator;
 import org.jeecg.common.aspect.annotation.AutoLog;
+import org.jeecg.common.system.vo.LoginUser;
 import org.jeecg.common.util.oConvertUtils;
+import org.jeecg.modules.base.service.BaseCommonService;
 import org.jeecg.modules.system.entity.SysDepartPermission;
 import org.jeecg.modules.system.entity.SysDepartRolePermission;
 import org.jeecg.modules.system.entity.SysPermission;
@@ -56,6 +60,9 @@ public class SysDepartPermissionController extends JeecgController<SysDepartPerm
 	 @Autowired
 	 private ISysDepartRolePermissionService sysDepartRolePermissionService;
 
+	 @Autowired
+     private BaseCommonService baseCommonService;
+	 
 	/**
 	 * 分页列表查询
 	 *
@@ -174,7 +181,7 @@ public class SysDepartPermissionController extends JeecgController<SysDepartPerm
 		if(list==null || list.size()==0) {
 			return Result.error("未找到权限配置信息");
 		}else {
-			Map<String,Object> map = new HashMap<>();
+			Map<String,Object> map = new HashMap(5);
 			map.put("datarule", list);
 			LambdaQueryWrapper<SysDepartPermission> query = new LambdaQueryWrapper<SysDepartPermission>()
 				 .eq(SysDepartPermission::getPermissionId, permissionId)
@@ -253,7 +260,11 @@ public class SysDepartPermissionController extends JeecgController<SysDepartPerm
 			 String lastPermissionIds = json.getString("lastpermissionIds");
 			 this.sysDepartRolePermissionService.saveDeptRolePermission(roleId, permissionIds, lastPermissionIds);
 			 result.success("保存成功!");
-			 log.info("======部门角色授权成功=====耗时:" + (System.currentTimeMillis() - start) + "毫秒");
+             //update-begin---author:wangshuai ---date:20220316  for:[VUEN-234]部门角色授权添加敏感日志------------
+             LoginUser loginUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
+             baseCommonService.addLog("修改部门角色ID:"+roleId+"的权限配置,操作人: " +loginUser.getUsername() ,CommonConstant.LOG_TYPE_2, 2);
+             //update-end---author:wangshuai ---date:20220316  for:[VUEN-234]部门角色授权添加敏感日志------------
+             log.info("======部门角色授权成功=====耗时:" + (System.currentTimeMillis() - start) + "毫秒");
 		 } catch (Exception e) {
 			 result.error500("授权失败!");
 			 log.error(e.getMessage(), e);
@@ -282,9 +293,11 @@ public class SysDepartPermissionController extends JeecgController<SysDepartPerm
 			 }
 			 List<TreeModel> treeList = new ArrayList<>();
 			 getTreeModelList(treeList, list, null);
-			 Map<String,Object> resMap = new HashMap<String,Object>();
-			 resMap.put("treeList", treeList); //全部树节点数据
-			 resMap.put("ids", ids);//全部树ids
+			 Map<String,Object> resMap = new HashMap(5);
+             //全部树节点数据
+			 resMap.put("treeList", treeList);
+             //全部树ids
+			 resMap.put("ids", ids);
 			 result.setResult(resMap);
 			 result.setSuccess(true);
 		 } catch (Exception e) {
diff --git a/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/controller/SysDepartRoleController.java b/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/controller/SysDepartRoleController.java
index 383d027..d6c1465 100644
--- a/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/controller/SysDepartRoleController.java
+++ b/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/controller/SysDepartRoleController.java
@@ -2,6 +2,7 @@ package org.jeecg.modules.system.controller;
 
 import java.util.*;
 import java.util.stream.Collectors;
+import javax.annotation.Resource;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 
@@ -15,6 +16,7 @@ import org.jeecg.common.system.query.QueryGenerator;
 import org.jeecg.common.aspect.annotation.AutoLog;
 import org.jeecg.common.system.vo.LoginUser;
 import org.jeecg.common.util.oConvertUtils;
+import org.jeecg.modules.base.service.BaseCommonService;
 import org.jeecg.modules.system.entity.*;
 import org.jeecg.modules.system.service.*;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
@@ -54,7 +56,10 @@ public class SysDepartRoleController extends JeecgController<SysDepartRole, ISys
 
 	 @Autowired
 	 private ISysDepartService sysDepartService;
-	
+
+	 @Autowired
+     private BaseCommonService baseCommonService;
+     
 	/**
 	 * 分页列表查询
 	 *
@@ -98,7 +103,7 @@ public class SysDepartRoleController extends JeecgController<SysDepartRole, ISys
 	 * @param sysDepartRole
 	 * @return
 	 */
-	//@RequiresRoles({"admin"})
+	@RequiresRoles({"admin"})
 	@ApiOperation(value="部门角色-添加", notes="部门角色-添加")
 	@PostMapping(value = "/add")
 	public Result<?> add(@RequestBody SysDepartRole sysDepartRole) {
@@ -112,7 +117,7 @@ public class SysDepartRoleController extends JeecgController<SysDepartRole, ISys
 	 * @param sysDepartRole
 	 * @return
 	 */
-	//@RequiresRoles({"admin"})
+	@RequiresRoles({"admin"})
 	@ApiOperation(value="部门角色-编辑", notes="部门角色-编辑")
 	@RequestMapping(value = "/edit", method = {RequestMethod.PUT,RequestMethod.POST})
 	public Result<?> edit(@RequestBody SysDepartRole sysDepartRole) {
@@ -126,7 +131,7 @@ public class SysDepartRoleController extends JeecgController<SysDepartRole, ISys
 	 * @param id
 	 * @return
 	 */
-	//@RequiresRoles({"admin"})
+	@RequiresRoles({"admin"})
 	@AutoLog(value = "部门角色-通过id删除")
 	@ApiOperation(value="部门角色-通过id删除", notes="部门角色-通过id删除")
 	@DeleteMapping(value = "/delete")
@@ -141,7 +146,7 @@ public class SysDepartRoleController extends JeecgController<SysDepartRole, ISys
 	 * @param ids
 	 * @return
 	 */
-	//@RequiresRoles({"admin"})
+	@RequiresRoles({"admin"})
 	@AutoLog(value = "部门角色-批量删除")
 	@ApiOperation(value="部门角色-批量删除", notes="部门角色-批量删除")
 	@DeleteMapping(value = "/deleteBatch")
@@ -183,14 +188,18 @@ public class SysDepartRoleController extends JeecgController<SysDepartRole, ISys
 	  * @param json
 	  * @return
 	  */
-	 //@RequiresRoles({"admin"})
+	 @RequiresRoles({"admin"})
 	 @RequestMapping(value = "/deptRoleUserAdd", method = RequestMethod.POST)
 	 public Result<?> deptRoleAdd(@RequestBody JSONObject json) {
 		 String newRoleId = json.getString("newRoleId");
 		 String oldRoleId = json.getString("oldRoleId");
 		 String userId = json.getString("userId");
 		 departRoleUserService.deptRoleUserAdd(userId,newRoleId,oldRoleId);
-		 return Result.ok("添加成功!");
+         //update-begin---author:wangshuai ---date:20220316  for:[VUEN-234]部门角色分配添加敏感日志------------
+         LoginUser loginUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
+         baseCommonService.addLog("给部门用户ID:"+userId+"分配角色,操作人: " +loginUser.getUsername() ,CommonConstant.LOG_TYPE_2, 2);
+         //update-end---author:wangshuai ---date:20220316  for:[VUEN-234]部门角色分配添加敏感日志------------
+         return Result.ok("添加成功!");
 	 }
 
 	 /**
@@ -224,7 +233,7 @@ public class SysDepartRoleController extends JeecgController<SysDepartRole, ISys
 		 if(list==null || list.size()==0) {
 			 return Result.error("未找到权限配置信息");
 		 }else {
-			 Map<String,Object> map = new HashMap<>();
+			 Map<String,Object> map = new HashMap(5);
 			 map.put("datarule", list);
 			 LambdaQueryWrapper<SysDepartRolePermission> query = new LambdaQueryWrapper<SysDepartRolePermission>()
 					 .eq(SysDepartRolePermission::getPermissionId, permissionId)
diff --git a/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/controller/SysDictController.java b/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/controller/SysDictController.java
index 5e21130..1a5a7db 100644
--- a/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/controller/SysDictController.java
+++ b/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/controller/SysDictController.java
@@ -23,6 +23,7 @@ import org.jeecg.modules.system.entity.SysDict;
 import org.jeecg.modules.system.entity.SysDictItem;
 import org.jeecg.modules.system.model.SysDictTree;
 import org.jeecg.modules.system.model.TreeSelectModel;
+import org.jeecg.modules.system.security.DictQueryBlackListHandler;
 import org.jeecg.modules.system.service.ISysDictItemService;
 import org.jeecg.modules.system.service.ISysDictService;
 import org.jeecg.modules.system.vo.SysDictPage;
@@ -64,6 +65,8 @@ public class SysDictController {
 	private ISysDictItemService sysDictItemService;
 	@Autowired
 	public RedisTemplate<String, Object> redisTemplate;
+	@Autowired
+	private DictQueryBlackListHandler dictQueryBlackListHandler;
 
 	@RequestMapping(value = "/list", method = RequestMethod.GET)
 	public Result<IPage<SysDict>> queryPageList(SysDict sysDict,@RequestParam(name="pageNo", defaultValue="1") Integer pageNo,
@@ -118,7 +121,7 @@ public class SysDictController {
 	 */
 	@RequestMapping(value = "/queryAllDictItems", method = RequestMethod.GET)
 	public Result<?> queryAllDictItems(HttpServletRequest request) {
-		Map<String, List<DictModel>> res = new HashMap<String, List<DictModel>>();
+		Map<String, List<DictModel>> res = new HashMap(5);
 		res = sysDictService.queryAllDictItems();
 		return Result.ok(res);
 	}
@@ -153,9 +156,14 @@ public class SysDictController {
 	 * @return
 	 */
 	@RequestMapping(value = "/getDictItems/{dictCode}", method = RequestMethod.GET)
-	public Result<List<DictModel>> getDictItems(@PathVariable String dictCode, @RequestParam(value = "sign",required = false) String sign,HttpServletRequest request) {
+	public Result<List<DictModel>> getDictItems(@PathVariable("dictCode") String dictCode, @RequestParam(value = "sign",required = false) String sign,HttpServletRequest request) {
 		log.info(" dictCode : "+ dictCode);
 		Result<List<DictModel>> result = new Result<List<DictModel>>();
+		//update-begin-author:taoyan date:20220317 for: VUEN-222【安全机制】字典接口、online报表、online图表等接口,加一些安全机制
+		if(!dictQueryBlackListHandler.isPass(dictCode)){
+			return result.error500(dictQueryBlackListHandler.getError());
+		}
+		//update-end-author:taoyan date:20220317 for: VUEN-222【安全机制】字典接口、online报表、online图表等接口,加一些安全机制
 		try {
 			List<DictModel> ls = sysDictService.getDictItems(dictCode);
 			if (ls == null) {
@@ -181,12 +189,17 @@ public class SysDictController {
 	 * @return
 	 */
 	@RequestMapping(value = "/loadDict/{dictCode}", method = RequestMethod.GET)
-	public Result<List<DictModel>> loadDict(@PathVariable String dictCode,
-			@RequestParam(name="keyword") String keyword,
+	public Result<List<DictModel>> loadDict(@PathVariable("dictCode") String dictCode,
+			@RequestParam(name="keyword",required = false) String keyword,
 			@RequestParam(value = "sign",required = false) String sign,
 			@RequestParam(value = "pageSize", required = false) Integer pageSize) {
 		log.info(" 加载字典表数据,加载关键字: "+ keyword);
 		Result<List<DictModel>> result = new Result<List<DictModel>>();
+		//update-begin-author:taoyan date:20220317 for: VUEN-222【安全机制】字典接口、online报表、online图表等接口,加一些安全机制
+		if(!dictQueryBlackListHandler.isPass(dictCode)){
+			return result.error500(dictQueryBlackListHandler.getError());
+		}
+		//update-end-author:taoyan date:20220317 for: VUEN-222【安全机制】字典接口、online报表、online图表等接口,加一些安全机制
 		try {
 			List<DictModel> ls = sysDictService.loadDict(dictCode, keyword, pageSize);
 			if (ls == null) {
@@ -215,7 +228,7 @@ public class SysDictController {
 	 */
 	@RequestMapping(value = "/loadDictOrderByValue/{dictCode}", method = RequestMethod.GET)
 	public Result<List<DictModel>> loadDictOrderByValue(
-			@PathVariable String dictCode,
+			@PathVariable("dictCode") String dictCode,
 			@RequestParam(name = "keyword") String keyword,
 			@RequestParam(value = "sign", required = false) String sign,
 			@RequestParam(value = "pageSize", required = false) Integer pageSize) {
@@ -256,8 +269,13 @@ public class SysDictController {
 	 * @return
 	 */
 	@RequestMapping(value = "/loadDictItem/{dictCode}", method = RequestMethod.GET)
-	public Result<List<String>> loadDictItem(@PathVariable String dictCode,@RequestParam(name="key") String keys, @RequestParam(value = "sign",required = false) String sign,@RequestParam(value = "delNotExist",required = false,defaultValue = "true") boolean delNotExist,HttpServletRequest request) {
+	public Result<List<String>> loadDictItem(@PathVariable("dictCode") String dictCode,@RequestParam(name="key") String keys, @RequestParam(value = "sign",required = false) String sign,@RequestParam(value = "delNotExist",required = false,defaultValue = "true") boolean delNotExist,HttpServletRequest request) {
 		Result<List<String>> result = new Result<>();
+		//update-begin-author:taoyan date:20220317 for: VUEN-222【安全机制】字典接口、online报表、online图表等接口,加一些安全机制
+		if(!dictQueryBlackListHandler.isPass(dictCode)){
+			return result.error500(dictQueryBlackListHandler.getError());
+		}
+		//update-end-author:taoyan date:20220317 for: VUEN-222【安全机制】字典接口、online报表、online图表等接口,加一些安全机制
 		try {
 			if(dictCode.indexOf(",")!=-1) {
 				String[] params = dictCode.split(",");
@@ -337,7 +355,7 @@ public class SysDictController {
 	 * @param sysDict
 	 * @return
 	 */
-	//@RequiresRoles({"admin"})
+	@RequiresRoles({"admin"})
 	@RequestMapping(value = "/add", method = RequestMethod.POST)
 	public Result<SysDict> add(@RequestBody SysDict sysDict) {
 		Result<SysDict> result = new Result<SysDict>();
@@ -358,7 +376,7 @@ public class SysDictController {
 	 * @param sysDict
 	 * @return
 	 */
-	//@RequiresRoles({"admin"})
+	@RequiresRoles({"admin"})
 	@RequestMapping(value = "/edit", method = { RequestMethod.PUT,RequestMethod.POST })
 	public Result<SysDict> edit(@RequestBody SysDict sysDict) {
 		Result<SysDict> result = new Result<SysDict>();
@@ -380,7 +398,7 @@ public class SysDictController {
 	 * @param id
 	 * @return
 	 */
-	//@RequiresRoles({"admin"})
+	@RequiresRoles({"admin"})
 	@RequestMapping(value = "/delete", method = RequestMethod.DELETE)
 	@CacheEvict(value={CacheConstant.SYS_DICT_CACHE, CacheConstant.SYS_ENABLE_DICT_CACHE}, allEntries=true)
 	public Result<SysDict> delete(@RequestParam(name="id",required=true) String id) {
@@ -399,7 +417,7 @@ public class SysDictController {
 	 * @param ids
 	 * @return
 	 */
-	//@RequiresRoles({"admin"})
+	@RequiresRoles({"admin"})
 	@RequestMapping(value = "/deleteBatch", method = RequestMethod.DELETE)
 	@CacheEvict(value= {CacheConstant.SYS_DICT_CACHE, CacheConstant.SYS_ENABLE_DICT_CACHE}, allEntries=true)
 	public Result<SysDict> deleteBatch(@RequestParam(name="ids",required=true) String ids) {
@@ -482,13 +500,14 @@ public class SysDictController {
 	 * @param
 	 * @return
 	 */
-	//@RequiresRoles({"admin"})
+	@RequiresRoles({"admin"})
 	@RequestMapping(value = "/importExcel", method = RequestMethod.POST)
 	public Result<?> importExcel(HttpServletRequest request, HttpServletResponse response) {
  		MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;
 		Map<String, MultipartFile> fileMap = multipartRequest.getFileMap();
 		for (Map.Entry<String, MultipartFile> entity : fileMap.entrySet()) {
-			MultipartFile file = entity.getValue();// 获取上传文件对象
+            // 获取上传文件对象
+			MultipartFile file = entity.getValue();
 			ImportParams params = new ImportParams();
 			params.setTitleRows(2);
 			params.setHeadRows(2);
@@ -568,7 +587,7 @@ public class SysDictController {
 	 * @return
 	 */
 	@RequestMapping(value = "/deletePhysic/{id}", method = RequestMethod.DELETE)
-	public Result<?> deletePhysic(@PathVariable String id) {
+	public Result<?> deletePhysic(@PathVariable("id") String id) {
 		try {
 			sysDictService.deleteOneDictPhysically(id);
 			return Result.ok("删除成功!");
@@ -584,7 +603,7 @@ public class SysDictController {
 	 * @return
 	 */
 	@RequestMapping(value = "/back/{id}", method = RequestMethod.PUT)
-	public Result<?> back(@PathVariable String id) {
+	public Result<?> back(@PathVariable("id") String id) {
 		try {
 			sysDictService.updateDictDelFlag(0,id);
 			return Result.ok("操作成功!");
diff --git a/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/controller/SysDictItemController.java b/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/controller/SysDictItemController.java
index 611927e..73b1bd5 100644
--- a/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/controller/SysDictItemController.java
+++ b/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/controller/SysDictItemController.java
@@ -7,6 +7,7 @@ import java.util.Date;
 import javax.servlet.http.HttpServletRequest;
 
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import org.apache.commons.lang.StringUtils;
 import org.apache.shiro.authz.annotation.RequiresRoles;
@@ -38,6 +39,7 @@ import lombok.extern.slf4j.Slf4j;
  * @Author zhangweijian
  * @since 2018-12-28
  */
+@Api(tags = "数据字典")
 @RestController
 @RequestMapping("/sys/dictItem")
 @Slf4j
@@ -71,7 +73,7 @@ public class SysDictItemController {
 	 * @功能:新增
 	 * @return
 	 */
-	//@RequiresRoles({"admin"})
+	@RequiresRoles({"admin"})
 	@RequestMapping(value = "/add", method = RequestMethod.POST)
 	@CacheEvict(value= {CacheConstant.SYS_DICT_CACHE, CacheConstant.SYS_ENABLE_DICT_CACHE}, allEntries=true)
 	public Result<SysDictItem> add(@RequestBody SysDictItem sysDictItem) {
@@ -92,7 +94,7 @@ public class SysDictItemController {
 	 * @param sysDictItem
 	 * @return
 	 */
-	//@RequiresRoles({"admin"})
+	@RequiresRoles({"admin"})
 	@RequestMapping(value = "/edit",  method = { RequestMethod.PUT,RequestMethod.POST })
 	@CacheEvict(value={CacheConstant.SYS_DICT_CACHE, CacheConstant.SYS_ENABLE_DICT_CACHE}, allEntries=true)
 	public Result<SysDictItem> edit(@RequestBody SysDictItem sysDictItem) {
@@ -116,7 +118,7 @@ public class SysDictItemController {
 	 * @param id
 	 * @return
 	 */
-	//@RequiresRoles({"admin"})
+	@RequiresRoles({"admin"})
 	@RequestMapping(value = "/delete", method = RequestMethod.DELETE)
 	@CacheEvict(value={CacheConstant.SYS_DICT_CACHE, CacheConstant.SYS_ENABLE_DICT_CACHE}, allEntries=true)
 	public Result<SysDictItem> delete(@RequestParam(name="id",required=true) String id) {
@@ -138,7 +140,7 @@ public class SysDictItemController {
 	 * @param ids
 	 * @return
 	 */
-	//@RequiresRoles({"admin"})
+	@RequiresRoles({"admin"})
 	@RequestMapping(value = "/deleteBatch", method = RequestMethod.DELETE)
 	@CacheEvict(value={CacheConstant.SYS_DICT_CACHE, CacheConstant.SYS_ENABLE_DICT_CACHE}, allEntries=true)
 	public Result<SysDictItem> deleteBatch(@RequestParam(name="ids",required=true) String ids) {
@@ -161,7 +163,7 @@ public class SysDictItemController {
 	@RequestMapping(value = "/dictItemCheck", method = RequestMethod.GET)
 	@ApiOperation("字典重复校验接口")
 	public Result<Object> doDictItemCheck(SysDictItem sysDictItem, HttpServletRequest request) {
-		int num = 0;
+		Long num = Long.valueOf(0);
 		LambdaQueryWrapper<SysDictItem> queryWrapper = new LambdaQueryWrapper<SysDictItem>();
 		queryWrapper.eq(SysDictItem::getItemValue,sysDictItem.getItemValue());
 		queryWrapper.eq(SysDictItem::getDictId,sysDictItem.getDictId());
diff --git a/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/controller/SysGatewayRouteController.java b/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/controller/SysGatewayRouteController.java
index dde34ad..f0b99f4 100644
--- a/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/controller/SysGatewayRouteController.java
+++ b/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/controller/SysGatewayRouteController.java
@@ -67,7 +67,7 @@ public class SysGatewayRouteController extends JeecgController<SysGatewayRoute, 
      * @param id
      * @return
      */
-    //@RequiresRoles({"admin"})
+    @RequiresRoles({"admin"})
     @RequestMapping(value = "/delete", method = RequestMethod.DELETE)
     public Result<?> delete(@RequestParam(name = "id", required = true) String id) {
         sysGatewayRouteService.deleteById(id);
diff --git a/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/controller/SysPermissionController.java b/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/controller/SysPermissionController.java
index e4d5b4e..60d6853 100644
--- a/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/controller/SysPermissionController.java
+++ b/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/controller/SysPermissionController.java
@@ -12,9 +12,10 @@ import org.jeecg.common.api.vo.Result;
 import org.jeecg.common.constant.CommonConstant;
 import org.jeecg.common.constant.enums.RoleIndexConfigEnum;
 import org.jeecg.common.system.vo.LoginUser;
-import org.jeecg.common.util.MD5Util;
+import org.jeecg.common.util.Md5Util;
 import org.jeecg.common.util.oConvertUtils;
 import org.jeecg.config.JeeccgBaseConfig;
+import org.jeecg.modules.base.service.BaseCommonService;
 import org.jeecg.modules.system.entity.*;
 import org.jeecg.modules.system.model.SysPermissionTree;
 import org.jeecg.modules.system.model.TreeModel;
@@ -23,6 +24,7 @@ import org.jeecg.modules.system.util.PermissionDataUtil;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 
+import javax.servlet.http.HttpServletRequest;
 import java.util.*;
 import java.util.stream.Collectors;
 
@@ -57,6 +59,12 @@ public class SysPermissionController {
 	@Autowired
 	private JeeccgBaseConfig jeeccgBaseConfig;
 
+	@Autowired
+    private BaseCommonService baseCommonService;
+
+	@Autowired
+	private ISysRoleIndexService sysRoleIndexService;
+
 	/**
 	 * 加载数据节点
 	 *
@@ -156,7 +164,7 @@ public class SysPermissionController {
 			query.eq(SysPermission::getDelFlag, CommonConstant.DEL_FLAG_0);
 			query.orderByAsc(SysPermission::getSortNo);
 			List<SysPermission> list = sysPermissionService.list(query);
-			Map<String, List<SysPermissionTree>> listMap = new HashMap<>();
+			Map<String, List<SysPermissionTree>> listMap = new HashMap(5);
 			for (SysPermission item : list) {
 				String pid = item.getParentId();
 				if (parentIdList.contains(pid)) {
@@ -204,7 +212,7 @@ public class SysPermissionController {
 	 * @return
 	 */
 	@RequestMapping(value = "/getUserPermissionByToken", method = RequestMethod.GET)
-	public Result<?> getUserPermissionByToken() {
+	public Result<?> getUserPermissionByToken(HttpServletRequest request) {
 		Result<JSONObject> result = new Result<JSONObject>();
 		try {
 			//直接获取当前用户不适用前端token
@@ -311,7 +319,7 @@ public class SysPermissionController {
 	 * @param permission
 	 * @return
 	 */
-	//@RequiresRoles({ "admin" })
+	@RequiresRoles({ "admin" })
 	@RequestMapping(value = "/add", method = RequestMethod.POST)
 	public Result<SysPermission> add(@RequestBody SysPermission permission) {
 		Result<SysPermission> result = new Result<SysPermission>();
@@ -331,7 +339,7 @@ public class SysPermissionController {
 	 * @param permission
 	 * @return
 	 */
-	//@RequiresRoles({ "admin" })
+	@RequiresRoles({ "admin" })
 	@RequestMapping(value = "/edit", method = { RequestMethod.PUT, RequestMethod.POST })
 	public Result<SysPermission> edit(@RequestBody SysPermission permission) {
 		Result<SysPermission> result = new Result<>();
@@ -351,7 +359,7 @@ public class SysPermissionController {
 	 * @param id
 	 * @return
 	 */
-	//@RequiresRoles({ "admin" })
+	@RequiresRoles({ "admin" })
 	@RequestMapping(value = "/delete", method = RequestMethod.DELETE)
 	public Result<SysPermission> delete(@RequestParam(name = "id", required = true) String id) {
 		Result<SysPermission> result = new Result<>();
@@ -370,7 +378,7 @@ public class SysPermissionController {
 	 * @param ids
 	 * @return
 	 */
-	//@RequiresRoles({ "admin" })
+	@RequiresRoles({ "admin" })
 	@RequestMapping(value = "/deleteBatch", method = RequestMethod.DELETE)
 	public Result<SysPermission> deleteBatch(@RequestParam(name = "ids", required = true) String ids) {
 		Result<SysPermission> result = new Result<>();
@@ -411,8 +419,10 @@ public class SysPermissionController {
 			getTreeModelList(treeList, list, null);
 
 			Map<String, Object> resMap = new HashMap<String, Object>();
-			resMap.put("treeList", treeList); // 全部树节点数据
-			resMap.put("ids", ids);// 全部树ids
+            // 全部树节点数据
+			resMap.put("treeList", treeList);
+            // 全部树ids
+			resMap.put("ids", ids);
 			result.setResult(resMap);
 			result.setSuccess(true);
 		} catch (Exception e) {
@@ -468,7 +478,7 @@ public class SysPermissionController {
 	 * @return
 	 */
 	@RequestMapping(value = "/saveRolePermission", method = RequestMethod.POST)
-	//@RequiresRoles({ "admin" })
+	@RequiresRoles({ "admin" })
 	public Result<String> saveRolePermission(@RequestBody JSONObject json) {
 		long start = System.currentTimeMillis();
 		Result<String> result = new Result<>();
@@ -477,6 +487,10 @@ public class SysPermissionController {
 			String permissionIds = json.getString("permissionIds");
 			String lastPermissionIds = json.getString("lastpermissionIds");
 			this.sysRolePermissionService.saveRolePermission(roleId, permissionIds, lastPermissionIds);
+			//update-begin---author:wangshuai ---date:20220316  for:[VUEN-234]用户管理角色授权添加敏感日志------------
+            LoginUser loginUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
+			baseCommonService.addLog("修改角色ID: "+roleId+" 的权限配置,操作人: " +loginUser.getUsername() ,CommonConstant.LOG_TYPE_2, 2);
+            //update-end---author:wangshuai ---date:20220316  for:[VUEN-234]用户管理角色授权添加敏感日志------------
 			result.success("保存成功!");
 			log.info("======角色授权成功=====耗时:" + (System.currentTimeMillis() - start) + "毫秒");
 		} catch (Exception e) {
@@ -654,13 +668,15 @@ public class SysPermissionController {
 		} else if (permission.getMenuType().equals(CommonConstant.MENU_TYPE_0) || permission.getMenuType().equals(CommonConstant.MENU_TYPE_1)) {
 			json.put("id", permission.getId());
 			if (permission.isRoute()) {
-				json.put("route", "1");// 表示生成路由
+                //表示生成路由
+				json.put("route", "1");
 			} else {
-				json.put("route", "0");// 表示不生成路由
+                //表示不生成路由
+				json.put("route", "0");
 			}
 
 			if (isWWWHttpUrl(permission.getUrl())) {
-				json.put("path", MD5Util.MD5Encode(permission.getUrl(), "utf-8"));
+				json.put("path", Md5Util.md5Encode(permission.getUrl(), "utf-8"));
 			} else {
 				json.put("path", permission.getUrl());
 			}
@@ -789,7 +805,7 @@ public class SysPermissionController {
 	 * @param sysPermissionDataRule
 	 * @return
 	 */
-	//@RequiresRoles({ "admin" })
+	@RequiresRoles({ "admin" })
 	@RequestMapping(value = "/addPermissionRule", method = RequestMethod.POST)
 	public Result<SysPermissionDataRule> addPermissionRule(@RequestBody SysPermissionDataRule sysPermissionDataRule) {
 		Result<SysPermissionDataRule> result = new Result<SysPermissionDataRule>();
@@ -804,7 +820,7 @@ public class SysPermissionController {
 		return result;
 	}
 
-	//@RequiresRoles({ "admin" })
+	@RequiresRoles({ "admin" })
 	@RequestMapping(value = "/editPermissionRule", method = { RequestMethod.PUT, RequestMethod.POST })
 	public Result<SysPermissionDataRule> editPermissionRule(@RequestBody SysPermissionDataRule sysPermissionDataRule) {
 		Result<SysPermissionDataRule> result = new Result<SysPermissionDataRule>();
@@ -824,7 +840,7 @@ public class SysPermissionController {
 	 * @param id
 	 * @return
 	 */
-	//@RequiresRoles({ "admin" })
+	@RequiresRoles({ "admin" })
 	@RequestMapping(value = "/deletePermissionRule", method = RequestMethod.DELETE)
 	public Result<SysPermissionDataRule> deletePermissionRule(@RequestParam(name = "id", required = true) String id) {
 		Result<SysPermissionDataRule> result = new Result<SysPermissionDataRule>();
@@ -881,7 +897,7 @@ public class SysPermissionController {
 	 * @return
 	 */
 	@RequestMapping(value = "/saveDepartPermission", method = RequestMethod.POST)
-	//@RequiresRoles({ "admin" })
+	@RequiresRoles({ "admin" })
 	public Result<String> saveDepartPermission(@RequestBody JSONObject json) {
 		long start = System.currentTimeMillis();
 		Result<String> result = new Result<>();
diff --git a/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/controller/SysPositionController.java b/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/controller/SysPositionController.java
index 8315423..bdefe44 100644
--- a/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/controller/SysPositionController.java
+++ b/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/controller/SysPositionController.java
@@ -234,7 +234,8 @@ public class SysPositionController {
         List<String> errorMessage = new ArrayList<>();
         int successLines = 0, errorLines = 0;
         for (Map.Entry<String, MultipartFile> entity : fileMap.entrySet()) {
-            MultipartFile file = entity.getValue();// 获取上传文件对象
+            // 获取上传文件对象
+            MultipartFile file = entity.getValue();
             ImportParams params = new ImportParams();
             params.setTitleRows(2);
             params.setHeadRows(1);
diff --git a/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/controller/SysRoleController.java b/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/controller/SysRoleController.java
index 13c69c8..7864d3d 100644
--- a/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/controller/SysRoleController.java
+++ b/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/controller/SysRoleController.java
@@ -109,7 +109,7 @@ public class SysRoleController {
 	 * @return
 	 */
 	@RequestMapping(value = "/add", method = RequestMethod.POST)
-	//@RequiresRoles({"admin"})
+	@RequiresRoles({"admin"})
 	public Result<SysRole> add(@RequestBody SysRole role) {
 		Result<SysRole> result = new Result<SysRole>();
 		try {
@@ -128,7 +128,7 @@ public class SysRoleController {
 	 * @param role
 	 * @return
 	 */
-	//@RequiresRoles({"admin"})
+	@RequiresRoles({"admin"})
 	@RequestMapping(value = "/edit",method = {RequestMethod.PUT,RequestMethod.POST})
 	public Result<SysRole> edit(@RequestBody SysRole role) {
 		Result<SysRole> result = new Result<SysRole>();
@@ -152,7 +152,7 @@ public class SysRoleController {
 	 * @param id
 	 * @return
 	 */
-	//@RequiresRoles({"admin"})
+	@RequiresRoles({"admin"})
 	@RequestMapping(value = "/delete", method = RequestMethod.DELETE)
 	public Result<?> delete(@RequestParam(name="id",required=true) String id) {
 		sysRoleService.deleteRole(id);
@@ -164,7 +164,7 @@ public class SysRoleController {
 	 * @param ids
 	 * @return
 	 */
-	//@RequiresRoles({"admin"})
+	@RequiresRoles({"admin"})
 	@RequestMapping(value = "/deleteBatch", method = RequestMethod.DELETE)
 	public Result<SysRole> deleteBatch(@RequestParam(name="ids",required=true) String ids) {
 		Result<SysRole> result = new Result<SysRole>();
@@ -214,7 +214,8 @@ public class SysRoleController {
 	@RequestMapping(value = "/checkRoleCode", method = RequestMethod.GET)
 	public Result<Boolean> checkUsername(String id,String roleCode) {
 		Result<Boolean> result = new Result<>();
-		result.setResult(true);//如果此参数为false则程序发生异常
+        //如果此参数为false则程序发生异常
+		result.setResult(true);
 		log.info("--验证角色编码是否唯一---id:"+id+"--roleCode:"+roleCode);
 		try {
 			SysRole role = null;
@@ -277,7 +278,8 @@ public class SysRoleController {
 		MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;
 		Map<String, MultipartFile> fileMap = multipartRequest.getFileMap();
 		for (Map.Entry<String, MultipartFile> entity : fileMap.entrySet()) {
-			MultipartFile file = entity.getValue();// 获取上传文件对象
+            // 获取上传文件对象
+			MultipartFile file = entity.getValue();
 			ImportParams params = new ImportParams();
 			params.setTitleRows(2);
 			params.setHeadRows(1);
@@ -307,7 +309,7 @@ public class SysRoleController {
 		if(list==null || list.size()==0) {
 			return Result.error("未找到权限配置信息");
 		}else {
-			Map<String,Object> map = new HashMap<>();
+			Map<String,Object> map = new HashMap(5);
 			map.put("datarule", list);
 			LambdaQueryWrapper<SysRolePermission> query = new LambdaQueryWrapper<SysRolePermission>()
 					.eq(SysRolePermission::getPermissionId, permissionId)
@@ -375,9 +377,11 @@ public class SysRoleController {
 			}
 			List<TreeModel> treeList = new ArrayList<>();
 			getTreeModelList(treeList, list, null);
-			Map<String,Object> resMap = new HashMap<String,Object>();
-			resMap.put("treeList", treeList); //全部树节点数据
-			resMap.put("ids", ids);//全部树ids
+			Map<String,Object> resMap = new HashMap(5);
+            //全部树节点数据
+			resMap.put("treeList", treeList);
+            //全部树ids
+			resMap.put("ids", ids);
 			result.setResult(resMap);
 			result.setSuccess(true);
 		} catch (Exception e) {
diff --git a/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/controller/SysRoleIndexController.java b/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/controller/SysRoleIndexController.java
new file mode 100644
index 0000000..fb15615
--- /dev/null
+++ b/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/controller/SysRoleIndexController.java
@@ -0,0 +1,168 @@
+package org.jeecg.modules.system.controller;
+
+import java.util.Arrays;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import org.jeecg.common.api.vo.Result;
+import org.jeecg.common.system.query.QueryGenerator;
+import org.jeecg.common.aspect.annotation.AutoLog;
+import org.jeecg.modules.system.entity.SysRoleIndex;
+import org.jeecg.modules.system.service.ISysRoleIndexService;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import lombok.extern.slf4j.Slf4j;
+import org.jeecg.common.system.base.controller.JeecgController;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.servlet.ModelAndView;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+
+/**
+ * @Description: 角色首页配置
+ * @Author: jeecg-boot
+ * @Date: 2022-03-25
+ * @Version: V1.0
+ */
+@Slf4j
+@Api(tags = "角色首页配置")
+@RestController
+@RequestMapping("/sys/sysRoleIndex")
+public class SysRoleIndexController extends JeecgController<SysRoleIndex, ISysRoleIndexService> {
+    @Autowired
+    private ISysRoleIndexService sysRoleIndexService;
+
+    /**
+     * 分页列表查询
+     *
+     * @param sysRoleIndex
+     * @param pageNo
+     * @param pageSize
+     * @param req
+     * @return
+     */
+    @AutoLog(value = "角色首页配置-分页列表查询")
+    @ApiOperation(value = "角色首页配置-分页列表查询", notes = "角色首页配置-分页列表查询")
+    @GetMapping(value = "/list")
+    public Result<?> queryPageList(SysRoleIndex sysRoleIndex,
+                                   @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo,
+                                   @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize,
+                                   HttpServletRequest req) {
+        QueryWrapper<SysRoleIndex> queryWrapper = QueryGenerator.initQueryWrapper(sysRoleIndex, req.getParameterMap());
+        Page<SysRoleIndex> page = new Page<SysRoleIndex>(pageNo, pageSize);
+        IPage<SysRoleIndex> pageList = sysRoleIndexService.page(page, queryWrapper);
+        return Result.OK(pageList);
+    }
+
+    /**
+     * 添加
+     *
+     * @param sysRoleIndex
+     * @return
+     */
+    @AutoLog(value = "角色首页配置-添加")
+    @ApiOperation(value = "角色首页配置-添加", notes = "角色首页配置-添加")
+    @PostMapping(value = "/add")
+    public Result<?> add(@RequestBody SysRoleIndex sysRoleIndex) {
+        sysRoleIndexService.save(sysRoleIndex);
+        return Result.OK("添加成功!");
+    }
+
+    /**
+     * 编辑
+     *
+     * @param sysRoleIndex
+     * @return
+     */
+    @AutoLog(value = "角色首页配置-编辑")
+    @ApiOperation(value = "角色首页配置-编辑", notes = "角色首页配置-编辑")
+    @RequestMapping(value = "/edit", method = {RequestMethod.PUT, RequestMethod.POST})
+    public Result<?> edit(@RequestBody SysRoleIndex sysRoleIndex) {
+        sysRoleIndexService.updateById(sysRoleIndex);
+        return Result.OK("编辑成功!");
+    }
+
+    /**
+     * 通过id删除
+     *
+     * @param id
+     * @return
+     */
+    @AutoLog(value = "角色首页配置-通过id删除")
+    @ApiOperation(value = "角色首页配置-通过id删除", notes = "角色首页配置-通过id删除")
+    @DeleteMapping(value = "/delete")
+    public Result<?> delete(@RequestParam(name = "id", required = true) String id) {
+        sysRoleIndexService.removeById(id);
+        return Result.OK("删除成功!");
+    }
+
+    /**
+     * 批量删除
+     *
+     * @param ids
+     * @return
+     */
+    @AutoLog(value = "角色首页配置-批量删除")
+    @ApiOperation(value = "角色首页配置-批量删除", notes = "角色首页配置-批量删除")
+    @DeleteMapping(value = "/deleteBatch")
+    public Result<?> deleteBatch(@RequestParam(name = "ids", required = true) String ids) {
+        this.sysRoleIndexService.removeByIds(Arrays.asList(ids.split(",")));
+        return Result.OK("批量删除成功!");
+    }
+
+    /**
+     * 通过id查询
+     *
+     * @param id
+     * @return
+     */
+    @AutoLog(value = "角色首页配置-通过id查询")
+    @ApiOperation(value = "角色首页配置-通过id查询", notes = "角色首页配置-通过id查询")
+    @GetMapping(value = "/queryById")
+    public Result<?> queryById(@RequestParam(name = "id", required = true) String id) {
+        SysRoleIndex sysRoleIndex = sysRoleIndexService.getById(id);
+        return Result.OK(sysRoleIndex);
+    }
+
+    /**
+     * 导出excel
+     *
+     * @param request
+     * @param sysRoleIndex
+     */
+    @RequestMapping(value = "/exportXls")
+    public ModelAndView exportXls(HttpServletRequest request, SysRoleIndex sysRoleIndex) {
+        return super.exportXls(request, sysRoleIndex, SysRoleIndex.class, "角色首页配置");
+    }
+
+    /**
+     * 通过excel导入数据
+     *
+     * @param request
+     * @param response
+     * @return
+     */
+    @RequestMapping(value = "/importExcel", method = RequestMethod.POST)
+    public Result<?> importExcel(HttpServletRequest request, HttpServletResponse response) {
+        return super.importExcel(request, response, SysRoleIndex.class);
+    }
+
+    /**
+     * 通过code查询
+     *
+     * @param roleCode
+     * @return
+     */
+    @AutoLog(value = "角色首页配置-通过code查询")
+    @ApiOperation(value = "角色首页配置-通过code查询", notes = "角色首页配置-通过code查询")
+    @GetMapping(value = "/queryByCode")
+    public Result<?> queryByCode(@RequestParam(name = "roleCode", required = true) String roleCode) {
+        SysRoleIndex sysRoleIndex = sysRoleIndexService.getOne(new LambdaQueryWrapper<SysRoleIndex>().eq(SysRoleIndex::getRoleCode, roleCode));
+        return Result.OK(sysRoleIndex);
+    }
+}
diff --git a/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/controller/SysTenantController.java b/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/controller/SysTenantController.java
index 82b73b7..6001b94 100644
--- a/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/controller/SysTenantController.java
+++ b/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/controller/SysTenantController.java
@@ -22,6 +22,7 @@ import java.util.*;
 
 /**
  * 租户配置信息
+ * @author: jeecg-boot
  */
 @Slf4j
 @RestController
@@ -134,7 +135,7 @@ public class SysTenantController {
             // 过滤掉已被引用的租户
             List<Integer> idList = new ArrayList<>();
             for (String id : ls) {
-                int userCount = sysTenantService.countUserLinkTenant(id);
+                Long userCount = sysTenantService.countUserLinkTenant(id);
                 if (userCount == 0) {
                     idList.add(Integer.parseInt(id));
                 }
@@ -200,7 +201,7 @@ public class SysTenantController {
         try {
             LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
             String tenantIds = sysUser.getRelTenantIds();
-            Map<String,Object> map = new HashMap<String,Object>();
+            Map<String,Object> map = new HashMap(5);
             if (oConvertUtils.isNotEmpty(tenantIds)) {
                 List<Integer> tenantIdList = new ArrayList<>();
                 for(String id: tenantIds.split(",")){
diff --git a/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/controller/SysUploadController.java b/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/controller/SysUploadController.java
index 300f903..45d6934 100644
--- a/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/controller/SysUploadController.java
+++ b/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/controller/SysUploadController.java
@@ -19,6 +19,7 @@ import javax.servlet.http.HttpServletRequest;
 
 /**
  * minio文件上传示例
+ * @author: jeecg-boot
  */
 @Slf4j
 @RestController
@@ -45,8 +46,10 @@ public class SysUploadController {
             bizPath = "";
         }
         MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;
-        MultipartFile file = multipartRequest.getFile("file");// 获取上传文件对象
-        String orgName = file.getOriginalFilename();// 获取文件名
+        // 获取上传文件对象
+        MultipartFile file = multipartRequest.getFile("file");
+        // 获取文件名
+        String orgName = file.getOriginalFilename();
         orgName = CommonUtils.getFileName(orgName);
         String file_url =  MinioUtil.upload(file,bizPath);
         if(oConvertUtils.isEmpty(file_url)){
diff --git a/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/controller/SysUserAgentController.java b/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/controller/SysUserAgentController.java
index 998b61e..cd6daee 100644
--- a/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/controller/SysUserAgentController.java
+++ b/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/controller/SysUserAgentController.java
@@ -236,7 +236,8 @@ public class SysUserAgentController {
       MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;
       Map<String, MultipartFile> fileMap = multipartRequest.getFileMap();
       for (Map.Entry<String, MultipartFile> entity : fileMap.entrySet()) {
-          MultipartFile file = entity.getValue();// 获取上传文件对象
+          // 获取上传文件对象
+          MultipartFile file = entity.getValue();
           ImportParams params = new ImportParams();
           params.setTitleRows(2);
           params.setHeadRows(1);
diff --git a/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/controller/SysUserController.java b/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/controller/SysUserController.java
index a6a12de..e87e72c 100644
--- a/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/controller/SysUserController.java
+++ b/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/controller/SysUserController.java
@@ -42,7 +42,6 @@ import org.springframework.web.multipart.MultipartFile;
 import org.springframework.web.multipart.MultipartHttpServletRequest;
 import org.springframework.web.servlet.ModelAndView;
 
-import javax.annotation.Resource;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 import java.io.IOException;
@@ -61,9 +60,7 @@ import java.util.stream.Collectors;
 @RestController
 @RequestMapping("/sys/user")
 public class SysUserController {
-	@Autowired
-	private ISysBaseAPI sysBaseAPI;
-	
+
 	@Autowired
 	private ISysUserService sysUserService;
 
@@ -91,7 +88,7 @@ public class SysUserController {
     @Value("${jeecg.path.upload}")
     private String upLoadPath;
 
-    @Resource
+    @Autowired
     private BaseCommonService baseCommonService;
 
     /**
@@ -117,7 +114,13 @@ public class SysUserController {
             query.eq(SysUserDepart::getDepId,departId);
             List<SysUserDepart> list = sysUserDepartService.list(query);
             List<String> userIds = list.stream().map(SysUserDepart::getUserId).collect(Collectors.toList());
-            queryWrapper.in("id",userIds);
+            //update-begin---author:wangshuai ---date:20220322  for:[issues/I4XTYB]查询用户时,当部门id 下没有分配用户时接口报错------------
+            if(oConvertUtils.listIsNotEmpty(userIds)){
+                queryWrapper.in("id",userIds);
+            }else{
+                return Result.OK();
+            }
+            //update-end---author:wangshuai ---date:20220322  for:[issues/I4XTYB]查询用户时,当部门id 下没有分配用户时接口报错------------
         }
         //用户ID
         String code = req.getParameter("code");
@@ -155,8 +158,8 @@ public class SysUserController {
 		return result;
 	}
 
-    //@RequiresRoles({"admin"})
-    //@RequiresPermissions("user:add")
+    @RequiresRoles({"admin"})
+    @RequiresPermissions("user:add")
 	@RequestMapping(value = "/add", method = RequestMethod.POST)
 	public Result<SysUser> add(@RequestBody JSONObject jsonObject) {
 		Result<SysUser> result = new Result<SysUser>();
@@ -173,6 +176,7 @@ public class SysUserController {
 			user.setDelFlag(CommonConstant.DEL_FLAG_0);
 			// 保存用户走一个service 保证事务
 			sysUserService.saveUser(user, selectedRoles, selectedDeparts);
+            baseCommonService.addLog("添加用户,username: " +user.getUsername() ,CommonConstant.LOG_TYPE_2, 2);
 			result.success("添加成功!");
 		} catch (Exception e) {
 			log.error(e.getMessage(), e);
@@ -181,14 +185,14 @@ public class SysUserController {
 		return result;
 	}
 
-    //@RequiresRoles({"admin"})
-    //@RequiresPermissions("user:edit")
+    @RequiresRoles({"admin"})
+    @RequiresPermissions("user:edit")
 	@RequestMapping(value = "/edit", method = {RequestMethod.PUT,RequestMethod.POST})
 	public Result<SysUser> edit(@RequestBody JSONObject jsonObject) {
 		Result<SysUser> result = new Result<SysUser>();
 		try {
 			SysUser sysUser = sysUserService.getById(jsonObject.getString("id"));
-			baseCommonService.addLog("编辑用户,id: " +jsonObject.getString("id") ,CommonConstant.LOG_TYPE_2, 2);
+			baseCommonService.addLog("编辑用户,username: " +sysUser.getUsername() ,CommonConstant.LOG_TYPE_2, 2);
 			if(sysUser==null) {
 				result.error500("未找到对应实体");
 			}else {
@@ -216,7 +220,7 @@ public class SysUserController {
 	/**
 	 * 删除用户
 	 */
-	//@RequiresRoles({"admin"})
+	@RequiresRoles({"admin"})
 	@RequestMapping(value = "/delete", method = RequestMethod.DELETE)
 	public Result<?> delete(@RequestParam(name="id",required=true) String id) {
 		baseCommonService.addLog("删除用户,id: " +id ,CommonConstant.LOG_TYPE_2, 3);
@@ -227,7 +231,7 @@ public class SysUserController {
 	/**
 	 * 批量删除用户
 	 */
-	//@RequiresRoles({"admin"})
+	@RequiresRoles({"admin"})
 	@RequestMapping(value = "/deleteBatch", method = RequestMethod.DELETE)
 	public Result<?> deleteBatch(@RequestParam(name="ids",required=true) String ids) {
 		baseCommonService.addLog("批量删除用户, ids: " +ids ,CommonConstant.LOG_TYPE_2, 3);
@@ -240,7 +244,7 @@ public class SysUserController {
 	 * @param jsonObject
 	 * @return
 	 */
-	//@RequiresRoles({"admin"})
+	@RequiresRoles({"admin"})
 	@RequestMapping(value = "/frozenBatch", method = RequestMethod.PUT)
 	public Result<SysUser> frozenBatch(@RequestBody JSONObject jsonObject) {
 		Result<SysUser> result = new Result<SysUser>();
@@ -328,7 +332,7 @@ public class SysUserController {
     /**
      * 修改密码
      */
-    //@RequiresRoles({"admin"})
+    @RequiresRoles({"admin"})
     @RequestMapping(value = "/changePassword", method = RequestMethod.PUT)
     public Result<?> changePassword(@RequestBody SysUser sysUser) {
         SysUser u = this.sysUserService.getOne(new LambdaQueryWrapper<SysUser>().eq(SysUser::getUsername, sysUser.getUsername()));
@@ -336,6 +340,10 @@ public class SysUserController {
             return Result.error("用户不存在!");
         }
         sysUser.setId(u.getId());
+        //update-begin---author:wangshuai ---date:20220316  for:[VUEN-234]修改密码添加敏感日志------------
+        LoginUser loginUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
+        baseCommonService.addLog("修改用户 "+sysUser.getUsername()+" 的密码,操作人: " +loginUser.getUsername() ,CommonConstant.LOG_TYPE_2, 2);
+        //update-end---author:wangshuai ---date:20220316  for:[VUEN-234]修改密码添加敏感日志------------
         return sysUserService.changePassword(sysUser);
     }
 
@@ -474,8 +482,8 @@ public class SysUserController {
      * @param response
      * @return
      */
-    //@RequiresRoles({"admin"})
-    //@RequiresPermissions("user:import")
+    @RequiresRoles({"admin"})
+    @RequiresPermissions("user:import")
     @RequestMapping(value = "/importExcel", method = RequestMethod.POST)
     public Result<?> importExcel(HttpServletRequest request, HttpServletResponse response)throws IOException {
         MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;
@@ -571,7 +579,7 @@ public class SysUserController {
 	/**
 	 * 首页用户重置密码
 	 */
-    //@RequiresRoles({"admin"})
+    @RequiresRoles({"admin"})
     @RequestMapping(value = "/updatePassword", method = RequestMethod.PUT)
 	public Result<?> updatePassword(@RequestBody JSONObject json) {
 		String username = json.getString("username");
@@ -586,6 +594,10 @@ public class SysUserController {
 		if(user==null) {
 			return Result.error("用户不存在!");
 		}
+        //update-begin---author:wangshuai ---date:20220316  for:[VUEN-234]修改密码添加敏感日志------------
+        LoginUser loginUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
+        baseCommonService.addLog("修改密码,username: " +loginUser.getUsername() ,CommonConstant.LOG_TYPE_2, 2);
+        //update-end---author:wangshuai ---date:20220316  for:[VUEN-234]修改密码添加敏感日志------------
 		return sysUserService.resetPassword(username,oldpassword,password,confirmpassword);
 	}
 
@@ -608,7 +620,7 @@ public class SysUserController {
      * @param
      * @return
      */
-    //@RequiresRoles({"admin"})
+    @RequiresRoles({"admin"})
     @RequestMapping(value = "/addSysUserRole", method = RequestMethod.POST)
     public Result<String> addSysUserRole(@RequestBody SysUserRoleVO sysUserRoleVO) {
         Result<String> result = new Result<String>();
@@ -639,7 +651,7 @@ public class SysUserController {
      * @param
      * @return
      */
-    //@RequiresRoles({"admin"})
+    @RequiresRoles({"admin"})
     @RequestMapping(value = "/deleteUserRole", method = RequestMethod.DELETE)
     public Result<SysUserRole> deleteUserRole(@RequestParam(name="roleId") String roleId,
                                                     @RequestParam(name="userId",required=true) String userId
@@ -663,7 +675,7 @@ public class SysUserController {
      * @param
      * @return
      */
-    //@RequiresRoles({"admin"})
+    @RequiresRoles({"admin"})
     @RequestMapping(value = "/deleteUserRoleBatch", method = RequestMethod.DELETE)
     public Result<SysUserRole> deleteUserRoleBatch(
             @RequestParam(name="roleId") String roleId,
@@ -790,7 +802,7 @@ public class SysUserController {
     /**
      * 给指定部门添加对应的用户
      */
-    //@RequiresRoles({"admin"})
+    @RequiresRoles({"admin"})
     @RequestMapping(value = "/editSysDepartWithUser", method = RequestMethod.POST)
     public Result<String> editSysDepartWithUser(@RequestBody SysDepartUsersVO sysDepartUsersVO) {
         Result<String> result = new Result<String>();
@@ -819,7 +831,7 @@ public class SysUserController {
     /**
      *   删除指定机构的用户关系
      */
-    //@RequiresRoles({"admin"})
+    @RequiresRoles({"admin"})
     @RequestMapping(value = "/deleteUserInDepart", method = RequestMethod.DELETE)
     public Result<SysUserDepart> deleteUserInDepart(@RequestParam(name="depId") String depId,
                                                     @RequestParam(name="userId",required=true) String userId
@@ -851,7 +863,7 @@ public class SysUserController {
     /**
      * 批量删除指定机构的用户关系
      */
-    //@RequiresRoles({"admin"})
+    @RequiresRoles({"admin"})
     @RequestMapping(value = "/deleteUserInDepartBatch", method = RequestMethod.DELETE)
     public Result<SysUserDepart> deleteUserInDepartBatch(
             @RequestParam(name="depId") String depId,
@@ -882,7 +894,7 @@ public class SysUserController {
         try {
         	LoginUser sysUser = (LoginUser)SecurityUtils.getSubject().getPrincipal();
             List<SysDepart> list = this.sysDepartService.queryUserDeparts(sysUser.getId());
-            Map<String,Object> map = new HashMap<String,Object>();
+            Map<String,Object> map = new HashMap(5);
             map.put("list", list);
             map.put("orgCode", sysUser.getOrgCode());
             result.setSuccess(true);
@@ -1030,7 +1042,7 @@ public class SysUserController {
 		LambdaQueryWrapper<SysUser> query = new LambdaQueryWrapper<>();
         query.eq(SysUser::getPhone,phone);
         SysUser user = sysUserService.getOne(query);
-        Map<String,String> map = new HashMap<>();
+        Map<String,String> map = new HashMap(5);
         map.put("smscode",smscode);
         map.put("username",user.getUsername());
         result.setResult(map);
@@ -1076,6 +1088,9 @@ public class SysUserController {
             String passwordEncode = PasswordUtil.encrypt(sysUser.getUsername(), password, salt);
             sysUser.setPassword(passwordEncode);
             this.sysUserService.updateById(sysUser);
+            //update-begin---author:wangshuai ---date:20220316  for:[VUEN-234]密码重置添加敏感日志------------
+            baseCommonService.addLog("重置 "+username+" 的密码,操作人: " +sysUser.getUsername() ,CommonConstant.LOG_TYPE_2, 2);
+            //update-end---author:wangshuai ---date:20220316  for:[VUEN-234]密码重置添加敏感日志------------
             result.setSuccess(true);
             result.setMessage("密码重置完成!");
             return result;
@@ -1200,7 +1215,7 @@ public class SysUserController {
      * @param userIds 被删除的用户ID,多个id用半角逗号分割
      * @return
      */
-    //@RequiresRoles({"admin"})
+    @RequiresRoles({"admin"})
     @RequestMapping(value = "/deleteRecycleBin", method = RequestMethod.DELETE)
     public Result deleteRecycleBin(@RequestParam("userIds") String userIds) {
         if (StringUtils.isNotBlank(userIds)) {
@@ -1297,7 +1312,7 @@ public class SysUserController {
     @GetMapping("/queryChildrenByUsername")
     public Result queryChildrenByUsername(@RequestParam("userId") String userId) {
         //获取用户信息
-        Map<String,Object> map=new HashMap<String,Object>();
+        Map<String,Object> map=new HashMap(5);
         SysUser sysUser = sysUserService.getById(userId);
         String username = sysUser.getUsername();
         Integer identity = sysUser.getUserIdentity();
diff --git a/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/controller/SysUserOnlineController.java b/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/controller/SysUserOnlineController.java
index 576c9fd..3222bf6 100644
--- a/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/controller/SysUserOnlineController.java
+++ b/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/controller/SysUserOnlineController.java
@@ -7,13 +7,13 @@ import org.apache.shiro.SecurityUtils;
 import org.jeecg.common.api.vo.Result;
 import org.jeecg.common.constant.CacheConstant;
 import org.jeecg.common.constant.CommonConstant;
-import org.jeecg.common.system.api.ISysBaseAPI;
 import org.jeecg.common.system.util.JwtUtil;
 import org.jeecg.common.system.vo.LoginUser;
 import org.jeecg.common.util.RedisUtil;
 import org.jeecg.common.util.oConvertUtils;
 import org.jeecg.modules.base.service.BaseCommonService;
 import org.jeecg.modules.system.service.ISysUserService;
+import org.jeecg.modules.system.service.impl.SysBaseApiImpl;
 import org.jeecg.modules.system.vo.SysUserOnlineVO;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -39,15 +39,12 @@ public class SysUserOnlineController {
 
     @Autowired
     private RedisUtil redisUtil;
-
     @Autowired
     public RedisTemplate redisTemplate;
-
     @Autowired
     public ISysUserService userService;
-
     @Autowired
-    private ISysBaseAPI sysBaseAPI;
+    private SysBaseApiImpl sysBaseApi;
 
     @Resource
     private BaseCommonService baseCommonService;
@@ -63,7 +60,7 @@ public class SysUserOnlineController {
                 SysUserOnlineVO online = new SysUserOnlineVO();
                 online.setToken(token);
                 //TODO 改成一次性查询
-                LoginUser loginUser = sysBaseAPI.getUserByName(JwtUtil.getUsername(token));
+                LoginUser loginUser = sysBaseApi.getUserByName(JwtUtil.getUsername(token));
                 if (loginUser != null) {
                     //update-begin---author:wangshuai ---date:20220104  for:[JTC-382]在线用户查询无效------------
                     //验证用户名是否与传过来的用户名相同
@@ -113,7 +110,7 @@ public class SysUserOnlineController {
             return Result.error("退出登录失败!");
         }
         String username = JwtUtil.getUsername(online.getToken());
-        LoginUser sysUser = sysBaseAPI.getUserByName(username);
+        LoginUser sysUser = sysBaseApi.getUserByName(username);
         if(sysUser!=null) {
             baseCommonService.addLog("强制: "+sysUser.getRealname()+"退出成功!", CommonConstant.LOG_TYPE_1, null,sysUser);
             log.info(" 强制  "+sysUser.getRealname()+"退出成功! ");
diff --git a/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/controller/ThirdAppController.java b/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/controller/ThirdAppController.java
index 7363d55..4c93b1e 100644
--- a/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/controller/ThirdAppController.java
+++ b/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/controller/ThirdAppController.java
@@ -19,6 +19,7 @@ import java.util.Map;
 
 /**
  * 第三方App对接
+ * @author: jeecg-boot
  */
 @Slf4j
 @RestController("thirdAppController")
@@ -38,7 +39,7 @@ public class ThirdAppController {
      */
     @GetMapping("/getEnabledType")
     public Result getEnabledType() {
-        Map<String, Boolean> enabledMap = new HashMap<>();
+        Map<String, Boolean> enabledMap = new HashMap(5);
         enabledMap.put("wechatEnterprise", thirdAppConfig.isWechatEnterpriseEnabled());
         enabledMap.put("dingtalk", thirdAppConfig.isDingtalkEnabled());
         return Result.OK(enabledMap);
diff --git a/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/controller/ThirdLoginController.java b/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/controller/ThirdLoginController.java
index 65aca76..d7e7c06 100644
--- a/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/controller/ThirdLoginController.java
+++ b/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/controller/ThirdLoginController.java
@@ -198,10 +198,17 @@ public class ThirdLoginController {
 		String token = JwtUtil.sign(user.getUsername(), user.getPassword());
 		redisUtil.set(CommonConstant.PREFIX_USER_TOKEN + token, token);
 		// 设置超时时间
-		redisUtil.expire(CommonConstant.PREFIX_USER_TOKEN + token, JwtUtil.EXPIRE_TIME / 1000);
+		redisUtil.expire(CommonConstant.PREFIX_USER_TOKEN + token, JwtUtil.EXPIRE_TIME * 2 / 1000);
 		return token;
 	}
 
+	/**
+	 * 第三方登录回调接口
+	 * @param token
+	 * @param thirdType
+	 * @return
+	 * @throws Exception
+	 */
 	@SuppressWarnings("unchecked")
 	@RequestMapping(value = "/getLoginUser/{token}/{thirdType}", method = RequestMethod.GET)
 	@ResponseBody
@@ -251,20 +258,21 @@ public class ThirdLoginController {
 		Result<String> result = new Result<String>();
 		String phone = jsonObject.getString("mobile");
 		String thirdUserUuid = jsonObject.getString("thirdUserUuid");
+		// 校验验证码
+		String captcha = jsonObject.getString("captcha");
+		Object captchaCache = redisUtil.get(phone);
+		if (oConvertUtils.isEmpty(captcha) || !captcha.equals(captchaCache)) {
+			result.setMessage("验证码错误");
+			result.setSuccess(false);
+			return result;
+		}
 		//校验用户有效性
 		SysUser sysUser = sysUserService.getUserByPhone(phone);
 		if(sysUser != null){
+			// 存在用户,直接绑定
 			sysThirdAccountService.updateThirdUserId(sysUser,thirdUserUuid);
 		}else{
 			// 不存在手机号,创建用户
-			String smscode = jsonObject.getString("captcha");
-			Object code = redisUtil.get(phone);
-			if (!smscode.equals(code)) {
-				result.setMessage("手机验证码错误");
-				result.setSuccess(false);
-				return result;
-			}
-			//创建用户
 			sysUser = sysThirdAccountService.createUser(phone,thirdUserUuid);
 		}
 		String token = saveToken(sysUser);
diff --git a/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/entity/SysDataLog.java b/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/entity/SysDataLog.java
index 6dd039d..2d885c5 100644
--- a/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/entity/SysDataLog.java
+++ b/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/entity/SysDataLog.java
@@ -13,6 +13,10 @@ import lombok.Data;
 import lombok.EqualsAndHashCode;
 import lombok.experimental.Accessors;
 
+/**
+ * @Description: 系统数据日志
+ * @author: jeecg-boot
+ */
 @Data
 @EqualsAndHashCode(callSuper = false)
 @Accessors(chain = true)
@@ -20,17 +24,52 @@ public class SysDataLog implements Serializable {
 	private static final long serialVersionUID = 1L;
 	
 	@TableId(type = IdType.ASSIGN_ID)
-	private String id; //id'
-	private String createBy; //创建人登录名称
+    /**
+     * id
+     */
+	private String id;
+
+    /**
+     * 创建人登录名称
+     */
+	private String createBy;
+
+    /**
+     * 创建日期
+     */
 	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
     @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
-	private Date createTime; //创建日期
-	private String updateBy; //更新人登录名称
+	private Date createTime;
+
+    /**
+     * 更新人登录名称
+     */
+	private String updateBy;
 	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
     @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
-	private Date updateTime; //更新日期
-	private String dataTable; //表名
-	private String dataId; //数据ID
-	private String dataContent; //数据内容
-	private String dataVersion; //版本号
+
+    /**
+     * 更新日期
+     */
+    private Date updateTime;
+
+    /**
+     * 表名
+     */
+    private String dataTable;
+
+    /**
+     * 数据ID
+     */
+    private String dataId;
+
+    /**
+     * 数据内容
+     */
+    private String dataContent;
+
+    /**
+     * 版本号
+     */
+    private String dataVersion;
 }
diff --git a/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/entity/SysDepart.java b/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/entity/SysDepart.java
index c0a9481..b4fdad5 100644
--- a/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/entity/SysDepart.java
+++ b/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/entity/SysDepart.java
@@ -1,6 +1,7 @@
 package org.jeecg.modules.system.entity;
 
 import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
 import com.fasterxml.jackson.annotation.JsonFormat;
@@ -85,6 +86,15 @@ public class SysDepart implements Serializable {
 	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
     @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
 	private Date updateTime;
+
+    //update-begin---author:wangshuai ---date:20200308  for:[JTC-119]在部门管理菜单下设置部门负责人,新增字段负责人ids和旧的负责人ids
+    /**部门负责人的ids*/
+	@TableField(exist = false)
+	private String directorUserIds;
+    /**旧的部门负责人的ids(用于比较删除和新增)*/
+	@TableField(exist = false)
+    private String oldDirectorUserIds;
+    //update-end---author:wangshuai ---date:20200308  for:[JTC-119]新增字段负责人ids和旧的负责人ids
 	
 	/**
 	 * 重写equals方法
diff --git a/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/entity/SysRoleIndex.java b/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/entity/SysRoleIndex.java
new file mode 100644
index 0000000..1c744bf
--- /dev/null
+++ b/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/entity/SysRoleIndex.java
@@ -0,0 +1,75 @@
+package org.jeecg.modules.system.entity;
+
+import java.io.Serializable;
+import java.util.Date;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.annotation.TableField;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import org.springframework.format.annotation.DateTimeFormat;
+import org.jeecgframework.poi.excel.annotation.Excel;
+
+/**
+ * @Description: 角色首页配置
+ * @Author: liusq
+ * @Date:   2022-03-25
+ * @Version: V1.0
+ */
+@Data
+@TableName("sys_role_index")
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@ApiModel(value="sys_role_index对象", description="角色首页配置")
+public class SysRoleIndex {
+    
+	/**id*/
+	@TableId(type = IdType.ASSIGN_ID)
+    @ApiModelProperty(value = "id")
+	private java.lang.String id;
+	/**角色编码*/
+	@Excel(name = "角色编码", width = 15)
+    @ApiModelProperty(value = "角色编码")
+	private java.lang.String roleCode;
+	/**路由地址*/
+	@Excel(name = "路由地址", width = 15)
+    @ApiModelProperty(value = "路由地址")
+	private java.lang.String url;
+	/**优先级*/
+	@Excel(name = "优先级", width = 15)
+    @ApiModelProperty(value = "优先级")
+	private java.lang.Integer priority;
+	/**路由地址*/
+	@Excel(name = "状态", width = 15)
+	@ApiModelProperty(value = "状态")
+	private java.lang.String status;
+	/**创建人登录名称*/
+	@Excel(name = "创建人登录名称", width = 15)
+    @ApiModelProperty(value = "创建人登录名称")
+	private java.lang.String createBy;
+	/**创建日期*/
+	@Excel(name = "创建日期", width = 20, format = "yyyy-MM-dd HH:mm:ss")
+	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+    @ApiModelProperty(value = "创建日期")
+	private java.util.Date createTime;
+	/**更新人登录名称*/
+	@Excel(name = "更新人登录名称", width = 15)
+    @ApiModelProperty(value = "更新人登录名称")
+	private java.lang.String updateBy;
+	/**更新日期*/
+	@Excel(name = "更新日期", width = 20, format = "yyyy-MM-dd HH:mm:ss")
+	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+    @ApiModelProperty(value = "更新日期")
+	private java.util.Date updateTime;
+	/**所属部门*/
+	@Excel(name = "所属部门", width = 15)
+    @ApiModelProperty(value = "所属部门")
+	private java.lang.String sysOrgCode;
+}
diff --git a/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/entity/SysTenant.java b/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/entity/SysTenant.java
index a11a295..8489b0f 100644
--- a/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/entity/SysTenant.java
+++ b/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/entity/SysTenant.java
@@ -11,6 +11,7 @@ import java.util.Date;
 
 /**
  * 租户信息
+ * @author: jeecg-boot
  */
 @Data
 @TableName("sys_tenant")
diff --git a/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/entity/SysUserDepart.java b/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/entity/SysUserDepart.java
index 446d558..d370ddd 100644
--- a/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/entity/SysUserDepart.java
+++ b/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/entity/SysUserDepart.java
@@ -7,6 +7,11 @@ import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
 
 import lombok.Data;
+
+/**
+ * @Description: 用户部门
+ * @author: jeecg-boot
+ */
 @Data
 @TableName("sys_user_depart")
 public class SysUserDepart implements Serializable {
diff --git a/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/mapper/SysAnnouncementMapper.java b/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/mapper/SysAnnouncementMapper.java
index 9c6f3ce..e7a6343 100644
--- a/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/mapper/SysAnnouncementMapper.java
+++ b/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/mapper/SysAnnouncementMapper.java
@@ -16,7 +16,13 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
  */
 public interface SysAnnouncementMapper extends BaseMapper<SysAnnouncement> {
 
-	
+    /**
+     * 通过消息类型和用户id获取系统通告
+     * @param page
+     * @param userId 用户id
+     * @param msgCategory 消息类型
+     * @return
+     */
 	List<SysAnnouncement> querySysCementListByUserId(Page<SysAnnouncement> page, @Param("userId")String userId,@Param("msgCategory")String msgCategory);
 
 }
diff --git a/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/mapper/SysAnnouncementSendMapper.java b/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/mapper/SysAnnouncementSendMapper.java
index 56b25c6..6581221 100644
--- a/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/mapper/SysAnnouncementSendMapper.java
+++ b/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/mapper/SysAnnouncementSendMapper.java
@@ -17,13 +17,17 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
  */
 public interface SysAnnouncementSendMapper extends BaseMapper<SysAnnouncementSend> {
 
+    /**
+     * 通过用户id查询 用户通告阅读标记表
+     * @param userId 用户id
+     * @return
+     */
 	public List<String> queryByUserId(@Param("userId") String userId);
 
 	/**
-	 * @功能:获取我的消息
+	 * 获取我的消息
 	 * @param announcementSendModel
-	 * @param pageSize 
-	 * @param pageNo 
+	 * @param page
 	 * @return
 	 */
 	public List<AnnouncementSendModel> getMyAnnouncementSendList(Page<AnnouncementSendModel> page,@Param("announcementSendModel") AnnouncementSendModel announcementSendModel);
diff --git a/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/mapper/SysCategoryMapper.java b/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/mapper/SysCategoryMapper.java
index c5f2fd7..3abefa6 100644
--- a/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/mapper/SysCategoryMapper.java
+++ b/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/mapper/SysCategoryMapper.java
@@ -19,12 +19,18 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 public interface SysCategoryMapper extends BaseMapper<SysCategory> {
 	
 	/**
-	  *  根据父级ID查询树节点数据
+	 * 根据父级ID查询树节点数据
 	 * @param pid
+     * @param query
 	 * @return
 	 */
 	public List<TreeSelectModel> queryListByPid(@Param("pid")  String pid,@Param("query") Map<String, String> query);
 
+    /**
+     * 通过code查询分类字典表
+     * @param code
+     * @return
+     */
 	@Select("SELECT ID FROM sys_category WHERE CODE = #{code,jdbcType=VARCHAR}")
 	public String queryIdByCode(@Param("code")  String code);
 	
diff --git a/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/mapper/SysDataLogMapper.java b/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/mapper/SysDataLogMapper.java
index e6abc3b..4bdcffd 100644
--- a/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/mapper/SysDataLogMapper.java
+++ b/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/mapper/SysDataLogMapper.java
@@ -5,6 +5,10 @@ import org.jeecg.modules.system.entity.SysDataLog;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 
+/**
+ * @Description: 系统数据日志Mapper接口
+ * @author: jeecg-boot
+ */
 public interface SysDataLogMapper extends BaseMapper<SysDataLog>{
 	/**
 	 * 通过表名及数据Id获取最大版本
diff --git a/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/mapper/SysDepartMapper.java b/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/mapper/SysDepartMapper.java
index f5a32b4..5d5c8fb 100644
--- a/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/mapper/SysDepartMapper.java
+++ b/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/mapper/SysDepartMapper.java
@@ -21,6 +21,8 @@ public interface SysDepartMapper extends BaseMapper<SysDepart> {
 	
 	/**
 	 * 根据用户ID查询部门集合
+     * @param userId 用户id
+     * @return List<SysDepart>
 	 */
 	public List<SysDepart> queryUserDeparts(@Param("userId") String userId);
 
@@ -32,9 +34,19 @@ public interface SysDepartMapper extends BaseMapper<SysDepart> {
 	 */
 	public List<SysDepart> queryDepartsByUsername(@Param("username") String username);
 
+    /**
+     * 通过部门编码获取部门id
+     * @param orgCode 部门编码
+     * @return String
+     */
 	@Select("select id from sys_depart where org_code=#{orgCode}")
 	public String queryDepartIdByOrgCode(@Param("orgCode") String orgCode);
 
+    /**
+     * 通过部门id 查询部门id,父id
+     * @param departId 部门id
+     * @return
+     */
 	@Select("select id,parent_id from sys_depart where id=#{departId}")
 	public SysDepart getParentDepartId(@Param("departId") String departId);
 
@@ -52,6 +64,11 @@ public interface SysDepartMapper extends BaseMapper<SysDepart> {
 	 */
 	List<String> getSubDepIdsByOrgCodes(@org.apache.ibatis.annotations.Param("orgCodes") String[] orgCodes);
 
+    /**
+     * 根据parent_id查询下级部门
+     * @param parentId 父id
+     * @return List<SysDepart>
+     */
     List<SysDepart> queryTreeListByPid(@Param("parentId") String parentId);
 	/**
 	 * 根据id下级部门数量
diff --git a/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/mapper/SysDictItemMapper.java b/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/mapper/SysDictItemMapper.java
index 0502f98..d53093e 100644
--- a/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/mapper/SysDictItemMapper.java
+++ b/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/mapper/SysDictItemMapper.java
@@ -15,6 +15,12 @@ import java.util.List;
  * @since 2018-12-28
  */
 public interface SysDictItemMapper extends BaseMapper<SysDictItem> {
+
+    /**
+     * 通过字典id查询字典项
+     * @param mainId 字典id
+     * @return
+     */
     @Select("SELECT * FROM sys_dict_item WHERE DICT_ID = #{mainId} order by sort_order asc, item_value asc")
     public List<SysDictItem> selectItemsByMainId(String mainId);
 }
diff --git a/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/mapper/SysDictMapper.java b/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/mapper/SysDictMapper.java
index d569857..135b0bf 100644
--- a/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/mapper/SysDictMapper.java
+++ b/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/mapper/SysDictMapper.java
@@ -27,14 +27,26 @@ import java.util.Map;
 public interface SysDictMapper extends BaseMapper<SysDict> {
 	
 	/**
-	  *  重复检查SQL
+	 * 重复检查SQL
+     * @param duplicateCheckVo
 	 * @return
 	 */
 	@Deprecated
 	public Long duplicateCheckCountSql(DuplicateCheckVo duplicateCheckVo);
+
+    /**
+     * 重复校验 sql语句
+     * @param duplicateCheckVo
+     * @return
+     */
 	@Deprecated
 	public Long duplicateCheckCountSqlNoDataId(DuplicateCheckVo duplicateCheckVo);
-	
+
+    /**
+     * 通过字典code获取字典数据
+     * @param code 字典code
+     * @return  List<DictModel>
+     */
 	public List<DictModel> queryDictItemsByCode(@Param("code") String code);
 
 	/**
@@ -53,16 +65,44 @@ public interface SysDictMapper extends BaseMapper<SysDict> {
 	 */
 	public List<DictModelMany> queryDictItemsByCodeList(@Param("dictCodeList") List<String> dictCodeList);
 
+    /**
+     * 通过查询指定table的 text code 获取字典
+     * @param table
+     * @param text
+     * @param code
+     * @return List<DictModel>
+     */
 	@Deprecated
 	public List<DictModel> queryTableDictItemsByCode(@Param("table") String table,@Param("text") String text,@Param("code") String code);
 
+    /**
+     * 通过查询指定table的 text code 获取字典(指定查询条件)
+     * @param table
+     * @param text
+     * @param code
+     * @param filterSql
+     * @return List<DictModel>
+     */
 	@Deprecated
 	public List<DictModel> queryTableDictItemsByCodeAndFilter(@Param("table") String table,@Param("text") String text,@Param("code") String code,@Param("filterSql") String filterSql);
 
+    /**
+     * 通过查询指定table的 text code 获取字典
+     * @param table
+     * @param key
+     * @param value
+     * @return List<Map<String,String>>
+     */
 	@Deprecated
 	@Select("select ${key} as \"label\",${value} as \"value\" from ${table}")
 	public List<Map<String,String>> getDictByTableNgAlain(@Param("table") String table, @Param("key") String key, @Param("value") String value);
 
+    /**
+     * 通过字典code获取字典数据
+     * @param code
+     * @param key
+     * @return
+     */
 	public String queryDictTextByKey(@Param("code") String code,@Param("key") String key);
 
 	/**
@@ -73,6 +113,14 @@ public interface SysDictMapper extends BaseMapper<SysDict> {
 	 */
 	List<DictModelMany> queryManyDictByKeys(@Param("dictCodeList") List<String> dictCodeList, @Param("keys") List<String> keys);
 
+    /**
+     * 通过查询指定table的 text code key 获取字典值
+     * @param table
+     * @param text
+     * @param code
+     * @param key
+     * @return String
+     */
 	@Deprecated
 	public String queryTableDictTextByKey(@Param("table") String table,@Param("text") String text,@Param("code") String code,@Param("key") String key);
 
@@ -88,6 +136,14 @@ public interface SysDictMapper extends BaseMapper<SysDict> {
 	@Deprecated
 	List<DictModel> queryTableDictTextByKeys(@Param("table") String table, @Param("text") String text, @Param("code") String code, @Param("keys") List<String> keys);
 
+    /**
+     * 通过查询指定table的 text code key 获取字典值,包含value
+     * @param table
+     * @param text
+     * @param code
+     * @param keyArray
+     * @return List<DictModel>
+     */
 	@Deprecated
 	public List<DictModel> queryTableDictByKeys(@Param("table") String table, @Param("text") String text, @Param("code") String code, @Param("keyArray") String[] keyArray);
 
@@ -133,6 +189,8 @@ public interface SysDictMapper extends BaseMapper<SysDict> {
 	 * @param code
 	 * @param pid
 	 * @param hasChildField
+     * @param query
+     * @param pidField
 	 * @return
 	 */
 	@Deprecated
diff --git a/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/mapper/SysLogMapper.java b/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/mapper/SysLogMapper.java
index 81fe4d5..f84d124 100644
--- a/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/mapper/SysLogMapper.java
+++ b/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/mapper/SysLogMapper.java
@@ -20,7 +20,7 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 public interface SysLogMapper extends BaseMapper<SysLog> {
 
 	/**
-	 * @功能:清空所有日志记录
+	 * 清空所有日志记录
 	 */
 	public void removeAll();
 
@@ -34,14 +34,16 @@ public interface SysLogMapper extends BaseMapper<SysLog> {
 	//update-begin--Author:zhangweijian  Date:20190428 for:传入开始时间,结束时间参数
 	/**
 	 * 获取系统今日访问次数
-	 *
+	 * @param dayStart 开始时间
+     * @param dayEnd 结束时间
 	 * @return Long
 	 */
 	Long findTodayVisitCount(@Param("dayStart") Date dayStart, @Param("dayEnd") Date dayEnd);
 
 	/**
 	 * 获取系统今日访问 IP数
-	 *
+	 * @param dayStart 开始时间
+     * @param dayEnd 结束时间
 	 * @return Long
 	 */
 	Long findTodayIp(@Param("dayStart") Date dayStart, @Param("dayEnd") Date dayEnd);
@@ -51,6 +53,7 @@ public interface SysLogMapper extends BaseMapper<SysLog> {
 	 *   首页:根据时间统计访问数量/ip数量
 	 * @param dayStart
 	 * @param dayEnd
+     * @param dbType
 	 * @return
 	 */
 	List<Map<String,Object>> findVisitCount(@Param("dayStart") Date dayStart, @Param("dayEnd") Date dayEnd, @Param("dbType") String dbType);
diff --git a/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/mapper/SysPermissionMapper.java b/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/mapper/SysPermissionMapper.java
index 37f375f..58bd331 100644
--- a/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/mapper/SysPermissionMapper.java
+++ b/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/mapper/SysPermissionMapper.java
@@ -27,18 +27,24 @@ public interface SysPermissionMapper extends BaseMapper<SysPermission> {
 	public List<TreeModel> queryListByParentId(@Param("parentId") String parentId);
 	
 	/**
-	  *   根据用户查询用户权限
+	 * 根据用户查询用户权限
+     * @param username 用户账户名称
+     * @return List<SysPermission>
 	 */
 	public List<SysPermission> queryByUser(@Param("username") String username);
 	
 	/**
-	 *   修改菜单状态字段: 是否子节点
+	 * 修改菜单状态字段: 是否子节点
+     * @param id 菜单id
+     * @param leaf 叶子节点
+     * @return int
 	 */
 	@Update("update sys_permission set is_leaf=#{leaf} where id = #{id}")
 	public int setMenuLeaf(@Param("id") String id,@Param("leaf") int leaf);
 	
 	/**
-	  *   获取模糊匹配规则的数据权限URL
+	 * 获取模糊匹配规则的数据权限URL
+     * @return List<String>
 	 */
 	@Select("SELECT url FROM sys_permission WHERE del_flag = 0 and menu_type = 2 and url like '%*%'")
     public List<String> queryPermissionUrlWithStar();
diff --git a/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/mapper/SysRoleIndexMapper.java b/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/mapper/SysRoleIndexMapper.java
new file mode 100644
index 0000000..206f7b7
--- /dev/null
+++ b/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/mapper/SysRoleIndexMapper.java
@@ -0,0 +1,17 @@
+package org.jeecg.modules.system.mapper;
+
+import java.util.List;
+
+import org.apache.ibatis.annotations.Param;
+import org.jeecg.modules.system.entity.SysRoleIndex;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * @Description: 角色首页配置
+ * @Author: jeecg-boot
+ * @Date:   2022-03-25
+ * @Version: V1.0
+ */
+public interface SysRoleIndexMapper extends BaseMapper<SysRoleIndex> {
+
+}
diff --git a/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/mapper/SysRoleMapper.java b/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/mapper/SysRoleMapper.java
index 9d8f20b..83d5a44 100644
--- a/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/mapper/SysRoleMapper.java
+++ b/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/mapper/SysRoleMapper.java
@@ -18,18 +18,19 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 public interface SysRoleMapper extends BaseMapper<SysRole> {
 
     /**
+     * @Description: 删除角色与用户关系
      * @Author scott
      * @Date 2019/12/13 16:12
-     * @Description: 删除角色与用户关系
      */
     @Delete("delete from sys_user_role where role_id = #{roleId}")
     void deleteRoleUserRelation(@Param("roleId") String roleId);
 
 
     /**
+     * @Description: 删除角色与权限关系
      * @Author scott
+     * @param roleId
      * @Date 2019/12/13 16:12
-     * @Description: 删除角色与权限关系
      */
     @Delete("delete from sys_role_permission where role_id = #{roleId}")
     void deleteRolePermissionRelation(@Param("roleId") String roleId);
diff --git a/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/mapper/SysTenantMapper.java b/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/mapper/SysTenantMapper.java
index 38cbc48..42fdfb9 100644
--- a/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/mapper/SysTenantMapper.java
+++ b/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/mapper/SysTenantMapper.java
@@ -3,6 +3,10 @@ package org.jeecg.modules.system.mapper;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import org.jeecg.modules.system.entity.SysTenant;
 
+/**
+ * @Description: 租户mapper接口
+ * @author: jeecg-boot
+ */
 public interface SysTenantMapper extends BaseMapper<SysTenant> {
 
 }
diff --git a/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/mapper/SysUserDepartMapper.java b/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/mapper/SysUserDepartMapper.java
index a7139d4..f6dba86 100644
--- a/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/mapper/SysUserDepartMapper.java
+++ b/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/mapper/SysUserDepartMapper.java
@@ -8,8 +8,17 @@ import org.jeecg.modules.system.entity.SysUser;
 import org.jeecg.modules.system.entity.SysUserDepart;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 
+/**
+ * @Description: 用户部门mapper接口
+ * @author: jeecg-boot
+ */
 public interface SysUserDepartMapper extends BaseMapper<SysUserDepart>{
-	
+
+    /**
+     * 通过用户id查询部门用户
+     * @param userId 用户id
+     * @return List<SysUserDepart>
+     */
 	List<SysUserDepart> getUserDepartByUid(@Param("userId") String userId);
 
 	/**
diff --git a/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/mapper/SysUserMapper.java b/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/mapper/SysUserMapper.java
index 5ae5044..916faeb 100644
--- a/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/mapper/SysUserMapper.java
+++ b/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/mapper/SysUserMapper.java
@@ -32,6 +32,7 @@ public interface SysUserMapper extends BaseMapper<SysUser> {
 	 *  根据部门Id查询用户信息
 	 * @param page
 	 * @param departId
+     * @param username 用户登录账户
 	 * @return
 	 */
 	IPage<SysUser> getUserByDepId(Page page, @Param("departId") String departId, @Param("username") String username);
@@ -47,6 +48,7 @@ public interface SysUserMapper extends BaseMapper<SysUser> {
 	 *  根据部门Ids,查询部门下用户信息
 	 * @param page
 	 * @param departIds
+     * @param username 用户登录账户
 	 * @return
 	 */
 	IPage<SysUser> getUserByDepIds(Page page, @Param("departIds") List<String> departIds, @Param("username") String username);
@@ -54,7 +56,8 @@ public interface SysUserMapper extends BaseMapper<SysUser> {
 	/**
 	 * 根据角色Id查询用户信息
 	 * @param page
-	 * @param
+	 * @param roleId 角色id
+     * @param username 用户登录账户
 	 * @return
 	 */
 	IPage<SysUser> getUserByRoleId(Page page, @Param("roleId") String roleId, @Param("username") String username);
@@ -62,7 +65,7 @@ public interface SysUserMapper extends BaseMapper<SysUser> {
 	/**
 	 * 根据用户名设置部门ID
 	 * @param username
-	 * @param departId
+	 * @param orgCode
 	 */
 	void updateUserDepart(@Param("username") String username,@Param("orgCode") String orgCode);
 	
@@ -102,41 +105,55 @@ public interface SysUserMapper extends BaseMapper<SysUser> {
     Integer getUserByOrgCodeTotal(@Param("orgCode") String orgCode, @Param("userParams") SysUser userParams);
 
     /**
+     * 批量删除角色与用户关系
      * @Author scott
      * @Date 2019/12/13 16:10
-     * @Description: 批量删除角色与用户关系
+     * @param roleIdArray
      */
 	void deleteBathRoleUserRelation(@Param("roleIdArray") String[] roleIdArray);
 
     /**
+     * 批量删除角色与权限关系
      * @Author scott
      * @Date 2019/12/13 16:10
-     * @Description: 批量删除角色与权限关系
+     * @param roleIdArray
      */
 	void deleteBathRolePermissionRelation(@Param("roleIdArray") String[] roleIdArray);
 
 	/**
 	 * 查询被逻辑删除的用户
+     * @param wrapper
+     * @return List<SysUser>
 	 */
 	List<SysUser> selectLogicDeleted(@Param(Constants.WRAPPER) Wrapper<SysUser> wrapper);
 
 	/**
 	 * 还原被逻辑删除的用户
+     * @param userIds 用户id
+     * @param entity
+     * @return int
 	 */
 	int revertLogicDeleted(@Param("userIds") String userIds, @Param("entity") SysUser entity);
 
 	/**
 	 * 彻底删除被逻辑删除的用户
+     * @param userIds 多个用户id
+     * @return int
 	 */
 	int deleteLogicDeleted(@Param("userIds") String userIds);
 
-    /** 更新空字符串为null【此写法有sql注入风险,禁止随便用】 */
+    /**
+     * 更新空字符串为null【此写法有sql注入风险,禁止随便用】
+     * @param fieldName
+     * @return int
+     */
     @Deprecated
     int updateNullByEmptyString(@Param("fieldName") String fieldName);
     
 	/**
 	 *  根据部门Ids,查询部门下用户信息
 	 * @param departIds
+     * @param username 用户账户名称
 	 * @return
 	 */
 	List<SysUser> queryByDepIds(@Param("departIds")List<String> departIds,@Param("username") String username);
diff --git a/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/mapper/SysUserRoleMapper.java b/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/mapper/SysUserRoleMapper.java
index 2465fff..5393931 100644
--- a/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/mapper/SysUserRoleMapper.java
+++ b/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/mapper/SysUserRoleMapper.java
@@ -16,9 +16,19 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
  */
 public interface SysUserRoleMapper extends BaseMapper<SysUserRole> {
 
+    /**
+     * 通过用户账号查询角色集合
+     * @param username 用户账号名称
+     * @return List<String>
+     */
 	@Select("select role_code from sys_role where id in (select role_id from sys_user_role where user_id = (select id from sys_user where username=#{username}))")
 	List<String> getRoleByUserName(@Param("username") String username);
 
+	/**
+     * 通过用户账号查询角色Id集合
+     * @param username 用户账号名称
+     * @return List<String>
+     */
 	@Select("select id from sys_role where id in (select role_id from sys_user_role where user_id = (select id from sys_user where username=#{username}))")
 	List<String> getRoleIdByUserName(@Param("username") String username);
 
diff --git a/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/mapper/xml/SysDictMapper.xml b/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/mapper/xml/SysDictMapper.xml
index 7a4b388..34f3ebe 100644
--- a/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/mapper/xml/SysDictMapper.xml
+++ b/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/mapper/xml/SysDictMapper.xml
@@ -160,7 +160,8 @@
 		select ${query.text} as "text",${query.code} as "value" from ${query.table}
 		where 1 = 1
 		<if test="query.keyword != null and query.keyword != ''">
-			and (${query.text} like '%${query.keyword}%' or ${query.code} like '%${query.keyword}%')
+			<bind name="bindKeyword" value="'%'+query.keyword+'%'"/>
+			and (${query.text} like #{bindKeyword} or ${query.code} like #{bindKeyword})
 		</if>
 		<if test="query.codeValue != null and query.codeValue != ''">
 			and ${query.code} = #{query.codeValue}
diff --git a/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/mapper/xml/SysRoleIndexMapper.xml b/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/mapper/xml/SysRoleIndexMapper.xml
new file mode 100644
index 0000000..4b7cc60
--- /dev/null
+++ b/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/mapper/xml/SysRoleIndexMapper.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="org.jeecg.modules.system.mapper.SysRoleIndexMapper">
+
+</mapper>
\ No newline at end of file
diff --git a/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/mapper/xml/SysUserDepartMapper.xml b/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/mapper/xml/SysUserDepartMapper.xml
index 92da725..bee2bea 100644
--- a/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/mapper/xml/SysUserDepartMapper.xml
+++ b/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/mapper/xml/SysUserDepartMapper.xml
@@ -12,7 +12,8 @@
 		select a.* from sys_user a
 		join sys_user_depart b on b.user_id = a.id
 		join sys_depart c on b.dep_id = c.id
-		where a.del_flag = 0 and c.org_code like '${orgCode}%'
+		<bind name="bindOrgCode" value="orgCode+'%'"/>
+		where a.del_flag = 0 and c.org_code like #{bindOrgCode}
 		<if test="realname!=null and realname!=''">
 			<!-- update by sunjianlei 20220119【#3348】SQL injection exists in /sys/user/queryUserByDepId;  -->
 			<bind name="bindRealname" value="'%'+realname+'%'"/>
@@ -25,7 +26,8 @@
 		select a.*, c.depart_name as org_code_txt from sys_user a
 		join sys_user_depart b on b.user_id = a.id
 		join sys_depart c on b.dep_id = c.id
-		where a.del_flag = 0 and a.status = 1 and c.org_code like '${orgCode}%'
+		<bind name="bindOrgCode" value="orgCode+'%'"/>
+		where a.del_flag = 0 and a.status = 1 and c.org_code like #{bindOrgCode}
 		<if test="username!=null and username!=''">
 			<bind name="bindUsername" value="'%'+username+'%'"/>
 			and a.username like #{bindUsername}
diff --git a/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/mapper/xml/SysUserMapper.xml b/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/mapper/xml/SysUserMapper.xml
index 500261b..7328a2d 100644
--- a/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/mapper/xml/SysUserMapper.xml
+++ b/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/mapper/xml/SysUserMapper.xml
@@ -68,7 +68,13 @@
 		INNER JOIN sys_user_depart ON sys_user_depart.dep_id = sys_depart.id
 		INNER JOIN sys_user ON sys_user.id = sys_user_depart.user_id
 		WHERE
-		sys_user.del_flag = 0 AND sys_depart.org_code LIKE '${orgCode}%'
+		<if test="orgCode == null">
+			<bind name="bindOrgCode" value="'%'"/>
+		</if>
+		<if test="orgCode != null">
+			<bind name="bindOrgCode" value="orgCode+'%'"/>
+		</if>
+		sys_user.del_flag = 0 AND sys_depart.org_code LIKE #{bindOrgCode}
 
 		<if test="userParams != null">
 			<if test="userParams.realname != null and userParams.realname != ''">
diff --git a/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/model/DepartIdModel.java b/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/model/DepartIdModel.java
index 572f2d0..af15700 100644
--- a/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/model/DepartIdModel.java
+++ b/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/model/DepartIdModel.java
@@ -19,13 +19,19 @@ public class DepartIdModel implements Serializable {
 
     private static final long serialVersionUID = 1L;
 
-    // 主键ID
+    /**
+     * 主键ID
+     */
     private String key;
 
-    // 主键ID
+    /**
+     * 主键ID
+     */
     private String value;
 
-    // 部门名称
+    /**
+     * 部门名称
+     */
     private String title;
     
     List<DepartIdModel> children = new ArrayList<>();
diff --git a/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/model/SysDepartTreeModel.java b/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/model/SysDepartTreeModel.java
index 86f5411..dcfc923 100644
--- a/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/model/SysDepartTreeModel.java
+++ b/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/model/SysDepartTreeModel.java
@@ -75,6 +75,11 @@ public class SysDepartTreeModel implements Serializable{
 
     private Date updateTime;
 
+    //update-begin---author:wangshuai ---date:20200308  for:[JTC-119]在部门管理菜单下设置部门负责人,新增字段部门负责人ids
+    /**部门负责人ids*/
+    private String directorUserIds;
+    //update-end---author:wangshuai ---date:20200308  for:[JTC-119]在部门管理菜单下设置部门负责人,新增字段部门负责人ids
+    
     private List<SysDepartTreeModel> children = new ArrayList<>();
 
 
@@ -107,6 +112,7 @@ public class SysDepartTreeModel implements Serializable{
         this.createTime = sysDepart.getCreateTime();
         this.updateBy = sysDepart.getUpdateBy();
         this.updateTime = sysDepart.getUpdateTime();
+        this.directorUserIds = sysDepart.getDirectorUserIds();
     }
 
     public boolean getIsLeaf() {
@@ -332,6 +338,14 @@ public class SysDepartTreeModel implements Serializable{
 
     public SysDepartTreeModel() { }
 
+    public String getDirectorUserIds() {
+        return directorUserIds;
+    }
+
+    public void setDirectorUserIds(String directorUserIds) {
+        this.directorUserIds = directorUserIds;
+    }
+
     /**
      * 重写equals方法
      */
@@ -365,6 +379,7 @@ public class SysDepartTreeModel implements Serializable{
                 Objects.equals(createTime, model.createTime) &&
                 Objects.equals(updateBy, model.updateBy) &&
                 Objects.equals(updateTime, model.updateTime) &&
+                Objects.equals(directorUserIds, model.directorUserIds) &&
                 Objects.equals(children, model.children);
     }
     
@@ -377,7 +392,7 @@ public class SysDepartTreeModel implements Serializable{
         return Objects.hash(id, parentId, departName, departNameEn, departNameAbbr,
         		departOrder, description, orgCategory, orgType, orgCode, mobile, fax, address, 
         		memo, status, delFlag, qywxIdentifier, createBy, createTime, updateBy, updateTime,
-        		children);
+        		children,directorUserIds);
     }
 
 }
diff --git a/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/model/SysPermissionTree.java b/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/model/SysPermissionTree.java
index 5b44d53..3b6ee09 100644
--- a/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/model/SysPermissionTree.java
+++ b/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/model/SysPermissionTree.java
@@ -6,6 +6,10 @@ import java.util.Date;
 import java.util.List;
 import org.jeecg.modules.system.entity.SysPermission;
 
+/**
+ * @Description: 菜单树,封装树结构
+ * @author: jeecg-boot
+ */
 public class SysPermissionTree implements Serializable {
 
 	private static final long serialVersionUID = 1L;
diff --git a/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/model/ThirdLoginModel.java b/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/model/ThirdLoginModel.java
index e13265f..4f6cc27 100644
--- a/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/model/ThirdLoginModel.java
+++ b/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/model/ThirdLoginModel.java
@@ -6,6 +6,7 @@ import java.io.Serializable;
 
 /**
  * 第三方登录 信息存储
+ * @author: jeecg-boot
  */
 @Data
 public class ThirdLoginModel implements Serializable {
diff --git a/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/model/TreeModel.java b/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/model/TreeModel.java
index 417ccdd..c2da973 100644
--- a/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/model/TreeModel.java
+++ b/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/model/TreeModel.java
@@ -10,6 +10,7 @@ import org.jeecg.modules.system.entity.SysPermission;
 
 /**
   * 树形列表用到
+  * @author: jeecg-boot
  */
 public class TreeModel implements Serializable {
 	
@@ -102,7 +103,7 @@ public class TreeModel implements Serializable {
     	this.parentId = parentId;
     	this.ruleFlag=ruleFlag;
     	this.slotTitle =  slotTitle;
-    	Map<String,String> map = new HashMap<String,String>();
+    	Map<String,String> map = new HashMap(5);
     	map.put("title", "hasDatarule");
     	this.scopedSlots = map;
     	this.isLeaf = isLeaf;
diff --git a/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/model/TreeSelectModel.java b/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/model/TreeSelectModel.java
index 39e7f4b..6fc6f36 100644
--- a/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/model/TreeSelectModel.java
+++ b/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/model/TreeSelectModel.java
@@ -5,6 +5,7 @@ import java.util.List;
 
 /**
   * 树形下拉框
+  * @author: jeecg-boot
  */
 public class TreeSelectModel implements Serializable {
 
diff --git a/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/rule/CategoryCodeRule.java b/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/rule/CategoryCodeRule.java
index 29ed03c..9a23fca 100644
--- a/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/rule/CategoryCodeRule.java
+++ b/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/rule/CategoryCodeRule.java
@@ -31,11 +31,15 @@ public class CategoryCodeRule implements IFillRuleHandler {
 
         if (formData != null && formData.size() > 0) {
             Object obj = formData.get("pid");
-            if (oConvertUtils.isNotEmpty(obj)) categoryPid = obj.toString();
+            if (oConvertUtils.isNotEmpty(obj)) {
+                categoryPid = obj.toString();
+            }
         } else {
             if (params != null) {
                 Object obj = params.get("pid");
-                if (oConvertUtils.isNotEmpty(obj)) categoryPid = obj.toString();
+                if (oConvertUtils.isNotEmpty(obj)) {
+                    categoryPid = obj.toString();
+                }
             }
         }
 
diff --git a/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/rule/OrgCodeRule.java b/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/rule/OrgCodeRule.java
index bf6a3ac..5b0d354 100644
--- a/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/rule/OrgCodeRule.java
+++ b/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/rule/OrgCodeRule.java
@@ -38,11 +38,15 @@ public class OrgCodeRule implements IFillRuleHandler {
         String parentId = null;
         if (formData != null && formData.size() > 0) {
             Object obj = formData.get("parentId");
-            if (obj != null) parentId = obj.toString();
+            if (obj != null) {
+                parentId = obj.toString();
+            }
         } else {
             if (params != null) {
                 Object obj = params.get("parentId");
-                if (obj != null) parentId = obj.toString();
+                if (obj != null) {
+                    parentId = obj.toString();
+                }
             }
         }
 
diff --git a/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/security/DictQueryBlackListHandler.java b/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/security/DictQueryBlackListHandler.java
new file mode 100644
index 0000000..279c72a
--- /dev/null
+++ b/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/security/DictQueryBlackListHandler.java
@@ -0,0 +1,56 @@
+package org.jeecg.modules.system.security;
+
+import org.jeecg.common.constant.SymbolConstant;
+import org.jeecg.common.util.oConvertUtils;
+import org.jeecg.common.util.security.AbstractQueryBlackListHandler;
+import org.springframework.stereotype.Component;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * 字典组件 执行sql前校验 只校验表字典
+ * dictCodeString格式如:
+ * table,text,code
+ * table where xxx,text,code
+ * table,text,code, where xxx
+ *
+ * @Author taoYan
+ * @Date 2022/3/23 21:10
+ **/
+@Component("dictQueryBlackListHandler")
+public class DictQueryBlackListHandler extends AbstractQueryBlackListHandler {
+
+    @Override
+    protected List<QueryTable> getQueryTableInfo(String dictCodeString) {
+        if (dictCodeString != null && dictCodeString.indexOf(SymbolConstant.COMMA) > 0) {
+            String[] arr = dictCodeString.split(SymbolConstant.COMMA);
+            if (arr.length != 3 && arr.length != 4) {
+                return null;
+            }
+            String tableName = getTableName(arr[0]);
+            QueryTable table = new QueryTable(tableName, "");
+            // 无论什么场景 第二、三个元素一定是表的字段,直接add
+            table.addField(arr[1].trim());
+            if (oConvertUtils.isNotEmpty(arr[2].trim())) {
+                table.addField(arr[2].trim());
+            }
+            List<QueryTable> list = new ArrayList<>();
+            list.add(table);
+            return list;
+        }
+        return null;
+    }
+
+    /**
+     * 取where前面的为:table name
+     *
+     * @param str
+     * @return
+     */
+    private String getTableName(String str) {
+        String[] arr = str.split("\\s+(?i)where\\s+");
+        return arr[0];
+    }
+
+}
diff --git a/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/service/ISysAnnouncementSendService.java b/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/service/ISysAnnouncementSendService.java
index 531718c..60f8a2f 100644
--- a/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/service/ISysAnnouncementSendService.java
+++ b/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/service/ISysAnnouncementSendService.java
@@ -16,11 +16,17 @@ import com.baomidou.mybatisplus.extension.service.IService;
  */
 public interface ISysAnnouncementSendService extends IService<SysAnnouncementSend> {
 
+    /**
+     * 通过用户id查询用户通告阅读标记
+     * @param userId 用户id
+     * @return
+     */
 	public List<String> queryByUserId(String userId);
 	
 	/**
-	 * @功能:获取我的消息
+	 * 获取我的消息
 	 * @param announcementSendModel
+     * @param page 当前页数
 	 * @return
 	 */
 	public Page<AnnouncementSendModel> getMyAnnouncementSendPage(Page<AnnouncementSendModel> page,AnnouncementSendModel announcementSendModel);
diff --git a/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/service/ISysAnnouncementService.java b/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/service/ISysAnnouncementService.java
index 38521d1..d719d66 100644
--- a/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/service/ISysAnnouncementService.java
+++ b/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/service/ISysAnnouncementService.java
@@ -13,12 +13,33 @@ import com.baomidou.mybatisplus.extension.service.IService;
  */
 public interface ISysAnnouncementService extends IService<SysAnnouncement> {
 
+    /**
+     * 保存系统通告
+     * @param sysAnnouncement
+     */
 	public void saveAnnouncement(SysAnnouncement sysAnnouncement);
 
+    /**
+     * 修改系统通告
+     * @param sysAnnouncement
+     * @return
+     */
 	public boolean upDateAnnouncement(SysAnnouncement sysAnnouncement);
 
+    /**
+     * 保存系统通告
+     * @param title 标题
+     * @param msgContent 信息内容
+     */
 	public void saveSysAnnouncement(String title, String msgContent);
 
+    /**
+     * 分页查询系统通告
+     * @param page 当前页数
+     * @param userId 用户id
+     * @param msgCategory 消息类型
+     * @return Page<SysAnnouncement>
+     */
 	public Page<SysAnnouncement> querySysCementPageByUserId(Page<SysAnnouncement> page,String userId,String msgCategory);
 
 
diff --git a/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/service/ISysCategoryService.java b/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/service/ISysCategoryService.java
index a93d967..908dfda 100644
--- a/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/service/ISysCategoryService.java
+++ b/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/service/ISysCategoryService.java
@@ -19,14 +19,23 @@ public interface ISysCategoryService extends IService<SysCategory> {
 	/**根节点父ID的值*/
 	public static final String ROOT_PID_VALUE = "0";
 
+    /**
+     * 添加分类字典
+     * @param sysCategory
+     */
 	void addSysCategory(SysCategory sysCategory);
-	
+
+    /**
+     * 修改分类字典
+     * @param sysCategory
+     */
 	void updateSysCategory(SysCategory sysCategory);
 	
 	/**
-	  * 根据父级编码加载分类字典的数据
+     * 根据父级编码加载分类字典的数据
 	 * @param pcode
 	 * @return
+     * @throws JeecgBootException
 	 */
 	public List<TreeSelectModel> queryListByCode(String pcode) throws JeecgBootException;
 	
diff --git a/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/service/ISysDataLogService.java b/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/service/ISysDataLogService.java
index a18b8bf..3886fc5 100644
--- a/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/service/ISysDataLogService.java
+++ b/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/service/ISysDataLogService.java
@@ -4,6 +4,10 @@ import org.jeecg.modules.system.entity.SysDataLog;
 
 import com.baomidou.mybatisplus.extension.service.IService;
 
+/**
+ * @Description: 数据日志service接口
+ * @author: jeecg-boot
+ */
 public interface ISysDataLogService extends IService<SysDataLog> {
 	
 	/**
diff --git a/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/service/ISysDepartPermissionService.java b/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/service/ISysDepartPermissionService.java
index 0ae3933..08ff1be 100644
--- a/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/service/ISysDepartPermissionService.java
+++ b/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/service/ISysDepartPermissionService.java
@@ -23,7 +23,8 @@ public interface ISysDepartPermissionService extends IService<SysDepartPermissio
 
     /**
      * 根据部门id,菜单id获取数据规则
-     * @param permissionId
+     * @param permissionId 菜单id
+     * @param departId 部门id
      * @return
      */
     List<SysPermissionDataRule> getPermRuleListByDeptIdAndPermId(String departId,String permissionId);
diff --git a/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/service/ISysDepartRoleUserService.java b/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/service/ISysDepartRoleUserService.java
index dc34a00..2c5ca6f 100644
--- a/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/service/ISysDepartRoleUserService.java
+++ b/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/service/ISysDepartRoleUserService.java
@@ -13,6 +13,12 @@ import java.util.List;
  */
 public interface ISysDepartRoleUserService extends IService<SysDepartRoleUser> {
 
+    /**
+     * 添加用户与部门关联
+     * @param userId 用户id
+     * @param newRoleId 新的角色id
+     * @param oldRoleId 旧的角色id
+     */
     void deptRoleUserAdd(String userId,String newRoleId,String oldRoleId);
 
     /**
diff --git a/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/service/ISysDepartService.java b/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/service/ISysDepartService.java
index d389da2..5e52ef2 100644
--- a/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/service/ISysDepartService.java
+++ b/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/service/ISysDepartService.java
@@ -19,6 +19,7 @@ public interface ISysDepartService extends IService<SysDepart>{
 
     /**
      * 查询我的部门信息,并分节点进行显示
+     * @param departIds 部门id
      * @return
      */
     List<SysDepartTreeModel> queryMyDeptTreeList(String departIds);
@@ -32,6 +33,7 @@ public interface ISysDepartService extends IService<SysDepart>{
 
     /**
      * 查询所有部门信息,并分节点进行显示
+     * @param ids 多个部门id
      * @return
      */
     List<SysDepartTreeModel> queryTreeList(String ids);
@@ -45,12 +47,14 @@ public interface ISysDepartService extends IService<SysDepart>{
     /**
      * 保存部门数据
      * @param sysDepart
+     * @param username 用户名
      */
     void saveDepartData(SysDepart sysDepart,String username);
 
     /**
      * 更新depart数据
      * @param sysDepart
+     * @param username 用户名
      * @return
      */
     Boolean updateDepartDataById(SysDepart sysDepart,String username);
@@ -65,6 +69,8 @@ public interface ISysDepartService extends IService<SysDepart>{
     /**
      * 根据关键字搜索相关的部门数据
      * @param keyWord
+     * @param myDeptSearch
+     * @param departIds 多个部门id
      * @return
      */
     List<SysDepartTreeModel> searchByKeyWord(String keyWord,String myDeptSearch,String departIds);
@@ -93,7 +99,7 @@ public interface ISysDepartService extends IService<SysDepart>{
 
 	 /**
      * 根据部门id批量删除并删除其可能存在的子级部门
-     * @param id
+     * @param ids 多个部门id
      * @return
      */
 	void deleteBatchWithChildren(List<String> ids);
@@ -107,16 +113,20 @@ public interface ISysDepartService extends IService<SysDepart>{
 
     /**
      * 获取我的部门下级所有部门IDS
+     * @param departIds 多个部门id
      * @return
      */
     List<String> getMySubDepIdsByDepId(String departIds);
     /**
      * 根据关键字获取部门信息(通讯录)
+     * @param keyWord 搜索词
      * @return
      */
     List<SysDepartTreeModel> queryTreeByKeyWord(String keyWord);
     /**
      * 获取我的部门下级所有部门
+     * @param parentId 父id
+     * @param ids 多个部门id
      * @return
      */
     List<SysDepartTreeModel> queryTreeListByPid(String parentId,String ids);
@@ -125,6 +135,7 @@ public interface ISysDepartService extends IService<SysDepart>{
      * 获取某个部门的所有父级部门的ID
      *
      * @param departId 根据departId查
+     * @return JSONObject
      */
     JSONObject queryAllParentIdByDepartId(String departId);
 
@@ -132,15 +143,18 @@ public interface ISysDepartService extends IService<SysDepart>{
      * 获取某个部门的所有父级部门的ID
      *
      * @param orgCode 根据orgCode查
+     * @return JSONObject
      */
     JSONObject queryAllParentIdByOrgCode(String orgCode);
     /**
      * 获取公司信息
+     * @param orgCode 部门编码
      * @return
      */
     SysDepart queryCompByOrgCode(String orgCode);
     /**
      * 获取下级部门
+     * @param pid
      * @return
      */
     List<SysDepart> queryDeptByPid(String pid);
diff --git a/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/service/ISysDictItemService.java b/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/service/ISysDictItemService.java
index 19c02b2..803b490 100644
--- a/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/service/ISysDictItemService.java
+++ b/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/service/ISysDictItemService.java
@@ -14,5 +14,11 @@ import java.util.List;
  * @since 2018-12-28
  */
 public interface ISysDictItemService extends IService<SysDictItem> {
+
+    /**
+     * 通过字典id查询字典项
+     * @param mainId 字典id
+     * @return
+     */
     public List<SysDictItem> selectItemsByMainId(String mainId);
 }
diff --git a/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/service/ISysDictService.java b/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/service/ISysDictService.java
index 0d3860d..b08a9d3 100644
--- a/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/service/ISysDictService.java
+++ b/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/service/ISysDictService.java
@@ -20,6 +20,11 @@ import java.util.Map;
  */
 public interface ISysDictService extends IService<SysDict> {
 
+    /**
+     * 通过字典code获取字典数据
+     * @param code
+     * @return
+     */
     public List<DictModel> queryDictItemsByCode(String code);
 
 	/**
@@ -37,14 +42,39 @@ public interface ISysDictService extends IService<SysDict> {
 	 */
 	Map<String, List<DictModel>> queryDictItemsByCodeList(List<String> dictCodeList);
 
+    /**
+     * 登录加载系统字典
+     * @return
+     */
     public Map<String,List<DictModel>> queryAllDictItems();
 
+    /**
+     * 查通过查询指定table的 text code 获取字典
+     * @param table
+     * @param text
+     * @param code
+     * @return
+     */
     @Deprecated
     List<DictModel> queryTableDictItemsByCode(String table, String text, String code);
 
+    /**
+     * 通过查询指定table的 text code 获取字典(指定查询条件)
+     * @param table
+     * @param text
+     * @param code
+     * @param filterSql
+     * @return
+     */
     @Deprecated
 	public List<DictModel> queryTableDictItemsByCodeAndFilter(String table, String text, String code, String filterSql);
 
+    /**
+     * 通过字典code及字典项的value获取字典文本
+     * @param code
+     * @param key
+     * @return
+     */
     public String queryDictTextByKey(String code, String key);
 
 	/**
@@ -55,6 +85,14 @@ public interface ISysDictService extends IService<SysDict> {
 	 */
 	Map<String, List<DictModel>> queryManyDictByKeys(List<String> dictCodeList, List<String> keys);
 
+    /**
+     * 通过查询指定table的 text code key 获取字典值
+     * @param table
+     * @param text
+     * @param code
+     * @param key
+     * @return
+     */
     @Deprecated
 	String queryTableDictTextByKey(String table, String text, String code, String key);
 
@@ -69,8 +107,26 @@ public interface ISysDictService extends IService<SysDict> {
 	 */
 	List<DictModel> queryTableDictTextByKeys(String table, String text, String code, List<String> keys);
 
+    /**
+     * 通过查询指定table的 text code key 获取字典值,包含value
+     * @param table 表名
+     * @param text
+     * @param code
+     * @param keys
+     * @return
+     */
 	@Deprecated
 	List<String> queryTableDictByKeys(String table, String text, String code, String keys);
+
+    /**
+     * 通过查询指定table的 text code key 获取字典值,包含value
+     * @param table
+     * @param text
+     * @param code
+     * @param keys
+     * @param delNotExist
+     * @return
+     */
 	@Deprecated
 	List<String> queryTableDictByKeys(String table, String text, String code, String keys,boolean delNotExist);
 
@@ -84,6 +140,9 @@ public interface ISysDictService extends IService<SysDict> {
 
     /**
      * 添加一对多
+     * @param sysDict
+     * @param sysDictItemList
+     * @return Integer
      */
     public Integer saveMain(SysDict sysDict, List<SysDictItem> sysDictItemList);
 
@@ -116,6 +175,8 @@ public interface ISysDictService extends IService<SysDict> {
 	 * @param text
 	 * @param code
 	 * @param keyword
+     * @param condition
+     * @param pageSize 每页条数
 	 * @return
 	 */
 	public List<DictModel> queryLittleTableDictItems(String table, String text, String code, String condition, String keyword, int pageSize);
@@ -138,6 +199,7 @@ public interface ISysDictService extends IService<SysDict> {
 	 * @param pidField
 	 * @param pid
 	 * @param hasChildField
+     * @param query
 	 * @return
 	 */
 	@Deprecated
@@ -185,6 +247,8 @@ public interface ISysDictService extends IService<SysDict> {
      * 大数据量的字典表 走异步加载  即前端输入内容过滤数据
      *
      * @param dictCode 字典code格式:table,text,code
+     * @param keyword
+     * @param pageSize 每页条数
      * @return
      */
     List<DictModel> loadDict(String dictCode, String keyword, Integer pageSize);
diff --git a/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/service/ISysLogService.java b/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/service/ISysLogService.java
index ea796e3..2d7238d 100644
--- a/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/service/ISysLogService.java
+++ b/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/service/ISysLogService.java
@@ -19,7 +19,7 @@ import com.baomidou.mybatisplus.extension.service.IService;
 public interface ISysLogService extends IService<SysLog> {
 
 	/**
-	 * @功能:清空所有日志记录
+	 * 清空所有日志记录
 	 */
 	public void removeAll();
 	
@@ -33,14 +33,16 @@ public interface ISysLogService extends IService<SysLog> {
 	//update-begin--Author:zhangweijian  Date:20190428 for:传入开始时间,结束时间参数
 	/**
 	 * 获取系统今日访问次数
-	 *
+     * @param dayStart
+	 * @param dayEnd
 	 * @return Long
 	 */
 	Long findTodayVisitCount(Date dayStart, Date dayEnd);
 
 	/**
 	 * 获取系统今日访问 IP数
-	 *
+	 * @param dayStart 开始时间
+     * @param dayEnd 结束时间
 	 * @return Long
 	 */
 	Long findTodayIp(Date dayStart, Date dayEnd);
diff --git a/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/service/ISysPermissionDataRuleService.java b/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/service/ISysPermissionDataRuleService.java
index 1b32ec5..3e0a5d0 100644
--- a/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/service/ISysPermissionDataRuleService.java
+++ b/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/service/ISysPermissionDataRuleService.java
@@ -19,13 +19,14 @@ public interface ISysPermissionDataRuleService extends IService<SysPermissionDat
 	/**
 	 * 根据菜单id查询其对应的权限数据
 	 * 
-	 * @param permRule
+	 * @param permissionId
+     * @return List<SysPermissionDataRule>
 	 */
 	List<SysPermissionDataRule> getPermRuleListByPermId(String permissionId);
 
 	/**
 	 * 根据页面传递的参数查询菜单权限数据
-	 * 
+	 * @param permRule
 	 * @return
 	 */
 	List<SysPermissionDataRule> queryPermissionRule(SysPermissionDataRule permRule);
@@ -33,7 +34,7 @@ public interface ISysPermissionDataRuleService extends IService<SysPermissionDat
 	
 	/**
 	  * 根据菜单ID和用户名查找数据权限配置信息
-	 * @param permission
+	 * @param permissionId
 	 * @param username
 	 * @return
 	 */
diff --git a/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/service/ISysPermissionService.java b/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/service/ISysPermissionService.java
index c3d6610..14ed0bb 100644
--- a/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/service/ISysPermissionService.java
+++ b/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/service/ISysPermissionService.java
@@ -18,18 +18,46 @@ import com.baomidou.mybatisplus.extension.service.IService;
  * @since 2018-12-21
  */
 public interface ISysPermissionService extends IService<SysPermission> {
-	
+
+    /**
+     * 通过父id查询菜单
+     * @param parentId 父id
+     * @return
+     */
 	public List<TreeModel> queryListByParentId(String parentId);
 	
-	/**真实删除*/
+	/**
+     * 真实删除
+     * @param id 菜单id
+     * @throws JeecgBootException
+     */
 	public void deletePermission(String id) throws JeecgBootException;
-	/**逻辑删除*/
+	/**
+     * 逻辑删除
+     * @param id 菜单id
+     * @throws JeecgBootException
+     */
 	public void deletePermissionLogical(String id) throws JeecgBootException;
-	
+
+    /**
+     * 添加菜单
+     * @param sysPermission SysPermission对象
+     * @throws JeecgBootException
+     */
 	public void addPermission(SysPermission sysPermission) throws JeecgBootException;
-	
+
+    /**
+     * 编辑菜单
+     * @param sysPermission SysPermission对象
+     * @throws JeecgBootException
+     */
 	public void editPermission(SysPermission sysPermission) throws JeecgBootException;
-	
+
+    /**
+     * 获取登录用户拥有的权限
+     * @param username 用户名
+     * @return
+     */
 	public List<SysPermission> queryByUser(String username);
 	
 	/**
diff --git a/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/service/ISysPositionService.java b/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/service/ISysPositionService.java
index d90d394..1421f46 100644
--- a/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/service/ISysPositionService.java
+++ b/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/service/ISysPositionService.java
@@ -13,6 +13,8 @@ public interface ISysPositionService extends IService<SysPosition> {
 
     /**
      * 通过code查询
+     * @param code 职务编码
+     * @return SysPosition
      */
     SysPosition getByCode(String code);
 
diff --git a/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/service/ISysRoleIndexService.java b/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/service/ISysRoleIndexService.java
new file mode 100644
index 0000000..328f67c
--- /dev/null
+++ b/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/service/ISysRoleIndexService.java
@@ -0,0 +1,14 @@
+package org.jeecg.modules.system.service;
+
+import org.jeecg.modules.system.entity.SysRoleIndex;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * @Description: 角色首页配置
+ * @Author: jeecg-boot
+ * @Date:   2022-03-25
+ * @Version: V1.0
+ */
+public interface ISysRoleIndexService extends IService<SysRoleIndex> {
+
+}
diff --git a/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/service/ISysTenantService.java b/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/service/ISysTenantService.java
index 4142585..7aa8a36 100644
--- a/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/service/ISysTenantService.java
+++ b/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/service/ISysTenantService.java
@@ -6,6 +6,10 @@ import org.jeecg.modules.system.entity.SysTenant;
 import java.util.Collection;
 import java.util.List;
 
+/**
+ * @Description: 租户service接口
+ * @author: jeecg-boot
+ */
 public interface ISysTenantService extends IService<SysTenant> {
 
     /**
@@ -22,7 +26,7 @@ public interface ISysTenantService extends IService<SysTenant> {
      * @param id
      * @return
      */
-    int countUserLinkTenant(String id);
+    Long countUserLinkTenant(String id);
 
     /**
      * 根据ID删除租户,会判断是否已被引用
diff --git a/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/service/ISysThirdAccountService.java b/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/service/ISysThirdAccountService.java
index e8040c7..7d5c173 100644
--- a/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/service/ISysThirdAccountService.java
+++ b/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/service/ISysThirdAccountService.java
@@ -14,14 +14,35 @@ import java.util.List;
  * @Version: V1.0
  */
 public interface ISysThirdAccountService extends IService<SysThirdAccount> {
-    /**更新第三方账户信息*/
+    /**
+     * 更新第三方账户信息
+     * @param sysUser SysUser对象
+     * @param thirdUserUuid 第三方id
+     */
     void updateThirdUserId(SysUser sysUser,String thirdUserUuid);
-    /**创建第三方用户*/
+
+    /**
+     * 创建第三方用户
+     * @param phone 手机号
+     * @param thirdUserUuid 第三方id
+     * @return SysUser
+     */
     SysUser createUser(String phone, String thirdUserUuid);
 
-    /** 根据本地userId查询数据 */
+    /**
+     * 根据本地userId查询数据
+     * @param sysUserId 用户id
+     * @param thirdType 第三方登录类型
+     * @return SysThirdAccount
+     */
     SysThirdAccount getOneBySysUserId(String sysUserId, String thirdType);
-    /** 根据第三方userId查询数据 */
+
+    /**
+     * 根据第三方userId查询数据
+     * @param thirdUserId 第三方id
+     * @param thirdType 第三方登录类型
+     * @return SysThirdAccount
+     */
     SysThirdAccount getOneByThirdUserId(String thirdUserId, String thirdType);
 
     /**
@@ -37,6 +58,7 @@ public interface ISysThirdAccountService extends IService<SysThirdAccount> {
      * 创建新用户
      *
      * @param tlm 第三方登录信息
+     * @return SysThirdAccount
      */
     SysThirdAccount saveThirdUser(ThirdLoginModel tlm);
 
diff --git a/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/service/ISysUserDepartService.java b/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/service/ISysUserDepartService.java
index 10aa9df..e368942 100644
--- a/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/service/ISysUserDepartService.java
+++ b/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/service/ISysUserDepartService.java
@@ -37,6 +37,9 @@ public interface ISysUserDepartService extends IService<SysUserDepart> {
 	List<SysUser> queryUserByDepId(String depId);
   	/**
 	 * 根据部门code,查询当前部门和下级部门的用户信息
+     * @param depCode 部门code
+     * @param realname 真实姓名
+     * @return List<SysUser>
 	 */
 	List<SysUser> queryUserByDepCode(String depCode,String realname);
 
diff --git a/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/service/ISysUserService.java b/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/service/ISysUserService.java
index 39123d8..70c880a 100644
--- a/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/service/ISysUserService.java
+++ b/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/service/ISysUserService.java
@@ -58,7 +58,12 @@ public interface ISysUserService extends IService<SysUser> {
 	 * @return
 	 */
 	public boolean deleteBatchUsers(String userIds);
-	
+
+    /**
+     * 根据用户名查询
+     * @param username 用户名
+     * @return SysUser
+     */
 	public SysUser getUserByName(String username);
 	
 	/**
@@ -92,21 +97,25 @@ public interface ISysUserService extends IService<SysUser> {
 
 	/**
 	 * 根据部门Id查询
-	 * @param
+	 * @param page
+     * @param departId 部门id
+     * @param username 用户账户名称
 	 * @return
 	 */
 	public IPage<SysUser> getUserByDepId(Page<SysUser> page, String departId, String username);
 
 	/**
 	 * 根据部门Ids查询
-	 * @param
+	 * @param page
+     * @param departIds  部门id集合
+     * @param username 用户账户名称
 	 * @return
 	 */
 	public IPage<SysUser> getUserByDepIds(Page<SysUser> page, List<String> departIds, String username);
 
 	/**
 	 * 根据 userIds查询,查询用户所属部门的名称(多个部门名逗号隔开)
-	 * @param
+	 * @param userIds
 	 * @return
 	 */
 	public Map<String,String> getDepNamesByUserIds(List<String> userIds);
@@ -133,7 +142,9 @@ public interface ISysUserService extends IService<SysUser> {
 
 	/**
 	 * 根据角色Id查询
-	 * @param
+	 * @param page
+     * @param roleId 角色id
+     * @param username 用户账户名称
 	 * @return
 	 */
 	public IPage<SysUser> getUserByRoleId(Page<SysUser> page,String roleId, String username);
@@ -163,13 +174,16 @@ public interface ISysUserService extends IService<SysUser> {
 	
 	/**
 	 * 根据手机号获取用户名和密码
+     * @param phone 手机号
 	 */
 	public SysUser getUserByPhone(String phone);
 
 
 	/**
 	 * 根据邮箱获取用户
-	 */
+     * @param email 邮箱
+     * @return SysUser
+     */
 	public SysUser getUserByEmail(String email);
 
 
@@ -196,26 +210,35 @@ public interface ISysUserService extends IService<SysUser> {
 
 	/**
 	 * 查询被逻辑删除的用户
+     * @return List<SysUser>
 	 */
 	List<SysUser> queryLogicDeleted();
 
 	/**
 	 * 查询被逻辑删除的用户(可拼装查询条件)
+     * @param wrapper
+     * @return List<SysUser>
 	 */
 	List<SysUser> queryLogicDeleted(LambdaQueryWrapper<SysUser> wrapper);
 
 	/**
 	 * 还原被逻辑删除的用户
+     * @param userIds  存放用户id集合
+     * @param updateEntity
+     * @return boolean
 	 */
 	boolean revertLogicDeleted(List<String> userIds, SysUser updateEntity);
 
 	/**
 	 * 彻底删除被逻辑删除的用户
+     * @param userIds 存放用户id集合
+     * @return boolean
 	 */
 	boolean removeLogicDeleted(List<String> userIds);
 
     /**
      * 更新手机号、邮箱空字符串为 null
+     * @return boolean
      */
     @Transactional(rollbackFor = Exception.class)
     boolean updateNullPhoneEmail();
@@ -228,7 +251,8 @@ public interface ISysUserService extends IService<SysUser> {
 
 	/**
 	 * 根据部门Ids查询
-	 * @param
+	 * @param departIds 部门id集合
+     * @param username 用户账户名称
 	 * @return
 	 */
 	List<SysUser> queryByDepIds(List<String> departIds, String username);
@@ -249,7 +273,11 @@ public interface ISysUserService extends IService<SysUser> {
 	 */
 	void editUser(SysUser user, String roles, String departs);
 
-	/** userId转为username */
+	/**
+     * userId转为username
+     * @param userIdList
+     * @return List<String>
+     */
 	List<String> userIdToUsername(Collection<String> userIdList);
 
 }
diff --git a/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/service/IThirdAppService.java b/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/service/IThirdAppService.java
index 4116142..2f622ec 100644
--- a/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/service/IThirdAppService.java
+++ b/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/service/IThirdAppService.java
@@ -7,9 +7,14 @@ import java.util.List;
 
 /**
  * 第三方App对接
+ * @author: jeecg-boot
  */
 public interface IThirdAppService {
 
+    /**
+     * 获取AccessToken
+     * @return String
+     */
     String getAccessToken();
 
     /**
@@ -18,7 +23,7 @@ public interface IThirdAppService {
      * 同步逻辑:<br>
      * 1. 先判断是否同步过,有则修改,无则创建;<br>
      * 2. 本地没有但第三方App里有则删除第三方App里的。
-     *
+     * @param ids
      * @return 成功返回true
      */
     SyncInfoVo syncLocalDepartmentToThirdApp(String ids);
@@ -29,7 +34,7 @@ public interface IThirdAppService {
      * 同步逻辑:<br>
      * 1. 先判断是否同步过,有则修改,无则创建;<br>
      * 2. 本地没有但第三方App里有则删除第三方App里的。
-     *
+     * @param ids
      * @return 成功返回true
      */
     SyncInfoVo syncThirdAppDepartmentToLocal(String ids);
@@ -42,7 +47,7 @@ public interface IThirdAppService {
      * (特殊点:1、目前逻辑特意做的不删除用户,防止企业微信提前上线,用户已经存在,但是平台无此用户。
      *  企业微信支持禁用账号;钉钉不支持
      *  2、企业微信里面是手机号激活,只能用户自己改,不允许通过接口改)
-     *
+     * @param ids
      * @return 成功返回空数组,失败返回错误信息
      */
     SyncInfoVo syncLocalUserToThirdApp(String ids);
@@ -74,6 +79,11 @@ public interface IThirdAppService {
      */
     boolean sendMessage(MessageDTO message, boolean verifyConfig);
 
+    /**
+     * 发送消息
+     * @param message
+     * @return boolean
+     */
     boolean sendMessage(MessageDTO message);
 
 }
diff --git a/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/service/impl/ImportFileServiceImpl.java b/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/service/impl/ImportFileServiceImpl.java
index ac5cc89..8c6839c 100644
--- a/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/service/impl/ImportFileServiceImpl.java
+++ b/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/service/impl/ImportFileServiceImpl.java
@@ -8,6 +8,7 @@ import org.springframework.stereotype.Service;
 
 /**
  * excel导入 实现类
+ * @author: jeecg-boot
  */
 @Slf4j
 @Service
diff --git a/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/service/impl/SysAnnouncementServiceImpl.java b/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/service/impl/SysAnnouncementServiceImpl.java
index b555251..30d938d 100644
--- a/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/service/impl/SysAnnouncementServiceImpl.java
+++ b/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/service/impl/SysAnnouncementServiceImpl.java
@@ -36,7 +36,7 @@ public class SysAnnouncementServiceImpl extends ServiceImpl<SysAnnouncementMappe
 	@Resource
 	private SysAnnouncementSendMapper sysAnnouncementSendMapper;
 	
-	@Transactional
+	@Transactional(rollbackFor = Exception.class)
 	@Override
 	public void saveAnnouncement(SysAnnouncement sysAnnouncement) {
 		if(sysAnnouncement.getMsgType().equals(CommonConstant.MSG_TYPE_ALL)) {
@@ -63,7 +63,7 @@ public class SysAnnouncementServiceImpl extends ServiceImpl<SysAnnouncementMappe
 	/**
 	 * @功能:编辑消息信息
 	 */
-	@Transactional
+	@Transactional(rollbackFor = Exception.class)
 	@Override
 	public boolean upDateAnnouncement(SysAnnouncement sysAnnouncement) {
 		// 1.更新系统信息表数据
@@ -98,7 +98,11 @@ public class SysAnnouncementServiceImpl extends ServiceImpl<SysAnnouncementMappe
 		return true;
 	}
 
-	// @功能:流程执行完成保存消息通知
+    /**
+     * 流程执行完成保存消息通知
+     * @param title 标题
+     * @param msgContent 信息内容
+     */
 	@Override
 	public void saveSysAnnouncement(String title, String msgContent) {
 		SysAnnouncement announcement = new SysAnnouncement();
diff --git a/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/service/impl/SysBaseApiImpl.java b/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/service/impl/SysBaseApiImpl.java
index 4c30eea..7e34096 100644
--- a/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/service/impl/SysBaseApiImpl.java
+++ b/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/service/impl/SysBaseApiImpl.java
@@ -568,7 +568,7 @@ public class SysBaseApiImpl implements ISysBaseAPI {
 	}
 
 	@Override
-	public List<SysCategoryModel> queryAllDSysCategory() {
+	public List<SysCategoryModel> queryAllSysCategory() {
 		List<SysCategory> ls = categoryMapper.selectList(null);
 		List<SysCategoryModel> res = oConvertUtils.entityListToModelList(ls,SysCategoryModel.class);
 		return res;
@@ -780,7 +780,7 @@ public class SysBaseApiImpl implements ISysBaseAPI {
 			for(SysUserDepart userDepart : userDepartList){
 				//查询所属公司编码
 				SysDepart depart = sysDepartService.getById(userDepart.getDepId());
-				int length = YouBianCodeUtil.zhanweiLength;
+				int length = YouBianCodeUtil.ZHANWEI_LENGTH;
 				String compyOrgCode = "";
 				if(depart != null && depart.getOrgCode() != null){
 					compyOrgCode = depart.getOrgCode().substring(0,length);
@@ -1056,7 +1056,7 @@ public class SysBaseApiImpl implements ISysBaseAPI {
 			 List<Map> list=new ArrayList();
 			 //4.处理部门和下级用户数据
 			for (SysDepart dept:departs) {
-				Map map=new HashMap();
+				Map map=new HashMap(5);
 				//部门名称
 				String departName = dept.getDepartName();
 				//根据部门编码获取下级部门id
diff --git a/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/service/impl/SysDataLogServiceImpl.java b/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/service/impl/SysDataLogServiceImpl.java
index c805010..5f73237 100644
--- a/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/service/impl/SysDataLogServiceImpl.java
+++ b/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/service/impl/SysDataLogServiceImpl.java
@@ -7,6 +7,10 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 
+/**
+ * @Description: 系统数据日志实现类
+ * @author: jeecg-boot
+ */
 @Service
 public class SysDataLogServiceImpl extends ServiceImpl<SysDataLogMapper,SysDataLog> implements ISysDataLogService {
 	@Autowired
diff --git a/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/service/impl/SysDepartPermissionServiceImpl.java b/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/service/impl/SysDepartPermissionServiceImpl.java
index b9e72f1..1c3afcc 100644
--- a/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/service/impl/SysDepartPermissionServiceImpl.java
+++ b/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/service/impl/SysDepartPermissionServiceImpl.java
@@ -96,7 +96,7 @@ public class SysDepartPermissionServiceImpl extends ServiceImpl<SysDepartPermiss
 
         String[] mainArr = main.split(",");
         String[] diffArr = diff.split(",");
-        Map<String, Integer> map = new HashMap<>();
+        Map<String, Integer> map = new HashMap(5);
         for (String string : mainArr) {
             map.put(string, 1);
         }
diff --git a/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/service/impl/SysDepartRolePermissionServiceImpl.java b/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/service/impl/SysDepartRolePermissionServiceImpl.java
index 5ff29a7..10c19db 100644
--- a/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/service/impl/SysDepartRolePermissionServiceImpl.java
+++ b/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/service/impl/SysDepartRolePermissionServiceImpl.java
@@ -1,7 +1,7 @@
 package org.jeecg.modules.system.service.impl;
 
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
-import org.jeecg.common.util.IPUtils;
+import org.jeecg.common.util.IpUtils;
 import org.jeecg.common.util.SpringContextUtils;
 import org.jeecg.common.util.oConvertUtils;
 import org.jeecg.modules.system.entity.SysDepartRolePermission;
@@ -30,7 +30,7 @@ public class SysDepartRolePermissionServiceImpl extends ServiceImpl<SysDepartRol
             //获取request
             HttpServletRequest request = SpringContextUtils.getHttpServletRequest();
             //获取IP地址
-            ip = IPUtils.getIpAddr(request);
+            ip = IpUtils.getIpAddr(request);
         } catch (Exception e) {
             ip = "127.0.0.1";
         }
@@ -72,7 +72,7 @@ public class SysDepartRolePermissionServiceImpl extends ServiceImpl<SysDepartRol
 
         String[] mainArr = main.split(",");
         String[] diffArr = diff.split(",");
-        Map<String, Integer> map = new HashMap<>();
+        Map<String, Integer> map = new HashMap(5);
         for (String string : mainArr) {
             map.put(string, 1);
         }
diff --git a/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/service/impl/SysDepartRoleUserServiceImpl.java b/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/service/impl/SysDepartRoleUserServiceImpl.java
index d900725..bf49e3a 100644
--- a/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/service/impl/SysDepartRoleUserServiceImpl.java
+++ b/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/service/impl/SysDepartRoleUserServiceImpl.java
@@ -78,7 +78,7 @@ public class SysDepartRoleUserServiceImpl extends ServiceImpl<SysDepartRoleUserM
 
         String[] mainArr = main.split(",");
         String[] diffArr = diff.split(",");
-        Map<String, Integer> map = new HashMap<>();
+        Map<String, Integer> map = new HashMap(5);
         for (String string : mainArr) {
             map.put(string, 1);
         }
diff --git a/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/service/impl/SysDepartServiceImpl.java b/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/service/impl/SysDepartServiceImpl.java
index f1e55be..5de598d 100644
--- a/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/service/impl/SysDepartServiceImpl.java
+++ b/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/service/impl/SysDepartServiceImpl.java
@@ -26,6 +26,7 @@ import org.springframework.transaction.annotation.Transactional;
 
 import java.util.*;
 import java.util.function.Consumer;
+import java.util.stream.Collectors;
 
 /**
  * <p>
@@ -85,6 +86,10 @@ public class SysDepartServiceImpl extends ServiceImpl<SysDepartMapper, SysDepart
 		query.eq(SysDepart::getDelFlag, CommonConstant.DEL_FLAG_0.toString());
 		query.orderByAsc(SysDepart::getDepartOrder);
 		List<SysDepart> list = this.list(query);
+        //update-begin---author:wangshuai ---date:20220307  for:[JTC-119]在部门管理菜单下设置部门负责人 创建用户的时候不需要处理
+		//设置用户id,让前台显示
+        this.setUserIdsByDepList(list);
+        //update-begin---author:wangshuai ---date:20220307  for:[JTC-119]在部门管理菜单下设置部门负责人 创建用户的时候不需要处理
 		// 调用wrapTreeDataToTreeList方法生成树状数据
 		List<SysDepartTreeModel> listResult = FindsDepartsChildrenUtil.wrapTreeDataToTreeList(list);
 		return listResult;
@@ -126,7 +131,7 @@ public class SysDepartServiceImpl extends ServiceImpl<SysDepartMapper, SysDepart
 	 * saveDepartData 对应 add 保存用户在页面添加的新的部门对象数据
 	 */
 	@Override
-	@Transactional
+	@Transactional(rollbackFor = Exception.class)
 	public void saveDepartData(SysDepart sysDepart, String username) {
 		if (sysDepart != null && username != null) {
 			if (sysDepart.getParentId() == null) {
@@ -148,7 +153,13 @@ public class SysDepartServiceImpl extends ServiceImpl<SysDepartMapper, SysDepart
 			sysDepart.setCreateTime(new Date());
 			sysDepart.setDelFlag(CommonConstant.DEL_FLAG_0.toString());
 			this.save(sysDepart);
-		}
+            //update-begin---author:wangshuai ---date:20220307  for:[JTC-119]在部门管理菜单下设置部门负责人 创建用户的时候不需要处理
+			//新增部门的时候新增负责部门
+            if(oConvertUtils.isNotEmpty(sysDepart.getDirectorUserIds())){
+			    this.addDepartByUserIds(sysDepart,sysDepart.getDirectorUserIds());
+            }
+            //update-end---author:wangshuai ---date:20220307  for:[JTC-119]在部门管理菜单下设置部门负责人 创建用户的时候不需要处理
+         }
 
 	}
 	
@@ -235,12 +246,16 @@ public class SysDepartServiceImpl extends ServiceImpl<SysDepartMapper, SysDepart
 	 * updateDepartDataById 对应 edit 根据部门主键来更新对应的部门数据
 	 */
 	@Override
-	@Transactional
+	@Transactional(rollbackFor = Exception.class)
 	public Boolean updateDepartDataById(SysDepart sysDepart, String username) {
 		if (sysDepart != null && username != null) {
 			sysDepart.setUpdateTime(new Date());
 			sysDepart.setUpdateBy(username);
 			this.updateById(sysDepart);
+            //update-begin---author:wangshuai ---date:20220307  for:[JTC-119]在部门管理菜单下设置部门负责人 创建用户的时候不需要处理
+			//修改部门管理的时候,修改负责部门
+            this.updateChargeDepart(sysDepart);
+            //update-begin---author:wangshuai ---date:20220307  for:[JTC-119]在部门管理菜单下设置部门负责人 创建用户的时候不需要处理
 			return true;
 		} else {
 			return false;
@@ -427,7 +442,7 @@ public class SysDepartServiceImpl extends ServiceImpl<SysDepartMapper, SysDepart
 	 * @return
 	 */
 	private String getMyDeptParentNode(List<SysDepart> list){
-		Map<String,String> map = new HashMap<>();
+		Map<String,String> map = new HashMap(5);
 		//1.先将同一公司归类
 		for(SysDepart dept : list){
 			String code = dept.getOrgCode().substring(0,3);
@@ -509,6 +524,10 @@ public class SysDepartServiceImpl extends ServiceImpl<SysDepartMapper, SysDepart
 		lqw.func(square);
 		lqw.orderByDesc(SysDepart::getDepartOrder);
 		List<SysDepart> list = list(lqw);
+        //update-begin---author:wangshuai ---date:20220316  for:[JTC-119]在部门管理菜单下设置部门负责人 创建用户的时候不需要处理
+        //设置用户id,让前台显示
+        this.setUserIdsByDepList(list);
+        //update-end---author:wangshuai ---date:20220316  for:[JTC-119]在部门管理菜单下设置部门负责人 创建用户的时候不需要处理
 		List<SysDepartTreeModel> records = new ArrayList<>();
 		for (int i = 0; i < list.size(); i++) {
 			SysDepart depart = list.get(i);
@@ -581,7 +600,7 @@ public class SysDepartServiceImpl extends ServiceImpl<SysDepartMapper, SysDepart
 
 	@Override
 	public SysDepart queryCompByOrgCode(String orgCode) {
-		int length = YouBianCodeUtil.zhanweiLength;
+		int length = YouBianCodeUtil.ZHANWEI_LENGTH;
 		String compyOrgCode = orgCode.substring(0,length);
 		return this.baseMapper.queryCompByOrgCode(compyOrgCode);
 	}
@@ -609,4 +628,131 @@ public class SysDepartServiceImpl extends ServiceImpl<SysDepartMapper, SysDepart
             }
         }
     }
+    
+    //update-begin---author:wangshuai ---date:20200308  for:[JTC-119]在部门管理菜单下设置部门负责人,新增方法添加部门负责人、删除负责部门负责人、查询部门对应的负责人
+    /**
+     * 通过用户id设置负责部门
+     * @param sysDepart SysDepart部门对象
+     * @param userIds 多个负责用户id
+     */
+    public void addDepartByUserIds(SysDepart sysDepart, String userIds) {
+        //获取部门id,保存到用户
+        String departId = sysDepart.getId();
+        //循环用户id
+        String[] userIdArray = userIds.split(",");
+        for (String userId:userIdArray) {
+            //查询用户表增加负责部门
+            SysUser sysUser = sysUserMapper.selectById(userId);
+            //如果部门id不为空,那么就需要拼接
+            if(oConvertUtils.isNotEmpty(sysUser.getDepartIds())){
+                if(!sysUser.getDepartIds().contains(departId)) {
+                    sysUser.setDepartIds(sysUser.getDepartIds() + "," + departId);
+                }
+            }else{
+                sysUser.setDepartIds(departId);
+            }
+            //设置身份为上级
+            sysUser.setUserIdentity(CommonConstant.USER_IDENTITY_2);
+            //跟新用户表
+            sysUserMapper.updateById(sysUser);
+            //判断当前用户是否包含所属部门
+            List<SysUserDepart> userDepartList = userDepartMapper.getUserDepartByUid(userId);
+            boolean isExistDepId = userDepartList.stream().anyMatch(item -> departId.equals(item.getDepId()));
+            //如果不存在需要设置所属部门
+            if(!isExistDepId){
+                userDepartMapper.insert(new SysUserDepart(userId,departId));
+            }
+        }
+    }
+    
+    /**
+     * 修改用户负责部门
+     * @param sysDepart SysDepart对象
+     */
+    private void updateChargeDepart(SysDepart sysDepart) {
+        //新的用户id
+        String directorIds = sysDepart.getDirectorUserIds();
+        //旧的用户id(数据库中存在的)
+        String oldDirectorIds = sysDepart.getOldDirectorUserIds();
+        String departId = sysDepart.getId();
+        //如果用户id为空,那么用户的负责部门id应该去除
+        if(oConvertUtils.isEmpty(directorIds)){
+            this.deleteChargeDepId(departId,null);
+        }else if(oConvertUtils.isNotEmpty(directorIds) && oConvertUtils.isEmpty(oldDirectorIds)){
+            //如果用户id不为空但是用户原来负责部门的用户id为空
+            this.addDepartByUserIds(sysDepart,directorIds);
+        }else{
+            //都不为空,需要比较,进行添加或删除
+            //找到新的负责部门用户id与原来负责部门的用户id,进行删除
+            List<String> userIdList = Arrays.stream(oldDirectorIds.split(",")).filter(item -> !directorIds.contains(item)).collect(Collectors.toList());
+            for (String userId:userIdList){
+                this.deleteChargeDepId(departId,userId);
+            }
+            //找到原来负责部门的用户id与新的负责部门用户id,进行新增
+            String addUserIds = Arrays.stream(directorIds.split(",")).filter(item -> !oldDirectorIds.contains(item)).collect(Collectors.joining(","));
+            if(oConvertUtils.isNotEmpty(addUserIds)){
+                this.addDepartByUserIds(sysDepart,addUserIds); 
+            }
+        }
+    }
+
+    /**
+     * 删除用户负责部门
+     * @param departId 部门id
+     * @param userId 用户id
+     */
+    private void deleteChargeDepId(String departId,String userId){
+        //先查询负责部门的用户id,因为负责部门的id使用逗号拼接起来的
+        LambdaQueryWrapper<SysUser> query = new LambdaQueryWrapper<>();
+        query.like(SysUser::getDepartIds,departId);
+        //删除全部的情况下用户id不存在
+        if(oConvertUtils.isNotEmpty(userId)){
+            query.eq(SysUser::getId,userId); 
+        }
+        List<SysUser> userList = sysUserMapper.selectList(query);
+        for (SysUser sysUser:userList) {
+            //将不存在的部门id删除掉
+            String departIds = sysUser.getDepartIds();
+            List<String> list = new ArrayList<>(Arrays.asList(departIds.split(",")));
+            list.remove(departId);
+            //删除之后再将新的id用逗号拼接起来进行更新
+            String newDepartIds = String.join(",",list);
+            sysUser.setDepartIds(newDepartIds);
+            sysUserMapper.updateById(sysUser);
+        }
+    }
+
+    /**
+     * 通过部门集合为部门设置用户id,用于前台展示
+     * @param departList 部门集合
+     */
+    private void setUserIdsByDepList(List<SysDepart> departList) {
+        //查询负责部门不为空的情况
+        LambdaQueryWrapper<SysUser> query  = new LambdaQueryWrapper<>();
+        query.isNotNull(SysUser::getDepartIds);
+        List<SysUser> users = sysUserMapper.selectList(query);
+        Map<String,Object> map = new HashMap(5);
+        //先循环一遍找到不同的负责部门id
+        for (SysUser user:users) {
+            String departIds = user.getDepartIds();
+            String[] departIdArray = departIds.split(",");
+            for (String departId:departIdArray) {
+                //mao中包含部门key,负责用户直接拼接
+                if(map.containsKey(departId)){
+                    String userIds = map.get(departId) + "," + user.getId();
+                    map.put(departId,userIds);
+                }else{
+                    map.put(departId,user.getId());  
+                }
+            }
+        }
+        //循环部门集合找到部门id对应的负责用户
+        for (SysDepart sysDepart:departList) {
+            if(map.containsKey(sysDepart.getId())){
+                sysDepart.setDirectorUserIds(map.get(sysDepart.getId()).toString()); 
+            }
+        }
+    }
+    //update-end---author:wangshuai ---date:20200308  for:[JTC-119]在部门管理菜单下设置部门负责人,新增方法添加部门负责人、删除负责部门负责人、查询部门对应的负责人
+
 }
diff --git a/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/service/impl/SysDictServiceImpl.java b/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/service/impl/SysDictServiceImpl.java
index 3382fb9..6662166 100644
--- a/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/service/impl/SysDictServiceImpl.java
+++ b/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/service/impl/SysDictServiceImpl.java
@@ -7,6 +7,8 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import lombok.extern.slf4j.Slf4j;
 import org.jeecg.common.constant.CacheConstant;
 import org.jeecg.common.constant.CommonConstant;
+import org.jeecg.common.system.query.QueryGenerator;
+import org.jeecg.common.system.util.JwtUtil;
 import org.jeecg.common.system.vo.DictModel;
 import org.jeecg.common.system.vo.DictModelMany;
 import org.jeecg.common.system.vo.DictQuery;
@@ -68,7 +70,7 @@ public class SysDictServiceImpl extends ServiceImpl<SysDictMapper, SysDict> impl
 	@Override
 	public Map<String, List<DictModel>> queryDictItemsByCodeList(List<String> dictCodeList) {
 		List<DictModelMany> list = sysDictMapper.queryDictItemsByCodeList(dictCodeList);
-		Map<String, List<DictModel>> dictMap = new HashMap<>();
+		Map<String, List<DictModel>> dictMap = new HashMap(5);
 		for (DictModelMany dict : list) {
 			List<DictModel> dictItemList = dictMap.computeIfAbsent(dict.getDictCode(), i -> new ArrayList<>());
 			dict.setDictCode(null);
@@ -79,7 +81,7 @@ public class SysDictServiceImpl extends ServiceImpl<SysDictMapper, SysDict> impl
 
 	@Override
 	public Map<String, List<DictModel>> queryAllDictItems() {
-		Map<String, List<DictModel>> res = new HashMap<String, List<DictModel>>();
+		Map<String, List<DictModel>> res = new HashMap(5);
 		List<SysDict> ls = sysDictMapper.selectList(null);
 		LambdaQueryWrapper<SysDictItem> queryWrapper = new LambdaQueryWrapper<SysDictItem>();
 		queryWrapper.eq(SysDictItem::getStatus, 1);
@@ -116,7 +118,7 @@ public class SysDictServiceImpl extends ServiceImpl<SysDictMapper, SysDict> impl
 	@Override
 	public Map<String, List<DictModel>> queryManyDictByKeys(List<String> dictCodeList, List<String> keys) {
 		List<DictModelMany> list = sysDictMapper.queryManyDictByKeys(dictCodeList, keys);
-		Map<String, List<DictModel>> dictMap = new HashMap<>();
+		Map<String, List<DictModel>> dictMap = new HashMap(5);
 		for (DictModelMany dict : list) {
 			List<DictModel> dictItemList = dictMap.computeIfAbsent(dict.getDictCode(), i -> new ArrayList<>());
 			dictItemList.add(new DictModel(dict.getValue(), dict.getText()));
@@ -226,7 +228,7 @@ public class SysDictServiceImpl extends ServiceImpl<SysDictMapper, SysDict> impl
     }
 
     @Override
-    @Transactional
+    @Transactional(rollbackFor = Exception.class)
     public Integer saveMain(SysDict sysDict, List<SysDictItem> sysDictItemList) {
 		int insert=0;
     	try{
@@ -390,6 +392,11 @@ public class SysDictServiceImpl extends ServiceImpl<SysDictMapper, SysDict> impl
 				return null;
 			} else if (params.length == 4) {
 				condition = params[3];
+				// update-begin-author:taoyan date:20220314 for: online表单下拉搜索框表字典配置#{sys_org_code}报错 #3500
+				if(condition.indexOf("#{")>=0){
+					condition =  QueryGenerator.getSqlRuleValue(condition);
+				}
+				// update-end-author:taoyan date:20220314 for: online表单下拉搜索框表字典配置#{sys_org_code}报错 #3500
 			}
 			List<DictModel> ls;
 			if (pageSize != null) {
diff --git a/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/service/impl/SysGatewayRouteServiceImpl.java b/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/service/impl/SysGatewayRouteServiceImpl.java
index 316d944..18c3649 100644
--- a/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/service/impl/SysGatewayRouteServiceImpl.java
+++ b/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/service/impl/SysGatewayRouteServiceImpl.java
@@ -92,12 +92,12 @@ public class SysGatewayRouteServiceImpl extends ServiceImpl<SysGatewayRouteMappe
     /**
      * 更新redis路由缓存
      */
-    private void resreshRouter(String id) {
+    private void resreshRouter(String delRouterId) {
         //更新redis路由缓存
         addRoute2Redis(CacheConstant.GATEWAY_ROUTES);
         BaseMap params = new BaseMap();
-        params.put(GlobalConstants.HANDLER_NAME, "loderRouderHandler");
-        params.put("routerId", id);
+        params.put(GlobalConstants.HANDLER_NAME, GlobalConstants.LODER_ROUDER_HANDLER);
+        params.put("delRouterId", delRouterId);
         //刷新网关
         redisTemplate.convertAndSend(GlobalConstants.REDIS_TOPIC_NAME, params);
     }
diff --git a/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/service/impl/SysLogServiceImpl.java b/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/service/impl/SysLogServiceImpl.java
index 0f804e2..e9b561d 100644
--- a/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/service/impl/SysLogServiceImpl.java
+++ b/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/service/impl/SysLogServiceImpl.java
@@ -32,7 +32,7 @@ public class SysLogServiceImpl extends ServiceImpl<SysLogMapper, SysLog> impleme
 	@Resource
 	private SysLogMapper sysLogMapper;
 	@Autowired
-	private ISysBaseAPI sysBaseAPI;
+	private SysBaseApiImpl sysBaseAPI;
 	
 	/**
 	 * @功能:清空所有日志记录
diff --git a/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/service/impl/SysPermissionDataRuleImpl.java b/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/service/impl/SysPermissionDataRuleImpl.java
index b907a17..69b7c12 100644
--- a/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/service/impl/SysPermissionDataRuleImpl.java
+++ b/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/service/impl/SysPermissionDataRuleImpl.java
@@ -84,7 +84,7 @@ public class SysPermissionDataRuleImpl extends ServiceImpl<SysPermissionDataRule
 	}
 
 	@Override
-	@Transactional
+	@Transactional(rollbackFor = Exception.class)
 	public void savePermissionDataRule(SysPermissionDataRule sysPermissionDataRule) {
 		this.save(sysPermissionDataRule);
 		SysPermission permission = sysPermissionMapper.selectById(sysPermissionDataRule.getPermissionId());
@@ -95,12 +95,12 @@ public class SysPermissionDataRuleImpl extends ServiceImpl<SysPermissionDataRule
 	}
 
 	@Override
-	@Transactional
+	@Transactional(rollbackFor = Exception.class)
 	public void deletePermissionDataRule(String dataRuleId) {
 		SysPermissionDataRule dataRule = this.baseMapper.selectById(dataRuleId);
 		if(dataRule!=null) {
 			this.removeById(dataRuleId);
-			Integer count =  this.baseMapper.selectCount(new LambdaQueryWrapper<SysPermissionDataRule>().eq(SysPermissionDataRule::getPermissionId, dataRule.getPermissionId()));
+			Long count =  this.baseMapper.selectCount(new LambdaQueryWrapper<SysPermissionDataRule>().eq(SysPermissionDataRule::getPermissionId, dataRule.getPermissionId()));
 			//注:同一个事务中删除后再查询是会认为数据已被删除的 若事务回滚上述删除无效
 			if(count==null || count==0) {
 				SysPermission permission = sysPermissionMapper.selectById(dataRule.getPermissionId());
diff --git a/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/service/impl/SysPermissionServiceImpl.java b/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/service/impl/SysPermissionServiceImpl.java
index 06d2b61..88b93ff 100644
--- a/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/service/impl/SysPermissionServiceImpl.java
+++ b/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/service/impl/SysPermissionServiceImpl.java
@@ -64,7 +64,7 @@ public class SysPermissionServiceImpl extends ServiceImpl<SysPermissionMapper, S
 	  * 真实删除
 	 */
 	@Override
-	@Transactional
+	@Transactional(rollbackFor = Exception.class)
 	@CacheEvict(value = CacheConstant.SYS_DATA_PERMISSIONS_CACHE,allEntries=true)
 	public void deletePermission(String id) throws JeecgBootException {
 		SysPermission sysPermission = this.getById(id);
@@ -73,7 +73,7 @@ public class SysPermissionServiceImpl extends ServiceImpl<SysPermissionMapper, S
 		}
 		String pid = sysPermission.getParentId();
 		if(oConvertUtils.isNotEmpty(pid)) {
-			int count = this.count(new QueryWrapper<SysPermission>().lambda().eq(SysPermission::getParentId, pid));
+			Long count = this.count(new QueryWrapper<SysPermission>().lambda().eq(SysPermission::getParentId, pid));
 			if(count==1) {
 				//若父节点无其他子节点,则该父节点是叶子节点
 				this.sysPermissionMapper.setMenuLeaf(pid, 1);
@@ -83,7 +83,7 @@ public class SysPermissionServiceImpl extends ServiceImpl<SysPermissionMapper, S
 		// 该节点可能是子节点但也可能是其它节点的父节点,所以需要级联删除
 		this.removeChildrenBy(sysPermission.getId());
 		//关联删除
-		Map map = new HashMap<>();
+		Map map = new HashMap(5);
 		map.put("permission_id",id);
 		//删除数据规则
 		this.deletePermRuleByPermId(id);
@@ -107,14 +107,16 @@ public class SysPermissionServiceImpl extends ServiceImpl<SysPermissionMapper, S
 		// 查出该主键下的所有子级
 		List<SysPermission> permissionList = this.list(query);
 		if (permissionList != null && permissionList.size() > 0) {
-			String id = ""; // id
-			int num = 0; // 查出的子级数量
+            // id
+			String id = "";
+            // 查出的子级数量
+			Long num = Long.valueOf(0);
 			// 如果查出的集合不为空, 则先删除所有
 			this.remove(query);
 			// 再遍历刚才查出的集合, 根据每个对象,查找其是否仍有子级
 			for (int i = 0, len = permissionList.size(); i < len; i++) {
 				id = permissionList.get(i).getId();
-				Map map = new HashMap<>();
+				Map map = new HashMap(5);
 				map.put("permission_id",id);
 				//删除数据规则
 				this.deletePermRuleByPermId(id);
@@ -145,7 +147,7 @@ public class SysPermissionServiceImpl extends ServiceImpl<SysPermissionMapper, S
 			throw new JeecgBootException("未找到菜单信息");
 		}
 		String pid = sysPermission.getParentId();
-		int count = this.count(new QueryWrapper<SysPermission>().lambda().eq(SysPermission::getParentId, pid));
+		Long count = this.count(new QueryWrapper<SysPermission>().lambda().eq(SysPermission::getParentId, pid));
 		if(count==1) {
 			//若父节点无其他子节点,则该父节点是叶子节点
 			this.sysPermissionMapper.setMenuLeaf(pid, 1);
@@ -189,7 +191,7 @@ public class SysPermissionServiceImpl extends ServiceImpl<SysPermissionMapper, S
 				sysPermission.setParentId("");
 			}
 			//Step2.判断菜单下级是否有菜单,无则设置为叶子节点
-			int count = this.count(new QueryWrapper<SysPermission>().lambda().eq(SysPermission::getParentId, sysPermission.getId()));
+			Long count = this.count(new QueryWrapper<SysPermission>().lambda().eq(SysPermission::getParentId, sysPermission.getId()));
 			if(count==0) {
 				sysPermission.setLeaf(true);
 			}
@@ -202,7 +204,7 @@ public class SysPermissionServiceImpl extends ServiceImpl<SysPermissionMapper, S
 				//a.设置新的父菜单不为叶子节点
 				this.sysPermissionMapper.setMenuLeaf(pid, 0);
 				//b.判断老的菜单下是否还有其他子菜单,没有的话则设置为叶子节点
-				int cc = this.count(new QueryWrapper<SysPermission>().lambda().eq(SysPermission::getParentId, p.getParentId()));
+				Long cc = this.count(new QueryWrapper<SysPermission>().lambda().eq(SysPermission::getParentId, p.getParentId()));
 				if(cc==0) {
 					if(oConvertUtils.isNotEmpty(p.getParentId())) {
 						this.sysPermissionMapper.setMenuLeaf(p.getParentId(), 1);
@@ -226,7 +228,7 @@ public class SysPermissionServiceImpl extends ServiceImpl<SysPermissionMapper, S
 	public void deletePermRuleByPermId(String id) {
 		LambdaQueryWrapper<SysPermissionDataRule> query = new LambdaQueryWrapper<>();
 		query.eq(SysPermissionDataRule::getPermissionId, id);
-		int countValue = this.permissionDataRuleService.count(query);
+		Long countValue = this.permissionDataRuleService.count(query);
 		if(countValue > 0) {
 			this.permissionDataRuleService.remove(query);	
 		}
diff --git a/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/service/impl/SysRoleIndexServiceImpl.java b/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/service/impl/SysRoleIndexServiceImpl.java
new file mode 100644
index 0000000..60f6320
--- /dev/null
+++ b/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/service/impl/SysRoleIndexServiceImpl.java
@@ -0,0 +1,19 @@
+package org.jeecg.modules.system.service.impl;
+
+import org.jeecg.modules.system.entity.SysRoleIndex;
+import org.jeecg.modules.system.mapper.SysRoleIndexMapper;
+import org.jeecg.modules.system.service.ISysRoleIndexService;
+import org.springframework.stereotype.Service;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+
+/**
+ * @Description: 角色首页配置
+ * @Author: jeecg-boot
+ * @Date:   2022-03-25
+ * @Version: V1.0
+ */
+@Service
+public class SysRoleIndexServiceImpl extends ServiceImpl<SysRoleIndexMapper, SysRoleIndex> implements ISysRoleIndexService {
+
+}
diff --git a/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/service/impl/SysRolePermissionServiceImpl.java b/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/service/impl/SysRolePermissionServiceImpl.java
index 79ff4ae..6103c56 100644
--- a/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/service/impl/SysRolePermissionServiceImpl.java
+++ b/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/service/impl/SysRolePermissionServiceImpl.java
@@ -2,8 +2,7 @@ package org.jeecg.modules.system.service.impl;
 
 import java.util.*;
 
-import org.jeecg.common.constant.CacheConstant;
-import org.jeecg.common.util.IPUtils;
+import org.jeecg.common.util.IpUtils;
 import org.jeecg.common.util.SpringContextUtils;
 import org.jeecg.common.util.oConvertUtils;
 import org.jeecg.modules.system.entity.SysRolePermission;
@@ -14,7 +13,6 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 
-import org.springframework.cache.annotation.CacheEvict;
 import org.springframework.stereotype.Service;
 
 import javax.servlet.http.HttpServletRequest;
@@ -37,7 +35,7 @@ public class SysRolePermissionServiceImpl extends ServiceImpl<SysRolePermissionM
 			//获取request
 			HttpServletRequest request = SpringContextUtils.getHttpServletRequest();
 			//获取IP地址
-			ip = IPUtils.getIpAddr(request);
+			ip = IpUtils.getIpAddr(request);
 		} catch (Exception e) {
 			ip = "127.0.0.1";
 		}
@@ -63,7 +61,7 @@ public class SysRolePermissionServiceImpl extends ServiceImpl<SysRolePermissionM
 			//获取request
 			HttpServletRequest request = SpringContextUtils.getHttpServletRequest();
 			//获取IP地址
-			ip = IPUtils.getIpAddr(request);
+			ip = IpUtils.getIpAddr(request);
 		} catch (Exception e) {
 			ip = "127.0.0.1";
 		}
@@ -105,7 +103,7 @@ public class SysRolePermissionServiceImpl extends ServiceImpl<SysRolePermissionM
 		
 		String[] mainArr = main.split(",");
 		String[] diffArr = diff.split(",");
-		Map<String, Integer> map = new HashMap<>();
+		Map<String, Integer> map = new HashMap(5);
 		for (String string : mainArr) {
 			map.put(string, 1);
 		}
diff --git a/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/service/impl/SysTenantServiceImpl.java b/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/service/impl/SysTenantServiceImpl.java
index a4c4e85..629b99a 100644
--- a/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/service/impl/SysTenantServiceImpl.java
+++ b/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/service/impl/SysTenantServiceImpl.java
@@ -16,6 +16,10 @@ import org.springframework.stereotype.Service;
 import java.util.Collection;
 import java.util.List;
 
+/**
+ * @Description: 租户实现类
+ * @author: jeecg-boot
+ */
 @Service("sysTenantServiceImpl")
 @Slf4j
 public class SysTenantServiceImpl extends ServiceImpl<SysTenantMapper, SysTenant> implements ISysTenantService {
@@ -33,7 +37,7 @@ public class SysTenantServiceImpl extends ServiceImpl<SysTenantMapper, SysTenant
     }
 
     @Override
-    public int countUserLinkTenant(String id) {
+    public Long countUserLinkTenant(String id) {
         LambdaQueryWrapper<SysUser> userQueryWrapper = new LambdaQueryWrapper<>();
         userQueryWrapper.eq(SysUser::getRelTenantIds, id);
         userQueryWrapper.or().like(SysUser::getRelTenantIds, "%," + id);
@@ -46,7 +50,7 @@ public class SysTenantServiceImpl extends ServiceImpl<SysTenantMapper, SysTenant
     @Override
     public boolean removeTenantById(String id) {
         // 查找出已被关联的用户数量
-        int userCount = this.countUserLinkTenant(id);
+        Long userCount = this.countUserLinkTenant(id);
         if (userCount > 0) {
             throw new JeecgBootException("该租户已被引用,无法删除!");
         }
diff --git a/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/service/impl/SysUserDepartServiceImpl.java b/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/service/impl/SysUserDepartServiceImpl.java
index 143df8f..4089360 100644
--- a/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/service/impl/SysUserDepartServiceImpl.java
+++ b/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/service/impl/SysUserDepartServiceImpl.java
@@ -10,10 +10,11 @@ import org.jeecg.modules.system.entity.SysDepart;
 import org.jeecg.modules.system.entity.SysUser;
 import org.jeecg.modules.system.entity.SysUserDepart;
 import org.jeecg.modules.system.mapper.SysUserDepartMapper;
+import org.jeecg.modules.system.mapper.SysUserMapper;
 import org.jeecg.modules.system.model.DepartIdModel;
 import org.jeecg.modules.system.service.ISysDepartService;
 import org.jeecg.modules.system.service.ISysUserDepartService;
-import org.jeecg.modules.system.service.ISysUserService;
+import org.jeecg.modules.system.vo.SysUserDepVo;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
@@ -35,7 +36,7 @@ public class SysUserDepartServiceImpl extends ServiceImpl<SysUserDepartMapper, S
 	@Autowired
 	private ISysDepartService sysDepartService;
 	@Autowired
-	private ISysUserService sysUserService;
+	private SysUserMapper sysUserMapper;
 	
 
 	/**
@@ -85,7 +86,7 @@ public class SysUserDepartServiceImpl extends ServiceImpl<SysUserDepartMapper, S
 			for(SysUserDepart uDep : uDepList) {
 				userIdList.add(uDep.getUserId());
 			}
-			List<SysUser> userList = (List<SysUser>) sysUserService.listByIds(userIdList);
+			List<SysUser> userList = (List<SysUser>) sysUserMapper.selectBatchIds(userIdList);
 			//update-begin-author:taoyan date:201905047 for:接口调用查询返回结果不能返回密码相关信息
 			for (SysUser sysUser : userList) {
 				sysUser.setSalt("");
@@ -107,7 +108,7 @@ public class SysUserDepartServiceImpl extends ServiceImpl<SysUserDepartMapper, S
 			realname = realname.trim();
 		}
 		List<SysUser> userList = this.baseMapper.queryDepartUserList(depCode, realname);
-		Map<String, SysUser> map = new HashMap<String, SysUser>();
+		Map<String, SysUser> map = new HashMap(5);
 		for (SysUser sysUser : userList) {
 			// 返回的用户数据去掉密码信息
 			sysUser.setSalt("");
@@ -132,7 +133,7 @@ public class SysUserDepartServiceImpl extends ServiceImpl<SysUserDepartMapper, S
 			if(oConvertUtils.isNotEmpty(username)){
 				query.like(SysUser::getUsername, username);
 			}
-			pageList = sysUserService.page(page, query);
+			pageList = sysUserMapper.selectPage(page, query);
 		}else{
 			// 有部门ID 需要走自定义sql
 			SysDepart sysDepart = sysDepartService.getById(departId);
@@ -141,10 +142,10 @@ public class SysUserDepartServiceImpl extends ServiceImpl<SysUserDepartMapper, S
 		List<SysUser> userList = pageList.getRecords();
 		if(userList!=null && userList.size()>0){
 			List<String> userIds = userList.stream().map(SysUser::getId).collect(Collectors.toList());
-			Map<String, SysUser> map = new HashMap<String, SysUser>();
+			Map<String, SysUser> map = new HashMap(5);
 			if(userIds!=null && userIds.size()>0){
 				// 查部门名称
-				Map<String,String>  useDepNames = sysUserService.getDepNamesByUserIds(userIds);
+				Map<String,String>  useDepNames = this.getDepNamesByUserIds(userIds);
 				userList.forEach(item->{
 					//TODO 临时借用这个字段用于页面展示
 					item.setOrgCodeTxt(useDepNames.get(item.getId()));
@@ -159,4 +160,24 @@ public class SysUserDepartServiceImpl extends ServiceImpl<SysUserDepartMapper, S
 		return pageList;
 	}
 
+	/**
+	 * 升级SpringBoot2.6.6,不允许循环依赖
+	 * @param userIds
+	 * @return
+	 */
+	private Map<String, String> getDepNamesByUserIds(List<String> userIds) {
+		List<SysUserDepVo> list = sysUserMapper.getDepNamesByUserIds(userIds);
+
+		Map<String, String> res = new HashMap(5);
+		list.forEach(item -> {
+					if (res.get(item.getUserId()) == null) {
+						res.put(item.getUserId(), item.getDepartName());
+					} else {
+						res.put(item.getUserId(), res.get(item.getUserId()) + "," + item.getDepartName());
+					}
+				}
+		);
+		return res;
+	}
+
 }
diff --git a/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/service/impl/SysUserServiceImpl.java b/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/service/impl/SysUserServiceImpl.java
index cbb4eae..3316a9f 100644
--- a/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/service/impl/SysUserServiceImpl.java
+++ b/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/service/impl/SysUserServiceImpl.java
@@ -9,8 +9,6 @@ import lombok.extern.slf4j.Slf4j;
 import org.jeecg.common.api.vo.Result;
 import org.jeecg.common.constant.CacheConstant;
 import org.jeecg.common.constant.CommonConstant;
-import org.jeecg.common.system.api.ISysBaseAPI;
-import org.jeecg.common.system.vo.LoginUser;
 import org.jeecg.common.system.vo.SysUserCacheInfo;
 import org.jeecg.common.util.PasswordUtil;
 import org.jeecg.common.util.UUIDGenerator;
@@ -23,6 +21,7 @@ import org.jeecg.modules.system.service.ISysUserService;
 import org.jeecg.modules.system.vo.SysUserDepVo;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.cache.annotation.CacheEvict;
+import org.springframework.cache.annotation.Cacheable;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
@@ -51,8 +50,6 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
 	@Autowired
 	private SysUserDepartMapper sysUserDepartMapper;
 	@Autowired
-	private ISysBaseAPI sysBaseAPI;
-	@Autowired
 	private SysDepartMapper sysDepartMapper;
 	@Autowired
 	private SysRoleMapper sysRoleMapper;
@@ -125,7 +122,7 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
 	
 	
 	@Override
-	@Transactional
+	@Transactional(rollbackFor = Exception.class)
 	public void addUserWithRole(SysUser user, String roles) {
 		this.save(user);
 		if(oConvertUtils.isNotEmpty(roles)) {
@@ -139,7 +136,7 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
 
 	@Override
 	@CacheEvict(value= {CacheConstant.SYS_USERS_CACHE}, allEntries=true)
-	@Transactional
+	@Transactional(rollbackFor = Exception.class)
 	public void editUserWithRole(SysUser user, String roles) {
 		this.updateById(user);
 		//先删后加
@@ -195,24 +192,32 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
 		return permissionSet;
 	}
 
+	/**
+	 * 升级SpringBoot2.6.6,不允许循环依赖
+	 * @author:qinfeng
+	 * @update: 2022-04-07
+	 * @param username
+	 * @return
+	 */
 	@Override
+	@Cacheable(cacheNames=CacheConstant.SYS_USERS_CACHE, key="#username")
 	public SysUserCacheInfo getCacheUser(String username) {
 		SysUserCacheInfo info = new SysUserCacheInfo();
 		info.setOneDepart(true);
-//		SysUser user = userMapper.getUserByName(username);
-//		info.setSysUserCode(user.getUsername());
-//		info.setSysUserName(user.getRealname());
-		
+		if(oConvertUtils.isEmpty(username)) {
+			return null;
+		}
 
-		LoginUser user = sysBaseAPI.getUserByName(username);
-		if(user!=null) {
-			info.setSysUserCode(user.getUsername());
-			info.setSysUserName(user.getRealname());
-			info.setSysOrgCode(user.getOrgCode());
+		//查询用户信息
+		SysUser sysUser = userMapper.getUserByName(username);
+		if(sysUser!=null) {
+			info.setSysUserCode(sysUser.getUsername());
+			info.setSysUserName(sysUser.getRealname());
+			info.setSysOrgCode(sysUser.getOrgCode());
 		}
 		
 		//多部门支持in查询
-		List<SysDepart> list = sysDepartMapper.queryUserDeparts(user.getId());
+		List<SysDepart> list = sysDepartMapper.queryUserDeparts(sysUser.getId());
 		List<String> sysMultiOrgCode = new ArrayList<String>();
 		if(list==null || list.size()==0) {
 			//当前用户无部门
@@ -230,7 +235,13 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
 		return info;
 	}
 
-	// 根据部门Id查询
+    /**
+     * 根据部门Id查询
+     * @param page
+     * @param departId 部门id
+     * @param username 用户账户名称
+     * @return
+     */
 	@Override
 	public IPage<SysUser> getUserByDepId(Page<SysUser> page, String departId,String username) {
 		return userMapper.getUserByDepId(page, departId,username);
@@ -245,7 +256,7 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
 	public Map<String, String> getDepNamesByUserIds(List<String> userIds) {
 		List<SysUserDepVo> list = this.baseMapper.getDepNamesByUserIds(userIds);
 
-		Map<String, String> res = new HashMap<String, String>();
+		Map<String, String> res = new HashMap(5);
 		list.forEach(item -> {
 					if (res.get(item.getUserId()) == null) {
 						res.put(item.getUserId(), item.getDepartName());
@@ -278,7 +289,13 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
 		return result;
 	}
 
-	// 根据角色Id查询
+    /**
+     * 根据角色Id查询
+     * @param page
+     * @param roleId 角色id
+     * @param username 用户账户名称
+     * @return
+     */
 	@Override
 	public IPage<SysUser> getUserByRoleId(Page<SysUser> page, String roleId, String username) {
 		return userMapper.getUserByRoleId(page,roleId,username);
@@ -304,7 +321,7 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
 	}
 
 	@Override
-	@Transactional
+	@Transactional(rollbackFor = Exception.class)
 	public void addUserWithDepart(SysUser user, String selectedParts) {
 //		this.save(user);  //保存角色的时候已经添加过一次了
 		if(oConvertUtils.isNotEmpty(selectedParts)) {
@@ -321,7 +338,8 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
 	@Transactional(rollbackFor = Exception.class)
 	@CacheEvict(value={CacheConstant.SYS_USERS_CACHE}, allEntries=true)
 	public void editUserWithDepart(SysUser user, String departs) {
-		this.updateById(user);  //更新角色的时候已经更新了一次了,可以再跟新一次
+        //更新角色的时候已经更新了一次了,可以再跟新一次
+		this.updateById(user);
 		String[] arr = {};
 		if(oConvertUtils.isNotEmpty(departs)){
 			arr = departs.split(",");
diff --git a/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/service/impl/ThirdAppDingtalkServiceImpl.java b/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/service/impl/ThirdAppDingtalkServiceImpl.java
index e596e14..8853082 100644
--- a/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/service/impl/ThirdAppDingtalkServiceImpl.java
+++ b/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/service/impl/ThirdAppDingtalkServiceImpl.java
@@ -3,6 +3,7 @@ package org.jeecg.modules.system.service.impl;
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.jeecg.dingtalk.api.base.JdtBaseAPI;
 import com.jeecg.dingtalk.api.core.response.Response;
 import com.jeecg.dingtalk.api.core.vo.AccessToken;
@@ -31,6 +32,7 @@ import org.jeecg.config.thirdapp.ThirdAppConfig;
 import org.jeecg.config.thirdapp.ThirdAppTypeItemVo;
 import org.jeecg.modules.system.entity.*;
 import org.jeecg.modules.system.mapper.SysAnnouncementSendMapper;
+import org.jeecg.modules.system.mapper.SysUserMapper;
 import org.jeecg.modules.system.model.SysDepartTreeModel;
 import org.jeecg.modules.system.model.ThirdLoginModel;
 import org.jeecg.modules.system.service.*;
@@ -49,6 +51,7 @@ import java.util.stream.Collectors;
 
 /**
  * 第三方App对接:钉钉实现类
+ * @author: jeecg-boot
  */
 @Slf4j
 @Service
@@ -56,11 +59,10 @@ public class ThirdAppDingtalkServiceImpl implements IThirdAppService {
 
     @Autowired
     ThirdAppConfig thirdAppConfig;
-
     @Autowired
     private ISysDepartService sysDepartService;
     @Autowired
-    private ISysUserService sysUserService;
+    private SysUserMapper userMapper;
     @Autowired
     private ISysThirdAccountService sysThirdAccountService;
     @Autowired
@@ -70,7 +72,9 @@ public class ThirdAppDingtalkServiceImpl implements IThirdAppService {
     @Autowired
     private SysAnnouncementSendMapper sysAnnouncementSendMapper;
 
-    // 第三方APP类型,当前固定为 dingtalk
+    /**
+     * 第三方APP类型,当前固定为 dingtalk
+     */
     public final String THIRD_TYPE = ThirdAppConfig.DINGTALK.toLowerCase();
 
     @Override
@@ -142,7 +146,14 @@ public class ThirdAppDingtalkServiceImpl implements IThirdAppService {
         return syncInfo;
     }
 
-    // 递归同步部门到本地
+    /**
+     * 递归同步部门到本地
+     * @param sysDepartsTree
+     * @param departments
+     * @param parent
+     * @param accessToken
+     * @param syncInfo
+     */
     public void syncDepartmentRecursion(List<SysDepartTreeModel> sysDepartsTree, List<Response<Department>> departments, Department parent, String accessToken, SyncInfoVo syncInfo) {
         if (sysDepartsTree != null && sysDepartsTree.size() != 0) {
             for1:
@@ -303,10 +314,10 @@ public class ThirdAppDingtalkServiceImpl implements IThirdAppService {
             LambdaQueryWrapper<SysUser> queryWrapper = new LambdaQueryWrapper<>();
             queryWrapper.in(SysUser::getId, (Object[]) idList);
             // 获取本地指定用户
-            sysUsers = sysUserService.list(queryWrapper);
+            sysUsers = userMapper.selectList(queryWrapper);
         } else {
             // 获取本地所有用户
-            sysUsers = sysUserService.list();
+            sysUsers = userMapper.selectList(Wrappers.emptyWrapper());
         }
         // 查询钉钉所有的部门,用于同步用户和部门的关系
         List<Department> allDepartment = JdtDepartmentAPI.listAll(accessToken);
@@ -385,7 +396,7 @@ public class ThirdAppDingtalkServiceImpl implements IThirdAppService {
         }
 
         // 获取本地用户
-        List<SysUser> sysUsersList = sysUserService.list();
+        List<SysUser> sysUsersList = userMapper.selectList(Wrappers.emptyWrapper());
 
         // 查询钉钉所有的部门,用于同步用户和部门的关系
         List<Department> allDepartment = JdtDepartmentAPI.listAll(accessToken);
@@ -401,7 +412,7 @@ public class ThirdAppDingtalkServiceImpl implements IThirdAppService {
                 // 循环到此说明用户匹配成功,进行更新操作
                 SysUser updateSysUser = this.dtUserToSysUser(dtUserInfo, sysUserTemp);
                 try {
-                    sysUserService.updateById(updateSysUser);
+                    userMapper.updateById(updateSysUser);
                     String str = String.format("用户 %s(%s) 更新成功!", updateSysUser.getRealname(), updateSysUser.getUsername());
                     syncInfo.addSuccessInfo(str);
                 } catch (Exception e) {
@@ -413,7 +424,7 @@ public class ThirdAppDingtalkServiceImpl implements IThirdAppService {
                 // 如果没有匹配到用户,则走创建逻辑
                 SysUser newSysUser = this.dtUserToSysUser(dtUserInfo);
                 try {
-                    sysUserService.save(newSysUser);
+                    userMapper.insert(newSysUser);
                     String str = String.format("用户 %s(%s) 创建成功!", newSysUser.getRealname(), newSysUser.getUsername());
                     syncInfo.addSuccessInfo(str);
                 } catch (Exception e) {
@@ -719,6 +730,7 @@ public class ThirdAppDingtalkServiceImpl implements IThirdAppService {
      * @param verifyConfig
      * @return
      */
+    @Override
     public boolean sendMessage(MessageDTO message, boolean verifyConfig) {
         Response<String> response = this.sendMessageResponse(message, verifyConfig);
         if (response != null) {
@@ -739,7 +751,7 @@ public class ThirdAppDingtalkServiceImpl implements IThirdAppService {
         String content = message.getContent();
         int agentId = thirdAppConfig.getDingtalk().getAgentIdInt();
         Message<TextMessage> textMessage = new Message<>(agentId, new TextMessage(content));
-        if (message.isToAll()) {
+        if (message.getToAll()) {
             textMessage.setTo_all_user(true);
         } else {
             String[] toUsers = message.getToUser().split(",");
@@ -813,7 +825,11 @@ public class ThirdAppDingtalkServiceImpl implements IThirdAppService {
             }
 
             if(userIds!=null){
-                String[] usernameList = sysUserService.userIdToUsername(Arrays.asList(userIds)).toArray(new String[]{});
+                LambdaQueryWrapper<SysUser> queryWrapper = new LambdaQueryWrapper<>();
+                queryWrapper.in(SysUser::getId, userIds);
+                List<SysUser> userList = userMapper.selectList(queryWrapper);
+                String[] usernameList = userList.stream().map(SysUser::getUsername).toArray(String[] :: new);
+
                 // 通过第三方账号表查询出第三方userId
                 List<SysThirdAccount> thirdAccountList = sysThirdAccountService.listThirdUserIdByUsername(usernameList, THIRD_TYPE);
                 List<String> dtUserIds = thirdAccountList.stream().map(SysThirdAccount::getThirdUserId).collect(Collectors.toList());
@@ -887,14 +903,14 @@ public class ThirdAppDingtalkServiceImpl implements IThirdAppService {
     private SysUser getSysUserByThird(SysThirdAccount thirdAccount, User appUser, String appUserId, String accessToken) {
         String sysUserId = thirdAccount.getSysUserId();
         if (oConvertUtils.isNotEmpty(sysUserId)) {
-            return sysUserService.getById(sysUserId);
+            return userMapper.selectById(sysUserId);
         } else {
             // 如果没有 sysUserId ,说明没有绑定账号,获取到手机号之后进行绑定
             if (appUser == null) {
                 appUser = JdtUserAPI.getUserById(appUserId, accessToken).getResult();
             }
             // 判断系统里是否有这个手机号的用户
-            SysUser sysUser = sysUserService.getUserByPhone(appUser.getMobile());
+            SysUser sysUser = userMapper.getUserByPhone(appUser.getMobile());
             if (sysUser != null) {
                 thirdAccount.setAvatar(appUser.getAvatar());
                 thirdAccount.setRealname(appUser.getName());
diff --git a/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/service/impl/ThirdAppWechatEnterpriseServiceImpl.java b/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/service/impl/ThirdAppWechatEnterpriseServiceImpl.java
index c6f1b96..02a54b0 100644
--- a/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/service/impl/ThirdAppWechatEnterpriseServiceImpl.java
+++ b/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/service/impl/ThirdAppWechatEnterpriseServiceImpl.java
@@ -2,6 +2,7 @@ package org.jeecg.modules.system.service.impl;
 
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.jeecg.qywx.api.base.JwAccessTokenAPI;
 import com.jeecg.qywx.api.core.common.AccessToken;
 import com.jeecg.qywx.api.department.JwDepartmentAPI;
@@ -26,6 +27,7 @@ import org.jeecg.common.util.oConvertUtils;
 import org.jeecg.config.thirdapp.ThirdAppConfig;
 import org.jeecg.modules.system.entity.*;
 import org.jeecg.modules.system.mapper.SysAnnouncementSendMapper;
+import org.jeecg.modules.system.mapper.SysUserMapper;
 import org.jeecg.modules.system.model.SysDepartTreeModel;
 import org.jeecg.modules.system.model.ThirdLoginModel;
 import org.jeecg.modules.system.service.*;
@@ -43,6 +45,7 @@ import java.util.stream.Collectors;
 
 /**
  * 第三方App对接:企业微信实现类
+ * @author: jeecg-boot
  */
 @Slf4j
 @Service
@@ -53,7 +56,7 @@ public class ThirdAppWechatEnterpriseServiceImpl implements IThirdAppService {
     @Autowired
     private ISysDepartService sysDepartService;
     @Autowired
-    private ISysUserService sysUserService;
+    private SysUserMapper userMapper;
     @Autowired
     private ISysThirdAccountService sysThirdAccountService;
     @Autowired
@@ -63,7 +66,9 @@ public class ThirdAppWechatEnterpriseServiceImpl implements IThirdAppService {
     @Autowired
     private SysAnnouncementSendMapper sysAnnouncementSendMapper;
 
-    // 第三方APP类型,当前固定为 wechat_enterprise
+    /**
+     * 第三方APP类型,当前固定为 wechat_enterprise
+     */
     public final String THIRD_TYPE = ThirdAppConfig.WECHAT_ENTERPRISE.toLowerCase();
 
     @Override
@@ -123,7 +128,12 @@ public class ThirdAppWechatEnterpriseServiceImpl implements IThirdAppService {
         return syncInfo;
     }
 
-    // 递归删除部门以及子部门,由于企业微信不允许删除带有成员和子部门的部门,所以需要递归删除下子部门,然后把部门成员移动端根部门下
+    /**
+     * 递归删除部门以及子部门,由于企业微信不允许删除带有成员和子部门的部门,所以需要递归删除下子部门,然后把部门成员移动端根部门下
+     * @param children
+     * @param accessToken
+     * @param ifLocal
+     */
     private void deleteDepartRecursion(List<JwDepartmentTreeVo> children, String accessToken, boolean ifLocal) {
         for (JwDepartmentTreeVo departmentTree : children) {
             String depId = departmentTree.getId();
@@ -162,7 +172,13 @@ public class ThirdAppWechatEnterpriseServiceImpl implements IThirdAppService {
         }
     }
 
-    // 递归同步部门到第三方APP
+    /**
+     * 递归同步部门到第三方APP
+     * @param sysDepartsTree
+     * @param departments
+     * @param parent
+     * @param accessToken
+     */
     private void syncDepartmentRecursion(List<SysDepartTreeModel> sysDepartsTree, List<Department> departments, Department parent, String accessToken) {
         if (sysDepartsTree != null && sysDepartsTree.size() != 0) {
             for1:
@@ -295,10 +311,10 @@ public class ThirdAppWechatEnterpriseServiceImpl implements IThirdAppService {
             LambdaQueryWrapper<SysUser> queryWrapper = new LambdaQueryWrapper<>();
             queryWrapper.in(SysUser::getId, (Object[]) idList);
             // 获取本地指定用户
-            sysUsers = sysUserService.list(queryWrapper);
+            sysUsers = userMapper.selectList(queryWrapper);
         } else {
             // 获取本地所有用户
-            sysUsers = sysUserService.list();
+            sysUsers = userMapper.selectList(Wrappers.emptyWrapper());
         }
 
         // 循环判断新用户和需要更新的用户
@@ -364,7 +380,7 @@ public class ThirdAppWechatEnterpriseServiceImpl implements IThirdAppService {
             return syncInfo;
         }
         //查询本地用户
-        List<SysUser> sysUsersList = sysUserService.list();
+        List<SysUser> sysUsersList = userMapper.selectList(Wrappers.emptyWrapper());
         // 循环判断新用户和需要更新的用户
         for (User qwUser : qwUsersList) {
             /*
@@ -381,7 +397,7 @@ public class ThirdAppWechatEnterpriseServiceImpl implements IThirdAppService {
                 // 循环到此说明用户匹配成功,进行更新操作
                 SysUser updateSysUser = this.qwUserToSysUser(qwUser, sysUserTemp);
                 try {
-                    sysUserService.updateById(updateSysUser);
+                    userMapper.updateById(updateSysUser);
                     String str = String.format("用户 %s(%s) 更新成功!", updateSysUser.getRealname(), updateSysUser.getUsername());
                     syncInfo.addSuccessInfo(str);
                 } catch (Exception e) {
@@ -394,7 +410,7 @@ public class ThirdAppWechatEnterpriseServiceImpl implements IThirdAppService {
                 // 没匹配到用户则走新增逻辑
                 SysUser newSysUser = this.qwUserToSysUser(qwUser);
                 try {
-                    sysUserService.save(newSysUser);
+                    userMapper.insert(newSysUser);
                     String str = String.format("用户 %s(%s) 创建成功!", newSysUser.getRealname(), newSysUser.getUsername());
                     syncInfo.addSuccessInfo(str);
                 } catch (Exception e) {
@@ -557,7 +573,8 @@ public class ThirdAppWechatEnterpriseServiceImpl implements IThirdAppService {
                 user.setEnable(1);
             }
         }
-        user.setTelephone(sysUser.getTelephone());// 座机号
+        // 座机号
+        user.setTelephone(sysUser.getTelephone());
         // --- 企业微信没有逻辑删除的功能
         // update-begin--Author:sunjianlei Date:20210520 for:本地逻辑删除的用户,在企业微信里禁用 -----
         if (CommonConstant.DEL_FLAG_1.equals(sysUser.getDelFlag())) {
@@ -639,7 +656,8 @@ public class ThirdAppWechatEnterpriseServiceImpl implements IThirdAppService {
         if (qwUser.getEnable() != null) {
             sysUser.setStatus(qwUser.getEnable() == 1 ? 1 : 2);
         }
-        sysUser.setTelephone(qwUser.getTelephone());// 座机号
+        // 座机号
+        sysUser.setTelephone(qwUser.getTelephone());
 
         // --- 企业微信没有逻辑删除的功能
         // sysUser.setDelFlag()
@@ -740,7 +758,7 @@ public class ThirdAppWechatEnterpriseServiceImpl implements IThirdAppService {
         }
         Text text = new Text();
         text.setMsgtype("text");
-        text.setTouser(this.getTouser(message.getToUser(), message.isToAll()));
+        text.setTouser(this.getTouser(message.getToUser(), message.getToAll()));
         TextEntity entity = new TextEntity();
         entity.setContent(message.getContent());
         text.setText(entity);
@@ -779,7 +797,11 @@ public class ThirdAppWechatEnterpriseServiceImpl implements IThirdAppService {
                 SysAnnouncementSend sysAnnouncementSend = sysAnnouncementSendMapper.selectOne(queryWrapper);
                 userIds = new String[] {sysAnnouncementSend.getUserId()};
             }
-            List<String> usernameList = sysUserService.userIdToUsername(Arrays.asList(userIds));
+
+            LambdaQueryWrapper<SysUser> queryWrapper = new LambdaQueryWrapper<>();
+            queryWrapper.in(SysUser::getId, userIds);
+            List<SysUser> userList = userMapper.selectList(queryWrapper);
+            List<String> usernameList = userList.stream().map(SysUser::getUsername).collect(Collectors.toList());
             usernameString = String.join(",", usernameList);
         }
 
@@ -863,14 +885,14 @@ public class ThirdAppWechatEnterpriseServiceImpl implements IThirdAppService {
     private SysUser getSysUserByThird(SysThirdAccount thirdAccount, User appUser, String appUserId, String accessToken) {
         String sysUserId = thirdAccount.getSysUserId();
         if (oConvertUtils.isNotEmpty(sysUserId)) {
-            return sysUserService.getById(sysUserId);
+            return userMapper.selectById(sysUserId);
         } else {
             // 如果没有 sysUserId ,说明没有绑定账号,获取到手机号之后进行绑定
             if (appUser == null) {
                 appUser = JwUserAPI.getUserByUserid(appUserId, accessToken);
             }
             // 判断系统里是否有这个手机号的用户
-            SysUser sysUser = sysUserService.getUserByPhone(appUser.getMobile());
+            SysUser sysUser = userMapper.getUserByPhone(appUser.getMobile());
             if (sysUser != null) {
                 thirdAccount.setAvatar(appUser.getAvatar());
                 thirdAccount.setRealname(appUser.getName());
diff --git a/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/util/RandImageUtil.java b/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/util/RandImageUtil.java
index 4697821..d9e7fe4 100644
--- a/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/util/RandImageUtil.java
+++ b/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/util/RandImageUtil.java
@@ -11,6 +11,7 @@ import java.util.Random;
 
 /**
  * 登录验证码工具类
+ * @author: jeecg-boot
  */
 public class RandImageUtil {
 
@@ -73,7 +74,8 @@ public class RandImageUtil {
         byte[] bytes = byteStream.toByteArray();
         //转换成base64串
         String base64 = Base64.getEncoder().encodeToString(bytes).trim();
-        base64 = base64.replaceAll("\n", "").replaceAll("\r", "");//删除 \r\n
+        //删除 \r\n
+        base64 = base64.replaceAll("\n", "").replaceAll("\r", "");
 
         //写到指定位置
         //ImageIO.write(bufferedImage, "png", new File(""));
@@ -87,7 +89,8 @@ public class RandImageUtil {
         // 获取图形上下文
         final Graphics2D graphics = (Graphics2D) image.getGraphics();
         // 设定背景颜色
-        graphics.setColor(Color.WHITE); // ---1
+        // ---1
+        graphics.setColor(Color.WHITE);
         graphics.fillRect(0, 0, width, height);
         // 设定边框颜色
 //		graphics.setColor(getRandColor(100, 200)); // ---2
@@ -96,9 +99,11 @@ public class RandImageUtil {
         final Random random = new Random();
         // 随机产生干扰线,使图象中的认证码不易被其它程序探测到
         for (int i = 0; i < count; i++) {
-            graphics.setColor(getRandColor(150, 200)); // ---3
+            // ---3
+            graphics.setColor(getRandColor(150, 200));
 
-            final int x = random.nextInt(width - lineWidth - 1) + 1; // 保证画在边框之内
+            // 保证画在边框之内
+            final int x = random.nextInt(width - lineWidth - 1) + 1;
             final int y = random.nextInt(height - lineWidth - 1) + 1;
             final int xl = random.nextInt(lineWidth);
             final int yl = random.nextInt(lineWidth);
diff --git a/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/vo/SysDepartUsersVO.java b/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/vo/SysDepartUsersVO.java
index 3d11f54..79d201a 100644
--- a/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/vo/SysDepartUsersVO.java
+++ b/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/vo/SysDepartUsersVO.java
@@ -5,6 +5,10 @@ import java.util.List;
 
 import lombok.Data;
 
+/**
+ * @Description: 系统部门VO
+ * @author: jeecg-boot
+ */
 @Data
 public class SysDepartUsersVO implements Serializable{
 	private static final long serialVersionUID = 1L;
diff --git a/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/vo/SysDictPage.java b/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/vo/SysDictPage.java
index bd06e8b..2bd82a8 100644
--- a/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/vo/SysDictPage.java
+++ b/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/vo/SysDictPage.java
@@ -7,6 +7,10 @@ import org.jeecgframework.poi.excel.annotation.ExcelCollection;
 
 import java.util.List;
 
+/**
+ * @Description: 系统字典分页
+ * @author: jeecg-boot
+ */
 @Data
 public class SysDictPage {
 
diff --git a/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/vo/SysUserRoleVO.java b/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/vo/SysUserRoleVO.java
index 70d14ef..a914792 100644
--- a/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/vo/SysUserRoleVO.java
+++ b/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/vo/SysUserRoleVO.java
@@ -5,6 +5,10 @@ import lombok.Data;
 import java.io.Serializable;
 import java.util.List;
 
+/**
+ * @Description: 用户角色vo
+ * @author: jeecg-boot
+ */
 @Data
 public class SysUserRoleVO implements Serializable{
 	private static final long serialVersionUID = 1L;
diff --git a/jeecg-boot/jeecg-boot-module-system/src/main/resources/application-dev.yml b/jeecg-boot/jeecg-boot-module-system/src/main/resources/application-dev.yml
index c46531e..f6a6a51 100644
--- a/jeecg-boot/jeecg-boot-module-system/src/main/resources/application-dev.yml
+++ b/jeecg-boot/jeecg-boot-module-system/src/main/resources/application-dev.yml
@@ -50,7 +50,7 @@ spring:
             instanceName: MyScheduler
             instanceId: AUTO
           jobStore:
-            class: org.quartz.impl.jdbcjobstore.JobStoreTX
+            class: org.springframework.scheduling.quartz.LocalDataSourceJobStore
             driverDelegateClass: org.quartz.impl.jdbcjobstore.StdJDBCDelegate
             tablePrefix: QRTZ_
             isClustered: true
@@ -92,6 +92,9 @@ spring:
   # 设置静态文件路径,js,css等
   mvc:
     static-path-pattern: /**
+    #Spring Boot 2.6+后映射匹配的默认策略已从AntPathMatcher更改为PathPatternParser,需要手动指定为ant-path-matcher
+    pathmatch:
+      matching-strategy: ant_path_matcher
   resource:
     static-locations: classpath:/static/,classpath:/public/
   autoconfigure:
@@ -173,8 +176,6 @@ mybatis-plus:
 #jeecg专用配置
 minidao :
   base-package: org.jeecg.modules.jmreport.*
-  #DB类型(mysql | postgresql | oracle | sqlserver| other)
-  db-type: mysql
 jeecg :
   # 是否启用安全模式
   safeMode: false
@@ -226,6 +227,13 @@ jeecg :
     is_verify_token: true
     #必须校验方法
     verify_methods: remove,delete,save,add,update
+    #自定义项目前缀
+    customPrePath:
+    pageSize:
+      - 10
+      - 20
+      - 30
+      - 40
   #Wps在线文档
   wps:
     domain: https://wwo.wps.cn/office/
diff --git a/jeecg-boot/jeecg-boot-module-system/src/main/resources/application-prod.yml b/jeecg-boot/jeecg-boot-module-system/src/main/resources/application-prod.yml
index e185687..8f557c0 100644
--- a/jeecg-boot/jeecg-boot-module-system/src/main/resources/application-prod.yml
+++ b/jeecg-boot/jeecg-boot-module-system/src/main/resources/application-prod.yml
@@ -50,7 +50,7 @@ spring:
             instanceName: MyScheduler
             instanceId: AUTO
           jobStore:
-            class: org.quartz.impl.jdbcjobstore.JobStoreTX
+            class: org.springframework.scheduling.quartz.LocalDataSourceJobStore
             driverDelegateClass: org.quartz.impl.jdbcjobstore.StdJDBCDelegate
             tablePrefix: QRTZ_
             isClustered: true
@@ -92,6 +92,9 @@ spring:
   # 设置静态文件路径,js,css等
   mvc:
     static-path-pattern: /**
+    #Spring Boot 2.6+后映射匹配的默认策略已从AntPathMatcher更改为PathPatternParser,需要手动指定为ant-path-matcher
+    pathmatch:
+      matching-strategy: ant_path_matcher
   resource:
     static-locations: classpath:/static/,classpath:/public/
   autoconfigure:
diff --git a/jeecg-boot/jeecg-boot-module-system/src/main/resources/application-test.yml b/jeecg-boot/jeecg-boot-module-system/src/main/resources/application-test.yml
index 9698b34..2553152 100644
--- a/jeecg-boot/jeecg-boot-module-system/src/main/resources/application-test.yml
+++ b/jeecg-boot/jeecg-boot-module-system/src/main/resources/application-test.yml
@@ -50,7 +50,7 @@ spring:
             instanceName: MyScheduler
             instanceId: AUTO
           jobStore:
-            class: org.quartz.impl.jdbcjobstore.JobStoreTX
+            class: org.springframework.scheduling.quartz.LocalDataSourceJobStore
             driverDelegateClass: org.quartz.impl.jdbcjobstore.StdJDBCDelegate
             tablePrefix: QRTZ_
             isClustered: true
@@ -92,6 +92,9 @@ spring:
   # 设置静态文件路径,js,css等
   mvc:
     static-path-pattern: /**
+    #Spring Boot 2.6+后映射匹配的默认策略已从AntPathMatcher更改为PathPatternParser,需要手动指定为ant-path-matcher
+    pathmatch:
+      matching-strategy: ant_path_matcher
   resource:
     static-locations: classpath:/static/,classpath:/public/
   autoconfigure:
diff --git a/jeecg-boot/jeecg-boot-module-system/src/main/resources/banner.txt b/jeecg-boot/jeecg-boot-module-system/src/main/resources/banner.txt
index 75c70b1..21783e0 100644
--- a/jeecg-boot/jeecg-boot-module-system/src/main/resources/banner.txt
+++ b/jeecg-boot/jeecg-boot-module-system/src/main/resources/banner.txt
@@ -9,6 +9,6 @@ ${AnsiColor.BRIGHT_BLUE}
 
 
 ${AnsiColor.BRIGHT_GREEN}
-Jeecg  Boot Version: 3.1.0
+Jeecg  Boot Version: 3.2.0
 Spring Boot Version: ${spring-boot.version}${spring-boot.formatted-version}
 ${AnsiColor.BLACK}
diff --git a/jeecg-boot/jeecg-boot-module-system/src/main/resources/templates/pdfPreviewIframe.ftl b/jeecg-boot/jeecg-boot-module-system/src/main/resources/templates/pdfPreviewIframe.ftl
index e92d4a9..f20c68c 100644
--- a/jeecg-boot/jeecg-boot-module-system/src/main/resources/templates/pdfPreviewIframe.ftl
+++ b/jeecg-boot/jeecg-boot-module-system/src/main/resources/templates/pdfPreviewIframe.ftl
@@ -13,7 +13,7 @@
 
 function openScanFile(title,token,bizNo,archivesNo){
  	 //var pdfUrl ="http://127.0.0.1:8080/jeecg-boot/generic/web/viewer.html?file="+encodeURIComponent("http://127.0.0.1:8080/jeecg-boot/test/jeecgDemo/getPdfUrl?title="+encodeURI(title));
- 	 var pdfUrl ="${base}/generic/web/viewer.html?file="+encodeURIComponent("http://storage.xuetangx.com/public_assets/xuetangx/PDF/PlayerAPI_v1.0.6.pdf");
+ 	 var pdfUrl ="${base}/generic/web/viewer.html?file="+encodeURIComponent("https://jeecgos.oss-cn-beijing.aliyuncs.com/files/site/java_p3c.pdf");
  	 
 	 var vm=window.open(pdfUrl);
 }
diff --git a/jeecg-boot/jeecg-boot-module-system/src/test/java/org/jeecg/SecurityToolsTest.java b/jeecg-boot/jeecg-boot-module-system/src/test/java/org/jeecg/SecurityToolsTest.java
deleted file mode 100644
index e1ce9f6..0000000
--- a/jeecg-boot/jeecg-boot-module-system/src/test/java/org/jeecg/SecurityToolsTest.java
+++ /dev/null
@@ -1,49 +0,0 @@
-package org.jeecg;
-
-import com.alibaba.fastjson.JSONObject;
-import org.jeecg.common.util.security.SecurityTools;
-import org.jeecg.common.util.security.entity.*;
-import org.junit.Test;
-
-public class SecurityToolsTest {
-    @Test
-    public void Test(){
-        MyKeyPair mkeyPair = SecurityTools.generateKeyPair();
-
-        JSONObject msg = new JSONObject();
-        msg.put("name", "党政辉");
-        msg.put("age", 50);
-        JSONObject identity = new JSONObject();
-        identity.put("type", "01");
-        identity.put("no", "210882165896524512");
-        msg.put("identity", identity);
-
-        // 签名加密部分
-        SecuritySignReq signReq = new SecuritySignReq();
-        // data为要加密的报文字符串
-        signReq.setData(msg.toString());
-        // 为rsa私钥
-        signReq.setPrikey(mkeyPair.getPriKey());
-        // 调用签名方法
-        SecuritySignResp sign = SecurityTools.sign(signReq);
-        // 打印出来加密数据
-        // signData为签名数据
-        // data为aes加密数据
-        // asekey为ras加密过的aeskey
-        System.out.println(JSONObject.toJSON(sign));
-
-        // 验签解密部分
-        SecurityReq req = new SecurityReq();
-        //对方传过来的数据一一对应
-        req.setAesKey(sign.getAesKey());
-        req.setData(sign.getData());
-        req.setSignData(sign.getSignData());
-        //我们的公钥
-        req.setPubKey(mkeyPair.getPubKey());
-        //验签方法调用
-        SecurityResp securityResp = SecurityTools.valid(req);
-        //解密报文data为解密报文
-        //sucess 为验签成功失败标志 true代码验签成功,false代表失败
-        System.out.println(JSONObject.toJSON(securityResp));
-    }
-}