diff --git a/.idea/.gitignore b/.idea/.gitignore
deleted file mode 100644
index 73f69e0..0000000
--- a/.idea/.gitignore
+++ /dev/null
@@ -1,8 +0,0 @@
-# Default ignored files
-/shelf/
-/workspace.xml
-# Datasource local storage ignored files
-/dataSources/
-/dataSources.local.xml
-# Editor-based HTTP Client requests
-/httpRequests/
diff --git a/.idea/compiler.xml b/.idea/compiler.xml
deleted file mode 100644
index 38d573b..0000000
--- a/.idea/compiler.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project version="4">
-  <component name="CompilerConfiguration">
-    <bytecodeTargetLevel target="8" />
-  </component>
-</project>
\ No newline at end of file
diff --git a/.idea/dictionaries b/.idea/dictionaries
deleted file mode 100644
index dee037e..0000000
--- a/.idea/dictionaries
+++ /dev/null
@@ -1,6 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project version="4">
-  <component name="ProjectDictionaryState">
-    <dictionary name="mima0000" />
-  </component>
-</project>
\ No newline at end of file
diff --git a/.idea/inspectionProfiles/Project_Default.xml b/.idea/inspectionProfiles/Project_Default.xml
deleted file mode 100644
index 9b6c85f..0000000
--- a/.idea/inspectionProfiles/Project_Default.xml
+++ /dev/null
@@ -1,37 +0,0 @@
-<component name="InspectionProjectProfileManager">
-  <profile version="1.0">
-    <option name="myName" value="Project Default" />
-    <inspection_tool class="Eslint" enabled="true" level="WARNING" enabled_by_default="true" />
-    <inspection_tool class="JavaDoc" enabled="true" level="WARNING" enabled_by_default="true">
-      <option name="TOP_LEVEL_CLASS_OPTIONS">
-        <value>
-          <option name="ACCESS_JAVADOC_REQUIRED_FOR" value="none" />
-          <option name="REQUIRED_TAGS" value="" />
-        </value>
-      </option>
-      <option name="INNER_CLASS_OPTIONS">
-        <value>
-          <option name="ACCESS_JAVADOC_REQUIRED_FOR" value="none" />
-          <option name="REQUIRED_TAGS" value="" />
-        </value>
-      </option>
-      <option name="METHOD_OPTIONS">
-        <value>
-          <option name="ACCESS_JAVADOC_REQUIRED_FOR" value="none" />
-          <option name="REQUIRED_TAGS" value="@return@param@throws or @exception" />
-        </value>
-      </option>
-      <option name="FIELD_OPTIONS">
-        <value>
-          <option name="ACCESS_JAVADOC_REQUIRED_FOR" value="none" />
-          <option name="REQUIRED_TAGS" value="" />
-        </value>
-      </option>
-      <option name="IGNORE_DEPRECATED" value="false" />
-      <option name="IGNORE_JAVADOC_PERIOD" value="true" />
-      <option name="IGNORE_DUPLICATED_THROWS" value="false" />
-      <option name="IGNORE_POINT_TO_ITSELF" value="false" />
-      <option name="myAdditionalJavadocTags" value="date" />
-    </inspection_tool>
-  </profile>
-</component>
\ No newline at end of file
diff --git a/.idea/modules.xml b/.idea/modules.xml
deleted file mode 100644
index 731bc8e..0000000
--- a/.idea/modules.xml
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project version="4">
-  <component name="ProjectModuleManager">
-    <modules>
-      <module fileurl="file://$PROJECT_DIR$/.idea/nl-sso-server.iml" filepath="$PROJECT_DIR$/.idea/nl-sso-server.iml" />
-    </modules>
-  </component>
-</project>
\ No newline at end of file
diff --git a/.idea/nl-sso-server.iml b/.idea/nl-sso-server.iml
deleted file mode 100644
index d6ebd48..0000000
--- a/.idea/nl-sso-server.iml
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<module type="JAVA_MODULE" version="4">
-  <component name="NewModuleRootManager" inherit-compiler-output="true">
-    <exclude-output />
-    <content url="file://$MODULE_DIR$" />
-    <orderEntry type="inheritedJdk" />
-    <orderEntry type="sourceFolder" forTests="false" />
-  </component>
-</module>
\ No newline at end of file
diff --git a/.idea/vcs.xml b/.idea/vcs.xml
deleted file mode 100644
index 35eb1dd..0000000
--- a/.idea/vcs.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project version="4">
-  <component name="VcsDirectoryMappings">
-    <mapping directory="" vcs="Git" />
-  </component>
-</project>
\ No newline at end of file
diff --git a/nladmin-system/.gitignore b/nladmin-system/.gitignore
index 8c1a75b..54ef48a 100644
--- a/nladmin-system/.gitignore
+++ b/nladmin-system/.gitignore
@@ -7,3 +7,5 @@
 /.gradle/
 /target/*
 */application-dev.yml
+nlsso-server/src/main/java/org/nl/common/constant/
+nlsso-server/src/main/java/org/nl/common/core/
diff --git a/nladmin-system/nlsso-server/pom.xml b/nladmin-system/nlsso-server/pom.xml
index 6e390d7..02a32e4 100644
--- a/nladmin-system/nlsso-server/pom.xml
+++ b/nladmin-system/nlsso-server/pom.xml
@@ -32,6 +32,59 @@
     </properties>
 
     <dependencies>
+        <dependency>
+            <groupId>cn.dynamictp</groupId>
+            <artifactId>dynamic-tp-spring-boot-starter-common</artifactId>
+            <version>1.0.9</version>
+        </dependency>
+        <dependency>
+            <groupId>cn.dynamictp</groupId>
+            <artifactId>dynamic-tp-spring-boot-starter-adapter-webserver</artifactId>
+            <version>1.0.9</version>
+        </dependency>
+
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-actuator</artifactId>
+        </dependency>
+
+
+        <!-- 数据库版本管理-->
+        <dependency>
+            <groupId>org.flywaydb</groupId>
+            <artifactId>flyway-core</artifactId>
+        </dependency>
+
+        <!--日志管理-->
+        <dependency>
+            <groupId>com.plumelog</groupId>
+            <artifactId>plumelog-lite-spring-boot-starter</artifactId>
+            <version>3.5.3</version>
+            <exclusions>
+                <exclusion>
+                    <artifactId>plumelog-core</artifactId>
+                    <groupId>com.plumelog</groupId>
+                </exclusion>
+            </exclusions>
+        </dependency>
+
+        <dependency>
+            <groupId>com.plumelog</groupId>
+            <artifactId>plumelog-trace</artifactId>
+            <version>3.5.2</version>
+        </dependency>
+
+        <dependency>
+            <groupId>org.redisson</groupId>
+            <artifactId>redisson-spring-boot-starter</artifactId>
+            <version>3.12.3</version>
+            <exclusions>
+                <exclusion>
+                    <artifactId>spring-boot-starter-actuator</artifactId>
+                    <groupId>org.springframework.boot</groupId>
+                </exclusion>
+            </exclusions>
+        </dependency>
 
 
         <!--工具包-->
@@ -389,13 +442,6 @@
             <version>5.0.1</version>
         </dependency>
 
-        <!--loki-->
-        <!-- https://loki4j.github.io/loki-logback-appender/#quick-start -->
-        <dependency>
-            <groupId>com.github.loki4j</groupId>
-            <artifactId>loki-logback-appender-jdk8</artifactId>
-            <version>1.3.2</version>
-        </dependency>
         <dependency>
             <groupId>org.apache.httpcomponents</groupId>
             <artifactId>httpclient</artifactId>
diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/AppRun.java b/nladmin-system/nlsso-server/src/main/java/org/nl/AppRun.java
index bbb8639..d929138 100644
--- a/nladmin-system/nlsso-server/src/main/java/org/nl/AppRun.java
+++ b/nladmin-system/nlsso-server/src/main/java/org/nl/AppRun.java
@@ -28,7 +28,8 @@ import org.springframework.web.bind.annotation.RestController;
 @RestController
 @Api(hidden = true)
 @SpringBootApplication(exclude = {
-        org.springframework.boot.autoconfigure.security.servlet.SecurityAutoConfiguration.class
+        org.springframework.boot.autoconfigure.security.servlet.SecurityAutoConfiguration.class,
+        org.springframework.boot.autoconfigure.quartz.QuartzAutoConfiguration.class
 })
 @ServletComponentScan //https://blog.csdn.net/qq_36850813/article/details/101194250
 @EnableTransactionManagement
@@ -38,7 +39,6 @@ import org.springframework.web.bind.annotation.RestController;
 public class AppRun {
 
     public static void main(String[] args) {
-
         SpringApplication.run(AppRun.class, args);
     }
 
diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/config/DtpConfig.java b/nladmin-system/nlsso-server/src/main/java/org/nl/config/DtpConfig.java
new file mode 100644
index 0000000..d1597e7
--- /dev/null
+++ b/nladmin-system/nlsso-server/src/main/java/org/nl/config/DtpConfig.java
@@ -0,0 +1,42 @@
+package org.nl.config;
+
+import com.dtp.core.support.ThreadPoolBuilder;
+import com.dtp.core.support.ThreadPoolCreator;
+import com.dtp.core.thread.DtpExecutor;
+import org.springframework.boot.web.servlet.server.ServletWebServerFactory;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+/**
+ * @author ldjun
+ * @version 1.0
+ * @date 2023年01月13日 14:30
+ * @desc desc
+ */
+@Configuration
+public class DtpConfig {
+
+    /**
+     * 通过{@link ThreadPoolCreator} 快速创建一些简单配置的动态线程池
+     * tips: 建议直接在配置中心配置就行,不用@Bean声明
+     *
+     * @return 线程池实例
+     */
+    @Bean
+    public DtpExecutor dtpExecutor1() {
+
+        return ThreadPoolBuilder.newBuilder()
+                .threadPoolName("dtpExecutor1")
+                .corePoolSize(1)
+                .maximumPoolSize(1)
+                .queueCapacity(1)
+                .ioIntensive(true)
+                .buildDynamic();
+    }
+    @Bean
+    public Object tomcatServletWebServerFactory(ServletWebServerFactory webServerFactory) {
+        return new Object();
+    }
+
+
+}
diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/modules/logging/aspect/LogAspect.java b/nladmin-system/nlsso-server/src/main/java/org/nl/modules/logging/aspect/LogAspect.java
index 0e45788..2ac447b 100644
--- a/nladmin-system/nlsso-server/src/main/java/org/nl/modules/logging/aspect/LogAspect.java
+++ b/nladmin-system/nlsso-server/src/main/java/org/nl/modules/logging/aspect/LogAspect.java
@@ -12,8 +12,7 @@
  *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  *  See the License for the specific language governing permissions and
  *  limitations under the License.
- *//*
-
+ */
 package org.nl.modules.logging.aspect;
 
 import cn.hutool.core.util.StrUtil;
@@ -27,18 +26,13 @@ import org.aspectj.lang.annotation.Aspect;
 import org.aspectj.lang.annotation.Pointcut;
 import org.aspectj.lang.reflect.MethodSignature;
 import org.nl.modules.common.utils.RequestHolder;
-import org.nl.modules.common.utils.SecurityUtils;
-import org.nl.modules.common.utils.StringUtils;
 import org.nl.modules.common.utils.ThrowableUtil;
 import org.nl.modules.logging.domain.Log;
 import org.springframework.stereotype.Component;
 import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestParam;
-import org.springframework.web.context.request.RequestContextHolder;
-import org.springframework.web.context.request.ServletRequestAttributes;
 
 import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
 import java.lang.reflect.Method;
 import java.lang.reflect.Parameter;
 import java.util.ArrayList;
@@ -46,57 +40,43 @@ import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 
-*/
 /**
  * @author Zheng Jie
  * @date 2018-11-24
- *//*
-
+ */
 @Component
 @Aspect
 @Slf4j
 public class LogAspect {
 
-    private final LogService logService;
+//    private final LogService logService;
 
     ThreadLocal<Long> currentTime = new ThreadLocal<>();
 
-    public LogAspect(LogService logService) {
-        this.logService = logService;
-    }
+//    public LogAspect(LogService logService) {
+//        this.logService = logService;
+//    }
 
-    */
-/**
+    /**
      * 配置切入点
-     *//*
-
+     */
     @Pointcut("@annotation(org.nl.modules.logging.annotation.Log)")
     public void logPointcut() {
         // 该方法无方法体,主要为了让同类中其他方法使用此切入点
     }
 
-    */
-/**
+    /**
      * 配置环绕通知,使用在方法logPointcut()上注册的切入点
      *
      * @param joinPoint join point for advice
-     *//*
-
+     */
     @Around("logPointcut()")
     public Object logAround(ProceedingJoinPoint joinPoint) throws Throwable {
-                ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
-        HttpServletRequest request = attributes.getRequest();
-        HttpServletResponse response = attributes.getResponse();
-//        HttpServletRequest request = RequestHolder.getHttpServletRequest();
-
-
         MethodSignature signature = (MethodSignature) joinPoint.getSignature();
         Method method = signature.getMethod();
         // 方法路径
         String methodName = joinPoint.getTarget().getClass().getName() + "." + signature.getName() + "()";
         String params=getParameter(method, joinPoint.getArgs());
-
-        log.info("请求uri:{}", request.getRequestURI());
         log.info("请求方法:{}",methodName);
         log.info("请求方法参数:{}",params);
 
@@ -105,16 +85,14 @@ public class LogAspect {
         result = joinPoint.proceed();
         Log log = new Log("INFO",System.currentTimeMillis() - currentTime.get());
         currentTime.remove();
-
-        logService.save(getUsername(), StringUtils.getBrowser(request), StringUtils.getIp(request),joinPoint, log);
+        HttpServletRequest request = RequestHolder.getHttpServletRequest();
+//        logService.save(getUsername(), StringUtils.getBrowser(request), StringUtils.getIp(request),joinPoint, log);
         return result;
     }
 
-    */
-/**
+    /**
      * 根据方法和传入的参数获取请求参数
-     *//*
-
+     */
     private String getParameter(Method method, Object[] args) {
         List<Object> argList = new ArrayList<>();
         Parameter[] parameters = method.getParameters();
@@ -142,29 +120,27 @@ public class LogAspect {
         return argList.size() == 1 ? JSONUtil.toJsonStr(argList.get(0)) : JSONUtil.toJsonStr(argList);
     }
 
-    */
-/**
+    /**
      * 配置异常通知
      *
      * @param joinPoint join point for advice
      * @param e exception
-     *//*
-
+     */
     @AfterThrowing(pointcut = "logPointcut()", throwing = "e")
     public void logAfterThrowing(JoinPoint joinPoint, Throwable e) {
         Log log = new Log("ERROR",System.currentTimeMillis() - currentTime.get());
         currentTime.remove();
         log.setExceptionDetail(ThrowableUtil.getStackTrace(e).getBytes());
         HttpServletRequest request = RequestHolder.getHttpServletRequest();
-        logService.save(getUsername(), StringUtils.getBrowser(request), StringUtils.getIp(request), (ProceedingJoinPoint)joinPoint, log);
+//        logService.save(getUsername(), StringUtils.getBrowser(request), StringUtils.getIp(request), (ProceedingJoinPoint)joinPoint, log);
     }
 
     public String getUsername() {
         try {
-            return SecurityUtils.getCurrentUsername();
+            return "默认用户名";
+//            return SecurityUtils.getCurrentUsername();
         }catch (Exception e){
             return "";
         }
     }
 }
-*/
diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/modules/loki/rest/LokiController.java b/nladmin-system/nlsso-server/src/main/java/org/nl/modules/loki/rest/LokiController.java
deleted file mode 100644
index e498cb6..0000000
--- a/nladmin-system/nlsso-server/src/main/java/org/nl/modules/loki/rest/LokiController.java
+++ /dev/null
@@ -1,40 +0,0 @@
-package org.nl.modules.loki.rest;
-
-import com.alibaba.fastjson.JSONObject;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
-import lombok.RequiredArgsConstructor;
-import lombok.extern.slf4j.Slf4j;
-import org.nl.modules.common.annotation.RateLimiter;
-import org.nl.modules.loki.service.LokiService;
-import org.springframework.http.HttpStatus;
-import org.springframework.http.ResponseEntity;
-import org.springframework.web.bind.annotation.*;
-
-/**
- * @Author: lyd
- * @Description: 日志监控
- * @Date: 2022-08-15
- */
-@RestController
-@RequiredArgsConstructor
-@Api(tags = "日志监控")
-@RequestMapping("/api/loki")
-@Slf4j
-public class LokiController {
-
-    private final LokiService lokiService;
-
-    @GetMapping("/labels/values")
-    @ApiOperation("获取标签")
-    public ResponseEntity<Object> labelsValues() {
-        return new ResponseEntity<>(lokiService.getLabelsValues(), HttpStatus.OK);
-    }
-
-    @PostMapping("/logs")
-    @ApiOperation("获取日志")
-    @RateLimiter(value = 1, timeout = 300) // 限流
-    public ResponseEntity<Object> getLogData(@RequestBody JSONObject json) {
-        return new ResponseEntity<>(lokiService.getLogData(json), HttpStatus.OK);
-    }
-}
diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/modules/loki/service/LokiService.java b/nladmin-system/nlsso-server/src/main/java/org/nl/modules/loki/service/LokiService.java
deleted file mode 100644
index 10101c9..0000000
--- a/nladmin-system/nlsso-server/src/main/java/org/nl/modules/loki/service/LokiService.java
+++ /dev/null
@@ -1,25 +0,0 @@
-package org.nl.modules.loki.service;
-
-import com.alibaba.fastjson.JSONArray;
-import com.alibaba.fastjson.JSONObject;
-
-/**
- * @Author: lyd
- * @Description: 服务类
- * @Date: 2022-08-15
- */
-public interface LokiService {
-
-    /**
-     * 获取日志信息
-     * @param json
-     * @return
-     */
-    JSONObject getLogData(JSONObject json);
-
-    /**
-     * 获取labels和values树
-     * @return
-     */
-    JSONArray getLabelsValues();
-}
diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/modules/loki/service/impl/LokiServiceImpl.java b/nladmin-system/nlsso-server/src/main/java/org/nl/modules/loki/service/impl/LokiServiceImpl.java
deleted file mode 100644
index f6eeb49..0000000
--- a/nladmin-system/nlsso-server/src/main/java/org/nl/modules/loki/service/impl/LokiServiceImpl.java
+++ /dev/null
@@ -1,113 +0,0 @@
-package org.nl.modules.loki.service.impl;
-
-import cn.hutool.core.util.CharsetUtil;
-import cn.hutool.http.HttpUtil;
-import com.alibaba.fastjson.JSONArray;
-import com.alibaba.fastjson.JSONObject;
-import lombok.RequiredArgsConstructor;
-import org.nl.modules.loki.service.LokiService;
-import org.springframework.beans.factory.annotation.Value;
-import org.springframework.stereotype.Service;
-
-/**
- * @Author: lyd
- * @Description: 实现类
- * @Date: 2022-08-15
- */
-@Service
-@RequiredArgsConstructor
-public class LokiServiceImpl implements LokiService {
-
-    @Value("${loki.url}")
-    private String lokiUrl;
-
-    @Value("${loki.systemName}")
-    private String systemName;
-
-    @Override
-    public JSONObject getLogData(JSONObject json) {
-        String logLabel = "";
-        String logLabelValue = "";
-        Long start = 0L;
-        Long end = 0L;
-        String text = "";
-        String limit = "100";
-        String direction = "backward";
-        if (json.get("logLabel") != null) logLabel = json.getString("logLabel");
-        if (json.get("logLabelValue") != null) logLabelValue = json.getString("logLabelValue");
-        if (json.get("text") != null) text = json.getString("text");
-        if (json.get("start") != null) start = json.getLong("start");
-        if (json.get("end") != null) end = json.getLong("end");
-        if (json.get("limits") != null) limit = json.getString("limits");
-        if (json.get("direction") != null) direction = json.getString("direction");
-        /**
-         * 组织参数
-         * 纳秒数
-         * 1660037391880000000
-         * 1641453208415000000
-         * http://localhost:3100/loki/api/v1/query_range?query={host="localhost"} |= ``&limit=1500&start=1641453208415000000&end=1660027623419419002
-         */
-        JSONObject parse = null;
-        String query = lokiUrl + "/query_range?query={system=\"" + systemName + "\", " + logLabel + "=\"" + logLabelValue + "\"} |= `" + text + "`";
-        String result = "";
-        if (start==0L) {
-            result = HttpUtil.get(query + "&limit=" + limit + "&direction=" + direction, CharsetUtil.CHARSET_UTF_8);
-        } else {
-            result = HttpUtil.get(query + "&limit=" + limit + "&start=" + start + "&end=" + end + "&direction=" + direction, CharsetUtil.CHARSET_UTF_8);
-        }
-        try {
-            parse = (JSONObject) JSONObject.parse(result);
-        } catch (Exception e) {
-//            reslut的值可能为:too many outstanding requests,无法转化成Json
-            System.out.println("reslut:" + result);
-//            e.printStackTrace();
-        }
-        return parse;
-    }
-
-    /**
-     * 获取labels和values树
-     *
-     * @return
-     */
-    @Override
-    public JSONArray getLabelsValues() {
-        /**
-         * [{
-         *     label:
-         *     value:
-         *     children:[{
-         *         label
-         *         value
-         *     }]
-         * }]
-         */
-        JSONArray result = new JSONArray();
-        // 获取所有标签
-        String labelString = HttpUtil.get(lokiUrl + "/labels", CharsetUtil.CHARSET_UTF_8);
-        JSONObject parse = (JSONObject) JSONObject.parse(labelString);
-        JSONArray labels = parse.getJSONArray("data");
-        for (int i=0; i<labels.size(); i++) {
-            // 获取标签下的所有值
-            String valueString = HttpUtil.get(lokiUrl + "/label/" + labels.getString(i) + "/values", CharsetUtil.CHARSET_UTF_8);
-            JSONObject parse2 = (JSONObject) JSONObject.parse(valueString);
-            JSONArray values = parse2.getJSONArray("data");
-            JSONArray children = new JSONArray();
-            // 组成树形状态 两级
-            for (int j=0; j<values.size(); j++) {
-                JSONObject leaf = new JSONObject();
-                leaf.put("label", values.getString(j));
-                leaf.put("value", values.getString(j));
-                children.add(leaf);
-            }
-
-            JSONObject node = new JSONObject();
-            node.put("label", labels.getString(i));
-            node.put("value", labels.getString(i));
-            node.put("children", children);
-            result.add(node);
-        }
-        return result;
-    }
-
-}
diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/modules/system/rest/ParamController.java b/nladmin-system/nlsso-server/src/main/java/org/nl/modules/system/rest/ParamController.java
index 318f291..f76c6d1 100644
--- a/nladmin-system/nlsso-server/src/main/java/org/nl/modules/system/rest/ParamController.java
+++ b/nladmin-system/nlsso-server/src/main/java/org/nl/modules/system/rest/ParamController.java
@@ -30,7 +30,6 @@ import java.util.Map;
 public class ParamController {
 
     private final ParamService paramService;
-
     @GetMapping
     @Log("查询系统参数")
     @ApiOperation("查询系统参数")
diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/modules/system/service/impl/UserRelateServiceImpl.java b/nladmin-system/nlsso-server/src/main/java/org/nl/modules/system/service/impl/UserRelateServiceImpl.java
index c701a20..efeeccb 100644
--- a/nladmin-system/nlsso-server/src/main/java/org/nl/modules/system/service/impl/UserRelateServiceImpl.java
+++ b/nladmin-system/nlsso-server/src/main/java/org/nl/modules/system/service/impl/UserRelateServiceImpl.java
@@ -1,5 +1,6 @@
 package org.nl.modules.system.service.impl;
 
+import com.esotericsoftware.minlog.Log;
 import org.nl.modules.system.service.UserRelateService;
 import org.nl.modules.tools.MapOf;
 import org.nl.modules.wql.core.bean.WQLObject;
@@ -30,6 +31,7 @@ public class UserRelateServiceImpl implements UserRelateService {
     @Override
     @Transactional
     public void inserRoleRelate(Long user, Set<Long> RoleIds) {
+        Log.info("");
         if (user !=null && !CollectionUtils.isEmpty(RoleIds)){
             for (Long roleid : RoleIds) {
                 WQLObject.getWQLObject("sys_users_roles").insert(MapOf.of("user_id",user,"role_id",roleid));
diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/system/controller/user/UserController.java b/nladmin-system/nlsso-server/src/main/java/org/nl/system/controller/user/UserController.java
index 26d7f5a..a203bdd 100644
--- a/nladmin-system/nlsso-server/src/main/java/org/nl/system/controller/user/UserController.java
+++ b/nladmin-system/nlsso-server/src/main/java/org/nl/system/controller/user/UserController.java
@@ -17,8 +17,6 @@ package org.nl.system.controller.user;
 
 import cn.dev33.satoken.secure.SaSecureUtil;
 import cn.dev33.satoken.stp.StpUtil;
-import cn.hutool.core.util.ObjectUtil;
-import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
 import io.swagger.annotations.Api;
@@ -31,19 +29,15 @@ import org.nl.modules.common.exception.BadRequestException;
 import org.nl.modules.common.utils.RsaUtils;
 import org.nl.modules.common.utils.SecurityUtils;
 import org.nl.modules.logging.annotation.Log;
-import org.nl.modules.tools.IdUtil;
 import org.nl.system.service.user.ISysUserService;
 import org.nl.system.service.user.dao.SysUser;
-import org.nl.system.service.user.dto.SysUserDetail;
 import org.nl.system.service.user.dto.UserQuery;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.http.HttpStatus;
 import org.springframework.http.ResponseEntity;
-import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.*;
 import org.springframework.web.multipart.MultipartFile;
 
-import java.util.List;
 import java.util.Map;
 import java.util.Set;
 
@@ -60,7 +54,6 @@ public class UserController {
     @Autowired
     ISysUserService userService;
 
-
     @ApiOperation("查询用户")
     @GetMapping
     public ResponseEntity<Object> query(UserQuery query, PageQuery page){
diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/quartz/SimpleThreadPool.java b/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/quartz/SimpleThreadPool.java
new file mode 100644
index 0000000..533d91a
--- /dev/null
+++ b/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/quartz/SimpleThreadPool.java
@@ -0,0 +1,585 @@
+package org.nl.system.service.quartz;
+
+import org.quartz.SchedulerConfigException;
+import org.quartz.spi.ThreadPool;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.util.Iterator;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.concurrent.atomic.AtomicBoolean;
+
+/**
+ * quartz自定义线程池
+ */
+public class SimpleThreadPool implements ThreadPool {
+
+    /*
+     * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+     *
+     * Data members.
+     *
+     * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+     */
+
+    private int count = -1;
+
+    private int prio = Thread.NORM_PRIORITY;
+
+    private boolean isShutdown = false;
+    private boolean handoffPending = false;
+
+    private boolean inheritLoader = false;
+
+    private boolean inheritGroup = true;
+
+    private boolean makeThreadsDaemons = false;
+
+    private ThreadGroup threadGroup;
+
+    private final Object nextRunnableLock = new Object();
+
+    private List<WorkerThread> workers;
+    private LinkedList<WorkerThread> availWorkers = new LinkedList<WorkerThread>();
+    private LinkedList<WorkerThread> busyWorkers = new LinkedList<WorkerThread>();
+
+    private String threadNamePrefix;
+
+    private final Logger log = LoggerFactory.getLogger(getClass());
+
+    private String schedulerInstanceName;
+
+    /*
+     * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+     *
+     * Constructors.
+     *
+     * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+     */
+
+    /**
+     * <p>
+     * Create a new (unconfigured) <code>SimpleThreadPool</code>.
+     * </p>
+     *
+     * @see #setThreadCount(int)
+     * @see #setThreadPriority(int)
+     */
+    public SimpleThreadPool() {
+    }
+
+    /**
+     * <p>
+     * Create a new <code>SimpleThreadPool</code> with the specified number
+     * of <code>Thread</code> s that have the given priority.
+     * </p>
+     *
+     * @param threadCount
+     *          the number of worker <code>Threads</code> in the pool, must
+     *          be > 0.
+     * @param threadPriority
+     *          the thread priority for the worker threads.
+     *
+     * @see Thread
+     */
+    public SimpleThreadPool(int threadCount, int threadPriority) {
+        setThreadCount(threadCount);
+        setThreadPriority(threadPriority);
+    }
+
+    /*
+     * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+     *
+     * Interface.
+     *
+     * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+     */
+
+    public Logger getLog() {
+        return log;
+    }
+
+    public int getPoolSize() {
+        return getThreadCount();
+    }
+
+    /**
+     * <p>
+     * Set the number of worker threads in the pool - has no effect after
+     * <code>initialize()</code> has been called.
+     * </p>
+     */
+    public void setThreadCount(int count) {
+        this.count = count;
+    }
+
+    /**
+     * <p>
+     * Get the number of worker threads in the pool.
+     * </p>
+     */
+    public int getThreadCount() {
+        return count;
+    }
+
+    /**
+     * <p>
+     * Set the thread priority of worker threads in the pool - has no effect
+     * after <code>initialize()</code> has been called.
+     * </p>
+     */
+    public void setThreadPriority(int prio) {
+        this.prio = prio;
+    }
+
+    /**
+     * <p>
+     * Get the thread priority of worker threads in the pool.
+     * </p>
+     */
+    public int getThreadPriority() {
+        return prio;
+    }
+
+    public void setThreadNamePrefix(String prfx) {
+        this.threadNamePrefix = prfx;
+    }
+
+    public String getThreadNamePrefix() {
+        return threadNamePrefix;
+    }
+
+    /**
+     * @return Returns the
+     *         threadsInheritContextClassLoaderOfInitializingThread.
+     */
+    public boolean isThreadsInheritContextClassLoaderOfInitializingThread() {
+        return inheritLoader;
+    }
+
+    /**
+     * @param inheritLoader
+     *          The threadsInheritContextClassLoaderOfInitializingThread to
+     *          set.
+     */
+    public void setThreadsInheritContextClassLoaderOfInitializingThread(
+            boolean inheritLoader) {
+        this.inheritLoader = inheritLoader;
+    }
+
+    public boolean isThreadsInheritGroupOfInitializingThread() {
+        return inheritGroup;
+    }
+
+    public void setThreadsInheritGroupOfInitializingThread(
+            boolean inheritGroup) {
+        this.inheritGroup = inheritGroup;
+    }
+
+
+    /**
+     * @return Returns the value of makeThreadsDaemons.
+     */
+    public boolean isMakeThreadsDaemons() {
+        return makeThreadsDaemons;
+    }
+
+    /**
+     * @param makeThreadsDaemons
+     *          The value of makeThreadsDaemons to set.
+     */
+    public void setMakeThreadsDaemons(boolean makeThreadsDaemons) {
+        this.makeThreadsDaemons = makeThreadsDaemons;
+    }
+
+    public void setInstanceId(String schedInstId) {
+    }
+
+    public void setInstanceName(String schedName) {
+        schedulerInstanceName = schedName;
+    }
+
+    public void initialize() throws SchedulerConfigException {
+
+        if(workers != null && workers.size() > 0) // already initialized...
+            return;
+
+        if (count <= 0) {
+            throw new SchedulerConfigException(
+                    "Thread count must be > 0");
+        }
+        if (prio <= 0 || prio > 9) {
+            throw new SchedulerConfigException(
+                    "Thread priority must be > 0 and <= 9");
+        }
+
+        if(isThreadsInheritGroupOfInitializingThread()) {
+            threadGroup = Thread.currentThread().getThreadGroup();
+        } else {
+            // follow the threadGroup tree to the root thread group.
+            threadGroup = Thread.currentThread().getThreadGroup();
+            ThreadGroup parent = threadGroup;
+            while ( !parent.getName().equals("main") ) {
+                threadGroup = parent;
+                parent = threadGroup.getParent();
+            }
+            threadGroup = new ThreadGroup(parent, schedulerInstanceName + "-SimpleThreadPool");
+            if (isMakeThreadsDaemons()) {
+                threadGroup.setDaemon(true);
+            }
+        }
+
+
+        if (isThreadsInheritContextClassLoaderOfInitializingThread()) {
+            getLog().info(
+                    "Job execution threads will use class loader of thread: "
+                            + Thread.currentThread().getName());
+        }
+
+        // create the worker threads and start them
+        Iterator<WorkerThread> workerThreads = createWorkerThreads(count).iterator();
+        while(workerThreads.hasNext()) {
+            WorkerThread wt = workerThreads.next();
+            wt.start();
+            availWorkers.add(wt);
+        }
+    }
+
+    protected List<WorkerThread> createWorkerThreads(int createCount) {
+        workers = new LinkedList<WorkerThread>();
+        for (int i = 1; i<= createCount; ++i) {
+            String threadPrefix = getThreadNamePrefix();
+            if (threadPrefix == null) {
+                threadPrefix = schedulerInstanceName + "_Worker";
+            }
+            WorkerThread wt = new WorkerThread(this, threadGroup,
+                    threadPrefix + "-" + i,
+                    getThreadPriority(),
+                    isMakeThreadsDaemons());
+            if (isThreadsInheritContextClassLoaderOfInitializingThread()) {
+                wt.setContextClassLoader(Thread.currentThread()
+                        .getContextClassLoader());
+            }
+            workers.add(wt);
+        }
+
+        return workers;
+    }
+
+    /**
+     * <p>
+     * Terminate any worker threads in this thread group.
+     * </p>
+     *
+     * <p>
+     * Jobs currently in progress will complete.
+     * </p>
+     */
+    public void shutdown() {
+        shutdown(true);
+    }
+
+    /**
+     * <p>
+     * Terminate any worker threads in this thread group.
+     * </p>
+     *
+     * <p>
+     * Jobs currently in progress will complete.
+     * </p>
+     */
+    public void shutdown(boolean waitForJobsToComplete) {
+
+        synchronized (nextRunnableLock) {
+            getLog().debug("Shutting down threadpool...");
+
+            isShutdown = true;
+
+            if(workers == null) // case where the pool wasn't even initialize()ed
+                return;
+
+            // signal each worker thread to shut down
+            Iterator<WorkerThread> workerThreads = workers.iterator();
+            while(workerThreads.hasNext()) {
+                WorkerThread wt = workerThreads.next();
+                wt.shutdown();
+                availWorkers.remove(wt);
+            }
+
+            // Give waiting (wait(1000)) worker threads a chance to shut down.
+            // Active worker threads will shut down after finishing their
+            // current job.
+            nextRunnableLock.notifyAll();
+
+            if (waitForJobsToComplete == true) {
+
+                boolean interrupted = false;
+                try {
+                    // wait for hand-off in runInThread to complete...
+                    while(handoffPending) {
+                        try {
+                            nextRunnableLock.wait(100);
+                        } catch(InterruptedException _) {
+                            interrupted = true;
+                        }
+                    }
+
+                    // Wait until all worker threads are shut down
+                    while (busyWorkers.size() > 0) {
+                        WorkerThread wt = (WorkerThread) busyWorkers.getFirst();
+                        try {
+                            getLog().debug(
+                                    "Waiting for thread " + wt.getName()
+                                            + " to shut down");
+
+                            // note: with waiting infinite time the
+                            // application may appear to 'hang'.
+                            nextRunnableLock.wait(2000);
+                        } catch (InterruptedException _) {
+                            interrupted = true;
+                        }
+                    }
+
+                    workerThreads = workers.iterator();
+                    while(workerThreads.hasNext()) {
+                        WorkerThread wt = (WorkerThread) workerThreads.next();
+                        try {
+                            wt.join();
+                            workerThreads.remove();
+                        } catch (InterruptedException _) {
+                            interrupted = true;
+                        }
+                    }
+                } finally {
+                    if (interrupted) {
+                        Thread.currentThread().interrupt();
+                    }
+                }
+
+                getLog().debug("No executing jobs remaining, all threads stopped.");
+            }
+            getLog().debug("Shutdown of threadpool complete.");
+        }
+    }
+
+    /**
+     * <p>
+     * Run the given <code>Runnable</code> object in the next available
+     * <code>Thread</code>. If while waiting the thread pool is asked to
+     * shut down, the Runnable is executed immediately within a new additional
+     * thread.
+     * </p>
+     *
+     * @param runnable
+     *          the <code>Runnable</code> to be added.
+     */
+    public boolean runInThread(Runnable runnable) {
+        if (runnable == null) {
+            return false;
+        }
+
+        synchronized (nextRunnableLock) {
+
+            handoffPending = true;
+
+            // Wait until a worker thread is available
+            while ((availWorkers.size() < 1) && !isShutdown) {
+                try {
+                    nextRunnableLock.wait(500);
+                } catch (InterruptedException ignore) {
+                }
+            }
+
+            if (!isShutdown) {
+                WorkerThread wt = (WorkerThread)availWorkers.removeFirst();
+                busyWorkers.add(wt);
+                wt.run(runnable);
+            } else {
+                // If the thread pool is going down, execute the Runnable
+                // within a new additional worker thread (no thread from the pool).
+                WorkerThread wt = new WorkerThread(this, threadGroup,
+                        "WorkerThread-LastJob", prio, isMakeThreadsDaemons(), runnable);
+                busyWorkers.add(wt);
+                workers.add(wt);
+                wt.start();
+            }
+            nextRunnableLock.notifyAll();
+            handoffPending = false;
+        }
+
+        return true;
+    }
+
+    public int blockForAvailableThreads() {
+        synchronized(nextRunnableLock) {
+
+            while((availWorkers.size() < 1 || handoffPending) && !isShutdown) {
+                try {
+                    nextRunnableLock.wait(500);
+                } catch (InterruptedException ignore) {
+                }
+            }
+
+            return availWorkers.size();
+        }
+    }
+
+    protected void makeAvailable(WorkerThread wt) {
+        synchronized(nextRunnableLock) {
+            if(!isShutdown) {
+                availWorkers.add(wt);
+            }
+            busyWorkers.remove(wt);
+            nextRunnableLock.notifyAll();
+        }
+    }
+
+    protected void clearFromBusyWorkersList(WorkerThread wt) {
+        synchronized(nextRunnableLock) {
+            busyWorkers.remove(wt);
+            nextRunnableLock.notifyAll();
+        }
+    }
+
+    /*
+     * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+     *
+     * WorkerThread Class.
+     *
+     * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+     */
+
+    /**
+     * <p>
+     * A Worker loops, waiting to execute tasks.
+     * </p>
+     */
+    class WorkerThread extends Thread {
+
+        private final Object lock = new Object();
+
+        // A flag that signals the WorkerThread to terminate.
+        private AtomicBoolean run = new AtomicBoolean(true);
+
+        private SimpleThreadPool tp;
+
+        private Runnable runnable = null;
+
+        private boolean runOnce = false;
+
+        /**
+         * <p>
+         * Create a worker thread and start it. Waiting for the next Runnable,
+         * executing it, and waiting for the next Runnable, until the shutdown
+         * flag is set.
+         * </p>
+         */
+        WorkerThread(SimpleThreadPool tp, ThreadGroup threadGroup, String name,
+                     int prio, boolean isDaemon) {
+
+            this(tp, threadGroup, name, prio, isDaemon, null);
+        }
+
+        /**
+         * <p>
+         * Create a worker thread, start it, execute the runnable and terminate
+         * the thread (one time execution).
+         * </p>
+         */
+        WorkerThread(SimpleThreadPool tp, ThreadGroup threadGroup, String name,
+                     int prio, boolean isDaemon, Runnable runnable) {
+
+            super(threadGroup, name);
+            this.tp = tp;
+            this.runnable = runnable;
+            if(runnable != null)
+                runOnce = true;
+            setPriority(prio);
+            setDaemon(isDaemon);
+        }
+
+        /**
+         * <p>
+         * Signal the thread that it should terminate.
+         * </p>
+         */
+        void shutdown() {
+            run.set(false);
+        }
+
+        public void run(Runnable newRunnable) {
+            synchronized(lock) {
+                if(runnable != null) {
+                    throw new IllegalStateException("Already running a Runnable!");
+                }
+
+                runnable = newRunnable;
+                lock.notifyAll();
+            }
+        }
+
+        /**
+         * <p>
+         * Loop, executing targets as they are received.
+         * </p>
+         */
+        @Override
+        public void run() {
+            boolean ran = false;
+
+            while (run.get()) {
+                try {
+                    synchronized(lock) {
+                        while (runnable == null && run.get()) {
+                            lock.wait(500);
+                        }
+
+                        if (runnable != null) {
+                            ran = true;
+                            runnable.run();
+                        }
+                    }
+                } catch (InterruptedException unblock) {
+                    // do nothing (loop will terminate if shutdown() was called
+                    try {
+                        getLog().error("Worker thread was interrupt()'ed.", unblock);
+                    } catch(Exception e) {
+                        // ignore to help with a tomcat glitch
+                    }
+                } catch (Throwable exceptionInRunnable) {
+                    try {
+                        getLog().error("Error while executing the Runnable: ",
+                                exceptionInRunnable);
+                    } catch(Exception e) {
+                        // ignore to help with a tomcat glitch
+                    }
+                } finally {
+                    synchronized(lock) {
+                        runnable = null;
+                    }
+                    // repair the thread in case the runnable mucked it up...
+                    if(getPriority() != tp.getThreadPriority()) {
+                        setPriority(tp.getThreadPriority());
+                    }
+
+                    if (runOnce) {
+                        run.set(false);
+                        clearFromBusyWorkersList(this);
+                    } else if(ran) {
+                        ran = false;
+                        makeAvailable(this);
+                    }
+
+                }
+            }
+
+            //if (log.isDebugEnabled())
+            try {
+                getLog().debug("WorkerThread is shut down.");
+            } catch(Exception e) {
+                // ignore to help with a tomcat glitch
+            }
+        }
+    }
+}
\ No newline at end of file
diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/quartz/config/QuartzConfig.java b/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/quartz/config/QuartzConfig.java
index c00c0f3..a6a6526 100644
--- a/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/quartz/config/QuartzConfig.java
+++ b/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/quartz/config/QuartzConfig.java
@@ -1,5 +1,6 @@
 package org.nl.system.service.quartz.config;
 
+import com.dtp.core.thread.DtpExecutor;
 import org.quartz.Scheduler;
 import org.quartz.spi.TriggerFiredBundle;
 import org.springframework.beans.factory.config.AutowireCapableBeanFactory;
@@ -21,7 +22,7 @@ public class QuartzConfig {
      * 解决Job中注入Spring Bean为null的问题
      */
     @Component("quartzJobFactory")
-    public static class QuartzJobFactory extends AdaptableJobFactory {
+    public  class QuartzJobFactory extends AdaptableJobFactory {
 
         private final AutowireCapableBeanFactory capableBeanFactory;
 
@@ -46,8 +47,9 @@ public class QuartzConfig {
      * @throws Exception /
      */
     @Bean(name = "scheduler")
-    public Scheduler scheduler(QuartzJobFactory quartzJobFactory) throws Exception {
+    public Scheduler scheduler(QuartzJobFactory quartzJobFactory, DtpExecutor e) throws Exception {
         SchedulerFactoryBean factoryBean=new SchedulerFactoryBean();
+        factoryBean.setTaskExecutor(e);
         factoryBean.setJobFactory(quartzJobFactory);
         factoryBean.afterPropertiesSet();
         Scheduler scheduler=factoryBean.getScheduler();
diff --git a/nladmin-system/nlsso-server/src/main/resources/application.yml b/nladmin-system/nlsso-server/src/main/resources/application.yml
deleted file mode 100644
index df46a2c..0000000
--- a/nladmin-system/nlsso-server/src/main/resources/application.yml
+++ /dev/null
@@ -1,120 +0,0 @@
-# 端口
-server:
-    port: 9000
-
-# Sa-Token 配置
-sa-token:
-    # ------- SSO-模式一相关配置  (非模式一不需要配置)
-
-#          配置 Cookie 作用域
-
-#     ------- SSO-模式二相关配置
-    sso:
-        # Ticket有效期 (单位: 秒),默认五分钟
-        ticket-timeout: 300
-        # 所有允许的授权回调地址比较重要
-        allow-url: "*"
-        # 是否打开单点注销功能
-        is-slo: true
-        # ------- SSO-模式三相关配置 (下面的配置在SSO模式三并且 is-slo=true 时打开)
-#        # 是否打开模式三
-        isHttp: true
-#        # 接口调用秘钥(用于SSO模式三的单点注销功能)
-        secretkey: kQwIOrYvnXmSDkwEiFngrKidMcdrgKor
-    token-name: EL-ADMIN-TOEKN
-#        # ---- 除了以上配置项,你还需要为 Sa-Token 配置http请求处理器(文档有步骤说明)
-#
-spring:
-    #配置 Jpa
-    jpa:
-        hibernate:
-            ddl-auto: none
-        open-in-view: true
-        properties:
-            hibernate:
-                dialect: org.hibernate.dialect.MySQL5InnoDBDialect
-                enable_lazy_load_no_trans: true
-        # 数据源
-    datasource:
-        druid:
-            db-type: com.alibaba.druid.pool.DruidDataSource
-            driverClassName: com.mysql.cj.jdbc.Driver
-            #      url: jdbc:log4jdbc:mysql://${DB_HOST:localhost}:${DB_PORT:3306}/${DB_NAME:whxr_test}?serverTimezone=Asia/Shanghai&characterEncoding=utf8&useSSL=false&useOldAliasMetadataBehavior=true
-            url: jdbc:mysql://${DB_HOST:47.111.78.178}:${DB_PORT:3306}/${DB_NAME:whxr}?serverTimezone=Asia/Shanghai&characterEncoding=utf8&useSSL=false&useOldAliasMetadataBehavior=true
-            username: ${DB_USER:root}
-            password: ${DB_PWD:P@ssw0rd}
-            #      username: ${DB_USER:root}
-            #      password: ${DB_PWD:root}
-            # 初始连接数
-            initial-size: 5
-            # 最小连接数
-            min-idle: 15
-            # 最大连接数
-            max-active: 30
-            # 是否自动回收超时连接
-            remove-abandoned: true
-            # 超时时间(以秒数为单位)
-            remove-abandoned-timeout: 180
-            # 获取连接超时时间
-            max-wait: 300
-            # 连接有效性检测时间
-            time-between-eviction-runs-millis: 60000
-            # 连接在池中最小生存的时间
-            min-evictable-idle-time-millis: 300000
-            # 连接在池中最大生存的时间
-            max-evictable-idle-time-millis: 900000
-            # 指明连接是否被空闲连接回收器(如果有)进行检验.如果检测失败,则连接将被从池中去除
-            test-while-idle: true
-            # 指明是否在从池中取出连接前进行检验,如果检验失败, 则从池中去除连接并尝试取出另一个
-            test-on-borrow: true
-            # 是否在归还到池中前进行检验
-            test-on-return: false
-            # 检测连接是否有效
-            validation-query: select 1
-            # 配置监控统计
-#            webStatFilter:
-#                enabled: true
-#            stat-view-servlet:
-#                enabled: true
-#                url-pattern: /druid/*
-#                reset-enable: false
-#            filter:
-#                stat:
-#                    enabled: true
-#                    # 记录慢SQL
-#                    log-slow-sql: true
-#                    slow-sql-millis: 1000
-#                    merge-sql: true
-#                wall:
-#                    config:
-#                        multi-statement-allow: true
-
-    # Redis配置 (SSO模式一和模式二使用Redis来同步会话)
-    redis:
-        # Redis数据库索引(默认为0)
-        database: 1
-        # Redis服务器地址
-        host: 47.96.133.178
-        # Redis服务器连接端口
-        port: 6479
-        # Redis服务器连接密码(默认为空)
-        password: 942464Yy
-        # 连接超时时间
-        timeout: 10s
-        lettuce:
-            pool:
-                # 连接池最大连接数
-                max-active: 200
-                # 连接池最大阻塞等待时间(使用负值表示没有限制)
-                max-wait: -1ms
-                # 连接池中的最大空闲连接
-                max-idle: 10
-                # 连接池中的最小空闲连接
-                min-idle: 0
-
-forest:
-    # 关闭 forest 请求日志打印
-    log-enabled: false
-
-
-
diff --git a/nladmin-system/nlsso-server/src/main/resources/config/application-dev.yml b/nladmin-system/nlsso-server/src/main/resources/config/application-dev.yml
index 321b80f..6d8589b 100644
--- a/nladmin-system/nlsso-server/src/main/resources/config/application-dev.yml
+++ b/nladmin-system/nlsso-server/src/main/resources/config/application-dev.yml
@@ -6,10 +6,10 @@ spring:
     druid:
       db-type: com.alibaba.druid.pool.DruidDataSource
       driverClassName: net.sf.log4jdbc.sql.jdbcapi.DriverSpy
-      url: jdbc:log4jdbc:mysql://${DB_HOST:192.168.81.252}:${DB_PORT:3306}/${DB_NAME:nl-sso-server}?serverTimezone=Asia/Shanghai&characterEncoding=utf8&useSSL=false&useOldAliasMetadataBehavior=true
-#      url: jdbc:log4jdbc:mysql://${DB_HOST:127.0.0.1}:${DB_PORT:3306}/${DB_NAME:yongyu_lms2}?serverTimezone=Asia/Shanghai&characterEncoding=utf8&useSSL=false&useOldAliasMetadataBehavior=true
+#      url: jdbc:log4jdbc:mysql://${DB_HOST:192.168.81.252}:${DB_PORT:3306}/${DB_NAME:nl-sso-server}?serverTimezone=Asia/Shanghai&characterEncoding=utf8&useSSL=false&useOldAliasMetadataBehavior=true
+      url: jdbc:log4jdbc:mysql://${DB_HOST:127.0.0.1}:${DB_PORT:3306}/${DB_NAME:nl_platform}?serverTimezone=Asia/Shanghai&characterEncoding=utf8&useSSL=false&useOldAliasMetadataBehavior=true
       username: ${DB_USER:root}
-      password: ${DB_PWD:Root.123456}
+      password: ${DB_PWD:root}
       #      password: ${DB_PWD:12356}
       # 初始连接数
       initial-size: 5
@@ -57,8 +57,75 @@ spring:
     database: ${REDIS_DB:2}
     host: ${REDIS_HOST:127.0.0.1}
     port: ${REDIS_PORT:6379}
-    password: ${REDIS_PWD:}
-
+  flyway: # flyway 数据库 DDL 版本控制
+    enabled: true # 正式环境才开启
+    clean-disabled: true # 禁用数据库清理
+    encoding: UTF-8
+    locations: classpath:db
+    #  flyway 会在库中创建此名称元数据表,用于记录所有版本演化和状态,同一个库不同项目可能冲突,每个项目一张表来记录
+    table: flyway_schema_history_nl_platform #TODO 值的后缀指定为当前项目名称
+    baseline-version: 1 # 基线版本默认开始序号 默认为 1
+    baseline-on-migrate: true #  针对非空数据库是否默认调用基线版本,为空的话默认会调用基线版本
+    placeholders: # 定义 afterMigrateError.sql 要清理的元数据表表名
+      flyway-table: ${spring.flyway.table}
+  dynamic:
+    tp:
+      enabled: true
+      enabledBanner: true           # 是否开启banner打印,默认true
+      enabledCollect: true          # 是否开启监控指标采集,默认false
+      collectorTypes: micrometer,logging     # 监控数据采集器类型(logging | micrometer | internal_logging),默认micrometer
+      logPath: /home/logs888          # 监控日志数据路径,默认 ${user.home}/logs
+      monitorInterval: 5            # 监控时间间隔(报警判断、指标采集),默认5s
+      tomcatTp: # tomcat web server线程池配置
+        corePoolSize: 100
+        maximumPoolSize: 400
+        keepAliveTime: 60
+      executors: # 动态线程池配置,都有默认值,采用默认值的可以不配置该项,减少配置量
+        - threadPoolName: dtpExecutor1
+          executorType: common                     # 线程池类型common、eager:适用于io密集型
+          corePoolSize: 6
+          maximumPoolSize: 8
+          queueCapacity: 200
+          queueType: VariableLinkedBlockingQueue   # 任务队列,查看源码QueueTypeEnum枚举类
+          rejectedHandlerType: CallerRunsPolicy    # 拒绝策略,查看RejectedTypeEnum枚举类
+          keepAliveTime: 50
+          allowCoreThreadTimeOut: false                  # 是否允许核心线程池超时
+          threadNamePrefix: test                         # 线程名前缀
+          waitForTasksToCompleteOnShutdown: false        # 参考spring线程池设计,优雅关闭线程池
+          awaitTerminationSeconds: 5                     # 单位(s)
+          preStartAllCoreThreads: false                  # 是否预热所有核心线程,默认false
+          runTimeout: 200                                # 任务执行超时阈值,目前只做告警用,单位(ms)
+          queueTimeout: 100                              # 任务在队列等待超时阈值,目前只做告警用,单位(ms)
+          taskWrapperNames: [ "ttl" ]                          # 任务包装器名称,集成TaskWrapper接口
+          notifyItems: # 报警项,不配置自动会按默认值配置(变更通知、容量报警、活性报警、拒绝报警、任务超时报警)
+            - type: capacity               # 报警项类型,查看源码 NotifyTypeEnum枚举类
+              enabled: true
+              threshold: 80                # 报警阈值
+              platforms: [ ding,wechat ]     # 可选配置,不配置默认拿上层platforms配置的所以平台
+              interval: 120                # 报警间隔(单位:s)
+            - type: change
+              enabled: true
+            - type: liveness
+              enabled: true
+              threshold: 80
+            - type: reject
+              enabled: true
+              threshold: 1
+            - type: run_timeout
+              enabled: true
+              threshold: 1
+            - type: queue_timeout
+              enabled: true
+              threshold: 1
+  quartz:
+    properties:
+      org:
+        quartz:
+          jobStore:
+          threadPool:
+            threadCount: 14
+            class: org.nl.system.service.quartz.SimpleThreadPool
+    scheduler-name: scheduler
 # 登录相关配置
 login:
   # 登录缓存
@@ -160,9 +227,4 @@ sa-token:
     # Redis服务器连接密码(默认为空)
     password:
     # 连接超时时间
-    timeout: 10s
-
-
-loki:
-  url: http://localhost:3100/loki/api/v1
-  systemName: acs
+    timeout: 10s
\ No newline at end of file
diff --git a/nladmin-system/nlsso-server/src/main/resources/config/application-prod.yml b/nladmin-system/nlsso-server/src/main/resources/config/application-prod.yml
index 1d3bb43..1a7570b 100644
--- a/nladmin-system/nlsso-server/src/main/resources/config/application-prod.yml
+++ b/nladmin-system/nlsso-server/src/main/resources/config/application-prod.yml
@@ -56,7 +56,6 @@ spring:
     database: ${REDIS_DB:15}
     host: ${REDIS_HOST:127.0.0.1}
     port: ${REDIS_PORT:6379}
-    password: ${REDIS_PWD:}
     #连接超时时间
     timeout: 5000
 # 登录相关配置
@@ -159,7 +158,3 @@ sa-token:
   token-prefix: Bearer
   is-read-cookie: false
   is-read-body: false
-
-loki:
-  url: http://localhost:3100/loki/api/v1
-  systemName: lms
diff --git a/nladmin-system/nlsso-server/src/main/resources/config/application-test.yml b/nladmin-system/nlsso-server/src/main/resources/config/application-test.yml
index d5f3408..59bc8ff 100644
--- a/nladmin-system/nlsso-server/src/main/resources/config/application-test.yml
+++ b/nladmin-system/nlsso-server/src/main/resources/config/application-test.yml
@@ -156,8 +156,4 @@ sa-token:
   is-log: false
   jwt-secret-key: opsjajisdnnca0sdkksdfaaasdfwwq
   # token 前缀
-  token-prefix: Bearer
-
-loki:
-  url: http://localhost:3100/loki/api/v1
-  systemName: lms
+  token-prefix: Bearer
\ No newline at end of file
diff --git a/nladmin-system/nlsso-server/src/main/resources/config/application.yml b/nladmin-system/nlsso-server/src/main/resources/config/application.yml
index 2878f27..16b80c0 100644
--- a/nladmin-system/nlsso-server/src/main/resources/config/application.yml
+++ b/nladmin-system/nlsso-server/src/main/resources/config/application.yml
@@ -9,44 +9,22 @@ spring:
     redis:
       repositories:
         enabled: false
-
-  #配置 Jpa
-  jpa:
-    hibernate:
-      ddl-auto: none
-    open-in-view: true
-    properties:
-      hibernate:
-        dialect: org.hibernate.dialect.MySQL5InnoDBDialect
-        enable_lazy_load_no_trans: true
+#密码加密传输,前端公钥加密,后端私钥解密
+rsa:
+  private_key: MIIBUwIBADANBgkqhkiG9w0BAQEFAASCAT0wggE5AgEAAkEA0vfvyTdGJkdbHkB8mp0f3FE0GYP3AYPaJF7jUd1M0XxFSE2ceK3k2kw20YvQ09NJKk+OMjWQl9WitG9pB6tSCQIDAQABAkA2SimBrWC2/wvauBuYqjCFwLvYiRYqZKThUS3MZlebXJiLB+Ue/gUifAAKIg1avttUZsHBHrop4qfJCwAI0+YRAiEA+W3NK/RaXtnRqmoUUkb59zsZUBLpvZgQPfj1MhyHDz0CIQDYhsAhPJ3mgS64NbUZmGWuuNKp5coY2GIj/zYDMJp6vQIgUueLFXv/eZ1ekgz2Oi67MNCk5jeTF2BurZqNLR3MSmUCIFT3Q6uHMtsB9Eha4u7hS31tj1UWE+D+ADzp59MGnoftAiBeHT7gDMuqeJHPL4b+kC+gzV4FGTfhR9q3tTbklZkD2A==
+logging:
+  config: classpath:logback-spring.xml
+# sa-token白名单配置
 task:
   pool:
     # 核心线程池大小
-    core-pool-size: 10
+    core-pool-size: 12
     # 最大线程数
     max-pool-size: 30
     # 活跃时间
     keep-alive-seconds: 60
     # 队列容量
     queue-capacity: 50
-
-#七牛云
-qiniu:
-  # 文件大小 /M
-  max-size: 15
-
-#邮箱验证码有效时间/秒
-code:
-  expiration: 300
-
-#密码加密传输,前端公钥加密,后端私钥解密
-rsa:
-  private_key: MIIBUwIBADANBgkqhkiG9w0BAQEFAASCAT0wggE5AgEAAkEA0vfvyTdGJkdbHkB8mp0f3FE0GYP3AYPaJF7jUd1M0XxFSE2ceK3k2kw20YvQ09NJKk+OMjWQl9WitG9pB6tSCQIDAQABAkA2SimBrWC2/wvauBuYqjCFwLvYiRYqZKThUS3MZlebXJiLB+Ue/gUifAAKIg1avttUZsHBHrop4qfJCwAI0+YRAiEA+W3NK/RaXtnRqmoUUkb59zsZUBLpvZgQPfj1MhyHDz0CIQDYhsAhPJ3mgS64NbUZmGWuuNKp5coY2GIj/zYDMJp6vQIgUueLFXv/eZ1ekgz2Oi67MNCk5jeTF2BurZqNLR3MSmUCIFT3Q6uHMtsB9Eha4u7hS31tj1UWE+D+ADzp59MGnoftAiBeHT7gDMuqeJHPL4b+kC+gzV4FGTfhR9q3tTbklZkD2A==
-logging:
-  file:
-    path: C:\log\wms
-  config: classpath:logback-spring.xml
-# sa-token白名单配置
 security:
   # 排除路径
   excludes:
@@ -80,12 +58,35 @@ security:
     - /api/localStorage/pictures
     # 参数
     - /api/param/getValueByCode
+    - /plumelog/**
 mybatis-plus:
   configuration:
     map-underscore-to-camel-case: true
-    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
+    log-impl: org.apache.ibatis.logging.nologging.NoLoggingImpl
   mapper-locations:
     - classpath:org.nl.**.mapper/*.xml
   global-config:
     db-config:
       id-type: INPUT
+plumelog:
+  model: redis #值为4种 redis,kafka,rest,restServer,lite
+  lite:
+    log:
+      path: /lucene2
+redisson:
+  # redis key前缀
+  keyPrefix:
+  # 线程池数量
+  threads: 4
+  # Netty线程池数量
+  nettyThreads: 8
+  # 单节点配置
+  singleServerConfig:
+    # 最小空闲连接数
+    connectionMinimumIdleSize: 4
+    # 连接池大小
+    connectionPoolSize: 8
+    # 连接空闲超时,单位:毫秒
+    idleConnectionTimeout: 10000
+    # 命令等待超时,单位:毫秒
+    timeout: 3000
diff --git a/nladmin-system/nlsso-server/src/main/resources/db/V1.0.0__初始化.sql b/nladmin-system/nlsso-server/src/main/resources/db/V1.0.0__初始化.sql
new file mode 100644
index 0000000..b50bd3c
--- /dev/null
+++ b/nladmin-system/nlsso-server/src/main/resources/db/V1.0.0__初始化.sql
@@ -0,0 +1,8 @@
+CREATE TABLE `t_javastack` (
+                        `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',
+                        `name` varchar(20) NOT NULL COMMENT '姓名',
+                        `age` int(5) DEFAULT NULL COMMENT '年龄',
+                        PRIMARY KEY (`id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
+
+
diff --git a/nladmin-system/nlsso-server/src/main/resources/db/V2.0.0__初始化.sql b/nladmin-system/nlsso-server/src/main/resources/db/V2.0.0__初始化.sql
new file mode 100644
index 0000000..b50bd3c
--- /dev/null
+++ b/nladmin-system/nlsso-server/src/main/resources/db/V2.0.0__初始化.sql
@@ -0,0 +1,8 @@
+CREATE TABLE `t_javastack` (
+                        `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',
+                        `name` varchar(20) NOT NULL COMMENT '姓名',
+                        `age` int(5) DEFAULT NULL COMMENT '年龄',
+                        PRIMARY KEY (`id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
+
+
diff --git a/nladmin-system/nlsso-server/src/main/resources/db/V3.0.0__初始化.sql b/nladmin-system/nlsso-server/src/main/resources/db/V3.0.0__初始化.sql
new file mode 100644
index 0000000..4ee4b27
--- /dev/null
+++ b/nladmin-system/nlsso-server/src/main/resources/db/V3.0.0__初始化.sql
@@ -0,0 +1,8 @@
+CREATE TABLE `t2_javastack` (
+                        `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',
+                        `name` varchar(20) NOT NULL COMMENT '姓名',
+                        `age` int(5) DEFAULT NULL COMMENT '年龄',
+                        PRIMARY KEY (`id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
+
+
diff --git a/nladmin-system/nlsso-server/src/main/resources/logback-spring.xml b/nladmin-system/nlsso-server/src/main/resources/logback-spring.xml
index 3e68ee7..41a3f04 100644
--- a/nladmin-system/nlsso-server/src/main/resources/logback-spring.xml
+++ b/nladmin-system/nlsso-server/src/main/resources/logback-spring.xml
@@ -14,9 +14,6 @@ https://juejin.cn/post/6844903775631572999
     <property name="log.pattern"
               value="%black(%contextName-) %red(%d{yyyy-MM-dd HH:mm:ss.SSS}) %green([%thread]) %highlight(%-5level) %boldMagenta(%logger{36}) - %gray(%msg%n)"/>
     <springProperty scope="context" name="logPath" source="logging.file.path" defaultValue="logs"/>
-    <springProperty scope="context" name="lokiUrl" source="loki.url"/>
-    <springProperty scope="context" name="systemName" source="loki.systemName"/>
-    <property name="LOKI_URL" value="${lokiUrl}"/>
     <property name="SYSTEM_NAME" value="${systemName}"/>
     <property name="LOG_HOME" value="${logPath}"/>
     <!--引入默认的一些设置-->
@@ -58,28 +55,20 @@ https://juejin.cn/post/6844903775631572999
         <appender-ref ref="FILE"/>
     </appender>
 
-    <!--添加loki-->
-    <appender name="lokiAppender" class="com.github.loki4j.logback.Loki4jAppender">
-        <batchTimeoutMs>1000</batchTimeoutMs>
-        <http class="com.github.loki4j.logback.ApacheHttpSender">
-            <url>${LOKI_URL}/push</url>
-        </http>
-        <format>
-            <label>
-                <pattern>system=${SYSTEM_NAME},level=%level,logType=%X{log_file_type:-logType}</pattern>
-            </label>
-            <message>
-                <pattern>${log.pattern}</pattern>
-            </message>
-            <sortByTime>true</sortByTime>
-        </format>
+    <appender name="plumelog" class="com.plumelog.lite.logback.appender.LiteAppender">
+        <appName>plumelog</appName>
+        <!-- 日志存储位置 -->
+        <logPath>/plumelog/lite</logPath>
+        <!-- 日志保留天数 -->
+        <keepDay>30</keepDay>
+        <expand>sleuth</expand>
     </appender>
 
     <!--开发环境:打印控制台-->
     <springProfile name="dev">
         <root level="debug">
             <appender-ref ref="CONSOLE"/>
-            <appender-ref ref="lokiAppender" />
+            <appender-ref ref="plumelog" />
         </root>
         <logger name="org.springframework" level="ERROR" additivity="false">
             <appender-ref ref="CONSOLE"/>
@@ -124,55 +113,55 @@ https://juejin.cn/post/6844903775631572999
     <springProfile name="prod">
         <root level="debug">
             <appender-ref ref="asyncFileAppender"/>
-            <appender-ref ref="lokiAppender"/>
+            <appender-ref ref="plumelog"/>
         </root>
         <logger name="org.springframework" level="ERROR" additivity="false">
             <appender-ref ref="asyncFileAppender"/>
-            <appender-ref ref="lokiAppender"/>
+            <appender-ref ref="plumelog"/>
         </logger>
         <logger name="org.apache" level="ERROR" additivity="false">
             <appender-ref ref="asyncFileAppender"/>
-            <appender-ref ref="lokiAppender"/>
+            <appender-ref ref="plumelog"/>
         </logger>
         <logger name="org.hibernate" level="ERROR" additivity="false">
             <appender-ref ref="asyncFileAppender"/>
-            <appender-ref ref="lokiAppender"/>
+            <appender-ref ref="plumelog"/>
         </logger>
         <logger name="io.netty" level="ERROR" additivity="false">
             <appender-ref ref="asyncFileAppender"/>
-            <appender-ref ref="lokiAppender"/>
+            <appender-ref ref="plumelog"/>
         </logger>
         <logger name="jdbc" level="ERROR" additivity="false">
             <appender-ref ref="asyncFileAppender"/>
-            <appender-ref ref="lokiAppender"/>
+            <appender-ref ref="plumelog"/>
         </logger>
         <logger name="io.lettuce" level="ERROR" additivity="false">
             <appender-ref ref="asyncFileAppender"/>
-            <appender-ref ref="lokiAppender"/>
+            <appender-ref ref="plumelog"/>
         </logger>
         <logger name="com.fasterxml" level="ERROR" additivity="false">
             <appender-ref ref="asyncFileAppender"/>
-            <appender-ref ref="lokiAppender"/>
+            <appender-ref ref="plumelog"/>
         </logger>
         <logger name="org.quartz" level="ERROR" additivity="false">
             <appender-ref ref="asyncFileAppender"/>
-            <appender-ref ref="lokiAppender"/>
+            <appender-ref ref="plumelog"/>
         </logger>
         <logger name="com.google" level="ERROR" additivity="false">
             <appender-ref ref="asyncFileAppender"/>
-            <appender-ref ref="lokiAppender"/>
+            <appender-ref ref="plumelog"/>
         </logger>
         <logger name="springfox" level="ERROR" additivity="false">
             <appender-ref ref="asyncFileAppender"/>
-            <appender-ref ref="lokiAppender"/>
+            <appender-ref ref="plumelog"/>
         </logger>
         <logger name="log4jdbc" level="ERROR" additivity="false">
             <appender-ref ref="asyncFileAppender"/>
-            <appender-ref ref="lokiAppender"/>
+            <appender-ref ref="plumelog"/>
         </logger>
         <logger name="nl.basjes" level="ERROR" additivity="false">
             <appender-ref ref="asyncFileAppender"/>
-            <appender-ref ref="lokiAppender"/>
+            <appender-ref ref="plumelog"/>
         </logger>
     </springProfile>
 
diff --git a/nladmin-system/pom.xml b/nladmin-system/pom.xml
index 7a21fba..cfdd1df 100644
--- a/nladmin-system/pom.xml
+++ b/nladmin-system/pom.xml
@@ -11,7 +11,6 @@
 
     <modules>
         <module>nlsso-server</module>
-        <module>nlsso-client</module>
     </modules>
     <packaging>pom</packaging>
     <groupId>org.nl</groupId>
@@ -22,9 +21,6 @@
         <sa-token.version>1.31.0</sa-token.version>
     </properties>
 
-        <dependencies>
-
-        </dependencies>
 
 
 </project>