From e12e717a045c4b5d9893ddac9135c1721e7a0cc3 Mon Sep 17 00:00:00 2001
From: ludc
Date: 星期四, 16 三月 2023 17:58:26 +0800
Subject: [PATCH] 上传更改过的源码jar包,上传租户管理相关功能

---
 Source/BladeX/blade-service/blade-user/src/main/resources/application-dev.yml                                      |    3 
 Source/BladeX/blade-ops/blade-log/Dockerfile                                                                       |    4 
 Source/BladeX/blade-ops/blade-xxljob/Dockerfile                                                                    |    2 
 Source/BladeX/blade-ops/blade-develop/Dockerfile                                                                   |   15 
 Source/BladeX/blade-service-api/blade-dict-api/src/main/java/org/springblade/system/entity/Dict.java               |    2 
 Source/BladeX/blade-ops/blade-develop/src/main/resources/application-dev.yml                                       |    2 
 Source/BladeX/blade-ops-api/blade-resource-api/src/main/java/org/springblade/resource/entity/Sms.java              |    2 
 Source/BladeX/blade-common/src/main/java/org/springblade/common/constant/LauncherConstant.java                     |   25 
 Source/BladeX/blade-service-api/blade-system-api/src/main/java/org/springblade/system/entity/Menu.java             |    2 
 Source/BladeX/blade-common/src/main/java/org/springblade/common/constant/TenantConstant.java                       |    4 
 Source/BladeX/blade-common/src/main/resources/banner.txt                                                           |   12 
 Source/BladeX/blade-ops/blade-resource/src/main/resources/application.yml                                          |    2 
 Source/BladeX/blade-auth/src/main/resources/application-dev.yml                                                    |    3 
 Source/BladeX/blade-service-api/blade-system-api/src/main/java/org/springblade/system/entity/Post.java             |    2 
 Source/BladeX/blade-service/blade-desk/pom.xml                                                                     |    9 
 Source/BladeX/blade-ops/blade-flow/Dockerfile                                                                      |    4 
 Source/BladeX/blade-service-api/pom.xml                                                                            |    2 
 Source/BladeX/blade-ops/blade-swagger/src/main/java/org/springblade/swagger/SwaggerApplication.java                |    2 
 Source/BladeX/blade-plugin-api/pom.xml                                                                             |    2 
 Source/BladeX/blade-ops/blade-flow/src/main/resources/application.yml                                              |    2 
 Source/BladeX/blade-service/blade-user/src/main/java/org/springblade/system/user/mapper/UserMapper.xml             |    8 
 Source/BladeX/blade-ops/blade-xxljob-admin/Dockerfile                                                              |    2 
 Source/BladeX/blade-ops-api/blade-flow-api/src/main/java/org/springblade/flow/core/utils/FlowUtil.java             |    2 
 Source/BladeX/blade-gateway/Dockerfile                                                                             |    4 
 Source/BladeX/blade-service-api/blade-user-api/src/main/java/org/springblade/system/user/entity/UserDept.java      |    2 
 Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/controller/TenantController.java     |   43 +
 Source/BladeX/blade-service/blade-system/src/main/resources/application-dev.yml                                    |    4 
 Source/BladeX/blade-ops-api/pom.xml                                                                                |    2 
 Source/BladeX/blade-ops-api/blade-resource-api/src/main/java/org/springblade/resource/entity/Oss.java              |    2 
 Source/BladeX/blade-ops/blade-develop/pom.xml                                                                      |    9 
 Source/BladeX/blade-ops/blade-log/src/main/resources/application-dev.yml                                           |    2 
 Source/BladeX/blade-ops/blade-develop/src/main/java/org/springblade/develop/entity/Datasource.java                 |    2 
 Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/service/impl/TenantServiceImpl.java  |  272 ++++++---
 Source/BladeX/blade-ops/blade-resource/pom.xml                                                                     |    9 
 Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/mapper/DeptMapper.xml                |   12 
 Source/BladeX/blade-auth/pom.xml                                                                                   |   12 
 Source/BladeX/blade-ops/blade-develop/src/main/java/org/springblade/develop/entity/Code.java                       |    2 
 Source/BladeX/blade-service-api/blade-dict-api/src/main/java/org/springblade/system/entity/DictBiz.java            |    2 
 Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/mapper/RoleMapper.xml                |    8 
 Source/BladeX/blade-ops/blade-report/src/main/resources/application.yml                                            |    2 
 Source/BladeX/pom.xml                                                                                              |    6 
 Source/BladeX/blade-ops/blade-xxljob/src/main/resources/application.yml                                            |    4 
 Source/BladeX/blade-service-api/blade-system-api/src/main/java/org/springblade/system/vo/TenantVO.java             |   40 +
 Source/BladeX/blade-service/blade-desk/src/main/java/org/springblade/desk/entity/ProcessLeave.java                 |    2 
 Source/BladeX/blade-ops/blade-resource/src/main/java/org/springblade/resource/mapper/OssMapper.xml                 |    2 
 Source/BladeX/blade-auth/Dockerfile                                                                                |    9 
 Source/BladeX/blade-service-api/blade-system-api/src/main/java/org/springblade/system/entity/ApiScope.java         |    2 
 Source/BladeX/blade-service-api/blade-system-api/src/main/java/org/springblade/system/entity/TenantPackage.java    |    2 
 Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/mapper/DictBizMapper.xml             |   10 
 Source/BladeX/blade-service-api/blade-user-api/src/main/java/org/springblade/system/user/entity/User.java          |    4 
 Source/BladeX/service-stop.sh                                                                                      |  173 ++++++
 Source/BladeX/blade-auth/src/main/java/org/springblade/auth/service/BladeClientDetailsServiceImpl.java             |    2 
 Source/BladeX/blade-ops/blade-flow/pom.xml                                                                         |   14 
 Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/mapper/PostMapper.xml                |    4 
 Source/BladeX/blade-ops/blade-swagger/src/main/resources/banner.txt                                                |   12 
 Source/BladeX/blade-ops/blade-log/pom.xml                                                                          |    9 
 Source/BladeX/blade-common/pom.xml                                                                                 |    2 
 Source/BladeX/blade-service/blade-user/pom.xml                                                                     |    9 
 Source/BladeX/blade-service-api/blade-system-api/src/main/java/org/springblade/system/entity/RoleMenu.java         |   10 
 Source/BladeX/blade-auth/src/main/java/org/springblade/auth/service/BladeUserDetailsServiceImpl.java               |  229 ++++++--
 Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/mapper/RegionMapper.xml              |   10 
 Source/BladeX/blade-ops/blade-swagger/src/main/resources/application.yml                                           |    2 
 Source/BladeX/blade-service-api/blade-user-api/src/main/java/org/springblade/system/user/entity/UserOther.java     |    2 
 Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/mapper/TenantMapper.xml              |    4 
 Source/BladeX/blade-service-api/blade-system-api/src/main/java/org/springblade/system/entity/AuthClient.java       |    2 
 Source/BladeX/blade-auth/src/main/java/org/springblade/auth/AuthApplication.java                                   |    1 
 Source/BladeX/blade-ops/blade-xxljob-admin/src/main/resources/mybatis-mapper/XxlJobRegistryMapper.xml              |   10 
 Source/BladeX/blade-service-api/blade-system-api/src/main/java/org/springblade/system/entity/TopMenu.java          |    2 
 Source/BladeX/blade-ops/blade-resource/src/main/resources/application-dev.yml                                      |    1 
 Source/BladeX/blade-service-api/blade-system-api/src/main/java/org/springblade/system/entity/Region.java           |    2 
 Source/BladeX/blade-service-api/blade-system-api/src/main/java/org/springblade/system/entity/TopMenuSetting.java   |    2 
 Source/BladeX/blade-ops/blade-swagger/Dockerfile                                                                   |    4 
 Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/mapper/DictMapper.xml                |   12 
 Source/BladeX/blade-auth/src/main/resources/application.yml                                                        |    4 
 Source/BladeX/blade-auth/src/main/java/org/springblade/auth/constant/AuthConstant.java                             |    8 
 Source/BladeX/blade-gateway/pom.xml                                                                                |    2 
 Source/BladeX/blade-ops-api/blade-resource-api/src/main/java/org/springblade/resource/entity/Attach.java           |    2 
 Source/BladeX/blade-ops/blade-develop/src/test/java/org/springblade/test/CodeGenerator.java                        |    2 
 Source/BladeX/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/entity/Notice.java               |    2 
 Source/更改了的jar包.zip                                                                                                |    0 
 Source/BladeX/blade-auth/src/main/java/org/springblade/auth/granter/CaptchaTokenGranter.java                       |   14 
 Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/service/ITenantService.java          |   19 
 Source/BladeX/blade-service-api/blade-system-api/src/main/java/org/springblade/system/entity/Tenant.java           |   15 
 Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/mapper/MenuMapper.xml                |  102 +-
 Source/BladeX/blade-service-api/blade-user-api/src/main/java/org/springblade/system/user/entity/UserApp.java       |    2 
 Source/BladeX/blade-service/blade-desk/Dockerfile                                                                  |    4 
 Source/BladeX/blade-ops/blade-xxljob-admin/src/main/resources/application.yml                                      |    2 
 Source/BladeX/blade-common/src/main/java/org/springblade/common/launch/LauncherServiceImpl.java                    |    5 
 Source/BladeX/blade-service/blade-system/pom.xml                                                                   |    9 
 Source/BladeX/blade-service/blade-user/src/main/java/org/springblade/system/user/service/IUserService.java         |    8 
 Source/BladeX/blade-service-api/blade-system-api/src/main/java/org/springblade/system/feign/ISysClient.java        |    2 
 Source/BladeX/blade-ops/blade-report/pom.xml                                                                       |    9 
 Source/BladeX/blade-ops/blade-develop/src/main/java/org/springblade/develop/entity/Model.java                      |    2 
 Source/BladeX/blade-ops/blade-admin/Dockerfile                                                                     |    4 
 Source/BladeX/blade-auth/src/main/java/org/springblade/auth/config/BladeAuthorizationServerConfiguration.java      |    4 
 Source/BladeX/blade-service/blade-user/Dockerfile                                                                  |    4 
 Source/BladeX/blade-service-api/blade-system-api/src/main/java/org/springblade/system/entity/DataScope.java        |    2 
 Source/BladeX/blade-ops/blade-resource/src/main/java/org/springblade/resource/mapper/SmsMapper.xml                 |    2 
 Source/BladeX/blade-ops/blade-develop/src/main/java/org/springblade/develop/entity/ModelPrototype.java             |    2 
 Source/BladeX/blade-ops/blade-report/Dockerfile                                                                    |    4 
 Source/BladeX/blade-ops/blade-xxljob-admin/pom.xml                                                                 |    9 
 Source/BladeX/blade-service-api/blade-user-api/src/main/java/org/springblade/system/user/entity/UserWeb.java       |    2 
 Source/BladeX/blade-service-api/blade-system-api/src/main/java/org/springblade/system/entity/Param.java            |    2 
 Source/BladeX/blade-service-api/blade-system-api/src/main/java/org/springblade/system/entity/Role.java             |   13 
 Source/BladeX/blade-auth/src/main/java/org/springblade/auth/utils/TokenUtil.java                                   |    6 
 Source/BladeX/blade-service/blade-system/Dockerfile                                                                |    4 
 Source/BladeX/blade-service-api/blade-system-api/src/main/java/org/springblade/system/entity/Dept.java             |    2 
 Source/BladeX/blade-ops/blade-admin/src/main/resources/bootstrap.yml                                               |    2 
 Source/BladeX/blade-ops/blade-resource/Dockerfile                                                                  |    4 
 Source/BladeX/blade-service-api/blade-system-api/src/main/java/org/springblade/system/entity/RoleScope.java        |    2 
 Source/BladeX/blade-service/pom.xml                                                                                |    2 
 Source/BladeX/blade-service-api/blade-user-api/src/main/java/org/springblade/system/user/entity/UserOauth.java     |    2 
 Source/BladeX/blade-service/blade-user/src/main/java/org/springblade/system/user/feign/UserClient.java             |    8 
 Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/mapper/RoleMenuMapper.xml            |    2 
 Source/BladeX/blade-gateway/src/main/resources/bootstrap.yml                                                       |    2 
 Source/BladeX/blade-service/blade-desk/src/main/java/org/springblade/desk/mapper/NoticeMapper.xml                  |    6 
 Source/BladeX/blade-service/blade-user/src/main/java/org/springblade/system/user/service/impl/UserServiceImpl.java |   35 
 Source/BladeX/blade-service/blade-desk/src/main/resources/application-dev.yml                                      |    2 
 Source/BladeX/service-start.sh                                                                                     |   70 ++
 Source/BladeX/blade-plugin/pom.xml                                                                                 |    2 
 Source/BladeX/blade-service-api/blade-user-api/src/main/java/org/springblade/system/user/feign/IUserClient.java    |   11 
 Source/BladeX/blade-service/blade-desk/src/main/java/org/springblade/desk/DeskApplication.java                     |    1 
 Source/BladeX/blade-ops/pom.xml                                                                                    |    2 
 123 files changed, 1,094 insertions(+), 433 deletions(-)

diff --git a/Source/BladeX/blade-auth/Dockerfile b/Source/BladeX/blade-auth/Dockerfile
index f659c09..41f14ff 100644
--- a/Source/BladeX/blade-auth/Dockerfile
+++ b/Source/BladeX/blade-auth/Dockerfile
@@ -4,18 +4,19 @@
 #3.FROM adoptopenjdk/openjdk8-openj9:jdk8u262-b10_openj9-0.21.0-alpine-slim
 #绗�3鐐圭殑tag鍙互鍒拌鍦板潃鏌ヨ锛歨ttps://hub.docker.com/r/adoptopenjdk/openjdk8-openj9/tags?page=1&ordering=last_updated&name=alpine-slim
 #鐗堟湰浠嬬粛涓�瑙堬細https://hub.docker.com/r/adoptopenjdk/openjdk8-openj9
+#鍩虹闀滃儚java
 FROM bladex/alpine-java:openjdk8-openj9_cn_slim
-
+#=浣滆��
 MAINTAINER bladejava@qq.com
 
 RUN mkdir -p /blade/auth
 
 WORKDIR /blade/auth
-
-EXPOSE 8100
+#鍦ㄥ鍣ㄤ腑浠ュ灏戠鍙h繍琛�
+EXPOSE 36001
 
 ADD ./target/blade-auth.jar ./app.jar
 
 ENTRYPOINT ["java", "-Djava.security.egd=file:/dev/./urandom", "-jar", "app.jar"]
 
-CMD ["--spring.profiles.active=test"]
+CMD ["--spring.profiles.active=dev"]
diff --git a/Source/BladeX/blade-auth/pom.xml b/Source/BladeX/blade-auth/pom.xml
index 4d979ce..b79e5d7 100644
--- a/Source/BladeX/blade-auth/pom.xml
+++ b/Source/BladeX/blade-auth/pom.xml
@@ -6,7 +6,7 @@
     <modelVersion>4.0.0</modelVersion>
 
     <parent>
-        <artifactId>BladeX</artifactId>
+        <artifactId>UBCS</artifactId>
         <groupId>org.springblade</groupId>
         <version>3.0.1.RELEASE</version>
     </parent>
@@ -89,6 +89,16 @@
             <groupId>org.springframework.boot</groupId>
             <artifactId>spring-boot-starter-freemarker</artifactId>
         </dependency>
+        <!--oracle椹卞姩-->
+        <dependency>
+            <groupId>com.oracle.database.jdbc</groupId>
+            <artifactId>ojdbc8</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>cn.easyproject</groupId>
+            <artifactId>orai18n</artifactId>
+            <version>${orai18n.version}</version>
+        </dependency>
         <!-- 閾捐矾杩借釜銆佹湇鍔$洃鎺� -->
         <!--<dependency>
             <groupId>org.springblade</groupId>
diff --git a/Source/BladeX/blade-auth/src/main/java/org/springblade/auth/AuthApplication.java b/Source/BladeX/blade-auth/src/main/java/org/springblade/auth/AuthApplication.java
index 8c18654..fc4363d 100644
--- a/Source/BladeX/blade-auth/src/main/java/org/springblade/auth/AuthApplication.java
+++ b/Source/BladeX/blade-auth/src/main/java/org/springblade/auth/AuthApplication.java
@@ -20,6 +20,7 @@
 import org.springblade.core.cloud.client.BladeCloudApplication;
 import org.springblade.core.launch.BladeApplication;
 import org.springblade.core.launch.constant.AppConstant;
+import springfox.documentation.swagger2.annotations.EnableSwagger2WebMvc;
 
 /**
  * 鐢ㄦ埛璁よ瘉鏈嶅姟鍣�
diff --git a/Source/BladeX/blade-auth/src/main/java/org/springblade/auth/config/BladeAuthorizationServerConfiguration.java b/Source/BladeX/blade-auth/src/main/java/org/springblade/auth/config/BladeAuthorizationServerConfiguration.java
index ce58900..db9033b 100644
--- a/Source/BladeX/blade-auth/src/main/java/org/springblade/auth/config/BladeAuthorizationServerConfiguration.java
+++ b/Source/BladeX/blade-auth/src/main/java/org/springblade/auth/config/BladeAuthorizationServerConfiguration.java
@@ -42,6 +42,7 @@
 import javax.sql.DataSource;
 import java.util.ArrayList;
 import java.util.List;
+import java.util.logging.Logger;
 
 /**
  * 璁よ瘉鏈嶅姟鍣ㄩ厤缃�
@@ -97,6 +98,8 @@
 
 	/**
 	 * 閰嶇疆瀹㈡埛绔俊鎭�
+	 * 鏈嶅姟鍚姩鏃跺姞杞絪ql
+	 * 浣滅敤锛氭煡璇lient淇℃伅
 	 */
 	@Override
 	@SneakyThrows
@@ -114,4 +117,5 @@
 			.tokenKeyAccess("permitAll()")
 			.checkTokenAccess("isAuthenticated()");
 	}
+
 }
diff --git a/Source/BladeX/blade-auth/src/main/java/org/springblade/auth/constant/AuthConstant.java b/Source/BladeX/blade-auth/src/main/java/org/springblade/auth/constant/AuthConstant.java
index 3f5edae..9f76798 100644
--- a/Source/BladeX/blade-auth/src/main/java/org/springblade/auth/constant/AuthConstant.java
+++ b/Source/BladeX/blade-auth/src/main/java/org/springblade/auth/constant/AuthConstant.java
@@ -29,19 +29,19 @@
 	String ENCRYPT = "{blade}";
 
 	/**
-	 * blade_client琛ㄥ瓧娈�
+	 * pl_sys_client琛ㄥ瓧娈�
 	 */
 	String CLIENT_FIELDS = "client_id, CONCAT('{noop}',client_secret) as client_secret, resource_ids, scope, authorized_grant_types, " +
 		"web_server_redirect_uri, authorities, access_token_validity, " +
 		"refresh_token_validity, additional_information, autoapprove";
 
 	/**
-	 * blade_client鏌ヨ璇彞
+	 * pl_sys_client鏌ヨ璇彞
 	 */
-	String BASE_STATEMENT = "select " + CLIENT_FIELDS + " from blade_client";
+	String BASE_STATEMENT = "select " + CLIENT_FIELDS + " from pl_sys_client";
 
 	/**
-	 * blade_client鏌ヨ鎺掑簭
+	 * pl_sys_client鏌ヨ鎺掑簭
 	 */
 	String DEFAULT_FIND_STATEMENT = BASE_STATEMENT + " order by client_id";
 
diff --git a/Source/BladeX/blade-auth/src/main/java/org/springblade/auth/granter/CaptchaTokenGranter.java b/Source/BladeX/blade-auth/src/main/java/org/springblade/auth/granter/CaptchaTokenGranter.java
index 9b96c70..a2c837a 100644
--- a/Source/BladeX/blade-auth/src/main/java/org/springblade/auth/granter/CaptchaTokenGranter.java
+++ b/Source/BladeX/blade-auth/src/main/java/org/springblade/auth/granter/CaptchaTokenGranter.java
@@ -1,5 +1,6 @@
 package org.springblade.auth.granter;
 
+import com.baomidou.mybatisplus.core.toolkit.StringUtils;
 import org.springblade.auth.utils.TokenUtil;
 import org.springblade.common.cache.CacheNames;
 import org.springblade.core.redis.cache.BladeRedis;
@@ -44,17 +45,6 @@
 
 	@Override
 	protected OAuth2Authentication getOAuth2Authentication(ClientDetails client, TokenRequest tokenRequest) {
-		HttpServletRequest request = WebUtil.getRequest();
-		// 澧炲姞楠岃瘉鐮佸垽鏂�
-		String key = request.getHeader(TokenUtil.CAPTCHA_HEADER_KEY);
-		String code = request.getHeader(TokenUtil.CAPTCHA_HEADER_CODE);
-		// 鑾峰彇楠岃瘉鐮�
-		String redisCode = bladeRedis.get(CacheNames.CAPTCHA_KEY + key);
-		// 鍒ゆ柇楠岃瘉鐮�
-		if (code == null || !StringUtil.equalsIgnoreCase(redisCode, code)) {
-			throw new UserDeniedAuthorizationException(TokenUtil.CAPTCHA_NOT_CORRECT);
-		}
-
 		Map<String, String> parameters = new LinkedHashMap<String, String>(tokenRequest.getRequestParameters());
 		String username = parameters.get("username");
 		String password = parameters.get("password");
@@ -64,7 +54,7 @@
 		Authentication userAuth = new UsernamePasswordAuthenticationToken(username, password);
 		((AbstractAuthenticationToken) userAuth).setDetails(parameters);
 		try {
-			userAuth = authenticationManager.authenticate(userAuth);
+				userAuth = authenticationManager.authenticate(userAuth);
 		}
 		catch (AccountStatusException | BadCredentialsException ase) {
 			//covers expired, locked, disabled cases (mentioned in section 5.2, draft 31)
diff --git a/Source/BladeX/blade-auth/src/main/java/org/springblade/auth/service/BladeClientDetailsServiceImpl.java b/Source/BladeX/blade-auth/src/main/java/org/springblade/auth/service/BladeClientDetailsServiceImpl.java
index 98ce4bb..35bf28e 100644
--- a/Source/BladeX/blade-auth/src/main/java/org/springblade/auth/service/BladeClientDetailsServiceImpl.java
+++ b/Source/BladeX/blade-auth/src/main/java/org/springblade/auth/service/BladeClientDetailsServiceImpl.java
@@ -36,7 +36,7 @@
 
 	/**
 	 * 缂撳瓨瀹㈡埛绔俊鎭�
-	 *
+	 * clientId=saber
 	 * @param clientId 瀹㈡埛绔痠d
 	 */
 	@Override
diff --git a/Source/BladeX/blade-auth/src/main/java/org/springblade/auth/service/BladeUserDetailsServiceImpl.java b/Source/BladeX/blade-auth/src/main/java/org/springblade/auth/service/BladeUserDetailsServiceImpl.java
index f48cb4f..f1d2fdf 100644
--- a/Source/BladeX/blade-auth/src/main/java/org/springblade/auth/service/BladeUserDetailsServiceImpl.java
+++ b/Source/BladeX/blade-auth/src/main/java/org/springblade/auth/service/BladeUserDetailsServiceImpl.java
@@ -18,8 +18,8 @@
 
 import com.alibaba.nacos.common.utils.StringUtils;
 import io.jsonwebtoken.Claims;
-import lombok.AllArgsConstructor;
-import lombok.SneakyThrows;
+import lombok.*;
+import me.zhyd.oauth.log.Log;
 import org.springblade.auth.constant.AuthConstant;
 import org.springblade.auth.utils.TokenUtil;
 import org.springblade.common.cache.CacheNames;
@@ -27,6 +27,7 @@
 import org.springblade.core.jwt.props.JwtProperties;
 import org.springblade.core.redis.cache.BladeRedis;
 import org.springblade.core.tool.api.R;
+import org.springblade.core.tool.support.Kv;
 import org.springblade.core.tool.utils.*;
 import org.springblade.system.cache.ParamCache;
 import org.springblade.system.entity.Tenant;
@@ -35,7 +36,12 @@
 import org.springblade.system.user.entity.UserInfo;
 import org.springblade.system.user.enums.UserEnum;
 import org.springblade.system.user.feign.IUserClient;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.security.core.GrantedAuthority;
 import org.springframework.security.core.authority.AuthorityUtils;
+import org.springframework.security.core.authority.GrantedAuthoritiesContainer;
+import org.springframework.security.core.authority.SimpleGrantedAuthority;
 import org.springframework.security.core.userdetails.UserDetailsService;
 import org.springframework.security.core.userdetails.UsernameNotFoundException;
 import org.springframework.security.oauth2.common.exceptions.UserDeniedAuthorizationException;
@@ -43,7 +49,12 @@
 
 import javax.servlet.http.HttpServletRequest;
 import java.time.Duration;
+import java.util.ArrayList;
+import java.util.LinkedHashMap;
 import java.util.List;
+import java.util.NoSuchElementException;
+import java.util.function.Predicate;
+import java.util.stream.Stream;
 
 /**
  * 鐢ㄦ埛淇℃伅
@@ -51,17 +62,39 @@
  * @author Chill
  */
 @Service
-@AllArgsConstructor
+@RequiredArgsConstructor
 public class BladeUserDetailsServiceImpl implements UserDetailsService {
 
+	/**
+	 * 鍏佽閿欒娆℃暟
+	 */
 	public static final Integer FAIL_COUNT = 5;
 	public static final String FAIL_COUNT_VALUE = "account.failCount";
 
+	/**
+	 * user鏈嶅姟璋冪敤绫�
+	 */
 	private final IUserClient userClient;
+
 	private final ISysClient sysClient;
 
 	private final BladeRedis bladeRedis;
+
 	private final JwtProperties jwtProperties;
+
+	/**
+	 * 瓒呯骇绠$悊鍛樹俊鎭�
+	 */
+	@Value("${user-info.tenant-id}")
+	private String tenantId;
+	@Value("${user-info.user-name}")
+	private String userName;
+	@Value("${user-info.passwrod}")
+	private String password;
+	@Value("#{'${user-info.ip}'.split(',')}")
+	private List<String> ips;
+	@Value("${user-info.id}")
+	private String id;
 
 	@Override
 	@SneakyThrows
@@ -92,70 +125,145 @@
 		if (count >= failCount) {
 			throw new UserDeniedAuthorizationException(TokenUtil.USER_HAS_TOO_MANY_FAILS);
 		}
-
-		// 鑾峰彇绉熸埛淇℃伅
-		R<Tenant> tenant = sysClient.getTenant(tenantId);
-		if (tenant.isSuccess()) {
-			if (TokenUtil.judgeTenant(tenant.getData())) {
-				throw new UserDeniedAuthorizationException(TokenUtil.USER_HAS_NO_TENANT_PERMISSION);
-			}
-		} else {
-			throw new UserDeniedAuthorizationException(TokenUtil.USER_HAS_NO_TENANT);
-		}
-
-		// 鑾峰彇鐢ㄦ埛绫诲瀷
-		String userType = Func.toStr(request.getHeader(TokenUtil.USER_TYPE_HEADER_KEY), TokenUtil.DEFAULT_USER_TYPE);
-
-		// 杩滅▼璋冪敤杩斿洖鏁版嵁
-		R<UserInfo> result;
-		// 鏍规嵁涓嶅悓鐢ㄦ埛绫诲瀷璋冪敤瀵瑰簲鐨勬帴鍙h繑鍥炴暟鎹紝鐢ㄦ埛鍙嚜琛屾嫇灞�
-		if (userType.equals(UserEnum.WEB.getName())) {
-			result = userClient.userInfo(tenantId, username, UserEnum.WEB.getName());
-		} else if (userType.equals(UserEnum.APP.getName())) {
-			result = userClient.userInfo(tenantId, username, UserEnum.APP.getName());
-		} else {
-			result = userClient.userInfo(tenantId, username, UserEnum.OTHER.getName());
-		}
-
-		// 鍒ゆ柇杩斿洖淇℃伅
-		if (result.isSuccess()) {
-			UserInfo userInfo = result.getData();
-			User user = userInfo.getUser();
-			// 鐢ㄦ埛涓嶅瓨鍦�,浣嗘彁绀虹敤鎴峰悕涓庡瘑鐮侀敊璇苟閿佸畾璐﹀彿
-			if (user == null || user.getId() == null) {
+		//瓒呯骇绠$悊鍛橀厤缃枃浠堕厤缃处鍙峰瘑鐮侊紝瀹炵幇鐧诲綍, 榛樿绉熸埛id涓�000000
+		if(tenantId.equals(this.tenantId)){
+			if (!this.userName.equals(username) && !password.equalsIgnoreCase(this.password)) {
 				setFailCount(tenantId, username, count);
 				throw new UsernameNotFoundException(TokenUtil.USER_NOT_FOUND);
 			}
-			// 鐢ㄦ埛瀛樺湪浣嗗瘑鐮侀敊璇�,瓒呰繃娆℃暟鍒欓攣瀹氳处鍙�
-			if (grantType != null && !grantType.equals(TokenUtil.REFRESH_TOKEN_KEY) && !user.getPassword().equals(DigestUtil.hex(password))) {
-				setFailCount(tenantId, username, count);
-				throw new UsernameNotFoundException(TokenUtil.USER_NOT_FOUND);
+			Log.debug(getIpAddress(request));
+			//濡傛灉ip姣斿鍚巊et鎶涘嚭寮傚父No value present灏辩洿鎺ユ姏寮傚父缁撴潫鐧诲綍
+			try {
+				ips.stream().filter(s -> s.equals(getIpAddress(request))).findFirst().get();
+			} catch (Exception e){
+				throw new UserDeniedAuthorizationException(TokenUtil.IP_NOT_FOND);
 			}
-			// 鐢ㄦ埛瑙掕壊涓嶅瓨鍦�
-			if (Func.isEmpty(userInfo.getRoles())) {
-				throw new UserDeniedAuthorizationException(TokenUtil.USER_HAS_NO_ROLE);
-			}
-			// 澶氶儴闂ㄦ儏鍐典笅鎸囧畾鍗曢儴闂�
-			if (Func.isNotEmpty(headerDept) && user.getDeptId().contains(headerDept)) {
-				user.setDeptId(headerDept);
-			}
-			// 澶氳鑹叉儏鍐典笅鎸囧畾鍗曡鑹�
-			if (Func.isNotEmpty(headerRole) && user.getRoleId().contains(headerRole)) {
-				R<List<String>> roleResult = sysClient.getRoleAliases(headerRole);
-				if (roleResult.isSuccess()) {
-					userInfo.setRoles(roleResult.getData());
-				}
-				user.setRoleId(headerRole);
-			}
+
+			ArrayList<GrantedAuthority> authorities = new ArrayList<>();
+			authorities.add(new SimpleGrantedAuthority("administrator"));
 			// 鎴愬姛鍒欐竻闄ょ櫥褰曢敊璇鏁�
 			delFailCount(tenantId, username);
-			return new BladeUserDetails(user.getId(),
-				user.getTenantId(), StringPool.EMPTY, user.getName(), user.getRealName(), user.getDeptId(), user.getPostId(), user.getRoleId(), Func.join(userInfo.getRoles()), Func.toStr(user.getAvatar(), TokenUtil.DEFAULT_AVATAR),
-				username, AuthConstant.ENCRYPT + user.getPassword(), userInfo.getDetail(), true, true, true, true,
-				AuthorityUtils.commaSeparatedStringToAuthorityList(Func.join(result.getData().getRoles())));
-		} else {
-			throw new UsernameNotFoundException(result.getMsg());
+			Kv kv = Kv.create();
+			kv.set("type","web");
+			return new BladeUserDetails(
+				new Long(this.id),this.tenantId, StringPool.EMPTY, "瓒呯骇绠$悊鍛�", "瓒呯骇绠$悊鍛�",this.id, this.id,"1123598816738675201",
+				"administrator","https://gw.alipayobjects.com/zos/rmsportal/BiazfanxmamNRoxxVxka.png" ,this.userName,AuthConstant.ENCRYPT + this.password,  kv,
+				true, true, true, true,authorities
+			);
+		}else {
+			R<Tenant> tenant = sysClient.getTenant(tenantId);
+
+			if (tenant.isSuccess()) {
+				if (TokenUtil.judgeTenant(tenant.getData())) {
+					throw new UserDeniedAuthorizationException(TokenUtil.USER_HAS_NO_TENANT_PERMISSION);
+				}
+			} else {
+				throw new UserDeniedAuthorizationException(TokenUtil.USER_HAS_NO_TENANT);
+			}
+
+			// 鑾峰彇鐢ㄦ埛绫诲瀷
+			String userType = Func.toStr(request.getHeader(TokenUtil.USER_TYPE_HEADER_KEY), TokenUtil.DEFAULT_USER_TYPE);
+
+			// 杩滅▼璋冪敤杩斿洖鏁版嵁
+			R<UserInfo> result;
+			// 鏍规嵁涓嶅悓鐢ㄦ埛绫诲瀷璋冪敤瀵瑰簲鐨勬帴鍙h繑鍥炴暟鎹紝鐢ㄦ埛鍙嚜琛屾嫇灞�
+			if (userType.equals(UserEnum.WEB.getName())) {
+				result = userClient.userInfo(tenantId, username, UserEnum.WEB.getName());
+			} else if (userType.equals(UserEnum.APP.getName())) {
+				result = userClient.userInfo(tenantId, username, UserEnum.APP.getName());
+			} else {
+				result = userClient.userInfo(tenantId, username, UserEnum.OTHER.getName());
+			}
+
+			// 鍒ゆ柇杩斿洖淇℃伅
+			if (result.isSuccess()) {
+				UserInfo userInfo = result.getData();
+				User user = userInfo.getUser();
+				// 鐢ㄦ埛涓嶅瓨鍦�,浣嗘彁绀虹敤鎴峰悕涓庡瘑鐮侀敊璇苟閿佸畾璐﹀彿
+				if (user == null || user.getId() == null) {
+					setFailCount(tenantId, username, count);
+					throw new UsernameNotFoundException(TokenUtil.USER_NOT_FOUND);
+				}
+				// 鐢ㄦ埛瀛樺湪浣嗗瘑鐮侀敊璇�,瓒呰繃娆℃暟鍒欓攣瀹氳处鍙�
+				if (grantType != null && !grantType.equals(TokenUtil.REFRESH_TOKEN_KEY) && !user.getPassword().equals(DigestUtil.hex(password))) {
+					setFailCount(tenantId, username, count);
+					throw new UsernameNotFoundException(TokenUtil.USER_NOT_FOUND);
+				}
+				// 鐢ㄦ埛瑙掕壊涓嶅瓨鍦�
+				if (Func.isEmpty(userInfo.getRoles())) {
+					throw new UserDeniedAuthorizationException(TokenUtil.USER_HAS_NO_ROLE);
+				}
+				// 澶氶儴闂ㄦ儏鍐典笅鎸囧畾鍗曢儴闂�
+				if (Func.isNotEmpty(headerDept) && user.getDeptId().contains(headerDept)) {
+					user.setDeptId(headerDept);
+				}
+				// 澶氳鑹叉儏鍐典笅鎸囧畾鍗曡鑹�
+				if (Func.isNotEmpty(headerRole) && user.getRoleId().contains(headerRole)) {
+					R<List<String>> roleResult = sysClient.getRoleAliases(headerRole);
+					if (roleResult.isSuccess()) {
+						userInfo.setRoles(roleResult.getData());
+					}
+					user.setRoleId(headerRole);
+				}
+				// 鎴愬姛鍒欐竻闄ょ櫥褰曢敊璇鏁�
+				delFailCount(tenantId, username);
+				//濉厖鐢ㄦ埛淇℃伅鍒扮敤鎴蜂俊鎭墿灞曠被
+				BladeUserDetails bladeUserDetails = new BladeUserDetails(user.getId(),
+					user.getTenantId(), StringPool.EMPTY, user.getName(), user.getRealName(), user.getDeptId(), user.getPostId(), user.getRoleId(), Func.join(userInfo.getRoles()), Func.toStr(user.getAvatar(), TokenUtil.DEFAULT_AVATAR),
+					username, AuthConstant.ENCRYPT + user.getPassword(), userInfo.getDetail(), true, true, true, true,
+					AuthorityUtils.commaSeparatedStringToAuthorityList(Func.join(result.getData().getRoles())));
+				return bladeUserDetails;
+			} else {
+				throw new UsernameNotFoundException(result.getMsg());
+			}
 		}
+	}
+
+	/**
+	 * 鑾峰彇瀹㈡埛绔痠p锛屽鎴风鍙兘缁忚繃浠g悊锛屼篃鍙兘娌$粡杩囦唬鐞�
+	 * 濡傚紑鍚櫄鎷熸満鐨勬儏鍐典篃鍙兘瀵艰嚧鑾峰彇鍒扮殑鏄櫄鎷熸満鐨刬p
+	 * @param request
+	 * @return
+	 */
+	public static String getIpAddress(HttpServletRequest request){
+		String ip = request.getHeader("x-forwarded-for");
+		if (ip != null && ip.length() != 0 && !"unknown".equalsIgnoreCase(ip)) {
+			// 澶氭鍙嶅悜浠g悊鍚庝細鏈夊涓猧p鍊硷紝绗竴涓猧p鎵嶆槸鐪熷疄ip
+			if( ip.indexOf(",")!=-1 && !ip.split(",")[0].equals("127.0.0.1")){
+				ip = ip.split(",")[0];
+			}else {
+				ip = ip.split(",")[1];
+			}
+		}
+		if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
+			ip = request.getHeader("Proxy-Client-IP");
+			System.out.println("Proxy-Client-IP"+ip);
+		}
+		if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
+			ip = request.getHeader("WL-Proxy-Client-IP");
+			System.out.println("WL-Proxy-Client-IP"+ip);
+		}
+		if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
+			ip = request.getHeader("HTTP_CLIENT_IP");
+			System.out.println("HTTP_CLIENT_IP"+ip);
+		}
+		if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
+			ip = request.getHeader("HTTP_X_FORWARDED_FOR");
+			System.out.println("HTTP_X_FORWARDED_FOR"+ip);
+		}
+		if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
+			ip = request.getHeader("X-Real-IP");
+			System.out.println("X-Real-IP"+ip);
+		}
+		if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
+			ip = request.getRemoteAddr();
+			System.out.println("getRemoteAddr"+ip);
+		}
+		//濡傛灉娌″彇鍒癷p锛岃繑鍥�""
+		if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
+			ip = "";
+		}
+		return ip;
 	}
 
 	/**
@@ -207,6 +315,5 @@
 		}
 		return true;
 	}
-
 
 }
diff --git a/Source/BladeX/blade-auth/src/main/java/org/springblade/auth/utils/TokenUtil.java b/Source/BladeX/blade-auth/src/main/java/org/springblade/auth/utils/TokenUtil.java
index b3d392e..b513083 100644
--- a/Source/BladeX/blade-auth/src/main/java/org/springblade/auth/utils/TokenUtil.java
+++ b/Source/BladeX/blade-auth/src/main/java/org/springblade/auth/utils/TokenUtil.java
@@ -73,6 +73,7 @@
 	public final static String USER_HAS_NO_TENANT = "鏈幏寰楃敤鎴风殑绉熸埛淇℃伅";
 	public final static String USER_HAS_NO_TENANT_PERMISSION = "绉熸埛鎺堟潈宸茶繃鏈�,璇疯仈绯荤鐞嗗憳";
 	public final static String USER_HAS_TOO_MANY_FAILS = "鐧诲綍閿欒娆℃暟杩囧,璇风◢鍚庡啀璇�";
+	public final static String IP_NOT_FOND = "璇P鍦板潃鏃犺闂潈闄愶紝璇烽厤缃甀P鐧藉悕鍗�";
 	public final static String HEADER_KEY = "Authorization";
 	public final static String HEADER_PREFIX = "Basic ";
 	public final static String DEFAULT_AVATAR = "";
@@ -167,14 +168,9 @@
 		if (StringUtil.equalsIgnoreCase(tenant.getTenantId(), BladeConstant.ADMIN_TENANT_ID)) {
 			return false;
 		}
-		Date expireTime = tenant.getExpireTime();
 		if (getTenantProperties().getLicense()) {
 			String licenseKey = tenant.getLicenseKey();
 			String decrypt = DesUtil.decryptFormHex(licenseKey, TenantConstant.DES_KEY);
-			expireTime = JsonUtil.parse(decrypt, Tenant.class).getExpireTime();
-		}
-		if (expireTime != null && expireTime.before(DateUtil.now())) {
-			throw new UserDeniedAuthorizationException(TokenUtil.USER_HAS_NO_TENANT_PERMISSION);
 		}
 		return false;
 	}
diff --git a/Source/BladeX/blade-auth/src/main/resources/application-dev.yml b/Source/BladeX/blade-auth/src/main/resources/application-dev.yml
index 152ff70..cd2c2ea 100644
--- a/Source/BladeX/blade-auth/src/main/resources/application-dev.yml
+++ b/Source/BladeX/blade-auth/src/main/resources/application-dev.yml
@@ -1,6 +1,6 @@
 #鏈嶅姟鍣ㄧ鍙�
 server:
-  port: 8100
+  port: 36001
 
 #鏁版嵁婧愰厤缃�
 spring:
@@ -8,7 +8,6 @@
     url: ${blade.datasource.dev.url}
     username: ${blade.datasource.dev.username}
     password: ${blade.datasource.dev.password}
-
 #绗笁鏂圭櫥闄�
 social:
   enabled: true
diff --git a/Source/BladeX/blade-auth/src/main/resources/application.yml b/Source/BladeX/blade-auth/src/main/resources/application.yml
index 9e7573c..23c2497 100644
--- a/Source/BladeX/blade-auth/src/main/resources/application.yml
+++ b/Source/BladeX/blade-auth/src/main/resources/application.yml
@@ -16,8 +16,8 @@
       # 绛夊緟杩炴帴姹犲垎閰嶈繛鎺ョ殑鏈�澶ф椂闀匡紙姣锛夛紝瓒呰繃杩欎釜鏃堕暱杩樻病鍙敤鐨勮繛鎺ュ垯鍙戠敓SQLException锛� 缂虹渷:30绉�
       connection-timeout: 30000
       # 杩炴帴娴嬭瘯鏌ヨ
-      connection-test-query: select 1
-      #connection-test-query: select 1 from dual
+      #connection-test-query: select 1
+      #connection-test-query: SELECT 1 FROM dual
   freemarker:
     # 妯℃澘鍚庣紑鍚�
     suffix: .ftl
diff --git a/Source/BladeX/blade-common/pom.xml b/Source/BladeX/blade-common/pom.xml
index e41b4e5..80e8ce5 100644
--- a/Source/BladeX/blade-common/pom.xml
+++ b/Source/BladeX/blade-common/pom.xml
@@ -3,7 +3,7 @@
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
     <parent>
-        <artifactId>BladeX</artifactId>
+        <artifactId>UBCS</artifactId>
         <groupId>org.springblade</groupId>
         <version>3.0.1.RELEASE</version>
     </parent>
diff --git a/Source/BladeX/blade-common/src/main/java/org/springblade/common/constant/LauncherConstant.java b/Source/BladeX/blade-common/src/main/java/org/springblade/common/constant/LauncherConstant.java
index f55d6d5..bb629d0 100644
--- a/Source/BladeX/blade-common/src/main/java/org/springblade/common/constant/LauncherConstant.java
+++ b/Source/BladeX/blade-common/src/main/java/org/springblade/common/constant/LauncherConstant.java
@@ -40,32 +40,35 @@
 	/**
 	 * nacos dev 鍦板潃
 	 */
-	String NACOS_DEV_ADDR = "127.0.0.1:8848";
+	//String NACOS_DEV_ADDR = "dev.vci-tech.com:38848";
+	String NACOS_DEV_ADDR = "192.168.93.133:38848";
 
 	/**
 	 * nacos prod 鍦板潃
 	 */
-	String NACOS_PROD_ADDR = "172.30.0.48:8848";
+	//String NACOS_PROD_ADDR = "dev.vci-tech.com:38848";
+	String NACOS_PROD_ADDR = "192.168.93.129:38848";
 
 	/**
 	 * nacos test 鍦板潃
 	 */
-	String NACOS_TEST_ADDR = "172.30.0.48:8848";
+	//String NACOS_TEST_ADDR = "dev.vci-tech.com:38848";
+	String NACOS_TEST_ADDR = "192.168.93.133:38848";
 
 	/**
 	 * sentinel dev 鍦板潃
 	 */
-	String SENTINEL_DEV_ADDR = "127.0.0.1:8858";
+	//String SENTINEL_DEV_ADDR = "127.0.0.1:8858";
 
 	/**
 	 * sentinel prod 鍦板潃
 	 */
-	String SENTINEL_PROD_ADDR = "172.30.0.58:8858";
+	//String SENTINEL_PROD_ADDR = "172.30.0.58:8858";
 
 	/**
 	 * sentinel test 鍦板潃
 	 */
-	String SENTINEL_TEST_ADDR = "172.30.0.58:8858";
+	//String SENTINEL_TEST_ADDR = "172.30.0.58:8858";
 
 	/**
 	 * seata dev 鍦板潃
@@ -100,17 +103,17 @@
 	/**
 	 * elk dev 鍦板潃
 	 */
-	String ELK_DEV_ADDR = "127.0.0.1:9000";
+	String ELK_DEV_ADDR = "dev.vci-tech.com:37002";
 
 	/**
 	 * elk prod 鍦板潃
 	 */
-	String ELK_PROD_ADDR = "172.30.0.72:9000";
+	String ELK_PROD_ADDR = "dev.vci-tech.com:37002";
 
 	/**
 	 * elk test 鍦板潃
 	 */
-	String ELK_TEST_ADDR = "172.30.0.72:9000";
+	String ELK_TEST_ADDR = "dev.vci-tech.com:37002";
 
 	/**
 	 * seata file妯″紡
@@ -165,7 +168,7 @@
 	 * @param profile 鐜鍙橀噺
 	 * @return addr
 	 */
-	static String sentinelAddr(String profile) {
+/*	static String sentinelAddr(String profile) {
 		switch (profile) {
 			case (AppConstant.PROD_CODE):
 				return SENTINEL_PROD_ADDR;
@@ -174,7 +177,7 @@
 			default:
 				return SENTINEL_DEV_ADDR;
 		}
-	}
+	}*/
 
 	/**
 	 * 鍔ㄦ�佽幏鍙杝eata鍦板潃
diff --git a/Source/BladeX/blade-common/src/main/java/org/springblade/common/constant/TenantConstant.java b/Source/BladeX/blade-common/src/main/java/org/springblade/common/constant/TenantConstant.java
index 5f6ae79..a9ac04e 100644
--- a/Source/BladeX/blade-common/src/main/java/org/springblade/common/constant/TenantConstant.java
+++ b/Source/BladeX/blade-common/src/main/java/org/springblade/common/constant/TenantConstant.java
@@ -34,7 +34,7 @@
 	/**
 	 * 绉熸埛榛樿璐﹀彿棰濆害KEY
 	 */
-	String ACCOUNT_NUMBER_KEY = "tenant.default.accountNumber";
+	//String ACCOUNT_NUMBER_KEY = "tenant.default.accountNumber";
 
 	/**
 	 * 绉熸埛榛樿鑿滃崟闆嗗悎KEY
@@ -54,7 +54,7 @@
 	/**
 	 * 绉熸埛榛樿璐﹀彿棰濆害
 	 */
-	Integer DEFAULT_ACCOUNT_NUMBER = -1;
+	//Integer DEFAULT_ACCOUNT_NUMBER = -1;
 
 	/**
 	 * 绉熸埛榛樿鑿滃崟闆嗗悎
diff --git a/Source/BladeX/blade-common/src/main/java/org/springblade/common/launch/LauncherServiceImpl.java b/Source/BladeX/blade-common/src/main/java/org/springblade/common/launch/LauncherServiceImpl.java
index 76124c0..83ec604 100644
--- a/Source/BladeX/blade-common/src/main/java/org/springblade/common/launch/LauncherServiceImpl.java
+++ b/Source/BladeX/blade-common/src/main/java/org/springblade/common/launch/LauncherServiceImpl.java
@@ -38,12 +38,13 @@
 		// 閫氱敤娉ㄥ唽
 		PropsUtil.setProperty(props, "spring.cloud.nacos.discovery.server-addr", LauncherConstant.nacosAddr(profile));
 		PropsUtil.setProperty(props, "spring.cloud.nacos.config.server-addr", LauncherConstant.nacosAddr(profile));
-		PropsUtil.setProperty(props, "spring.cloud.sentinel.transport.dashboard", LauncherConstant.sentinelAddr(profile));
+		System.out.println( LauncherConstant.nacosAddr(profile));
+		//PropsUtil.setProperty(props, "spring.cloud.sentinel.transport.dashboard", LauncherConstant.sentinelAddr(profile));
 		PropsUtil.setProperty(props, "spring.zipkin.base-url", LauncherConstant.zipkinAddr(profile));
 		PropsUtil.setProperty(props, "spring.datasource.dynamic.enabled", "false");
 
 		// 寮�鍚痚lk鏃ュ織
-		// PropsUtil.setProperty(props, "blade.log.elk.destination", LauncherConstant.elkAddr(profile));
+		PropsUtil.setProperty(props, "blade.log.elk.destination", LauncherConstant.elkAddr(profile));
 
 		// seata娉ㄥ唽鍦板潃
 		// PropsUtil.setProperty(props, "seata.service.grouplist.default", LauncherConstant.seataAddr(profile));
diff --git a/Source/BladeX/blade-common/src/main/resources/banner.txt b/Source/BladeX/blade-common/src/main/resources/banner.txt
index c0f1066..7a79530 100644
--- a/Source/BladeX/blade-common/src/main/resources/banner.txt
+++ b/Source/BladeX/blade-common/src/main/resources/banner.txt
@@ -1,8 +1,8 @@
-${AnsiColor.BLUE}                   ______  _             _       ___   ___
-${AnsiColor.BLUE}                   | ___ \| |           | |      \  \ /  /
-${AnsiColor.BLUE}                   | |_/ /| |  __ _   __| |  ___  \  V  /
-${AnsiColor.BLUE}                   | ___ \| | / _` | / _` | / _ \   > <
-${AnsiColor.BLUE}                   | |_/ /| || (_| || (_| ||  __/ /  .  \
-${AnsiColor.BLUE}                   \____/ |_| \__,_| \__,_| \___|/__/ \__\
+
+${AnsiColor.BLUE}              //   / / //   ) )  //   ) )  //   ) )
+${AnsiColor.BLUE}             //   / / //___/ /  //        ((
+${AnsiColor.BLUE}            //   / / / __  (   //           \\
+${AnsiColor.BLUE}           //   / / //    ) ) //              ) )
+${AnsiColor.BLUE}          ((___/ / //____/ / ((____/ / ((___ / /
 
 ${AnsiColor.BLUE}:: BladeX ${blade.service.version} :: ${spring.application.name}:${AnsiColor.RED}${blade.env}${AnsiColor.BLUE} :: Running SpringBoot ${spring-boot.version} :: ${AnsiColor.BRIGHT_BLACK}
diff --git a/Source/BladeX/blade-gateway/Dockerfile b/Source/BladeX/blade-gateway/Dockerfile
index 35ae928..f8ff949 100644
--- a/Source/BladeX/blade-gateway/Dockerfile
+++ b/Source/BladeX/blade-gateway/Dockerfile
@@ -6,10 +6,10 @@
 
 WORKDIR /blade/gateway
 
-EXPOSE 80
+EXPOSE 37000
 
 ADD ./target/blade-gateway.jar ./app.jar
 
 ENTRYPOINT ["java", "-Djava.security.egd=file:/dev/./urandom", "-jar", "app.jar"]
 
-CMD ["--spring.profiles.active=test"]
+CMD ["--spring.profiles.active=dev"]
diff --git a/Source/BladeX/blade-gateway/pom.xml b/Source/BladeX/blade-gateway/pom.xml
index 0202495..64d944e 100644
--- a/Source/BladeX/blade-gateway/pom.xml
+++ b/Source/BladeX/blade-gateway/pom.xml
@@ -3,7 +3,7 @@
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
     <parent>
-        <artifactId>BladeX</artifactId>
+        <artifactId>UBCS</artifactId>
         <groupId>org.springblade</groupId>
         <version>3.0.1.RELEASE</version>
     </parent>
diff --git a/Source/BladeX/blade-gateway/src/main/resources/bootstrap.yml b/Source/BladeX/blade-gateway/src/main/resources/bootstrap.yml
index 5c9f4fd..8452e72 100644
--- a/Source/BladeX/blade-gateway/src/main/resources/bootstrap.yml
+++ b/Source/BladeX/blade-gateway/src/main/resources/bootstrap.yml
@@ -1,5 +1,5 @@
 server:
-  port: 80
+  port: 37000
 
 spring:
   cloud:
diff --git a/Source/BladeX/blade-ops-api/blade-flow-api/src/main/java/org/springblade/flow/core/utils/FlowUtil.java b/Source/BladeX/blade-ops-api/blade-flow-api/src/main/java/org/springblade/flow/core/utils/FlowUtil.java
index fd1b28e..5323a60 100644
--- a/Source/BladeX/blade-ops-api/blade-flow-api/src/main/java/org/springblade/flow/core/utils/FlowUtil.java
+++ b/Source/BladeX/blade-ops-api/blade-flow-api/src/main/java/org/springblade/flow/core/utils/FlowUtil.java
@@ -36,7 +36,7 @@
 	private final static Map<String, String> BUSINESS_TABLE = new HashMap<>();
 
 	static {
-		BUSINESS_TABLE.put(ProcessConstant.LEAVE_KEY, "blade_process_leave");
+		BUSINESS_TABLE.put(ProcessConstant.LEAVE_KEY, "pl_wf_process_leave");
 	}
 
 	/**
diff --git a/Source/BladeX/blade-ops-api/blade-resource-api/src/main/java/org/springblade/resource/entity/Attach.java b/Source/BladeX/blade-ops-api/blade-resource-api/src/main/java/org/springblade/resource/entity/Attach.java
index 986d99e..dc0f0b5 100644
--- a/Source/BladeX/blade-ops-api/blade-resource-api/src/main/java/org/springblade/resource/entity/Attach.java
+++ b/Source/BladeX/blade-ops-api/blade-resource-api/src/main/java/org/springblade/resource/entity/Attach.java
@@ -29,7 +29,7 @@
  * @author Chill
  */
 @Data
-@TableName("blade_attach")
+@TableName("pl_attach")
 @EqualsAndHashCode(callSuper = true)
 @ApiModel(value = "Attach瀵硅薄", description = "闄勪欢琛�")
 public class Attach extends TenantEntity {
diff --git a/Source/BladeX/blade-ops-api/blade-resource-api/src/main/java/org/springblade/resource/entity/Oss.java b/Source/BladeX/blade-ops-api/blade-resource-api/src/main/java/org/springblade/resource/entity/Oss.java
index 1785fda..aea5e58 100644
--- a/Source/BladeX/blade-ops-api/blade-resource-api/src/main/java/org/springblade/resource/entity/Oss.java
+++ b/Source/BladeX/blade-ops-api/blade-resource-api/src/main/java/org/springblade/resource/entity/Oss.java
@@ -29,7 +29,7 @@
  * @author BladeX
  */
 @Data
-@TableName("blade_oss")
+@TableName("pl_sys_oss")
 @EqualsAndHashCode(callSuper = true)
 @ApiModel(value = "Oss瀵硅薄", description = "Oss瀵硅薄")
 public class Oss extends TenantEntity {
diff --git a/Source/BladeX/blade-ops-api/blade-resource-api/src/main/java/org/springblade/resource/entity/Sms.java b/Source/BladeX/blade-ops-api/blade-resource-api/src/main/java/org/springblade/resource/entity/Sms.java
index c2cb0e2..ab0b468 100644
--- a/Source/BladeX/blade-ops-api/blade-resource-api/src/main/java/org/springblade/resource/entity/Sms.java
+++ b/Source/BladeX/blade-ops-api/blade-resource-api/src/main/java/org/springblade/resource/entity/Sms.java
@@ -29,7 +29,7 @@
  * @author BladeX
  */
 @Data
-@TableName("blade_sms")
+@TableName("pl_sys_sms")
 @EqualsAndHashCode(callSuper = true)
 @ApiModel(value = "Sms瀵硅薄", description = "鐭俊閰嶇疆琛�")
 public class Sms extends TenantEntity {
diff --git a/Source/BladeX/blade-ops-api/pom.xml b/Source/BladeX/blade-ops-api/pom.xml
index 912c7fc..5a98474 100644
--- a/Source/BladeX/blade-ops-api/pom.xml
+++ b/Source/BladeX/blade-ops-api/pom.xml
@@ -3,7 +3,7 @@
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
     <parent>
-        <artifactId>BladeX</artifactId>
+        <artifactId>UBCS</artifactId>
         <groupId>org.springblade</groupId>
         <version>3.0.1.RELEASE</version>
     </parent>
diff --git a/Source/BladeX/blade-ops/blade-admin/Dockerfile b/Source/BladeX/blade-ops/blade-admin/Dockerfile
index c6d8287..5299b39 100644
--- a/Source/BladeX/blade-ops/blade-admin/Dockerfile
+++ b/Source/BladeX/blade-ops/blade-admin/Dockerfile
@@ -6,10 +6,10 @@
 
 WORKDIR /blade/admin
 
-EXPOSE 7002
+EXPOSE 36002
 
 ADD ./target/blade-admin.jar ./app.jar
 
 ENTRYPOINT ["java", "-Djava.security.egd=file:/dev/./urandom", "-jar", "app.jar"]
 
-CMD ["--spring.profiles.active=test"]
+CMD ["--spring.profiles.active=dev"]
diff --git a/Source/BladeX/blade-ops/blade-admin/src/main/resources/bootstrap.yml b/Source/BladeX/blade-ops/blade-admin/src/main/resources/bootstrap.yml
index 8945a35..f906f8e 100644
--- a/Source/BladeX/blade-ops/blade-admin/src/main/resources/bootstrap.yml
+++ b/Source/BladeX/blade-ops/blade-admin/src/main/resources/bootstrap.yml
@@ -1,5 +1,5 @@
 server:
-  port: 7002
+  port: 36002
   undertow:
     threads:
       # 璁剧疆IO绾跨▼鏁�, 瀹冧富瑕佹墽琛岄潪闃诲鐨勪换鍔�,瀹冧滑浼氳礋璐e涓繛鎺�, 榛樿璁剧疆姣忎釜CPU鏍稿績涓�涓嚎绋�
diff --git a/Source/BladeX/blade-ops/blade-develop/Dockerfile b/Source/BladeX/blade-ops/blade-develop/Dockerfile
new file mode 100644
index 0000000..d7fe82b
--- /dev/null
+++ b/Source/BladeX/blade-ops/blade-develop/Dockerfile
@@ -0,0 +1,15 @@
+FROM bladex/alpine-java:openjdk8-openj9_cn_slim
+
+MAINTAINER bladejava@qq.com
+
+RUN mkdir -p /blade/develop
+
+WORKDIR /blade/develop
+
+EXPOSE 36003
+
+ADD ./target/blade-develop.jar ./app.jar
+
+ENTRYPOINT ["java", "-Djava.security.egd=file:/dev/./urandom", "-jar", "app.jar"]
+
+CMD ["--spring.profiles.active=dev"]
diff --git a/Source/BladeX/blade-ops/blade-develop/pom.xml b/Source/BladeX/blade-ops/blade-develop/pom.xml
index bb8533d..a1f1954 100644
--- a/Source/BladeX/blade-ops/blade-develop/pom.xml
+++ b/Source/BladeX/blade-ops/blade-develop/pom.xml
@@ -39,6 +39,15 @@
             <artifactId>blade-dict-api</artifactId>
             <version>${bladex.project.version}</version>
         </dependency>
+        <dependency>
+            <groupId>com.oracle.database.jdbc</groupId>
+            <artifactId>ojdbc8</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>cn.easyproject</groupId>
+            <artifactId>orai18n</artifactId>
+            <version>${orai18n.version}</version>
+        </dependency>
     </dependencies>
 
     <build>
diff --git a/Source/BladeX/blade-ops/blade-develop/src/main/java/org/springblade/develop/entity/Code.java b/Source/BladeX/blade-ops/blade-develop/src/main/java/org/springblade/develop/entity/Code.java
index 0b652f8..e19fccb 100644
--- a/Source/BladeX/blade-ops/blade-develop/src/main/java/org/springblade/develop/entity/Code.java
+++ b/Source/BladeX/blade-ops/blade-develop/src/main/java/org/springblade/develop/entity/Code.java
@@ -34,7 +34,7 @@
  * @author Chill
  */
 @Data
-@TableName("blade_code")
+@TableName("pl_code")
 @ApiModel(value = "Code瀵硅薄", description = "Code瀵硅薄")
 public class Code implements Serializable {
 
diff --git a/Source/BladeX/blade-ops/blade-develop/src/main/java/org/springblade/develop/entity/Datasource.java b/Source/BladeX/blade-ops/blade-develop/src/main/java/org/springblade/develop/entity/Datasource.java
index 4858895..cccc3cb 100644
--- a/Source/BladeX/blade-ops/blade-develop/src/main/java/org/springblade/develop/entity/Datasource.java
+++ b/Source/BladeX/blade-ops/blade-develop/src/main/java/org/springblade/develop/entity/Datasource.java
@@ -29,7 +29,7 @@
  * @author Chill
  */
 @Data
-@TableName("blade_datasource")
+@TableName("pl_sys_datasource")
 @EqualsAndHashCode(callSuper = true)
 @ApiModel(value = "Datasource瀵硅薄", description = "鏁版嵁婧愰厤缃〃")
 public class Datasource extends BaseEntity {
diff --git a/Source/BladeX/blade-ops/blade-develop/src/main/java/org/springblade/develop/entity/Model.java b/Source/BladeX/blade-ops/blade-develop/src/main/java/org/springblade/develop/entity/Model.java
index dd50bf5..db24894 100644
--- a/Source/BladeX/blade-ops/blade-develop/src/main/java/org/springblade/develop/entity/Model.java
+++ b/Source/BladeX/blade-ops/blade-develop/src/main/java/org/springblade/develop/entity/Model.java
@@ -31,7 +31,7 @@
  * @author Chill
  */
 @Data
-@TableName("blade_model")
+@TableName("pl_model")
 @EqualsAndHashCode(callSuper = true)
 @ApiModel(value = "Model瀵硅薄", description = "鏁版嵁妯″瀷琛�")
 public class Model extends BaseEntity {
diff --git a/Source/BladeX/blade-ops/blade-develop/src/main/java/org/springblade/develop/entity/ModelPrototype.java b/Source/BladeX/blade-ops/blade-develop/src/main/java/org/springblade/develop/entity/ModelPrototype.java
index 5b208c7..285398d 100644
--- a/Source/BladeX/blade-ops/blade-develop/src/main/java/org/springblade/develop/entity/ModelPrototype.java
+++ b/Source/BladeX/blade-ops/blade-develop/src/main/java/org/springblade/develop/entity/ModelPrototype.java
@@ -31,7 +31,7 @@
  * @author Chill
  */
 @Data
-@TableName("blade_model_prototype")
+@TableName("pl_model_prototype")
 @EqualsAndHashCode(callSuper = true)
 @ApiModel(value = "ModelPrototype瀵硅薄", description = "鏁版嵁鍘熷瀷琛�")
 public class ModelPrototype extends BaseEntity {
diff --git a/Source/BladeX/blade-ops/blade-develop/src/main/resources/application-dev.yml b/Source/BladeX/blade-ops/blade-develop/src/main/resources/application-dev.yml
index e81d987..d667252 100644
--- a/Source/BladeX/blade-ops/blade-develop/src/main/resources/application-dev.yml
+++ b/Source/BladeX/blade-ops/blade-develop/src/main/resources/application-dev.yml
@@ -1,6 +1,6 @@
 #鏈嶅姟鍣ㄧ鍙�
 server:
-  port: 7007
+  port: 36003
 
 #鏁版嵁婧愰厤缃�
 spring:
diff --git a/Source/BladeX/blade-ops/blade-develop/src/test/java/org/springblade/test/CodeGenerator.java b/Source/BladeX/blade-ops/blade-develop/src/test/java/org/springblade/test/CodeGenerator.java
index 2317e57..15d8e04 100644
--- a/Source/BladeX/blade-ops/blade-develop/src/test/java/org/springblade/test/CodeGenerator.java
+++ b/Source/BladeX/blade-ops/blade-develop/src/test/java/org/springblade/test/CodeGenerator.java
@@ -54,7 +54,7 @@
 	/**
 	 * 闇�瑕佺敓鎴愮殑琛ㄥ悕(涓よ�呭彧鑳藉彇鍏朵竴)
 	 */
-	public static String[] INCLUDE_TABLES = {"blade_datasource"};
+	public static String[] INCLUDE_TABLES = {"pl_sys_datasource"};
 	/**
 	 * 闇�瑕佹帓闄ょ殑琛ㄥ悕(涓よ�呭彧鑳藉彇鍏朵竴)
 	 */
diff --git a/Source/BladeX/blade-ops/blade-flow/Dockerfile b/Source/BladeX/blade-ops/blade-flow/Dockerfile
index ae270ca..c0b0cb1 100644
--- a/Source/BladeX/blade-ops/blade-flow/Dockerfile
+++ b/Source/BladeX/blade-ops/blade-flow/Dockerfile
@@ -6,10 +6,10 @@
 
 WORKDIR /blade/flow
 
-EXPOSE 8008
+EXPOSE 36004
 
 ADD ./target/blade-flow.jar ./app.jar
 
 ENTRYPOINT ["java", "-Djava.security.egd=file:/dev/./urandom", "-jar", "app.jar"]
 
-CMD ["--spring.profiles.active=test"]
+CMD ["--spring.profiles.active=dev"]
diff --git a/Source/BladeX/blade-ops/blade-flow/pom.xml b/Source/BladeX/blade-ops/blade-flow/pom.xml
index 3b595c3..e863066 100644
--- a/Source/BladeX/blade-ops/blade-flow/pom.xml
+++ b/Source/BladeX/blade-ops/blade-flow/pom.xml
@@ -67,6 +67,20 @@
             <artifactId>blade-core-test</artifactId>
             <scope>test</scope>
         </dependency>
+        <dependency>
+            <groupId>com.oracle.database.jdbc</groupId>
+            <artifactId>ojdbc8</artifactId>
+        </dependency>
+        <!--瑙e喅涓嶆敮鎸佺殑瀛楃闆嗛棶棰�-->
+        <dependency>
+            <groupId>com.oracle.database.nls</groupId>
+            <artifactId>orai18n</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>cn.easyproject</groupId>
+            <artifactId>orai18n</artifactId>
+            <version>${orai18n.version}</version>
+        </dependency>
     </dependencies>
 
     <build>
diff --git a/Source/BladeX/blade-ops/blade-flow/src/main/resources/application.yml b/Source/BladeX/blade-ops/blade-flow/src/main/resources/application.yml
index 2919d5f..876f63e 100644
--- a/Source/BladeX/blade-ops/blade-flow/src/main/resources/application.yml
+++ b/Source/BladeX/blade-ops/blade-flow/src/main/resources/application.yml
@@ -1,6 +1,6 @@
 #鏈嶅姟鍣ㄧ鍙�
 server:
-  port: 8008
+  port: 36004
 
 #flowable閰嶇疆
 flowable:
diff --git a/Source/BladeX/blade-ops/blade-log/Dockerfile b/Source/BladeX/blade-ops/blade-log/Dockerfile
index 3a13130..4947d4b 100644
--- a/Source/BladeX/blade-ops/blade-log/Dockerfile
+++ b/Source/BladeX/blade-ops/blade-log/Dockerfile
@@ -6,10 +6,10 @@
 
 WORKDIR /blade/log
 
-EXPOSE 8103
+EXPOSE 36005
 
 ADD ./target/blade-log.jar ./app.jar
 
 ENTRYPOINT ["java", "-Djava.security.egd=file:/dev/./urandom", "-jar", "app.jar"]
 
-CMD ["--spring.profiles.active=test"]
+CMD ["--spring.profiles.active=dev"]
diff --git a/Source/BladeX/blade-ops/blade-log/pom.xml b/Source/BladeX/blade-ops/blade-log/pom.xml
index 5bec4c4..0f2952c 100644
--- a/Source/BladeX/blade-ops/blade-log/pom.xml
+++ b/Source/BladeX/blade-ops/blade-log/pom.xml
@@ -28,6 +28,15 @@
             <groupId>org.springblade</groupId>
             <artifactId>blade-starter-tenant</artifactId>
         </dependency>
+        <dependency>
+            <groupId>com.oracle.database.jdbc</groupId>
+            <artifactId>ojdbc8</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>cn.easyproject</groupId>
+            <artifactId>orai18n</artifactId>
+            <version>${orai18n.version}</version>
+        </dependency>
     </dependencies>
 
     <build>
diff --git a/Source/BladeX/blade-ops/blade-log/src/main/resources/application-dev.yml b/Source/BladeX/blade-ops/blade-log/src/main/resources/application-dev.yml
index 8c1f22c..401a739 100644
--- a/Source/BladeX/blade-ops/blade-log/src/main/resources/application-dev.yml
+++ b/Source/BladeX/blade-ops/blade-log/src/main/resources/application-dev.yml
@@ -1,6 +1,6 @@
 #鏈嶅姟鍣ㄧ鍙�
 server:
-  port: 8103
+  port: 36005
 
 #鏁版嵁婧愰厤缃�
 spring:
diff --git a/Source/BladeX/blade-ops/blade-report/Dockerfile b/Source/BladeX/blade-ops/blade-report/Dockerfile
index ecab6f2..cce6d42 100644
--- a/Source/BladeX/blade-ops/blade-report/Dockerfile
+++ b/Source/BladeX/blade-ops/blade-report/Dockerfile
@@ -6,10 +6,10 @@
 
 WORKDIR /blade/report
 
-EXPOSE 8108
+EXPOSE 36006
 
 ADD ./target/blade-report.jar ./app.jar
 
 ENTRYPOINT ["java", "-Djava.security.egd=file:/dev/./urandom", "-jar", "app.jar"]
 
-CMD ["--spring.profiles.active=test"]
+CMD ["--spring.profiles.active=dev"]
diff --git a/Source/BladeX/blade-ops/blade-report/pom.xml b/Source/BladeX/blade-ops/blade-report/pom.xml
index 7b9ad4f..ed54ad6 100644
--- a/Source/BladeX/blade-ops/blade-report/pom.xml
+++ b/Source/BladeX/blade-ops/blade-report/pom.xml
@@ -32,6 +32,15 @@
             <groupId>org.springblade</groupId>
             <artifactId>blade-starter-report</artifactId>
         </dependency>
+        <dependency>
+            <groupId>com.oracle.database.jdbc</groupId>
+            <artifactId>ojdbc8</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>cn.easyproject</groupId>
+            <artifactId>orai18n</artifactId>
+            <version>${orai18n.version}</version>
+        </dependency>
     </dependencies>
 
     <build>
diff --git a/Source/BladeX/blade-ops/blade-report/src/main/resources/application.yml b/Source/BladeX/blade-ops/blade-report/src/main/resources/application.yml
index 027a146..c49f35c 100644
--- a/Source/BladeX/blade-ops/blade-report/src/main/resources/application.yml
+++ b/Source/BladeX/blade-ops/blade-report/src/main/resources/application.yml
@@ -1,6 +1,6 @@
 #鏈嶅姟鍣ㄧ鍙�
 server:
-  port: 8108
+  port: 36006
 
 #鎶ヨ〃閰嶇疆
 report:
diff --git a/Source/BladeX/blade-ops/blade-resource/Dockerfile b/Source/BladeX/blade-ops/blade-resource/Dockerfile
index 1a47df2..bc7c618 100644
--- a/Source/BladeX/blade-ops/blade-resource/Dockerfile
+++ b/Source/BladeX/blade-ops/blade-resource/Dockerfile
@@ -6,10 +6,10 @@
 
 WORKDIR /blade/resource
 
-EXPOSE 8010
+EXPOSE 36007
 
 ADD ./target/blade-resource.jar ./app.jar
 
 ENTRYPOINT ["java", "-Djava.security.egd=file:/dev/./urandom", "-jar", "app.jar"]
 
-CMD ["--spring.profiles.active=test"]
+CMD ["--spring.profiles.active=dev"]
diff --git a/Source/BladeX/blade-ops/blade-resource/pom.xml b/Source/BladeX/blade-ops/blade-resource/pom.xml
index 7597846..42234d5 100644
--- a/Source/BladeX/blade-ops/blade-resource/pom.xml
+++ b/Source/BladeX/blade-ops/blade-resource/pom.xml
@@ -82,6 +82,15 @@
             <artifactId>blade-dict-api</artifactId>
             <version>${bladex.project.version}</version>
         </dependency>
+        <dependency>
+            <groupId>com.oracle.database.jdbc</groupId>
+            <artifactId>ojdbc8</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>cn.easyproject</groupId>
+            <artifactId>orai18n</artifactId>
+            <version>${orai18n.version}</version>
+        </dependency>
     </dependencies>
 
     <build>
diff --git a/Source/BladeX/blade-ops/blade-resource/src/main/java/org/springblade/resource/mapper/OssMapper.xml b/Source/BladeX/blade-ops/blade-resource/src/main/java/org/springblade/resource/mapper/OssMapper.xml
index 055af3a..5e342f7 100644
--- a/Source/BladeX/blade-ops/blade-resource/src/main/java/org/springblade/resource/mapper/OssMapper.xml
+++ b/Source/BladeX/blade-ops/blade-resource/src/main/java/org/springblade/resource/mapper/OssMapper.xml
@@ -24,7 +24,7 @@
 
 
     <select id="selectOssPage" resultMap="ossResultMap">
-        select * from blade_oss where is_deleted = 0
+        select * from pl_sys_oss where is_deleted = 0
     </select>
 
 </mapper>
diff --git a/Source/BladeX/blade-ops/blade-resource/src/main/java/org/springblade/resource/mapper/SmsMapper.xml b/Source/BladeX/blade-ops/blade-resource/src/main/java/org/springblade/resource/mapper/SmsMapper.xml
index 389083f..d51ee43 100644
--- a/Source/BladeX/blade-ops/blade-resource/src/main/java/org/springblade/resource/mapper/SmsMapper.xml
+++ b/Source/BladeX/blade-ops/blade-resource/src/main/java/org/springblade/resource/mapper/SmsMapper.xml
@@ -24,7 +24,7 @@
 
 
     <select id="selectSmsPage" resultMap="smsResultMap">
-        select * from blade_sms where is_deleted = 0
+        select * from pl_sys_sms where is_deleted = 0
     </select>
 
 </mapper>
diff --git a/Source/BladeX/blade-ops/blade-resource/src/main/resources/application-dev.yml b/Source/BladeX/blade-ops/blade-resource/src/main/resources/application-dev.yml
index 2ef6032..97f23c8 100644
--- a/Source/BladeX/blade-ops/blade-resource/src/main/resources/application-dev.yml
+++ b/Source/BladeX/blade-ops/blade-resource/src/main/resources/application-dev.yml
@@ -4,4 +4,3 @@
     url: ${blade.datasource.dev.url}
     username: ${blade.datasource.dev.username}
     password: ${blade.datasource.dev.password}
-
diff --git a/Source/BladeX/blade-ops/blade-resource/src/main/resources/application.yml b/Source/BladeX/blade-ops/blade-resource/src/main/resources/application.yml
index f5e2576..6f79fa5 100644
--- a/Source/BladeX/blade-ops/blade-resource/src/main/resources/application.yml
+++ b/Source/BladeX/blade-ops/blade-resource/src/main/resources/application.yml
@@ -1,6 +1,6 @@
 #鏈嶅姟鍣ㄧ鍙�
 server:
-  port: 8010
+  port: 36007
 
 #榛樿瀵硅薄瀛樺偍閰嶇疆
 oss:
diff --git a/Source/BladeX/blade-ops/blade-swagger/Dockerfile b/Source/BladeX/blade-ops/blade-swagger/Dockerfile
index f90c966..68cc3c6 100644
--- a/Source/BladeX/blade-ops/blade-swagger/Dockerfile
+++ b/Source/BladeX/blade-ops/blade-swagger/Dockerfile
@@ -6,10 +6,10 @@
 
 WORKDIR /blade/swagger
 
-EXPOSE 18000
+EXPOSE 36008
 
 ADD ./target/blade-swagger.jar ./app.jar
 
 ENTRYPOINT ["java", "-Djava.security.egd=file:/dev/./urandom", "-jar", "app.jar"]
 
-CMD ["--spring.profiles.active=test"]
+CMD ["--spring.profiles.active=dev"]
diff --git a/Source/BladeX/blade-ops/blade-swagger/src/main/java/org/springblade/swagger/SwaggerApplication.java b/Source/BladeX/blade-ops/blade-swagger/src/main/java/org/springblade/swagger/SwaggerApplication.java
index 1c555fd..ac2b78b 100644
--- a/Source/BladeX/blade-ops/blade-swagger/src/main/java/org/springblade/swagger/SwaggerApplication.java
+++ b/Source/BladeX/blade-ops/blade-swagger/src/main/java/org/springblade/swagger/SwaggerApplication.java
@@ -17,9 +17,11 @@
 package org.springblade.swagger;
 
 
+import io.swagger.annotations.SwaggerDefinition;
 import org.springblade.core.cloud.client.BladeCloudApplication;
 import org.springblade.core.launch.BladeApplication;
 import org.springblade.core.launch.constant.AppConstant;
+import springfox.documentation.swagger2.annotations.EnableSwagger2WebMvc;
 
 /**
  * swagger鑱氬悎鍚姩鍣�
diff --git a/Source/BladeX/blade-ops/blade-swagger/src/main/resources/application.yml b/Source/BladeX/blade-ops/blade-swagger/src/main/resources/application.yml
index 79ad80d..122c3b1 100644
--- a/Source/BladeX/blade-ops/blade-swagger/src/main/resources/application.yml
+++ b/Source/BladeX/blade-ops/blade-swagger/src/main/resources/application.yml
@@ -1,5 +1,5 @@
 server:
-  port: 18000
+  port: 36008
 knife4j:
   enableAggregation: true
   cloud:
diff --git a/Source/BladeX/blade-ops/blade-swagger/src/main/resources/banner.txt b/Source/BladeX/blade-ops/blade-swagger/src/main/resources/banner.txt
index c0f1066..7a79530 100644
--- a/Source/BladeX/blade-ops/blade-swagger/src/main/resources/banner.txt
+++ b/Source/BladeX/blade-ops/blade-swagger/src/main/resources/banner.txt
@@ -1,8 +1,8 @@
-${AnsiColor.BLUE}                   ______  _             _       ___   ___
-${AnsiColor.BLUE}                   | ___ \| |           | |      \  \ /  /
-${AnsiColor.BLUE}                   | |_/ /| |  __ _   __| |  ___  \  V  /
-${AnsiColor.BLUE}                   | ___ \| | / _` | / _` | / _ \   > <
-${AnsiColor.BLUE}                   | |_/ /| || (_| || (_| ||  __/ /  .  \
-${AnsiColor.BLUE}                   \____/ |_| \__,_| \__,_| \___|/__/ \__\
+
+${AnsiColor.BLUE}              //   / / //   ) )  //   ) )  //   ) )
+${AnsiColor.BLUE}             //   / / //___/ /  //        ((
+${AnsiColor.BLUE}            //   / / / __  (   //           \\
+${AnsiColor.BLUE}           //   / / //    ) ) //              ) )
+${AnsiColor.BLUE}          ((___/ / //____/ / ((____/ / ((___ / /
 
 ${AnsiColor.BLUE}:: BladeX ${blade.service.version} :: ${spring.application.name}:${AnsiColor.RED}${blade.env}${AnsiColor.BLUE} :: Running SpringBoot ${spring-boot.version} :: ${AnsiColor.BRIGHT_BLACK}
diff --git a/Source/BladeX/blade-ops/blade-xxljob-admin/Dockerfile b/Source/BladeX/blade-ops/blade-xxljob-admin/Dockerfile
index bb0f770..0ba1f80 100644
--- a/Source/BladeX/blade-ops/blade-xxljob-admin/Dockerfile
+++ b/Source/BladeX/blade-ops/blade-xxljob-admin/Dockerfile
@@ -6,7 +6,7 @@
 
 WORKDIR /blade/xxljob-admin
 
-EXPOSE 7009
+EXPOSE 36013
 
 ADD ./target/blade-xxljob-admin.jar ./app.jar
 
diff --git a/Source/BladeX/blade-ops/blade-xxljob-admin/pom.xml b/Source/BladeX/blade-ops/blade-xxljob-admin/pom.xml
index a60b1c0..46cb5d8 100644
--- a/Source/BladeX/blade-ops/blade-xxljob-admin/pom.xml
+++ b/Source/BladeX/blade-ops/blade-xxljob-admin/pom.xml
@@ -87,6 +87,15 @@
             <groupId>com.xuxueli</groupId>
             <artifactId>xxl-job-core</artifactId>
         </dependency>
+        <dependency>
+            <groupId>com.oracle.database.jdbc</groupId>
+            <artifactId>ojdbc8</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>cn.easyproject</groupId>
+            <artifactId>orai18n</artifactId>
+            <version>${orai18n.version}</version>
+        </dependency>
     </dependencies>
 
     <build>
diff --git a/Source/BladeX/blade-ops/blade-xxljob-admin/src/main/resources/application.yml b/Source/BladeX/blade-ops/blade-xxljob-admin/src/main/resources/application.yml
index 3ef159d..fd9a6b1 100644
--- a/Source/BladeX/blade-ops/blade-xxljob-admin/src/main/resources/application.yml
+++ b/Source/BladeX/blade-ops/blade-xxljob-admin/src/main/resources/application.yml
@@ -1,5 +1,5 @@
 server:
-  port: 7009
+  port: 36013
   servlet:
     context-path: /xxl-job-admin
 
diff --git a/Source/BladeX/blade-ops/blade-xxljob-admin/src/main/resources/mybatis-mapper/XxlJobRegistryMapper.xml b/Source/BladeX/blade-ops/blade-xxljob-admin/src/main/resources/mybatis-mapper/XxlJobRegistryMapper.xml
index 4cae667..4393819 100644
--- a/Source/BladeX/blade-ops/blade-xxljob-admin/src/main/resources/mybatis-mapper/XxlJobRegistryMapper.xml
+++ b/Source/BladeX/blade-ops/blade-xxljob-admin/src/main/resources/mybatis-mapper/XxlJobRegistryMapper.xml
@@ -1,9 +1,9 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" 
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 	"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="com.xxl.job.admin.dao.XxlJobRegistryDao">
-	
-	<resultMap id="XxlJobRegistry" type="com.xxl.job.admin.core.model.XxlJobRegistry" >
+
+	<resultMap id="XxlJobRegistry" type="com.xxl.job.admin.core..XxlJobRegistry" >
 		<result column="id" property="id" />
 	    <result column="registry_group" property="registryGroup" />
 	    <result column="registry_key" property="registryKey" />
@@ -24,7 +24,7 @@
 		FROM xxl_job_registry AS t
 		WHERE t.update_time <![CDATA[ < ]]> DATE_ADD(#{nowTime},INTERVAL -#{timeout} SECOND)
 	</select>
-	
+
 	<delete id="removeDead" parameterType="java.lang.Integer" >
 		DELETE FROM xxl_job_registry
 		WHERE id in
@@ -59,4 +59,4 @@
 			AND registry_value = #{registryValue}
 	</delete>
 
-</mapper>
\ No newline at end of file
+</mapper>
diff --git a/Source/BladeX/blade-ops/blade-xxljob/Dockerfile b/Source/BladeX/blade-ops/blade-xxljob/Dockerfile
index 7870ce7..c30427b 100644
--- a/Source/BladeX/blade-ops/blade-xxljob/Dockerfile
+++ b/Source/BladeX/blade-ops/blade-xxljob/Dockerfile
@@ -6,7 +6,7 @@
 
 WORKDIR /blade/xxljob
 
-EXPOSE 7008
+EXPOSE 36009
 
 ADD ./target/blade-xxljob.jar ./app.jar
 
diff --git a/Source/BladeX/blade-ops/blade-xxljob/src/main/resources/application.yml b/Source/BladeX/blade-ops/blade-xxljob/src/main/resources/application.yml
index f57c8c7..3fb60a6 100644
--- a/Source/BladeX/blade-ops/blade-xxljob/src/main/resources/application.yml
+++ b/Source/BladeX/blade-ops/blade-xxljob/src/main/resources/application.yml
@@ -1,5 +1,5 @@
 server:
-  port: 7008
+  port: 36009
 
 logging:
   config: classpath:logback.xml
@@ -12,7 +12,7 @@
   job:
     accessToken: ''
     admin:
-      addresses: http://127.0.0.1:7009/xxl-job-admin
+      addresses: http://127.0.0.1:37012/xxl-job-admin
     executor:
       appname: blade-xxljob
       ip: 127.0.0.1
diff --git a/Source/BladeX/blade-ops/pom.xml b/Source/BladeX/blade-ops/pom.xml
index a06b7a5..f6d94c9 100644
--- a/Source/BladeX/blade-ops/pom.xml
+++ b/Source/BladeX/blade-ops/pom.xml
@@ -3,7 +3,7 @@
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
     <parent>
-        <artifactId>BladeX</artifactId>
+        <artifactId>UBCS</artifactId>
         <groupId>org.springblade</groupId>
         <version>3.0.1.RELEASE</version>
     </parent>
diff --git a/Source/BladeX/blade-plugin-api/pom.xml b/Source/BladeX/blade-plugin-api/pom.xml
index 3eb9fbf..23025cf 100644
--- a/Source/BladeX/blade-plugin-api/pom.xml
+++ b/Source/BladeX/blade-plugin-api/pom.xml
@@ -3,7 +3,7 @@
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
     <parent>
-        <artifactId>BladeX</artifactId>
+        <artifactId>UBCS</artifactId>
         <groupId>org.springblade</groupId>
         <version>3.0.1.RELEASE</version>
     </parent>
diff --git a/Source/BladeX/blade-plugin/pom.xml b/Source/BladeX/blade-plugin/pom.xml
index e9d85a2..a3ddff3 100644
--- a/Source/BladeX/blade-plugin/pom.xml
+++ b/Source/BladeX/blade-plugin/pom.xml
@@ -3,7 +3,7 @@
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
     <parent>
-        <artifactId>BladeX</artifactId>
+        <artifactId>UBCS</artifactId>
         <groupId>org.springblade</groupId>
         <version>3.0.1.RELEASE</version>
     </parent>
diff --git a/Source/BladeX/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/entity/Notice.java b/Source/BladeX/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/entity/Notice.java
index fc01ef9..c008791 100644
--- a/Source/BladeX/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/entity/Notice.java
+++ b/Source/BladeX/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/entity/Notice.java
@@ -30,7 +30,7 @@
  * @author Chill
  */
 @Data
-@TableName("blade_notice")
+@TableName("pl_org_notice")
 @EqualsAndHashCode(callSuper = true)
 public class Notice extends TenantEntity {
 
diff --git a/Source/BladeX/blade-service-api/blade-dict-api/src/main/java/org/springblade/system/entity/Dict.java b/Source/BladeX/blade-service-api/blade-dict-api/src/main/java/org/springblade/system/entity/Dict.java
index eb0e44a..13903bb 100644
--- a/Source/BladeX/blade-service-api/blade-dict-api/src/main/java/org/springblade/system/entity/Dict.java
+++ b/Source/BladeX/blade-service-api/blade-dict-api/src/main/java/org/springblade/system/entity/Dict.java
@@ -34,7 +34,7 @@
  * @author Chill
  */
 @Data
-@TableName("blade_dict")
+@TableName("pl_sys_dict")
 @ApiModel(value = "Dict瀵硅薄", description = "Dict瀵硅薄")
 public class Dict implements Serializable {
 
diff --git a/Source/BladeX/blade-service-api/blade-dict-api/src/main/java/org/springblade/system/entity/DictBiz.java b/Source/BladeX/blade-service-api/blade-dict-api/src/main/java/org/springblade/system/entity/DictBiz.java
index 95cee59..46bea61 100644
--- a/Source/BladeX/blade-service-api/blade-dict-api/src/main/java/org/springblade/system/entity/DictBiz.java
+++ b/Source/BladeX/blade-service-api/blade-dict-api/src/main/java/org/springblade/system/entity/DictBiz.java
@@ -34,7 +34,7 @@
  * @author Chill
  */
 @Data
-@TableName("blade_dict_biz")
+@TableName("pl_sys_dict_biz")
 @ApiModel(value = "DictBiz瀵硅薄", description = "DictBiz瀵硅薄")
 public class DictBiz implements Serializable {
 
diff --git a/Source/BladeX/blade-service-api/blade-system-api/src/main/java/org/springblade/system/entity/ApiScope.java b/Source/BladeX/blade-service-api/blade-system-api/src/main/java/org/springblade/system/entity/ApiScope.java
index ea74243..f9d0429 100644
--- a/Source/BladeX/blade-service-api/blade-system-api/src/main/java/org/springblade/system/entity/ApiScope.java
+++ b/Source/BladeX/blade-service-api/blade-system-api/src/main/java/org/springblade/system/entity/ApiScope.java
@@ -29,7 +29,7 @@
  * @author BladeX
  */
 @Data
-@TableName("blade_scope_api")
+@TableName("pl_auth_scope_api")
 @EqualsAndHashCode(callSuper = true)
 @ApiModel(value = "ApiScope瀵硅薄", description = "ApiScope瀵硅薄")
 public class ApiScope extends BaseEntity {
diff --git a/Source/BladeX/blade-service-api/blade-system-api/src/main/java/org/springblade/system/entity/AuthClient.java b/Source/BladeX/blade-service-api/blade-system-api/src/main/java/org/springblade/system/entity/AuthClient.java
index 3164841..96b10c5 100644
--- a/Source/BladeX/blade-service-api/blade-system-api/src/main/java/org/springblade/system/entity/AuthClient.java
+++ b/Source/BladeX/blade-service-api/blade-system-api/src/main/java/org/springblade/system/entity/AuthClient.java
@@ -30,7 +30,7 @@
  * @author BladeX
  */
 @Data
-@TableName("blade_client")
+@TableName("pl_sys_client")
 @EqualsAndHashCode(callSuper = true)
 @ApiModel(value = "Client瀵硅薄", description = "Client瀵硅薄")
 public class AuthClient extends BaseEntity {
diff --git a/Source/BladeX/blade-service-api/blade-system-api/src/main/java/org/springblade/system/entity/DataScope.java b/Source/BladeX/blade-service-api/blade-system-api/src/main/java/org/springblade/system/entity/DataScope.java
index 1fced27..976a14b 100644
--- a/Source/BladeX/blade-service-api/blade-system-api/src/main/java/org/springblade/system/entity/DataScope.java
+++ b/Source/BladeX/blade-service-api/blade-system-api/src/main/java/org/springblade/system/entity/DataScope.java
@@ -29,7 +29,7 @@
  * @author BladeX
  */
 @Data
-@TableName("blade_scope_data")
+@TableName("pl_auth_scope_data")
 @EqualsAndHashCode(callSuper = true)
 @ApiModel(value = "DataScope瀵硅薄", description = "DataScope瀵硅薄")
 public class DataScope extends BaseEntity {
diff --git a/Source/BladeX/blade-service-api/blade-system-api/src/main/java/org/springblade/system/entity/Dept.java b/Source/BladeX/blade-service-api/blade-system-api/src/main/java/org/springblade/system/entity/Dept.java
index 259f273..2911e7f 100644
--- a/Source/BladeX/blade-service-api/blade-system-api/src/main/java/org/springblade/system/entity/Dept.java
+++ b/Source/BladeX/blade-service-api/blade-system-api/src/main/java/org/springblade/system/entity/Dept.java
@@ -34,7 +34,7 @@
  * @author Chill
  */
 @Data
-@TableName("blade_dept")
+@TableName("pl_org_dept")
 @ApiModel(value = "Dept瀵硅薄", description = "Dept瀵硅薄")
 public class Dept implements Serializable {
 
diff --git a/Source/BladeX/blade-service-api/blade-system-api/src/main/java/org/springblade/system/entity/Menu.java b/Source/BladeX/blade-service-api/blade-system-api/src/main/java/org/springblade/system/entity/Menu.java
index 70e738f..b0565f5 100644
--- a/Source/BladeX/blade-service-api/blade-system-api/src/main/java/org/springblade/system/entity/Menu.java
+++ b/Source/BladeX/blade-service-api/blade-system-api/src/main/java/org/springblade/system/entity/Menu.java
@@ -36,7 +36,7 @@
  * @author Chill
  */
 @Data
-@TableName("blade_menu")
+@TableName("pl_sys_menu")
 @ApiModel(value = "Menu瀵硅薄", description = "Menu瀵硅薄")
 public class Menu implements Serializable {
 
diff --git a/Source/BladeX/blade-service-api/blade-system-api/src/main/java/org/springblade/system/entity/Param.java b/Source/BladeX/blade-service-api/blade-system-api/src/main/java/org/springblade/system/entity/Param.java
index 8e3c0cc..c3474ea 100644
--- a/Source/BladeX/blade-service-api/blade-system-api/src/main/java/org/springblade/system/entity/Param.java
+++ b/Source/BladeX/blade-service-api/blade-system-api/src/main/java/org/springblade/system/entity/Param.java
@@ -29,7 +29,7 @@
  * @author Chill
  */
 @Data
-@TableName("blade_param")
+@TableName("pl_oq_param")
 @EqualsAndHashCode(callSuper = true)
 @ApiModel(value = "Param瀵硅薄", description = "Param瀵硅薄")
 public class Param extends BaseEntity {
diff --git a/Source/BladeX/blade-service-api/blade-system-api/src/main/java/org/springblade/system/entity/Post.java b/Source/BladeX/blade-service-api/blade-system-api/src/main/java/org/springblade/system/entity/Post.java
index 26f2f68..f7910f5 100644
--- a/Source/BladeX/blade-service-api/blade-system-api/src/main/java/org/springblade/system/entity/Post.java
+++ b/Source/BladeX/blade-service-api/blade-system-api/src/main/java/org/springblade/system/entity/Post.java
@@ -29,7 +29,7 @@
  * @author Chill
  */
 @Data
-@TableName("blade_post")
+@TableName("pl_org_post")
 @EqualsAndHashCode(callSuper = true)
 @ApiModel(value = "Post瀵硅薄", description = "宀椾綅琛�")
 public class Post extends TenantEntity {
diff --git a/Source/BladeX/blade-service-api/blade-system-api/src/main/java/org/springblade/system/entity/Region.java b/Source/BladeX/blade-service-api/blade-system-api/src/main/java/org/springblade/system/entity/Region.java
index 707a4ae..3ea3891 100644
--- a/Source/BladeX/blade-service-api/blade-system-api/src/main/java/org/springblade/system/entity/Region.java
+++ b/Source/BladeX/blade-service-api/blade-system-api/src/main/java/org/springblade/system/entity/Region.java
@@ -31,7 +31,7 @@
  * @author Chill
  */
 @Data
-@TableName("blade_region")
+@TableName("pl_sys_region")
 @ApiModel(value = "Region瀵硅薄", description = "琛屾斂鍖哄垝琛�")
 public class Region implements Serializable {
 
diff --git a/Source/BladeX/blade-service-api/blade-system-api/src/main/java/org/springblade/system/entity/Role.java b/Source/BladeX/blade-service-api/blade-system-api/src/main/java/org/springblade/system/entity/Role.java
index e1552dc..878ea4b 100644
--- a/Source/BladeX/blade-service-api/blade-system-api/src/main/java/org/springblade/system/entity/Role.java
+++ b/Source/BladeX/blade-service-api/blade-system-api/src/main/java/org/springblade/system/entity/Role.java
@@ -24,7 +24,9 @@
 import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
 import lombok.Data;
+import lombok.NoArgsConstructor;
 
 import java.io.Serializable;
 
@@ -34,7 +36,8 @@
  * @author Chill
  */
 @Data
-@TableName("blade_role")
+@NoArgsConstructor
+@TableName("pl_org_role")
 @ApiModel(value = "Role瀵硅薄", description = "Role瀵硅薄")
 public class Role implements Serializable {
 
@@ -86,5 +89,13 @@
 	@ApiModelProperty(value = "鏄惁宸插垹闄�")
 	private Integer isDeleted;
 
+	public Role(String tenantId, Long parentId, String roleName, Integer sort, String roleAlias, Integer isDeleted) {
+		this.tenantId = tenantId;
+		this.parentId = parentId;
+		this.roleName = roleName;
+		this.sort = sort;
+		this.roleAlias = roleAlias;
+		this.isDeleted = isDeleted;
+	}
 
 }
diff --git a/Source/BladeX/blade-service-api/blade-system-api/src/main/java/org/springblade/system/entity/RoleMenu.java b/Source/BladeX/blade-service-api/blade-system-api/src/main/java/org/springblade/system/entity/RoleMenu.java
index eb1bcaf..c985322 100644
--- a/Source/BladeX/blade-service-api/blade-system-api/src/main/java/org/springblade/system/entity/RoleMenu.java
+++ b/Source/BladeX/blade-service-api/blade-system-api/src/main/java/org/springblade/system/entity/RoleMenu.java
@@ -23,7 +23,9 @@
 import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
 import lombok.Data;
+import lombok.NoArgsConstructor;
 
 import java.io.Serializable;
 
@@ -33,7 +35,8 @@
  * @author Chill
  */
 @Data
-@TableName("blade_role_menu")
+@NoArgsConstructor
+@TableName("pl_org_role_menu")
 @ApiModel(value = "RoleMenu瀵硅薄", description = "RoleMenu瀵硅薄")
 public class RoleMenu implements Serializable {
 
@@ -61,5 +64,8 @@
 	@ApiModelProperty(value = "瑙掕壊id")
 	private Long roleId;
 
-
+	public RoleMenu(Long menuId, Long roleId) {
+		this.menuId = menuId;
+		this.roleId = roleId;
+	}
 }
diff --git a/Source/BladeX/blade-service-api/blade-system-api/src/main/java/org/springblade/system/entity/RoleScope.java b/Source/BladeX/blade-service-api/blade-system-api/src/main/java/org/springblade/system/entity/RoleScope.java
index 65c2e37..9ff3f50 100644
--- a/Source/BladeX/blade-service-api/blade-system-api/src/main/java/org/springblade/system/entity/RoleScope.java
+++ b/Source/BladeX/blade-service-api/blade-system-api/src/main/java/org/springblade/system/entity/RoleScope.java
@@ -33,7 +33,7 @@
  * @author Chill
  */
 @Data
-@TableName("blade_role_scope")
+@TableName("pl_auth_role_scope")
 @ApiModel(value = "RoleScope瀵硅薄", description = "RoleScope瀵硅薄")
 public class RoleScope implements Serializable {
 
diff --git a/Source/BladeX/blade-service-api/blade-system-api/src/main/java/org/springblade/system/entity/Tenant.java b/Source/BladeX/blade-service-api/blade-system-api/src/main/java/org/springblade/system/entity/Tenant.java
index c5e3f32..fdd8a26 100644
--- a/Source/BladeX/blade-service-api/blade-system-api/src/main/java/org/springblade/system/entity/Tenant.java
+++ b/Source/BladeX/blade-service-api/blade-system-api/src/main/java/org/springblade/system/entity/Tenant.java
@@ -36,7 +36,7 @@
  * @author Chill
  */
 @Data
-@TableName("blade_tenant")
+@TableName("pl_org_tenant")
 @EqualsAndHashCode(callSuper = true)
 @ApiModel(value = "Tenant瀵硅薄", description = "Tenant瀵硅薄")
 public class Tenant extends BaseEntity {
@@ -78,18 +78,7 @@
 	 */
 	@ApiModelProperty(value = "鑱旂郴鍦板潃")
 	private String address;
-	/**
-	 * 璐﹀彿棰濆害
-	 */
-	@ApiModelProperty(value = "璐﹀彿棰濆害")
-	private Integer accountNumber;
-	/**
-	 * 杩囨湡鏃堕棿
-	 */
-	@DateTimeFormat(pattern = DateUtil.PATTERN_DATETIME)
-	@JsonFormat(pattern = DateUtil.PATTERN_DATETIME)
-	@ApiModelProperty(value = "杩囨湡鏃堕棿")
-	private Date expireTime;
+
 	/**
 	 * 浜у搧鍖匢D
 	 */
diff --git a/Source/BladeX/blade-service-api/blade-system-api/src/main/java/org/springblade/system/entity/TenantPackage.java b/Source/BladeX/blade-service-api/blade-system-api/src/main/java/org/springblade/system/entity/TenantPackage.java
index 1e82d89..1164d5f 100644
--- a/Source/BladeX/blade-service-api/blade-system-api/src/main/java/org/springblade/system/entity/TenantPackage.java
+++ b/Source/BladeX/blade-service-api/blade-system-api/src/main/java/org/springblade/system/entity/TenantPackage.java
@@ -29,7 +29,7 @@
  * @author BladeX
  */
 @Data
-@TableName("blade_tenant_package")
+@TableName("pl_org_tenant_package")
 @EqualsAndHashCode(callSuper = true)
 @ApiModel(value = "TenantPackage瀵硅薄", description = "绉熸埛浜у搧琛�")
 public class TenantPackage extends BaseEntity {
diff --git a/Source/BladeX/blade-service-api/blade-system-api/src/main/java/org/springblade/system/entity/TopMenu.java b/Source/BladeX/blade-service-api/blade-system-api/src/main/java/org/springblade/system/entity/TopMenu.java
index 37f5af7..069ee45 100644
--- a/Source/BladeX/blade-service-api/blade-system-api/src/main/java/org/springblade/system/entity/TopMenu.java
+++ b/Source/BladeX/blade-service-api/blade-system-api/src/main/java/org/springblade/system/entity/TopMenu.java
@@ -29,7 +29,7 @@
  * @author BladeX
  */
 @Data
-@TableName("blade_top_menu")
+@TableName("pl_sys_top_menu")
 @EqualsAndHashCode(callSuper = true)
 @ApiModel(value = "TopMenu瀵硅薄", description = "椤堕儴鑿滃崟琛�")
 public class TopMenu extends TenantEntity {
diff --git a/Source/BladeX/blade-service-api/blade-system-api/src/main/java/org/springblade/system/entity/TopMenuSetting.java b/Source/BladeX/blade-service-api/blade-system-api/src/main/java/org/springblade/system/entity/TopMenuSetting.java
index 967fc63..c8601d4 100644
--- a/Source/BladeX/blade-service-api/blade-system-api/src/main/java/org/springblade/system/entity/TopMenuSetting.java
+++ b/Source/BladeX/blade-service-api/blade-system-api/src/main/java/org/springblade/system/entity/TopMenuSetting.java
@@ -13,7 +13,7 @@
  * @author Chill
  */
 @Data
-@TableName("blade_top_menu_setting")
+@TableName("pl_sys_top_menu_setting")
 public class TopMenuSetting {
 
 	/**
diff --git a/Source/BladeX/blade-service-api/blade-system-api/src/main/java/org/springblade/system/feign/ISysClient.java b/Source/BladeX/blade-service-api/blade-system-api/src/main/java/org/springblade/system/feign/ISysClient.java
index e791b3b..278ba4a 100644
--- a/Source/BladeX/blade-service-api/blade-system-api/src/main/java/org/springblade/system/feign/ISysClient.java
+++ b/Source/BladeX/blade-service-api/blade-system-api/src/main/java/org/springblade/system/feign/ISysClient.java
@@ -57,6 +57,8 @@
 	String ROLE_ALIASES = API_PREFIX + "/role-aliases";
 	String TENANT = API_PREFIX + "/tenant";
 	String TENANT_ID = API_PREFIX + "/tenant-id";
+	//鏌ヨ瓒呯骇绠$悊鍛�
+	String TENANT_MGR_ID = API_PREFIX + "/tenant-mgr-id";
 	String TENANT_PACKAGE = API_PREFIX + "/tenant-package";
 	String PARAM = API_PREFIX + "/param";
 	String PARAM_VALUE = API_PREFIX + "/param-value";
diff --git a/Source/BladeX/blade-service-api/blade-system-api/src/main/java/org/springblade/system/vo/TenantVO.java b/Source/BladeX/blade-service-api/blade-system-api/src/main/java/org/springblade/system/vo/TenantVO.java
new file mode 100644
index 0000000..6624e71
--- /dev/null
+++ b/Source/BladeX/blade-service-api/blade-system-api/src/main/java/org/springblade/system/vo/TenantVO.java
@@ -0,0 +1,40 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package org.springblade.system.vo;
+
+import io.swagger.annotations.ApiModel;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import org.springblade.system.entity.ApiScope;
+import org.springblade.system.entity.Tenant;
+
+/**
+ * 瑙嗗浘瀹炰綋绫�
+ *
+ * @author Chill
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ApiModel(value = "TenantVO瀵硅薄", description = "TenantVO瀵硅薄")
+public class TenantVO extends Tenant {
+	private static final long serialVersionUID = 1L;
+
+	/**
+	 * 鏄惁寮�鍚笁鍛�
+	 */
+	private Boolean membersFlag;
+}
diff --git a/Source/BladeX/blade-service-api/blade-user-api/src/main/java/org/springblade/system/user/entity/User.java b/Source/BladeX/blade-service-api/blade-user-api/src/main/java/org/springblade/system/user/entity/User.java
index 576b32d..478d029 100644
--- a/Source/BladeX/blade-service-api/blade-user-api/src/main/java/org/springblade/system/user/entity/User.java
+++ b/Source/BladeX/blade-service-api/blade-user-api/src/main/java/org/springblade/system/user/entity/User.java
@@ -17,6 +17,7 @@
 package org.springblade.system.user.entity;
 
 import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.AllArgsConstructor;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
 import org.springblade.core.tenant.mp.TenantEntity;
@@ -29,7 +30,7 @@
  * @author Chill
  */
 @Data
-@TableName("blade_user")
+@TableName("pl_org_user")
 @EqualsAndHashCode(callSuper = true)
 public class User extends TenantEntity {
 
@@ -91,6 +92,5 @@
 	 * 宀椾綅id
 	 */
 	private String postId;
-
 
 }
diff --git a/Source/BladeX/blade-service-api/blade-user-api/src/main/java/org/springblade/system/user/entity/UserApp.java b/Source/BladeX/blade-service-api/blade-user-api/src/main/java/org/springblade/system/user/entity/UserApp.java
index 0e21d38..1f3cd56 100644
--- a/Source/BladeX/blade-service-api/blade-user-api/src/main/java/org/springblade/system/user/entity/UserApp.java
+++ b/Source/BladeX/blade-service-api/blade-user-api/src/main/java/org/springblade/system/user/entity/UserApp.java
@@ -33,7 +33,7 @@
  * @author Chill
  */
 @Data
-@TableName("blade_user_app")
+@TableName("pl_org_user_app")
 @EqualsAndHashCode(callSuper = true)
 @ApiModel(value = "UserApp瀵硅薄", description = "UserApp瀵硅薄")
 public class UserApp extends Model<UserApp> {
diff --git a/Source/BladeX/blade-service-api/blade-user-api/src/main/java/org/springblade/system/user/entity/UserDept.java b/Source/BladeX/blade-service-api/blade-user-api/src/main/java/org/springblade/system/user/entity/UserDept.java
index 3fb0c02..ec77cc8 100644
--- a/Source/BladeX/blade-service-api/blade-user-api/src/main/java/org/springblade/system/user/entity/UserDept.java
+++ b/Source/BladeX/blade-service-api/blade-user-api/src/main/java/org/springblade/system/user/entity/UserDept.java
@@ -33,7 +33,7 @@
  * @author Chill
  */
 @Data
-@TableName("blade_user_dept")
+@TableName("pl_org_user_dept")
 @ApiModel(value = "UserDept瀵硅薄", description = "UserDept瀵硅薄")
 public class UserDept implements Serializable {
 
diff --git a/Source/BladeX/blade-service-api/blade-user-api/src/main/java/org/springblade/system/user/entity/UserOauth.java b/Source/BladeX/blade-service-api/blade-user-api/src/main/java/org/springblade/system/user/entity/UserOauth.java
index b4b9a68..533ae6e 100644
--- a/Source/BladeX/blade-service-api/blade-user-api/src/main/java/org/springblade/system/user/entity/UserOauth.java
+++ b/Source/BladeX/blade-service-api/blade-user-api/src/main/java/org/springblade/system/user/entity/UserOauth.java
@@ -32,7 +32,7 @@
  * @author Chill
  */
 @Data
-@TableName("blade_user_oauth")
+@TableName("pl_org_user_oauth")
 public class UserOauth implements Serializable {
 
 	private static final long serialVersionUID = 1L;
diff --git a/Source/BladeX/blade-service-api/blade-user-api/src/main/java/org/springblade/system/user/entity/UserOther.java b/Source/BladeX/blade-service-api/blade-user-api/src/main/java/org/springblade/system/user/entity/UserOther.java
index fba573e..c64d4e2 100644
--- a/Source/BladeX/blade-service-api/blade-user-api/src/main/java/org/springblade/system/user/entity/UserOther.java
+++ b/Source/BladeX/blade-service-api/blade-user-api/src/main/java/org/springblade/system/user/entity/UserOther.java
@@ -33,7 +33,7 @@
  * @author Chill
  */
 @Data
-@TableName("blade_user_other")
+@TableName("pl_org_user_other")
 @EqualsAndHashCode(callSuper = true)
 @ApiModel(value = "UserOther瀵硅薄", description = "UserOther瀵硅薄")
 public class UserOther extends Model<UserOther> {
diff --git a/Source/BladeX/blade-service-api/blade-user-api/src/main/java/org/springblade/system/user/entity/UserWeb.java b/Source/BladeX/blade-service-api/blade-user-api/src/main/java/org/springblade/system/user/entity/UserWeb.java
index 75c6711..bb91a71 100644
--- a/Source/BladeX/blade-service-api/blade-user-api/src/main/java/org/springblade/system/user/entity/UserWeb.java
+++ b/Source/BladeX/blade-service-api/blade-user-api/src/main/java/org/springblade/system/user/entity/UserWeb.java
@@ -33,7 +33,7 @@
  * @author Chill
  */
 @Data
-@TableName("blade_user_web")
+@TableName("pl_org_user_web")
 @EqualsAndHashCode(callSuper = true)
 @ApiModel(value = "UserWeb瀵硅薄", description = "UserWeb瀵硅薄")
 public class UserWeb extends Model<UserWeb> {
diff --git a/Source/BladeX/blade-service-api/blade-user-api/src/main/java/org/springblade/system/user/feign/IUserClient.java b/Source/BladeX/blade-service-api/blade-user-api/src/main/java/org/springblade/system/user/feign/IUserClient.java
index 875c19d..c04e629 100644
--- a/Source/BladeX/blade-service-api/blade-user-api/src/main/java/org/springblade/system/user/feign/IUserClient.java
+++ b/Source/BladeX/blade-service-api/blade-user-api/src/main/java/org/springblade/system/user/feign/IUserClient.java
@@ -28,6 +28,8 @@
 import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestParam;
 
+import java.util.List;
+
 /**
  * User Feign鎺ュ彛绫�
  *
@@ -45,6 +47,7 @@
 	String USER_INFO_BY_ACCOUNT = API_PREFIX + "/user-info-by-account";
 	String USER_AUTH_INFO = API_PREFIX + "/user-auth-info";
 	String SAVE_USER = API_PREFIX + "/save-user";
+	String SAVE_USER_LIST = API_PREFIX + "/save-user-list";
 	String REMOVE_USER = API_PREFIX + "/remove-user";
 
 	/**
@@ -107,6 +110,14 @@
 	R<Boolean> saveUser(@RequestBody User user);
 
 	/**
+	 * 鏂板缓澶氫釜鐢ㄦ埛
+	 * @param users
+	 * @return
+	 */
+	@PostMapping(SAVE_USER_LIST)
+	R<Boolean> saveUserList(@RequestBody List<User> users);
+
+	/**
 	 * 鍒犻櫎鐢ㄦ埛
 	 *
 	 * @param tenantIds 绉熸埛id闆嗗悎
diff --git a/Source/BladeX/blade-service-api/pom.xml b/Source/BladeX/blade-service-api/pom.xml
index 4d0a132..1dbd39c 100644
--- a/Source/BladeX/blade-service-api/pom.xml
+++ b/Source/BladeX/blade-service-api/pom.xml
@@ -3,7 +3,7 @@
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
     <parent>
-        <artifactId>BladeX</artifactId>
+        <artifactId>UBCS</artifactId>
         <groupId>org.springblade</groupId>
         <version>3.0.1.RELEASE</version>
     </parent>
diff --git a/Source/BladeX/blade-service/blade-desk/Dockerfile b/Source/BladeX/blade-service/blade-desk/Dockerfile
index 2efbdfc..1ff3c9d 100644
--- a/Source/BladeX/blade-service/blade-desk/Dockerfile
+++ b/Source/BladeX/blade-service/blade-desk/Dockerfile
@@ -6,10 +6,10 @@
 
 WORKDIR /blade/desk
 
-EXPOSE 8105
+EXPOSE 36010
 
 ADD ./target/blade-desk.jar ./app.jar
 
 ENTRYPOINT ["java", "-Djava.security.egd=file:/dev/./urandom", "-jar", "app.jar"]
 
-CMD ["--spring.profiles.active=test"]
+CMD ["--spring.profiles.active=dev"]
diff --git a/Source/BladeX/blade-service/blade-desk/pom.xml b/Source/BladeX/blade-service/blade-desk/pom.xml
index 17c740e..b7da9d5 100644
--- a/Source/BladeX/blade-service/blade-desk/pom.xml
+++ b/Source/BladeX/blade-service/blade-desk/pom.xml
@@ -59,6 +59,15 @@
             <groupId>org.springblade</groupId>
             <artifactId>blade-starter-transaction</artifactId>
         </dependency>-->
+        <dependency>
+            <groupId>com.oracle.database.jdbc</groupId>
+            <artifactId>ojdbc8</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>cn.easyproject</groupId>
+            <artifactId>orai18n</artifactId>
+            <version>${orai18n.version}</version>
+        </dependency>
     </dependencies>
 
     <build>
diff --git a/Source/BladeX/blade-service/blade-desk/src/main/java/org/springblade/desk/DeskApplication.java b/Source/BladeX/blade-service/blade-desk/src/main/java/org/springblade/desk/DeskApplication.java
index 26c3b23..b4b88ed 100644
--- a/Source/BladeX/blade-service/blade-desk/src/main/java/org/springblade/desk/DeskApplication.java
+++ b/Source/BladeX/blade-service/blade-desk/src/main/java/org/springblade/desk/DeskApplication.java
@@ -19,6 +19,7 @@
 import org.springblade.core.cloud.client.BladeCloudApplication;
 import org.springblade.core.launch.BladeApplication;
 import org.springblade.core.launch.constant.AppConstant;
+import springfox.documentation.swagger2.annotations.EnableSwagger2WebMvc;
 
 /**
  * Desk鍚姩鍣�
diff --git a/Source/BladeX/blade-service/blade-desk/src/main/java/org/springblade/desk/entity/ProcessLeave.java b/Source/BladeX/blade-service/blade-desk/src/main/java/org/springblade/desk/entity/ProcessLeave.java
index b3642c3..c8afc07 100644
--- a/Source/BladeX/blade-service/blade-desk/src/main/java/org/springblade/desk/entity/ProcessLeave.java
+++ b/Source/BladeX/blade-service/blade-desk/src/main/java/org/springblade/desk/entity/ProcessLeave.java
@@ -29,7 +29,7 @@
  * @author Chill
  */
 @Data
-@TableName("blade_process_leave")
+@TableName("pl_wf_process_leave")
 @EqualsAndHashCode(callSuper = true)
 public class ProcessLeave extends FlowEntity {
 
diff --git a/Source/BladeX/blade-service/blade-desk/src/main/java/org/springblade/desk/mapper/NoticeMapper.xml b/Source/BladeX/blade-service/blade-desk/src/main/java/org/springblade/desk/mapper/NoticeMapper.xml
index acb713a..8992089 100644
--- a/Source/BladeX/blade-service/blade-desk/src/main/java/org/springblade/desk/mapper/NoticeMapper.xml
+++ b/Source/BladeX/blade-service/blade-desk/src/main/java/org/springblade/desk/mapper/NoticeMapper.xml
@@ -31,7 +31,7 @@
     </resultMap>
 
     <select id="topList" resultMap="noticeResultMap">
-        select * from blade_notice limit #{number}
+        select * from pl_org_notice limit #{number}
     </select>
 
     <select id="selectNoticePage" resultMap="noticeVOResultMap">
@@ -39,8 +39,8 @@
         n.*,
         d.dict_value AS categoryName
         FROM
-        blade_notice n
-        LEFT JOIN ( SELECT * FROM blade_dict WHERE CODE = 'notice' ) d ON n.category = d.dict_key
+        pl_org_notice n
+        LEFT JOIN ( SELECT * FROM pl_sys_dict WHERE CODE = 'notice' ) d ON n.category = d.dict_key
         WHERE
         n.is_deleted = 0 and n.tenant_id = #{notice.tenantId}
         <if test="notice.title!=null">
diff --git a/Source/BladeX/blade-service/blade-desk/src/main/resources/application-dev.yml b/Source/BladeX/blade-service/blade-desk/src/main/resources/application-dev.yml
index 2a4cb8c..0c72c1b 100644
--- a/Source/BladeX/blade-service/blade-desk/src/main/resources/application-dev.yml
+++ b/Source/BladeX/blade-service/blade-desk/src/main/resources/application-dev.yml
@@ -1,6 +1,6 @@
 #鏈嶅姟鍣ㄧ鍙�
 server:
-  port: 8105
+  port: 36010
 
 #鏁版嵁婧愰厤缃�
 spring:
diff --git a/Source/BladeX/blade-service/blade-system/Dockerfile b/Source/BladeX/blade-service/blade-system/Dockerfile
index a0d72a8..2c06130 100644
--- a/Source/BladeX/blade-service/blade-system/Dockerfile
+++ b/Source/BladeX/blade-service/blade-system/Dockerfile
@@ -6,10 +6,10 @@
 
 WORKDIR /blade/system
 
-EXPOSE 8106
+EXPOSE 36011
 
 ADD ./target/blade-system.jar ./app.jar
 
 ENTRYPOINT ["java", "-Djava.security.egd=file:/dev/./urandom", "-jar", "app.jar"]
 
-CMD ["--spring.profiles.active=test"]
+CMD ["--spring.profiles.active=dev"]
diff --git a/Source/BladeX/blade-service/blade-system/pom.xml b/Source/BladeX/blade-service/blade-system/pom.xml
index ea3d7bd..a7fb25d 100644
--- a/Source/BladeX/blade-service/blade-system/pom.xml
+++ b/Source/BladeX/blade-service/blade-system/pom.xml
@@ -37,6 +37,15 @@
             <artifactId>blade-user-api</artifactId>
             <version>${bladex.project.version}</version>
         </dependency>
+        <dependency>
+            <groupId>com.oracle.database.jdbc</groupId>
+            <artifactId>ojdbc8</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>cn.easyproject</groupId>
+            <artifactId>orai18n</artifactId>
+            <version>${orai18n.version}</version>
+        </dependency>
     </dependencies>
 
     <build>
diff --git a/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/controller/TenantController.java b/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/controller/TenantController.java
index 6440171..5afb563 100644
--- a/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/controller/TenantController.java
+++ b/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/controller/TenantController.java
@@ -29,6 +29,7 @@
 import org.springblade.core.secure.BladeUser;
 import org.springblade.core.secure.annotation.PreAuth;
 import org.springblade.core.tenant.annotation.NonDS;
+import org.springblade.core.tenant.mp.TenantEntity;
 import org.springblade.core.tool.api.R;
 import org.springblade.core.tool.constant.BladeConstant;
 import org.springblade.core.tool.constant.RoleConstant;
@@ -38,6 +39,7 @@
 import org.springblade.system.entity.TenantPackage;
 import org.springblade.system.service.ITenantPackageService;
 import org.springblade.system.service.ITenantService;
+import org.springblade.system.vo.TenantVO;
 import org.springframework.web.bind.annotation.*;
 import springfox.documentation.annotations.ApiIgnore;
 
@@ -131,8 +133,9 @@
 	@ApiOperationSupport(order = 5)
 	@ApiOperation(value = "鏂板鎴栦慨鏀�", notes = "浼犲叆tenant")
 	@PreAuth(RoleConstant.HAS_ROLE_ADMINISTRATOR)
-	public R submit(@Valid @RequestBody Tenant tenant) {
-		return R.status(tenantService.submitTenant(tenant));
+	public R submit(@Valid @RequestBody TenantVO tenantVO) {
+		System.out.println(tenantVO);
+		return R.status(tenantService.submitTenant(tenantVO));
 	}
 
 
@@ -148,20 +151,9 @@
 	}
 
 	/**
-	 * 鎺堟潈閰嶇疆
-	 */
-	@PostMapping("/setting")
-	@ApiOperationSupport(order = 7)
-	@ApiOperation(value = "鎺堟潈閰嶇疆", notes = "浼犲叆ids,accountNumber,expireTime")
-	@PreAuth(RoleConstant.HAS_ROLE_ADMINISTRATOR)
-	public R setting(@ApiParam(value = "涓婚敭闆嗗悎", required = true) @RequestParam String ids, @ApiParam(value = "璐﹀彿棰濆害") Integer accountNumber, @ApiParam(value = "杩囨湡鏃堕棿") Date expireTime) {
-		return R.status(tenantService.setting(accountNumber, expireTime, ids));
-	}
-
-	/**
 	 * 鏁版嵁婧愰厤缃�
 	 */
-	@PostMapping("datasource")
+	@PostMapping("/datasource")
 	@ApiOperationSupport(order = 8)
 	@PreAuth(RoleConstant.HAS_ROLE_ADMINISTRATOR)
 	@ApiOperation(value = "鏁版嵁婧愰厤缃�", notes = "浼犲叆datasource_id")
@@ -230,6 +222,29 @@
 		return R.status(tenantService.update(Wrappers.<Tenant>update().lambda().set(Tenant::getPackageId, packageId).eq(Tenant::getTenantId, tenantId)));
 	}
 
+	/**
+	 * 鏌ヨ绉熸埛淇℃伅锛岀畝閿�煎褰㈠娍
+	 * @return
+	 */
+	@GetMapping("/tenant-map")
+	@ApiOperationSupport(order = 1)
+	@ApiOperation(value = "涓嬫媺绉熸埛淇℃伅")
+	public R<List> findAll() {
+		List<Map<String, Object>> map = tenantService.selectMaps();
+		return R.data(map);
+	}
 
+	/**
+	 * 鏌ヨ鏄惁閰嶇疆鏈夐粯璁ゅ繀椤诲紑鍚笁鍛樼鐞�
+	 * @return
+	 */
+	@GetMapping("/find-ssa-enable")
+	@ApiOperationSupport(order = 14)
+	@ApiOperation(value = "涓嬫媺绉熸埛淇℃伅")
+	@PreAuth(RoleConstant.HAS_ROLE_ADMINISTRATOR)
+	public R findIsOpen() {
+		boolean isOpen = this.tenantService.findIsOpen();
+		return R.data(isOpen);
+	}
 
 }
diff --git a/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/mapper/DeptMapper.xml b/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/mapper/DeptMapper.xml
index 6054664..3b3f761 100644
--- a/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/mapper/DeptMapper.xml
+++ b/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/mapper/DeptMapper.xml
@@ -44,12 +44,12 @@
                 SELECT
                     CASE WHEN count(1) > 0 THEN 1 ELSE 0 END
                 FROM
-                    blade_dept
+                    pl_org_dept
                 WHERE
                     parent_id = dept.id and is_deleted = 0
             ) AS "has_children"
         FROM
-            blade_dept dept
+            pl_org_dept dept
         WHERE dept.is_deleted = 0
         <if test="param1!=null and param1!=''">
             and dept.tenant_id = #{param1}
@@ -67,7 +67,7 @@
     </select>
 
     <select id="tree" resultMap="treeNodeResultMap">
-        select id, parent_id, dept_name as title, id as "value", id as "key" from blade_dept where is_deleted = 0
+        select id, parent_id, dept_name as title, id as "value", id as "key" from pl_org_dept where is_deleted = 0
         <if test="_parameter!=null and _parameter!=''">
             and tenant_id = #{_parameter}
         </if>
@@ -85,12 +85,12 @@
                 SELECT
                     CASE WHEN count(1) > 0 THEN 1 ELSE 0 END
                 FROM
-                    blade_dept
+                    pl_org_dept
                 WHERE
                     parent_id = dept.id and is_deleted = 0
             ) AS "has_children"
         FROM
-            blade_dept dept
+                pl_org_dept dept
         WHERE
             dept.parent_id = #{param2} AND dept.is_deleted = 0
         <if test="param1!=null and param1!=''">
@@ -103,7 +103,7 @@
         SELECT
         dept_name
         FROM
-        blade_dept
+        pl_org_dept
         WHERE
         id IN
         <foreach collection="array" item="ids" index="index" open="(" close=")" separator=",">
diff --git a/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/mapper/DictBizMapper.xml b/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/mapper/DictBizMapper.xml
index f908201..f108435 100644
--- a/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/mapper/DictBizMapper.xml
+++ b/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/mapper/DictBizMapper.xml
@@ -26,26 +26,26 @@
     <select id="getValue" resultType="java.lang.String">
         select
             dict_value
-        from blade_dict_biz where code = #{param1} and dict_key = #{param2} and is_deleted = 0
+        from pl_sys_dict_biz where code = #{param1} and dict_key = #{param2} and is_deleted = 0
     </select>
 
     <!-- oracle 鐗堟湰 -->
     <!--<select id="getValue" resultType="java.lang.String">
         select
             dict_value
-        from blade_dict_biz where code = #{param1, jdbcType=VARCHAR} and dict_key = #{param2} and dict_key >= 0  rownum 1
+        from pl_sys_dict_biz where code = #{param1, jdbcType=VARCHAR} and dict_key = #{param2} and dict_key >= 0  rownum 1
     </select>-->
 
     <select id="getList" resultMap="dictResultMap">
-        select id, tenant_id, parent_id, code, dict_key, dict_value, sort, remark from blade_dict_biz where code = #{param1} and parent_id > 0 and is_sealed = 0 and is_deleted = 0
+        select id, tenant_id, parent_id, code, dict_key, dict_value, sort, remark from pl_sys_dict_biz where code = #{param1} and parent_id > 0 and is_sealed = 0 and is_deleted = 0
     </select>
 
     <select id="tree" resultMap="treeNodeResultMap">
-        select id, parent_id, dict_value as title, id as "value", id as "key" from blade_dict_biz where is_deleted = 0
+        select id, parent_id, dict_value as title, id as "value", id as "key" from pl_sys_dict_biz where is_deleted = 0
     </select>
 
     <select id="parentTree" resultMap="treeNodeResultMap">
-        select id, parent_id, dict_value as title, id as "value", id as "key" from blade_dict_biz where is_deleted = 0 and parent_id = 0
+        select id, parent_id, dict_value as title, id as "value", id as "key" from pl_sys_dict_biz where is_deleted = 0 and parent_id = 0
     </select>
 
 </mapper>
diff --git a/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/mapper/DictMapper.xml b/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/mapper/DictMapper.xml
index cb46d7a..a555209 100644
--- a/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/mapper/DictMapper.xml
+++ b/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/mapper/DictMapper.xml
@@ -23,32 +23,32 @@
     </resultMap>
 
     <select id="selectDictPage" resultMap="dictResultMap">
-        select * from blade_dict where is_deleted = 0
+        select * from pl_sys_dict where is_deleted = 0
     </select>
 
     <select id="getValue" resultType="java.lang.String">
         select
             dict_value
-        from blade_dict where code = #{param1} and dict_key = #{param2} and is_deleted = 0
+        from pl_sys_dict where code = #{param1} and dict_key = #{param2} and is_deleted = 0
     </select>
 
     <!-- oracle 鐗堟湰 -->
     <!--<select id="getValue" resultType="java.lang.String">
         select
             dict_value
-        from blade_dict where code = #{param1, jdbcType=VARCHAR} and dict_key = #{param2} and dict_key >= 0  rownum 1
+        from pl_sys_dict where code = #{param1, jdbcType=VARCHAR} and dict_key = #{param2} and dict_key >= 0  rownum 1
     </select>-->
 
     <select id="getList" resultMap="dictResultMap">
-        select id, parent_id, code, dict_key, dict_value, sort, remark from blade_dict where code = #{param1} and parent_id > 0 and is_sealed = 0 and is_deleted = 0
+        select id, parent_id, code, dict_key, dict_value, sort, remark from pl_sys_dict where code = #{param1} and parent_id > 0 and is_sealed = 0 and is_deleted = 0
     </select>
 
     <select id="tree" resultMap="treeNodeResultMap">
-        select id, parent_id, dict_value as title, id as "value", id as "key" from blade_dict where is_deleted = 0
+        select id, parent_id, dict_value as title, id as "value", id as "key" from pl_sys_dict where is_deleted = 0
     </select>
 
     <select id="parentTree" resultMap="treeNodeResultMap">
-        select id, parent_id, dict_value as title, id as "value", id as "key" from blade_dict where is_deleted = 0 and parent_id = 0
+        select id, parent_id, dict_value as title, id as "value", id as "key" from pl_sys_dict where is_deleted = 0 and parent_id = 0
     </select>
 
 </mapper>
diff --git a/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/mapper/MenuMapper.xml b/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/mapper/MenuMapper.xml
index b0a9dbf..ccf0111 100644
--- a/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/mapper/MenuMapper.xml
+++ b/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/mapper/MenuMapper.xml
@@ -51,12 +51,12 @@
                 SELECT
                     CASE WHEN count( 1 ) > 0 THEN 1 ELSE 0 END
             FROM
-                blade_menu
+                pl_sys_menu
             WHERE
                 parent_id = menu.id AND is_deleted = 0
         ) AS "has_children"
         FROM
-            blade_menu menu
+            pl_sys_menu menu
         WHERE menu.is_deleted = 0
         <if test="param1!=null">
             and menu.parent_id = #{param1}
@@ -80,12 +80,12 @@
                 SELECT
                     CASE WHEN count( 1 ) > 0 THEN 1 ELSE 0 END
         FROM
-                blade_menu
+                pl_sys_menu
         WHERE
         parent_id = menu.id AND is_deleted = 0  AND category = 1
         ) AS "has_children"
         FROM
-            blade_menu menu
+            pl_sys_menu menu
         WHERE menu.is_deleted = 0 AND menu.category = 1
         <if test="param1!=null">
             and menu.parent_id = #{param1}
@@ -103,16 +103,16 @@
     </select>
 
     <select id="tree" resultMap="treeNodeResultMap">
-        select id, parent_id, name as title, id as "value", id as "key" from blade_menu where is_deleted = 0 and category = 1
+        select id, parent_id, name as title, id as "value", id as "key" from pl_sys_menu where is_deleted = 0 and category = 1
     </select>
 
     <select id="allMenu" resultMap="menuResultMap">
-        select * from blade_menu where is_deleted = 0 and category = 1
+        select * from pl_sys_menu where is_deleted = 0 and category = 1
     </select>
 
     <select id="roleMenu" resultMap="menuResultMap">
-        select * from blade_menu where is_deleted = 0 and id IN
-        ( SELECT menu_id FROM blade_role_menu WHERE role_id IN
+        select * from pl_sys_menu where is_deleted = 0 and id IN
+        ( SELECT menu_id FROM pl_org_role_menu WHERE role_id IN
         <foreach collection="param1" index="index" item="item" open="(" separator="," close=")">
             #{item}
         </foreach>
@@ -120,14 +120,14 @@
         <if test="param2!=null and param2>0">
             AND id IN
             (
-            SELECT menu_id FROM blade_top_menu_setting WHERE top_menu_id = #{param2}
+            SELECT menu_id FROM pl_sys_top_menu_setting WHERE top_menu_id = #{param2}
             )
         </if>
     </select>
 
     <select id="roleMenuByRoleId" resultMap="menuResultMap">
-        select * from blade_menu where is_deleted = 0 and id IN
-            ( SELECT menu_id FROM blade_role_menu WHERE role_id IN
+        select * from pl_sys_menu where is_deleted = 0 and id IN
+            ( SELECT menu_id FROM pl_org_role_menu WHERE role_id IN
                 <foreach collection="list" index="index" item="item" open="(" separator="," close=")">
                     #{item}
                 </foreach>
@@ -135,9 +135,9 @@
     </select>
 
     <select id="roleMenuByTopMenuId" resultMap="menuResultMap">
-        select * from blade_menu where is_deleted = 0 and id IN
+        select * from pl_sys_menu where is_deleted = 0 and id IN
               (
-                  SELECT menu_id FROM blade_top_menu_setting WHERE top_menu_id = #{param1}
+                  SELECT menu_id FROM pl_sys_top_menu_setting WHERE top_menu_id = #{param1}
               )
     </select>
 
@@ -145,10 +145,10 @@
         SELECT
             *
         FROM
-            blade_menu
+            pl_sys_menu
         WHERE
             is_deleted = 0 and category = 1
-            and id IN ( SELECT menu_id FROM blade_role_menu WHERE role_id IN
+            and id IN ( SELECT menu_id FROM pl_org_role_menu WHERE role_id IN
                         <foreach collection="list" index="index" item="item" open="(" separator="," close=")">
                             #{item}
                         </foreach> )
@@ -166,10 +166,10 @@
             action,
             sort
         FROM
-            blade_menu
+            pl_sys_menu
         WHERE
             (
-                category = 2 OR id IN ( SELECT parent_id FROM blade_menu WHERE is_deleted = 0 AND category = 2 )
+                category = 2 OR id IN ( SELECT parent_id FROM pl_sys_menu WHERE is_deleted = 0 AND category = 2 )
             )
           AND is_deleted = 0
         ORDER BY sort
@@ -188,11 +188,11 @@
                 action,
                 sort
             FROM
-                blade_menu
+                pl_sys_menu
             WHERE
                 is_deleted = 0 and id IN (
-                  SELECT parent_id FROM blade_menu
-                  WHERE ( category = 2 AND id IN ( SELECT menu_id FROM blade_role_menu WHERE role_id IN
+                  SELECT parent_id FROM pl_sys_menu
+                  WHERE ( category = 2 AND id IN ( SELECT menu_id FROM pl_org_role_menu WHERE role_id IN
                     <foreach collection="list" index="index" item="item" open="(" separator="," close=")">
                         #{item}
                     </foreach>
@@ -211,9 +211,9 @@
                 action,
                 sort
             FROM
-                blade_menu
+                pl_sys_menu
             WHERE
-                is_deleted = 0 and  category = 2 AND id IN ( SELECT menu_id FROM blade_role_menu WHERE role_id IN
+                is_deleted = 0 and  category = 2 AND id IN ( SELECT menu_id FROM pl_org_role_menu WHERE role_id IN
                 <foreach collection="list" index="index" item="item" open="(" separator="," close=")">
                     #{item}
                 </foreach>)
@@ -221,18 +221,18 @@
     </select>
 
     <select id="grantTree" resultMap="treeNodeResultMap">
-        select id, parent_id, name as title, id as "value", id as "key" from blade_menu where is_deleted = 0 order by sort
+        select id, parent_id, name as title, id as "value", id as "key" from pl_sys_menu where is_deleted = 0 order by sort
     </select>
 
     <select id="grantTreeByRole" resultMap="treeNodeResultMap">
-        select id, parent_id, name as title, id as "value", id as "key" from blade_menu where is_deleted = 0
-        and id in ( select menu_id from blade_role_menu where role_id in
+        select id, parent_id, name as title, id as "value", id as "key" from pl_sys_menu where is_deleted = 0
+        and id in ( select menu_id from pl_org_role_menu where role_id in
         <foreach collection="list" index="index" item="item" open="(" separator="," close=")">
             #{item}
         </foreach> )
         or id in (
-            select parent_id from blade_menu where is_deleted = 0
-            and id in ( select menu_id from blade_role_menu where role_id in
+            select parent_id from pl_sys_menu where is_deleted = 0
+            and id in ( select menu_id from pl_org_role_menu where role_id in
             <foreach collection="list" index="index" item="item" open="(" separator="," close=")">
                 #{item}
             </foreach> )
@@ -241,18 +241,18 @@
     </select>
 
     <select id="grantTopTree" resultMap="treeNodeResultMap">
-        select id, parent_id, name as title, id as "value", id as "key" from blade_menu where category = 1 and is_deleted = 0 order by sort
+        select id, parent_id, name as title, id as "value", id as "key" from pl_sys_menu where category = 1 and is_deleted = 0 order by sort
     </select>
 
     <select id="grantTopTreeByRole" resultMap="treeNodeResultMap">
-        select id, parent_id, name as title, id as "value", id as "key" from blade_menu where category = 1 and is_deleted = 0
-        and id in ( select menu_id from blade_role_menu where role_id in
+        select id, parent_id, name as title, id as "value", id as "key" from pl_sys_menu where category = 1 and is_deleted = 0
+        and id in ( select menu_id from pl_org_role_menu where role_id in
         <foreach collection="list" index="index" item="item" open="(" separator="," close=")">
             #{item}
         </foreach> )
         or id in (
-        select parent_id from blade_menu where is_deleted = 0
-        and id in ( select menu_id from blade_role_menu where role_id in
+        select parent_id from pl_sys_menu where is_deleted = 0
+        and id in ( select menu_id from pl_org_role_menu where role_id in
         <foreach collection="list" index="index" item="item" open="(" separator="," close=")">
             #{item}
         </foreach> )
@@ -272,7 +272,7 @@
                     id AS "value",
                     id AS "key"
                 FROM
-                    blade_menu
+                    pl_sys_menu
                 WHERE
                     category = 1
                   AND is_deleted = 0
@@ -306,7 +306,7 @@
                     id AS "value",
                     id AS "key"
                 FROM
-                    blade_menu
+                    pl_sys_menu
                 WHERE
                     category = 1
                   AND is_deleted = 0
@@ -340,21 +340,21 @@
                 id AS "value",
                 id AS "key"
             FROM
-                blade_menu
+                pl_sys_menu
             WHERE
                 category = 1
             AND is_deleted = 0
             AND id IN ( SELECT menu_id FROM blade_scope_data WHERE is_deleted = 0 AND menu_id IS NOT NULL )
             AND (
                 id IN (
-                    select menu_id from blade_role_menu where role_id in
+                    select menu_id from pl_org_role_menu where role_id in
                     <foreach collection="list" index="index" item="item" open="(" separator="," close=")">
                         #{item}
                     </foreach>
                 )
                 OR id IN (
-                    select parent_id from blade_menu where is_deleted = 0
-                    and id in ( select menu_id from blade_role_menu where role_id in
+                    select parent_id from pl_sys_menu where is_deleted = 0
+                    and id in ( select menu_id from pl_org_role_menu where role_id in
                     <foreach collection="list" index="index" item="item" open="(" separator="," close=")">
                         #{item}
                     </foreach> )
@@ -376,14 +376,14 @@
             is_deleted = 0
         AND (
             menu_id IN (
-                select menu_id from blade_role_menu where role_id in
+                select menu_id from pl_org_role_menu where role_id in
                 <foreach collection="list" index="index" item="item" open="(" separator="," close=")">
                     #{item}
                 </foreach>
             )
             OR menu_id IN (
-                select parent_id from blade_menu where is_deleted = 0
-                and id in ( select menu_id from blade_role_menu where role_id in
+                select parent_id from pl_sys_menu where is_deleted = 0
+                and id in ( select menu_id from pl_org_role_menu where role_id in
                 <foreach collection="list" index="index" item="item" open="(" separator="," close=")">
                     #{item}
                 </foreach> )
@@ -404,22 +404,22 @@
                 id AS "value",
                 id AS "key"
             FROM
-                blade_menu
+                pl_sys_menu
             WHERE
                 category = 1
             AND is_deleted = 0
             AND id IN ( SELECT menu_id FROM blade_scope_api WHERE is_deleted = 0 AND menu_id IS NOT NULL )
             AND (
                 id IN (
-                    select menu_id from blade_role_menu where role_id in
+                    select menu_id from pl_org_role_menu where role_id in
                     <foreach collection="list" index="index" item="item" open="(" separator="," close=")">
                         #{item}
                     </foreach>
                 )
                 OR id IN (
-                    select parent_id from blade_menu where is_deleted = 0
+                    select parent_id from pl_sys_menu where is_deleted = 0
                     and id in (
-                        select menu_id from blade_role_menu where role_id in
+                        select menu_id from pl_org_role_menu where role_id in
                     <foreach collection="list" index="index" item="item" open="(" separator="," close=")">
                         #{item}
                     </foreach> )
@@ -442,14 +442,14 @@
         AND
             (
                 menu_id IN (
-                    select menu_id from blade_role_menu where role_id in
+                    select menu_id from pl_org_role_menu where role_id in
                     <foreach collection="list" index="index" item="item" open="(" separator="," close=")">
                         #{item}
                     </foreach>
                 )
             OR menu_id IN (
-                    select parent_id from blade_menu where is_deleted = 0
-                    and id in ( select menu_id from blade_role_menu where role_id in
+                    select parent_id from pl_sys_menu where is_deleted = 0
+                    and id in ( select menu_id from pl_org_role_menu where role_id in
                     <foreach collection="list" index="index" item="item" open="(" separator="," close=")">
                         #{item}
                     </foreach> )
@@ -463,9 +463,9 @@
             GROUP_CONCAT(r.role_alias) as alias,
             m.path
         FROM
-            blade_role_menu rm
-            LEFT JOIN blade_menu m ON rm.menu_id = m.id
-            LEFT JOIN blade_role r ON rm.role_id = r.id
+            pl_org_role_menu rm
+            LEFT JOIN pl_sys_menu m ON rm.menu_id = m.id
+            LEFT JOIN pl_org_role r ON rm.role_id = r.id
         WHERE
             rm.role_id IN
             <foreach collection="list" index="index" item="item" open="(" separator="," close=")">
diff --git a/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/mapper/PostMapper.xml b/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/mapper/PostMapper.xml
index e4106d8..bb3cfd8 100644
--- a/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/mapper/PostMapper.xml
+++ b/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/mapper/PostMapper.xml
@@ -21,14 +21,14 @@
 
 
     <select id="selectPostPage" resultMap="postResultMap">
-        select * from blade_post where is_deleted = 0
+        select * from pl_org_post where is_deleted = 0
     </select>
 
     <select id="getPostNames" resultType="java.lang.String">
         SELECT
             post_name
         FROM
-            blade_post
+            pl_org_post
         WHERE
             id IN
             <foreach collection="array" item="ids" index="index" open="(" close=")" separator=",">
diff --git a/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/mapper/RegionMapper.xml b/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/mapper/RegionMapper.xml
index 285df4a..0253d34 100644
--- a/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/mapper/RegionMapper.xml
+++ b/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/mapper/RegionMapper.xml
@@ -58,9 +58,9 @@
     <select id="lazyList" resultMap="regionVOResultMap">
         SELECT
             region.*,
-            ( SELECT CASE WHEN count( 1 ) > 0 THEN 1 ELSE 0 END FROM blade_region WHERE parent_code = region.code ) AS "has_children"
+            ( SELECT CASE WHEN count( 1 ) > 0 THEN 1 ELSE 0 END FROM pl_sys_region WHERE parent_code = region.code ) AS "has_children"
         FROM
-            blade_region region
+            pl_sys_region region
         <where>
             <if test="param1!=null">
                 and region.parent_code = #{param1}
@@ -81,9 +81,9 @@
             region.name AS "title",
             region.code AS "value",
             region.code AS "key",
-            ( SELECT CASE WHEN count( 1 ) > 0 THEN 1 ELSE 0 END FROM blade_region WHERE parent_code = region.code ) AS "has_children"
+            ( SELECT CASE WHEN count( 1 ) > 0 THEN 1 ELSE 0 END FROM pl_sys_region WHERE parent_code = region.code ) AS "has_children"
         FROM
-            blade_region region
+            pl_sys_region region
         <where>
             <if test="param1!=null">
                 and region.parent_code = #{param1}
@@ -99,7 +99,7 @@
     </select>
 
     <select id="exportRegion" resultType="org.springblade.system.excel.RegionExcel">
-        SELECT * FROM blade_region ${ew.customSqlSegment}
+        SELECT * FROM pl_sys_region ${ew.customSqlSegment}
     </select>
 
 </mapper>
diff --git a/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/mapper/RoleMapper.xml b/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/mapper/RoleMapper.xml
index 0551a59..7142252 100644
--- a/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/mapper/RoleMapper.xml
+++ b/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/mapper/RoleMapper.xml
@@ -21,11 +21,11 @@
     </resultMap>
 
     <select id="selectRolePage" resultMap="roleResultMap">
-        select * from blade_role where is_deleted = 0
+        select * from pl_org_role where is_deleted = 0
     </select>
 
     <select id="tree" resultMap="treeNodeResultMap">
-        select id, parent_id, role_name as title, id as "value", id as "key" from blade_role where is_deleted = 0
+        select id, parent_id, role_name as title, id as "value", id as "key" from pl_org_role where is_deleted = 0
         <if test="param1!=null">
             and tenant_id = #{param1}
         </if>
@@ -38,7 +38,7 @@
         SELECT
         role_name
         FROM
-        blade_role
+        pl_org_role
         WHERE
         id IN
         <foreach collection="array" item="ids" index="index" open="(" close=")" separator=",">
@@ -51,7 +51,7 @@
         SELECT
         role_alias
         FROM
-        blade_role
+        pl_org_role
         WHERE
         id IN
         <foreach collection="array" item="ids" index="index" open="(" close=")" separator=",">
diff --git a/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/mapper/RoleMenuMapper.xml b/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/mapper/RoleMenuMapper.xml
index 0aed43e..ea7f060 100644
--- a/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/mapper/RoleMenuMapper.xml
+++ b/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/mapper/RoleMenuMapper.xml
@@ -10,7 +10,7 @@
     </resultMap>
 
     <select id="selectRoleMenuPage" resultMap="roleMenuResultMap">
-        select * from blade_role_menu where is_deleted = 0
+        select * from pl_org_role_menu where is_deleted = 0
     </select>
 
 </mapper>
diff --git a/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/mapper/TenantMapper.xml b/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/mapper/TenantMapper.xml
index ea11951..7845141 100644
--- a/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/mapper/TenantMapper.xml
+++ b/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/mapper/TenantMapper.xml
@@ -18,14 +18,12 @@
         <result column="linkman" property="linkman"/>
         <result column="contact_number" property="contactNumber"/>
         <result column="address" property="address"/>
-        <result column="account_number" property="accountNumber"/>
-        <result column="expire_time" property="expireTime"/>
         <result column="license_key" property="licenseKey"/>
     </resultMap>
 
 
     <select id="selectTenantPage" resultMap="tenantResultMap">
-        select * from blade_tenant where is_deleted = 0
+        select * from pl_org_tenant where is_deleted = 0
     </select>
 
 </mapper>
diff --git a/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/service/ITenantService.java b/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/service/ITenantService.java
index b2eceb5..14b3521 100644
--- a/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/service/ITenantService.java
+++ b/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/service/ITenantService.java
@@ -19,9 +19,11 @@
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import org.springblade.core.mp.base.BaseService;
 import org.springblade.system.entity.Tenant;
+import org.springblade.system.vo.TenantVO;
 
 import java.util.Date;
 import java.util.List;
+import java.util.Map;
 
 /**
  * 鏈嶅姟绫�
@@ -53,7 +55,7 @@
 	 * @param tenant
 	 * @return
 	 */
-	boolean submitTenant(Tenant tenant);
+	boolean submitTenant(TenantVO tenant);
 
 	/**
 	 * 鍒犻櫎
@@ -71,6 +73,19 @@
 	 * @param ids
 	 * @return
 	 */
-	boolean setting(Integer accountNumber, Date expireTime, String ids);
+	//boolean setting(Integer accountNumber, Date expireTime, String ids);
+
+	/**
+	 * 鏌ヨ绉熸埛id锛坘ey锛夛細绉熸埛鍚嶏紙value锛�
+	 * @return
+	 */
+	List<Map<String,Object>> selectMaps();
+
+	/**
+	 * 鏌ヨ鏄惁閰嶇疆鏈夐粯璁ゅ繀椤诲紑鍚笁鍛樼鐞�
+	 *
+	 * @return
+	 */
+	boolean findIsOpen();
 
 }
diff --git a/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/service/impl/TenantServiceImpl.java b/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/service/impl/TenantServiceImpl.java
index 5fcbc3c..bcb74b6 100644
--- a/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/service/impl/TenantServiceImpl.java
+++ b/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/service/impl/TenantServiceImpl.java
@@ -16,10 +16,16 @@
  */
 package org.springblade.system.service.impl;
 
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.toolkit.IdWorker;
+import com.baomidou.mybatisplus.core.toolkit.StringUtils;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import javafx.geometry.Pos;
 import lombok.AllArgsConstructor;
+import lombok.RequiredArgsConstructor;
+import org.apache.ibatis.mapping.Environment;
+import org.springblade.common.constant.TenantConstant;
 import org.springblade.core.cache.utils.CacheUtil;
 import org.springblade.core.log.exception.ServiceException;
 import org.springblade.core.mp.base.BaseServiceImpl;
@@ -38,13 +44,17 @@
 import org.springblade.system.user.entity.User;
 import org.springblade.system.user.enums.UserEnum;
 import org.springblade.system.user.feign.IUserClient;
+import org.springblade.system.vo.TenantVO;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
+import org.springframework.web.bind.annotation.PostMapping;
 
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.LinkedList;
-import java.util.List;
+import javax.annotation.PostConstruct;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.util.*;
 import java.util.stream.Collectors;
 
 import static org.springblade.common.constant.TenantConstant.*;
@@ -56,7 +66,7 @@
  * @author Chill
  */
 @Service
-@AllArgsConstructor
+@RequiredArgsConstructor
 public class TenantServiceImpl extends BaseServiceImpl<TenantMapper, Tenant> implements ITenantService {
 
 	private final TenantId tenantId;
@@ -67,6 +77,25 @@
 	private final IRoleMenuService roleMenuService;
 	private final IDictBizService dictBizService;
 	private final IUserClient userClient;
+	/**
+	 * 鑾峰彇鏄惁鍏佽鑷鎺у埗涓夊憳鏄惁寮�鍚�
+	 */
+	@Value("${ssa.ssa-enable}")
+	private Boolean ssaEnable;
+	/**
+	 * 鑾峰彇榛樿涓夊憳绠$悊鍛樼殑鍚嶇О
+	 */
+	@Value("#{'${ssa.ssa-names}'.split(',')}")
+	private List<String> ssaNames;
+	/**
+	 * 涓夊憳绠$悊鑿滃崟閰嶇疆
+	 */
+	@Value("#{'${ssa.sys-menus}'.split(',')}")
+	private List<String> sysMenus;
+	@Value("#{'${ssa.sec-menus}'.split(',')}")
+	private List<String> secMenus;
+	@Value("#{'${ssa.audit-menus}'.split(',')}")
+	private List<String> auditMenus;
 
 	@Override
 	public IPage<Tenant> selectTenantPage(IPage<Tenant> page, Tenant tenant) {
@@ -80,82 +109,79 @@
 
 	@Override
 	@Transactional(rollbackFor = Exception.class)
-	public boolean submitTenant(Tenant tenant) {
+	public boolean submitTenant(TenantVO tenant) {
 		if (Func.isEmpty(tenant.getId())) {
+			// 鑾峰彇鍒版湭鍒犻櫎绉熸埛鎬绘暟锛岀敓鎴愭柊鐨勭鎴穒d
 			List<Tenant> tenants = baseMapper.selectList(Wrappers.<Tenant>query().lambda().eq(Tenant::getIsDeleted, BladeConstant.DB_NOT_DELETED));
 			List<String> codes = tenants.stream().map(Tenant::getTenantId).collect(Collectors.toList());
 			String tenantId = getTenantId(codes);
 			tenant.setTenantId(tenantId);
-			// 鑾峰彇鍙傛暟閰嶇疆鐨勮处鍙烽搴�
-			int accountNumber = Func.toInt(ParamCache.getValue(ACCOUNT_NUMBER_KEY), DEFAULT_ACCOUNT_NUMBER);
-			tenant.setAccountNumber(accountNumber);
-			// 鏂板缓绉熸埛瀵瑰簲鐨勯粯璁よ鑹�
-			Role role = new Role();
-			role.setTenantId(tenantId);
-			role.setParentId(BladeConstant.TOP_PARENT_ID);
-			role.setRoleName("绠$悊鍛�");
-			role.setRoleAlias("admin");
-			role.setSort(2);
-			role.setIsDeleted(BladeConstant.DB_NOT_DELETED);
-			roleService.save(role);
-			// 鏂板缓绉熸埛瀵瑰簲鐨勮鑹茶彍鍗曟潈闄�
-			LinkedList<Menu> userMenus = new LinkedList<>();
-			// 鑾峰彇鍙傛暟閰嶇疆鐨勯粯璁よ彍鍗曢泦鍚堬紝閫楀彿闅斿紑
-			List<String> menuCodes = Func.toStrList(ParamCache.getValue(ACCOUNT_MENU_CODE_KEY));
-			List<Menu> menus = getMenus((menuCodes.size() > 0 ? menuCodes : MENU_CODES), userMenus);
-			List<RoleMenu> roleMenus = new ArrayList<>();
-			menus.forEach(menu -> {
-				RoleMenu roleMenu = new RoleMenu();
-				roleMenu.setMenuId(menu.getId());
-				roleMenu.setRoleId(role.getId());
-				roleMenus.add(roleMenu);
-			});
-			roleMenuService.saveBatch(roleMenus);
-			// 鏂板缓绉熸埛瀵瑰簲鐨勯粯璁ら儴闂�
-			Dept dept = new Dept();
-			dept.setTenantId(tenantId);
-			dept.setParentId(BladeConstant.TOP_PARENT_ID);
-			dept.setAncestors(String.valueOf(BladeConstant.TOP_PARENT_ID));
-			dept.setDeptName(tenant.getTenantName());
-			dept.setFullName(tenant.getTenantName());
-			dept.setDeptCategory(1);
-			dept.setSort(2);
-			dept.setIsDeleted(BladeConstant.DB_NOT_DELETED);
-			deptService.save(dept);
-			// 鏂板缓绉熸埛瀵瑰簲鐨勯粯璁ゅ矖浣�
-			Post post = new Post();
-			post.setTenantId(tenantId);
-			post.setCategory(1);
-			post.setPostCode("ceo");
-			post.setPostName("棣栧腑鎵ц瀹�");
-			post.setSort(1);
-			postService.save(post);
-			// 鏂板缓绉熸埛瀵瑰簲鐨勯粯璁や笟鍔″瓧鍏�
-			LinkedList<DictBiz> dictBizs = new LinkedList<>();
-			List<DictBiz> dictBizList = getDictBizs(tenantId, dictBizs);
-			dictBizService.saveBatch(dictBizList);
-			// 鏂板缓绉熸埛瀵瑰簲鐨勯粯璁ょ鐞嗙敤鎴�
-			User user = new User();
-			user.setTenantId(tenantId);
-			user.setName("admin");
-			user.setRealName("admin");
-			user.setAccount("admin");
-			// 鑾峰彇鍙傛暟閰嶇疆鐨勫瘑鐮�
-			String password = Func.toStr(ParamCache.getValue(PASSWORD_KEY), DEFAULT_PASSWORD);
-			user.setPassword(password);
-			user.setRoleId(String.valueOf(role.getId()));
-			user.setDeptId(String.valueOf(dept.getId()));
-			user.setPostId(String.valueOf(post.getId()));
-			user.setBirthday(new Date());
-			user.setSex(1);
-			user.setUserType(UserEnum.WEB.getCategory());
-			user.setIsDeleted(BladeConstant.DB_NOT_DELETED);
-			boolean temp = super.saveOrUpdate(tenant);
-			R<Boolean> result = userClient.saveUser(user);
-			if (!result.isSuccess()) {
-				throw new ServiceException(result.getMsg());
+			// 閰嶇疆涓篺alse锛屽苟涓斿墠绔紶杈撶殑鍙傛暟涓篺alse灏变笉闇�瑕佸垱寤轰笁鍛�
+			if(!this.ssaEnable && !tenant.getMembersFlag()){
+				// 涓嶅紑鍚笁鍛樼鐞嗘椂鐩存帴鍒涘缓涓�涓渶楂樻潈闄愮殑绠$悊鍛�
+				Role role = new Role(tenantId,BladeConstant.TOP_PARENT_ID,"瓒呯骇绠$悊鍛�",1,"admin",BladeConstant.DB_NOT_DELETED);
+				roleService.save(role);
+				// 鏂板缓绉熸埛瀵瑰簲鐨勮鑹茶彍鍗曟潈闄�
+				saveRoleMenus(role, MENU_CODES);
+				// 鏂板缓绉熸埛瀵瑰簲鐨勯粯璁ら儴闂�
+				Dept dept = generateDept(tenantId, tenant);
+				deptService.save(dept);
+				// 鏂板缓绉熸埛瀵瑰簲鐨勯粯璁ゅ矖浣�
+				Post postInfo = generatePost(tenantId, 1, "ceo", "棣栧腑鎵ц瀹�", 1);
+				postService.save(postInfo);
+				// 鏂板缓绉熸埛瀵瑰簲鐨勯粯璁や笟鍔″瓧鍏�
+				LinkedList<DictBiz> dictBizs = new LinkedList<>();
+				List<DictBiz> dictBizList = getDictBizs(tenantId, dictBizs);
+				dictBizService.saveBatch(dictBizList);
+				// 鏂板缓绉熸埛瀵瑰簲鐨勯粯璁ょ鐞嗙敤鎴�
+				User userInfo = generateUser(tenantId, role, dept, postInfo);
+				// 鍏堜繚瀛樼鎴�
+				boolean temp = super.saveOrUpdate(tenant);
+				// 鍒涘缓鐢ㄦ埛
+				R<Boolean> result = userClient.saveUser(userInfo);
+				if (!result.isSuccess()) {
+					throw new ServiceException(result.getMsg());
+				}
+				return temp;
+			}else {
+				// 鏂板缓绉熸埛瀵瑰簲鐨勯粯璁よ鑹�
+				List<Role> roles = new ArrayList<>();
+				Role roleSys = new Role(tenantId,BladeConstant.TOP_PARENT_ID,"绯荤粺绠$悊鍛�",1,this.ssaNames.get(0),BladeConstant.DB_NOT_DELETED);
+				Role roleSec = new Role(tenantId,BladeConstant.TOP_PARENT_ID,"瀹夊叏绠$悊鍛�",2,this.ssaNames.get(1),BladeConstant.DB_NOT_DELETED);
+				Role roleAudit = new Role(tenantId,BladeConstant.TOP_PARENT_ID,"瀹¤绠$悊鍛�",3,this.ssaNames.get(2),BladeConstant.DB_NOT_DELETED);
+				roles.add(roleSys);
+				roles.add(roleSec);
+				roles.add(roleAudit);
+				roleService.saveBatch(roles);
+				// 鏂板缓绉熸埛瀵瑰簲鐨勮鑹茶彍鍗曟潈闄�
+				saveRoleMenus(roleSys,this.sysMenus); //绯荤粺绠$悊鍛樿鑹茶彍鍗曟潈闄�
+				saveRoleMenus(roleSec,this.secMenus); //瀹夊叏绠$悊鍛樿鑹茶彍鍗曟潈闄�
+				saveRoleMenus(roleAudit,this.auditMenus); //瀹¤绠$悊鍛樿鑹茶彍鍗曟潈闄�
+				// 鏂板缓绉熸埛瀵瑰簲鐨勯粯璁ら儴闂�
+				Dept dept = generateDept(tenantId, tenant);
+				deptService.save(dept);
+				// 鏂板缓绉熸埛瀵瑰簲鐨勯粯璁ゅ矖浣�
+				Post postCeo = generatePost(tenantId, 1, "sysAdmin", "绯荤粺绠$悊鍛�", 1);
+				Post postCto = generatePost(tenantId,1,"secAdmin","瀹夊叏绠$悊鍛�",4);
+				Post postCio = generatePost(tenantId,1,"auditAdmin","瀹¤绠$悊鍛�",5);
+				postService.saveBatch(Arrays.asList(postCeo,postCto,postCio));
+				// 鏂板缓绉熸埛瀵瑰簲鐨勯粯璁や笟鍔″瓧鍏�
+				LinkedList<DictBiz> dictBizs = new LinkedList<>();
+				List<DictBiz> dictBizList = getDictBizs(tenantId, dictBizs);
+				dictBizService.saveBatch(dictBizList);
+				// 鏂板缓绉熸埛瀵瑰簲鐨勯粯璁ょ鐞嗙敤鎴�
+				User userSys = generateUser(tenantId, roleSys, dept, postCeo);
+				User userSec = generateUser(tenantId,roleSec,dept,postCto);
+				User userAudit = generateUser(tenantId,roleAudit,dept,postCio);
+				// 鍏堜繚瀛樼鎴�
+				boolean temp = super.saveOrUpdate(tenant);
+				// 鍒涘缓鐢ㄦ埛
+				R<Boolean> result = userClient.saveUserList(Arrays.asList(userSys,userSec,userAudit));
+				if (!result.isSuccess()) {
+					throw new ServiceException(result.getMsg());
+				}
+				return temp;
 			}
-			return temp;
 		} else {
 			CacheUtil.clear(SYS_CACHE, tenant.getTenantId());
 			return super.saveOrUpdate(tenant);
@@ -180,22 +206,87 @@
 	}
 
 	@Override
-	public boolean setting(Integer accountNumber, Date expireTime, String ids) {
-		List<String> tenantIds = this.list(Wrappers.<Tenant>query().lambda().in(Tenant::getId, ids))
-			.stream().map(tenant -> Func.toStr(tenant.getTenantId())).distinct().collect(Collectors.toList());
-		CacheUtil.clear(SYS_CACHE, tenantIds);
-		Func.toLongList(ids).forEach(id -> {
-			Kv kv = Kv.create().set("accountNumber", accountNumber).set("expireTime", expireTime).set("id", id);
-			String licenseKey = DesUtil.encryptToHex(JsonUtil.toJson(kv), DES_KEY);
-			update(
-				Wrappers.<Tenant>update().lambda()
-					.set(Tenant::getAccountNumber, accountNumber)
-					.set(Tenant::getExpireTime, expireTime)
-					.set(Tenant::getLicenseKey, licenseKey)
-					.eq(Tenant::getId, id)
-			);
+	public List<Map<String,Object>> selectMaps(){
+		List<Map<String, Object>> maps = listMaps(new QueryWrapper<Tenant>().select("TENANT_ID", "TENANT_NAME"));
+		System.out.println(maps);
+		return maps;
+	}
+
+	@Override
+	public boolean findIsOpen() {
+		return this.ssaEnable;
+	}
+
+	/**
+	 * 鍒涘缓绉熸埛涓嬬殑榛樿宀椾綅
+	 * @param tenantId
+	 * @param sort
+	 */
+	private Post generatePost(String tenantId,Integer categ,String postCode,String postName,Integer sort){
+		Post post = new Post();
+		post.setTenantId(tenantId);
+		post.setCategory(categ);
+		post.setPostCode(postCode);
+		post.setPostName(postName);
+		post.setSort(sort);
+		return post;
+	}
+
+	/**
+	 * 鍒涘缓榛樿鐢ㄦ埛锛屽苟杩涜鐩稿叧鏉冮檺璁剧疆
+	 */
+	private User generateUser(String tenantId, Role role, Dept dept, Post post){
+		User user = new User();
+		user.setTenantId(tenantId);
+		user.setName(role.getRoleAlias());
+		user.setRealName(role.getRoleName());
+		user.setAccount(role.getRoleAlias());
+		// 鑾峰彇鍙傛暟閰嶇疆鐨勫瘑鐮�
+		String password = Func.toStr(ParamCache.getValue(PASSWORD_KEY), DEFAULT_PASSWORD);
+		user.setPassword(password);
+		user.setRoleId(String.valueOf(role.getId()));
+		user.setDeptId(String.valueOf(dept.getId()));
+		user.setPostId(String.valueOf(post.getId()));
+		user.setBirthday(new Date());
+		user.setSex(1);
+		user.setUserType(UserEnum.WEB.getCategory());
+		user.setIsDeleted(BladeConstant.DB_NOT_DELETED);
+		return user;
+	}
+
+	/**
+	 * 淇濆瓨鐢ㄦ埛瀵瑰簲鐨勫叧鑱斾俊鎭�
+	 * @param role
+	 */
+	private void saveRoleMenus(Role role,List<String> stringMenus){
+		LinkedList<Menu> userMenus = new LinkedList<>();
+		// 鑾峰彇鍙傛暟閰嶇疆鐨勯粯璁よ彍鍗曢泦鍚堬紝閫楀彿闅斿紑
+		List<String> menuCodes = Func.toStrList(ParamCache.getValue(ACCOUNT_MENU_CODE_KEY));
+		List<Menu> menus = getMenus((menuCodes.size() > 0 ? menuCodes : stringMenus), userMenus);
+		List<RoleMenu> roleMenus = new ArrayList<>();
+		//鍒涘缓鎵�鏈夎彍鍗曡鑹插叧鑱斿璞�
+		menus.forEach(menu -> {
+			roleMenus.add(new RoleMenu(menu.getId(),role.getId()));
 		});
-		return true;
+		roleMenuService.saveBatch(roleMenus);
+	}
+
+	/**
+	 * 鍒涘缓榛樿閮ㄩ棬
+	 * @param tenantId
+	 * @param tenant
+	 */
+	private Dept generateDept(String tenantId,Tenant tenant){
+		Dept dept = new Dept();
+		dept.setTenantId(tenantId);
+		dept.setParentId(BladeConstant.TOP_PARENT_ID);
+		dept.setAncestors(String.valueOf(BladeConstant.TOP_PARENT_ID));
+		dept.setDeptName(tenant.getTenantName());
+		dept.setFullName(tenant.getTenantName());
+		dept.setDeptCategory(1);
+		dept.setSort(2);
+		dept.setIsDeleted(BladeConstant.DB_NOT_DELETED);
+		return dept;
 	}
 
 	private String getTenantId(List<String> codes) {
@@ -248,6 +339,5 @@
 			recursionDictBiz(tenantId, oldSubParentId, newSubParentId, dictBizs);
 		});
 	}
-
 
 }
diff --git a/Source/BladeX/blade-service/blade-system/src/main/resources/application-dev.yml b/Source/BladeX/blade-service/blade-system/src/main/resources/application-dev.yml
index 216bd19..29c1f3e 100644
--- a/Source/BladeX/blade-service/blade-system/src/main/resources/application-dev.yml
+++ b/Source/BladeX/blade-service/blade-system/src/main/resources/application-dev.yml
@@ -1,10 +1,10 @@
 #鏈嶅姟鍣ㄧ鍙�
 server:
-  port: 8106
+  port: 36011
 
 #鏁版嵁婧愰厤缃�
 spring:
   datasource:
     url: ${blade.datasource.dev.url}
     username: ${blade.datasource.dev.username}
-    password: ${blade.datasource.dev.password}
\ No newline at end of file
+    password: ${blade.datasource.dev.password}
diff --git a/Source/BladeX/blade-service/blade-user/Dockerfile b/Source/BladeX/blade-service/blade-user/Dockerfile
index 9c40e6c..6fbd688 100644
--- a/Source/BladeX/blade-service/blade-user/Dockerfile
+++ b/Source/BladeX/blade-service/blade-user/Dockerfile
@@ -6,10 +6,10 @@
 
 WORKDIR /blade/user
 
-EXPOSE 8102
+EXPOSE 36012
 
 ADD ./target/blade-user.jar ./app.jar
 
 ENTRYPOINT ["java", "-Djava.security.egd=file:/dev/./urandom", "-jar", "app.jar"]
 
-CMD ["--spring.profiles.active=test"]
+CMD ["--spring.profiles.active=dev"]
diff --git a/Source/BladeX/blade-service/blade-user/pom.xml b/Source/BladeX/blade-service/blade-user/pom.xml
index 66c269c..f9e3259 100644
--- a/Source/BladeX/blade-service/blade-user/pom.xml
+++ b/Source/BladeX/blade-service/blade-user/pom.xml
@@ -38,6 +38,15 @@
             <artifactId>blade-system-api</artifactId>
             <version>${bladex.project.version}</version>
         </dependency>
+        <dependency>
+            <groupId>com.oracle.database.jdbc</groupId>
+            <artifactId>ojdbc8</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>cn.easyproject</groupId>
+            <artifactId>orai18n</artifactId>
+            <version>${orai18n.version}</version>
+        </dependency>
     </dependencies>
 
     <build>
diff --git a/Source/BladeX/blade-service/blade-user/src/main/java/org/springblade/system/user/feign/UserClient.java b/Source/BladeX/blade-service/blade-user/src/main/java/org/springblade/system/user/feign/UserClient.java
index 3e790ef..37eba38 100644
--- a/Source/BladeX/blade-service/blade-user/src/main/java/org/springblade/system/user/feign/UserClient.java
+++ b/Source/BladeX/blade-service/blade-user/src/main/java/org/springblade/system/user/feign/UserClient.java
@@ -31,6 +31,8 @@
 import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RestController;
 
+import java.util.List;
+
 /**
  * 鐢ㄦ埛鏈嶅姟Feign瀹炵幇绫�
  *
@@ -80,6 +82,12 @@
 	}
 
 	@Override
+	@PostMapping(SAVE_USER_LIST)
+	public R<Boolean> saveUserList(List<User> users) {
+		return R.data(service.submitList(users));
+	}
+
+	@Override
 	@PostMapping(REMOVE_USER)
 	public R<Boolean> removeUser(String tenantIds) {
 		return R.data(service.remove(Wrappers.<User>query().lambda().in(User::getTenantId, Func.toStrList(tenantIds))));
diff --git a/Source/BladeX/blade-service/blade-user/src/main/java/org/springblade/system/user/mapper/UserMapper.xml b/Source/BladeX/blade-service/blade-user/src/main/java/org/springblade/system/user/mapper/UserMapper.xml
index 307340e..86c72ef 100644
--- a/Source/BladeX/blade-service/blade-user/src/main/java/org/springblade/system/user/mapper/UserMapper.xml
+++ b/Source/BladeX/blade-service/blade-user/src/main/java/org/springblade/system/user/mapper/UserMapper.xml
@@ -28,7 +28,7 @@
     </resultMap>
 
     <select id="selectUserPage" resultMap="userResultMap">
-        select * from blade_user where is_deleted = 0
+        select * from pl_org_user where is_deleted = 0
         <if test="tenantId!=null and tenantId != ''">
             and tenant_id = #{tenantId}
         </if>
@@ -49,7 +49,7 @@
             SELECT
             user_id
             FROM
-            blade_user_dept
+            pl_org_user_dept
             WHERE
             dept_id IN
             <foreach collection="deptIdList" index="index" item="item" open="(" separator="," close=")">
@@ -64,13 +64,13 @@
         SELECT
             *
         FROM
-            blade_user
+            pl_org_user
         WHERE
             tenant_id = #{param1} and account = #{param2} and is_deleted = 0
     </select>
 
     <select id="exportUser" resultType="org.springblade.system.user.excel.UserExcel">
-        SELECT id, tenant_id, user_type, account, name, real_name, email, phone, birthday, role_id, dept_id, post_id FROM blade_user ${ew.customSqlSegment}
+        SELECT id, tenant_id, user_type, account, name, real_name, email, phone, birthday, role_id, dept_id, post_id FROM pl_org_user ${ew.customSqlSegment}
     </select>
 
 </mapper>
diff --git a/Source/BladeX/blade-service/blade-user/src/main/java/org/springblade/system/user/service/IUserService.java b/Source/BladeX/blade-service/blade-user/src/main/java/org/springblade/system/user/service/IUserService.java
index 9f0f3de..239a0a2 100644
--- a/Source/BladeX/blade-service/blade-user/src/main/java/org/springblade/system/user/service/IUserService.java
+++ b/Source/BladeX/blade-service/blade-user/src/main/java/org/springblade/system/user/service/IUserService.java
@@ -46,6 +46,14 @@
 	boolean submit(User user);
 
 	/**
+	 * 鎵归噺鏂板鐢ㄦ埛
+	 *
+	 * @param users
+	 * @return
+	 */
+	boolean submitList(List<User> users);
+
+	/**
 	 * 淇敼鐢ㄦ埛
 	 *
 	 * @param user
diff --git a/Source/BladeX/blade-service/blade-user/src/main/java/org/springblade/system/user/service/impl/UserServiceImpl.java b/Source/BladeX/blade-service/blade-user/src/main/java/org/springblade/system/user/service/impl/UserServiceImpl.java
index 9b0ada5..796acf4 100644
--- a/Source/BladeX/blade-service/blade-user/src/main/java/org/springblade/system/user/service/impl/UserServiceImpl.java
+++ b/Source/BladeX/blade-service/blade-user/src/main/java/org/springblade/system/user/service/impl/UserServiceImpl.java
@@ -38,6 +38,7 @@
 import org.springblade.system.cache.DictCache;
 import org.springblade.system.cache.ParamCache;
 import org.springblade.system.cache.SysCache;
+import org.springblade.system.entity.RoleMenu;
 import org.springblade.system.entity.Tenant;
 import org.springblade.system.enums.DictEnum;
 import org.springblade.system.feign.ISysClient;
@@ -84,18 +85,6 @@
 		}
 		String tenantId = user.getTenantId();
 		Tenant tenant = SysCache.getTenant(tenantId);
-		if (Func.isNotEmpty(tenant)) {
-			Integer accountNumber = tenant.getAccountNumber();
-			if (tenantProperties.getLicense()) {
-				String licenseKey = tenant.getLicenseKey();
-				String decrypt = DesUtil.decryptFormHex(licenseKey, TenantConstant.DES_KEY);
-				accountNumber = JsonUtil.parse(decrypt, Tenant.class).getAccountNumber();
-			}
-			Long tenantCount = baseMapper.selectCount(Wrappers.<User>query().lambda().eq(User::getTenantId, tenantId));
-			if (accountNumber != null && accountNumber > 0 && accountNumber <= tenantCount) {
-				throw new ServiceException("褰撳墠绉熸埛宸插埌鏈�澶ц处鍙烽搴�!");
-			}
-		}
 		if (Func.isNotEmpty(user.getPassword())) {
 			user.setPassword(DigestUtil.encrypt(user.getPassword()));
 		}
@@ -108,6 +97,28 @@
 
 	@Override
 	@Transactional(rollbackFor = Exception.class)
+	public boolean submitList(List<User> users) {
+		Boolean flag = true;
+		for (User user : users){
+			if (StringUtil.isBlank(user.getTenantId())) {
+				user.setTenantId(BladeConstant.ADMIN_TENANT_ID);
+			}
+			String tenantId = user.getTenantId();
+			if (Func.isNotEmpty(user.getPassword())) {
+				user.setPassword(DigestUtil.encrypt(user.getPassword()));
+			}
+			Long userCount = baseMapper.selectCount(Wrappers.<User>query().lambda().eq(User::getTenantId, tenantId).eq(User::getAccount, user.getAccount()));
+			if (userCount > 0L && Func.isEmpty(user.getId())) {
+				throw new ServiceException(StringUtil.format("褰撳墠鐢ㄦ埛 [{}] 宸插瓨鍦�!", user.getAccount()));
+			}
+			flag = save(user) && submitUserDept(user);
+
+		}
+		return flag;
+	}
+
+	@Override
+	@Transactional(rollbackFor = Exception.class)
 	public boolean updateUser(User user) {
 		String tenantId = user.getTenantId();
 		Long userCount = baseMapper.selectCount(
diff --git a/Source/BladeX/blade-service/blade-user/src/main/resources/application-dev.yml b/Source/BladeX/blade-service/blade-user/src/main/resources/application-dev.yml
index 2d9323b..5ce5be4 100644
--- a/Source/BladeX/blade-service/blade-user/src/main/resources/application-dev.yml
+++ b/Source/BladeX/blade-service/blade-user/src/main/resources/application-dev.yml
@@ -1,7 +1,6 @@
 #鏈嶅姟鍣ㄧ鍙�
 server:
-  port: 8102
-
+  port: 36012
 #鏁版嵁婧愰厤缃�
 spring:
   datasource:
diff --git a/Source/BladeX/blade-service/pom.xml b/Source/BladeX/blade-service/pom.xml
index 38d2725..cf8ecd8 100644
--- a/Source/BladeX/blade-service/pom.xml
+++ b/Source/BladeX/blade-service/pom.xml
@@ -5,7 +5,7 @@
 
     <parent>
         <groupId>org.springblade</groupId>
-        <artifactId>BladeX</artifactId>
+        <artifactId>UBCS</artifactId>
         <version>3.0.1.RELEASE</version>
     </parent>
 
diff --git a/Source/BladeX/pom.xml b/Source/BladeX/pom.xml
index 7c83b8b..4ec9634 100644
--- a/Source/BladeX/pom.xml
+++ b/Source/BladeX/pom.xml
@@ -4,7 +4,7 @@
     <modelVersion>4.0.0</modelVersion>
 
     <groupId>org.springblade</groupId>
-    <artifactId>BladeX</artifactId>
+    <artifactId>UBCS</artifactId>
     <version>3.0.1.RELEASE</version>
     <packaging>pom</packaging>
 
@@ -12,10 +12,10 @@
         <bladex.project.version>3.0.1.RELEASE</bladex.project.version>
 
         <java.version>1.8</java.version>
-        <maven.plugin.version>3.8.1</maven.plugin.version>
+        <maven.plugin.version>3.8.0</maven.plugin.version>
         <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
         <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
-
+        <orai18n.version>11.2.0.4</orai18n.version>
         <spring.boot.version>2.7.1</spring.boot.version>
         <spring.cloud.version>2021.0.3</spring.cloud.version>
         <spring.platform.version>Cairo-SR8</spring.platform.version>
diff --git a/Source/BladeX/service-start.sh b/Source/BladeX/service-start.sh
new file mode 100644
index 0000000..92d332b
--- /dev/null
+++ b/Source/BladeX/service-start.sh
@@ -0,0 +1,70 @@
+#妫�鏌ョ▼搴忔槸鍚﹀湪杩愯
+start(){
+
+  #鍏堟竻绌簍arget骞舵墦鍖�
+ mvn clean package
+
+  #鍚姩admin鏈嶅姟
+ docker build -f ./blade-ops/blade-admin/Dockerfile -t bladex/blade-admin .
+ docker run -d -p 36002:36002 --name blade-admin bladex/blade-admin:latest
+
+ #鍚姩auth鏈嶅姟
+ docker build -f ./blade-auth/Dockerfile -t bladex/blade-auth .
+ docker run -d -p 36001:36001 --name blade-auth bladex/blade-auth:latest
+
+ #鍚姩log鏈嶅姟
+ docker build -f ./blade-ops/blade-log/Dockerfile -t bladex/blade-log .
+ docker run -d -p 36005:36005 --name blade-log bladex/blade-log:latest
+
+ #鍚姩desk鏈嶅姟
+ docker build -f ./blade-service/blade-desk/Dockerfile -t bladex/blade-desk .
+ docker run -d -p 36010:36010 --name blade-desk bladex/blade-desk:latest
+
+  #鍚姩宸ヤ綔娴乫low鏈嶅姟
+ docker build -f ./blade-ops/blade-flow/Dockerfile -t bladex/blade-flow .
+ docker run -d -p 36004:36004 --name blade-flow bladex/blade-flow:latest
+
+ #鍚姩develop鏈嶅姟
+ docker build -f ./blade-ops/blade-develop/Dockerfile -t bladex/blade-develop .
+ docker run -d -p 36003:36003 --name blade-develop bladex/blade-develop:latest
+
+ #鍚姩jobAdmin鏈嶅姟
+ docker build -f ./blade-ops/blade-xxljob-admin/Dockerfile -t bladex/blade-jobadmin .
+ docker run -d -p 36013:36013 --name blade-jobadmin bladex/blade-jobadmin:latest
+
+ #鍚姩job鏈嶅姟
+ docker build -f ./blade-ops/blade-xxljob/Dockerfile -t bladex/blade-job .
+ docker run -d -p 36009:36009 --name blade-job bladex/blade-job:latest
+
+ #鍚姩report鏈嶅姟
+ docker build -f ./blade-ops/blade-report/Dockerfile -t bladex/blade-report .
+ docker run -d -p 36006:36006 --name blade-report bladex/blade-report:latest
+
+ #鍚姩resource鏈嶅姟
+ docker build -f ./blade-ops/blade-resource/Dockerfile -t bladex/blade-resource .
+ docker run -d -p 36007:36007 --name blade-resource bladex/blade-resource:latest
+
+ #鍚姩swagger鏈嶅姟
+ docker build -f ./blade-ops/blade-swagger/Dockerfile -t bladex/blade-swagger .
+ docker run -d -p 36008:36008 --name blade-swagger bladex/blade-swagger:latest
+
+ #鍚姩system鏈嶅姟
+ docker build -f ./blade-service/blade-system/Dockerfile -t bladex/blade-system .
+ docker run -d -p 36011:36011 --name blade-system bladex/blade-system:latest
+
+ #鍚姩user鏈嶅姟
+ docker build -f ./blade-service/blade-user/Dockerfile -t bladex/blade-user .
+ docker run -d -p 36012:36012 --name blade-user bladex/blade-user:latest
+
+ #鍚姩gateway鏈嶅姟
+ docker build -f ./blade-gateway/Dockerfile -t bladex/blade-gateway .
+ docker run -d -p 37000:37000 --name blade-gateway bladex/blade-gateway:latest
+
+}
+
+start
+
+
+
+
+
diff --git a/Source/BladeX/service-stop.sh b/Source/BladeX/service-stop.sh
new file mode 100644
index 0000000..738a334
--- /dev/null
+++ b/Source/BladeX/service-stop.sh
@@ -0,0 +1,173 @@
+#鍋滄鏂规硶瀹瑰櫒鍜屽垹闄ゅ搴旈暅鍍忔柟娉�
+stop(){
+    #瀹氫箟瀹瑰櫒鍜岄暅鍍忕殑鍚嶇О
+    imagesName=bladex/blade-auth
+    containerName=blade-auth:latest
+    #濡傛灉瀛樺湪锛屽氨鍏抽棴骞朵笖鍒犻櫎璇ュ鍣�
+    if [[ -n $(docker ps -q -f "name=$containerName") ]];then
+         echo $containerName"is up,we will stop and remove it !!!"
+         docker stop $containerName
+         docker rm $containerName
+         docker rmi $imagesName
+    else
+         echo $containerName" is not up!!!"
+    fi
+
+    imagesName=bladex/blade-admin
+    containerName=blade-admin:latest
+    if [[ -n $(docker ps -q -f "name=$containerName") ]];then
+             echo $containerName"is up,we will stop and remove it !!!"
+             docker stop $containerName
+             docker rm $containerName
+             docker rmi $imagesName
+        else
+             echo $containerName" is not up!!!"
+        fi
+
+    imagesName=bladex/blade-auth
+    containerName=blade-auth:latest
+    if [[ -n $(docker ps -q -f "name=$containerName") ]];then
+             echo $containerName"is up,we will stop and remove it !!!"
+             docker stop $containerName
+             docker rm $containerName
+             docker rmi $imagesName
+        else
+             echo $containerName" is not up!!!"
+    fi
+
+    imagesName=bladex/blade-log
+    containerName=blade-log:latest
+    if [[ -n $(docker ps -q -f "name=$containerName") ]];then
+             echo $containerName"is up,we will stop and remove it !!!"
+             docker stop $containerName
+             docker rm $containerName
+             docker rmi $imagesName
+        else
+             echo $containerName" is not up!!!"
+    fi
+
+    imagesName=bladex/blade-desk
+    containerName=blade-desk:latest
+    if [[ -n $(docker ps -q -f "name=$containerName") ]];then
+             echo $containerName"is up,we will stop and remove it !!!"
+             docker stop $containerName
+             docker rm $containerName
+             docker rmi $imagesName
+        else
+             echo $containerName" is not up!!!"
+    fi
+
+    imagesName=bladex/blade-flow
+    containerName=blade-flow:latest
+    if [[ -n $(docker ps -q -f "name=$containerName") ]];then
+             echo $containerName"is up,we will stop and remove it !!!"
+             docker stop $containerName
+             docker rm $containerName
+             docker rmi $imagesName
+        else
+             echo $containerName" is not up!!!"
+    fi
+
+    imagesName=bladex/blade-develop
+    containerName=blade-develop:latest
+    if [[ -n $(docker ps -q -f "name=$containerName") ]];then
+             echo $containerName"is up,we will stop and remove it !!!"
+             docker stop $containerName
+             docker rm $containerName
+             docker rmi $imagesName
+        else
+             echo $containerName" is not up!!!"
+    fi
+
+    imagesName=bladex/blade-jobadmin
+    containerName=blade-jobadmin:latest
+    if [[ -n $(docker ps -q -f "name=$containerName") ]];then
+             echo $containerName"is up,we will stop and remove it !!!"
+             docker stop $containerName
+             docker rm $containerName
+             docker rmi $imagesName
+        else
+             echo $containerName" is not up!!!"
+    fi
+
+    imagesName=bladex/blade-job
+    containerName=blade-job:latest
+    if [[ -n $(docker ps -q -f "name=$containerName") ]];then
+             echo $containerName"is up,we will stop and remove it !!!"
+             docker stop $containerName
+             docker rm $containerName
+             docker rmi $imagesName
+        else
+             echo $containerName" is not up!!!"
+    fi
+
+    imagesName=bladex/blade-report
+    containerName=blade-report:latest
+    if [[ -n $(docker ps -q -f "name=$containerName") ]];then
+             echo $containerName"is up,we will stop and remove it !!!"
+             docker stop $containerName
+             docker rm $containerName
+             docker rmi $imagesName
+        else
+             echo $containerName" is not up!!!"
+    fi
+
+    imagesName=bladex/blade-resource
+    containerName=blade-resource:latest
+    if [[ -n $(docker ps -q -f "name=$containerName") ]];then
+             echo $containerName"is up,we will stop and remove it !!!"
+             docker stop $containerName
+             docker rm $containerName
+             docker rmi $imagesName
+        else
+             echo $containerName" is not up!!!"
+    fi
+
+    imagesName=bladex/blade-swagger
+    containerName=blade-swagger:latest
+    if [[ -n $(docker ps -q -f "name=$containerName") ]];then
+             echo $containerName"is up,we will stop and remove it !!!"
+             docker stop $containerName
+             docker rm $containerName
+             docker rmi $imagesName
+        else
+             echo $containerName" is not up!!!"
+    fi
+
+    imagesName=bladex/blade-system
+    containerName=blade-system:latest
+    if [[ -n $(docker ps -q -f "name=$containerName") ]];then
+             echo $containerName"is up,we will stop and remove it !!!"
+             docker stop $containerName
+             docker rm $containerName
+             docker rmi $imagesName
+        else
+             echo $containerName" is not up!!!"
+    fi
+
+    imagesName=bladex/blade-user
+    containerName=blade-user:latest
+    if [[ -n $(docker ps -q -f "name=$containerName") ]];then
+             echo $containerName"is up,we will stop and remove it !!!"
+             docker stop $containerName
+             docker rm $containerName
+             docker rmi $imagesName
+        else
+             echo $containerName" is not up!!!"
+    fi
+
+    imagesName=bladex/blade-gateway
+    containerName=blade-gateway:latest
+    if [[ -n $(docker ps -q -f "name=$containerName") ]];then
+             echo $containerName"is up,we will stop and remove it !!!"
+             docker stop $containerName
+             docker rm $containerName
+             docker rmi $imagesName
+        else
+             echo $containerName" is not up!!!"
+    fi
+
+}
+stop
+
+
diff --git "a/Source/\346\233\264\346\224\271\344\272\206\347\232\204jar\345\214\205.zip" "b/Source/\346\233\264\346\224\271\344\272\206\347\232\204jar\345\214\205.zip"
new file mode 100644
index 0000000..bfb9972
--- /dev/null
+++ "b/Source/\346\233\264\346\224\271\344\272\206\347\232\204jar\345\214\205.zip"
Binary files differ

--
Gitblit v1.9.3