From 9c7f5f394387099037d4af06f7abefc1b78628ea Mon Sep 17 00:00:00 2001
From: nidapeng <jp@doumee.com>
Date: 星期四, 25 四月 2024 15:45:42 +0800
Subject: [PATCH] 最新版本

---
 server/meeting/meeting_admin/src/main/java/com/doumee/api/system/SystemLoginLogController.java       |   47 +
 server/system_service/pom.xml                                                                        |   17 
 server/visits/dmvisit_admin/src/main/java/com/doumee/config/swagger/SwaggerConfig.java               |   24 
 server/meeting/meeting_admin/src/main/java/com/doumee/api/system/SystemRoleController.java           |  111 +++
 server/meeting/meeting_service/src/main/resources/application-dev.yml                                |   14 
 server/system_service/src/main/java/com/doumee/api/system/NoticesController.java                     |    4 
 server/visits/dmvisit_admin/src/main/java/com/doumee/api/timer/QuartzController.java                 |    0 
 server/meeting/meeting_admin/src/main/java/com/doumee/config/swagger/SwaggerConfig.java              |   13 
 server/system_service/src/main/java/com/doumee/api/system/SystemController.java                      |    3 
 server/visits/dmvisit_admin/src/main/java/com/doumee/api/BaseController.java                         |   11 
 server/visits/dmvisit_service/src/main/resources/application-testYL.yml                              |   12 
 server/meeting/meeting_service/src/main/resources/application-test.yml                               |   12 
 server/system_gateway/src/main/java/com/doumee/config/swagger/SwaggerHandler.java                    |   46 +
 server/system_gateway/src/main/resources/application-dev.yml                                         |   12 
 server/meeting/meeting_service/src/main/java/com/doumee/config/handler/GlobalExceptionHandler.java   |    2 
 server/system_service/src/main/java/com/doumee/api/system/SystemPermissionController.java            |    2 
 server/meeting/meeting_admin/src/main/java/com/doumee/api/system/SystemTraceLogController.java       |   46 +
 server/visits/pom.xml                                                                                |   10 
 server/meeting/meeting_admin/src/main/java/com/doumee/config/shiro/ShiroConfig.java                  |    1 
 server/meeting/meeting_admin/src/main/java/com/doumee/api/system/SystemMonitorController.java        |   31 
 server/meeting/meeting_admin/src/main/java/com/doumee/api/common/PublicController.java               |  163 +++-
 server/system_gateway/src/main/resources/bootstrap.yml                                               |   51 +
 server/system_service/src/main/java/com/doumee/api/system/SystemMenuController.java                  |    2 
 server/meeting/meeting_admin/src/main/java/com/doumee/api/system/SystemDictController.java           |   82 ++
 server/meeting/meeting_web/src/main/java/com/doumee/config/swagger/SwaggerConfig.java                |   14 
 server/visits/dmvisit_service/src/main/resources/application-devYL.yml                               |   12 
 server/system_service/src/main/java/com/doumee/core/utils/kuaidi100/ExpressUtils.java                |    3 
 server/system_gateway/src/main/java/com/doumee/config/swagger/SwaggerResourceConfig.java             |   49 +
 server/meeting/meeting_admin/src/main/java/com/doumee/api/system/SystemDepartmentController.java     |  109 +++
 server/meeting/meeting_admin/src/main/java/com/doumee/api/system/SystemUserController.java           |  141 ++++
 server/meeting/meeting_service/src/main/resources/application-pro.yml                                |   14 
 server/visits/dmvisit_service/src/main/resources/application-dev.yml                                 |   12 
 server/meeting/meeting_admin/src/main/java/com/doumee/api/system/SystemPositionController.java       |  106 +++
 server/meeting/pom.xml                                                                               |   12 
 server/visits/dmvisit_service/src/main/java/com/doumee/config/handler/GlobalExceptionHandler.java    |    2 
 server/visits/dmvisit_service/src/main/resources/application-pro.yml                                 |   12 
 server/visits/dmvisit_admin/src/main/resources/bootstrap.yml                                         |   43 +
 server/meeting/meeting_admin/src/main/resources/bootstrap.yml                                        |    6 
 server/system_gateway/src/main/resources/application-test.yml                                        |   12 
 server/system_service/src/main/java/com/doumee/dao/system/model/SystemDataPermission.java            |    3 
 server/meeting/meeting_admin/src/main/java/com/doumee/api/system/SystemPermissionController.java     |   91 ++
 server/system_gateway/src/main/java/com/doumee/config/swagger/SwaggerHeaderFilter.java               |   41 +
 server/meeting/meeting_admin/src/main/java/com/doumee/api/system/NoticesController.java              |   92 ++
 server/meeting/meeting_admin/src/main/java/com/doumee/api/system/SystemController.java               |   69 +
 server/visits/dmvisit_admin/src/main/java/com/doumee/api/common/PublicController.java                |    7 
 server/meeting/meeting_admin/src/main/java/com/doumee/api/timer/QuartzController.java                |    0 
 server/visits/dmvisit_web/src/main/java/com/doumee/config/swagger/SwaggerConfig.java                 |   45 
 server/system_service/src/main/java/com/doumee/api/system/SystemDictDataController.java              |    2 
 server/system_service/src/main/java/com/doumee/api/system/SystemRoleController.java                  |    2 
 server/system_service/src/main/java/com/doumee/api/system/SystemUserController.java                  |    2 
 server/meeting/meeting_admin/src/main/java/com/doumee/api/system/SystemDataPermissionController.java |  106 +++
 server/visits/dmvisit_service/src/main/resources/application-test.yml                                |   12 
 server/system_service/src/main/java/com/doumee/api/system/SystemDataPermissionController.java        |    3 
 server/system_service/src/main/java/com/doumee/api/system/SystemPositionController.java              |    2 
 server/meeting/meeting_admin/src/main/java/com/doumee/api/system/SystemMenuController.java           |  100 ++
 server/system_gateway/src/main/resources/application-pro.yml                                         |   12 
 server/system_gateway/src/main/java/com/doumee/SystemGatewayApplication.java                         |    4 
 server/system_gateway/pom.xml                                                                        |    5 
 /dev/null                                                                                            |   85 --
 server/meeting/meeting_admin/src/main/java/com/doumee/api/system/SystemDictDataController.java       |   97 ++
 server/meeting/meeting_admin/src/main/java/com/doumee/api/BaseController.java                        |   11 
 server/system_gateway/src/main/resources/application.yml                                             |    6 
 server/meeting/meeting_admin/src/main/resources/application.yml                                      |    9 
 63 files changed, 1,748 insertions(+), 321 deletions(-)

diff --git a/server/meeting/meeting_admin/src/main/java/com/doumee/api/BaseController.java b/server/meeting/meeting_admin/src/main/java/com/doumee/api/BaseController.java
index fd5ef6c..a390450 100644
--- a/server/meeting/meeting_admin/src/main/java/com/doumee/api/BaseController.java
+++ b/server/meeting/meeting_admin/src/main/java/com/doumee/api/BaseController.java
@@ -1,6 +1,5 @@
 package com.doumee.api;
 
-import com.doumee.config.Jwt.JwtTokenUtil;
 import com.doumee.core.model.LoginUserInfo;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.shiro.SecurityUtils;
@@ -35,16 +34,6 @@
     public HttpServletRequest getRequest() {
         HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
         return request;
-    }
-
-    /**
-     * 鑾峰彇鐢ㄦ埛ID
-     *
-     * @return
-     */
-    protected Integer getMemberId() {
-        Object obj = this.getRequest().getAttribute(JwtTokenUtil.UserId_Name);
-        return obj != null ? (Integer) obj : null;
     }
 
 
diff --git a/server/meeting/meeting_admin/src/main/java/com/doumee/api/common/PublicController.java b/server/meeting/meeting_admin/src/main/java/com/doumee/api/common/PublicController.java
index 85b332f..a446dbd 100644
--- a/server/meeting/meeting_admin/src/main/java/com/doumee/api/common/PublicController.java
+++ b/server/meeting/meeting_admin/src/main/java/com/doumee/api/common/PublicController.java
@@ -6,28 +6,31 @@
 import com.doumee.core.annotation.trace.Trace;
 import com.doumee.core.utils.Constants;
 import com.doumee.core.utils.DateUtil;
+import com.doumee.core.utils.FtpUtil;
 import com.doumee.core.utils.aliyun.ALiYunUtil;
 import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiImplicitParam;
-import io.swagger.annotations.ApiImplicitParams;
 import io.swagger.annotations.ApiOperation;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.ResponseBody;
 import org.springframework.web.bind.annotation.RestController;
 import org.springframework.web.multipart.MultipartFile;
 import org.springframework.web.multipart.MultipartHttpServletRequest;
-import org.springframework.web.multipart.commons.CommonsMultipartFile;
 import org.springframework.web.multipart.commons.CommonsMultipartResolver;
 
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 import java.io.File;
 import java.io.IOException;
+import java.io.InputStream;
 import java.io.PrintWriter;
-import java.util.*;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.Map;
+import java.util.UUID;
 
 /**
  * @author Eva.Caesar Liu
@@ -45,52 +48,113 @@
     private SystemDictDataBiz systemDictDataBiz;
 
 
-
-    @ApiOperation(value = "涓婁紶", notes = "涓婁紶", httpMethod = "POST", position = 6)
-    @ApiImplicitParams({
-        @ApiImplicitParam(name = "folder", value = "鏂囦欢澶�", required = true, paramType = "query", dataType = "String", dataTypeClass = String.class),
-    })
-    @PostMapping(value = "/upload", headers = "content-type=multipart/form-data")
-    public void uploadMobile(String folder, HttpServletRequest request, HttpServletResponse response) throws Exception {
-        MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;
-        upload(multipartRequest, response, folder + "/",
-            systemDictDataBiz.queryByCode(Constants.OSS,Constants.BUCKETNAME).getCode(),
-            systemDictDataBiz.queryByCode(Constants.OSS,Constants.ACCESS_ID).getCode(),
-            systemDictDataBiz.queryByCode(Constants.OSS,Constants.ACCESS_KEY).getCode(),
-            systemDictDataBiz.queryByCode(Constants.OSS,Constants.RESOURCE_PATH).getCode(),
-            systemDictDataBiz.queryByCode(Constants.OSS,Constants.ENDPOINT).getCode());
-    }
+//    @ApiOperation(value = "涓婁紶", notes = "涓婁紶", httpMethod = "POST", position = 6)
+//    @ApiImplicitParams({
+//            @ApiImplicitParam(name = "folder", value = "鏂囦欢澶�", required = true, paramType = "query", dataType = "String", dataTypeClass = String.class),
+//    })
+//    @PostMapping(value = "/upload", headers = "content-type=multipart/form-data")
+//    public void uploadMobile(String folder, HttpServletRequest request, HttpServletResponse response) throws Exception {
+//        MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;
+//        upload(multipartRequest, response, folder + "/",
+//                systemDictDataBiz.queryByCode(Constants.OSS,Constants.BUCKETNAME).getCode(),
+//                systemDictDataBiz.queryByCode(Constants.OSS,Constants.ACCESS_ID).getCode(),
+//                systemDictDataBiz.queryByCode(Constants.OSS,Constants.ACCESS_KEY).getCode(),
+//                systemDictDataBiz.queryByCode(Constants.OSS,Constants.RESOURCE_PATH).getCode(),
+//                systemDictDataBiz.queryByCode(Constants.OSS,Constants.ENDPOINT).getCode());
+//    }
+//
+//
+//    @ApiOperation(value = "涓婁紶鍥剧墖", notes = "涓婁紶鍥剧墖", httpMethod = "POST", position = 6)
+//    @ApiImplicitParams({
+//            @ApiImplicitParam(name = "folder", value = "鏂囦欢澶�", required = true, paramType = "query", dataType = "String", dataTypeClass = String.class),
+//    })
+//    @PostMapping(value = "/uploadPicture", headers = "content-type=multipart/form-data")
+//    public void uploadPicture(String folder, HttpServletRequest request, HttpServletResponse response) throws Exception {
+//        MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;
+//        Iterator<String> fileNames = multipartRequest.getFileNames();
+//        Map<String, Object> context = new HashMap<>();
+//        while (fileNames.hasNext()){
+//            MultipartFile file = multipartRequest.getFile(fileNames.next());
+//            String fileName = file.getOriginalFilename();
+//            String suffix = fileName.substring(fileName.lastIndexOf("."));
+//            if ( !StringUtils.equalsIgnoreCase(suffix, ".jpg") || !StringUtils.equalsIgnoreCase(suffix, ".png")) {
+//                context.put("code", 0);
+//                context.put("message", "瀵逛笉璧凤紝鏂囦欢鏍煎紡涓婁紶鏈夎锛�");
+//            }
+//        }
+//        upload(multipartRequest, response, folder + "/",
+//                systemDictDataBiz.queryByCode(Constants.OSS,Constants.BUCKETNAME).getCode(),
+//                systemDictDataBiz.queryByCode(Constants.OSS,Constants.ACCESS_ID).getCode(),
+//                systemDictDataBiz.queryByCode(Constants.OSS,Constants.ACCESS_KEY).getCode(),
+//                systemDictDataBiz.queryByCode(Constants.OSS,Constants.RESOURCE_PATH).getCode(),
+//                systemDictDataBiz.queryByCode(Constants.OSS,Constants.ENDPOINT).getCode());
+//    }
 
 
-    @ApiOperation(value = "涓婁紶鍥剧墖", notes = "涓婁紶鍥剧墖", httpMethod = "POST", position = 6)
-    @ApiImplicitParams({
-            @ApiImplicitParam(name = "folder", value = "banner/ 锛堣疆鎾級goods/ (鍟嗗搧)member/ (鐢ㄦ埛锛塻hop/ 锛堝簵閾猴級system/ (绯荤粺閰嶇疆绛夛級activity/ 锛堝彂鐜帮級commet/ (璇勮锛塷ther/ 锛堝叾浠栵級aftersale/锛堝敭鍚庯級", required = true, paramType = "query", dataType = "String", dataTypeClass = String.class),
-    })
-    @PostMapping(value = "/uploadPicture", headers = "content-type=multipart/form-data")
-    public void uploadPicture(String folder, HttpServletRequest request, HttpServletResponse response) throws Exception {
-        MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;
-        Iterator<String> fileNames = multipartRequest.getFileNames();
+
+
+    public static FtpUtil ftp  = null;
+
+    @ApiOperation(value = "涓婁紶鏂囦欢鍒癋TP")
+    @RequestMapping(method= RequestMethod.POST,value="upload")
+    @ResponseBody
+    public void upload(HttpServletRequest request, HttpServletResponse response, String folder) throws Exception {
+//        folder = systemDictDataBiz.queryByCode(Constants.FTP,folder).getCode();
+        String prefixPath = systemDictDataBiz.queryByCode(Constants.FTP,Constants.FTP_RESOURCE_PATH).getCode();
+        InputStream is = null;
+        response.setCharacterEncoding("UTF-8");
+        response.setContentType("text/html;charset=UTF-8");
         Map<String, Object> context = new HashMap<>();
-        while (fileNames.hasNext()){
-            MultipartFile file = multipartRequest.getFile(fileNames.next());
-            String fileName = file.getOriginalFilename();
-            String suffix = fileName.substring(fileName.lastIndexOf("."));
-            if ( !StringUtils.equalsIgnoreCase(suffix, ".jpg") || !StringUtils.equalsIgnoreCase(suffix, ".png")) {
-                context.put("code", 0);
-                context.put("message", "瀵逛笉璧凤紝鏂囦欢鏍煎紡涓婁紶鏈夎锛�");
+        try {
+            if(ftp == null){
+                ftp = new FtpUtil(systemDictDataBiz.queryByCode(Constants.FTP,Constants.FTP_HOST).getCode(),
+                        Integer.parseInt(systemDictDataBiz.queryByCode(Constants.FTP,Constants.FTP_PORT).getCode()),
+                        systemDictDataBiz.queryByCode(Constants.FTP,Constants.FTP_USERNAME).getCode(),
+                        systemDictDataBiz.queryByCode(Constants.FTP,Constants.FTP_PWD).getCode());
+            }else{
+                ftp.connect();
             }
+
+            CommonsMultipartResolver multipartResovler = new CommonsMultipartResolver();
+            if (multipartResovler.isMultipart(request)) {
+                MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;
+                Iterator<String> it = multipartRequest.getFileNames();
+                while (it.hasNext()) {
+                    MultipartFile file = multipartRequest.getFile(it.next());
+                    is = file.getInputStream();
+                    String date = DateUtil.getNowShortDate();
+                    String fName =  date+"/"+ UUID.randomUUID()+".jpg";
+                    String fileName = folder+fName;
+                    boolean r = ftp.uploadInputstream(is,fileName);
+                    if(r){
+                        context.put("success", true);
+                        context.put("code", 200);
+                        context.put("errno",0);
+                        JSONObject fileJSON = new JSONObject();
+                        fileJSON.put("halfPath", fName);
+                        fileJSON.put("prefixPath", prefixPath);
+                        fileJSON.put("folder", folder);
+                        context.put("data",fileJSON);
+                        context.put("message","璇锋眰鎴愬姛");
+                        writerJson(response, context);
+                        return;
+                    }
+                }
+            }
+        } catch (Exception e) {
+            log.error("銆愪笂浼燜TP澶辫触銆�======================"+e.getMessage());
         }
-        upload(multipartRequest, response, folder + "/",
-                systemDictDataBiz.queryByCode(Constants.OSS,Constants.BUCKETNAME).getCode(),
-                systemDictDataBiz.queryByCode(Constants.OSS,Constants.ACCESS_ID).getCode(),
-                systemDictDataBiz.queryByCode(Constants.OSS,Constants.ACCESS_KEY).getCode(),
-                systemDictDataBiz.queryByCode(Constants.OSS,Constants.RESOURCE_PATH).getCode(),
-                systemDictDataBiz.queryByCode(Constants.OSS,Constants.ENDPOINT).getCode());
+        context.put("code", 0);
+        context.put("message", "涓婁紶澶辫触");
+        context.put("errno",0);
+        writerJson(response, context);
+        return;
     }
+
 
 
     public void upload(HttpServletRequest request, HttpServletResponse response, String folder, String bucketName,
-        String access_id, String access_key, String resourcePath, String endpoint) throws Exception {
+                       String access_id, String access_key, String resourcePath, String endpoint) throws Exception {
         response.setCharacterEncoding("UTF-8");
         response.setContentType("text/html;charset=UTF-8");
         Map<String, Object> context = new HashMap<>();
@@ -184,20 +248,7 @@
     }
 
 
-    @ApiOperation(value = "涓婁紶", notes = "涓婁紶", httpMethod = "POST", position = 6)
-    @ApiImplicitParams({
-            @ApiImplicitParam(name = "folder", value = "鏂囦欢澶�", required = true, paramType = "query", dataType = "String", dataTypeClass = String.class),
-    })
-    @PostMapping(value = "/uploadLocal", headers = "content-type=multipart/form-data")
-    public void uploadLocal(String folder, HttpServletRequest request, HttpServletResponse response) throws Exception {
-        MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;
 
-       // CommonsMultipartFile files = (CommonsMultipartFile) multipartRequest.getFile("filedata");
-        uploadFileLocal(multipartRequest,  folder+ "/", response,
-                systemDictDataBiz.queryByCode(Constants.SYSTEM,Constants.ROOT_PATH).getCode() ,
-                systemDictDataBiz.queryByCode(Constants.SYSTEM,Constants.FILE_DIR).getCode());
-
-    }
 
     public void uploadFileLocal(HttpServletRequest request, String folder, HttpServletResponse response, String rootPath,String dir) throws Exception {
         response.setCharacterEncoding("UTF-8");
@@ -323,6 +374,4 @@
         writerJson(response, context);
         return;
     }
-
-
 }
diff --git a/server/meeting/meeting_admin/src/main/java/com/doumee/api/system/NoticesController.java b/server/meeting/meeting_admin/src/main/java/com/doumee/api/system/NoticesController.java
new file mode 100644
index 0000000..6f3811e
--- /dev/null
+++ b/server/meeting/meeting_admin/src/main/java/com/doumee/api/system/NoticesController.java
@@ -0,0 +1,92 @@
+package com.doumee.api.system;
+
+import com.doumee.api.BaseController;
+import com.doumee.core.annotation.excel.ExcelExporter;
+import com.doumee.core.annotation.pr.PreventRepeat;
+import com.doumee.core.model.ApiResponse;
+import com.doumee.core.model.PageData;
+import com.doumee.core.model.PageWrap;
+import com.doumee.core.utils.Constants;
+import com.doumee.dao.system.model.Notices;
+import com.doumee.service.system.NoticesService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.apache.shiro.authz.annotation.RequiresPermissions;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletResponse;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @author 姹熻箘韫�
+ * @date 2024/01/16 10:03
+ */
+@Api(tags = "绯荤粺娑堟伅淇℃伅琛�")
+@RestController
+@RequestMapping("/business/notices")
+public class NoticesController extends BaseController {
+
+    @Autowired
+    private NoticesService noticesService;
+
+    @PreventRepeat
+    @ApiOperation("鏂板缓")
+    @PostMapping("/create")
+    @RequiresPermissions("business:notices:create")
+    public ApiResponse create(@RequestBody Notices notices) {
+        return ApiResponse.success(noticesService.create(notices));
+    }
+
+    @ApiOperation("鏍规嵁ID鍒犻櫎")
+    @GetMapping("/delete/{id}")
+    @RequiresPermissions("business:notices:delete")
+    public ApiResponse deleteById(@PathVariable Integer id) {
+        noticesService.deleteById(id);
+        return ApiResponse.success(null);
+    }
+
+    @ApiOperation("鎵归噺鍒犻櫎")
+    @GetMapping("/delete/batch")
+    @RequiresPermissions("business:notices:delete")
+    public ApiResponse deleteByIdInBatch(@RequestParam String ids) {
+        String [] idArray = ids.split(",");
+        List<Integer> idList = new ArrayList<>();
+        for (String id : idArray) {
+            idList.add(Integer.valueOf(id));
+        }
+        noticesService.deleteByIdInBatch(idList);
+        return ApiResponse.success(null);
+    }
+
+    @ApiOperation("鏍规嵁ID淇敼")
+    @PostMapping("/updateById")
+    @RequiresPermissions("business:notices:update")
+    public ApiResponse updateById(@RequestBody Notices notices) {
+        noticesService.updateById(notices);
+        return ApiResponse.success(null);
+    }
+
+    @ApiOperation("鍒嗛〉鏌ヨ")
+    @PostMapping("/page")
+    @RequiresPermissions("business:notices:query")
+    public ApiResponse<PageData<Notices>> findPage (@RequestBody PageWrap<Notices> pageWrap) {
+        pageWrap.getModel().setPalt(Constants.ZERO);
+        return ApiResponse.success(noticesService.findPage(pageWrap));
+    }
+
+    @ApiOperation("瀵煎嚭Excel")
+    @PostMapping("/exportExcel")
+    @RequiresPermissions("business:notices:exportExcel")
+    public void exportExcel (@RequestBody PageWrap<Notices> pageWrap, HttpServletResponse response) {
+        ExcelExporter.build(Notices.class).export(noticesService.findPage(pageWrap).getRecords(), "绯荤粺娑堟伅淇℃伅琛�", response);
+    }
+
+    @ApiOperation("鏍规嵁ID鏌ヨ")
+    @GetMapping("/{id}")
+    @RequiresPermissions("business:notices:query")
+    public ApiResponse findById(@PathVariable Integer id) {
+        return ApiResponse.success(noticesService.findById(id));
+    }
+}
diff --git a/server/meeting/meeting_admin/src/main/java/com/doumee/api/system/SystemController.java b/server/meeting/meeting_admin/src/main/java/com/doumee/api/system/SystemController.java
new file mode 100644
index 0000000..8b7ba74
--- /dev/null
+++ b/server/meeting/meeting_admin/src/main/java/com/doumee/api/system/SystemController.java
@@ -0,0 +1,69 @@
+package com.doumee.api.system;
+
+import com.doumee.api.BaseController;
+import com.doumee.biz.system.SystemUserBiz;
+import com.doumee.core.annotation.pr.PreventRepeat;
+import com.doumee.core.annotation.trace.Trace;
+import com.doumee.core.model.ApiResponse;
+import com.doumee.core.model.LoginUserInfo;
+import com.doumee.dao.system.dto.LoginDTO;
+import com.doumee.dao.system.dto.UpdatePwdDto;
+import com.doumee.service.system.SystemLoginService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.shiro.SecurityUtils;
+import org.apache.shiro.subject.Subject;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletRequest;
+
+/**
+ * @author Eva.Caesar Liu
+ * @date 2023/03/21 14:49
+ */
+@Api(tags = "绯荤粺鍔熻兘")
+@Trace(exclude = true)
+@Slf4j
+@RestController
+@RequestMapping("/system")
+public class SystemController extends BaseController {
+
+    @Autowired
+    private SystemUserBiz systemUserBiz;
+
+    @Autowired
+    private SystemLoginService systemLoginService;
+
+    @PreventRepeat(limit = 10, lockTime = 10000)
+    @ApiOperation("鐧诲綍")
+    @PostMapping("/login")
+    public ApiResponse<String> login (@Validated @RequestBody LoginDTO dto, HttpServletRequest request) {
+        return ApiResponse.success(systemLoginService.loginByPassword(dto, request));
+    }
+
+    @ApiOperation("閫�鍑虹櫥褰�")
+    @PostMapping("/logout")
+    public ApiResponse logout () {
+        Subject subject = SecurityUtils.getSubject();
+        subject.logout();
+        return ApiResponse.success(null);
+    }
+
+    @Trace(withRequestParameters = false)
+    @ApiOperation("淇敼褰撳墠鐢ㄦ埛瀵嗙爜")
+    @PostMapping("/updatePwd")
+    public ApiResponse updatePwd (@Validated @RequestBody UpdatePwdDto dto) {
+        dto.setUserId(this.getLoginUser().getId());
+        systemUserBiz.updatePwd(dto);
+        return ApiResponse.success(null);
+    }
+
+    @ApiOperation("鑾峰彇褰撳墠鐧诲綍鐨勭敤鎴蜂俊鎭�")
+    @GetMapping("/getUserInfo")
+    public ApiResponse<LoginUserInfo> getUserInfo () {
+        return ApiResponse.success(this.getLoginUser());
+    }
+}
diff --git a/server/meeting/meeting_admin/src/main/java/com/doumee/api/system/SystemDataPermissionController.java b/server/meeting/meeting_admin/src/main/java/com/doumee/api/system/SystemDataPermissionController.java
new file mode 100644
index 0000000..fcb5b7c
--- /dev/null
+++ b/server/meeting/meeting_admin/src/main/java/com/doumee/api/system/SystemDataPermissionController.java
@@ -0,0 +1,106 @@
+package com.doumee.api.system;
+
+import com.doumee.api.BaseController;
+import com.doumee.biz.system.SystemDataPermissionBiz;
+import com.doumee.core.annotation.pr.PreventRepeat;
+import com.doumee.core.annotation.trace.Trace;
+import com.doumee.core.constants.DataPermissionConstants;
+import com.doumee.core.constants.OperaType;
+import com.doumee.core.model.ApiResponse;
+import com.doumee.core.model.PageData;
+import com.doumee.core.model.PageWrap;
+import com.doumee.dao.system.model.SystemDataPermission;
+import com.doumee.dao.system.vo.SystemDataPermissionListVO;
+import com.doumee.service.system.SystemDataPermissionService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.apache.shiro.authz.annotation.RequiresPermissions;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @author Eva.Caesar Liu
+ * @date 2023/03/21 14:49
+ */
+@RestController
+@RequestMapping("/system/dataPermission")
+@Api(tags = "绯荤粺鏁版嵁鏉冮檺")
+public class SystemDataPermissionController extends BaseController {
+
+    @Autowired
+    private SystemDataPermissionService systemDataPermissionService;
+
+    @Autowired
+    private SystemDataPermissionBiz systemDataPermissionBiz;
+
+    @PreventRepeat
+    @ApiOperation("鏂板缓")
+    @PostMapping("/create")
+    @RequiresPermissions("system:datapermission:create")
+    public ApiResponse create(@Validated(OperaType.Create.class) @RequestBody SystemDataPermission systemDataPermission) {
+        return ApiResponse.success(systemDataPermissionBiz.create(systemDataPermission));
+    }
+
+    @ApiOperation("鏍规嵁ID鍒犻櫎")
+    @GetMapping("/delete/{id}")
+    @RequiresPermissions("system:datapermission:delete")
+    public ApiResponse deleteById(@PathVariable Integer id) {
+        systemDataPermissionService.deleteById(id);
+        return ApiResponse.success(null);
+    }
+
+    @ApiOperation("鎵归噺鍒犻櫎")
+    @GetMapping("/delete/batch")
+    @RequiresPermissions("system:datapermission:delete")
+    public ApiResponse deleteByIdInBatch(@RequestParam String ids) {
+        String [] idArray = ids.split(",");
+        List<Integer> idList = new ArrayList<>();
+        for (String id : idArray) {
+            idList.add(Integer.valueOf(id));
+        }
+        systemDataPermissionService.deleteByIdInBatch(idList);
+        return ApiResponse.success(null);
+    }
+
+    @ApiOperation("淇敼")
+    @PostMapping("/updateById")
+    @RequiresPermissions("system:datapermission:update")
+    public ApiResponse updateById(@Validated(OperaType.Update.class) @RequestBody SystemDataPermission systemDataPermission) {
+        systemDataPermissionBiz.update(systemDataPermission);
+        return ApiResponse.success(null);
+    }
+
+    @ApiOperation("淇敼鐘舵��")
+    @PostMapping("/updateStatus")
+    @RequiresPermissions("system:datapermission:update")
+    public ApiResponse updateStatus(@Validated(OperaType.UpdateStatus.class) @RequestBody SystemDataPermission systemDataPermission) {
+        systemDataPermissionBiz.updateStatus(systemDataPermission);
+        return ApiResponse.success(null);
+    }
+
+    @ApiOperation("鍒嗛〉鏌ヨ")
+    @PostMapping("/page")
+    @RequiresPermissions("system:datapermission:query")
+    public ApiResponse<PageData<SystemDataPermissionListVO>> findPage (@RequestBody PageWrap<SystemDataPermission> pageWrap) {
+        return ApiResponse.success(systemDataPermissionService.findPage(pageWrap));
+    }
+
+    @Trace(exclude = true)
+    @ApiOperation("鏌ヨ鏁版嵁鏉冮檺绫诲瀷")
+    @GetMapping("/types")
+    public ApiResponse<List<Map<String, Object>>> findTypes () {
+        return ApiResponse.success(DataPermissionConstants.Type.valueList());
+    }
+
+    @Trace(exclude = true)
+    @ApiOperation("鏌ヨ鏁版嵁鏉冮檺妯″潡")
+    @GetMapping("/modules")
+    public ApiResponse<List<Map<String, Object>>> findModules () {
+        return ApiResponse.success(DataPermissionConstants.Module.valueList());
+    }
+}
diff --git a/server/meeting/meeting_admin/src/main/java/com/doumee/api/system/SystemDepartmentController.java b/server/meeting/meeting_admin/src/main/java/com/doumee/api/system/SystemDepartmentController.java
new file mode 100644
index 0000000..f013ef7
--- /dev/null
+++ b/server/meeting/meeting_admin/src/main/java/com/doumee/api/system/SystemDepartmentController.java
@@ -0,0 +1,109 @@
+package com.doumee.api.system;
+
+import com.doumee.api.BaseController;
+import com.doumee.biz.system.SystemDepartmentBiz;
+import com.doumee.core.annotation.pr.PreventRepeat;
+import com.doumee.core.annotation.trace.Trace;
+import com.doumee.core.constants.OperaType;
+import com.doumee.core.model.ApiResponse;
+import com.doumee.core.model.PageData;
+import com.doumee.core.model.PageWrap;
+import com.doumee.dao.system.dto.QuerySystemUserDTO;
+import com.doumee.dao.system.model.SystemDepartment;
+import com.doumee.dao.system.vo.SystemDepartmentListVO;
+import com.doumee.dao.system.vo.SystemUserListVO;
+import com.doumee.service.system.SystemUserService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiImplicitParam;
+import io.swagger.annotations.ApiImplicitParams;
+import io.swagger.annotations.ApiOperation;
+import org.apache.shiro.authz.annotation.RequiresPermissions;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @author Eva.Caesar Liu
+ * @date 2023/03/21 14:49
+ */
+@Api(tags = "閮ㄩ棬")
+@RestController
+@RequestMapping("/system/department")
+public class SystemDepartmentController extends BaseController {
+
+    @Autowired
+    private SystemDepartmentBiz systemDepartmentBiz;
+
+    @Autowired
+    private SystemUserService systemUserService;
+
+    @PreventRepeat
+    @ApiOperation("鏂板缓")
+    @PostMapping("/create")
+    @RequiresPermissions("system:department:create")
+    public ApiResponse create(@Validated(OperaType.Create.class) @RequestBody SystemDepartment systemDepartment) {
+        systemDepartment.setCreateUser(getLoginUser().getId());
+        systemDepartment.setUpdateUser(getLoginUser().getId());
+        return ApiResponse.success(systemDepartmentBiz.create(systemDepartment));
+    }
+
+    @ApiOperation("鍒犻櫎")
+    @GetMapping("/delete/{id}")
+    @RequiresPermissions("system:department:delete")
+    public ApiResponse deleteById(@PathVariable Integer id) {
+        systemDepartmentBiz.deleteById(id);
+        return ApiResponse.success(null);
+    }
+
+    @ApiOperation("鎵归噺鍒犻櫎")
+    @GetMapping("/delete/batch")
+    @PreventRepeat
+    @RequiresPermissions("system:department:delete")
+    public ApiResponse deleteByIdInBatch(@RequestParam String ids) {
+        String [] idArray = ids.split(",");
+        List<Integer> idList = new ArrayList<>();
+        for (String id : idArray) {
+            idList.add(Integer.valueOf(id));
+        }
+        systemDepartmentBiz.deleteByIdInBatch(idList);
+        return ApiResponse.success(null);
+    }
+
+    @ApiOperation("淇敼")
+    @PostMapping("/updateById")
+    @RequiresPermissions("system:department:update")
+    public ApiResponse updateById(@Validated(OperaType.Update.class) @RequestBody SystemDepartment systemDepartment) {
+        systemDepartment.setCreateUser(getLoginUser().getId());
+        systemDepartment.setUpdateUser(getLoginUser().getId());
+        systemDepartmentBiz.updateById(systemDepartment);
+        return ApiResponse.success(null);
+    }
+
+    @ApiOperation("鏌ヨ閮ㄩ棬鍒楄〃")
+    @PostMapping("/tree")
+    @RequiresPermissions("system:department:query")
+    public ApiResponse<List<SystemDepartmentListVO>> findTree () {
+        return ApiResponse.success(systemDepartmentBiz.findTree());
+    }
+
+    @ApiOperation("鏌ヨ閮ㄩ棬鍒楄〃鍙婇儴闂ㄤ笅鐨勪汉鍛�")
+    @GetMapping("/findTreeUser")
+    @RequiresPermissions("system:department:query")
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "parentId", value = "parentId", paramType = "query", dataType = "Integer"),
+    })
+    public ApiResponse<SystemDepartmentListVO> findTreeUser(Integer parentId) {
+        return ApiResponse.success(systemDepartmentBiz.findTreeUser(parentId));
+    }
+
+    @Trace(exclude = true)
+    @ApiOperation("鏌ヨ閮ㄩ棬浜哄憳")
+    @PostMapping("/users")
+    @RequiresPermissions("system:department:queryUsers")
+    public ApiResponse<PageData<SystemUserListVO>> findPage (@RequestBody PageWrap<QuerySystemUserDTO> pageWrap) {
+        return ApiResponse.success(systemUserService.findPage(pageWrap));
+    }
+}
diff --git a/server/meeting/meeting_admin/src/main/java/com/doumee/api/system/SystemDictController.java b/server/meeting/meeting_admin/src/main/java/com/doumee/api/system/SystemDictController.java
new file mode 100644
index 0000000..71a297a
--- /dev/null
+++ b/server/meeting/meeting_admin/src/main/java/com/doumee/api/system/SystemDictController.java
@@ -0,0 +1,82 @@
+package com.doumee.api.system;
+
+import com.doumee.api.BaseController;
+import com.doumee.biz.system.SystemDictBiz;
+import com.doumee.core.annotation.pr.PreventRepeat;
+import com.doumee.core.constants.OperaType;
+import com.doumee.core.model.ApiResponse;
+import com.doumee.core.model.PageData;
+import com.doumee.core.model.PageWrap;
+import com.doumee.dao.system.dto.QuerySystemDictDTO;
+import com.doumee.dao.system.model.SystemDict;
+import com.doumee.dao.system.vo.SystemDictListVO;
+import com.doumee.service.system.SystemDictService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.apache.shiro.authz.annotation.RequiresPermissions;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @author Eva.Caesar Liu
+ * @date 2023/03/21 14:49
+ */
+@Api(tags = "绯荤粺瀛楀吀")
+@RestController
+@RequestMapping("/system/dict")
+public class SystemDictController extends BaseController {
+
+    @Autowired
+    private SystemDictService systemDictService;
+
+    @Autowired
+    private SystemDictBiz systemDictBiz;
+
+    @PreventRepeat
+    @ApiOperation("鏂板缓")
+    @PostMapping("/create")
+    @RequiresPermissions("system:dict:create")
+    public ApiResponse create(@Validated(OperaType.Create.class) @RequestBody SystemDict systemDict) {
+        return ApiResponse.success(systemDictBiz.create(systemDict));
+    }
+
+    @ApiOperation("鍒犻櫎")
+    @GetMapping("/delete/{id}")
+    @RequiresPermissions("system:dict:delete")
+    public ApiResponse deleteById(@PathVariable Integer id) {
+        systemDictService.deleteById(id);
+        return ApiResponse.success(null);
+    }
+
+    @ApiOperation("鎵归噺鍒犻櫎")
+    @GetMapping("/delete/batch")
+    @RequiresPermissions("system:dict:delete")
+    public ApiResponse deleteByIdInBatch(@RequestParam String ids) {
+        String [] idArray = ids.split(",");
+        List<Integer> idList = new ArrayList<>();
+        for (String id : idArray) {
+            idList.add(Integer.valueOf(id));
+        }
+        systemDictService.deleteByIdInBatch(idList);
+        return ApiResponse.success(null);
+    }
+
+    @ApiOperation("淇敼")
+    @PostMapping("/updateById")
+    @RequiresPermissions("system:dict:update")
+    public ApiResponse updateById(@Validated(OperaType.Update.class) @RequestBody SystemDict systemDict) {
+        systemDictBiz.updateById(systemDict);
+        return ApiResponse.success(null);
+    }
+
+    @ApiOperation("鍒嗛〉鏌ヨ")
+    @PostMapping("/page")
+    @RequiresPermissions("system:dict:query")
+    public ApiResponse<PageData<SystemDictListVO>> findPage (@RequestBody PageWrap<QuerySystemDictDTO> pageWrap) {
+        return ApiResponse.success(systemDictService.findPage(pageWrap));
+    }
+}
diff --git a/server/meeting/meeting_admin/src/main/java/com/doumee/api/system/SystemDictDataController.java b/server/meeting/meeting_admin/src/main/java/com/doumee/api/system/SystemDictDataController.java
new file mode 100644
index 0000000..1b44045
--- /dev/null
+++ b/server/meeting/meeting_admin/src/main/java/com/doumee/api/system/SystemDictDataController.java
@@ -0,0 +1,97 @@
+package com.doumee.api.system;
+
+import com.doumee.api.BaseController;
+import com.doumee.biz.system.SystemDictDataBiz;
+import com.doumee.core.annotation.pr.PreventRepeat;
+import com.doumee.core.constants.OperaType;
+import com.doumee.core.model.ApiResponse;
+import com.doumee.core.model.PageData;
+import com.doumee.core.model.PageWrap;
+import com.doumee.dao.system.dto.QuerySystemDictDataDTO;
+import com.doumee.dao.system.model.SystemDictData;
+import com.doumee.dao.system.vo.SystemDictDataListVO;
+import com.doumee.service.system.SystemDictDataService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiImplicitParam;
+import io.swagger.annotations.ApiImplicitParams;
+import io.swagger.annotations.ApiOperation;
+import org.apache.shiro.authz.annotation.RequiresPermissions;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @author Eva.Caesar Liu
+ * @date 2023/03/21 14:49
+ */
+@Api(tags = "瀛楀吀鏁版嵁")
+@RestController
+@RequestMapping("/system/dictData")
+public class SystemDictDataController extends BaseController {
+
+    @Autowired
+    private SystemDictDataService systemDictDataService;
+
+    @Autowired
+    private SystemDictDataBiz systemDictDataBiz;
+
+    @PreventRepeat
+    @ApiOperation("鏂板缓")
+    @PostMapping("/create")
+    @RequiresPermissions("system:dict:update")
+    public ApiResponse create(@Validated(OperaType.Create.class) @RequestBody SystemDictData systemDictData) {
+        return ApiResponse.success(systemDictDataBiz.create(systemDictData));
+    }
+
+    @ApiOperation("鍒犻櫎")
+    @GetMapping("/delete/{id}")
+    @RequiresPermissions("system:dict:update")
+    public ApiResponse deleteById(@PathVariable Integer id) {
+        systemDictDataService.deleteById(id);
+        return ApiResponse.success(null);
+    }
+
+    @ApiOperation("鎵归噺鍒犻櫎")
+    @GetMapping("/delete/batch")
+    @RequiresPermissions("system:dict:delete")
+    public ApiResponse deleteByIdInBatch(@RequestParam String ids) {
+        String [] idArray = ids.split(",");
+        List<Integer> idList = new ArrayList<>();
+        for (String id : idArray) {
+            idList.add(Integer.valueOf(id));
+        }
+        systemDictDataService.deleteByIdInBatch(idList);
+        return ApiResponse.success(null);
+    }
+
+    @ApiOperation("淇敼")
+    @PostMapping("/updateById")
+    @RequiresPermissions("system:dict:update")
+    public ApiResponse updateById(@Validated(OperaType.Update.class) @RequestBody SystemDictData systemDictData) {
+        systemDictDataBiz.updateById(systemDictData);
+        return ApiResponse.success(null);
+    }
+
+    @ApiOperation("鍒嗛〉鏌ヨ")
+    @PostMapping("/page")
+    @RequiresPermissions("system:dict:update")
+    public ApiResponse<PageData<SystemDictDataListVO>> findPage (@RequestBody PageWrap<QuerySystemDictDataDTO> pageWrap) {
+        return ApiResponse.success(systemDictDataService.findPage(pageWrap));
+    }
+
+
+    @ApiOperation(value = "鏌ヨ瀛楀吀鍊兼暟鎹�" )
+    @GetMapping("/getSystemDictData")
+    @ApiImplicitParams({
+            @ApiImplicitParam(paramType = "query", dataType = "String", name = "label", value = "鏁版嵁瀛楀吀鍊糎5_LINK_ADDR", required = true),
+            @ApiImplicitParam(paramType = "query", dataType = "String", name = "dictCode", value = "绯荤粺瀛楀吀鍊糞YSTEM", required = true)
+    })
+    public ApiResponse<SystemDictData> getSystemDictData(@RequestParam String dictCode, @RequestParam String label) {
+        return ApiResponse.success(systemDictDataBiz.queryByCode(dictCode,label));
+    }
+
+
+}
diff --git a/server/meeting/meeting_admin/src/main/java/com/doumee/api/system/SystemLoginLogController.java b/server/meeting/meeting_admin/src/main/java/com/doumee/api/system/SystemLoginLogController.java
new file mode 100644
index 0000000..3949e25
--- /dev/null
+++ b/server/meeting/meeting_admin/src/main/java/com/doumee/api/system/SystemLoginLogController.java
@@ -0,0 +1,47 @@
+package com.doumee.api.system;
+
+import com.doumee.api.BaseController;
+import com.doumee.core.annotation.excel.ExcelExporter;
+import com.doumee.core.model.ApiResponse;
+import com.doumee.core.model.PageData;
+import com.doumee.core.model.PageWrap;
+import com.doumee.dao.system.dto.QuerySystemLoginLogDTO;
+import com.doumee.dao.system.model.SystemLoginLog;
+import com.doumee.service.system.SystemLoginLogService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.apache.shiro.authz.annotation.RequiresPermissions;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.servlet.http.HttpServletResponse;
+
+/**
+ * @author Eva.Caesar Liu
+ * @date 2023/03/21 14:49
+ */
+@RestController
+@RequestMapping("/system/loginLog")
+@Api(tags = "鐧诲綍鏃ュ織")
+public class SystemLoginLogController extends BaseController {
+
+    @Autowired
+    private SystemLoginLogService systemLoginLogService;
+
+    @PostMapping("/page")
+    @ApiOperation("鍒嗛〉鏌ヨ")
+    @RequiresPermissions("system:loginLog:query")
+    public ApiResponse<PageData<SystemLoginLog>> findPage (@RequestBody PageWrap<QuerySystemLoginLogDTO> pageWrap) {
+        return ApiResponse.success(systemLoginLogService.findPage(pageWrap));
+    }
+
+    @PostMapping("/exportExcel")
+    @ApiOperation("瀵煎嚭Excel")
+    @RequiresPermissions("system:loginLog:query")
+    public void export (@RequestBody PageWrap<QuerySystemLoginLogDTO> pageWrap, HttpServletResponse response) {
+        ExcelExporter.build(SystemLoginLog.class).export(systemLoginLogService.findPage(pageWrap).getRecords(), "鐧诲綍鏃ュ織", response);
+    }
+}
diff --git a/server/meeting/meeting_admin/src/main/java/com/doumee/api/system/SystemMenuController.java b/server/meeting/meeting_admin/src/main/java/com/doumee/api/system/SystemMenuController.java
new file mode 100644
index 0000000..5e4cf01
--- /dev/null
+++ b/server/meeting/meeting_admin/src/main/java/com/doumee/api/system/SystemMenuController.java
@@ -0,0 +1,100 @@
+package com.doumee.api.system;
+
+import com.doumee.api.BaseController;
+import com.doumee.biz.system.SystemMenuBiz;
+import com.doumee.core.annotation.pr.PreventRepeat;
+import com.doumee.core.constants.OperaType;
+import com.doumee.core.model.ApiResponse;
+import com.doumee.dao.system.dto.UpdateSystemMenuSortDTO;
+import com.doumee.dao.system.model.SystemMenu;
+import com.doumee.dao.system.vo.SystemMenuListVO;
+import com.doumee.dao.system.vo.SystemMenuNodeVO;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.apache.shiro.authz.annotation.RequiresPermissions;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @author Eva.Caesar Liu
+ * @date 2023/03/21 14:49
+ */
+@Api(tags = "绯荤粺鑿滃崟")
+@RestController
+@RequestMapping("/system/menu")
+public class SystemMenuController extends BaseController {
+
+    @Autowired
+    private SystemMenuBiz systemMenuBiz;
+
+    @ApiOperation("鑿滃崟鎺掑簭")
+    @PostMapping("/updateSort")
+    @RequiresPermissions("system:menu:sort")
+    public ApiResponse updateSort (@Validated @RequestBody UpdateSystemMenuSortDTO dto) {
+        systemMenuBiz.updateSort(dto);
+        return ApiResponse.success(null);
+    }
+
+    @ApiOperation("鏌ヨ鑿滃崟鏍�")
+    @GetMapping("/treeNodes")
+    public ApiResponse<List<SystemMenuNodeVO>> getTreeMenu () {
+        return ApiResponse.success(systemMenuBiz.findTree(this.getLoginUser().getId()));
+    }
+
+    @ApiOperation("鏌ヨ鍒楄〃鏍�")
+    @PostMapping("/treeList")
+    @RequiresPermissions("system:menu:query")
+    public ApiResponse<List<SystemMenuListVO>> findTree () {
+        return ApiResponse.success(systemMenuBiz.findTree());
+    }
+
+    @PreventRepeat
+    @ApiOperation("鏂板缓")
+    @PostMapping("/create")
+    @RequiresPermissions("system:menu:create")
+    public ApiResponse create(@Validated(OperaType.Create.class) @RequestBody SystemMenu systemMenu) {
+        return ApiResponse.success(systemMenuBiz.create(systemMenu));
+    }
+
+    @ApiOperation("鍒犻櫎")
+    @GetMapping("/delete/{id}")
+    @RequiresPermissions("system:menu:delete")
+    public ApiResponse deleteById(@PathVariable Integer id) {
+        systemMenuBiz.deleteById(id);
+        return ApiResponse.success(null);
+    }
+
+    @ApiOperation("鎵归噺鍒犻櫎")
+    @GetMapping("/delete/batch")
+    @RequiresPermissions("system:menu:delete")
+    public ApiResponse deleteByIdInBatch(@RequestParam String ids) {
+        String [] idArray = ids.split(",");
+        List<Integer> idList = new ArrayList<>();
+        for (String id : idArray) {
+            idList.add(Integer.valueOf(id));
+        }
+        systemMenuBiz.deleteByIdInBatch(idList);
+        return ApiResponse.success(null);
+    }
+
+    @ApiOperation("淇敼")
+    @PostMapping("/updateById")
+    @RequiresPermissions("system:menu:update")
+    public ApiResponse updateById(@Validated(OperaType.Update.class) @RequestBody SystemMenu systemMenu) {
+        systemMenuBiz.updateById(systemMenu);
+        return ApiResponse.success(null);
+    }
+
+    @ApiOperation("淇敼鑿滃崟鐘舵��")
+    @PostMapping("/updateStatus")
+    @RequiresPermissions("system:menu:update")
+    public ApiResponse updateStatus(@Validated(OperaType.UpdateStatus.class) @RequestBody SystemMenu systemMenu) {
+        systemMenuBiz.updateById(systemMenu);
+        return ApiResponse.success(null);
+    }
+
+}
diff --git a/server/meeting/meeting_admin/src/main/java/com/doumee/api/system/SystemMonitorController.java b/server/meeting/meeting_admin/src/main/java/com/doumee/api/system/SystemMonitorController.java
new file mode 100644
index 0000000..b16d68b
--- /dev/null
+++ b/server/meeting/meeting_admin/src/main/java/com/doumee/api/system/SystemMonitorController.java
@@ -0,0 +1,31 @@
+package com.doumee.api.system;
+
+import com.doumee.api.BaseController;
+import com.doumee.core.annotation.trace.Trace;
+import com.doumee.core.model.ApiResponse;
+import com.doumee.core.utils.Monitor;
+import com.doumee.core.utils.Utils;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.apache.shiro.authz.annotation.RequiresPermissions;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * @author Eva.Caesar Liu
+ * @date 2023/03/21 14:49
+ */
+@Api(tags = "绯荤粺鐩戝惉")
+@Trace(exclude = true)
+@RestController
+@RequestMapping("/system/monitor")
+public class SystemMonitorController extends BaseController {
+
+    @ApiOperation("鑾峰彇绯荤粺淇℃伅")
+    @GetMapping("/getSystemInfo")
+    @RequiresPermissions("system:monitor:query")
+    public ApiResponse<Monitor> getSystemInfo () {
+        return ApiResponse.success(Utils.Monitor.current());
+    }
+}
diff --git a/server/meeting/meeting_admin/src/main/java/com/doumee/api/system/SystemPermissionController.java b/server/meeting/meeting_admin/src/main/java/com/doumee/api/system/SystemPermissionController.java
new file mode 100644
index 0000000..327e24a
--- /dev/null
+++ b/server/meeting/meeting_admin/src/main/java/com/doumee/api/system/SystemPermissionController.java
@@ -0,0 +1,91 @@
+package com.doumee.api.system;
+
+import com.doumee.api.BaseController;
+import com.doumee.biz.system.SystemPermissionBiz;
+import com.doumee.core.annotation.pr.PreventRepeat;
+import com.doumee.core.constants.OperaType;
+import com.doumee.core.model.ApiResponse;
+import com.doumee.core.model.PageData;
+import com.doumee.core.model.PageWrap;
+import com.doumee.dao.system.dto.QuerySystemPermissionDTO;
+import com.doumee.dao.system.model.SystemPermission;
+import com.doumee.dao.system.vo.SystemPermissionListVO;
+import com.doumee.service.system.SystemPermissionService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.apache.shiro.authz.annotation.RequiresPermissions;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @author Eva.Caesar Liu
+ * @date 2023/03/21 14:49
+ */
+@Api(tags = "绯荤粺鏉冮檺")
+@RestController
+@RequestMapping("/system/permission")
+public class SystemPermissionController extends BaseController {
+
+    @Autowired
+    private SystemPermissionService systemPermissionService;
+
+    @Autowired
+    private SystemPermissionBiz systemPermissionBiz;
+
+    @PreventRepeat
+    @ApiOperation("鏂板缓")
+    @PostMapping("/create")
+    @RequiresPermissions("system:permission:create")
+    public ApiResponse create(@Validated(OperaType.Create.class) @RequestBody SystemPermission systemPermission) {
+        return ApiResponse.success(systemPermissionBiz.create(systemPermission));
+    }
+
+    @ApiOperation("鍒犻櫎")
+    @GetMapping("/delete/{id}")
+    @RequiresPermissions("system:permission:delete")
+    public ApiResponse deleteById(@PathVariable Integer id) {
+        systemPermissionBiz.deleteById(id);
+        return ApiResponse.success(null);
+    }
+
+    @ApiOperation("鎵归噺鍒犻櫎")
+    @GetMapping("/delete/batch")
+    @RequiresPermissions("system:permission:delete")
+    public ApiResponse deleteByIdInBatch(@RequestParam String ids) {
+        String [] idArray = ids.split(",");
+        List<Integer> idList = new ArrayList<>();
+        for (String id : idArray) {
+            idList.add(Integer.valueOf(id));
+        }
+        systemPermissionBiz.deleteByIdInBatch(idList);
+        return ApiResponse.success(null);
+    }
+
+    @ApiOperation("淇敼")
+    @PostMapping("/updateById")
+    @RequiresPermissions("system:permission:update")
+    public ApiResponse updateById(@Validated(OperaType.Update.class) @RequestBody SystemPermission systemPermission) {
+        systemPermissionBiz.updateById(systemPermission);
+        return ApiResponse.success(null);
+    }
+
+    @ApiOperation("鍒嗛〉鏌ヨ")
+    @PostMapping("/page")
+    @RequiresPermissions("system:permission:query")
+    public ApiResponse<PageData<SystemPermissionListVO>> findPage (@RequestBody PageWrap<QuerySystemPermissionDTO> pageWrap) {
+        return ApiResponse.success(systemPermissionService.findPage(pageWrap));
+    }
+
+    @ApiOperation("鏌ヨ鎵�鏈�")
+    @GetMapping("/all")
+    @RequiresPermissions("system:permission:query")
+    public ApiResponse<List<SystemPermission>> findAll () {
+        SystemPermission systemPermission = new SystemPermission();
+        systemPermission.setDeleted(Boolean.FALSE);
+        return ApiResponse.success(systemPermissionService.findList(systemPermission));
+    }
+}
diff --git a/server/meeting/meeting_admin/src/main/java/com/doumee/api/system/SystemPositionController.java b/server/meeting/meeting_admin/src/main/java/com/doumee/api/system/SystemPositionController.java
new file mode 100644
index 0000000..4670e06
--- /dev/null
+++ b/server/meeting/meeting_admin/src/main/java/com/doumee/api/system/SystemPositionController.java
@@ -0,0 +1,106 @@
+package com.doumee.api.system;
+
+import com.doumee.api.BaseController;
+import com.doumee.biz.system.SystemPositionBiz;
+import com.doumee.core.annotation.pr.PreventRepeat;
+import com.doumee.core.annotation.trace.Trace;
+import com.doumee.core.constants.OperaType;
+import com.doumee.core.model.ApiResponse;
+import com.doumee.core.model.PageData;
+import com.doumee.core.model.PageWrap;
+import com.doumee.dao.system.dto.QuerySystemUserDTO;
+import com.doumee.dao.system.model.SystemPosition;
+import com.doumee.dao.system.vo.SystemPositionListVO;
+import com.doumee.dao.system.vo.SystemUserListVO;
+import com.doumee.service.system.SystemPositionService;
+import com.doumee.service.system.SystemUserService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.apache.shiro.authz.annotation.RequiresPermissions;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * 宀椾綅鎺ュ彛
+ * @author Eva.Caesar Liu
+ * @date 2023/03/21 14:49
+ */
+@Api(tags = "宀椾綅")
+@RestController
+@RequestMapping("/system/position")
+public class SystemPositionController extends BaseController {
+
+    @Autowired
+    private SystemPositionService systemPositionService;
+
+    @Autowired
+    private SystemPositionBiz systemPositionBiz;
+
+    @Autowired
+    private SystemUserService systemUserService;
+
+    @PreventRepeat
+    @ApiOperation("鏂板缓")
+    @PostMapping("/create")
+    @RequiresPermissions("system:position:create")
+    public ApiResponse create(@Validated(OperaType.Create.class) @RequestBody SystemPosition systemPosition) {
+        return ApiResponse.success(systemPositionBiz.create(systemPosition));
+    }
+
+    @ApiOperation("鍒犻櫎")
+    @GetMapping("/delete/{id}")
+    @RequiresPermissions("system:position:delete")
+    public ApiResponse deleteById(@PathVariable Integer id) {
+        systemPositionBiz.deleteById(id);
+        return ApiResponse.success(null);
+    }
+
+    @ApiOperation("鎵归噺鍒犻櫎")
+    @GetMapping("/delete/batch")
+    @RequiresPermissions("system:position:delete")
+    public ApiResponse deleteByIdInBatch(@RequestParam String ids) {
+        String [] idArray = ids.split(",");
+        List<Integer> idList = new ArrayList<>();
+        for (String id : idArray) {
+            idList.add(Integer.valueOf(id));
+        }
+        systemPositionBiz.deleteByIdInBatch(idList);
+        return ApiResponse.success(null);
+    }
+
+    @ApiOperation("淇敼")
+    @PostMapping("/updateById")
+    @RequiresPermissions("system:position:update")
+    public ApiResponse updateById(@Validated(OperaType.Update.class) @RequestBody SystemPosition systemPosition) {
+        systemPositionBiz.updateById(systemPosition);
+        return ApiResponse.success(null);
+    }
+
+    @ApiOperation("鏌ヨ宀椾綅鏍戝垪琛�")
+    @PostMapping("/tree")
+    @RequiresPermissions("system:position:query")
+    public ApiResponse<List<SystemPositionListVO>> findTree () {
+        return ApiResponse.success(systemPositionBiz.findTree());
+    }
+
+    @ApiOperation("鏌ヨ宀椾綅鍒楄〃")
+    @PostMapping("/all")
+    @RequiresPermissions("system:position:query")
+    public ApiResponse<List<SystemPosition>> findList () {
+        SystemPosition systemPosition = new SystemPosition();
+        systemPosition.setDeleted(Boolean.FALSE);
+        return ApiResponse.success(systemPositionService.findList(systemPosition));
+    }
+
+    @Trace(exclude = true)
+    @ApiOperation("鏌ヨ宀椾綅浜哄憳")
+    @PostMapping("/users")
+    @RequiresPermissions("system:position:queryUsers")
+    public ApiResponse<PageData<SystemUserListVO>> findPage (@RequestBody PageWrap<QuerySystemUserDTO> pageWrap) {
+        return ApiResponse.success(systemUserService.findPage(pageWrap));
+    }
+}
diff --git a/server/meeting/meeting_admin/src/main/java/com/doumee/api/system/SystemRoleController.java b/server/meeting/meeting_admin/src/main/java/com/doumee/api/system/SystemRoleController.java
new file mode 100644
index 0000000..a81ad34
--- /dev/null
+++ b/server/meeting/meeting_admin/src/main/java/com/doumee/api/system/SystemRoleController.java
@@ -0,0 +1,111 @@
+package com.doumee.api.system;
+
+import com.doumee.api.BaseController;
+import com.doumee.biz.system.SystemRoleBiz;
+import com.doumee.core.annotation.pr.PreventRepeat;
+import com.doumee.core.constants.OperaType;
+import com.doumee.core.model.ApiResponse;
+import com.doumee.core.model.PageData;
+import com.doumee.core.model.PageWrap;
+import com.doumee.dao.system.dto.CreateRoleMenuDTO;
+import com.doumee.dao.system.dto.CreateRolePermissionDTO;
+import com.doumee.dao.system.dto.QuerySystemRoleDTO;
+import com.doumee.dao.system.model.SystemRole;
+import com.doumee.dao.system.vo.SystemRoleListVO;
+import com.doumee.service.system.SystemRoleService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.apache.shiro.authz.annotation.RequiresPermissions;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @author Eva.Caesar Liu
+ * @date 2023/03/21 14:49
+ */
+@Api(tags = "绯荤粺瑙掕壊")
+@RestController
+@RequestMapping("/system/role")
+public class SystemRoleController extends BaseController {
+
+    @Autowired
+    private SystemRoleService systemRoleService;
+
+    @Autowired
+    private SystemRoleBiz systemRoleBiz;
+
+    @PreventRepeat
+    @ApiOperation("閰嶇疆瑙掕壊鑿滃崟")
+    @PostMapping("/createRoleMenu")
+    @RequiresPermissions("system:role:createRoleMenu")
+    public ApiResponse createRoleMenu (@Validated @RequestBody CreateRoleMenuDTO dto) {
+        systemRoleBiz.createRoleMenu(dto);
+        return ApiResponse.success(null);
+    }
+
+    @PreventRepeat
+    @ApiOperation("閰嶇疆瑙掕壊鏉冮檺")
+    @PostMapping("/createRolePermission")
+    @RequiresPermissions("system:role:createRolePermission")
+    public ApiResponse createRolePermission (@Validated @RequestBody CreateRolePermissionDTO dto) {
+        systemRoleBiz.createRolePermission(dto);
+        return ApiResponse.success(null);
+    }
+
+    @PreventRepeat
+    @ApiOperation("鏂板缓")
+    @PostMapping("/create")
+    @RequiresPermissions("system:role:create")
+    public ApiResponse create(@Validated(OperaType.Create.class) @RequestBody SystemRole systemRole) {
+        return ApiResponse.success(systemRoleBiz.create(systemRole));
+    }
+
+    @ApiOperation("鍒犻櫎")
+    @GetMapping("/delete/{id}")
+    @RequiresPermissions("system:role:delete")
+    public ApiResponse deleteById(@PathVariable Integer id) {
+        systemRoleBiz.deleteById(id);
+        return ApiResponse.success(null);
+    }
+
+    @ApiOperation("鎵归噺鍒犻櫎")
+    @GetMapping("/delete/batch")
+    @RequiresPermissions("system:role:delete")
+    public ApiResponse deleteByIdInBatch(@RequestParam String ids) {
+        String [] idArray = ids.split(",");
+        List<Integer> idList = new ArrayList<>();
+        for (String id : idArray) {
+            idList.add(Integer.valueOf(id));
+        }
+        systemRoleBiz.deleteByIdInBatch(idList);
+        return ApiResponse.success(null);
+    }
+
+    @ApiOperation("淇敼")
+    @PostMapping("/updateById")
+    @RequiresPermissions("system:role:update")
+    public ApiResponse updateById(@Validated(OperaType.Update.class) @RequestBody SystemRole systemRole) {
+        systemRoleBiz.updateById(systemRole);
+        return ApiResponse.success(null);
+    }
+
+    @ApiOperation("鍒嗛〉鏌ヨ")
+    @PostMapping("/page")
+    @RequiresPermissions("system:role:query")
+    public ApiResponse<PageData<SystemRoleListVO>> findPage (@RequestBody PageWrap<QuerySystemRoleDTO> pageWrap) {
+        return ApiResponse.success(systemRoleService.findPage(pageWrap));
+    }
+
+    @ApiOperation("鏌ヨ鎵�鏈�")
+    @GetMapping("/all")
+    @RequiresPermissions("system:role:query")
+    public ApiResponse<List<SystemRole>> findAll () {
+        SystemRole systemRole = new SystemRole();
+        systemRole.setDeleted(Boolean.FALSE);
+        return ApiResponse.success(systemRoleService.findList(systemRole));
+    }
+}
diff --git a/server/meeting/meeting_admin/src/main/java/com/doumee/api/system/SystemTraceLogController.java b/server/meeting/meeting_admin/src/main/java/com/doumee/api/system/SystemTraceLogController.java
new file mode 100644
index 0000000..e4745dc
--- /dev/null
+++ b/server/meeting/meeting_admin/src/main/java/com/doumee/api/system/SystemTraceLogController.java
@@ -0,0 +1,46 @@
+package com.doumee.api.system;
+
+import com.doumee.api.BaseController;
+import com.doumee.core.annotation.excel.ExcelExporter;
+import com.doumee.core.model.ApiResponse;
+import com.doumee.core.model.PageWrap;
+import com.doumee.dao.system.dto.QuerySystemTraceLogDTO;
+import com.doumee.dao.system.model.SystemTraceLog;
+import com.doumee.service.system.SystemTraceLogService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.apache.shiro.authz.annotation.RequiresPermissions;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.servlet.http.HttpServletResponse;
+
+/**
+ * @author Eva.Caesar Liu
+ * @date 2023/03/21 14:49
+ */
+@Api(tags = "璺熻釜鏃ュ織")
+@RestController
+@RequestMapping("/system/traceLog")
+public class SystemTraceLogController extends BaseController {
+
+    @Autowired
+    private SystemTraceLogService systemTraceLogService;
+
+    @ApiOperation("鍒嗛〉鏌ヨ")
+    @PostMapping("/page")
+    @RequiresPermissions("system:traceLog:query")
+    public ApiResponse findPage (@RequestBody PageWrap<QuerySystemTraceLogDTO> pageWrap) {
+        return ApiResponse.success(systemTraceLogService.findPage(pageWrap));
+    }
+
+    @ApiOperation("瀵煎嚭Excel")
+    @PostMapping("/exportExcel")
+    @RequiresPermissions("system:traceLog:query")
+    public void exportExcel (@RequestBody PageWrap<QuerySystemTraceLogDTO> pageWrap, HttpServletResponse response) {
+        ExcelExporter.build(SystemTraceLog.class).export(systemTraceLogService.findPage(pageWrap).getRecords(), "鎿嶄綔鏃ュ織", response);
+    }
+}
diff --git a/server/meeting/meeting_admin/src/main/java/com/doumee/api/system/SystemUserController.java b/server/meeting/meeting_admin/src/main/java/com/doumee/api/system/SystemUserController.java
new file mode 100644
index 0000000..a2cca7e
--- /dev/null
+++ b/server/meeting/meeting_admin/src/main/java/com/doumee/api/system/SystemUserController.java
@@ -0,0 +1,141 @@
+package com.doumee.api.system;
+
+import com.doumee.api.BaseController;
+import com.doumee.biz.system.SystemUserBiz;
+import com.doumee.core.annotation.pr.PreventRepeat;
+import com.doumee.core.annotation.trace.Trace;
+import com.doumee.core.constants.OperaType;
+import com.doumee.core.model.ApiResponse;
+import com.doumee.core.model.PageData;
+import com.doumee.core.model.PageWrap;
+import com.doumee.dao.system.dto.CreateSystemUserDTO;
+import com.doumee.dao.system.dto.CreateUserRoleDTO;
+import com.doumee.dao.system.dto.QuerySystemUserDTO;
+import com.doumee.dao.system.dto.ResetSystemUserPwdDTO;
+import com.doumee.dao.system.model.SystemUser;
+import com.doumee.dao.system.vo.SystemUserListVO;
+import com.doumee.service.system.SystemUserService;
+import io.swagger.annotations.*;
+import org.apache.shiro.authz.annotation.RequiresPermissions;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @author Eva.Caesar Liu
+ * @date 2023/03/21 14:49
+ */
+@Api(tags = "鐢ㄦ埛")
+@RestController
+@RequestMapping("/system/user")
+public class SystemUserController extends BaseController {
+
+    @Autowired
+    private SystemUserService systemUserService;
+
+    @Autowired
+    private SystemUserBiz systemUserBiz;
+
+    @PreventRepeat
+    @ApiOperation("閰嶇疆鐢ㄦ埛瑙掕壊")
+    @PostMapping("/createUserRole")
+    @RequiresPermissions("system:user:createUserRole")
+    public ApiResponse createUserRole (@Validated @RequestBody CreateUserRoleDTO dto) {
+        systemUserBiz.createUserRole(dto);
+        return ApiResponse.success(null);
+    }
+
+    @Trace(withRequestParameters = false)
+    @PreventRepeat
+    @ApiOperation("閲嶇疆鐢ㄦ埛瀵嗙爜")
+    @PostMapping("/resetPwd")
+    @RequiresPermissions("system:user:resetPwd")
+    public ApiResponse resetPwd (@Validated @RequestBody ResetSystemUserPwdDTO dto) {
+        dto.setOperaUserId(this.getLoginUser().getId());
+        systemUserBiz.resetPwd(dto);
+        return ApiResponse.success(null);
+    }
+
+    @Trace(withRequestParameters = false)
+    @PreventRepeat
+    @ApiOperation("鏂板缓")
+    @PostMapping("/create")
+    @RequiresPermissions("system:user:create")
+    public ApiResponse create(@Validated(OperaType.Create.class) @RequestBody CreateSystemUserDTO systemUser) {
+        systemUser.setCreateUser(this.getLoginUser().getId());
+        systemUserBiz.create(systemUser);
+        return ApiResponse.success(null);
+    }
+
+    @ApiOperation("鍒犻櫎")
+    @GetMapping("/delete/{id}")
+    @RequiresPermissions("system:user:delete")
+    public ApiResponse deleteById(@PathVariable Integer id) {
+        systemUserBiz.deleteById(id);
+        return ApiResponse.success(null);
+    }
+
+    @ApiOperation("鎵归噺鍒犻櫎")
+    @GetMapping("/delete/batch")
+    @RequiresPermissions("system:user:delete")
+    public ApiResponse deleteByIdInBatch(@RequestParam String ids) {
+        String [] idArray = ids.split(",");
+        List<Integer> idList = new ArrayList<>();
+        for (String id : idArray) {
+            idList.add(Integer.valueOf(id));
+        }
+        systemUserBiz.deleteByIdInBatch(idList);
+        return ApiResponse.success(null);
+    }
+
+    @Trace(withRequestParameters = false)
+    @ApiOperation("淇敼")
+    @PostMapping("/updateById")
+    @RequiresPermissions("system:user:update")
+    public ApiResponse updateById( @RequestBody CreateSystemUserDTO systemUser) {
+        systemUser.setUpdateUser(this.getLoginUser().getId());
+        systemUserBiz.updateById(systemUser);
+        return ApiResponse.success(null);
+    }
+
+    @ApiOperation("鍒嗛〉鏌ヨ")
+    @PostMapping("/page")
+    @RequiresPermissions("system:user:query")
+    public ApiResponse<PageData<SystemUserListVO>> findPage (@RequestBody PageWrap<QuerySystemUserDTO> pageWrap) {
+        return ApiResponse.success(systemUserService.findPage(pageWrap));
+    }
+
+
+
+
+
+    @ApiOperation("鏌ヨ鎵�鏈夌郴缁熺敤鎴�")
+    @PostMapping("/findAllList")
+    @RequiresPermissions("system:user:query")
+    public ApiResponse<List<SystemUser>> findAllList (@RequestBody SystemUser pageWrap) {
+        return ApiResponse.success(systemUserService.findAllList(pageWrap));
+    }
+
+
+    @ApiOperation("鏍规嵁ID鏌ヨ")
+    @GetMapping("/{id}")
+    @RequiresPermissions("system:user:query")
+    public ApiResponse findById(@PathVariable Integer id) {
+        return ApiResponse.success(systemUserService.findById(id));
+    }
+
+    @ApiOperation("鐢ㄦ埛瀵煎叆")
+    @PostMapping("/importSystemUserBatch")
+    @RequiresPermissions("system:user:query")
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "file", value = "file", required = true, paramType = "query", dataType = "file", dataTypeClass = File.class),
+    })
+    public ApiResponse importSystemUserBatch(@ApiParam(value = "file") MultipartFile file){
+        return ApiResponse.success(systemUserBiz.importSystemUserBatch(file));
+    }
+}
diff --git a/server/system_service/src/main/java/com/doumee/api/timer/QuartzController.java b/server/meeting/meeting_admin/src/main/java/com/doumee/api/timer/QuartzController.java
similarity index 100%
copy from server/system_service/src/main/java/com/doumee/api/timer/QuartzController.java
copy to server/meeting/meeting_admin/src/main/java/com/doumee/api/timer/QuartzController.java
diff --git a/server/meeting/meeting_admin/src/main/java/com/doumee/config/shiro/ShiroConfig.java b/server/meeting/meeting_admin/src/main/java/com/doumee/config/shiro/ShiroConfig.java
index bd5138b..155b705 100644
--- a/server/meeting/meeting_admin/src/main/java/com/doumee/config/shiro/ShiroConfig.java
+++ b/server/meeting/meeting_admin/src/main/java/com/doumee/config/shiro/ShiroConfig.java
@@ -80,6 +80,7 @@
         map.put("/webjars/**", "anon");
         map.put("/swagger-resources/**", "anon");
         map.put("/v2/api-docs/**", "anon");
+        map.put("/swagger-ui/**", "anon");
         map.put("/wgListener/**", "anon");
         // - 鍏朵粬鎺ュ彛缁熶竴鎷︽埅
         map.put("/**", "authc");
diff --git a/server/meeting/meeting_admin/src/main/java/com/doumee/config/swagger/SwaggerConfig.java b/server/meeting/meeting_admin/src/main/java/com/doumee/config/swagger/SwaggerConfig.java
index ea763a8..b150aea 100644
--- a/server/meeting/meeting_admin/src/main/java/com/doumee/config/swagger/SwaggerConfig.java
+++ b/server/meeting/meeting_admin/src/main/java/com/doumee/config/swagger/SwaggerConfig.java
@@ -3,6 +3,7 @@
 import com.github.xiaoymin.knife4j.spring.annotations.EnableKnife4j;
 import com.google.common.base.Function;
 import com.google.common.base.Optional;
+import lombok.AllArgsConstructor;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Configuration;
@@ -46,7 +47,7 @@
                 .version(version)
                 .build();
     }
-    @Bean
+ /*   @Bean
     public Docket getDocket() {
         return new Docket(DocumentationType.SWAGGER_2)
                 .apiInfo(this.getApiInfo()).groupName("銆愮郴缁熺鐞嗘帴鍙PI銆�")
@@ -57,20 +58,20 @@
 //                .apis(RequestHandlerSelectors.withClassAnnotation(Api.class))
                 .paths(PathSelectors.any())
                 .build();
-    }
+    }*/
     @Bean
     public Docket getDocket2() {
         return new Docket(DocumentationType.SWAGGER_2)
-                .apiInfo(this.getApiInfo()).groupName("銆愪笟鍔$鐞嗘帴鍙PI銆�")
+                .apiInfo(this.getApiInfo()).groupName("default")
                 .host(host)
                 .select()
-                .apis( basePackage("com.doumee.api.system;com.doumee.api.business;"))
+                .apis( basePackage("com.doumee.api.system;com.doumee.api.business;com.doumee.api.common"))
                 // 璁剧疆闇�瑕佽鎵弿鐨勭被锛岃繖閲岃缃负娣诲姞浜咢Api娉ㄨВ鐨勭被
 //                .apis(RequestHandlerSelectors.withClassAnnotation(Api.class))
                 .paths(PathSelectors.any())
                 .build();
     }
-    @Bean
+   /* @Bean
     public Docket getDocket1() {
         return new Docket(DocumentationType.SWAGGER_2)
             .apiInfo(this.getApiInfo()).groupName("銆愬叕鍏辨帴鍙PI銆�")
@@ -81,7 +82,7 @@
 //                .apis(RequestHandlerSelectors.withClassAnnotation(Api.class))
             .paths(PathSelectors.any())
             .build();
-    }
+    }*/
     /**
      * 閲嶅啓basePackage鏂规硶锛屼娇鑳藉瀹炵幇澶氬寘璁块棶锛屽鍒惰创涓婂幓
      * @author  teavamc
diff --git a/server/meeting/meeting_admin/src/main/resources/application.yml b/server/meeting/meeting_admin/src/main/resources/application.yml
index 3f027c1..3dc0225 100644
--- a/server/meeting/meeting_admin/src/main/resources/application.yml
+++ b/server/meeting/meeting_admin/src/main/resources/application.yml
@@ -66,6 +66,15 @@
     password: 111111
   main:
     allow-circular-references: true
+# Swagger閰嶇疆
+
+swagger:
+  host:
+  title: ${project.name}鎺ュ彛鏂囨。
+  description: ${project.name}鎺ュ彛鏂囨。
+  enabled: true
+  # 绂佺敤swagger鏃剁殑閲嶅畾鍚戝湴鍧�
+  redirect-uri: /
 
 # WEB鏈嶅姟鍣ㄩ厤缃�
 server:
diff --git a/server/meeting/meeting_admin/src/main/resources/bootstrap.yml b/server/meeting/meeting_admin/src/main/resources/bootstrap.yml
index 1076d83..d788ad7 100644
--- a/server/meeting/meeting_admin/src/main/resources/bootstrap.yml
+++ b/server/meeting/meeting_admin/src/main/resources/bootstrap.yml
@@ -28,3 +28,9 @@
         namespace: dmvisit
         username: nacos
         password: nacos
+      # 瀹夊叏閰嶇疆
+  security:
+    # 楠岀鍏挜鍦板潃
+    oauth2:
+      authorizationserver:
+        token-uri: http://
diff --git a/server/system_service/src/main/java/com/doumee/config/handler/GlobalExceptionHandler.java b/server/meeting/meeting_service/src/main/java/com/doumee/config/handler/GlobalExceptionHandler.java
similarity index 99%
rename from server/system_service/src/main/java/com/doumee/config/handler/GlobalExceptionHandler.java
rename to server/meeting/meeting_service/src/main/java/com/doumee/config/handler/GlobalExceptionHandler.java
index f80d6a1..20ddfd6 100644
--- a/server/system_service/src/main/java/com/doumee/config/handler/GlobalExceptionHandler.java
+++ b/server/meeting/meeting_service/src/main/java/com/doumee/config/handler/GlobalExceptionHandler.java
@@ -1,8 +1,8 @@
 package com.doumee.config.handler;
 
+import com.doumee.core.constants.ResponseStatus;
 import com.doumee.core.exception.BusinessException;
 import com.doumee.core.model.ApiResponse;
-import com.doumee.core.constants.ResponseStatus;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.shiro.authz.UnauthorizedException;
diff --git a/server/meeting/meeting_service/src/main/resources/application-dev.yml b/server/meeting/meeting_service/src/main/resources/application-dev.yml
index 4f527ad..05b003f 100644
--- a/server/meeting/meeting_service/src/main/resources/application-dev.yml
+++ b/server/meeting/meeting_service/src/main/resources/application-dev.yml
@@ -17,13 +17,13 @@
 #  topic: waka-test
 #  username: 4derRb4Sw5EkqUMI
 #  password: v50N97wf4av8Q8I4
-
-knife4j:
-  enable: true
-  basic:
-    enable: true
-    username: admin
-    password: 111111
+#
+#knife4j:
+#  enable: true
+#  basic:
+#    enable: true
+#    username: admin
+#    password: 111111
 
 debug_model: true
 
diff --git a/server/meeting/meeting_service/src/main/resources/application-pro.yml b/server/meeting/meeting_service/src/main/resources/application-pro.yml
index b3934c8..829aa61 100644
--- a/server/meeting/meeting_service/src/main/resources/application-pro.yml
+++ b/server/meeting/meeting_service/src/main/resources/application-pro.yml
@@ -7,13 +7,13 @@
     driver-class-name: com.mysql.cj.jdbc.Driver
     type: com.alibaba.druid.pool.DruidDataSource
 
-
-knife4j:
-  enable: true
-  basic:
-    enable: true
-    username: admin
-    password: doumee@168.com
+#
+#knife4j:
+#  enable: true
+#  basic:
+#    enable: true
+#    username: admin
+#    password: doumee@168.com
 
 debug_model: true
 
diff --git a/server/meeting/meeting_service/src/main/resources/application-test.yml b/server/meeting/meeting_service/src/main/resources/application-test.yml
index e4c1f69..e866548 100644
--- a/server/meeting/meeting_service/src/main/resources/application-test.yml
+++ b/server/meeting/meeting_service/src/main/resources/application-test.yml
@@ -8,12 +8,12 @@
     type: com.alibaba.druid.pool.DruidDataSource
 
 
-knife4j:
-  enable: true
-  basic:
-    enable: true
-    username: admin
-    password: test@168.com
+#knife4j:
+#  enable: true
+#  basic:
+#    enable: true
+#    username: admin
+#    password: test@168.com
 
 debug_model: true
 
diff --git a/server/meeting/meeting_web/src/main/java/com/doumee/config/swagger/SwaggerConfig.java b/server/meeting/meeting_web/src/main/java/com/doumee/config/swagger/SwaggerConfig.java
index 97c15be..d7e0053 100644
--- a/server/meeting/meeting_web/src/main/java/com/doumee/config/swagger/SwaggerConfig.java
+++ b/server/meeting/meeting_web/src/main/java/com/doumee/config/swagger/SwaggerConfig.java
@@ -1,3 +1,4 @@
+/*
 package com.doumee.config.swagger;
 
 import com.github.xiaoymin.knife4j.spring.annotations.EnableKnife4j;
@@ -11,7 +12,7 @@
 import springfox.documentation.builders.ParameterBuilder;
 import springfox.documentation.service.Parameter;
 import springfox.documentation.builders.PathSelectors;
-import springfox.documentation.oas.annotations.EnableOpenApi;
+//import springfox.documentation.oas.annotations.EnableOpenApi;
 import springfox.documentation.schema.ModelRef;
 import springfox.documentation.service.ApiInfo;
 import springfox.documentation.spi.DocumentationType;
@@ -21,11 +22,13 @@
 import java.util.List;
 import java.util.function.Predicate;
 
+*/
 /**
  * Swagger閰嶇疆
  * @author Eva.Caesar Liu
  * @date 2022/03/11 10:24
- */
+ *//*
+
 @Configuration
 @EnableOpenApi
 @EnableKnife4j
@@ -85,12 +88,14 @@
             .paths(PathSelectors.any())
             .build();
     }
-    /**
+    */
+/**
      * 閲嶅啓basePackage鏂规硶锛屼娇鑳藉瀹炵幇澶氬寘璁块棶锛屽鍒惰创涓婂幓
      * @author  teavamc
      * @date 2019/1/26
      * @return com.google.common.base.Predicate<springfox.documentation.RequestHandler>
-     */
+     *//*
+
     public static Predicate<RequestHandler> basePackage(String basePackage) {
         return input -> declaringClass(input).transform(handlerPackage(basePackage)).or(true);
     }
@@ -112,3 +117,4 @@
         return Optional.fromNullable(input.declaringClass());
     }
 }
+*/
diff --git a/server/meeting/pom.xml b/server/meeting/pom.xml
index 95adea5..5bb66d4 100644
--- a/server/meeting/pom.xml
+++ b/server/meeting/pom.xml
@@ -21,10 +21,6 @@
         <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
     </properties>
     <dependencies>
-        <dependency>
-            <groupId>org.springframework.boot</groupId>
-            <artifactId>spring-boot-starter-web</artifactId>
-        </dependency>
        <dependency>
             <groupId>org.springframework.boot</groupId>
             <artifactId>spring-boot-dependencies</artifactId>
@@ -46,6 +42,12 @@
             <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
 <!--            <version>2.2.7.RELEASE</version>-->
         </dependency>
-
+        <!-- Swagger 澧炲己knife4j 寰湇鍔tarter -->
+        <dependency>
+            <groupId>com.github.xiaoymin</groupId>
+            <artifactId>knife4j-micro-spring-boot-starter</artifactId>
+            <version>3.0.3</version>
+            <scope>compile</scope>
+        </dependency>
     </dependencies>
 </project>
\ No newline at end of file
diff --git a/server/system_gateway/pom.xml b/server/system_gateway/pom.xml
index 34afe2f..1a44c9c 100644
--- a/server/system_gateway/pom.xml
+++ b/server/system_gateway/pom.xml
@@ -26,11 +26,10 @@
                 </exclusion>
             </exclusions>
         </dependency>
-      <!--  <dependency>
+       <!-- <dependency>
             <groupId>org.springframework.cloud</groupId>
             <artifactId>spring-cloud-starter-bootstrap</artifactId>
         </dependency>-->
-
         <!-- Nacos Discovery -->
         <dependency>
             <groupId>com.alibaba.cloud</groupId>
@@ -46,8 +45,6 @@
             <groupId>com.alibaba.cloud</groupId>
             <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
         </dependency>
-
-        <!-- 鍏朵粬渚濊禆... -->
     </dependencies>
 
     <dependencyManagement>
diff --git a/server/system_gateway/src/main/java/com/doumee/SystemGatewayApplication.java b/server/system_gateway/src/main/java/com/doumee/SystemGatewayApplication.java
index c32da4a..5e2618a 100644
--- a/server/system_gateway/src/main/java/com/doumee/SystemGatewayApplication.java
+++ b/server/system_gateway/src/main/java/com/doumee/SystemGatewayApplication.java
@@ -1,6 +1,5 @@
 package com.doumee;
 
-import lombok.extern.slf4j.Slf4j;
 import org.mybatis.spring.annotation.MapperScan;
 import org.springframework.boot.SpringApplication;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
@@ -13,11 +12,10 @@
  * @author Eva.Caesar Liu
  * @date 2023/03/21 14:49
  */
-@Slf4j
 @EnableAsync
 @SpringBootApplication
 @EnableDiscoveryClient
-@MapperScan("com.doumee.dao")
+@MapperScan("com.doumee.dao.*")
 public class SystemGatewayApplication {
     public static void main(String[] args) {
         ApplicationContext context = SpringApplication.run(SystemGatewayApplication.class);
diff --git a/server/system_gateway/src/main/java/com/doumee/config/shiro/ShiroAuthFilter.java b/server/system_gateway/src/main/java/com/doumee/config/shiro/ShiroAuthFilter.java
deleted file mode 100644
index 30d7dc0..0000000
--- a/server/system_gateway/src/main/java/com/doumee/config/shiro/ShiroAuthFilter.java
+++ /dev/null
@@ -1,30 +0,0 @@
-package com.doumee.config.shiro;
-
-import com.alibaba.fastjson.JSON;
-import com.doumee.core.model.ApiResponse;
-import org.apache.shiro.web.filter.authc.FormAuthenticationFilter;
-import org.springframework.http.HttpStatus;
-
-import javax.servlet.ServletRequest;
-import javax.servlet.ServletResponse;
-import javax.servlet.http.HttpServletResponse;
-
-/**
- * Shiro璁よ瘉杩囨护鍣紝澶勭悊鏈璇佹儏鍐电殑鍝嶅簲
- * @author Eva.Caesar Liu
- * @date 2023/04/17 12:11
- */
-public class ShiroAuthFilter extends FormAuthenticationFilter {
-
-    public ShiroAuthFilter() {
-        super();
-    }
-
-    @Override
-    protected boolean onAccessDenied(ServletRequest request, ServletResponse response) throws Exception {
-        HttpServletResponse servletResponse = (HttpServletResponse) response;
-        servletResponse.setHeader("content-type", "application/json;charset=UTF-8");
-        servletResponse.getWriter().write(JSON.toJSONString(ApiResponse.failed(HttpStatus.UNAUTHORIZED.value(), "鏈櫥褰曟垨鐧诲綍淇℃伅宸茶繃鏈�")));
-        return Boolean.FALSE;
-    }
-}
diff --git a/server/system_gateway/src/main/java/com/doumee/config/shiro/ShiroCache.java b/server/system_gateway/src/main/java/com/doumee/config/shiro/ShiroCache.java
deleted file mode 100644
index 4e61661..0000000
--- a/server/system_gateway/src/main/java/com/doumee/config/shiro/ShiroCache.java
+++ /dev/null
@@ -1,159 +0,0 @@
-package com.doumee.config.shiro;
-
-import lombok.extern.slf4j.Slf4j;
-import org.apache.shiro.cache.Cache;
-import org.apache.shiro.cache.CacheException;
-import org.apache.shiro.subject.PrincipalCollection;
-import org.apache.shiro.util.CollectionUtils;
-import org.springframework.context.annotation.Scope;
-import org.springframework.data.redis.core.RedisTemplate;
-import org.springframework.data.redis.serializer.SerializationException;
-import org.springframework.stereotype.Component;
-
-import javax.annotation.Resource;
-import java.io.Serializable;
-import java.lang.reflect.Method;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.Set;
-import java.util.concurrent.TimeUnit;
-
-/**
- * Shiro缂撳瓨
- * @author Eva.Caesar Liu
- * @date 2023/04/17 12:11
- */
-@Scope(value = "prototype")
-@Slf4j
-@Component
-public class ShiroCache implements Cache<Object, Serializable> {
-
-    private String keyPrefix = "";
-
-    @Resource(name="sessionRedisTemplate")
-    private RedisTemplate<Object, Serializable> redisTemplate;
-
-    public ShiroCache () {
-        log.debug("ShiroCache: new, keyPrefix = [" + keyPrefix + "]");
-    }
-
-    public ShiroCache(String keyPrefix) {
-        log.debug("ShiroCache: new, keyPrefix = [" + keyPrefix + "]");
-        this.keyPrefix = keyPrefix;
-    }
-
-    @Override
-    public Serializable get(Object key) throws CacheException {
-        if (key == null) {
-            return null;
-        }
-        return redisTemplate.opsForValue().get(getKey(key));
-    }
-
-    @Override
-    public Serializable put(Object key, Serializable value) throws CacheException {
-        if (key == null) {
-            return null;
-        }
-        redisTemplate.opsForValue().set(getKey(key), value);
-        return value;
-    }
-
-    public Serializable put(Object key, Serializable value, int timeout) throws CacheException {
-        if (key == null) {
-            return null;
-        }
-        redisTemplate.opsForValue().set(getKey(key), value, timeout, TimeUnit.SECONDS);
-        return value;
-    }
-
-    @Override
-    public void clear() throws CacheException {
-        Set<Object> keys = this.keys();
-        redisTemplate.delete(keys);
-    }
-
-    @Override
-    public int size() {
-        return this.keys().size();
-    }
-
-    @Override
-    public Set<Object> keys() {
-        Set<Object> keys = redisTemplate.keys(keyPrefix + "*");
-        if (CollectionUtils.isEmpty(keys)) {
-            return Collections.emptySet();
-        }
-        return keys;
-    }
-
-    @Override
-    public Collection<Serializable> values() {
-        Collection<Serializable> values = new ArrayList<>();
-        Set<Object> keys = this.keys();
-        if (CollectionUtils.isEmpty(keys)) {
-            return values;
-        }
-        for (Object k : keys) {
-            values.add(redisTemplate.opsForValue().get(k));
-        }
-        return values;
-    }
-
-    @Override
-    public Serializable remove(Object key) throws CacheException {
-        if (key == null) {
-            return null;
-        }
-        Serializable value = this.get(getKey(key));
-        redisTemplate.delete(getKey(key));
-        return value;
-    }
-
-    private Object getKey (Object key) {
-        if (key instanceof PrincipalCollection) {
-            return this.keyPrefix + getRedisKeyFromPrincipalIdField((PrincipalCollection)key);
-        }
-        return (key instanceof String ? (this.keyPrefix + key) : key);
-    }
-
-    /**
-     * 鑾峰彇redis cache key
-     */
-    private String getRedisKeyFromPrincipalIdField(PrincipalCollection key) {
-        Object principalObject = key.getPrimaryPrincipal();
-        if (principalObject instanceof String) {
-            return principalObject.toString();
-        } else {
-            Method pincipalIdGetter = this.getPrincipalIdGetter(principalObject);
-            return this.getIdObj(principalObject, pincipalIdGetter);
-        }
-    }
-
-    private Method getPrincipalIdGetter(Object principalObject) {
-        Method pincipalIdGetter;
-        String principalIdMethodName = this.getPrincipalIdMethodName();
-
-        try {
-            pincipalIdGetter = principalObject.getClass().getMethod(principalIdMethodName);
-            return pincipalIdGetter;
-        } catch (NoSuchMethodException e) {
-            throw new SerializationException(e.getMessage(), e);
-        }
-    }
-
-    private String getIdObj(Object principalObject, Method pincipalIdGetter) {
-        try {
-            Object idObj = pincipalIdGetter.invoke(principalObject);
-            String redisKey = idObj.toString();
-            return redisKey;
-        } catch (Exception e) {
-            throw new SerializationException(e.getMessage(), e);
-        }
-    }
-
-    private String getPrincipalIdMethodName() {
-        return "getId";
-    }
-}
diff --git a/server/system_gateway/src/main/java/com/doumee/config/shiro/ShiroCacheManager.java b/server/system_gateway/src/main/java/com/doumee/config/shiro/ShiroCacheManager.java
deleted file mode 100644
index 4c11155..0000000
--- a/server/system_gateway/src/main/java/com/doumee/config/shiro/ShiroCacheManager.java
+++ /dev/null
@@ -1,44 +0,0 @@
-package com.doumee.config.shiro;
-
-import lombok.extern.slf4j.Slf4j;
-import org.apache.shiro.cache.Cache;
-import org.apache.shiro.cache.CacheException;
-import org.apache.shiro.cache.CacheManager;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.context.ApplicationContext;
-import org.springframework.stereotype.Component;
-
-import java.util.concurrent.ConcurrentHashMap;
-import java.util.concurrent.ConcurrentMap;
-
-/**
- * 鑷畾涔塖hiro CacheManager
- * @author Eva.Caesar Liu
- * @date 2023/04/17 12:11
- */
-@Slf4j
-@Component
-public class ShiroCacheManager implements CacheManager {
-
-    private final ConcurrentMap<String, Cache> caches = new ConcurrentHashMap();
-
-    private static ApplicationContext applicationContext;
-
-    @Override
-    public <K, V> Cache<K, V> getCache(String name) throws CacheException {
-        log.debug("get cache, name=" + name);
-        Cache cache = this.caches.get(name);
-        if (cache == null) {
-            cache = applicationContext.getBean(ShiroCache.class, "shiro:cache:");
-            this.caches.put(name, cache);
-        }
-        return cache;
-    }
-
-    @Autowired
-    public void setApplicationContext (ApplicationContext applicationContext) {
-        if (ShiroCacheManager.applicationContext == null) {
-            ShiroCacheManager.applicationContext = applicationContext;
-        }
-    }
-}
diff --git a/server/system_gateway/src/main/java/com/doumee/config/shiro/ShiroConfig.java b/server/system_gateway/src/main/java/com/doumee/config/shiro/ShiroConfig.java
deleted file mode 100644
index d156a78..0000000
--- a/server/system_gateway/src/main/java/com/doumee/config/shiro/ShiroConfig.java
+++ /dev/null
@@ -1,147 +0,0 @@
-package com.doumee.config.shiro;
-
-import org.apache.shiro.session.mgt.SessionManager;
-import org.apache.shiro.spring.security.interceptor.AuthorizationAttributeSourceAdvisor;
-import org.apache.shiro.spring.web.ShiroFilterFactoryBean;
-import org.apache.shiro.util.ThreadContext;
-import org.apache.shiro.web.mgt.DefaultWebSecurityManager;
-import org.springframework.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreator;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.beans.factory.annotation.Value;
-import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.Configuration;
-import org.springframework.data.redis.connection.RedisConnectionFactory;
-import org.springframework.data.redis.core.RedisTemplate;
-import org.springframework.data.redis.serializer.StringRedisSerializer;
-
-import javax.servlet.Filter;
-import java.io.Serializable;
-import java.util.LinkedHashMap;
-import java.util.Map;
-
-/**
- * Shiro閰嶇疆
- * @author Eva.Caesar Liu
- * @date 2023/03/21 14:49
- */
-@Configuration
-public class ShiroConfig {
-
-    @Value("${cache.session.expire}")
-    private int sessionExpireTime;
-
-    @Autowired
-    private ShiroCredentialsMatcher shiroCredentialsMatcher;
-
-    @Autowired
-    private ShiroSessionDAO shiroSessionDAO;
-
-    @Autowired
-    private ShiroCacheManager shiroCacheManager;
-
-    @Autowired
-    private ShiroRealm shiroRealm;
-
-    @Bean("sessionRedisTemplate")
-    public RedisTemplate<Object, Serializable> sessionRedisTemplate(RedisConnectionFactory redisConnectionFactory) {
-        RedisTemplate<Object, Serializable> redisTemplate = new RedisTemplate<>();
-        redisTemplate.setConnectionFactory(redisConnectionFactory);
-        // 榛樿搴忓垪鍖栨柟寮�
-        redisTemplate.setDefaultSerializer(new StringRedisSerializer());
-        // 鍊煎簭鍒楀寲鏂瑰紡
-        ShiroSessionSerializer serializer = new ShiroSessionSerializer();
-        redisTemplate.setValueSerializer(serializer);
-        redisTemplate.setHashValueSerializer(serializer);
-        redisTemplate.afterPropertiesSet();
-        return redisTemplate;
-    }
-
-    @Bean
-    public DefaultAdvisorAutoProxyCreator defaultAdvisorAutoProxyCreator() {
-        DefaultAdvisorAutoProxyCreator autoProxyCreator = new DefaultAdvisorAutoProxyCreator();
-        autoProxyCreator.setProxyTargetClass(true);
-        return autoProxyCreator;
-    }
-
-    @Bean
-    public SessionManager sessionManager() {
-        ShiroSessionManager sessionManager = new ShiroSessionManager();
-        sessionManager.setSessionDAO(shiroSessionDAO);
-        sessionManager.setGlobalSessionTimeout(sessionExpireTime*1000);
-        // 鍒犻櫎澶辨晥鐨剆ession
-        sessionManager.setDeleteInvalidSessions(true);
-        return sessionManager;
-    }
-
-    @Bean
-    public SecurityManager securityManager() {
-        DefaultWebSecurityManager securityManager = new DefaultWebSecurityManager();
-        ThreadContext.bind(securityManager);//鍔犱笂杩欏彞浠g爜鎵嬪姩缁戝畾
-        securityManager.setRealm(shiroRealm);
-        securityManager.setSessionManager(this.sessionManager());
-        securityManager.setCacheManager(shiroCacheManager);
-        return securityManager;
-    }
-
-    @Bean
-    public ShiroFilterFactoryBean shiroFilterFactoryBean(SecurityManager securityManager) {
-        ShiroFilterFactoryBean shiroFilterFactoryBean = new ShiroFilterFactoryBean();
-        shiroFilterFactoryBean.setSecurityManager(securityManager);
-        Map<String, String> map = new LinkedHashMap<>();
-        // 璺緞鎷︽埅閰嶇疆
-        map.put("/system/login", "anon");
-        map.put("/system/syncLingCountData", "anon");
-        map.put("/system/wxLogin", "anon");
-        map.put("/system/wxProgramLogin", "anon");
-        map.put("/system/wxAccountLogin", "anon");
-        map.put("/system/initCompany", "anon");
-        map.put("/system/logout", "anon");
-        map.put("/common/captcha", "anon");
-        map.put("/cloud/**", "anon");
-        map.put("/statistics/**", "anon");
-        map.put("/business/hksync/push/**", "anon");
-        map.put("/business/member/empowerByList", "anon");
-        map.put("/dingding/push", "anon");
-//        map.put("/ext/workorderExt/freshStatistics", "anon");
-        map.put("/dingding/jsapiTicket", "anon");
-        map.put("/dingding/ddLogin", "anon");
-        map.put("/dingding/getDingdingCorpId", "anon");
-        map.put("/lingyang/login", "anon");
-        map.put("/lingyang/loginDemo", "anon");
-        map.put("/lingyang/importBatch", "anon");
-        map.put("/edgp/**", "anon");
-        // - 鏀捐swagger
-        map.put("/doc.html", "anon");
-        map.put("/webjars/**", "anon");
-        map.put("/template/**", "anon");
-        map.put("/swagger-resources/**", "anon");
-        map.put("/v2/api-docs/**", "anon");
-        // - 鍏朵粬鎺ュ彛缁熶竴鎷︽埅
-        map.put("/**", "authc");
-        shiroFilterFactoryBean.setFilterChainDefinitionMap(map);
-        // 娣诲姞璁よ瘉杩囨护鍣�
-        Map<String, Filter> filters = new LinkedHashMap<>();
-        filters.put("authc", new ShiroAuthFilter());
-        shiroFilterFactoryBean.setFilters(filters);
-        return shiroFilterFactoryBean;
-    }
-
-    @Bean
-    public AuthorizationAttributeSourceAdvisor authorizationAttributeSourceAdvisor(SecurityManager securityManager) {
-        AuthorizationAttributeSourceAdvisor authorizationAttributeSourceAdvisor = new AuthorizationAttributeSourceAdvisor();
-        authorizationAttributeSourceAdvisor.setSecurityManager(securityManager);
-        return authorizationAttributeSourceAdvisor;
-    }
-
-    @Bean
-    public ShiroSessionDAO getShiroSessionDAO () {
-        shiroSessionDAO.setExpireTime(sessionExpireTime);
-        return shiroSessionDAO;
-    }
-
-    @Bean
-    public ShiroRealm getShiroRealm () {
-        shiroRealm.setCredentialsMatcher(shiroCredentialsMatcher);
-        return shiroRealm;
-    }
-}
diff --git a/server/system_gateway/src/main/java/com/doumee/config/shiro/ShiroCredentialsMatcher.java b/server/system_gateway/src/main/java/com/doumee/config/shiro/ShiroCredentialsMatcher.java
deleted file mode 100644
index 09156e0..0000000
--- a/server/system_gateway/src/main/java/com/doumee/config/shiro/ShiroCredentialsMatcher.java
+++ /dev/null
@@ -1,40 +0,0 @@
-package com.doumee.config.shiro;
-
-import com.doumee.core.utils.Utils;
-import com.doumee.dao.system.model.SystemUser;
-import com.doumee.service.system.SystemUserService;
-import org.apache.shiro.authc.AuthenticationInfo;
-import org.apache.shiro.authc.AuthenticationToken;
-import org.apache.shiro.authc.UsernamePasswordToken;
-import org.apache.shiro.authc.credential.HashedCredentialsMatcher;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.context.annotation.Lazy;
-import org.springframework.stereotype.Component;
-
-/**
- * Shiro瀵嗙爜姣斿澶勭悊
- * @author Eva.Caesar Liu
- * @date 2023/04/17 12:11
- */
-@Component
-public class ShiroCredentialsMatcher extends HashedCredentialsMatcher {
-    @Lazy
-    @Autowired
-    private SystemUserService systemUserService;
-
-    @Override
-    public boolean doCredentialsMatch(AuthenticationToken token, AuthenticationInfo info) {
-        UsernamePasswordToken usernamePasswordToken = (UsernamePasswordToken) token;
-        SystemUser queryUserDto = new SystemUser();
-        queryUserDto.setUsername(usernamePasswordToken.getUsername());
-        queryUserDto.setDeleted(Boolean.FALSE);
-        SystemUser systemUser = systemUserService.findOne(queryUserDto);
-        if (systemUser == null) {
-            return Boolean.FALSE;
-        }
-        // 鍔犲瘑瀵嗙爜
-        String pwd = Utils.Secure.encryptPassword(new String(usernamePasswordToken.getPassword()), systemUser.getSalt());
-        // 姣旇緝瀵嗙爜
-        return this.equals(pwd, systemUser.getPassword());
-    }
-}
diff --git a/server/system_gateway/src/main/java/com/doumee/config/shiro/ShiroRealm.java b/server/system_gateway/src/main/java/com/doumee/config/shiro/ShiroRealm.java
deleted file mode 100644
index 690addf..0000000
--- a/server/system_gateway/src/main/java/com/doumee/config/shiro/ShiroRealm.java
+++ /dev/null
@@ -1,84 +0,0 @@
-package com.doumee.config.shiro;
-
-import com.doumee.core.model.LoginUserInfo;
-import com.doumee.dao.system.model.SystemPermission;
-import com.doumee.dao.system.model.SystemRole;
-import com.doumee.dao.system.model.SystemUser;
-import com.doumee.service.system.SystemPermissionService;
-import com.doumee.service.system.SystemRoleService;
-import com.doumee.service.system.SystemUserService;
-import org.apache.shiro.authc.AuthenticationException;
-import org.apache.shiro.authc.AuthenticationInfo;
-import org.apache.shiro.authc.AuthenticationToken;
-import org.apache.shiro.authc.SimpleAuthenticationInfo;
-import org.apache.shiro.authz.AuthorizationInfo;
-import org.apache.shiro.authz.SimpleAuthorizationInfo;
-import org.apache.shiro.realm.AuthorizingRealm;
-import org.apache.shiro.subject.PrincipalCollection;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.context.annotation.Lazy;
-import org.springframework.stereotype.Component;
-
-import java.util.List;
-
-/**
- * 鑷畾涔塕ealm锛屽鐞嗚璇佸拰鏉冮檺
- * @author Eva.Caesar Liu
- * @date 2023/03/21 14:49
- */
-@Component
-public class ShiroRealm extends AuthorizingRealm {
-
-    @Lazy
-    @Autowired
-    private SystemUserService systemUserService;
-
-    @Lazy
-    @Autowired
-    private SystemRoleService systemRoleService;
-
-    @Lazy
-    @Autowired
-    private SystemPermissionService systemPermissionService;
-
-    /**
-     * 鏉冮檺澶勭悊
-     * @author Eva.Caesar Liu
-     * @date 2023/03/21 14:49
-     */
-    @Override
-    protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principalCollection) {
-        LoginUserInfo loginUserInfo = (LoginUserInfo)principalCollection.getPrimaryPrincipal();
-        // 璁剧疆鐢ㄦ埛瑙掕壊鍜屾潈闄�
-        SimpleAuthorizationInfo authorizationInfo = new SimpleAuthorizationInfo();
-        authorizationInfo.addRoles(loginUserInfo.getRoles());
-        authorizationInfo.addStringPermissions(loginUserInfo.getPermissions());
-        return authorizationInfo;
-    }
-
-    /**
-     * 璁よ瘉澶勭悊
-     * @author Eva.Caesar Liu
-     * @date 2023/03/21 14:49
-     */
-    @Override
-    protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken authenticationToken) throws AuthenticationException {
-        // 鑾峰彇鐢ㄦ埛鍚�
-        String username = authenticationToken.getPrincipal().toString();
-        // 鏍规嵁鐢ㄦ埛鍚嶆煡璇㈢敤鎴峰璞�
-        SystemUser queryDto = new SystemUser();
-        queryDto.setUsername(username);
-        queryDto.setDeleted(Boolean.FALSE);
-        SystemUser user = systemUserService.findOne(queryDto);
-        if (user == null) {
-            return null;
-        }
-        // 鑾峰彇鐧诲綍鐢ㄦ埛淇℃伅
-        List<SystemRole> roles = systemRoleService.findByUserId(user.getId());
-        List<SystemPermission> permissions = systemPermissionService.findByUserId(user.getId());
-        LoginUserInfo userInfo = LoginUserInfo.from(user, roles, permissions);
-        // 楠岃瘉鐢ㄦ埛
-        return new SimpleAuthenticationInfo(userInfo, user.getPassword(), this.getName());
-    }
-
-}
diff --git a/server/system_gateway/src/main/java/com/doumee/config/shiro/ShiroSessionDAO.java b/server/system_gateway/src/main/java/com/doumee/config/shiro/ShiroSessionDAO.java
deleted file mode 100644
index 1fe90bf..0000000
--- a/server/system_gateway/src/main/java/com/doumee/config/shiro/ShiroSessionDAO.java
+++ /dev/null
@@ -1,113 +0,0 @@
-package com.doumee.config.shiro;
-
-import lombok.Data;
-import lombok.extern.slf4j.Slf4j;
-import org.apache.shiro.session.Session;
-import org.apache.shiro.session.UnknownSessionException;
-import org.apache.shiro.session.mgt.SimpleSession;
-import org.apache.shiro.session.mgt.eis.SessionDAO;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Component;
-
-import java.io.Serializable;
-import java.util.Collection;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.Set;
-
-/**
- * 鑷畾涔塖hiro SessionDAO锛屽皢浼氳瘽淇℃伅瀛樺叆缂撳瓨涓�
- * @author Eva.Caesar Liu
- * @date 2023/04/17 12:11
- */
-@Data
-@Slf4j
-@Component
-public class ShiroSessionDAO implements SessionDAO {
-
-    private static final String KEY_PREFIX = "shiro:session:";
-
-    @Autowired
-    private ShiroCache shiroCache;
-
-    private int expireTime = 60 * 60 * 24;
-
-    @Autowired
-    private ShiroTokenManager shiroTokenManager;
-
-    @Override
-    public Serializable create(Session session) {
-        if (session == null) {
-            log.error("session is null");
-            throw new UnknownSessionException("session is null");
-        }
-        Serializable sessionId = shiroTokenManager.build();
-        ((SimpleSession)session).setId(sessionId);
-        this.saveSession(session);
-        return sessionId;
-    }
-
-    @Override
-    public Session readSession(Serializable sessionId) throws UnknownSessionException{
-        if (sessionId == null) {
-            log.warn("session id is null");
-            return null;
-        }
-        if (sessionId instanceof String) {
-            // 瀵筍essionId杩涜楠岃瘉锛堝彲鐢ㄤ簬闃叉Session鎹曡幏銆佹毚鍔涙崟鎹夌瓑涓�绯诲垪瀹夊叏闂锛屾渶缁堝畨鍏ㄦ�у彇鍐充簬check濡備綍瀹炵幇锛�
-            shiroTokenManager.check((String) sessionId);
-        }
-        log.debug("read session from cache");
-        Session session = getSessionFromCache(sessionId);
-        if (session == null) {
-            throw new UnknownSessionException("There is no session with id [" + sessionId + "]");
-        }
-        return session;
-    }
-
-    @Override
-    public void update(Session session) throws UnknownSessionException {
-        this.saveSession(session);
-    }
-
-    @Override
-    public void delete(Session session) {
-        if (session != null && session.getId() != null) {
-            shiroCache.remove(KEY_PREFIX + session.getId());
-        }
-    }
-
-    @Override
-    public Collection<Session> getActiveSessions() {
-        Set<Session> sessions = new HashSet<>();
-        Set<Object> keys = shiroCache.keys();
-        if (keys != null && keys.size() > 0) {
-            Iterator iter = keys.iterator();
-            while(iter.hasNext()) {
-                sessions.add((Session) shiroCache.get(iter.next()));
-            }
-        }
-        return sessions;
-    }
-
-    private void saveSession(Session session) throws UnknownSessionException {
-        if (session == null || session.getId() == null) {
-            log.error("session or session id is null");
-            throw new UnknownSessionException("session or session id is null");
-        }
-        shiroCache.put(KEY_PREFIX + session.getId(), (SimpleSession)session, expireTime);
-    }
-
-    private Session getSessionFromCache (Serializable sessionId) {
-        Serializable object = shiroCache.get(KEY_PREFIX + sessionId);
-        Session session = null;
-        if (object != null) {
-            session = (Session)shiroCache.get(KEY_PREFIX + sessionId);
-        }
-        return session;
-    }
-
-    public void setExpireTime (int expireTime) {
-        this.expireTime = expireTime;
-    }
-}
diff --git a/server/system_gateway/src/main/java/com/doumee/config/shiro/ShiroSessionManager.java b/server/system_gateway/src/main/java/com/doumee/config/shiro/ShiroSessionManager.java
deleted file mode 100644
index 32b0379..0000000
--- a/server/system_gateway/src/main/java/com/doumee/config/shiro/ShiroSessionManager.java
+++ /dev/null
@@ -1,85 +0,0 @@
-package com.doumee.config.shiro;
-
-import lombok.extern.slf4j.Slf4j;
-import org.apache.shiro.session.Session;
-import org.apache.shiro.session.mgt.DefaultSessionManager;
-import org.apache.shiro.session.mgt.SessionContext;
-import org.apache.shiro.session.mgt.SessionKey;
-import org.apache.shiro.web.servlet.Cookie;
-import org.apache.shiro.web.servlet.ShiroHttpServletRequest;
-import org.apache.shiro.web.servlet.SimpleCookie;
-import org.apache.shiro.web.session.mgt.WebSessionManager;
-import org.apache.shiro.web.util.WebUtils;
-
-import javax.servlet.ServletRequest;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-import java.io.Serializable;
-
-/**
- * 鑷畾涔変細璇濈鐞嗗櫒
- * @author Eva.Caesar Liu
- * @date 2023/04/17 12:11
- */
-@Slf4j
-public class ShiroSessionManager extends DefaultSessionManager implements WebSessionManager {
-
-    private static final String AUTH_TOKEN = "eva-auth-token";
-
-    @Override
-    protected void onStart(Session session, SessionContext context) {
-        super.onStart(session, context);
-        if (!WebUtils.isHttp(context)) {
-            log.debug("SessionContext argument is not Http compatible or does not have an Http request/response pair. No session ID cookie will be set.");
-            return;
-        }
-        HttpServletRequest request = WebUtils.getHttpRequest(context);
-        HttpServletResponse response = WebUtils.getHttpResponse(context);
-        Serializable sessionId = session.getId();
-        this.storeSessionId(sessionId, request, response);
-        request.removeAttribute(ShiroHttpServletRequest.REFERENCED_SESSION_ID_SOURCE);
-        request.setAttribute(ShiroHttpServletRequest.REFERENCED_SESSION_IS_NEW, Boolean.TRUE);
-    }
-
-    @Override
-    public Serializable getSessionId(SessionKey key) {
-        Serializable sessionId = super.getSessionId(key);
-        if (sessionId == null && WebUtils.isWeb(key)) {
-            ServletRequest servletRequest = WebUtils.getRequest(key);
-            if (!(servletRequest instanceof HttpServletRequest)) {
-                log.trace("Can not get sessionId from header, the request is not HttpServletRequest");
-                return null;
-            }
-            HttpServletRequest request = (HttpServletRequest) servletRequest;
-            // 浠巆ookie涓幏鍙栬璇�
-            javax.servlet.http.Cookie[] cookies = request.getCookies();
-            if (cookies != null) {
-                for (javax.servlet.http.Cookie cookie : cookies) {
-                    if (AUTH_TOKEN.equals(cookie.getName())) {
-                        return cookie.getValue();
-                    }
-                }
-            }
-            // 浠巋eader涓幏鍙栬璇�
-            return request.getHeader(AUTH_TOKEN);
-        }
-        return sessionId;
-    }
-    @Override
-    public boolean isServletContainerSessions() {
-        return false;
-    }
-
-    private void storeSessionId(Serializable currentId, HttpServletRequest request, HttpServletResponse response) {
-        if (currentId == null) {
-            String msg = "sessionId cannot be null when persisting for subsequent requests.";
-            throw new IllegalArgumentException(msg);
-        }
-        Cookie cookie = new SimpleCookie(AUTH_TOKEN);
-        cookie.setHttpOnly(false);
-        String idString = currentId.toString();
-        cookie.setValue(idString);
-        cookie.saveTo(request, response);
-        log.trace("Set session ID cookie for session with id {}", idString);
-    }
-}
diff --git a/server/system_gateway/src/main/java/com/doumee/config/shiro/ShiroSessionSerializer.java b/server/system_gateway/src/main/java/com/doumee/config/shiro/ShiroSessionSerializer.java
deleted file mode 100644
index d334adf..0000000
--- a/server/system_gateway/src/main/java/com/doumee/config/shiro/ShiroSessionSerializer.java
+++ /dev/null
@@ -1,36 +0,0 @@
-package com.doumee.config.shiro;
-
-import org.apache.commons.lang3.SerializationUtils;
-import org.apache.shiro.codec.Base64;
-import org.springframework.data.redis.serializer.RedisSerializer;
-import org.springframework.data.redis.serializer.SerializationException;
-
-import java.io.Serializable;
-import java.nio.charset.StandardCharsets;
-
-/**
- * Session搴忓垪鍖�
- * @author Eva.Caesar Liu
- * @date 2023/04/17 12:11
- */
-public class ShiroSessionSerializer implements RedisSerializer<Serializable> {
-
-    @Override
-    public byte[] serialize(Serializable obj) throws SerializationException {
-        if (obj == null) {
-            return new byte[0];
-        }
-        String sessionBase64 = Base64.encodeToString(SerializationUtils.serialize(obj));
-        return sessionBase64.getBytes(StandardCharsets.UTF_8);
-    }
-
-    @Override
-    public Serializable deserialize(byte[] bytes) throws SerializationException {
-        if (bytes == null || bytes.length == 0) {
-            return null;
-        }
-        String sessionString = new String(bytes, StandardCharsets.UTF_8);
-        byte[] sessionBytes = Base64.decode(sessionString);
-        return SerializationUtils.deserialize(sessionBytes);
-    }
-}
diff --git a/server/system_gateway/src/main/java/com/doumee/config/shiro/ShiroToken.java b/server/system_gateway/src/main/java/com/doumee/config/shiro/ShiroToken.java
deleted file mode 100644
index 4a27415..0000000
--- a/server/system_gateway/src/main/java/com/doumee/config/shiro/ShiroToken.java
+++ /dev/null
@@ -1,80 +0,0 @@
-package com.doumee.config.shiro;
-
-import com.doumee.core.model.LoginUserInfo;
-import org.apache.shiro.authc.UsernamePasswordToken;
-import org.springframework.stereotype.Component;
-
-/**
- * 鑷畾涔塗oken 锛屽鐞嗚璇佸拰鏉冮檺
- * @author Eva.Caesar Liu
- * @date 2022/04/18 18:12
- */
-@Component
-public class ShiroToken extends UsernamePasswordToken {
-
-    /**
-     * 鍏徃ID
-     */
-    Integer companyId;
-    Boolean isDdLogin;
-    Boolean isWxLogin;
-    LoginUserInfo updateUser;
-
-    int updateFlag;
-
-    public ShiroToken() {
-    }
-    public ShiroToken(Integer companyId, String username, String password, boolean isDdLogin, boolean isWxLogin) {
-        super(username,  password, false, (String)null);
-        this.companyId = companyId;
-        this.isDdLogin = isDdLogin;
-        this.isWxLogin = isWxLogin;
-    }
-    public ShiroToken(LoginUserInfo user,int updateFlag) {
-        super(user.getUsername(), "", false, (String)null);
-        this.updateUser = user;
-        this.updateFlag = updateFlag;
-        this.isDdLogin = true;
-    }
-
-    public Boolean getDdLogin() {
-        return isDdLogin;
-    }
-
-    public void setDdLogin(Boolean ddLogin) {
-        isDdLogin = ddLogin;
-    }
-
-
-    public Boolean getWxLogin() {
-        return isWxLogin;
-    }
-
-    public void setWxLogin(Boolean wxLogin) {
-        isWxLogin = wxLogin;
-    }
-
-    public Integer getCompanyId() {
-        return companyId;
-    }
-
-    public void setCompanyId(Integer companyId) {
-        this.companyId = companyId;
-    }
-
-    public LoginUserInfo getUpdateUser() {
-        return updateUser;
-    }
-
-    public void setUpdateUser(LoginUserInfo updateUser) {
-        this.updateUser = updateUser;
-    }
-
-    public int getUpdateFlag() {
-        return updateFlag;
-    }
-
-    public void setUpdateFlag(int updateFlag) {
-        this.updateFlag = updateFlag;
-    }
-}
diff --git a/server/system_gateway/src/main/java/com/doumee/config/shiro/ShiroTokenManager.java b/server/system_gateway/src/main/java/com/doumee/config/shiro/ShiroTokenManager.java
deleted file mode 100644
index ba35da6..0000000
--- a/server/system_gateway/src/main/java/com/doumee/config/shiro/ShiroTokenManager.java
+++ /dev/null
@@ -1,25 +0,0 @@
-package com.doumee.config.shiro;
-
-import com.doumee.core.exception.UnSafeSessionException;
-import org.springframework.stereotype.Component;
-
-import java.util.UUID;
-
-/**
- * 榛樿Token绠$悊鍣�
- * @author Eva.Caesar Liu
- * @date 2023/04/17 12:11
- */
-@Component
-public class ShiroTokenManager {
-
-    String build() {
-        return UUID.randomUUID().toString();
-    }
-
-    void check(String token) throws UnSafeSessionException {
-        if (token == null || token.length() != 36) {
-            throw new UnSafeSessionException();
-        }
-    }
-}
diff --git a/server/system_gateway/src/main/java/com/doumee/config/swagger/SwaggerConfig.java b/server/system_gateway/src/main/java/com/doumee/config/swagger/SwaggerConfig.java
deleted file mode 100644
index 1a237ee..0000000
--- a/server/system_gateway/src/main/java/com/doumee/config/swagger/SwaggerConfig.java
+++ /dev/null
@@ -1,123 +0,0 @@
-package com.doumee.config.swagger;
-
-import com.github.xiaoymin.knife4j.spring.annotations.EnableKnife4j;
-import com.google.common.base.Function;
-import com.google.common.base.Optional;
-import org.springframework.beans.factory.annotation.Value;
-import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.Configuration;
-import springfox.documentation.RequestHandler;
-import springfox.documentation.builders.ApiInfoBuilder;
-import springfox.documentation.builders.PathSelectors;
-import springfox.documentation.oas.annotations.EnableOpenApi;
-import springfox.documentation.service.ApiInfo;
-import springfox.documentation.spi.DocumentationType;
-import springfox.documentation.spring.web.plugins.Docket;
-
-import java.util.function.Predicate;
-
-/**
- * Swagger閰嶇疆
- * @author Eva.Caesar Liu
- * @date 2022/03/11 10:24
- */
-@Configuration
-@EnableOpenApi
-@EnableKnife4j
-public class SwaggerConfig {
-
-    @Value("${swagger.host:}")
-    private String host;
-
-    @Value("${swagger.title:鎺ュ彛鏂囨。}")
-    private String title;
-
-    @Value("${swagger.description:}")
-    private String description;
-
-    @Value("${project.version:}")
-    private String version;
-
-    @Bean
-    public ApiInfo getApiInfo() {
-        return new ApiInfoBuilder()
-                .title(title)
-                .description(description)
-                .version(version)
-                .build();
-    }
-    @Bean
-    public Docket getDocket() {
-        return new Docket(DocumentationType.SWAGGER_2)
-                .apiInfo(this.getApiInfo()).groupName("銆愮郴缁熺鐞嗘帴鍙PI銆�")
-                .host(host)
-                .select()
-                .apis( basePackage("com.doumee.api.system;"))
-                // 璁剧疆闇�瑕佽鎵弿鐨勭被锛岃繖閲岃缃负娣诲姞浜咢Api娉ㄨВ鐨勭被
-//                .apis(RequestHandlerSelectors.withClassAnnotation(Api.class))
-                .paths(PathSelectors.any())
-                .build();
-    }
-    @Bean
-    public Docket getDocket2() {
-        return new Docket(DocumentationType.SWAGGER_2)
-                .apiInfo(this.getApiInfo()).groupName("銆愪笟鍔$鐞嗘帴鍙PI銆�")
-                .host(host)
-                .select()
-                .apis( basePackage("com.doumee.api.business;"))
-                // 璁剧疆闇�瑕佽鎵弿鐨勭被锛岃繖閲岃缃负娣诲姞浜咢Api娉ㄨВ鐨勭被
-//                .apis(RequestHandlerSelectors.withClassAnnotation(Api.class))
-                .paths(PathSelectors.any())
-                .build();
-    }
-    @Bean
-    public Docket getDocket4() {
-        return new Docket(DocumentationType.SWAGGER_2)
-                .apiInfo(this.getApiInfo()).groupName("銆愬畾鏃朵换鍔℃帴鍙PI銆�")
-                .host(host)
-                .select()
-                .apis( basePackage("com.doumee.api.timer;"))
-                // 璁剧疆闇�瑕佽鎵弿鐨勭被锛岃繖閲岃缃负娣诲姞浜咢Api娉ㄨВ鐨勭被
-//                .apis(RequestHandlerSelectors.withClassAnnotation(Api.class))
-                .paths(PathSelectors.any())
-                .build();
-    }
-    @Bean
-    public Docket getDocket1() {
-        return new Docket(DocumentationType.SWAGGER_2)
-            .apiInfo(this.getApiInfo()).groupName("銆愬叕鍏辨帴鍙PI銆�")
-            .host(host)
-            .select()
-            .apis( basePackage("com.doumee.api.common"))
-            // 璁剧疆闇�瑕佽鎵弿鐨勭被锛岃繖閲岃缃负娣诲姞浜咢Api娉ㄨВ鐨勭被
-//                .apis(RequestHandlerSelectors.withClassAnnotation(Api.class))
-            .paths(PathSelectors.any())
-            .build();
-    }
-    /**
-     * 閲嶅啓basePackage鏂规硶锛屼娇鑳藉瀹炵幇澶氬寘璁块棶锛屽鍒惰创涓婂幓
-     * @author  teavamc
-     * @date 2019/1/26
-     * @return com.google.common.base.Predicate<springfox.documentation.RequestHandler>
-     */
-    public static Predicate<RequestHandler> basePackage(String basePackage) {
-        return input -> declaringClass(input).transform(handlerPackage(basePackage)).or(true);
-    }
-
-    private static Function<Class<?>, Boolean> handlerPackage(String basePackage)     {
-        return input -> {
-            // 寰幆鍒ゆ柇鍖归厤
-            for (String strPackage : basePackage.split(";")) {
-                boolean isMatch = input.getPackage().getName().startsWith(strPackage);
-                if (isMatch) {
-                    return true;
-                }
-            }
-            return false;
-        };
-    }
-
-    private static Optional<? extends Class<?>> declaringClass(RequestHandler input) {
-        return Optional.fromNullable(input.declaringClass());
-    }
-}
diff --git a/server/system_gateway/src/main/java/com/doumee/config/swagger/SwaggerHandler.java b/server/system_gateway/src/main/java/com/doumee/config/swagger/SwaggerHandler.java
new file mode 100644
index 0000000..f23cb47
--- /dev/null
+++ b/server/system_gateway/src/main/java/com/doumee/config/swagger/SwaggerHandler.java
@@ -0,0 +1,46 @@
+package com.doumee.config.swagger;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.HttpStatus;
+import org.springframework.http.ResponseEntity;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RestController;
+import reactor.core.publisher.Mono;
+import springfox.documentation.swagger.web.*;
+
+import java.util.Optional;
+
+@RestController
+public class SwaggerHandler {
+
+    @Autowired(required = false)
+    private SecurityConfiguration securityConfiguration;
+
+    @Autowired(required = false)
+    private UiConfiguration uiConfiguration;
+
+    private final SwaggerResourcesProvider swaggerResources;
+
+    @Autowired
+    public SwaggerHandler(SwaggerResourcesProvider swaggerResources) {
+        this.swaggerResources = swaggerResources;
+    }
+
+
+    @GetMapping("/swagger-resources/configuration/security")
+    public Mono<ResponseEntity<SecurityConfiguration>> securityConfiguration() {
+        return Mono.just(new ResponseEntity<>(
+                Optional.ofNullable(securityConfiguration).orElse(SecurityConfigurationBuilder.builder().build()), HttpStatus.OK));
+    }
+
+    @GetMapping("/swagger-resources/configuration/ui")
+    public Mono<ResponseEntity<UiConfiguration>> uiConfiguration() {
+        return Mono.just(new ResponseEntity<>(
+                Optional.ofNullable(uiConfiguration).orElse(UiConfigurationBuilder.builder().build()), HttpStatus.OK));
+    }
+
+    @GetMapping("/swagger-resources")
+    public Mono<ResponseEntity> swaggerResources() {
+        return Mono.just((new ResponseEntity<>(swaggerResources.get(), HttpStatus.OK)));
+    }
+}
\ No newline at end of file
diff --git a/server/system_gateway/src/main/java/com/doumee/config/swagger/SwaggerHeaderFilter.java b/server/system_gateway/src/main/java/com/doumee/config/swagger/SwaggerHeaderFilter.java
new file mode 100644
index 0000000..d0ca87e
--- /dev/null
+++ b/server/system_gateway/src/main/java/com/doumee/config/swagger/SwaggerHeaderFilter.java
@@ -0,0 +1,41 @@
+package com.doumee.config.swagger;
+
+import org.apache.commons.lang.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.cloud.gateway.filter.GatewayFilter;
+import org.springframework.cloud.gateway.filter.factory.AbstractGatewayFilterFactory;
+import org.springframework.http.HttpStatus;
+import org.springframework.http.ResponseEntity;
+import org.springframework.http.server.reactive.ServerHttpRequest;
+import org.springframework.stereotype.Component;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.server.ServerWebExchange;
+import reactor.core.publisher.Mono;
+import springfox.documentation.swagger.web.*;
+
+import java.util.Optional;
+
+@Component
+public class SwaggerHeaderFilter extends AbstractGatewayFilterFactory {
+    private static final String HEADER_NAME = "X-Forwarded-Prefix";
+
+    private static final String URI = "/v2/api-docs";
+
+    @Override
+    public GatewayFilter apply(Object config) {
+        return (exchange, chain) -> {
+            ServerHttpRequest request = exchange.getRequest();
+            String path = request.getURI().getPath();
+            if (!StringUtils.endsWithIgnoreCase(path, URI)) {
+                return chain.filter(exchange);
+            }
+            String basePath = path.substring(0, path.lastIndexOf(URI));
+            ServerHttpRequest newRequest = request.mutate().header(HEADER_NAME, basePath).build();
+            ServerWebExchange newExchange = exchange.mutate().request(newRequest).build();
+            return chain.filter(newExchange);
+        };
+    }
+
+}
\ No newline at end of file
diff --git a/server/system_gateway/src/main/java/com/doumee/config/swagger/SwaggerInterceptor.java b/server/system_gateway/src/main/java/com/doumee/config/swagger/SwaggerInterceptor.java
deleted file mode 100644
index 8fd55c6..0000000
--- a/server/system_gateway/src/main/java/com/doumee/config/swagger/SwaggerInterceptor.java
+++ /dev/null
@@ -1,45 +0,0 @@
-package com.doumee.config.swagger;
-
-import lombok.extern.slf4j.Slf4j;
-import org.apache.commons.lang3.StringUtils;
-import org.springframework.beans.factory.annotation.Value;
-import org.springframework.stereotype.Component;
-import org.springframework.web.servlet.HandlerInterceptor;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-import java.io.IOException;
-
-/**
- * Swagger鎷︽埅鍣�
- * @author Eva.Caesar Liu
- * @date 2022/04/18 18:12
- */
-@Slf4j
-@Component
-public class SwaggerInterceptor implements HandlerInterceptor {
-
-    @Value("${swagger.enabled:false}")
-    private Boolean enabledSwagger;
-
-    @Value("${swagger.redirect-uri:/}")
-    private String redirectUri;
-
-    @Override
-    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) {
-        if (!enabledSwagger) {
-            String uri = request.getContextPath();
-            if (StringUtils.isNotBlank(redirectUri))
-                uri = request.getContextPath() + redirectUri;
-            if (StringUtils.isBlank(uri))
-                uri = "/";
-            try {
-                response.sendRedirect(uri);
-            } catch (IOException e) {
-                log.error(String.format("Redirect to '%s' for swagger throw an exception : %s", uri, e.getMessage()), e);
-            }
-            return Boolean.FALSE;
-        }
-        return Boolean.TRUE;
-    }
-}
diff --git a/server/system_gateway/src/main/java/com/doumee/config/swagger/SwaggerInterceptorConfig.java b/server/system_gateway/src/main/java/com/doumee/config/swagger/SwaggerInterceptorConfig.java
deleted file mode 100644
index f67e9a8..0000000
--- a/server/system_gateway/src/main/java/com/doumee/config/swagger/SwaggerInterceptorConfig.java
+++ /dev/null
@@ -1,23 +0,0 @@
-package com.doumee.config.swagger;
-
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.context.annotation.Configuration;
-import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
-import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
-
-/**
- * Swagger鎷︽埅鍣ㄩ厤缃�
- * @author Eva.Caesar Liu
- * @date 2022/04/18 18:12
- */
-@Configuration
-public class SwaggerInterceptorConfig implements WebMvcConfigurer {
-
-    @Autowired
-    private SwaggerInterceptor swaggerInterceptor;
-
-    @Override
-    public void addInterceptors(InterceptorRegistry registry) {
-        registry.addInterceptor(swaggerInterceptor).addPathPatterns("/swagger-ui.html", "/doc.html");
-    }
-}
diff --git a/server/system_gateway/src/main/java/com/doumee/config/swagger/SwaggerResourceConfig.java b/server/system_gateway/src/main/java/com/doumee/config/swagger/SwaggerResourceConfig.java
new file mode 100644
index 0000000..43fd81a
--- /dev/null
+++ b/server/system_gateway/src/main/java/com/doumee/config/swagger/SwaggerResourceConfig.java
@@ -0,0 +1,49 @@
+package com.doumee.config.swagger;
+import lombok.AllArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.cloud.gateway.config.GatewayProperties;
+import org.springframework.cloud.gateway.route.RouteLocator;
+import org.springframework.cloud.gateway.support.NameUtils;
+import org.springframework.context.annotation.Primary;
+import org.springframework.stereotype.Component;
+import springfox.documentation.swagger.web.SwaggerResource;
+import springfox.documentation.swagger.web.SwaggerResourcesProvider;
+
+import java.util.ArrayList;
+import java.util.List;
+
+@Slf4j
+@Component
+@Primary
+@AllArgsConstructor
+public class SwaggerResourceConfig implements SwaggerResourcesProvider {
+
+    private final RouteLocator routeLocator;
+    private final GatewayProperties gatewayProperties;
+
+
+    @Override
+    public List<SwaggerResource> get() {
+        List<SwaggerResource> resources = new ArrayList<>();
+        List<String> routes = new ArrayList<>();
+        routeLocator.getRoutes().subscribe(route -> routes.add(route.getId()));
+        gatewayProperties.getRoutes().stream().filter(routeDefinition -> routes.contains(routeDefinition.getId())).forEach(route -> {
+            route.getPredicates().stream()
+                    .filter(predicateDefinition -> ("Path").equalsIgnoreCase(predicateDefinition.getName()))
+                    .forEach(predicateDefinition -> resources.add(swaggerResource(route.getId(),
+                            predicateDefinition.getArgs().get(NameUtils.GENERATED_NAME_PREFIX + "0")
+                                    .replace("**", "v2/api-docs?group=default"))));
+        });
+
+        return resources;
+    }
+
+    private SwaggerResource swaggerResource(String name, String location) {
+        log.info("name:{},location:{}",name,location);
+        SwaggerResource swaggerResource = new SwaggerResource();
+        swaggerResource.setName(name);
+        swaggerResource.setLocation(location);
+        swaggerResource.setSwaggerVersion("1.0.0");
+        return swaggerResource;
+    }
+}
diff --git a/server/system_gateway/src/main/resources/application-dev.yml b/server/system_gateway/src/main/resources/application-dev.yml
index fad750a..ca88fb1 100644
--- a/server/system_gateway/src/main/resources/application-dev.yml
+++ b/server/system_gateway/src/main/resources/application-dev.yml
@@ -18,12 +18,12 @@
 #  username: 4derRb4Sw5EkqUMI
 #  password: v50N97wf4av8Q8I4
 
-knife4j:
-  enable: true
-  basic:
-    enable: true
-    username: admin
-    password: 111111
+#knife4j:
+#  enable: true
+#  basic:
+#    enable: true
+#    username: admin
+#    password: 111111
 
 debug_model: true
 
diff --git a/server/system_gateway/src/main/resources/application-pro.yml b/server/system_gateway/src/main/resources/application-pro.yml
index b3934c8..3eefb0d 100644
--- a/server/system_gateway/src/main/resources/application-pro.yml
+++ b/server/system_gateway/src/main/resources/application-pro.yml
@@ -8,12 +8,12 @@
     type: com.alibaba.druid.pool.DruidDataSource
 
 
-knife4j:
-  enable: true
-  basic:
-    enable: true
-    username: admin
-    password: doumee@168.com
+#knife4j:
+#  enable: true
+#  basic:
+#    enable: true
+#    username: admin
+#    password: doumee@168.com
 
 debug_model: true
 
diff --git a/server/system_gateway/src/main/resources/application-test.yml b/server/system_gateway/src/main/resources/application-test.yml
index e4c1f69..e866548 100644
--- a/server/system_gateway/src/main/resources/application-test.yml
+++ b/server/system_gateway/src/main/resources/application-test.yml
@@ -8,12 +8,12 @@
     type: com.alibaba.druid.pool.DruidDataSource
 
 
-knife4j:
-  enable: true
-  basic:
-    enable: true
-    username: admin
-    password: test@168.com
+#knife4j:
+#  enable: true
+#  basic:
+#    enable: true
+#    username: admin
+#    password: test@168.com
 
 debug_model: true
 
diff --git a/server/system_gateway/src/main/resources/application.yml b/server/system_gateway/src/main/resources/application.yml
index d1e7a41..77b45bc 100644
--- a/server/system_gateway/src/main/resources/application.yml
+++ b/server/system_gateway/src/main/resources/application.yml
@@ -25,7 +25,7 @@
       enabled: true
   main:
     allow-circular-references: true
-#    web-application-type: reactive
+    web-application-type: reactive
 # MyBatis閰嶇疆
 mybatis-plus:
   mapper-locations: classpath*:/mappers/**/*.xml
@@ -63,7 +63,9 @@
   basic:
     enable: true
     username: admin
-    password: 111111
+    password: 123456
+  main:
+    allow-circular-references: true
 
 # WEB鏈嶅姟鍣ㄩ厤缃�
 server:
diff --git a/server/system_gateway/src/main/resources/bootstrap.yml b/server/system_gateway/src/main/resources/bootstrap.yml
index d6bacc9..083a9d5 100644
--- a/server/system_gateway/src/main/resources/bootstrap.yml
+++ b/server/system_gateway/src/main/resources/bootstrap.yml
@@ -1,6 +1,12 @@
 spring:
   application:
     name: system_gateway
+  # 瀹夊叏閰嶇疆
+  security:
+    # 楠岀鍏挜鍦板潃
+    oauth2:
+      authorizationserver:
+        token-uri: https://
   cloud:
     nacos:
       server-addr: http://175.27.187.84:8848 #閰嶇疆Nacos鍦板潃
@@ -20,24 +26,69 @@
           lower-case-service-id: true
       routes:
         - id: meetingAdmin
+          name: 浼氳瀹ゅ井鏈嶅姟
           uri: lb://meetingAdmin
 #          uri: http://localhost:10013
           # 鏂█,璺緞鐩稿尮閰嶇殑杩涜璺敱
           predicates:
             - Path=/meetingAdmin/**
           filters:
+            - SwaggerHeaderFilter
             - StripPrefix=1
 
         - id: visitsAdmin
           uri: lb://visitsAdmin
+          name: 璁垮绯荤粺寰湇鍔�
 #          uri: http://localhost:10028
           # 鏂█,璺緞鐩稿尮閰嶇殑杩涜璺敱
           predicates:
             - Path=/visitsAdmin/**
           filters:
+            - SwaggerHeaderFilter
             - StripPrefix=1
 management:
   endpoints:
     web:
       exposure:
         include: "*"
+
+knife4j:
+  # 鑱氬悎swagger鏂囨。
+  gateway:
+    # 绗竴涓厤缃紝寮�鍚痝ateway鑱氬悎缁勪欢
+    enabled: true
+    # 绗簩琛岄厤缃紝璁剧疆鑱氬悎妯″紡閲囩敤discover鏈嶅姟鍙戠幇鐨勬ā寮�
+    strategy: discover
+    # 鏈嶅姟鍙戠幇妯″紡鐨勯厤缃�
+    discover:
+      # 绗笁琛岄厤缃紝寮�鍚痙iscover妯″紡
+      enabled: true
+      # 鑱氬悎鎵�鏈夊瓙鏈嶅姟(swagger2瑙勮寖)锛屽瓙鏈嶅姟鏄�3瑙勮寖鍒欐浛鎹负openapi3
+      version: swagger2
+      # 闇�瑕佹帓闄ょ殑寰湇鍔�(eg:缃戝叧鏈嶅姟)
+      excluded-services:
+        - gateway-service
+
+# Api鏂囨。淇℃伅
+# springdoc-openapi 椤圭洰閰嶇疆
+springdoc:
+  swagger-ui:
+    path: /doc.html
+    tags-sorter: alpha
+    operations-sorter: alpha
+  api-docs:
+    path: /v2/api-docs
+  group-configs:
+    - group: 'default'
+      paths-to-match: '/**'
+  info:
+    title: ${spring.application.name} - API
+    version: 3.0.0
+    description: 鎺ュ彛鏂囨。
+    contact:
+      name: 1
+      url: 1
+      email: 1
+    license:
+      name: Apache 2.0
+      url: https://www.apache.org/licenses/LICENSE-2.0.html
diff --git a/server/system_service/pom.xml b/server/system_service/pom.xml
index 0f8156b..d54b462 100644
--- a/server/system_service/pom.xml
+++ b/server/system_service/pom.xml
@@ -38,6 +38,10 @@
     </properties>
 
     <dependencies>
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-web</artifactId>
+        </dependency>
         <!-- Spring Boot -->
         <dependency>
             <groupId>org.springframework.boot</groupId>
@@ -98,12 +102,21 @@
         </dependency>
 
         <!-- swagger -->
-        <dependency>
+         <dependency>
             <groupId>com.github.xiaoymin</groupId>
             <artifactId>knife4j-spring-boot-starter</artifactId>
             <version>3.0.3</version>
         </dependency>
-
+        <dependency>
+            <groupId>io.springfox</groupId>
+            <artifactId>springfox-boot-starter</artifactId>
+            <version>3.0.0</version>
+        </dependency>
+        <dependency>
+            <groupId>io.swagger.core.v3</groupId>
+            <artifactId>swagger-annotations</artifactId>
+            <version>2.1.5</version>
+        </dependency>
         <!-- lombok -->
         <dependency>
             <groupId>javax.validation</groupId>
diff --git a/server/system_service/src/main/java/com/doumee/api/common/CaptchaController.java b/server/system_service/src/main/java/com/doumee/api/common/CaptchaController.java
deleted file mode 100644
index 209d40f..0000000
--- a/server/system_service/src/main/java/com/doumee/api/common/CaptchaController.java
+++ /dev/null
@@ -1,35 +0,0 @@
-package com.doumee.api.common;
-
-import com.doumee.api.BaseController;
-import com.doumee.core.annotation.trace.Trace;
-import com.doumee.core.model.ApiResponse;
-import com.doumee.service.common.CaptchaService;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
-
-/**
- * @author Eva.Caesar Liu
- * @date 2023/03/21 14:49
- */
-@Api(tags = "鍥剧墖楠岃瘉鐮佹帴鍙�")
-@Trace(exclude = true)
-@RestController
-@RequestMapping("/common")
-public class CaptchaController extends BaseController {
-    @Autowired
-    private CaptchaService captchaService;
-
-    /**
-     * @author Eva.Caesar Liu
-     * @date 2023/03/21 14:49
-     */
-    @ApiOperation("鑾峰彇鍥剧墖楠岃瘉鐮�")
-    @GetMapping("/captcha")
-    public ApiResponse<CaptchaService.Captcha> getCaptcha() {
-        return ApiResponse.success(captchaService.genCaptcha());
-    }
-}
diff --git a/server/system_service/src/main/java/com/doumee/api/common/PublicController.java b/server/system_service/src/main/java/com/doumee/api/common/PublicController.java
deleted file mode 100644
index a446dbd..0000000
--- a/server/system_service/src/main/java/com/doumee/api/common/PublicController.java
+++ /dev/null
@@ -1,377 +0,0 @@
-package com.doumee.api.common;
-
-import com.alibaba.fastjson.JSONObject;
-import com.doumee.api.BaseController;
-import com.doumee.biz.system.SystemDictDataBiz;
-import com.doumee.core.annotation.trace.Trace;
-import com.doumee.core.utils.Constants;
-import com.doumee.core.utils.DateUtil;
-import com.doumee.core.utils.FtpUtil;
-import com.doumee.core.utils.aliyun.ALiYunUtil;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
-import lombok.extern.slf4j.Slf4j;
-import org.apache.commons.lang3.StringUtils;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RequestMethod;
-import org.springframework.web.bind.annotation.ResponseBody;
-import org.springframework.web.bind.annotation.RestController;
-import org.springframework.web.multipart.MultipartFile;
-import org.springframework.web.multipart.MultipartHttpServletRequest;
-import org.springframework.web.multipart.commons.CommonsMultipartResolver;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-import java.io.File;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.PrintWriter;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.Map;
-import java.util.UUID;
-
-/**
- * @author Eva.Caesar Liu
- * @date 2023/02/14 11:14
- */
-@Api(tags = "鍏叡鎺ュ彛")
-@Trace(exclude = true)
-@RestController
-@RequestMapping("/public")
-@Slf4j
-public class PublicController extends BaseController {
-
-
-    @Autowired
-    private SystemDictDataBiz systemDictDataBiz;
-
-
-//    @ApiOperation(value = "涓婁紶", notes = "涓婁紶", httpMethod = "POST", position = 6)
-//    @ApiImplicitParams({
-//            @ApiImplicitParam(name = "folder", value = "鏂囦欢澶�", required = true, paramType = "query", dataType = "String", dataTypeClass = String.class),
-//    })
-//    @PostMapping(value = "/upload", headers = "content-type=multipart/form-data")
-//    public void uploadMobile(String folder, HttpServletRequest request, HttpServletResponse response) throws Exception {
-//        MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;
-//        upload(multipartRequest, response, folder + "/",
-//                systemDictDataBiz.queryByCode(Constants.OSS,Constants.BUCKETNAME).getCode(),
-//                systemDictDataBiz.queryByCode(Constants.OSS,Constants.ACCESS_ID).getCode(),
-//                systemDictDataBiz.queryByCode(Constants.OSS,Constants.ACCESS_KEY).getCode(),
-//                systemDictDataBiz.queryByCode(Constants.OSS,Constants.RESOURCE_PATH).getCode(),
-//                systemDictDataBiz.queryByCode(Constants.OSS,Constants.ENDPOINT).getCode());
-//    }
-//
-//
-//    @ApiOperation(value = "涓婁紶鍥剧墖", notes = "涓婁紶鍥剧墖", httpMethod = "POST", position = 6)
-//    @ApiImplicitParams({
-//            @ApiImplicitParam(name = "folder", value = "鏂囦欢澶�", required = true, paramType = "query", dataType = "String", dataTypeClass = String.class),
-//    })
-//    @PostMapping(value = "/uploadPicture", headers = "content-type=multipart/form-data")
-//    public void uploadPicture(String folder, HttpServletRequest request, HttpServletResponse response) throws Exception {
-//        MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;
-//        Iterator<String> fileNames = multipartRequest.getFileNames();
-//        Map<String, Object> context = new HashMap<>();
-//        while (fileNames.hasNext()){
-//            MultipartFile file = multipartRequest.getFile(fileNames.next());
-//            String fileName = file.getOriginalFilename();
-//            String suffix = fileName.substring(fileName.lastIndexOf("."));
-//            if ( !StringUtils.equalsIgnoreCase(suffix, ".jpg") || !StringUtils.equalsIgnoreCase(suffix, ".png")) {
-//                context.put("code", 0);
-//                context.put("message", "瀵逛笉璧凤紝鏂囦欢鏍煎紡涓婁紶鏈夎锛�");
-//            }
-//        }
-//        upload(multipartRequest, response, folder + "/",
-//                systemDictDataBiz.queryByCode(Constants.OSS,Constants.BUCKETNAME).getCode(),
-//                systemDictDataBiz.queryByCode(Constants.OSS,Constants.ACCESS_ID).getCode(),
-//                systemDictDataBiz.queryByCode(Constants.OSS,Constants.ACCESS_KEY).getCode(),
-//                systemDictDataBiz.queryByCode(Constants.OSS,Constants.RESOURCE_PATH).getCode(),
-//                systemDictDataBiz.queryByCode(Constants.OSS,Constants.ENDPOINT).getCode());
-//    }
-
-
-
-
-    public static FtpUtil ftp  = null;
-
-    @ApiOperation(value = "涓婁紶鏂囦欢鍒癋TP")
-    @RequestMapping(method= RequestMethod.POST,value="upload")
-    @ResponseBody
-    public void upload(HttpServletRequest request, HttpServletResponse response, String folder) throws Exception {
-//        folder = systemDictDataBiz.queryByCode(Constants.FTP,folder).getCode();
-        String prefixPath = systemDictDataBiz.queryByCode(Constants.FTP,Constants.FTP_RESOURCE_PATH).getCode();
-        InputStream is = null;
-        response.setCharacterEncoding("UTF-8");
-        response.setContentType("text/html;charset=UTF-8");
-        Map<String, Object> context = new HashMap<>();
-        try {
-            if(ftp == null){
-                ftp = new FtpUtil(systemDictDataBiz.queryByCode(Constants.FTP,Constants.FTP_HOST).getCode(),
-                        Integer.parseInt(systemDictDataBiz.queryByCode(Constants.FTP,Constants.FTP_PORT).getCode()),
-                        systemDictDataBiz.queryByCode(Constants.FTP,Constants.FTP_USERNAME).getCode(),
-                        systemDictDataBiz.queryByCode(Constants.FTP,Constants.FTP_PWD).getCode());
-            }else{
-                ftp.connect();
-            }
-
-            CommonsMultipartResolver multipartResovler = new CommonsMultipartResolver();
-            if (multipartResovler.isMultipart(request)) {
-                MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;
-                Iterator<String> it = multipartRequest.getFileNames();
-                while (it.hasNext()) {
-                    MultipartFile file = multipartRequest.getFile(it.next());
-                    is = file.getInputStream();
-                    String date = DateUtil.getNowShortDate();
-                    String fName =  date+"/"+ UUID.randomUUID()+".jpg";
-                    String fileName = folder+fName;
-                    boolean r = ftp.uploadInputstream(is,fileName);
-                    if(r){
-                        context.put("success", true);
-                        context.put("code", 200);
-                        context.put("errno",0);
-                        JSONObject fileJSON = new JSONObject();
-                        fileJSON.put("halfPath", fName);
-                        fileJSON.put("prefixPath", prefixPath);
-                        fileJSON.put("folder", folder);
-                        context.put("data",fileJSON);
-                        context.put("message","璇锋眰鎴愬姛");
-                        writerJson(response, context);
-                        return;
-                    }
-                }
-            }
-        } catch (Exception e) {
-            log.error("銆愪笂浼燜TP澶辫触銆�======================"+e.getMessage());
-        }
-        context.put("code", 0);
-        context.put("message", "涓婁紶澶辫触");
-        context.put("errno",0);
-        writerJson(response, context);
-        return;
-    }
-
-
-
-    public void upload(HttpServletRequest request, HttpServletResponse response, String folder, String bucketName,
-                       String access_id, String access_key, String resourcePath, String endpoint) throws Exception {
-        response.setCharacterEncoding("UTF-8");
-        response.setContentType("text/html;charset=UTF-8");
-        Map<String, Object> context = new HashMap<>();
-        CommonsMultipartResolver multipartResovler = new CommonsMultipartResolver();
-        if (multipartResovler.isMultipart(request)) {
-            MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;
-            Iterator<String> it = multipartRequest.getFileNames();
-            while (it.hasNext()) {
-                MultipartFile file = multipartRequest.getFile((String) it.next());// file
-                // multipartRequest.getFile((String)
-                // it.next());
-                if (file != null) {
-                    // 1銆佷笂浼犲埌鏈嶅姟鍣ㄤ复鏃舵枃浠跺す
-                    String uploadFileName = file.getOriginalFilename();
-                    String originname = uploadFileName;
-                    if (originname.lastIndexOf("/") >= 0) {
-                        originname = originname.substring(originname.lastIndexOf("/") + 1);
-                    }
-                    String nfix = "";// 鍚庣紑鍚�
-                    if (StringUtils.isNotBlank(uploadFileName)) {
-                        nfix = uploadFileName.substring(uploadFileName.lastIndexOf("."));
-                    }
-                    if (StringUtils.equalsIgnoreCase(nfix, ".exe")) {
-                        context.put("code", 4000);
-                        context.put("message", "瀵逛笉璧凤紝鏂囦欢鏍煎紡\".exe\"涓婁紶鏈夎锛�");
-                        return;
-                    }
-                    if (StringUtils.equalsIgnoreCase(nfix, ".dll")) {
-                        context.put("code", 4000);
-                        context.put("message", "瀵逛笉璧凤紝鏂囦欢鏍煎紡\".dll\"涓婁紶鏈夎锛�");
-                        return;
-                    }
-                    String nowDate = DateUtil.getNowShortDate();// 褰撳墠鏃堕棿锛堝勾鏈堟棩锛�
-                    String fileName = UUID.randomUUID().toString() + nfix;
-                    String tempFileName = nowDate + "/" + fileName;
-                    String key = folder + tempFileName;// 鏂囦欢鍚�
-                    ALiYunUtil obs = new ALiYunUtil(endpoint,access_id, access_key);
-                    if (obs.uploadOnlineObject(file.getInputStream(),bucketName, key,null)) {
-                        // 绉诲姩鎴愬姛,杩斿洖鏂囦欢鍚�
-                        // sendSuccessMessage(response, resourcePath+key);
-                        context.put("success", true);
-                        context.put("code", 200);
-                        context.put("errno",0);
-                        JSONObject fileJSON = new JSONObject();
-                        fileJSON.put("url", resourcePath + key);
-                        fileJSON.put("imgaddr", tempFileName);
-                        fileJSON.put("imgname", fileName);
-                        fileJSON.put("originname", originname);
-                        context.put("data",fileJSON);
-                        context.put("message","璇锋眰鎴愬姛");
-                        writerJson(response, context);
-                        return;
-                    } else {
-                        // 绉诲姩澶辫触
-                        context.put("code", 0);
-                        context.put("message", "涓婁紶澶辫触");
-                        writerJson(response, context);
-                        return;
-                    }
-                }
-
-            }
-        }
-        context.put("code", 0);
-        context.put("message", "涓婁紶澶辫触");
-        context.put("errno",0);
-        writerJson(response, context);
-        return;
-    }
-
-    public static void writerJson(HttpServletResponse response, Object object) {
-        response.setContentType("application/json");
-        writer(response, JSONObject.toJSONString(object));
-    }
-
-    private static void writer(HttpServletResponse response, String str) {
-        try {
-            StringBuffer result = new StringBuffer();
-            //璁剧疆椤甸潰涓嶇紦瀛�
-            response.setHeader("Pragma", "No-cache");
-            response.setHeader("Cache-Control", "no-cache");
-            response.setCharacterEncoding("UTF-8");
-            PrintWriter out = null;
-            out = response.getWriter();
-            out.print(str);
-            out.flush();
-            out.close();
-        } catch (IOException e) {
-            e.printStackTrace();
-        }
-    }
-
-
-
-
-    public void uploadFileLocal(HttpServletRequest request, String folder, HttpServletResponse response, String rootPath,String dir) throws Exception {
-        response.setCharacterEncoding("UTF-8");
-        response.setContentType("text/html;charset=UTF-8");
-        CommonsMultipartResolver multipartResovler = new CommonsMultipartResolver();
-        Map<String, Object> context = new HashMap<>();
-        if (multipartResovler.isMultipart(request)) {
-            MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;
-            Iterator<String> it = multipartRequest.getFileNames();
-            while (it.hasNext()) {
-                MultipartFile file = multipartRequest.getFile((String) it.next());// file
-                // =
-                // (CommonsMultipartFile)
-                // multipartRequest.getFile((String)
-                // it.next());
-                if (file != null) {
-                    if (file.getSize() > 200 * 1024 * 1024L) {
-                        context.put("code", 4000);
-                        context.put("message", "涓婁紶鏂囦欢杩囧ぇ");
-                        return;
-                    }
-                    System.out.println(file.getOriginalFilename());
-                    if (file.getOriginalFilename() == null) {
-                        context.put("code", 4000);
-                        context.put("message", "鏂囦欢鍚嶄笉鍙负绌�");
-                        return;
-                    }
-                    /*
-                     * if(file.getOriginalFilename().contains(",")||file.getOriginalFilename().
-                     * contains(" ")){ sendFailureMessage(response,"鏂囦欢鍚嶇О鏈夎,涓嶅彲鍚湁閫楀彿绛夌壒娈婂瓧绗�"); }
-                     */
-
-                    String nowDate = DateUtil.getNowShortDate();
-                    folder += nowDate + "/";
-                    String strDirPath = rootPath + folder;
-                    File dirPath = new File(strDirPath);
-                    if (!dirPath.exists()) {
-                        dirPath.mkdirs();
-                    }
-                    String uploadFileName = file.getOriginalFilename();
-                    String x = UUID.randomUUID().toString().replace("-", "")
-                            + uploadFileName.substring(uploadFileName.lastIndexOf("."));
-                    String fileName = folder + x;
-                    String fileNames = nowDate + "/" + x;
-                    uploadFileName = uploadFileName.replace(" ", "");
-                    uploadFileName = uploadFileName.replace("锛�", ",");
-                    uploadFileName = uploadFileName.replaceAll(",", "-");
-                    System.err.println("R:" + fileName);
-                    String fileAndPath = dir + fileName;
-                    System.err.println("A:" + fileAndPath);
-                    // 鍒ゆ柇濡傛灉涓存椂鐩綍涓瓨鍦ㄧ浉鍚屽悕绉扮殑鏂囦欢鍏堝垹闄わ紝鍦ㄤ笂浼�
-                    File tempFile = new File(rootPath + fileName);
-                    if (tempFile.isFile() && tempFile.exists()) {
-                        tempFile.getAbsoluteFile().delete();
-                    }
-                    // 涓婁紶鍒版湇鍔″櫒涓存椂鏂囦欢澶�
-                    file.transferTo(tempFile);
-                    // 杞Щ鍒癋TP鏈嶅姟鍣�
-                    String nfix = "";
-                    if (null != uploadFileName) {
-                        nfix = uploadFileName.substring(uploadFileName.lastIndexOf("."));
-                    }
-
-                    if (StringUtils.equalsIgnoreCase(nfix, ".exe")) {
-                        context.put("code", 4000);
-                        context.put("message", "瀵逛笉璧凤紝鏂囦欢鏍煎紡\".exe\"涓婁紶鏈夎锛�");
-                        return;
-                    }
-                    if (StringUtils.equalsIgnoreCase(nfix, ".dll")) {
-                        context.put("code", 4000);
-                        context.put("message", "瀵逛笉璧凤紝鏂囦欢鏍煎紡\".dll\"涓婁紶鏈夎锛�");
-                        return;
-                    }
-
-                    String remoteName = fileName;
-                    String remoteFileName = fileAndPath;
-
-             /*       Map map = new HashMap();
-                    map.put("url", remoteFileName);
-                    map.put("alt", uploadFileName);
-                    map.put("href", remoteFileName);
-                    List maps = Arrays.asList(remoteFileName);*/
-
-                    if (true) {
-                        // 鍏抽棴FTP娴�
-                        // 绉诲姩鎴愬姛,杩斿洖鏂囦欢鍚�
-
-                        /*context.put("error", 0);
-                        context.put("url", remoteFileName);
-                        context.put("fullurl", remoteFileName);
-                        context.put("fname", uploadFileName);
-                        context.put("data", maps);
-                        context.put("halfurl", fileNames);*/
-
-                        context.put("success", true);
-                        context.put("code", 200);
-                        context.put("errno",0);
-                        JSONObject fileJSON = new JSONObject();
-                        fileJSON.put("url", remoteFileName);
-                        fileJSON.put("imgaddr", fileNames);
-                        fileJSON.put("imgname", uploadFileName);
-                        fileJSON.put("originname", uploadFileName);
-                        context.put("data",fileJSON);
-                        context.put("message","璇锋眰鎴愬姛");
-
-                        writerJson(response, context);
-                        return;
-                    } else {
-                        // 绉诲姩澶辫触
-                        context.put("code", 0);
-                        context.put("message", "涓婁紶澶辫触");
-                        writerJson(response, context);
-                    }
-                }
-                context.put("code", 0);
-                context.put("message", "涓婁紶澶辫触");
-                writerJson(response, context);
-                return;
-            }
-        }
-        context.put("code", 0);
-        context.put("message", "涓婁紶澶辫触");
-        writerJson(response, context);
-        return;
-    }
-}
diff --git a/server/system_service/src/main/java/com/doumee/api/system/NoticesController.java b/server/system_service/src/main/java/com/doumee/api/system/NoticesController.java
index 6f3811e..7fa757f 100644
--- a/server/system_service/src/main/java/com/doumee/api/system/NoticesController.java
+++ b/server/system_service/src/main/java/com/doumee/api/system/NoticesController.java
@@ -13,12 +13,14 @@
 import io.swagger.annotations.ApiOperation;
 import org.apache.shiro.authz.annotation.RequiresPermissions;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.*;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
 
 import javax.servlet.http.HttpServletResponse;
 import java.util.ArrayList;
 import java.util.List;
 
+import org.springframework.web.bind.annotation.*;
 /**
  * @author 姹熻箘韫�
  * @date 2024/01/16 10:03
diff --git a/server/system_service/src/main/java/com/doumee/api/system/SystemController.java b/server/system_service/src/main/java/com/doumee/api/system/SystemController.java
index 8b7ba74..7572835 100644
--- a/server/system_service/src/main/java/com/doumee/api/system/SystemController.java
+++ b/server/system_service/src/main/java/com/doumee/api/system/SystemController.java
@@ -16,10 +16,11 @@
 import org.apache.shiro.subject.Subject;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.validation.annotation.Validated;
-import org.springframework.web.bind.annotation.*;
 
 import javax.servlet.http.HttpServletRequest;
 
+import org.springframework.web.bind.annotation.*;
+
 /**
  * @author Eva.Caesar Liu
  * @date 2023/03/21 14:49
diff --git a/server/system_service/src/main/java/com/doumee/api/system/SystemDataPermissionController.java b/server/system_service/src/main/java/com/doumee/api/system/SystemDataPermissionController.java
index fcb5b7c..97f4ce8 100644
--- a/server/system_service/src/main/java/com/doumee/api/system/SystemDataPermissionController.java
+++ b/server/system_service/src/main/java/com/doumee/api/system/SystemDataPermissionController.java
@@ -17,12 +17,13 @@
 import org.apache.shiro.authz.annotation.RequiresPermissions;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.validation.annotation.Validated;
-import org.springframework.web.bind.annotation.*;
 
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
 
+import org.springframework.web.bind.annotation.*;
+
 /**
  * @author Eva.Caesar Liu
  * @date 2023/03/21 14:49
diff --git a/server/system_service/src/main/java/com/doumee/api/system/SystemDictDataController.java b/server/system_service/src/main/java/com/doumee/api/system/SystemDictDataController.java
index 1b44045..92793f0 100644
--- a/server/system_service/src/main/java/com/doumee/api/system/SystemDictDataController.java
+++ b/server/system_service/src/main/java/com/doumee/api/system/SystemDictDataController.java
@@ -19,6 +19,8 @@
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.*;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
 
 import java.util.ArrayList;
 import java.util.List;
diff --git a/server/system_service/src/main/java/com/doumee/api/system/SystemMenuController.java b/server/system_service/src/main/java/com/doumee/api/system/SystemMenuController.java
index 5e4cf01..9b4514c 100644
--- a/server/system_service/src/main/java/com/doumee/api/system/SystemMenuController.java
+++ b/server/system_service/src/main/java/com/doumee/api/system/SystemMenuController.java
@@ -14,10 +14,10 @@
 import org.apache.shiro.authz.annotation.RequiresPermissions;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.validation.annotation.Validated;
-import org.springframework.web.bind.annotation.*;
 
 import java.util.ArrayList;
 import java.util.List;
+import org.springframework.web.bind.annotation.*;
 
 /**
  * @author Eva.Caesar Liu
diff --git a/server/system_service/src/main/java/com/doumee/api/system/SystemPermissionController.java b/server/system_service/src/main/java/com/doumee/api/system/SystemPermissionController.java
index 327e24a..9720ebf 100644
--- a/server/system_service/src/main/java/com/doumee/api/system/SystemPermissionController.java
+++ b/server/system_service/src/main/java/com/doumee/api/system/SystemPermissionController.java
@@ -16,10 +16,10 @@
 import org.apache.shiro.authz.annotation.RequiresPermissions;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.validation.annotation.Validated;
-import org.springframework.web.bind.annotation.*;
 
 import java.util.ArrayList;
 import java.util.List;
+import org.springframework.web.bind.annotation.*;
 
 /**
  * @author Eva.Caesar Liu
diff --git a/server/system_service/src/main/java/com/doumee/api/system/SystemPositionController.java b/server/system_service/src/main/java/com/doumee/api/system/SystemPositionController.java
index 4670e06..c73ada3 100644
--- a/server/system_service/src/main/java/com/doumee/api/system/SystemPositionController.java
+++ b/server/system_service/src/main/java/com/doumee/api/system/SystemPositionController.java
@@ -19,11 +19,11 @@
 import org.apache.shiro.authz.annotation.RequiresPermissions;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.validation.annotation.Validated;
-import org.springframework.web.bind.annotation.*;
 
 import java.util.ArrayList;
 import java.util.List;
 
+import org.springframework.web.bind.annotation.*;
 /**
  * 宀椾綅鎺ュ彛
  * @author Eva.Caesar Liu
diff --git a/server/system_service/src/main/java/com/doumee/api/system/SystemRoleController.java b/server/system_service/src/main/java/com/doumee/api/system/SystemRoleController.java
index a81ad34..7b0e613 100644
--- a/server/system_service/src/main/java/com/doumee/api/system/SystemRoleController.java
+++ b/server/system_service/src/main/java/com/doumee/api/system/SystemRoleController.java
@@ -18,11 +18,11 @@
 import org.apache.shiro.authz.annotation.RequiresPermissions;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.validation.annotation.Validated;
-import org.springframework.web.bind.annotation.*;
 
 import java.util.ArrayList;
 import java.util.List;
 
+import org.springframework.web.bind.annotation.*;
 /**
  * @author Eva.Caesar Liu
  * @date 2023/03/21 14:49
diff --git a/server/system_service/src/main/java/com/doumee/api/system/SystemUserController.java b/server/system_service/src/main/java/com/doumee/api/system/SystemUserController.java
index a2cca7e..51550b6 100644
--- a/server/system_service/src/main/java/com/doumee/api/system/SystemUserController.java
+++ b/server/system_service/src/main/java/com/doumee/api/system/SystemUserController.java
@@ -19,13 +19,13 @@
 import org.apache.shiro.authz.annotation.RequiresPermissions;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.validation.annotation.Validated;
-import org.springframework.web.bind.annotation.*;
 import org.springframework.web.multipart.MultipartFile;
 
 import java.io.File;
 import java.util.ArrayList;
 import java.util.List;
 
+import org.springframework.web.bind.annotation.*;
 /**
  * @author Eva.Caesar Liu
  * @date 2023/03/21 14:49
diff --git a/server/system_service/src/main/java/com/doumee/core/utils/kuaidi100/ExpressUtils.java b/server/system_service/src/main/java/com/doumee/core/utils/kuaidi100/ExpressUtils.java
index 09285a0..05c440a 100644
--- a/server/system_service/src/main/java/com/doumee/core/utils/kuaidi100/ExpressUtils.java
+++ b/server/system_service/src/main/java/com/doumee/core/utils/kuaidi100/ExpressUtils.java
@@ -2,12 +2,9 @@
 
 import cn.hutool.http.HttpUtil;
 import com.alibaba.fastjson.JSON;
-import com.alibaba.fastjson.JSONObject;
 import com.doumee.core.constants.ResponseStatus;
 import com.doumee.core.exception.BusinessException;
-import io.swagger.util.Json;
 import org.apache.commons.codec.digest.DigestUtils;
-import org.springframework.beans.factory.annotation.Value;
 
 import java.util.HashMap;
 import java.util.Map;
diff --git a/server/system_service/src/main/java/com/doumee/dao/system/model/SystemDataPermission.java b/server/system_service/src/main/java/com/doumee/dao/system/model/SystemDataPermission.java
index 9f2e4b9..66505c7 100644
--- a/server/system_service/src/main/java/com/doumee/dao/system/model/SystemDataPermission.java
+++ b/server/system_service/src/main/java/com/doumee/dao/system/model/SystemDataPermission.java
@@ -7,7 +7,8 @@
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
 import lombok.Data;
-
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.tags.Tag;
 import javax.validation.constraints.NotBlank;
 import javax.validation.constraints.NotNull;
 import java.io.Serializable;
diff --git a/server/visits/dmvisit_admin/src/main/java/com/doumee/api/BaseController.java b/server/visits/dmvisit_admin/src/main/java/com/doumee/api/BaseController.java
index fd5ef6c..a390450 100644
--- a/server/visits/dmvisit_admin/src/main/java/com/doumee/api/BaseController.java
+++ b/server/visits/dmvisit_admin/src/main/java/com/doumee/api/BaseController.java
@@ -1,6 +1,5 @@
 package com.doumee.api;
 
-import com.doumee.config.Jwt.JwtTokenUtil;
 import com.doumee.core.model.LoginUserInfo;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.shiro.SecurityUtils;
@@ -35,16 +34,6 @@
     public HttpServletRequest getRequest() {
         HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
         return request;
-    }
-
-    /**
-     * 鑾峰彇鐢ㄦ埛ID
-     *
-     * @return
-     */
-    protected Integer getMemberId() {
-        Object obj = this.getRequest().getAttribute(JwtTokenUtil.UserId_Name);
-        return obj != null ? (Integer) obj : null;
     }
 
 
diff --git a/server/visits/dmvisit_admin/src/main/java/com/doumee/api/common/PublicController.java b/server/visits/dmvisit_admin/src/main/java/com/doumee/api/common/PublicController.java
index 7801a67..a446dbd 100644
--- a/server/visits/dmvisit_admin/src/main/java/com/doumee/api/common/PublicController.java
+++ b/server/visits/dmvisit_admin/src/main/java/com/doumee/api/common/PublicController.java
@@ -9,13 +9,14 @@
 import com.doumee.core.utils.FtpUtil;
 import com.doumee.core.utils.aliyun.ALiYunUtil;
 import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiImplicitParam;
-import io.swagger.annotations.ApiImplicitParams;
 import io.swagger.annotations.ApiOperation;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.*;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.ResponseBody;
+import org.springframework.web.bind.annotation.RestController;
 import org.springframework.web.multipart.MultipartFile;
 import org.springframework.web.multipart.MultipartHttpServletRequest;
 import org.springframework.web.multipart.commons.CommonsMultipartResolver;
diff --git a/server/visits/dmvisit_admin/src/main/java/com/doumee/api/system/SystemDictDataBizController.java b/server/visits/dmvisit_admin/src/main/java/com/doumee/api/system/SystemDictDataBizController.java
deleted file mode 100644
index 1f1b285..0000000
--- a/server/visits/dmvisit_admin/src/main/java/com/doumee/api/system/SystemDictDataBizController.java
+++ /dev/null
@@ -1,85 +0,0 @@
-package com.doumee.api.system;
-
-import com.doumee.api.BaseController;
-import com.doumee.biz.system.SystemDictDataBiz;
-import com.doumee.core.annotation.pr.PreventRepeat;
-import com.doumee.core.model.ApiResponse;
-import com.doumee.core.constants.OperaType;
-import com.doumee.core.model.PageData;
-import com.doumee.core.model.PageWrap;
-import com.doumee.core.utils.Constants;
-import com.doumee.dao.admin.request.VisitConfigDTO;
-import com.doumee.dao.system.dto.QuerySystemDictDataDTO;
-import com.doumee.dao.system.model.SystemDictData;
-import com.doumee.dao.system.vo.SystemDictDataListVO;
-import com.doumee.service.system.SystemDictDataService;
-import com.doumee.service.systembiz.SystemDictDataBizService;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiImplicitParam;
-import io.swagger.annotations.ApiImplicitParams;
-import io.swagger.annotations.ApiOperation;
-import org.apache.shiro.authz.annotation.RequiresPermissions;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.validation.annotation.Validated;
-import org.springframework.web.bind.annotation.*;
-
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- * @author Eva.Caesar Liu
- * @date 2023/03/21 14:49
- */
-@Api(tags = "瀛楀吀鏁版嵁")
-@RestController
-@RequestMapping("/system/dictDataBiz")
-public class SystemDictDataBizController extends BaseController {
-
-    @Autowired
-    private SystemDictDataBizService systemDictDataService;
-
-
-
-    /**
-     * 璁垮鏉ヨ閰嶇疆
-     * @return
-     */
-    @ApiOperation(value = "璁垮鏉ヨ閰嶇疆" )
-    @GetMapping("/getVisitConfigDTO")
-    public ApiResponse<VisitConfigDTO> getVisitConfigDTO(){
-        return ApiResponse.success(systemDictDataService.getVisitConfigDTO());
-    };
-
-    /**
-     * 淇敼璁垮鏉ヨ閰嶇疆
-     * @param visitConfigDTO
-     */
-    @ApiOperation(value = "淇敼璁垮鏉ヨ閰嶇疆" )
-    @PostMapping("/updateVisitConfig")
-    public ApiResponse updateVisitConfig(@RequestBody VisitConfigDTO visitConfigDTO){
-        systemDictDataService.updateVisitConfig(visitConfigDTO);
-        return ApiResponse.success(null);
-    };
-
-
-    /**
-     * 鍔冲姟鏉ヨ閰嶇疆
-     * @return
-     */
-    @ApiOperation(value = "鍔冲姟鏉ヨ閰嶇疆" )
-    @GetMapping("/getLaborConfigDTO")
-    public ApiResponse<VisitConfigDTO> getLaborConfigDTO(){
-        return ApiResponse.success(systemDictDataService.getLaborConfigDTO());
-    };
-
-    /**
-     * 淇敼鍔冲姟鏉ヨ閰嶇疆
-     * @param visitConfigDTO
-     */
-    @ApiOperation(value = "淇敼鍔冲姟鏉ヨ閰嶇疆" )
-    @PostMapping("/updateLaborConfigDTO")
-    public ApiResponse updateLaborConfigDTO(@RequestBody VisitConfigDTO visitConfigDTO){
-        systemDictDataService.updateLaborConfigDTO(visitConfigDTO);
-        return ApiResponse.success(null);
-    };
-}
diff --git a/server/system_service/src/main/java/com/doumee/api/timer/QuartzController.java b/server/visits/dmvisit_admin/src/main/java/com/doumee/api/timer/QuartzController.java
similarity index 100%
rename from server/system_service/src/main/java/com/doumee/api/timer/QuartzController.java
rename to server/visits/dmvisit_admin/src/main/java/com/doumee/api/timer/QuartzController.java
diff --git a/server/visits/dmvisit_admin/src/main/java/com/doumee/config/swagger/SwaggerConfig.java b/server/visits/dmvisit_admin/src/main/java/com/doumee/config/swagger/SwaggerConfig.java
index 1a237ee..c8f9c2c 100644
--- a/server/visits/dmvisit_admin/src/main/java/com/doumee/config/swagger/SwaggerConfig.java
+++ b/server/visits/dmvisit_admin/src/main/java/com/doumee/config/swagger/SwaggerConfig.java
@@ -46,7 +46,7 @@
                 .version(version)
                 .build();
     }
-    @Bean
+ /*   @Bean
     public Docket getDocket() {
         return new Docket(DocumentationType.SWAGGER_2)
                 .apiInfo(this.getApiInfo()).groupName("銆愮郴缁熺鐞嗘帴鍙PI銆�")
@@ -57,32 +57,20 @@
 //                .apis(RequestHandlerSelectors.withClassAnnotation(Api.class))
                 .paths(PathSelectors.any())
                 .build();
-    }
+    }*/
     @Bean
     public Docket getDocket2() {
         return new Docket(DocumentationType.SWAGGER_2)
-                .apiInfo(this.getApiInfo()).groupName("銆愪笟鍔$鐞嗘帴鍙PI銆�")
+                .apiInfo(this.getApiInfo()).groupName("default")
                 .host(host)
                 .select()
-                .apis( basePackage("com.doumee.api.business;"))
+                .apis( basePackage("com.doumee.api.system;com.doumee.api.business;com.doumee.api.common"))
                 // 璁剧疆闇�瑕佽鎵弿鐨勭被锛岃繖閲岃缃负娣诲姞浜咢Api娉ㄨВ鐨勭被
 //                .apis(RequestHandlerSelectors.withClassAnnotation(Api.class))
                 .paths(PathSelectors.any())
                 .build();
     }
-    @Bean
-    public Docket getDocket4() {
-        return new Docket(DocumentationType.SWAGGER_2)
-                .apiInfo(this.getApiInfo()).groupName("銆愬畾鏃朵换鍔℃帴鍙PI銆�")
-                .host(host)
-                .select()
-                .apis( basePackage("com.doumee.api.timer;"))
-                // 璁剧疆闇�瑕佽鎵弿鐨勭被锛岃繖閲岃缃负娣诲姞浜咢Api娉ㄨВ鐨勭被
-//                .apis(RequestHandlerSelectors.withClassAnnotation(Api.class))
-                .paths(PathSelectors.any())
-                .build();
-    }
-    @Bean
+   /* @Bean
     public Docket getDocket1() {
         return new Docket(DocumentationType.SWAGGER_2)
             .apiInfo(this.getApiInfo()).groupName("銆愬叕鍏辨帴鍙PI銆�")
@@ -93,7 +81,7 @@
 //                .apis(RequestHandlerSelectors.withClassAnnotation(Api.class))
             .paths(PathSelectors.any())
             .build();
-    }
+    }*/
     /**
      * 閲嶅啓basePackage鏂规硶锛屼娇鑳藉瀹炵幇澶氬寘璁块棶锛屽鍒惰创涓婂幓
      * @author  teavamc
diff --git a/server/visits/dmvisit_admin/src/main/resources/bootstrap.yml b/server/visits/dmvisit_admin/src/main/resources/bootstrap.yml
index de8f5dc..1a01249 100644
--- a/server/visits/dmvisit_admin/src/main/resources/bootstrap.yml
+++ b/server/visits/dmvisit_admin/src/main/resources/bootstrap.yml
@@ -1,6 +1,12 @@
 spring:
   application:
     name: visitsAdmin
+    # 瀹夊叏閰嶇疆
+  security:
+    # 楠岀鍏挜鍦板潃
+    oauth2:
+      authorizationserver:
+        token-uri: https://
   cloud:
     loadbalancer:
       enabled: true
@@ -28,3 +34,40 @@
         namespace: dmvisit
         username: nacos
         password: nacos
+# swagger閰嶇疆
+#knife4j:
+#  # 寮�鍚寮洪厤缃�
+#  enable: true
+#  # 寮�鍚敓浜х幆澧冨睆钄�
+#  # production: true
+#  setting:
+#    language: zh_cn
+#  # 璐︽埛瀵嗙爜
+#  basic:
+#    enable: true
+#    username: abc
+#    password: abc
+#
+## Api鏂囨。淇℃伅
+## springdoc-openapi 椤圭洰閰嶇疆
+#springdoc:
+#  swagger-ui:
+#    path: /doc.html
+#    tags-sorter: alpha
+#    operations-sorter: alpha
+#  api-docs:
+#    path: /v3/api-docs
+#  group-configs:
+#    - group: 'default'
+#      paths-to-match: '/**'
+#  info:
+#    title: ${spring.application.name} - API
+#    version: 3.0.0
+#    description: 鎺ュ彛鏂囨。
+#    contact:
+#      name: 1
+#      url: 1
+#      email: 1
+#    license:
+#      name: Apache 2.0
+#      url: https://www.apache.org/licenses/LICENSE-2.0.html
\ No newline at end of file
diff --git a/server/system_service/src/main/java/com/doumee/config/handler/GlobalExceptionHandler.java b/server/visits/dmvisit_service/src/main/java/com/doumee/config/handler/GlobalExceptionHandler.java
similarity index 99%
copy from server/system_service/src/main/java/com/doumee/config/handler/GlobalExceptionHandler.java
copy to server/visits/dmvisit_service/src/main/java/com/doumee/config/handler/GlobalExceptionHandler.java
index f80d6a1..20ddfd6 100644
--- a/server/system_service/src/main/java/com/doumee/config/handler/GlobalExceptionHandler.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/config/handler/GlobalExceptionHandler.java
@@ -1,8 +1,8 @@
 package com.doumee.config.handler;
 
+import com.doumee.core.constants.ResponseStatus;
 import com.doumee.core.exception.BusinessException;
 import com.doumee.core.model.ApiResponse;
-import com.doumee.core.constants.ResponseStatus;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.shiro.authz.UnauthorizedException;
diff --git a/server/visits/dmvisit_service/src/main/resources/application-dev.yml b/server/visits/dmvisit_service/src/main/resources/application-dev.yml
index 5532735..fcf49af 100644
--- a/server/visits/dmvisit_service/src/main/resources/application-dev.yml
+++ b/server/visits/dmvisit_service/src/main/resources/application-dev.yml
@@ -23,12 +23,12 @@
 #  username: 4derRb4Sw5EkqUMI
 #  password: v50N97wf4av8Q8I4
 
-knife4j:
-  enable: true
-  basic:
-    enable: true
-    username: admin
-    password: 111111
+#knife4j:
+#  enable: true
+#  basic:
+#    enable: true
+#    username: admin
+#    password: 111111
 
 debug_model: true
 
diff --git a/server/visits/dmvisit_service/src/main/resources/application-devYL.yml b/server/visits/dmvisit_service/src/main/resources/application-devYL.yml
index 9ed5843..edeed31 100644
--- a/server/visits/dmvisit_service/src/main/resources/application-devYL.yml
+++ b/server/visits/dmvisit_service/src/main/resources/application-devYL.yml
@@ -23,12 +23,12 @@
 #  username: 4derRb4Sw5EkqUMI
 #  password: v50N97wf4av8Q8I4
 
-knife4j:
-  enable: true
-  basic:
-    enable: true
-    username: admin
-    password: 111111
+#knife4j:
+#  enable: true
+#  basic:
+#    enable: true
+#    username: admin
+#    password: 111111
 
 debug_model: true
 ########################鍚屾鏁版嵁妯″紡  ########################
diff --git a/server/visits/dmvisit_service/src/main/resources/application-pro.yml b/server/visits/dmvisit_service/src/main/resources/application-pro.yml
index 2e4cbd2..820aa2f 100644
--- a/server/visits/dmvisit_service/src/main/resources/application-pro.yml
+++ b/server/visits/dmvisit_service/src/main/resources/application-pro.yml
@@ -13,12 +13,12 @@
     port: 6379
     password:
     timeout: 5000      # 杩炴帴姹犱腑鐨勬渶灏忕┖闂茶繛鎺�
-knife4j:
-  enable: true
-  basic:
-    enable: true
-    username: admin
-    password: doumee@168.com
+#knife4j:
+#  enable: true
+#  basic:
+#    enable: true
+#    username: admin
+#    password: doumee@168.com
 
 debug_model: true
 
diff --git a/server/visits/dmvisit_service/src/main/resources/application-test.yml b/server/visits/dmvisit_service/src/main/resources/application-test.yml
index 988f053..03700b7 100644
--- a/server/visits/dmvisit_service/src/main/resources/application-test.yml
+++ b/server/visits/dmvisit_service/src/main/resources/application-test.yml
@@ -23,12 +23,12 @@
 #  username: 4derRb4Sw5EkqUMI
 #  password: v50N97wf4av8Q8I4
 
-knife4j:
-  enable: true
-  basic:
-    enable: true
-    username: admin
-    password: 111111
+#knife4j:
+#  enable: true
+#  basic:
+#    enable: true
+#    username: admin
+#    password: 111111
 
 debug_model: true
 
diff --git a/server/visits/dmvisit_service/src/main/resources/application-testYL.yml b/server/visits/dmvisit_service/src/main/resources/application-testYL.yml
index 4324462..363db6d 100644
--- a/server/visits/dmvisit_service/src/main/resources/application-testYL.yml
+++ b/server/visits/dmvisit_service/src/main/resources/application-testYL.yml
@@ -23,12 +23,12 @@
 #  username: 4derRb4Sw5EkqUMI
 #  password: v50N97wf4av8Q8I4
 
-knife4j:
-  enable: true
-  basic:
-    enable: true
-    username: admin
-    password: 111111
+#knife4j:
+#  enable: true
+#  basic:
+#    enable: true
+#    username: admin
+#    password: 111111
 
 debug_model: true
 ########################鍚屾鏁版嵁妯″紡  ########################
diff --git a/server/visits/dmvisit_web/src/main/java/com/doumee/config/swagger/SwaggerConfig.java b/server/visits/dmvisit_web/src/main/java/com/doumee/config/swagger/SwaggerConfig.java
index 2b6e8f7..c8f9c2c 100644
--- a/server/visits/dmvisit_web/src/main/java/com/doumee/config/swagger/SwaggerConfig.java
+++ b/server/visits/dmvisit_web/src/main/java/com/doumee/config/swagger/SwaggerConfig.java
@@ -8,17 +8,12 @@
 import org.springframework.context.annotation.Configuration;
 import springfox.documentation.RequestHandler;
 import springfox.documentation.builders.ApiInfoBuilder;
-import springfox.documentation.builders.ParameterBuilder;
 import springfox.documentation.builders.PathSelectors;
 import springfox.documentation.oas.annotations.EnableOpenApi;
-import springfox.documentation.schema.ModelRef;
 import springfox.documentation.service.ApiInfo;
-import springfox.documentation.service.Parameter;
 import springfox.documentation.spi.DocumentationType;
 import springfox.documentation.spring.web.plugins.Docket;
 
-import java.util.ArrayList;
-import java.util.List;
 import java.util.function.Predicate;
 
 /**
@@ -51,40 +46,42 @@
                 .version(version)
                 .build();
     }
-    @Bean
-    public Docket getDocket3() {
+ /*   @Bean
+    public Docket getDocket() {
         return new Docket(DocumentationType.SWAGGER_2)
-                .apiInfo(this.getApiInfo()).groupName("銆愬皬绋嬪簭鎺ュ彛API銆�")
+                .apiInfo(this.getApiInfo()).groupName("銆愮郴缁熺鐞嗘帴鍙PI銆�")
                 .host(host)
                 .select()
-                .apis( basePackage("com.doumee.api.web"))
+                .apis( basePackage("com.doumee.api.system;"))
                 // 璁剧疆闇�瑕佽鎵弿鐨勭被锛岃繖閲岃缃负娣诲姞浜咢Api娉ㄨВ鐨勭被
 //                .apis(RequestHandlerSelectors.withClassAnnotation(Api.class))
                 .paths(PathSelectors.any())
-                .build()
-                .globalOperationParameters(this.getParameterList());
-    }
-
-    private List<Parameter> getParameterList() {
-        ParameterBuilder tokenPar = new ParameterBuilder();
-        List<Parameter> pars = new ArrayList<>();
-        tokenPar.name("token").description("浠ょ墝").modelRef(new ModelRef("string")).defaultValue("璁剧疆token榛樿鍊�").modelRef(new ModelRef("string")).parameterType("header").required(false).build();
-        pars.add(tokenPar.build());
-        return  pars;
-    }
-
+                .build();
+    }*/
     @Bean
-    public Docket getDocket1() {
+    public Docket getDocket2() {
         return new Docket(DocumentationType.SWAGGER_2)
-                .apiInfo(this.getApiInfo()).groupName("銆愬叕鍏辨帴鍙PI銆�")
+                .apiInfo(this.getApiInfo()).groupName("default")
                 .host(host)
                 .select()
-                .apis( basePackage("com.doumee.api.common"))
+                .apis( basePackage("com.doumee.api.system;com.doumee.api.business;com.doumee.api.common"))
                 // 璁剧疆闇�瑕佽鎵弿鐨勭被锛岃繖閲岃缃负娣诲姞浜咢Api娉ㄨВ鐨勭被
 //                .apis(RequestHandlerSelectors.withClassAnnotation(Api.class))
                 .paths(PathSelectors.any())
                 .build();
     }
+   /* @Bean
+    public Docket getDocket1() {
+        return new Docket(DocumentationType.SWAGGER_2)
+            .apiInfo(this.getApiInfo()).groupName("銆愬叕鍏辨帴鍙PI銆�")
+            .host(host)
+            .select()
+            .apis( basePackage("com.doumee.api.common"))
+            // 璁剧疆闇�瑕佽鎵弿鐨勭被锛岃繖閲岃缃负娣诲姞浜咢Api娉ㄨВ鐨勭被
+//                .apis(RequestHandlerSelectors.withClassAnnotation(Api.class))
+            .paths(PathSelectors.any())
+            .build();
+    }*/
     /**
      * 閲嶅啓basePackage鏂规硶锛屼娇鑳藉瀹炵幇澶氬寘璁块棶锛屽鍒惰创涓婂幓
      * @author  teavamc
diff --git a/server/visits/pom.xml b/server/visits/pom.xml
index facdcbd..5c307b2 100644
--- a/server/visits/pom.xml
+++ b/server/visits/pom.xml
@@ -21,10 +21,6 @@
     <dependencies>
         <dependency>
             <groupId>org.springframework.boot</groupId>
-            <artifactId>spring-boot-starter-web</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.springframework.boot</groupId>
             <artifactId>spring-boot-dependencies</artifactId>
             <version>2.3.12.RELEASE</version>
             <type>pom</type>
@@ -49,6 +45,12 @@
             <!-- <version>2.2.7.RELEASE</version>-->
         </dependency>
 
+        <!-- 鎺ュ彛鏂囨。 -->
+        <!--dependency>
+            <groupId>com.github.xiaoymin</groupId>
+            <artifactId>knife4j-openapi3-jakarta-spring-boot-starter</artifactId>
+            <version>4.3.0</version>
+        </dependency>-->
     </dependencies>
     <properties>
         <maven.compiler.source>8</maven.compiler.source>

--
Gitblit v1.9.3