ludc
2023-03-16 e12e717a045c4b5d9893ddac9135c1721e7a0cc3
上传更改过的源码jar包,上传租户管理相关功能
已修改118个文件
已添加5个文件
1527 ■■■■ 文件已修改
Source/BladeX/blade-auth/Dockerfile 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-auth/pom.xml 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-auth/src/main/java/org/springblade/auth/AuthApplication.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-auth/src/main/java/org/springblade/auth/config/BladeAuthorizationServerConfiguration.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-auth/src/main/java/org/springblade/auth/constant/AuthConstant.java 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-auth/src/main/java/org/springblade/auth/granter/CaptchaTokenGranter.java 14 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-auth/src/main/java/org/springblade/auth/service/BladeClientDetailsServiceImpl.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-auth/src/main/java/org/springblade/auth/service/BladeUserDetailsServiceImpl.java 229 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-auth/src/main/java/org/springblade/auth/utils/TokenUtil.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-auth/src/main/resources/application-dev.yml 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-auth/src/main/resources/application.yml 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-common/pom.xml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-common/src/main/java/org/springblade/common/constant/LauncherConstant.java 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-common/src/main/java/org/springblade/common/constant/TenantConstant.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-common/src/main/java/org/springblade/common/launch/LauncherServiceImpl.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-common/src/main/resources/banner.txt 12 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-gateway/Dockerfile 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-gateway/pom.xml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-gateway/src/main/resources/bootstrap.yml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-ops-api/blade-flow-api/src/main/java/org/springblade/flow/core/utils/FlowUtil.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-ops-api/blade-resource-api/src/main/java/org/springblade/resource/entity/Attach.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-ops-api/blade-resource-api/src/main/java/org/springblade/resource/entity/Oss.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-ops-api/blade-resource-api/src/main/java/org/springblade/resource/entity/Sms.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-ops-api/pom.xml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-ops/blade-admin/Dockerfile 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-ops/blade-admin/src/main/resources/bootstrap.yml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-ops/blade-develop/Dockerfile 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-ops/blade-develop/pom.xml 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-ops/blade-develop/src/main/java/org/springblade/develop/entity/Code.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-ops/blade-develop/src/main/java/org/springblade/develop/entity/Datasource.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-ops/blade-develop/src/main/java/org/springblade/develop/entity/Model.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-ops/blade-develop/src/main/java/org/springblade/develop/entity/ModelPrototype.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-ops/blade-develop/src/main/resources/application-dev.yml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-ops/blade-develop/src/test/java/org/springblade/test/CodeGenerator.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-ops/blade-flow/Dockerfile 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-ops/blade-flow/pom.xml 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-ops/blade-flow/src/main/resources/application.yml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-ops/blade-log/Dockerfile 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-ops/blade-log/pom.xml 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-ops/blade-log/src/main/resources/application-dev.yml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-ops/blade-report/Dockerfile 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-ops/blade-report/pom.xml 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-ops/blade-report/src/main/resources/application.yml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-ops/blade-resource/Dockerfile 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-ops/blade-resource/pom.xml 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-ops/blade-resource/src/main/java/org/springblade/resource/mapper/OssMapper.xml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-ops/blade-resource/src/main/java/org/springblade/resource/mapper/SmsMapper.xml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-ops/blade-resource/src/main/resources/application-dev.yml 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-ops/blade-resource/src/main/resources/application.yml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-ops/blade-swagger/Dockerfile 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-ops/blade-swagger/src/main/java/org/springblade/swagger/SwaggerApplication.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-ops/blade-swagger/src/main/resources/application.yml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-ops/blade-swagger/src/main/resources/banner.txt 12 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-ops/blade-xxljob-admin/Dockerfile 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-ops/blade-xxljob-admin/pom.xml 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-ops/blade-xxljob-admin/src/main/resources/application.yml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-ops/blade-xxljob-admin/src/main/resources/mybatis-mapper/XxlJobRegistryMapper.xml 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-ops/blade-xxljob/Dockerfile 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-ops/blade-xxljob/src/main/resources/application.yml 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-ops/pom.xml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-plugin-api/pom.xml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-plugin/pom.xml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/entity/Notice.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service-api/blade-dict-api/src/main/java/org/springblade/system/entity/Dict.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service-api/blade-dict-api/src/main/java/org/springblade/system/entity/DictBiz.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service-api/blade-system-api/src/main/java/org/springblade/system/entity/ApiScope.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service-api/blade-system-api/src/main/java/org/springblade/system/entity/AuthClient.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service-api/blade-system-api/src/main/java/org/springblade/system/entity/DataScope.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service-api/blade-system-api/src/main/java/org/springblade/system/entity/Dept.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service-api/blade-system-api/src/main/java/org/springblade/system/entity/Menu.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service-api/blade-system-api/src/main/java/org/springblade/system/entity/Param.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service-api/blade-system-api/src/main/java/org/springblade/system/entity/Post.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service-api/blade-system-api/src/main/java/org/springblade/system/entity/Region.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service-api/blade-system-api/src/main/java/org/springblade/system/entity/Role.java 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service-api/blade-system-api/src/main/java/org/springblade/system/entity/RoleMenu.java 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service-api/blade-system-api/src/main/java/org/springblade/system/entity/RoleScope.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service-api/blade-system-api/src/main/java/org/springblade/system/entity/Tenant.java 15 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service-api/blade-system-api/src/main/java/org/springblade/system/entity/TenantPackage.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service-api/blade-system-api/src/main/java/org/springblade/system/entity/TopMenu.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service-api/blade-system-api/src/main/java/org/springblade/system/entity/TopMenuSetting.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service-api/blade-system-api/src/main/java/org/springblade/system/feign/ISysClient.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service-api/blade-system-api/src/main/java/org/springblade/system/vo/TenantVO.java 40 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service-api/blade-user-api/src/main/java/org/springblade/system/user/entity/User.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service-api/blade-user-api/src/main/java/org/springblade/system/user/entity/UserApp.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service-api/blade-user-api/src/main/java/org/springblade/system/user/entity/UserDept.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service-api/blade-user-api/src/main/java/org/springblade/system/user/entity/UserOauth.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service-api/blade-user-api/src/main/java/org/springblade/system/user/entity/UserOther.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service-api/blade-user-api/src/main/java/org/springblade/system/user/entity/UserWeb.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service-api/blade-user-api/src/main/java/org/springblade/system/user/feign/IUserClient.java 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service-api/pom.xml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-desk/Dockerfile 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-desk/pom.xml 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-desk/src/main/java/org/springblade/desk/DeskApplication.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-desk/src/main/java/org/springblade/desk/entity/ProcessLeave.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-desk/src/main/java/org/springblade/desk/mapper/NoticeMapper.xml 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-desk/src/main/resources/application-dev.yml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-system/Dockerfile 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-system/pom.xml 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/controller/TenantController.java 43 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/mapper/DeptMapper.xml 12 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/mapper/DictBizMapper.xml 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/mapper/DictMapper.xml 12 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/mapper/MenuMapper.xml 102 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/mapper/PostMapper.xml 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/mapper/RegionMapper.xml 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/mapper/RoleMapper.xml 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/mapper/RoleMenuMapper.xml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/mapper/TenantMapper.xml 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/service/ITenantService.java 19 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/service/impl/TenantServiceImpl.java 272 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-system/src/main/resources/application-dev.yml 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-user/Dockerfile 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-user/pom.xml 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-user/src/main/java/org/springblade/system/user/feign/UserClient.java 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-user/src/main/java/org/springblade/system/user/mapper/UserMapper.xml 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-user/src/main/java/org/springblade/system/user/service/IUserService.java 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-user/src/main/java/org/springblade/system/user/service/impl/UserServiceImpl.java 35 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/blade-user/src/main/resources/application-dev.yml 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-service/pom.xml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/pom.xml 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/service-start.sh 70 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/service-stop.sh 173 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/更改了的jar包.zip 补丁 | 查看 | 原始文档 | blame | 历史
Source/BladeX/blade-auth/Dockerfile
@@ -4,18 +4,19 @@
#3.FROM adoptopenjdk/openjdk8-openj9:jdk8u262-b10_openj9-0.21.0-alpine-slim
#第3点的tag可以到该地址查询:https://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
#在容器中以多少端口运行
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"]
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>
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;
/**
 * ç”¨æˆ·è®¤è¯æœåС噍
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 @@
    /**
     * é…ç½®å®¢æˆ·ç«¯ä¿¡æ¯
     * æœåŠ¡å¯åŠ¨æ—¶åŠ è½½sql
     * ä½œç”¨ï¼šæŸ¥è¯¢client信息
     */
    @Override
    @SneakyThrows
@@ -114,4 +117,5 @@
            .tokenKeyAccess("permitAll()")
            .checkTokenAccess("isAuthenticated()");
    }
}
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";
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)
Source/BladeX/blade-auth/src/main/java/org/springblade/auth/service/BladeClientDetailsServiceImpl.java
@@ -36,7 +36,7 @@
    /**
     * ç¼“存客户端信息
     *
     * clientId=saber
     * @param clientId å®¢æˆ·ç«¯id
     */
    @Override
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;
        // æ ¹æ®ä¸åŒç”¨æˆ·ç±»åž‹è°ƒç”¨å¯¹åº”的接口返回数据,用户可自行拓展
        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比对后get抛出异常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;
            // æ ¹æ®ä¸åŒç”¨æˆ·ç±»åž‹è°ƒç”¨å¯¹åº”的接口返回数据,用户可自行拓展
            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());
            }
        }
    }
    /**
     * èŽ·å–å®¢æˆ·ç«¯ip,客户端可能经过代理,也可能没经过代理
     * å¦‚开启虚拟机的情况也可能导致获取到的是虚拟机的ip
     * @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)) {
            // å¤šæ¬¡åå‘代理后会有多个ip值,第一个ip才是真实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);
        }
        //如果没取到ip,返回""
        if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
            ip = "";
        }
        return ip;
    }
    /**
@@ -207,6 +315,5 @@
        }
        return true;
    }
}
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 = "该IP地址无访问权限,请配置IP白名单";
    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;
    }
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
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
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>
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;
        }
    }
    }*/
    /**
     * åŠ¨æ€èŽ·å–seata地址
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;
    /**
     * ç§Ÿæˆ·é»˜è®¤èœå•集合
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");
        // å¼€å¯elk日志
        // 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));
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}
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"]
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>
Source/BladeX/blade-gateway/src/main/resources/bootstrap.yml
@@ -1,5 +1,5 @@
server:
  port: 80
  port: 37000
spring:
  cloud:
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");
    }
    /**
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 {
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 {
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 {
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>
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"]
Source/BladeX/blade-ops/blade-admin/src/main/resources/bootstrap.yml
@@ -1,5 +1,5 @@
server:
  port: 7002
  port: 36002
  undertow:
    threads:
      # è®¾ç½®IO线程数, å®ƒä¸»è¦æ‰§è¡Œéžé˜»å¡žçš„任务,它们会负责多个连接, é»˜è®¤è®¾ç½®æ¯ä¸ªCPU核心一个线程
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"]
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>
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 {
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 {
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 {
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 {
Source/BladeX/blade-ops/blade-develop/src/main/resources/application-dev.yml
@@ -1,6 +1,6 @@
#服务器端口
server:
  port: 7007
  port: 36003
#数据源配置
spring:
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"};
    /**
     * éœ€è¦æŽ’除的表名(两者只能取其一)
     */
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"]
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>
        <!--解决不支持的字符集问题-->
        <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>
Source/BladeX/blade-ops/blade-flow/src/main/resources/application.yml
@@ -1,6 +1,6 @@
#服务器端口
server:
  port: 8008
  port: 36004
#flowable配置
flowable:
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"]
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>
Source/BladeX/blade-ops/blade-log/src/main/resources/application-dev.yml
@@ -1,6 +1,6 @@
#服务器端口
server:
  port: 8103
  port: 36005
#数据源配置
spring:
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"]
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>
Source/BladeX/blade-ops/blade-report/src/main/resources/application.yml
@@ -1,6 +1,6 @@
#服务器端口
server:
  port: 8108
  port: 36006
#报表配置
report:
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"]
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>
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>
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>
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}
Source/BladeX/blade-ops/blade-resource/src/main/resources/application.yml
@@ -1,6 +1,6 @@
#服务器端口
server:
  port: 8010
  port: 36007
#默认对象存储配置
oss:
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"]
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聚合启动器
Source/BladeX/blade-ops/blade-swagger/src/main/resources/application.yml
@@ -1,5 +1,5 @@
server:
  port: 18000
  port: 36008
knife4j:
  enableAggregation: true
  cloud:
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}
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
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>
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
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>
</mapper>
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
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
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>
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>
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>
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 {
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 {
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 {
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 {
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 {
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 {
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 {
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 {
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 {
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 {
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 {
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;
    }
}
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;
    }
}
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 {
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;
    /**
     * äº§å“åŒ…ID
     */
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 {
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 {
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 {
    /**
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";
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;
}
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;
}
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> {
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 {
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;
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> {
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> {
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集合
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>
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"]
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>
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启动器
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 {
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">
Source/BladeX/blade-service/blade-desk/src/main/resources/application-dev.yml
@@ -1,6 +1,6 @@
#服务器端口
server:
  port: 8105
  port: 36010
#数据源配置
spring:
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"]
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>
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);
    }
}
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=",">
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>
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>
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=")">
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=",">
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>
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=",">
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>
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>
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(key):租户名(value)
     * @return
     */
    List<Map<String,Object>> selectMaps();
    /**
     * æŸ¥è¯¢æ˜¯å¦é…ç½®æœ‰é»˜è®¤å¿…须开启三员管理
     *
     * @return
     */
    boolean findIsOpen();
}
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())) {
            // èŽ·å–åˆ°æœªåˆ é™¤ç§Ÿæˆ·æ€»æ•°ï¼Œç”Ÿæˆæ–°çš„ç§Ÿæˆ·id
            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());
            // é…ç½®ä¸ºfalse,并且前端传输的参数为false就不需要创建三员
            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);
        });
    }
}
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}
    password: ${blade.datasource.dev.password}
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"]
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>
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))));
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>
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
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(
Source/BladeX/blade-service/blade-user/src/main/resources/application-dev.yml
@@ -1,7 +1,6 @@
#服务器端口
server:
  port: 8102
  port: 36012
#数据源配置
spring:
  datasource:
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>
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>
Source/BladeX/service-start.sh
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,70 @@
#检查程序是否在运行
start(){
  #先清空target并打包
 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
  #启动工作流flow服务
 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
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
Source/¸ü¸ÄÁ˵Äjar°ü.zip
Binary files differ