From 2603ada5be599d10d2af2fd8cb6d596c6f0f68d7 Mon Sep 17 00:00:00 2001
From: zhongrj <646384940@qq.com>
Date: Sun, 28 Apr 2024 17:12:05 +0800
Subject: [PATCH] user,role,tenant 接口接入 auth 模块
---
blade-auth/src/main/java/org/springblade/auth/granter/BladeTokenGranter.java | 3
blade-auth/src/main/java/org/springblade/system/mapper/TenantMapper.xml | 31
blade-auth/src/main/java/org/springblade/system/service/IDeptService.java | 119
blade-auth/src/main/java/org/springblade/system/wrapper/RegionWrapper.java | 52
blade-auth/src/main/java/org/springblade/system/entity/Dept.java | 108
blade-auth/src/main/java/org/springblade/system/vo/DictVO.java | 71
blade-auth/src/main/java/org/springblade/system/service/impl/TopMenuServiceImpl.java | 63
blade-auth/src/main/java/org/springblade/system/mapper/ParamMapper.java | 17
blade-auth/src/main/java/org/springblade/system/vo/RegionVO.java | 89
blade-auth/src/main/java/org/springblade/system/service/IRegionService.java | 86
blade-auth/src/main/java/org/springblade/system/mapper/DataScopeMapper.xml | 5
blade-auth/src/main/java/org/springblade/system/mapper/PostMapper.xml | 40
blade-auth/src/main/java/org/springblade/system/user/vo/UserVO.java | 84
blade-auth/src/main/java/org/springblade/system/mapper/TenantMapper.java | 25
blade-auth/src/main/java/org/springblade/system/user/mapper/UserWebMapper.java | 16
blade-auth/src/main/java/org/springblade/system/user/mapper/UserOauthMapper.java | 17
blade-auth/pom.xml | 8
blade-auth/src/main/java/org/springblade/system/entity/Menu.java | 149
blade-auth/src/main/java/org/springblade/system/entity/TopMenu.java | 61
blade-auth/src/main/java/org/springblade/system/service/ITenantService.java | 76
blade-auth/src/main/java/org/springblade/system/entity/RoleScope.java | 71
blade-auth/src/main/java/org/springblade/system/service/IRoleScopeService.java | 17
blade-auth/src/main/java/org/springblade/system/entity/DictBiz.java | 108
blade-auth/src/main/java/org/springblade/system/mapper/DeptMapper.xml | 115
blade-auth/src/main/java/org/springblade/system/service/ITopMenuService.java | 27
blade-auth/src/main/java/org/springblade/system/service/impl/TenantPackageServiceImpl.java | 23
blade-auth/src/main/java/org/springblade/system/mapper/RoleMapper.xml | 63
blade-auth/src/main/java/org/springblade/system/user/wrapper/UserWrapper.java | 59
blade-auth/src/main/java/org/springblade/system/mapper/AuthClientMapper.java | 17
blade-auth/src/main/java/org/springblade/system/entity/Tenant.java | 112
blade-auth/src/main/java/org/springblade/system/service/IDictBizService.java | 101
blade-auth/src/main/java/org/springblade/system/service/IApiScopeService.java | 19
blade-auth/src/main/java/org/springblade/system/vo/RoleMenuVO.java | 23
blade-auth/src/main/java/org/springblade/system/vo/RoleVO.java | 72
blade-auth/src/main/java/org/springblade/system/mapper/TopMenuMapper.xml | 21
blade-auth/src/main/java/org/springblade/system/entity/Region.java | 128
blade-auth/src/main/java/org/springblade/system/user/service/impl/UserOauthServiceImpl.java | 22
blade-auth/src/main/java/org/springblade/system/wrapper/DictBizWrapper.java | 61
blade-auth/src/main/java/org/springblade/system/cache/DictCache.java | 160
blade-auth/src/main/java/org/springblade/system/service/IDictService.java | 109
blade-auth/src/main/java/org/springblade/system/user/mapper/UserOtherMapper.java | 16
blade-auth/src/main/java/org/springblade/system/mapper/DictMapper.xml | 54
blade-auth/src/main/java/org/springblade/system/entity/TopMenuSetting.java | 38
blade-auth/src/main/java/org/springblade/system/mapper/TopMenuSettingMapper.xml | 5
blade-auth/src/main/java/org/springblade/system/vo/GrantVO.java | 49
blade-auth/src/main/java/org/springblade/system/wrapper/RoleWrapper.java | 61
blade-auth/src/main/java/org/springblade/system/user/mapper/UserWebMapper.xml | 5
blade-auth/src/main/java/org/springblade/system/vo/DeptVO.java | 84
blade-auth/src/main/java/org/springblade/system/wrapper/DictWrapper.java | 60
blade-auth/src/main/java/org/springblade/system/mapper/TenantPackageMapper.java | 19
blade-auth/src/main/java/org/springblade/system/service/impl/AuthClientServiceImpl.java | 21
blade-auth/src/main/java/org/springblade/system/service/impl/RegionServiceImpl.java | 120
blade-auth/src/main/java/org/springblade/system/user/mapper/UserMapper.java | 63
blade-auth/src/main/java/org/springblade/system/service/impl/TenantServiceImpl.java | 253 +
blade-auth/src/main/java/org/springblade/system/service/impl/ApiScopeServiceImpl.java | 23
blade-auth/src/main/java/org/springblade/system/service/IRoleMenuService.java | 17
blade-auth/src/main/java/org/springblade/system/user/entity/User.java | 96
blade-auth/src/main/java/org/springblade/system/entity/Post.java | 66
blade-auth/src/main/java/org/springblade/system/vo/ParamVO.java | 23
blade-auth/src/main/java/org/springblade/system/user/service/IUserOauthService.java | 16
blade-auth/src/main/java/org/springblade/system/enums/DictEnum.java | 95
blade-auth/src/main/java/org/springblade/system/mapper/TenantPackageMapper.xml | 20
blade-auth/src/main/java/org/springblade/system/user/mapper/UserOauthMapper.xml | 22
blade-auth/src/main/java/org/springblade/system/excel/RegionImporter.java | 24
blade-auth/src/main/java/org/springblade/system/mapper/TopMenuSettingMapper.java | 17
blade-auth/src/main/java/org/springblade/system/entity/DataScope.java | 86
blade-auth/src/main/java/org/springblade/system/service/impl/DictBizServiceImpl.java | 119
blade-auth/src/main/java/org/springblade/system/user/service/IUserSearchService.java | 64
blade-auth/src/main/java/org/springblade/system/user/excel/UserExcel.java | 97
blade-auth/src/main/java/org/springblade/system/entity/ApiScope.java | 71
blade-auth/src/main/java/org/springblade/system/vo/ApiScopeVO.java | 27
blade-auth/src/main/java/org/springblade/auth/granter/SocialTokenGranter.java | 18
blade-auth/src/main/java/org/springblade/system/user/mapper/UserMapper.xml | 76
blade-auth/src/main/java/org/springblade/system/wrapper/DataScopeWrapper.java | 48
blade-auth/src/main/java/org/springblade/system/service/impl/DictServiceImpl.java | 125
blade-auth/src/main/java/org/springblade/system/user/mapper/UserDeptMapper.java | 16
blade-auth/src/main/java/org/springblade/system/user/service/IUserDeptService.java | 16
blade-auth/src/main/java/org/springblade/system/vo/DataScopeVO.java | 27
blade-auth/src/main/java/org/springblade/system/wrapper/DeptWrapper.java | 78
blade-auth/src/main/java/org/springblade/system/user/entity/UserApp.java | 64
blade-auth/src/main/java/org/springblade/system/vo/MenuVO.java | 93
blade-auth/src/main/java/org/springblade/system/user/cache/UserCache.java | 88
blade-auth/src/main/java/org/springblade/system/wrapper/ApiScopeWrapper.java | 48
blade-auth/src/main/java/org/springblade/system/mapper/RegionMapper.xml | 105
blade-auth/src/main/java/org/springblade/system/user/entity/UserInfo.java | 68
blade-auth/src/main/java/org/springblade/system/service/IParamService.java | 23
blade-auth/src/main/java/org/springblade/system/vo/CheckedTreeVO.java | 21
blade-auth/src/main/java/org/springblade/system/entity/RoleMenu.java | 65
blade-auth/src/main/java/org/springblade/system/service/IDataScopeService.java | 19
blade-auth/src/main/java/org/springblade/system/mapper/RoleMapper.java | 67
blade-auth/src/main/java/org/springblade/system/mapper/DictBizMapper.java | 64
blade-auth/src/main/java/org/springblade/system/service/impl/TopMenuSettingServiceImpl.java | 21
blade-auth/src/main/java/org/springblade/system/service/ITenantPackageService.java | 19
blade-auth/src/main/java/org/springblade/AuthApplication.java | 2
blade-auth/src/main/java/org/springblade/system/mapper/ApiScopeMapper.xml | 5
blade-auth/src/main/java/org/springblade/system/mapper/RoleMenuMapper.xml | 16
blade-auth/src/main/java/org/springblade/system/vo/GrantTreeVO.java | 24
blade-auth/src/main/java/org/springblade/system/entity/Dict.java | 102
blade-auth/src/main/java/org/springblade/system/user/entity/UserOther.java | 64
blade-auth/src/main/java/org/springblade/system/user/entity/UserWeb.java | 64
blade-auth/src/main/java/org/springblade/system/excel/RegionExcel.java | 90
blade-auth/src/main/java/org/springblade/system/service/impl/DeptServiceImpl.java | 173 +
blade-auth/src/main/java/org/springblade/system/mapper/RoleScopeMapper.xml | 12
blade-auth/src/main/java/org/springblade/system/service/IAuthClientService.java | 17
blade-auth/src/main/java/org/springblade/system/mapper/DictMapper.java | 73
blade-auth/src/main/java/org/springblade/system/service/impl/RoleServiceImpl.java | 230 +
blade-auth/src/main/java/org/springblade/system/wrapper/MenuWrapper.java | 72
blade-auth/src/main/java/org/springblade/system/mapper/ApiScopeMapper.java | 19
blade-auth/src/main/java/org/springblade/system/mapper/AuthClientMapper.xml | 27
blade-auth/src/main/java/org/springblade/system/mapper/RegionMapper.java | 62
blade-auth/src/main/java/org/springblade/system/mapper/RoleMenuMapper.java | 25
blade-auth/src/main/java/org/springblade/system/mapper/PostMapper.java | 50
blade-auth/src/main/java/org/springblade/system/user/mapper/UserAppMapper.xml | 5
blade-auth/src/main/java/org/springblade/system/service/impl/RoleMenuServiceImpl.java | 21
blade-auth/src/main/java/org/springblade/system/user/service/IUserService.java | 208 +
blade-auth/src/main/java/org/springblade/system/service/IRoleService.java | 112
blade-auth/src/main/java/org/springblade/system/user/mapper/UserDeptMapper.xml | 5
blade-auth/src/main/java/org/springblade/auth/service/BladeUserDetailsServiceImpl.java | 35
blade-auth/src/main/java/org/springblade/system/service/impl/DataScopeServiceImpl.java | 23
blade-auth/src/main/java/org/springblade/auth/config/BladeAuthorizationServerConfiguration.java | 3
blade-auth/src/main/java/org/springblade/system/mapper/ParamMapper.xml | 20
blade-auth/src/main/java/org/springblade/system/enums/DictBizEnum.java | 25
blade-auth/src/main/java/org/springblade/system/mapper/DataScopeMapper.java | 19
blade-auth/src/main/java/org/springblade/system/user/service/impl/UserServiceImpl.java | 434 ++
blade-auth/src/main/java/org/springblade/system/service/impl/RoleScopeServiceImpl.java | 21
blade-auth/src/main/java/org/springblade/system/user/service/impl/UserDeptServiceImpl.java | 20
blade-auth/src/main/java/org/springblade/system/service/IMenuService.java | 166 +
blade-auth/src/main/java/org/springblade/system/user/entity/UserOauth.java | 107
blade-auth/src/main/java/org/springblade/system/mapper/DictBizMapper.xml | 51
blade-auth/src/main/java/org/springblade/system/service/impl/PostServiceImpl.java | 74
blade-auth/src/main/java/org/springblade/system/user/mapper/UserAppMapper.java | 16
blade-auth/src/main/java/org/springblade/system/service/impl/MenuServiceImpl.java | 297 +
blade-auth/src/main/java/org/springblade/system/vo/DictBizVO.java | 71
blade-auth/src/main/java/org/springblade/system/mapper/TopMenuMapper.java | 19
blade-auth/src/main/java/org/springblade/system/user/enums/UserEnum.java | 69
blade-auth/src/main/java/org/springblade/system/user/service/impl/UserSearchServiceImpl.java | 65
blade-auth/src/main/java/org/springblade/system/vo/PostVO.java | 26
blade-auth/src/main/java/org/springblade/system/entity/Role.java | 90
blade-auth/src/main/java/org/springblade/system/mapper/MenuMapper.xml | 478 ++
blade-auth/src/main/java/org/springblade/system/user/excel/UserImporter.java | 24
blade-auth/src/main/java/org/springblade/system/entity/AuthClient.java | 98
blade-auth/src/main/java/org/springblade/system/wrapper/PostWrapper.java | 47
blade-auth/src/main/java/org/springblade/system/service/impl/ParamServiceImpl.java | 40
blade-auth/src/main/java/org/springblade/system/user/mapper/UserOtherMapper.xml | 5
blade-auth/src/main/java/org/springblade/system/mapper/DeptMapper.java | 68
blade-auth/src/main/java/org/springblade/system/mapper/MenuMapper.java | 183 +
blade-auth/src/main/java/org/springblade/system/service/ITopMenuSettingService.java | 17
blade-auth/src/main/java/org/springblade/system/entity/TenantPackage.java | 56
blade-auth/src/main/java/org/springblade/system/user/entity/UserDept.java | 64
blade-auth/src/main/java/org/springblade/system/mapper/RoleScopeMapper.java | 17
blade-auth/src/main/java/org/springblade/system/service/IPostService.java | 68
blade-auth/src/main/java/org/springblade/system/entity/Param.java | 64
blade-auth/src/main/java/org/springblade/system/cache/DictBizCache.java | 132
153 files changed, 9,284 insertions(+), 554 deletions(-)
diff --git a/blade-auth/pom.xml b/blade-auth/pom.xml
index 4d979ce..2f91ce3 100644
--- a/blade-auth/pom.xml
+++ b/blade-auth/pom.xml
@@ -115,6 +115,14 @@
<artifactId>activation</artifactId>
<version>1.1.1</version>
</dependency>-->
+<!-- <dependency>-->
+<!-- <groupId>org.springblade</groupId>-->
+<!-- <artifactId>blade-core-boot</artifactId>-->
+<!-- </dependency>-->
+ <dependency>
+ <groupId>org.springblade</groupId>
+ <artifactId>blade-starter-excel</artifactId>
+ </dependency>
</dependencies>
<build>
diff --git a/blade-auth/src/main/java/org/springblade/auth/AuthApplication.java b/blade-auth/src/main/java/org/springblade/AuthApplication.java
similarity index 97%
rename from blade-auth/src/main/java/org/springblade/auth/AuthApplication.java
rename to blade-auth/src/main/java/org/springblade/AuthApplication.java
index 8c18654..d242cf2 100644
--- a/blade-auth/src/main/java/org/springblade/auth/AuthApplication.java
+++ b/blade-auth/src/main/java/org/springblade/AuthApplication.java
@@ -14,7 +14,7 @@
* this software without specific prior written permission.
* Author: Chill 庄骞 (smallchill@163.com)
*/
-package org.springblade.auth;
+package org.springblade;
import org.springblade.core.cloud.client.BladeCloudApplication;
diff --git a/blade-auth/src/main/java/org/springblade/auth/config/BladeAuthorizationServerConfiguration.java b/blade-auth/src/main/java/org/springblade/auth/config/BladeAuthorizationServerConfiguration.java
index ce58900..4bd76c2 100644
--- a/blade-auth/src/main/java/org/springblade/auth/config/BladeAuthorizationServerConfiguration.java
+++ b/blade-auth/src/main/java/org/springblade/auth/config/BladeAuthorizationServerConfiguration.java
@@ -24,6 +24,7 @@
import org.springblade.core.redis.cache.BladeRedis;
import org.springblade.core.social.props.SocialProperties;
import org.springblade.system.user.feign.IUserClient;
+import org.springblade.system.user.service.IUserService;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.annotation.Order;
import org.springframework.security.authentication.AuthenticationManager;
@@ -68,7 +69,7 @@
private final BladeRedis bladeRedis;
- private final IUserClient userClient;
+ private final IUserService userClient;
private final SocialProperties socialProperties;
diff --git a/blade-auth/src/main/java/org/springblade/auth/granter/BladeTokenGranter.java b/blade-auth/src/main/java/org/springblade/auth/granter/BladeTokenGranter.java
index 9bab44f..e672314 100644
--- a/blade-auth/src/main/java/org/springblade/auth/granter/BladeTokenGranter.java
+++ b/blade-auth/src/main/java/org/springblade/auth/granter/BladeTokenGranter.java
@@ -19,6 +19,7 @@
import org.springblade.core.redis.cache.BladeRedis;
import org.springblade.core.social.props.SocialProperties;
import org.springblade.system.user.feign.IUserClient;
+import org.springblade.system.user.service.IUserService;
import org.springframework.security.authentication.AuthenticationManager;
import org.springframework.security.oauth2.config.annotation.web.configurers.AuthorizationServerEndpointsConfigurer;
import org.springframework.security.oauth2.provider.CompositeTokenGranter;
@@ -38,7 +39,7 @@
/**
* 自定义tokenGranter
*/
- public static TokenGranter getTokenGranter(final AuthenticationManager authenticationManager, final AuthorizationServerEndpointsConfigurer endpoints, BladeRedis bladeRedis, IUserClient userClient, SocialProperties socialProperties) {
+ public static TokenGranter getTokenGranter(final AuthenticationManager authenticationManager, final AuthorizationServerEndpointsConfigurer endpoints, BladeRedis bladeRedis, IUserService userClient, SocialProperties socialProperties) {
// 默认tokenGranter集合
List<TokenGranter> granters = new ArrayList<>(Collections.singletonList(endpoints.getTokenGranter()));
// 增加验证码模式
diff --git a/blade-auth/src/main/java/org/springblade/auth/granter/SocialTokenGranter.java b/blade-auth/src/main/java/org/springblade/auth/granter/SocialTokenGranter.java
index 1727fcc..9a16d5c 100644
--- a/blade-auth/src/main/java/org/springblade/auth/granter/SocialTokenGranter.java
+++ b/blade-auth/src/main/java/org/springblade/auth/granter/SocialTokenGranter.java
@@ -33,7 +33,7 @@
import org.springblade.system.user.entity.User;
import org.springblade.system.user.entity.UserInfo;
import org.springblade.system.user.entity.UserOauth;
-import org.springblade.system.user.feign.IUserClient;
+import org.springblade.system.user.service.IUserService;
import org.springframework.security.authentication.AbstractAuthenticationToken;
import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
import org.springframework.security.core.Authentication;
@@ -57,10 +57,10 @@
private static final String GRANT_TYPE = "social";
private static final Integer AUTH_SUCCESS_CODE = 2000;
- private final IUserClient userClient;
+ private final IUserService userClient;
private final SocialProperties socialProperties;
- protected SocialTokenGranter(AuthorizationServerTokenServices tokenServices, ClientDetailsService clientDetailsService, OAuth2RequestFactory requestFactory, IUserClient userClient, SocialProperties socialProperties) {
+ protected SocialTokenGranter(AuthorizationServerTokenServices tokenServices, ClientDetailsService clientDetailsService, OAuth2RequestFactory requestFactory, IUserService userClient, SocialProperties socialProperties) {
super(tokenServices, clientDetailsService, requestFactory, GRANT_TYPE);
this.userClient = userClient;
this.socialProperties = socialProperties;
@@ -102,18 +102,18 @@
userOauth.setUuid(authUser.getUuid());
// 远程调用,获取认证信息
- R<UserInfo> result = userClient.userAuthInfo(userOauth);
+ UserInfo userInfo = userClient.userInfo(userOauth);
BladeUserDetails bladeUserDetails;
- if (result.isSuccess()) {
- User user = result.getData().getUser();
- Kv detail = result.getData().getDetail();
+ if (null!=userInfo) {
+ User user = userInfo.getUser();
+ Kv detail = userInfo.getDetail();
if (user == null || user.getId() == null) {
throw new InvalidGrantException("social grant failure, user is null");
}
bladeUserDetails = new BladeUserDetails(user.getId(),
- tenantId, result.getData().getOauthId(), user.getName(), user.getRealName(), user.getDeptId(), user.getPostId(), user.getRoleId(), Func.join(result.getData().getRoles()), Func.toStr(userOauth.getAvatar(), TokenUtil.DEFAULT_AVATAR),
+ tenantId, userInfo.getOauthId(), user.getName(), user.getRealName(), user.getDeptId(), user.getPostId(), user.getRoleId(), Func.join(userInfo.getRoles()), Func.toStr(userOauth.getAvatar(), TokenUtil.DEFAULT_AVATAR),
userOauth.getUsername(), AuthConstant.ENCRYPT + user.getPassword(), detail, true, true, true, true,
- AuthorityUtils.commaSeparatedStringToAuthorityList(Func.join(result.getData().getRoles())));
+ AuthorityUtils.commaSeparatedStringToAuthorityList(Func.join(userInfo.getRoles())));
} else {
throw new InvalidGrantException("social grant failure, feign client return error");
}
diff --git a/blade-auth/src/main/java/org/springblade/auth/service/BladeUserDetailsServiceImpl.java b/blade-auth/src/main/java/org/springblade/auth/service/BladeUserDetailsServiceImpl.java
index f48cb4f..c75d92b 100644
--- a/blade-auth/src/main/java/org/springblade/auth/service/BladeUserDetailsServiceImpl.java
+++ b/blade-auth/src/main/java/org/springblade/auth/service/BladeUserDetailsServiceImpl.java
@@ -31,10 +31,13 @@
import org.springblade.system.cache.ParamCache;
import org.springblade.system.entity.Tenant;
import org.springblade.system.feign.ISysClient;
+import org.springblade.system.service.IRoleService;
+import org.springblade.system.service.ITenantService;
import org.springblade.system.user.entity.User;
import org.springblade.system.user.entity.UserInfo;
import org.springblade.system.user.enums.UserEnum;
import org.springblade.system.user.feign.IUserClient;
+import org.springblade.system.user.service.IUserService;
import org.springframework.security.core.authority.AuthorityUtils;
import org.springframework.security.core.userdetails.UserDetailsService;
import org.springframework.security.core.userdetails.UsernameNotFoundException;
@@ -57,8 +60,9 @@
public static final Integer FAIL_COUNT = 5;
public static final String FAIL_COUNT_VALUE = "account.failCount";
- private final IUserClient userClient;
- private final ISysClient sysClient;
+ private final IUserService userClient;
+ private final ITenantService tenantService;
+ private final IRoleService sysClient;
private final BladeRedis bladeRedis;
private final JwtProperties jwtProperties;
@@ -94,9 +98,9 @@
}
// 获取租户信息
- R<Tenant> tenant = sysClient.getTenant(tenantId);
- if (tenant.isSuccess()) {
- if (TokenUtil.judgeTenant(tenant.getData())) {
+ Tenant tenant = tenantService.getByTenantId(tenantId);
+ if (null!=tenant) {
+ if (TokenUtil.judgeTenant(tenant)) {
throw new UserDeniedAuthorizationException(TokenUtil.USER_HAS_NO_TENANT_PERMISSION);
}
} else {
@@ -107,19 +111,18 @@
String userType = Func.toStr(request.getHeader(TokenUtil.USER_TYPE_HEADER_KEY), TokenUtil.DEFAULT_USER_TYPE);
// 远程调用返回数据
- R<UserInfo> result;
+ UserInfo userInfo;
// 根据不同用户类型调用对应的接口返回数据,用户可自行拓展
if (userType.equals(UserEnum.WEB.getName())) {
- result = userClient.userInfo(tenantId, username, UserEnum.WEB.getName());
+ userInfo = userClient.userInfo(tenantId, username, UserEnum.WEB);
} else if (userType.equals(UserEnum.APP.getName())) {
- result = userClient.userInfo(tenantId, username, UserEnum.APP.getName());
+ userInfo = userClient.userInfo(tenantId, username, UserEnum.APP);
} else {
- result = userClient.userInfo(tenantId, username, UserEnum.OTHER.getName());
+ userInfo = userClient.userInfo(tenantId, username, UserEnum.OTHER);
}
// 判断返回信息
- if (result.isSuccess()) {
- UserInfo userInfo = result.getData();
+ if (null!=userInfo) {
User user = userInfo.getUser();
// 用户不存在,但提示用户名与密码错误并锁定账号
if (user == null || user.getId() == null) {
@@ -141,9 +144,9 @@
}
// 多角色情况下指定单角色
if (Func.isNotEmpty(headerRole) && user.getRoleId().contains(headerRole)) {
- R<List<String>> roleResult = sysClient.getRoleAliases(headerRole);
- if (roleResult.isSuccess()) {
- userInfo.setRoles(roleResult.getData());
+ List<String> roleResult = sysClient.getRoleAliases(headerRole);
+ if (roleResult.size()>0) {
+ userInfo.setRoles(roleResult);
}
user.setRoleId(headerRole);
}
@@ -152,9 +155,9 @@
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())));
+ AuthorityUtils.commaSeparatedStringToAuthorityList(Func.join(userInfo.getRoles())));
} else {
- throw new UsernameNotFoundException(result.getMsg());
+ throw new UsernameNotFoundException("没有找到用户信息");
}
}
diff --git a/blade-auth/src/main/java/org/springblade/system/cache/DictBizCache.java b/blade-auth/src/main/java/org/springblade/system/cache/DictBizCache.java
new file mode 100644
index 0000000..be47cb3
--- /dev/null
+++ b/blade-auth/src/main/java/org/springblade/system/cache/DictBizCache.java
@@ -0,0 +1,132 @@
+/*
+ * 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.cache;
+
+import org.springblade.core.cache.utils.CacheUtil;
+import org.springblade.core.secure.utils.AuthUtil;
+import org.springblade.core.tool.utils.SpringUtil;
+import org.springblade.core.tool.utils.StringPool;
+import org.springblade.system.entity.DictBiz;
+import org.springblade.system.enums.DictBizEnum;
+import org.springblade.system.service.IDictBizService;
+
+import java.util.List;
+
+import static org.springblade.core.cache.constant.CacheConstant.DICT_CACHE;
+
+/**
+ * 业务字典缓存工具类
+ *
+ * @author Chill
+ */
+public class DictBizCache {
+
+ private static final String DICT_ID = "dictBiz:id";
+ private static final String DICT_VALUE = "dictBiz:value";
+ private static final String DICT_LIST = "dictBiz:list";
+
+ private static IDictBizService dictClient;
+
+ private static IDictBizService getDictClient() {
+ if (dictClient == null) {
+ dictClient = SpringUtil.getBean(IDictBizService.class);
+ }
+ return dictClient;
+ }
+
+ /**
+ * 获取字典实体
+ *
+ * @param id 主键
+ * @return DictBiz
+ */
+ public static DictBiz getById(Long id) {
+ String keyPrefix = DICT_ID.concat(StringPool.DASH).concat(AuthUtil.getTenantId()).concat(StringPool.COLON);
+ return CacheUtil.get(DICT_CACHE, keyPrefix, id, () -> {
+ DictBiz result = getDictClient().getById(id);
+ return result;
+ });
+ }
+
+ /**
+ * 获取字典值
+ *
+ * @param code 字典编号枚举
+ * @param dictKey Integer型字典键
+ * @return String
+ */
+ public static String getValue(DictBizEnum code, Integer dictKey) {
+ return getValue(code.getName(), dictKey);
+ }
+
+
+ /**
+ * 获取字典值
+ *
+ * @param code 字典编号
+ * @param dictKey Integer型字典键
+ * @return String
+ */
+ public static String getValue(String code, Integer dictKey) {
+ String keyPrefix = DICT_VALUE.concat(StringPool.DASH).concat(AuthUtil.getTenantId()).concat(StringPool.COLON);
+ return CacheUtil.get(DICT_CACHE, keyPrefix + code + StringPool.COLON, String.valueOf(dictKey), () -> {
+ String result = getDictClient().getValue(code, String.valueOf(dictKey));
+ return result;
+ });
+ }
+
+ /**
+ * 获取字典值
+ *
+ * @param code 字典编号枚举
+ * @param dictKey String型字典键
+ * @return String
+ */
+ public static String getValue(DictBizEnum code, String dictKey) {
+ return getValue(code.getName(), dictKey);
+ }
+
+ /**
+ * 获取字典值
+ *
+ * @param code 字典编号
+ * @param dictKey String型字典键
+ * @return String
+ */
+ public static String getValue(String code, String dictKey) {
+ String keyPrefix = DICT_VALUE.concat(StringPool.DASH).concat(AuthUtil.getTenantId()).concat(StringPool.COLON);
+ return CacheUtil.get(DICT_CACHE, keyPrefix + code + StringPool.COLON, dictKey, () -> {
+ String result = getDictClient().getValue(code, dictKey);
+ return result;
+ });
+ }
+
+ /**
+ * 获取字典集合
+ *
+ * @param code 字典编号
+ * @return List<DictBiz>
+ */
+ public static List<DictBiz> getList(String code) {
+ String keyPrefix = DICT_LIST.concat(StringPool.DASH).concat(AuthUtil.getTenantId()).concat(StringPool.COLON);
+ return CacheUtil.get(DICT_CACHE, keyPrefix, code, () -> {
+ List<DictBiz> result = getDictClient().getList(code);
+ return result;
+ });
+ }
+
+}
diff --git a/blade-auth/src/main/java/org/springblade/system/cache/DictCache.java b/blade-auth/src/main/java/org/springblade/system/cache/DictCache.java
new file mode 100644
index 0000000..17621ed
--- /dev/null
+++ b/blade-auth/src/main/java/org/springblade/system/cache/DictCache.java
@@ -0,0 +1,160 @@
+/*
+ * 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.cache;
+
+import org.springblade.core.cache.utils.CacheUtil;
+import org.springblade.core.tool.api.R;
+import org.springblade.core.tool.utils.SpringUtil;
+import org.springblade.core.tool.utils.StringPool;
+import org.springblade.system.entity.Dict;
+import org.springblade.system.enums.DictEnum;
+import org.springblade.system.service.IDictService;
+
+import java.util.List;
+import java.util.Optional;
+
+import static org.springblade.core.cache.constant.CacheConstant.DICT_CACHE;
+
+/**
+ * 字典缓存工具类
+ *
+ * @author Chill
+ */
+public class DictCache {
+
+ private static final String DICT_ID = "dict:id:";
+ private static final String DICT_KEY = "dict:key:";
+ private static final String DICT_VALUE = "dict:value:";
+ private static final String DICT_LIST = "dict:list:";
+
+ private static final Boolean TENANT_MODE = Boolean.FALSE;
+
+ private static IDictService dictClient;
+
+ private static IDictService getDictClient() {
+ if (dictClient == null) {
+ dictClient = SpringUtil.getBean(IDictService.class);
+ }
+ return dictClient;
+ }
+
+ /**
+ * 获取字典实体
+ *
+ * @param id 主键
+ * @return Dict
+ */
+ public static Dict getById(Long id) {
+ return CacheUtil.get(DICT_CACHE, DICT_ID, id, () -> {
+ Dict result = getDictClient().getById(id);
+ return result;
+ }, TENANT_MODE);
+ }
+
+ /**
+ * 获取字典值
+ *
+ * @param code 字典编号枚举
+ * @param dictValue 字典值
+ * @return String
+ */
+ public static String getKey(DictEnum code, String dictValue) {
+ return getKey(code.getName(), dictValue);
+ }
+
+ /**
+ * 获取字典键
+ *
+ * @param code 字典编号
+ * @param dictValue 字典值
+ * @return String
+ */
+ public static String getKey(String code, String dictValue) {
+ return CacheUtil.get(DICT_CACHE, DICT_KEY + code + StringPool.COLON, dictValue, () -> {
+ List<Dict> list = getList(code);
+ Optional<String> key = list.stream().filter(
+ dict -> dict.getDictValue().equalsIgnoreCase(dictValue)
+ ).map(Dict::getDictKey).findFirst();
+ return key.orElse(StringPool.EMPTY);
+ }, TENANT_MODE);
+ }
+
+ /**
+ * 获取字典值
+ *
+ * @param code 字典编号枚举
+ * @param dictKey Integer型字典键
+ * @return String
+ */
+ public static String getValue(DictEnum code, Integer dictKey) {
+ return getValue(code.getName(), dictKey);
+ }
+
+
+ /**
+ * 获取字典值
+ *
+ * @param code 字典编号
+ * @param dictKey Integer型字典键
+ * @return String
+ */
+ public static String getValue(String code, Integer dictKey) {
+ return CacheUtil.get(DICT_CACHE, DICT_VALUE + code + StringPool.COLON, String.valueOf(dictKey), () -> {
+ String result = getDictClient().getValue(code, String.valueOf(dictKey));
+ return result;
+ }, TENANT_MODE);
+ }
+
+ /**
+ * 获取字典值
+ *
+ * @param code 字典编号枚举
+ * @param dictKey String型字典键
+ * @return String
+ */
+ public static String getValue(DictEnum code, String dictKey) {
+ return getValue(code.getName(), dictKey);
+ }
+
+ /**
+ * 获取字典值
+ *
+ * @param code 字典编号
+ * @param dictKey String型字典键
+ * @return String
+ */
+ public static String getValue(String code, String dictKey) {
+ return CacheUtil.get(DICT_CACHE, DICT_VALUE + code + StringPool.COLON, dictKey, () -> {
+ String result = getDictClient().getValue(code, dictKey);
+ return result;
+ }, TENANT_MODE);
+ }
+
+ /**
+ * 获取字典集合
+ *
+ * @param code 字典编号
+ * @return List<Dict>
+ */
+ public static List<Dict> getList(String code) {
+ return CacheUtil.get(DICT_CACHE, DICT_LIST, code, () -> {
+ List<Dict> result = getDictClient().getList(code);
+ return result;
+ }, TENANT_MODE);
+ }
+
+}
diff --git a/blade-auth/src/main/java/org/springblade/system/entity/ApiScope.java b/blade-auth/src/main/java/org/springblade/system/entity/ApiScope.java
new file mode 100644
index 0000000..ea74243
--- /dev/null
+++ b/blade-auth/src/main/java/org/springblade/system/entity/ApiScope.java
@@ -0,0 +1,71 @@
+/*
+ * 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.entity;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import org.springblade.core.mp.base.BaseEntity;
+
+/**
+ * 实体类
+ *
+ * @author BladeX
+ */
+@Data
+@TableName("blade_scope_api")
+@EqualsAndHashCode(callSuper = true)
+@ApiModel(value = "ApiScope对象", description = "ApiScope对象")
+public class ApiScope extends BaseEntity {
+
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * 菜单主键
+ */
+ @ApiModelProperty(value = "菜单主键")
+ private Long menuId;
+ /**
+ * 资源编号
+ */
+ @ApiModelProperty(value = "资源编号")
+ private String resourceCode;
+ /**
+ * 接口权限名称
+ */
+ @ApiModelProperty(value = "接口权限名称")
+ private String scopeName;
+ /**
+ * 接口权限字段
+ */
+ @ApiModelProperty(value = "接口权限字段")
+ private String scopePath;
+ /**
+ * 接口权限类型
+ */
+ @ApiModelProperty(value = "接口权限类型")
+ private Integer scopeType;
+ /**
+ * 接口权限备注
+ */
+ @ApiModelProperty(value = "接口权限备注")
+ private String remark;
+
+
+}
diff --git a/blade-auth/src/main/java/org/springblade/system/entity/AuthClient.java b/blade-auth/src/main/java/org/springblade/system/entity/AuthClient.java
new file mode 100644
index 0000000..3164841
--- /dev/null
+++ b/blade-auth/src/main/java/org/springblade/system/entity/AuthClient.java
@@ -0,0 +1,98 @@
+/*
+ * 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.entity;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import org.springblade.core.mp.base.BaseEntity;
+
+/**
+ * 实体类
+ *
+ * @author BladeX
+ */
+@Data
+@TableName("blade_client")
+@EqualsAndHashCode(callSuper = true)
+@ApiModel(value = "Client对象", description = "Client对象")
+public class AuthClient extends BaseEntity {
+
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * 客户端id
+ */
+ @ApiModelProperty(value = "客户端id")
+ private String clientId;
+ /**
+ * 客户端密钥
+ */
+ @ApiModelProperty(value = "客户端密钥")
+ private String clientSecret;
+ /**
+ * 资源集合
+ */
+ @ApiModelProperty(value = "资源集合")
+ private String resourceIds;
+ /**
+ * 授权范围
+ */
+ @ApiModelProperty(value = "授权范围")
+ private String scope;
+ /**
+ * 授权类型
+ */
+ @ApiModelProperty(value = "授权类型")
+ private String authorizedGrantTypes;
+ /**
+ * 回调地址
+ */
+ @ApiModelProperty(value = "回调地址")
+ private String webServerRedirectUri;
+ /**
+ * 权限
+ */
+ @ApiModelProperty(value = "权限")
+ private String authorities;
+ /**
+ * 令牌过期秒数
+ */
+ @ApiModelProperty(value = "令牌过期秒数")
+ private Integer accessTokenValidity;
+ /**
+ * 刷新令牌过期秒数
+ */
+ @ApiModelProperty(value = "刷新令牌过期秒数")
+ private Integer refreshTokenValidity;
+ /**
+ * 附加说明
+ */
+ @JsonIgnore
+ @ApiModelProperty(value = "附加说明")
+ private String additionalInformation;
+ /**
+ * 自动授权
+ */
+ @ApiModelProperty(value = "自动授权")
+ private String autoapprove;
+
+
+}
diff --git a/blade-auth/src/main/java/org/springblade/system/entity/DataScope.java b/blade-auth/src/main/java/org/springblade/system/entity/DataScope.java
new file mode 100644
index 0000000..1fced27
--- /dev/null
+++ b/blade-auth/src/main/java/org/springblade/system/entity/DataScope.java
@@ -0,0 +1,86 @@
+/*
+ * 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.entity;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import org.springblade.core.mp.base.BaseEntity;
+
+/**
+ * 实体类
+ *
+ * @author BladeX
+ */
+@Data
+@TableName("blade_scope_data")
+@EqualsAndHashCode(callSuper = true)
+@ApiModel(value = "DataScope对象", description = "DataScope对象")
+public class DataScope extends BaseEntity {
+
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * 菜单主键
+ */
+ @ApiModelProperty(value = "菜单主键")
+ private Long menuId;
+ /**
+ * 资源编号
+ */
+ @ApiModelProperty(value = "资源编号")
+ private String resourceCode;
+ /**
+ * 数据权限名称
+ */
+ @ApiModelProperty(value = "数据权限名称")
+ private String scopeName;
+ /**
+ * 数据权限可见字段
+ */
+ @ApiModelProperty(value = "数据权限可见字段")
+ private String scopeField;
+ /**
+ * 数据权限类名
+ */
+ @ApiModelProperty(value = "数据权限类名")
+ private String scopeClass;
+ /**
+ * 数据权限字段
+ */
+ @ApiModelProperty(value = "数据权限字段")
+ private String scopeColumn;
+ /**
+ * 数据权限类型
+ */
+ @ApiModelProperty(value = "数据权限类型")
+ private Integer scopeType;
+ /**
+ * 数据权限值域
+ */
+ @ApiModelProperty(value = "数据权限值域")
+ private String scopeValue;
+ /**
+ * 数据权限备注
+ */
+ @ApiModelProperty(value = "数据权限备注")
+ private String remark;
+
+
+}
diff --git a/blade-auth/src/main/java/org/springblade/system/entity/Dept.java b/blade-auth/src/main/java/org/springblade/system/entity/Dept.java
new file mode 100644
index 0000000..259f273
--- /dev/null
+++ b/blade-auth/src/main/java/org/springblade/system/entity/Dept.java
@@ -0,0 +1,108 @@
+/*
+ * 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.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * 实体类
+ *
+ * @author Chill
+ */
+@Data
+@TableName("blade_dept")
+@ApiModel(value = "Dept对象", description = "Dept对象")
+public class Dept implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * 主键
+ */
+ @JsonSerialize(using = ToStringSerializer.class)
+ @ApiModelProperty(value = "主键")
+ @TableId(value = "id", type = IdType.ASSIGN_ID)
+ private Long id;
+
+ /**
+ * 租户ID
+ */
+ @ApiModelProperty(value = "租户ID")
+ private String tenantId;
+
+ /**
+ * 父主键
+ */
+ @JsonSerialize(using = ToStringSerializer.class)
+ @ApiModelProperty(value = "父主键")
+ private Long parentId;
+
+ /**
+ * 机构名
+ */
+ @ApiModelProperty(value = "机构名")
+ private String deptName;
+
+ /**
+ * 机构全称
+ */
+ @ApiModelProperty(value = "机构全称")
+ private String fullName;
+
+ /**
+ * 祖级机构主键
+ */
+ @ApiModelProperty(value = "祖级机构主键")
+ private String ancestors;
+
+ /**
+ * 机构类型
+ */
+ @ApiModelProperty(value = "机构类型")
+ private Integer deptCategory;
+
+ /**
+ * 排序
+ */
+ @ApiModelProperty(value = "排序")
+ private Integer sort;
+
+ /**
+ * 备注
+ */
+ @ApiModelProperty(value = "备注")
+ private String remark;
+
+ /**
+ * 是否已删除
+ */
+ @TableLogic
+ @ApiModelProperty(value = "是否已删除")
+ private Integer isDeleted;
+
+
+}
diff --git a/blade-auth/src/main/java/org/springblade/system/entity/Dict.java b/blade-auth/src/main/java/org/springblade/system/entity/Dict.java
new file mode 100644
index 0000000..eb0e44a
--- /dev/null
+++ b/blade-auth/src/main/java/org/springblade/system/entity/Dict.java
@@ -0,0 +1,102 @@
+/*
+ * 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.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * 实体类
+ *
+ * @author Chill
+ */
+@Data
+@TableName("blade_dict")
+@ApiModel(value = "Dict对象", description = "Dict对象")
+public class Dict implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * 主键
+ */
+ @JsonSerialize(using = ToStringSerializer.class)
+ @ApiModelProperty(value = "主键")
+ @TableId(value = "id", type = IdType.ASSIGN_ID)
+ private Long id;
+
+ /**
+ * 父主键
+ */
+ @JsonSerialize(using = ToStringSerializer.class)
+ @ApiModelProperty(value = "父主键")
+ private Long parentId;
+
+ /**
+ * 字典码
+ */
+ @ApiModelProperty(value = "字典码")
+ private String code;
+
+ /**
+ * 字典值
+ */
+ @ApiModelProperty(value = "字典值")
+ private String dictKey;
+
+ /**
+ * 字典名称
+ */
+ @ApiModelProperty(value = "字典名称")
+ private String dictValue;
+
+ /**
+ * 排序
+ */
+ @ApiModelProperty(value = "排序")
+ private Integer sort;
+
+ /**
+ * 字典备注
+ */
+ @ApiModelProperty(value = "字典备注")
+ private String remark;
+
+ /**
+ * 是否已封存
+ */
+ @ApiModelProperty(value = "是否已封存")
+ private Integer isSealed;
+
+ /**
+ * 是否已删除
+ */
+ @TableLogic
+ @ApiModelProperty(value = "是否已删除")
+ private Integer isDeleted;
+
+
+}
diff --git a/blade-auth/src/main/java/org/springblade/system/entity/DictBiz.java b/blade-auth/src/main/java/org/springblade/system/entity/DictBiz.java
new file mode 100644
index 0000000..95cee59
--- /dev/null
+++ b/blade-auth/src/main/java/org/springblade/system/entity/DictBiz.java
@@ -0,0 +1,108 @@
+/*
+ * 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.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * 实体类
+ *
+ * @author Chill
+ */
+@Data
+@TableName("blade_dict_biz")
+@ApiModel(value = "DictBiz对象", description = "DictBiz对象")
+public class DictBiz implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * 主键
+ */
+ @JsonSerialize(using = ToStringSerializer.class)
+ @ApiModelProperty(value = "主键")
+ @TableId(value = "id", type = IdType.ASSIGN_ID)
+ private Long id;
+
+ /**
+ * 租户ID
+ */
+ @ApiModelProperty(value = "租户ID")
+ private String tenantId;
+
+ /**
+ * 父主键
+ */
+ @JsonSerialize(using = ToStringSerializer.class)
+ @ApiModelProperty(value = "父主键")
+ private Long parentId;
+
+ /**
+ * 字典码
+ */
+ @ApiModelProperty(value = "字典码")
+ private String code;
+
+ /**
+ * 字典值
+ */
+ @ApiModelProperty(value = "字典值")
+ private String dictKey;
+
+ /**
+ * 字典名称
+ */
+ @ApiModelProperty(value = "字典名称")
+ private String dictValue;
+
+ /**
+ * 排序
+ */
+ @ApiModelProperty(value = "排序")
+ private Integer sort;
+
+ /**
+ * 字典备注
+ */
+ @ApiModelProperty(value = "字典备注")
+ private String remark;
+
+ /**
+ * 是否已封存
+ */
+ @ApiModelProperty(value = "是否已封存")
+ private Integer isSealed;
+
+ /**
+ * 是否已删除
+ */
+ @TableLogic
+ @ApiModelProperty(value = "是否已删除")
+ private Integer isDeleted;
+
+
+}
diff --git a/blade-auth/src/main/java/org/springblade/system/entity/Menu.java b/blade-auth/src/main/java/org/springblade/system/entity/Menu.java
new file mode 100644
index 0000000..70e738f
--- /dev/null
+++ b/blade-auth/src/main/java/org/springblade/system/entity/Menu.java
@@ -0,0 +1,149 @@
+/*
+ * 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.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import org.springblade.core.tool.utils.Func;
+
+import java.io.Serializable;
+import java.util.Objects;
+
+/**
+ * 实体类
+ *
+ * @author Chill
+ */
+@Data
+@TableName("blade_menu")
+@ApiModel(value = "Menu对象", description = "Menu对象")
+public class Menu implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * 主键
+ */
+ @JsonSerialize(using = ToStringSerializer.class)
+ @ApiModelProperty(value = "主键")
+ @TableId(value = "id", type = IdType.ASSIGN_ID)
+ private Long id;
+
+ /**
+ * 菜单父主键
+ */
+ @JsonSerialize(using = ToStringSerializer.class)
+ @ApiModelProperty(value = "菜单父主键")
+ private Long parentId;
+
+ /**
+ * 菜单编号
+ */
+ @ApiModelProperty(value = "菜单编号")
+ private String code;
+
+ /**
+ * 菜单名称
+ */
+ @ApiModelProperty(value = "菜单名称")
+ private String name;
+
+ /**
+ * 菜单别名
+ */
+ @ApiModelProperty(value = "菜单别名")
+ private String alias;
+
+ /**
+ * 请求地址
+ */
+ @ApiModelProperty(value = "请求地址")
+ private String path;
+
+ /**
+ * 菜单资源
+ */
+ @ApiModelProperty(value = "菜单资源")
+ private String source;
+
+ /**
+ * 排序
+ */
+ @ApiModelProperty(value = "排序")
+ private Integer sort;
+
+ /**
+ * 菜单类型
+ */
+ @ApiModelProperty(value = "菜单类型")
+ private Integer category;
+
+ /**
+ * 操作按钮类型
+ */
+ @ApiModelProperty(value = "操作按钮类型")
+ private Integer action;
+
+ /**
+ * 是否打开新页面
+ */
+ @ApiModelProperty(value = "是否打开新页面")
+ private Integer isOpen;
+
+ /**
+ * 备注
+ */
+ @ApiModelProperty(value = "备注")
+ private String remark;
+
+ /**
+ * 是否已删除
+ */
+ @TableLogic
+ @ApiModelProperty(value = "是否已删除")
+ private Integer isDeleted;
+
+
+ @Override
+ public boolean equals(Object obj) {
+ if (this == obj) {
+ return true;
+ }
+ if (obj == null) {
+ return false;
+ }
+ Menu other = (Menu) obj;
+ if (Func.equals(this.getId(), other.getId())) {
+ return true;
+ }
+ return false;
+ }
+
+ @Override
+ public int hashCode() {
+ return Objects.hash(id, parentId, code);
+ }
+
+
+}
diff --git a/blade-auth/src/main/java/org/springblade/system/entity/Param.java b/blade-auth/src/main/java/org/springblade/system/entity/Param.java
new file mode 100644
index 0000000..8e3c0cc
--- /dev/null
+++ b/blade-auth/src/main/java/org/springblade/system/entity/Param.java
@@ -0,0 +1,64 @@
+/*
+ * 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.entity;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import org.springblade.core.mp.base.BaseEntity;
+
+/**
+ * 实体类
+ *
+ * @author Chill
+ */
+@Data
+@TableName("blade_param")
+@EqualsAndHashCode(callSuper = true)
+@ApiModel(value = "Param对象", description = "Param对象")
+public class Param extends BaseEntity {
+
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * 参数名
+ */
+ @ApiModelProperty(value = "参数名")
+ private String paramName;
+
+ /**
+ * 参数键
+ */
+ @ApiModelProperty(value = "参数键")
+ private String paramKey;
+
+ /**
+ * 参数值
+ */
+ @ApiModelProperty(value = "参数值")
+ private String paramValue;
+
+ /**
+ * 备注
+ */
+ @ApiModelProperty(value = "备注")
+ private String remark;
+
+
+}
diff --git a/blade-auth/src/main/java/org/springblade/system/entity/Post.java b/blade-auth/src/main/java/org/springblade/system/entity/Post.java
new file mode 100644
index 0000000..26f2f68
--- /dev/null
+++ b/blade-auth/src/main/java/org/springblade/system/entity/Post.java
@@ -0,0 +1,66 @@
+/*
+ * 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.entity;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import org.springblade.core.tenant.mp.TenantEntity;
+
+/**
+ * 岗位表实体类
+ *
+ * @author Chill
+ */
+@Data
+@TableName("blade_post")
+@EqualsAndHashCode(callSuper = true)
+@ApiModel(value = "Post对象", description = "岗位表")
+public class Post extends TenantEntity {
+
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * 类型
+ */
+ @ApiModelProperty(value = "类型")
+ private Integer category;
+ /**
+ * 岗位编号
+ */
+ @ApiModelProperty(value = "岗位编号")
+ private String postCode;
+ /**
+ * 岗位名称
+ */
+ @ApiModelProperty(value = "岗位名称")
+ private String postName;
+ /**
+ * 岗位排序
+ */
+ @ApiModelProperty(value = "岗位排序")
+ private Integer sort;
+ /**
+ * 岗位描述
+ */
+ @ApiModelProperty(value = "岗位描述")
+ private String remark;
+
+
+}
diff --git a/blade-auth/src/main/java/org/springblade/system/entity/Region.java b/blade-auth/src/main/java/org/springblade/system/entity/Region.java
new file mode 100644
index 0000000..707a4ae
--- /dev/null
+++ b/blade-auth/src/main/java/org/springblade/system/entity/Region.java
@@ -0,0 +1,128 @@
+/*
+ * 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.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * 行政区划表实体类
+ *
+ * @author Chill
+ */
+@Data
+@TableName("blade_region")
+@ApiModel(value = "Region对象", description = "行政区划表")
+public class Region implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * 区划编号
+ */
+ @TableId(value = "code", type = IdType.INPUT)
+ @ApiModelProperty(value = "区划编号")
+ private String code;
+ /**
+ * 父区划编号
+ */
+ @ApiModelProperty(value = "父区划编号")
+ private String parentCode;
+ /**
+ * 祖区划编号
+ */
+ @ApiModelProperty(value = "祖区划编号")
+ private String ancestors;
+ /**
+ * 区划名称
+ */
+ @ApiModelProperty(value = "区划名称")
+ private String name;
+ /**
+ * 省级区划编号
+ */
+ @ApiModelProperty(value = "省级区划编号")
+ private String provinceCode;
+ /**
+ * 省级名称
+ */
+ @ApiModelProperty(value = "省级名称")
+ private String provinceName;
+ /**
+ * 市级区划编号
+ */
+ @ApiModelProperty(value = "市级区划编号")
+ private String cityCode;
+ /**
+ * 市级名称
+ */
+ @ApiModelProperty(value = "市级名称")
+ private String cityName;
+ /**
+ * 区级区划编号
+ */
+ @ApiModelProperty(value = "区级区划编号")
+ private String districtCode;
+ /**
+ * 区级名称
+ */
+ @ApiModelProperty(value = "区级名称")
+ private String districtName;
+ /**
+ * 镇级区划编号
+ */
+ @ApiModelProperty(value = "镇级区划编号")
+ private String townCode;
+ /**
+ * 镇级名称
+ */
+ @ApiModelProperty(value = "镇级名称")
+ private String townName;
+ /**
+ * 村级区划编号
+ */
+ @ApiModelProperty(value = "村级区划编号")
+ private String villageCode;
+ /**
+ * 村级名称
+ */
+ @ApiModelProperty(value = "村级名称")
+ private String villageName;
+ /**
+ * 层级
+ */
+ @ApiModelProperty(value = "层级")
+ private Integer regionLevel;
+ /**
+ * 排序
+ */
+ @ApiModelProperty(value = "排序")
+ private Integer sort;
+ /**
+ * 备注
+ */
+ @ApiModelProperty(value = "备注")
+ private String remark;
+
+
+}
diff --git a/blade-auth/src/main/java/org/springblade/system/entity/Role.java b/blade-auth/src/main/java/org/springblade/system/entity/Role.java
new file mode 100644
index 0000000..e1552dc
--- /dev/null
+++ b/blade-auth/src/main/java/org/springblade/system/entity/Role.java
@@ -0,0 +1,90 @@
+/*
+ * 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.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * 实体类
+ *
+ * @author Chill
+ */
+@Data
+@TableName("blade_role")
+@ApiModel(value = "Role对象", description = "Role对象")
+public class Role implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * 主键
+ */
+ @JsonSerialize(using = ToStringSerializer.class)
+ @ApiModelProperty(value = "主键")
+ @TableId(value = "id", type = IdType.ASSIGN_ID)
+ private Long id;
+
+ /**
+ * 租户ID
+ */
+ @ApiModelProperty(value = "租户ID")
+ private String tenantId;
+
+ /**
+ * 父主键
+ */
+ @JsonSerialize(using = ToStringSerializer.class)
+ @ApiModelProperty(value = "父主键")
+ private Long parentId;
+
+ /**
+ * 角色名
+ */
+ @ApiModelProperty(value = "角色名")
+ private String roleName;
+
+ /**
+ * 排序
+ */
+ @ApiModelProperty(value = "排序")
+ private Integer sort;
+
+ /**
+ * 角色别名
+ */
+ @ApiModelProperty(value = "角色别名")
+ private String roleAlias;
+
+ /**
+ * 是否已删除
+ */
+ @TableLogic
+ @ApiModelProperty(value = "是否已删除")
+ private Integer isDeleted;
+
+
+}
diff --git a/blade-auth/src/main/java/org/springblade/system/entity/RoleMenu.java b/blade-auth/src/main/java/org/springblade/system/entity/RoleMenu.java
new file mode 100644
index 0000000..eb1bcaf
--- /dev/null
+++ b/blade-auth/src/main/java/org/springblade/system/entity/RoleMenu.java
@@ -0,0 +1,65 @@
+/*
+ * 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.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * 实体类
+ *
+ * @author Chill
+ */
+@Data
+@TableName("blade_role_menu")
+@ApiModel(value = "RoleMenu对象", description = "RoleMenu对象")
+public class RoleMenu implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * 主键
+ */
+ @JsonSerialize(using = ToStringSerializer.class)
+ @ApiModelProperty(value = "主键")
+ @TableId(value = "id", type = IdType.ASSIGN_ID)
+ private Long id;
+
+ /**
+ * 菜单id
+ */
+ @JsonSerialize(using = ToStringSerializer.class)
+ @ApiModelProperty(value = "菜单id")
+ private Long menuId;
+
+ /**
+ * 角色id
+ */
+ @JsonSerialize(using = ToStringSerializer.class)
+ @ApiModelProperty(value = "角色id")
+ private Long roleId;
+
+
+}
diff --git a/blade-auth/src/main/java/org/springblade/system/entity/RoleScope.java b/blade-auth/src/main/java/org/springblade/system/entity/RoleScope.java
new file mode 100644
index 0000000..65c2e37
--- /dev/null
+++ b/blade-auth/src/main/java/org/springblade/system/entity/RoleScope.java
@@ -0,0 +1,71 @@
+/*
+ * 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.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * 实体类
+ *
+ * @author Chill
+ */
+@Data
+@TableName("blade_role_scope")
+@ApiModel(value = "RoleScope对象", description = "RoleScope对象")
+public class RoleScope implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * 主键
+ */
+ @JsonSerialize(using = ToStringSerializer.class)
+ @ApiModelProperty(value = "主键")
+ @TableId(value = "id", type = IdType.ASSIGN_ID)
+ private Long id;
+
+ /**
+ * 权限类型
+ */
+ @ApiModelProperty(value = "权限类型")
+ private Integer scopeCategory;
+
+ /**
+ * 权限id
+ */
+ @JsonSerialize(using = ToStringSerializer.class)
+ @ApiModelProperty(value = "权限id")
+ private Long scopeId;
+
+ /**
+ * 角色id
+ */
+ @JsonSerialize(using = ToStringSerializer.class)
+ @ApiModelProperty(value = "角色id")
+ private Long roleId;
+
+
+}
diff --git a/blade-auth/src/main/java/org/springblade/system/entity/Tenant.java b/blade-auth/src/main/java/org/springblade/system/entity/Tenant.java
new file mode 100644
index 0000000..c5e3f32
--- /dev/null
+++ b/blade-auth/src/main/java/org/springblade/system/entity/Tenant.java
@@ -0,0 +1,112 @@
+/*
+ * 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.entity;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.fasterxml.jackson.databind.ser.std.NullSerializer;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import org.springblade.core.mp.base.BaseEntity;
+import org.springblade.core.tool.utils.DateUtil;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.util.Date;
+
+/**
+ * 实体类
+ *
+ * @author Chill
+ */
+@Data
+@TableName("blade_tenant")
+@EqualsAndHashCode(callSuper = true)
+@ApiModel(value = "Tenant对象", description = "Tenant对象")
+public class Tenant extends BaseEntity {
+
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * 租户ID
+ */
+ @ApiModelProperty(value = "租户ID")
+ private String tenantId;
+ /**
+ * 租户名称
+ */
+ @ApiModelProperty(value = "租户名称")
+ private String tenantName;
+ /**
+ * 域名地址
+ */
+ @ApiModelProperty(value = "域名地址")
+ private String domainUrl;
+ /**
+ * 系统背景
+ */
+ @ApiModelProperty(value = "系统背景")
+ private String backgroundUrl;
+ /**
+ * 联系人
+ */
+ @ApiModelProperty(value = "联系人")
+ private String linkman;
+ /**
+ * 联系电话
+ */
+ @ApiModelProperty(value = "联系电话")
+ private String contactNumber;
+ /**
+ * 联系地址
+ */
+ @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
+ */
+ @JsonSerialize(nullsUsing = NullSerializer.class)
+ @ApiModelProperty(value = "产品包ID")
+ private Long packageId;
+ /**
+ * 数据源ID
+ */
+ @JsonSerialize(nullsUsing = NullSerializer.class)
+ @ApiModelProperty(value = "数据源ID")
+ private Long datasourceId;
+ /**
+ * 授权码
+ */
+ @ApiModelProperty(value = "授权码")
+ private String licenseKey;
+
+
+}
diff --git a/blade-auth/src/main/java/org/springblade/system/entity/TenantPackage.java b/blade-auth/src/main/java/org/springblade/system/entity/TenantPackage.java
new file mode 100644
index 0000000..1e82d89
--- /dev/null
+++ b/blade-auth/src/main/java/org/springblade/system/entity/TenantPackage.java
@@ -0,0 +1,56 @@
+/*
+ * 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.entity;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import org.springblade.core.mp.base.BaseEntity;
+
+/**
+ * 租户产品表实体类
+ *
+ * @author BladeX
+ */
+@Data
+@TableName("blade_tenant_package")
+@EqualsAndHashCode(callSuper = true)
+@ApiModel(value = "TenantPackage对象", description = "租户产品表")
+public class TenantPackage extends BaseEntity {
+
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * 产品包名称
+ */
+ @ApiModelProperty(value = "产品包名称")
+ private String packageName;
+ /**
+ * 菜单ID
+ */
+ @ApiModelProperty(value = "菜单ID")
+ private String menuId;
+ /**
+ * 备注
+ */
+ @ApiModelProperty(value = "备注")
+ private String remark;
+
+
+}
diff --git a/blade-auth/src/main/java/org/springblade/system/entity/TopMenu.java b/blade-auth/src/main/java/org/springblade/system/entity/TopMenu.java
new file mode 100644
index 0000000..37f5af7
--- /dev/null
+++ b/blade-auth/src/main/java/org/springblade/system/entity/TopMenu.java
@@ -0,0 +1,61 @@
+/*
+ * 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.entity;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import org.springblade.core.tenant.mp.TenantEntity;
+
+/**
+ * 顶部菜单表实体类
+ *
+ * @author BladeX
+ */
+@Data
+@TableName("blade_top_menu")
+@EqualsAndHashCode(callSuper = true)
+@ApiModel(value = "TopMenu对象", description = "顶部菜单表")
+public class TopMenu extends TenantEntity {
+
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * 顶部菜单编号
+ */
+ @ApiModelProperty(value = "顶部菜单编号")
+ private String code;
+ /**
+ * 顶部菜单名
+ */
+ @ApiModelProperty(value = "顶部菜单名")
+ private String name;
+ /**
+ * 顶部菜单资源
+ */
+ @ApiModelProperty(value = "顶部菜单资源")
+ private String source;
+ /**
+ * 顶部菜单排序
+ */
+ @ApiModelProperty(value = "顶部菜单排序")
+ private Integer sort;
+
+
+}
diff --git a/blade-auth/src/main/java/org/springblade/system/entity/TopMenuSetting.java b/blade-auth/src/main/java/org/springblade/system/entity/TopMenuSetting.java
new file mode 100644
index 0000000..967fc63
--- /dev/null
+++ b/blade-auth/src/main/java/org/springblade/system/entity/TopMenuSetting.java
@@ -0,0 +1,38 @@
+package org.springblade.system.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
+import lombok.Data;
+
+/**
+ * TopMenuSetting
+ *
+ * @author Chill
+ */
+@Data
+@TableName("blade_top_menu_setting")
+public class TopMenuSetting {
+
+ /**
+ * 主键id
+ */
+ @JsonSerialize(using = ToStringSerializer.class)
+ @TableId(value = "id", type = IdType.ASSIGN_ID)
+ private Long id;
+
+ /**
+ * 顶部菜单id
+ */
+ @JsonSerialize(using = ToStringSerializer.class)
+ private Long topMenuId;
+
+ /**
+ * 菜单id
+ */
+ @JsonSerialize(using = ToStringSerializer.class)
+ private Long menuId;
+
+}
diff --git a/blade-auth/src/main/java/org/springblade/auth/AuthApplication.java b/blade-auth/src/main/java/org/springblade/system/enums/DictBizEnum.java
similarity index 67%
copy from blade-auth/src/main/java/org/springblade/auth/AuthApplication.java
copy to blade-auth/src/main/java/org/springblade/system/enums/DictBizEnum.java
index 8c18654..999201a 100644
--- a/blade-auth/src/main/java/org/springblade/auth/AuthApplication.java
+++ b/blade-auth/src/main/java/org/springblade/system/enums/DictBizEnum.java
@@ -14,23 +14,26 @@
* this software without specific prior written permission.
* Author: Chill 庄骞 (smallchill@163.com)
*/
-package org.springblade.auth;
+package org.springblade.system.enums;
-
-import org.springblade.core.cloud.client.BladeCloudApplication;
-import org.springblade.core.launch.BladeApplication;
-import org.springblade.core.launch.constant.AppConstant;
+import lombok.AllArgsConstructor;
+import lombok.Getter;
/**
- * 用户认证服务器
+ * 业务字典枚举类
*
* @author Chill
*/
-@BladeCloudApplication
-public class AuthApplication {
+@Getter
+@AllArgsConstructor
+public enum DictBizEnum {
- public static void main(String[] args) {
- BladeApplication.run(AppConstant.APPLICATION_AUTH_NAME, AuthApplication.class, args);
- }
+ /**
+ * 测试
+ */
+ TEST("test"),
+ ;
+
+ final String name;
}
diff --git a/blade-auth/src/main/java/org/springblade/system/enums/DictEnum.java b/blade-auth/src/main/java/org/springblade/system/enums/DictEnum.java
new file mode 100644
index 0000000..609b7cc
--- /dev/null
+++ b/blade-auth/src/main/java/org/springblade/system/enums/DictEnum.java
@@ -0,0 +1,95 @@
+/*
+ * 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.enums;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+/**
+ * 系统字典枚举类
+ *
+ * @author Chill
+ */
+@Getter
+@AllArgsConstructor
+public enum DictEnum {
+
+ /**
+ * 性别
+ */
+ SEX("sex"),
+ /**
+ * 通知类型
+ */
+ NOTICE("notice"),
+ /**
+ * 菜单类型
+ */
+ MENU_CATEGORY("menu_category"),
+ /**
+ * 按钮功能
+ */
+ BUTTON_FUNC("button_func"),
+ /**
+ * 是否
+ */
+ YES_NO("yes_no"),
+ /**
+ * 流程类型
+ */
+ FLOW("flow"),
+ /**
+ * 机构类型
+ */
+ ORG_CATEGORY("org_category"),
+ /**
+ * 数据权限
+ */
+ DATA_SCOPE_TYPE("data_scope_type"),
+ /**
+ * 接口权限
+ */
+ API_SCOPE_TYPE("api_scope_type"),
+ /**
+ * 权限类型
+ */
+ SCOPE_CATEGORY("scope_category"),
+ /**
+ * 对象存储类型
+ */
+ OSS("oss"),
+ /**
+ * 短信服务类型
+ */
+ SMS("sms"),
+ /**
+ * 岗位类型
+ */
+ POST_CATEGORY("post_category"),
+ /**
+ * 行政区划
+ */
+ REGION("region"),
+ /**
+ * 用户平台
+ */
+ USER_TYPE("user_type"),
+ ;
+
+ final String name;
+
+}
diff --git a/blade-auth/src/main/java/org/springblade/system/excel/RegionExcel.java b/blade-auth/src/main/java/org/springblade/system/excel/RegionExcel.java
new file mode 100644
index 0000000..a3b78e5
--- /dev/null
+++ b/blade-auth/src/main/java/org/springblade/system/excel/RegionExcel.java
@@ -0,0 +1,90 @@
+/*
+ * 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.excel;
+
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.alibaba.excel.annotation.write.style.ColumnWidth;
+import com.alibaba.excel.annotation.write.style.ContentRowHeight;
+import com.alibaba.excel.annotation.write.style.HeadRowHeight;
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * RegionExcel
+ *
+ * @author Chill
+ */
+@Data
+@ColumnWidth(16)
+@HeadRowHeight(20)
+@ContentRowHeight(18)
+public class RegionExcel implements Serializable {
+ private static final long serialVersionUID = 1L;
+
+ @ExcelProperty("区划编号")
+ private String code;
+
+ @ExcelProperty("父区划编号")
+ private String parentCode;
+
+ @ExcelProperty("祖区划编号")
+ private String ancestors;
+
+ @ExcelProperty("区划名称")
+ private String name;
+
+ @ExcelProperty("省级区划编号")
+ private String provinceCode;
+
+ @ExcelProperty("省级名称")
+ private String provinceName;
+
+ @ExcelProperty("市级区划编号")
+ private String cityCode;
+
+ @ExcelProperty("市级名称")
+ private String cityName;
+
+ @ExcelProperty("区级区划编号")
+ private String districtCode;
+
+ @ExcelProperty("区级名称")
+ private String districtName;
+
+ @ExcelProperty("镇级区划编号")
+ private String townCode;
+
+ @ExcelProperty("镇级名称")
+ private String townName;
+
+ @ExcelProperty("村级区划编号")
+ private String villageCode;
+
+ @ExcelProperty("村级名称")
+ private String villageName;
+
+ @ExcelProperty("层级")
+ private Integer regionLevel;
+
+ @ExcelProperty("排序")
+ private Integer sort;
+
+ @ExcelProperty("备注")
+ private String remark;
+
+}
diff --git a/blade-auth/src/main/java/org/springblade/auth/AuthApplication.java b/blade-auth/src/main/java/org/springblade/system/excel/RegionImporter.java
similarity index 62%
copy from blade-auth/src/main/java/org/springblade/auth/AuthApplication.java
copy to blade-auth/src/main/java/org/springblade/system/excel/RegionImporter.java
index 8c18654..0d17b53 100644
--- a/blade-auth/src/main/java/org/springblade/auth/AuthApplication.java
+++ b/blade-auth/src/main/java/org/springblade/system/excel/RegionImporter.java
@@ -14,23 +14,27 @@
* this software without specific prior written permission.
* Author: Chill 庄骞 (smallchill@163.com)
*/
-package org.springblade.auth;
+package org.springblade.system.excel;
+import lombok.RequiredArgsConstructor;
+import org.springblade.core.excel.support.ExcelImporter;
+import org.springblade.system.service.IRegionService;
-import org.springblade.core.cloud.client.BladeCloudApplication;
-import org.springblade.core.launch.BladeApplication;
-import org.springblade.core.launch.constant.AppConstant;
+import java.util.List;
/**
- * 用户认证服务器
+ * 行政区划数据导入类
*
* @author Chill
*/
-@BladeCloudApplication
-public class AuthApplication {
+@RequiredArgsConstructor
+public class RegionImporter implements ExcelImporter<RegionExcel> {
- public static void main(String[] args) {
- BladeApplication.run(AppConstant.APPLICATION_AUTH_NAME, AuthApplication.class, args);
+ private final IRegionService service;
+ private final Boolean isCovered;
+
+ @Override
+ public void save(List<RegionExcel> data) {
+ service.importRegion(data, isCovered);
}
-
}
diff --git a/blade-auth/src/main/java/org/springblade/auth/AuthApplication.java b/blade-auth/src/main/java/org/springblade/system/mapper/ApiScopeMapper.java
similarity index 65%
copy from blade-auth/src/main/java/org/springblade/auth/AuthApplication.java
copy to blade-auth/src/main/java/org/springblade/system/mapper/ApiScopeMapper.java
index 8c18654..3904a05 100644
--- a/blade-auth/src/main/java/org/springblade/auth/AuthApplication.java
+++ b/blade-auth/src/main/java/org/springblade/system/mapper/ApiScopeMapper.java
@@ -14,23 +14,16 @@
* this software without specific prior written permission.
* Author: Chill 庄骞 (smallchill@163.com)
*/
-package org.springblade.auth;
+package org.springblade.system.mapper;
-
-import org.springblade.core.cloud.client.BladeCloudApplication;
-import org.springblade.core.launch.BladeApplication;
-import org.springblade.core.launch.constant.AppConstant;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.springblade.system.entity.ApiScope;
/**
- * 用户认证服务器
+ * Mapper 接口
*
- * @author Chill
+ * @author BladeX
*/
-@BladeCloudApplication
-public class AuthApplication {
-
- public static void main(String[] args) {
- BladeApplication.run(AppConstant.APPLICATION_AUTH_NAME, AuthApplication.class, args);
- }
+public interface ApiScopeMapper extends BaseMapper<ApiScope> {
}
diff --git a/blade-auth/src/main/java/org/springblade/system/mapper/ApiScopeMapper.xml b/blade-auth/src/main/java/org/springblade/system/mapper/ApiScopeMapper.xml
new file mode 100644
index 0000000..5d62dc0
--- /dev/null
+++ b/blade-auth/src/main/java/org/springblade/system/mapper/ApiScopeMapper.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="org.springblade.system.mapper.ApiScopeMapper">
+
+</mapper>
diff --git a/blade-auth/src/main/java/org/springblade/auth/AuthApplication.java b/blade-auth/src/main/java/org/springblade/system/mapper/AuthClientMapper.java
similarity index 66%
copy from blade-auth/src/main/java/org/springblade/auth/AuthApplication.java
copy to blade-auth/src/main/java/org/springblade/system/mapper/AuthClientMapper.java
index 8c18654..73d2d03 100644
--- a/blade-auth/src/main/java/org/springblade/auth/AuthApplication.java
+++ b/blade-auth/src/main/java/org/springblade/system/mapper/AuthClientMapper.java
@@ -14,23 +14,16 @@
* this software without specific prior written permission.
* Author: Chill 庄骞 (smallchill@163.com)
*/
-package org.springblade.auth;
+package org.springblade.system.mapper;
-
-import org.springblade.core.cloud.client.BladeCloudApplication;
-import org.springblade.core.launch.BladeApplication;
-import org.springblade.core.launch.constant.AppConstant;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.springblade.system.entity.AuthClient;
/**
- * 用户认证服务器
+ * Mapper 接口
*
* @author Chill
*/
-@BladeCloudApplication
-public class AuthApplication {
-
- public static void main(String[] args) {
- BladeApplication.run(AppConstant.APPLICATION_AUTH_NAME, AuthApplication.class, args);
- }
+public interface AuthClientMapper extends BaseMapper<AuthClient> {
}
diff --git a/blade-auth/src/main/java/org/springblade/system/mapper/AuthClientMapper.xml b/blade-auth/src/main/java/org/springblade/system/mapper/AuthClientMapper.xml
new file mode 100644
index 0000000..bf617a7
--- /dev/null
+++ b/blade-auth/src/main/java/org/springblade/system/mapper/AuthClientMapper.xml
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="org.springblade.system.mapper.AuthClientMapper">
+
+ <!-- 通用查询映射结果 -->
+ <resultMap id="clientResultMap" type="org.springblade.system.entity.AuthClient">
+ <result column="id" property="id"/>
+ <result column="create_user" property="createUser"/>
+ <result column="create_time" property="createTime"/>
+ <result column="update_user" property="updateUser"/>
+ <result column="update_time" property="updateTime"/>
+ <result column="status" property="status"/>
+ <result column="is_deleted" property="isDeleted"/>
+ <result column="client_id" property="clientId"/>
+ <result column="client_secret" property="clientSecret"/>
+ <result column="resources_ids" property="resourceIds"/>
+ <result column="scope" property="scope"/>
+ <result column="authorized_grant_types" property="authorizedGrantTypes"/>
+ <result column="web_server_redirect_uri" property="webServerRedirectUri"/>
+ <result column="authorities" property="authorities"/>
+ <result column="access_token_validity" property="accessTokenValidity"/>
+ <result column="refresh_token_validity" property="refreshTokenValidity"/>
+ <result column="additional_information" property="additionalInformation"/>
+ <result column="autoapprove" property="autoapprove"/>
+ </resultMap>
+
+</mapper>
diff --git a/blade-auth/src/main/java/org/springblade/auth/AuthApplication.java b/blade-auth/src/main/java/org/springblade/system/mapper/DataScopeMapper.java
similarity index 65%
copy from blade-auth/src/main/java/org/springblade/auth/AuthApplication.java
copy to blade-auth/src/main/java/org/springblade/system/mapper/DataScopeMapper.java
index 8c18654..8df5a4e 100644
--- a/blade-auth/src/main/java/org/springblade/auth/AuthApplication.java
+++ b/blade-auth/src/main/java/org/springblade/system/mapper/DataScopeMapper.java
@@ -14,23 +14,16 @@
* this software without specific prior written permission.
* Author: Chill 庄骞 (smallchill@163.com)
*/
-package org.springblade.auth;
+package org.springblade.system.mapper;
-
-import org.springblade.core.cloud.client.BladeCloudApplication;
-import org.springblade.core.launch.BladeApplication;
-import org.springblade.core.launch.constant.AppConstant;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.springblade.system.entity.DataScope;
/**
- * 用户认证服务器
+ * Mapper 接口
*
- * @author Chill
+ * @author BladeX
*/
-@BladeCloudApplication
-public class AuthApplication {
-
- public static void main(String[] args) {
- BladeApplication.run(AppConstant.APPLICATION_AUTH_NAME, AuthApplication.class, args);
- }
+public interface DataScopeMapper extends BaseMapper<DataScope> {
}
diff --git a/blade-auth/src/main/java/org/springblade/system/mapper/DataScopeMapper.xml b/blade-auth/src/main/java/org/springblade/system/mapper/DataScopeMapper.xml
new file mode 100644
index 0000000..cbb4659
--- /dev/null
+++ b/blade-auth/src/main/java/org/springblade/system/mapper/DataScopeMapper.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="org.springblade.system.mapper.DataScopeMapper">
+
+</mapper>
diff --git a/blade-auth/src/main/java/org/springblade/system/mapper/DeptMapper.java b/blade-auth/src/main/java/org/springblade/system/mapper/DeptMapper.java
new file mode 100644
index 0000000..f6a10ff
--- /dev/null
+++ b/blade-auth/src/main/java/org/springblade/system/mapper/DeptMapper.java
@@ -0,0 +1,68 @@
+/*
+ * 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.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.springblade.system.entity.Dept;
+import org.springblade.system.vo.DeptVO;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * DeptMapper 接口
+ *
+ * @author Chill
+ */
+public interface DeptMapper extends BaseMapper<Dept> {
+
+ /**
+ * 懒加载部门列表
+ *
+ * @param tenantId
+ * @param parentId
+ * @param param
+ * @return
+ */
+ List<DeptVO> lazyList(String tenantId, Long parentId, Map<String, Object> param);
+
+ /**
+ * 获取树形节点
+ *
+ * @param tenantId
+ * @return
+ */
+ List<DeptVO> tree(String tenantId);
+
+ /**
+ * 懒加载获取树形节点
+ *
+ * @param tenantId
+ * @param parentId
+ * @return
+ */
+ List<DeptVO> lazyTree(String tenantId, Long parentId);
+
+ /**
+ * 获取部门名
+ *
+ * @param ids
+ * @return
+ */
+ List<String> getDeptNames(Long[] ids);
+
+}
diff --git a/blade-auth/src/main/java/org/springblade/system/mapper/DeptMapper.xml b/blade-auth/src/main/java/org/springblade/system/mapper/DeptMapper.xml
new file mode 100644
index 0000000..6054664
--- /dev/null
+++ b/blade-auth/src/main/java/org/springblade/system/mapper/DeptMapper.xml
@@ -0,0 +1,115 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="org.springblade.system.mapper.DeptMapper">
+
+ <!-- 通用查询映射结果 -->
+ <resultMap id="deptResultMap" type="org.springblade.system.entity.Dept">
+ <id column="id" property="id"/>
+ <result column="parent_id" property="parentId"/>
+ <result column="dept_name" property="deptName"/>
+ <result column="full_name" property="fullName"/>
+ <result column="ancestors" property="ancestors"/>
+ <result column="dept_category" property="deptCategory"/>
+ <result column="sort" property="sort"/>
+ <result column="remark" property="remark"/>
+ <result column="is_deleted" property="isDeleted"/>
+ </resultMap>
+
+ <resultMap id="deptVOResultMap" type="org.springblade.system.vo.DeptVO">
+ <id column="id" property="id"/>
+ <result column="parent_id" property="parentId"/>
+ <result column="dept_name" property="deptName"/>
+ <result column="full_name" property="fullName"/>
+ <result column="ancestors" property="ancestors"/>
+ <result column="dept_category" property="deptCategory"/>
+ <result column="sort" property="sort"/>
+ <result column="remark" property="remark"/>
+ <result column="is_deleted" property="isDeleted"/>
+ <result column="has_children" property="hasChildren"/>
+ </resultMap>
+
+ <resultMap id="treeNodeResultMap" type="org.springblade.core.tool.node.TreeNode">
+ <id column="id" property="id"/>
+ <result column="parent_id" property="parentId"/>
+ <result column="title" property="title"/>
+ <result column="value" property="value"/>
+ <result column="key" property="key"/>
+ <result column="has_children" property="hasChildren"/>
+ </resultMap>
+
+ <select id="lazyList" resultMap="deptVOResultMap">
+ SELECT
+ dept.* ,
+ (
+ SELECT
+ CASE WHEN count(1) > 0 THEN 1 ELSE 0 END
+ FROM
+ blade_dept
+ WHERE
+ parent_id = dept.id and is_deleted = 0
+ ) AS "has_children"
+ FROM
+ blade_dept dept
+ WHERE dept.is_deleted = 0
+ <if test="param1!=null and param1!=''">
+ and dept.tenant_id = #{param1}
+ </if>
+ <if test="param2!=null">
+ and dept.parent_id = #{param2}
+ </if>
+ <if test="param3.deptName!=null and param3.deptName!=''">
+ and dept.dept_name like concat(concat('%', #{param3.deptName}),'%')
+ </if>
+ <if test="param3.fullName!=null and param3.fullName!=''">
+ and dept.full_name like concat(concat('%', #{param3.fullName}),'%')
+ </if>
+ ORDER BY dept.sort
+ </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
+ <if test="_parameter!=null and _parameter!=''">
+ and tenant_id = #{_parameter}
+ </if>
+ ORDER BY sort
+ </select>
+
+ <select id="lazyTree" resultMap="treeNodeResultMap" >
+ SELECT
+ dept.id,
+ dept.parent_id,
+ dept.dept_name AS title,
+ dept.id AS "value",
+ dept.id AS "key",
+ (
+ SELECT
+ CASE WHEN count(1) > 0 THEN 1 ELSE 0 END
+ FROM
+ blade_dept
+ WHERE
+ parent_id = dept.id and is_deleted = 0
+ ) AS "has_children"
+ FROM
+ blade_dept dept
+ WHERE
+ dept.parent_id = #{param2} AND dept.is_deleted = 0
+ <if test="param1!=null and param1!=''">
+ and dept.tenant_id = #{param1}
+ </if>
+ ORDER BY dept.sort
+ </select>
+
+ <select id="getDeptNames" resultType="java.lang.String">
+ SELECT
+ dept_name
+ FROM
+ blade_dept
+ WHERE
+ id IN
+ <foreach collection="array" item="ids" index="index" open="(" close=")" separator=",">
+ #{ids}
+ </foreach>
+ and is_deleted = 0
+ </select>
+
+</mapper>
diff --git a/blade-auth/src/main/java/org/springblade/system/mapper/DictBizMapper.java b/blade-auth/src/main/java/org/springblade/system/mapper/DictBizMapper.java
new file mode 100644
index 0000000..4e56d9d
--- /dev/null
+++ b/blade-auth/src/main/java/org/springblade/system/mapper/DictBizMapper.java
@@ -0,0 +1,64 @@
+/*
+ * 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.mapper;
+
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.springblade.system.entity.DictBiz;
+import org.springblade.system.vo.DictBizVO;
+
+import java.util.List;
+
+/**
+ * Mapper 接口
+ *
+ * @author Chill
+ */
+public interface DictBizMapper extends BaseMapper<DictBiz> {
+
+ /**
+ * 获取字典表对应中文
+ *
+ * @param code 字典编号
+ * @param dictKey 字典序号
+ * @return
+ */
+ String getValue(String code, String dictKey);
+
+ /**
+ * 获取字典表
+ *
+ * @param code 字典编号
+ * @return
+ */
+ List<DictBiz> getList(String code);
+
+ /**
+ * 获取树形节点
+ *
+ * @return
+ */
+ List<DictBizVO> tree();
+
+ /**
+ * 获取树形节点
+ *
+ * @return
+ */
+ List<DictBizVO> parentTree();
+
+}
diff --git a/blade-auth/src/main/java/org/springblade/system/mapper/DictBizMapper.xml b/blade-auth/src/main/java/org/springblade/system/mapper/DictBizMapper.xml
new file mode 100644
index 0000000..f908201
--- /dev/null
+++ b/blade-auth/src/main/java/org/springblade/system/mapper/DictBizMapper.xml
@@ -0,0 +1,51 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="org.springblade.system.mapper.DictBizMapper">
+
+ <!-- 通用查询映射结果 -->
+ <resultMap id="dictResultMap" type="org.springblade.system.entity.DictBiz">
+ <id column="id" property="id"/>
+ <result column="tenant_id" property="tenantId"/>
+ <result column="parent_id" property="parentId"/>
+ <result column="code" property="code"/>
+ <result column="dict_key" property="dictKey"/>
+ <result column="dict_value" property="dictValue"/>
+ <result column="sort" property="sort"/>
+ <result column="remark" property="remark"/>
+ <result column="is_deleted" property="isDeleted"/>
+ </resultMap>
+
+ <resultMap id="treeNodeResultMap" type="org.springblade.core.tool.node.TreeNode">
+ <id column="id" property="id"/>
+ <result column="parent_id" property="parentId"/>
+ <result column="title" property="title"/>
+ <result column="value" property="value"/>
+ <result column="key" property="key"/>
+ </resultMap>
+
+ <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
+ </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
+ </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>
+
+ <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>
+
+ <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>
+
+</mapper>
diff --git a/blade-auth/src/main/java/org/springblade/system/mapper/DictMapper.java b/blade-auth/src/main/java/org/springblade/system/mapper/DictMapper.java
new file mode 100644
index 0000000..b237476
--- /dev/null
+++ b/blade-auth/src/main/java/org/springblade/system/mapper/DictMapper.java
@@ -0,0 +1,73 @@
+/*
+ * 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.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import org.springblade.system.entity.Dict;
+import org.springblade.system.vo.DictVO;
+
+import java.util.List;
+
+/**
+ * Mapper 接口
+ *
+ * @author Chill
+ */
+public interface DictMapper extends BaseMapper<Dict> {
+
+ /**
+ * 自定义分页
+ *
+ * @param page
+ * @param dict
+ * @return
+ */
+ List<DictVO> selectDictPage(IPage page, DictVO dict);
+
+ /**
+ * 获取字典表对应中文
+ *
+ * @param code 字典编号
+ * @param dictKey 字典序号
+ * @return
+ */
+ String getValue(String code, String dictKey);
+
+ /**
+ * 获取字典表
+ *
+ * @param code 字典编号
+ * @return
+ */
+ List<Dict> getList(String code);
+
+ /**
+ * 获取树形节点
+ *
+ * @return
+ */
+ List<DictVO> tree();
+
+ /**
+ * 获取树形节点
+ *
+ * @return
+ */
+ List<DictVO> parentTree();
+
+}
diff --git a/blade-auth/src/main/java/org/springblade/system/mapper/DictMapper.xml b/blade-auth/src/main/java/org/springblade/system/mapper/DictMapper.xml
new file mode 100644
index 0000000..cb46d7a
--- /dev/null
+++ b/blade-auth/src/main/java/org/springblade/system/mapper/DictMapper.xml
@@ -0,0 +1,54 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="org.springblade.system.mapper.DictMapper">
+
+ <!-- 通用查询映射结果 -->
+ <resultMap id="dictResultMap" type="org.springblade.system.entity.Dict">
+ <id column="id" property="id"/>
+ <result column="parent_id" property="parentId"/>
+ <result column="code" property="code"/>
+ <result column="dict_key" property="dictKey"/>
+ <result column="dict_value" property="dictValue"/>
+ <result column="sort" property="sort"/>
+ <result column="remark" property="remark"/>
+ <result column="is_deleted" property="isDeleted"/>
+ </resultMap>
+
+ <resultMap id="treeNodeResultMap" type="org.springblade.core.tool.node.TreeNode">
+ <id column="id" property="id"/>
+ <result column="parent_id" property="parentId"/>
+ <result column="title" property="title"/>
+ <result column="value" property="value"/>
+ <result column="key" property="key"/>
+ </resultMap>
+
+ <select id="selectDictPage" resultMap="dictResultMap">
+ select * from blade_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
+ </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
+ </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>
+
+ <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>
+
+ <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>
+
+</mapper>
diff --git a/blade-auth/src/main/java/org/springblade/system/mapper/MenuMapper.java b/blade-auth/src/main/java/org/springblade/system/mapper/MenuMapper.java
new file mode 100644
index 0000000..c4f9850
--- /dev/null
+++ b/blade-auth/src/main/java/org/springblade/system/mapper/MenuMapper.java
@@ -0,0 +1,183 @@
+/*
+ * 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.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.springblade.core.tool.node.TreeNode;
+import org.springblade.system.dto.MenuDTO;
+import org.springblade.system.entity.Menu;
+import org.springblade.system.vo.MenuVO;
+
+import java.util.List;
+import java.util.Map;
+
+
+/**
+ * MenuMapper 接口
+ *
+ * @author Chill
+ */
+public interface MenuMapper extends BaseMapper<Menu> {
+
+ /**
+ * 懒加载列表
+ *
+ * @param parentId
+ * @param param
+ * @return
+ */
+ List<MenuVO> lazyList(Long parentId, Map<String, Object> param);
+
+ /**
+ * 懒加载菜单列表
+ *
+ * @param parentId
+ * @param param
+ * @return
+ */
+ List<MenuVO> lazyMenuList(Long parentId, Map<String, Object> param);
+
+ /**
+ * 树形结构
+ *
+ * @return
+ */
+ List<TreeNode> tree();
+
+ /**
+ * 授权树形结构
+ *
+ * @return
+ */
+ List<TreeNode> grantTree();
+
+ /**
+ * 授权树形结构
+ *
+ * @param roleId
+ * @return
+ */
+ List<TreeNode> grantTreeByRole(List<Long> roleId);
+
+ /**
+ * 顶部菜单树形结构
+ *
+ * @return
+ */
+ List<TreeNode> grantTopTree();
+
+ /**
+ * 顶部菜单树形结构
+ *
+ * @param roleId
+ * @return
+ */
+ List<TreeNode> grantTopTreeByRole(List<Long> roleId);
+
+ /**
+ * 数据权限授权树形结构
+ *
+ * @return
+ */
+ List<TreeNode> grantDataScopeTree();
+
+ /**
+ * 接口权限授权树形结构
+ *
+ * @return
+ */
+ List<TreeNode> grantApiScopeTree();
+
+ /**
+ * 数据权限授权树形结构
+ *
+ * @param roleId
+ * @return
+ */
+ List<TreeNode> grantDataScopeTreeByRole(List<Long> roleId);
+
+ /**
+ * 接口权限授权树形结构
+ *
+ * @param roleId
+ * @return
+ */
+ List<TreeNode> grantApiScopeTreeByRole(List<Long> roleId);
+
+ /**
+ * 所有菜单
+ *
+ * @return
+ */
+ List<Menu> allMenu();
+
+ /**
+ * 权限配置菜单
+ *
+ * @param roleId
+ * @param topMenuId
+ * @return
+ */
+ List<Menu> roleMenu(List<Long> roleId, Long topMenuId);
+
+ /**
+ * 权限配置菜单
+ *
+ * @param roleId
+ * @return
+ */
+ List<Menu> roleMenuByRoleId(List<Long> roleId);
+
+ /**
+ * 权限配置菜单
+ *
+ * @param topMenuId
+ * @return
+ */
+ List<Menu> roleMenuByTopMenuId(Long topMenuId);
+
+ /**
+ * 菜单树形结构
+ *
+ * @param roleId
+ * @return
+ */
+ List<Menu> routes(List<Long> roleId);
+
+ /**
+ * 按钮树形结构
+ *
+ * @return
+ */
+ List<Menu> allButtons();
+
+ /**
+ * 按钮树形结构
+ *
+ * @param roleId
+ * @return
+ */
+ List<Menu> buttons(List<Long> roleId);
+
+ /**
+ * 获取配置的角色权限
+ *
+ * @param roleIds
+ * @return
+ */
+ List<MenuDTO> authRoutes(List<Long> roleIds);
+}
diff --git a/blade-auth/src/main/java/org/springblade/system/mapper/MenuMapper.xml b/blade-auth/src/main/java/org/springblade/system/mapper/MenuMapper.xml
new file mode 100644
index 0000000..b0a9dbf
--- /dev/null
+++ b/blade-auth/src/main/java/org/springblade/system/mapper/MenuMapper.xml
@@ -0,0 +1,478 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="org.springblade.system.mapper.MenuMapper">
+
+ <!-- 通用查询映射结果 -->
+ <resultMap id="menuResultMap" type="org.springblade.system.entity.Menu">
+ <id column="id" property="id"/>
+ <result column="code" property="code"/>
+ <result column="parent_id" property="parentId"/>
+ <result column="name" property="name"/>
+ <result column="alias" property="alias"/>
+ <result column="path" property="path"/>
+ <result column="source" property="source"/>
+ <result column="sort" property="sort"/>
+ <result column="category" property="category"/>
+ <result column="action" property="action"/>
+ <result column="is_open" property="isOpen"/>
+ <result column="remark" property="remark"/>
+ <result column="is_deleted" property="isDeleted"/>
+ </resultMap>
+
+ <resultMap id="menuVOResultMap" type="org.springblade.system.vo.MenuVO">
+ <id column="id" property="id"/>
+ <result column="code" property="code"/>
+ <result column="parent_id" property="parentId"/>
+ <result column="name" property="name"/>
+ <result column="alias" property="alias"/>
+ <result column="path" property="path"/>
+ <result column="source" property="source"/>
+ <result column="sort" property="sort"/>
+ <result column="category" property="category"/>
+ <result column="action" property="action"/>
+ <result column="is_open" property="isOpen"/>
+ <result column="remark" property="remark"/>
+ <result column="is_deleted" property="isDeleted"/>
+ <result column="has_children" property="hasChildren"/>
+ </resultMap>
+
+ <resultMap id="treeNodeResultMap" type="org.springblade.core.tool.node.TreeNode">
+ <id column="id" property="id"/>
+ <result column="parent_id" property="parentId"/>
+ <result column="title" property="title"/>
+ <result column="value" property="value"/>
+ <result column="key" property="key"/>
+ </resultMap>
+
+ <select id="lazyList" resultMap="menuVOResultMap">
+ SELECT
+ menu.*,
+ (
+ SELECT
+ CASE WHEN count( 1 ) > 0 THEN 1 ELSE 0 END
+ FROM
+ blade_menu
+ WHERE
+ parent_id = menu.id AND is_deleted = 0
+ ) AS "has_children"
+ FROM
+ blade_menu menu
+ WHERE menu.is_deleted = 0
+ <if test="param1!=null">
+ and menu.parent_id = #{param1}
+ </if>
+ <if test="param2.name!=null and param2.name!=''">
+ and menu.name like concat(concat('%', #{param2.name}),'%')
+ </if>
+ <if test="param2.code!=null and param2.code!=''">
+ and menu.code like concat(concat('%', #{param2.code}),'%')
+ </if>
+ <if test="param2.alias!=null and param2.alias!=''">
+ and menu.alias like concat(concat('%', #{param2.alias}),'%')
+ </if>
+ ORDER BY menu.sort
+ </select>
+
+ <select id="lazyMenuList" resultMap="menuVOResultMap">
+ SELECT
+ menu.*,
+ (
+ SELECT
+ CASE WHEN count( 1 ) > 0 THEN 1 ELSE 0 END
+ FROM
+ blade_menu
+ WHERE
+ parent_id = menu.id AND is_deleted = 0 AND category = 1
+ ) AS "has_children"
+ FROM
+ blade_menu menu
+ WHERE menu.is_deleted = 0 AND menu.category = 1
+ <if test="param1!=null">
+ and menu.parent_id = #{param1}
+ </if>
+ <if test="param2.name!=null and param2.name!=''">
+ and menu.name like concat(concat('%', #{param2.name}),'%')
+ </if>
+ <if test="param2.code!=null and param2.code!=''">
+ and menu.code like concat(concat('%', #{param2.code}),'%')
+ </if>
+ <if test="param2.alias!=null and param2.alias!=''">
+ and menu.alias like concat(concat('%', #{param2.alias}),'%')
+ </if>
+ ORDER BY menu.sort
+ </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>
+
+ <select id="allMenu" resultMap="menuResultMap">
+ select * from blade_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
+ <foreach collection="param1" index="index" item="item" open="(" separator="," close=")">
+ #{item}
+ </foreach>
+ )
+ <if test="param2!=null and param2>0">
+ AND id IN
+ (
+ SELECT menu_id FROM blade_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
+ <foreach collection="list" index="index" item="item" open="(" separator="," close=")">
+ #{item}
+ </foreach>
+ )
+ </select>
+
+ <select id="roleMenuByTopMenuId" resultMap="menuResultMap">
+ select * from blade_menu where is_deleted = 0 and id IN
+ (
+ SELECT menu_id FROM blade_top_menu_setting WHERE top_menu_id = #{param1}
+ )
+ </select>
+
+ <select id="routes" resultMap="menuResultMap">
+ SELECT
+ *
+ FROM
+ blade_menu
+ WHERE
+ is_deleted = 0 and category = 1
+ and id IN ( SELECT menu_id FROM blade_role_menu WHERE role_id IN
+ <foreach collection="list" index="index" item="item" open="(" separator="," close=")">
+ #{item}
+ </foreach> )
+ </select>
+
+ <select id="allButtons" resultMap="menuResultMap">
+ SELECT
+ id,
+ parent_id,
+ CODE,
+ NAME,
+ alias,
+ path,
+ source,
+ action,
+ sort
+ FROM
+ blade_menu
+ WHERE
+ (
+ category = 2 OR id IN ( SELECT parent_id FROM blade_menu WHERE is_deleted = 0 AND category = 2 )
+ )
+ AND is_deleted = 0
+ ORDER BY sort
+ </select>
+
+ <select id="buttons" resultMap="menuResultMap">
+ SELECT * FROM (
+ SELECT
+ id,
+ parent_id,
+ code,
+ name,
+ alias,
+ path,
+ source,
+ action,
+ sort
+ FROM
+ blade_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
+ <foreach collection="list" index="index" item="item" open="(" separator="," close=")">
+ #{item}
+ </foreach>
+ ) ) )
+
+ UNION ALL
+
+ SELECT
+ id,
+ parent_id,
+ code,
+ name,
+ alias,
+ path,
+ source,
+ action,
+ sort
+ FROM
+ blade_menu
+ WHERE
+ is_deleted = 0 and category = 2 AND id IN ( SELECT menu_id FROM blade_role_menu WHERE role_id IN
+ <foreach collection="list" index="index" item="item" open="(" separator="," close=")">
+ #{item}
+ </foreach>)
+ ) menu ORDER BY sort
+ </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>
+
+ <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
+ <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
+ <foreach collection="list" index="index" item="item" open="(" separator="," close=")">
+ #{item}
+ </foreach> )
+ )
+ order by sort
+ </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>
+
+ <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
+ <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
+ <foreach collection="list" index="index" item="item" open="(" separator="," close=")">
+ #{item}
+ </foreach> )
+ )
+ order by sort
+ </select>
+
+ <select id="grantDataScopeTree" resultMap="treeNodeResultMap">
+ SELECT
+ *
+ FROM
+ (
+ 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_scope_data WHERE is_deleted = 0 AND menu_id IS NOT NULL )
+ ) menu
+
+ UNION ALL
+
+ SELECT
+ id,
+ menu_id AS parent_id,
+ scope_name AS title,
+ id AS "value",
+ id AS "key"
+ FROM
+ blade_scope_data
+ WHERE
+ is_deleted = 0
+ AND menu_id IS NOT NULL
+ </select>
+
+ <select id="grantApiScopeTree" resultMap="treeNodeResultMap">
+ SELECT
+ *
+ FROM
+ (
+ 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_scope_api WHERE is_deleted = 0 AND menu_id IS NOT NULL )
+ ) menu
+
+ UNION ALL
+
+ SELECT
+ id,
+ menu_id AS parent_id,
+ scope_name AS title,
+ id AS "value",
+ id AS "key"
+ FROM
+ blade_scope_api
+ WHERE
+ is_deleted = 0
+ AND menu_id IS NOT NULL
+ </select>
+
+ <select id="grantDataScopeTreeByRole" resultMap="treeNodeResultMap">
+ SELECT
+ *
+ FROM
+ (
+ 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_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
+ <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
+ <foreach collection="list" index="index" item="item" open="(" separator="," close=")">
+ #{item}
+ </foreach> )
+ )
+ )
+ ) menu
+
+ UNION ALL
+
+ SELECT
+ id,
+ menu_id AS parent_id,
+ scope_name AS title,
+ id AS "value",
+ id AS "key"
+ FROM
+ blade_scope_data
+ WHERE
+ is_deleted = 0
+ AND (
+ menu_id IN (
+ select menu_id from blade_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
+ <foreach collection="list" index="index" item="item" open="(" separator="," close=")">
+ #{item}
+ </foreach> )
+ )
+ )
+ AND menu_id IS NOT NULL
+ </select>
+
+ <select id="grantApiScopeTreeByRole" resultMap="treeNodeResultMap">
+ SELECT
+ *
+ FROM
+ (
+ 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_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
+ <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
+ <foreach collection="list" index="index" item="item" open="(" separator="," close=")">
+ #{item}
+ </foreach> )
+ )
+ )
+ ) menu
+
+ UNION ALL
+
+ SELECT
+ id,
+ menu_id AS parent_id,
+ scope_name AS title,
+ id AS "value",
+ id AS "key"
+ FROM
+ blade_scope_api
+ WHERE
+ is_deleted = 0
+ AND
+ (
+ menu_id IN (
+ select menu_id from blade_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
+ <foreach collection="list" index="index" item="item" open="(" separator="," close=")">
+ #{item}
+ </foreach> )
+ )
+ )
+ AND menu_id IS NOT NULL
+ </select>
+
+ <select id="authRoutes" resultType="org.springblade.system.dto.MenuDTO">
+ SELECT
+ 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
+ WHERE
+ rm.role_id IN
+ <foreach collection="list" index="index" item="item" open="(" separator="," close=")">
+ #{item}
+ </foreach>
+ AND m.path IS NOT NULL and m.is_deleted = 0
+ GROUP BY m.path
+ </select>
+
+</mapper>
diff --git a/blade-auth/src/main/java/org/springblade/auth/AuthApplication.java b/blade-auth/src/main/java/org/springblade/system/mapper/ParamMapper.java
similarity index 66%
copy from blade-auth/src/main/java/org/springblade/auth/AuthApplication.java
copy to blade-auth/src/main/java/org/springblade/system/mapper/ParamMapper.java
index 8c18654..3adf34f 100644
--- a/blade-auth/src/main/java/org/springblade/auth/AuthApplication.java
+++ b/blade-auth/src/main/java/org/springblade/system/mapper/ParamMapper.java
@@ -14,23 +14,16 @@
* this software without specific prior written permission.
* Author: Chill 庄骞 (smallchill@163.com)
*/
-package org.springblade.auth;
+package org.springblade.system.mapper;
-
-import org.springblade.core.cloud.client.BladeCloudApplication;
-import org.springblade.core.launch.BladeApplication;
-import org.springblade.core.launch.constant.AppConstant;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.springblade.system.entity.Param;
/**
- * 用户认证服务器
+ * Mapper 接口
*
* @author Chill
*/
-@BladeCloudApplication
-public class AuthApplication {
-
- public static void main(String[] args) {
- BladeApplication.run(AppConstant.APPLICATION_AUTH_NAME, AuthApplication.class, args);
- }
+public interface ParamMapper extends BaseMapper<Param> {
}
diff --git a/blade-auth/src/main/java/org/springblade/system/mapper/ParamMapper.xml b/blade-auth/src/main/java/org/springblade/system/mapper/ParamMapper.xml
new file mode 100644
index 0000000..e88fd76
--- /dev/null
+++ b/blade-auth/src/main/java/org/springblade/system/mapper/ParamMapper.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="org.springblade.system.mapper.ParamMapper">
+
+ <!-- 通用查询映射结果 -->
+ <resultMap id="paramResultMap" type="org.springblade.system.entity.Param">
+ <result column="id" property="id"/>
+ <result column="create_user" property="createUser"/>
+ <result column="create_time" property="createTime"/>
+ <result column="update_user" property="updateUser"/>
+ <result column="update_time" property="updateTime"/>
+ <result column="status" property="status"/>
+ <result column="is_deleted" property="isDeleted"/>
+ <result column="param_name" property="paramName"/>
+ <result column="param_key" property="paramKey"/>
+ <result column="param_value" property="paramValue"/>
+ <result column="remark" property="remark"/>
+ </resultMap>
+
+</mapper>
diff --git a/blade-auth/src/main/java/org/springblade/system/mapper/PostMapper.java b/blade-auth/src/main/java/org/springblade/system/mapper/PostMapper.java
new file mode 100644
index 0000000..67a4190
--- /dev/null
+++ b/blade-auth/src/main/java/org/springblade/system/mapper/PostMapper.java
@@ -0,0 +1,50 @@
+/*
+ * 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.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import org.springblade.system.entity.Post;
+import org.springblade.system.vo.PostVO;
+
+import java.util.List;
+
+/**
+ * 岗位表 Mapper 接口
+ *
+ * @author Chill
+ */
+public interface PostMapper extends BaseMapper<Post> {
+
+ /**
+ * 自定义分页
+ *
+ * @param page
+ * @param post
+ * @return
+ */
+ List<PostVO> selectPostPage(IPage page, PostVO post);
+
+ /**
+ * 获取岗位名
+ *
+ * @param ids
+ * @return
+ */
+ List<String> getPostNames(Long[] ids);
+
+}
diff --git a/blade-auth/src/main/java/org/springblade/system/mapper/PostMapper.xml b/blade-auth/src/main/java/org/springblade/system/mapper/PostMapper.xml
new file mode 100644
index 0000000..e4106d8
--- /dev/null
+++ b/blade-auth/src/main/java/org/springblade/system/mapper/PostMapper.xml
@@ -0,0 +1,40 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="org.springblade.system.mapper.PostMapper">
+
+ <!-- 通用查询映射结果 -->
+ <resultMap id="postResultMap" type="org.springblade.system.entity.Post">
+ <result column="id" property="id"/>
+ <result column="create_user" property="createUser"/>
+ <result column="create_dept" property="createDept"/>
+ <result column="create_time" property="createTime"/>
+ <result column="update_user" property="updateUser"/>
+ <result column="update_time" property="updateTime"/>
+ <result column="status" property="status"/>
+ <result column="is_deleted" property="isDeleted"/>
+ <result column="category" property="category"/>
+ <result column="post_code" property="postCode"/>
+ <result column="post_name" property="postName"/>
+ <result column="sort" property="sort"/>
+ <result column="remark" property="remark"/>
+ </resultMap>
+
+
+ <select id="selectPostPage" resultMap="postResultMap">
+ select * from blade_post where is_deleted = 0
+ </select>
+
+ <select id="getPostNames" resultType="java.lang.String">
+ SELECT
+ post_name
+ FROM
+ blade_post
+ WHERE
+ id IN
+ <foreach collection="array" item="ids" index="index" open="(" close=")" separator=",">
+ #{ids}
+ </foreach>
+ and is_deleted = 0
+ </select>
+
+</mapper>
diff --git a/blade-auth/src/main/java/org/springblade/system/mapper/RegionMapper.java b/blade-auth/src/main/java/org/springblade/system/mapper/RegionMapper.java
new file mode 100644
index 0000000..4a9eeb1
--- /dev/null
+++ b/blade-auth/src/main/java/org/springblade/system/mapper/RegionMapper.java
@@ -0,0 +1,62 @@
+/*
+ * 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.mapper;
+
+import com.baomidou.mybatisplus.core.conditions.Wrapper;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Param;
+import org.springblade.system.entity.Region;
+import org.springblade.system.excel.RegionExcel;
+import org.springblade.system.vo.RegionVO;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 行政区划表 Mapper 接口
+ *
+ * @author Chill
+ */
+public interface RegionMapper extends BaseMapper<Region> {
+
+ /**
+ * 懒加载列表
+ *
+ * @param parentCode
+ * @param param
+ * @return
+ */
+ List<RegionVO> lazyList(String parentCode, Map<String, Object> param);
+
+ /**
+ * 懒加载列表
+ *
+ * @param parentCode
+ * @param param
+ * @return
+ */
+ List<RegionVO> lazyTree(String parentCode, Map<String, Object> param);
+
+ /**
+ * 导出区划数据
+ *
+ * @param queryWrapper
+ * @return
+ */
+ List<RegionExcel> exportRegion(@Param("ew") Wrapper<Region> queryWrapper);
+
+}
diff --git a/blade-auth/src/main/java/org/springblade/system/mapper/RegionMapper.xml b/blade-auth/src/main/java/org/springblade/system/mapper/RegionMapper.xml
new file mode 100644
index 0000000..285df4a
--- /dev/null
+++ b/blade-auth/src/main/java/org/springblade/system/mapper/RegionMapper.xml
@@ -0,0 +1,105 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="org.springblade.system.mapper.RegionMapper">
+
+ <!-- 通用查询映射结果 -->
+ <resultMap id="regionResultMap" type="org.springblade.system.entity.Region">
+ <id column="code" property="code"/>
+ <result column="parent_code" property="parentCode"/>
+ <result column="ancestors" property="ancestors"/>
+ <result column="name" property="name"/>
+ <result column="province_code" property="provinceCode"/>
+ <result column="province_name" property="provinceName"/>
+ <result column="city_code" property="cityCode"/>
+ <result column="city_name" property="cityName"/>
+ <result column="district_code" property="districtCode"/>
+ <result column="district_name" property="districtName"/>
+ <result column="town_code" property="townCode"/>
+ <result column="town_name" property="townName"/>
+ <result column="village_code" property="villageCode"/>
+ <result column="village_name" property="villageName"/>
+ <result column="level" property="regionLevel"/>
+ <result column="sort" property="sort"/>
+ <result column="remark" property="remark"/>
+ </resultMap>
+
+ <resultMap id="regionVOResultMap" type="org.springblade.system.vo.RegionVO">
+ <id column="code" property="code"/>
+ <result column="parent_code" property="parentCode"/>
+ <result column="ancestors" property="ancestors"/>
+ <result column="name" property="name"/>
+ <result column="province_code" property="provinceCode"/>
+ <result column="province_name" property="provinceName"/>
+ <result column="city_code" property="cityCode"/>
+ <result column="city_name" property="cityName"/>
+ <result column="district_code" property="districtCode"/>
+ <result column="district_name" property="districtName"/>
+ <result column="town_code" property="townCode"/>
+ <result column="town_name" property="townName"/>
+ <result column="village_code" property="villageCode"/>
+ <result column="village_name" property="villageName"/>
+ <result column="level" property="regionLevel"/>
+ <result column="sort" property="sort"/>
+ <result column="remark" property="remark"/>
+ <result column="id" property="id"/>
+ <result column="parent_id" property="parentId"/>
+ <result column="has_children" property="hasChildren"/>
+ </resultMap>
+
+ <resultMap id="treeNodeResultMap" type="org.springblade.core.tool.node.TreeNode">
+ <id column="id" property="id"/>
+ <result column="parent_id" property="parentId"/>
+ <result column="title" property="title"/>
+ <result column="value" property="value"/>
+ <result column="key" property="key"/>
+ <result column="has_children" property="hasChildren"/>
+ </resultMap>
+
+ <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"
+ FROM
+ blade_region region
+ <where>
+ <if test="param1!=null">
+ and region.parent_code = #{param1}
+ </if>
+ <if test="param2.code!=null and param2.code!=''">
+ and region.code like concat(concat('%', #{param2.code}),'%')
+ </if>
+ <if test="param2.name!=null and param2.name!=''">
+ and region.name like concat(concat('%', #{param2.name}),'%')
+ </if>
+ </where>
+ </select>
+
+ <select id="lazyTree" resultMap="treeNodeResultMap">
+ SELECT
+ region.code AS "id",
+ region.parent_code AS "parent_id",
+ 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"
+ FROM
+ blade_region region
+ <where>
+ <if test="param1!=null">
+ and region.parent_code = #{param1}
+ </if>
+ <if test="param2.code!=null and param2.code!=''">
+ and region.code like concat(concat('%', #{param2.code}),'%')
+ </if>
+ <if test="param2.name!=null and param2.name!=''">
+ and region.name like concat(concat('%', #{param2.name}),'%')
+ </if>
+ </where>
+ ORDER BY region.code
+ </select>
+
+ <select id="exportRegion" resultType="org.springblade.system.excel.RegionExcel">
+ SELECT * FROM blade_region ${ew.customSqlSegment}
+ </select>
+
+</mapper>
diff --git a/blade-auth/src/main/java/org/springblade/system/mapper/RoleMapper.java b/blade-auth/src/main/java/org/springblade/system/mapper/RoleMapper.java
new file mode 100644
index 0000000..66b1b73
--- /dev/null
+++ b/blade-auth/src/main/java/org/springblade/system/mapper/RoleMapper.java
@@ -0,0 +1,67 @@
+/*
+ * 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.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import org.springblade.system.entity.Role;
+import org.springblade.system.vo.RoleVO;
+
+import java.util.List;
+
+/**
+ * Mapper 接口
+ *
+ * @author Chill
+ */
+public interface RoleMapper extends BaseMapper<Role> {
+
+ /**
+ * 自定义分页
+ *
+ * @param page
+ * @param role
+ * @return
+ */
+ List<RoleVO> selectRolePage(IPage page, RoleVO role);
+
+ /**
+ * 获取树形节点
+ *
+ * @param tenantId
+ * @param excludeRole
+ * @return
+ */
+ List<RoleVO> tree(String tenantId, String excludeRole);
+
+ /**
+ * 获取角色名
+ *
+ * @param ids
+ * @return
+ */
+ List<String> getRoleNames(Long[] ids);
+
+ /**
+ * 获取角色名
+ *
+ * @param ids
+ * @return
+ */
+ List<String> getRoleAliases(Long[] ids);
+
+}
diff --git a/blade-auth/src/main/java/org/springblade/system/mapper/RoleMapper.xml b/blade-auth/src/main/java/org/springblade/system/mapper/RoleMapper.xml
new file mode 100644
index 0000000..0551a59
--- /dev/null
+++ b/blade-auth/src/main/java/org/springblade/system/mapper/RoleMapper.xml
@@ -0,0 +1,63 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="org.springblade.system.mapper.RoleMapper">
+
+ <!-- 通用查询映射结果 -->
+ <resultMap id="roleResultMap" type="org.springblade.system.entity.Role">
+ <id column="id" property="id"/>
+ <result column="parent_id" property="parentId"/>
+ <result column="role_name" property="roleName"/>
+ <result column="sort" property="sort"/>
+ <result column="role_alias" property="roleAlias"/>
+ <result column="is_deleted" property="isDeleted"/>
+ </resultMap>
+
+ <resultMap id="treeNodeResultMap" type="org.springblade.core.tool.node.TreeNode">
+ <id column="id" property="id"/>
+ <result column="parent_id" property="parentId"/>
+ <result column="title" property="title"/>
+ <result column="value" property="value"/>
+ <result column="key" property="key"/>
+ </resultMap>
+
+ <select id="selectRolePage" resultMap="roleResultMap">
+ select * from blade_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
+ <if test="param1!=null">
+ and tenant_id = #{param1}
+ </if>
+ <if test="param2!=null">
+ and role_alias <> #{param2}
+ </if>
+ </select>
+
+ <select id="getRoleNames" resultType="java.lang.String">
+ SELECT
+ role_name
+ FROM
+ blade_role
+ WHERE
+ id IN
+ <foreach collection="array" item="ids" index="index" open="(" close=")" separator=",">
+ #{ids}
+ </foreach>
+ and is_deleted = 0
+ </select>
+
+ <select id="getRoleAliases" resultType="java.lang.String">
+ SELECT
+ role_alias
+ FROM
+ blade_role
+ WHERE
+ id IN
+ <foreach collection="array" item="ids" index="index" open="(" close=")" separator=",">
+ #{ids}
+ </foreach>
+ and is_deleted = 0
+ </select>
+
+</mapper>
diff --git a/blade-auth/src/main/java/org/springblade/auth/AuthApplication.java b/blade-auth/src/main/java/org/springblade/system/mapper/RoleMenuMapper.java
similarity index 63%
copy from blade-auth/src/main/java/org/springblade/auth/AuthApplication.java
copy to blade-auth/src/main/java/org/springblade/system/mapper/RoleMenuMapper.java
index 8c18654..9afb43b 100644
--- a/blade-auth/src/main/java/org/springblade/auth/AuthApplication.java
+++ b/blade-auth/src/main/java/org/springblade/system/mapper/RoleMenuMapper.java
@@ -14,23 +14,28 @@
* this software without specific prior written permission.
* Author: Chill 庄骞 (smallchill@163.com)
*/
-package org.springblade.auth;
+package org.springblade.system.mapper;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import org.springblade.system.entity.RoleMenu;
+import org.springblade.system.vo.RoleMenuVO;
-import org.springblade.core.cloud.client.BladeCloudApplication;
-import org.springblade.core.launch.BladeApplication;
-import org.springblade.core.launch.constant.AppConstant;
+import java.util.List;
/**
- * 用户认证服务器
+ * Mapper 接口
*
* @author Chill
*/
-@BladeCloudApplication
-public class AuthApplication {
+public interface RoleMenuMapper extends BaseMapper<RoleMenu> {
- public static void main(String[] args) {
- BladeApplication.run(AppConstant.APPLICATION_AUTH_NAME, AuthApplication.class, args);
- }
+ /**
+ * 自定义分页
+ * @param page
+ * @param roleMenu
+ * @return
+ */
+ List<RoleMenuVO> selectRoleMenuPage(IPage page, RoleMenuVO roleMenu);
}
diff --git a/blade-auth/src/main/java/org/springblade/system/mapper/RoleMenuMapper.xml b/blade-auth/src/main/java/org/springblade/system/mapper/RoleMenuMapper.xml
new file mode 100644
index 0000000..0aed43e
--- /dev/null
+++ b/blade-auth/src/main/java/org/springblade/system/mapper/RoleMenuMapper.xml
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="org.springblade.system.mapper.RoleMenuMapper">
+
+ <!-- 通用查询映射结果 -->
+ <resultMap id="roleMenuResultMap" type="org.springblade.system.entity.RoleMenu">
+ <id column="id" property="id"/>
+ <result column="menu_id" property="menuId"/>
+ <result column="role_id" property="roleId"/>
+ </resultMap>
+
+ <select id="selectRoleMenuPage" resultMap="roleMenuResultMap">
+ select * from blade_role_menu where is_deleted = 0
+ </select>
+
+</mapper>
diff --git a/blade-auth/src/main/java/org/springblade/auth/AuthApplication.java b/blade-auth/src/main/java/org/springblade/system/mapper/RoleScopeMapper.java
similarity index 67%
copy from blade-auth/src/main/java/org/springblade/auth/AuthApplication.java
copy to blade-auth/src/main/java/org/springblade/system/mapper/RoleScopeMapper.java
index 8c18654..7b22574 100644
--- a/blade-auth/src/main/java/org/springblade/auth/AuthApplication.java
+++ b/blade-auth/src/main/java/org/springblade/system/mapper/RoleScopeMapper.java
@@ -14,23 +14,16 @@
* this software without specific prior written permission.
* Author: Chill 庄骞 (smallchill@163.com)
*/
-package org.springblade.auth;
+package org.springblade.system.mapper;
-
-import org.springblade.core.cloud.client.BladeCloudApplication;
-import org.springblade.core.launch.BladeApplication;
-import org.springblade.core.launch.constant.AppConstant;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.springblade.system.entity.RoleScope;
/**
- * 用户认证服务器
+ * Mapper 接口
*
* @author Chill
*/
-@BladeCloudApplication
-public class AuthApplication {
-
- public static void main(String[] args) {
- BladeApplication.run(AppConstant.APPLICATION_AUTH_NAME, AuthApplication.class, args);
- }
+public interface RoleScopeMapper extends BaseMapper<RoleScope> {
}
diff --git a/blade-auth/src/main/java/org/springblade/system/mapper/RoleScopeMapper.xml b/blade-auth/src/main/java/org/springblade/system/mapper/RoleScopeMapper.xml
new file mode 100644
index 0000000..55b8fb5
--- /dev/null
+++ b/blade-auth/src/main/java/org/springblade/system/mapper/RoleScopeMapper.xml
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="org.springblade.system.mapper.RoleScopeMapper">
+
+ <!-- 通用查询映射结果 -->
+ <resultMap id="roleMenuResultMap" type="org.springblade.system.entity.RoleScope">
+ <id column="id" property="id"/>
+ <result column="scope_id" property="scopeId"/>
+ <result column="role_id" property="roleId"/>
+ </resultMap>
+
+</mapper>
diff --git a/blade-auth/src/main/java/org/springblade/auth/AuthApplication.java b/blade-auth/src/main/java/org/springblade/system/mapper/TenantMapper.java
similarity index 66%
copy from blade-auth/src/main/java/org/springblade/auth/AuthApplication.java
copy to blade-auth/src/main/java/org/springblade/system/mapper/TenantMapper.java
index 8c18654..b57431b 100644
--- a/blade-auth/src/main/java/org/springblade/auth/AuthApplication.java
+++ b/blade-auth/src/main/java/org/springblade/system/mapper/TenantMapper.java
@@ -14,23 +14,28 @@
* this software without specific prior written permission.
* Author: Chill 庄骞 (smallchill@163.com)
*/
-package org.springblade.auth;
+package org.springblade.system.mapper;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import org.springblade.system.entity.Tenant;
-import org.springblade.core.cloud.client.BladeCloudApplication;
-import org.springblade.core.launch.BladeApplication;
-import org.springblade.core.launch.constant.AppConstant;
+import java.util.List;
/**
- * 用户认证服务器
+ * Mapper 接口
*
* @author Chill
*/
-@BladeCloudApplication
-public class AuthApplication {
+public interface TenantMapper extends BaseMapper<Tenant> {
- public static void main(String[] args) {
- BladeApplication.run(AppConstant.APPLICATION_AUTH_NAME, AuthApplication.class, args);
- }
+ /**
+ * 自定义分页
+ *
+ * @param page
+ * @param tenant
+ * @return
+ */
+ List<Tenant> selectTenantPage(IPage page, Tenant tenant);
}
diff --git a/blade-auth/src/main/java/org/springblade/system/mapper/TenantMapper.xml b/blade-auth/src/main/java/org/springblade/system/mapper/TenantMapper.xml
new file mode 100644
index 0000000..ea11951
--- /dev/null
+++ b/blade-auth/src/main/java/org/springblade/system/mapper/TenantMapper.xml
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="org.springblade.system.mapper.TenantMapper">
+
+ <!-- 通用查询映射结果 -->
+ <resultMap id="tenantResultMap" type="org.springblade.system.entity.Tenant">
+ <result column="id" property="id"/>
+ <result column="create_user" property="createUser"/>
+ <result column="create_time" property="createTime"/>
+ <result column="update_user" property="updateUser"/>
+ <result column="update_time" property="updateTime"/>
+ <result column="status" property="status"/>
+ <result column="is_deleted" property="isDeleted"/>
+ <result column="tenant_id" property="tenantId"/>
+ <result column="tenant_name" property="tenantName"/>
+ <result column="domain_url" property="domainUrl"/>
+ <result column="background_url" property="backgroundUrl"/>
+ <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>
+
+</mapper>
diff --git a/blade-auth/src/main/java/org/springblade/auth/AuthApplication.java b/blade-auth/src/main/java/org/springblade/system/mapper/TenantPackageMapper.java
similarity index 65%
copy from blade-auth/src/main/java/org/springblade/auth/AuthApplication.java
copy to blade-auth/src/main/java/org/springblade/system/mapper/TenantPackageMapper.java
index 8c18654..acf4e8d 100644
--- a/blade-auth/src/main/java/org/springblade/auth/AuthApplication.java
+++ b/blade-auth/src/main/java/org/springblade/system/mapper/TenantPackageMapper.java
@@ -14,23 +14,16 @@
* this software without specific prior written permission.
* Author: Chill 庄骞 (smallchill@163.com)
*/
-package org.springblade.auth;
+package org.springblade.system.mapper;
-
-import org.springblade.core.cloud.client.BladeCloudApplication;
-import org.springblade.core.launch.BladeApplication;
-import org.springblade.core.launch.constant.AppConstant;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.springblade.system.entity.TenantPackage;
/**
- * 用户认证服务器
+ * 租户产品表 Mapper 接口
*
- * @author Chill
+ * @author BladeX
*/
-@BladeCloudApplication
-public class AuthApplication {
-
- public static void main(String[] args) {
- BladeApplication.run(AppConstant.APPLICATION_AUTH_NAME, AuthApplication.class, args);
- }
+public interface TenantPackageMapper extends BaseMapper<TenantPackage> {
}
diff --git a/blade-auth/src/main/java/org/springblade/system/mapper/TenantPackageMapper.xml b/blade-auth/src/main/java/org/springblade/system/mapper/TenantPackageMapper.xml
new file mode 100644
index 0000000..749f86d
--- /dev/null
+++ b/blade-auth/src/main/java/org/springblade/system/mapper/TenantPackageMapper.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="org.springblade.system.mapper.TenantPackageMapper">
+
+ <!-- 通用查询映射结果 -->
+ <resultMap id="tenantPackageResultMap" type="org.springblade.system.entity.TenantPackage">
+ <result column="id" property="id"/>
+ <result column="create_user" property="createUser"/>
+ <result column="create_dept" property="createDept"/>
+ <result column="create_time" property="createTime"/>
+ <result column="update_user" property="updateUser"/>
+ <result column="update_time" property="updateTime"/>
+ <result column="status" property="status"/>
+ <result column="is_deleted" property="isDeleted"/>
+ <result column="package_name" property="packageName"/>
+ <result column="menu_id" property="menuId"/>
+ <result column="remark" property="remark"/>
+ </resultMap>
+
+</mapper>
diff --git a/blade-auth/src/main/java/org/springblade/auth/AuthApplication.java b/blade-auth/src/main/java/org/springblade/system/mapper/TopMenuMapper.java
similarity index 65%
copy from blade-auth/src/main/java/org/springblade/auth/AuthApplication.java
copy to blade-auth/src/main/java/org/springblade/system/mapper/TopMenuMapper.java
index 8c18654..c035291 100644
--- a/blade-auth/src/main/java/org/springblade/auth/AuthApplication.java
+++ b/blade-auth/src/main/java/org/springblade/system/mapper/TopMenuMapper.java
@@ -14,23 +14,16 @@
* this software without specific prior written permission.
* Author: Chill 庄骞 (smallchill@163.com)
*/
-package org.springblade.auth;
+package org.springblade.system.mapper;
-
-import org.springblade.core.cloud.client.BladeCloudApplication;
-import org.springblade.core.launch.BladeApplication;
-import org.springblade.core.launch.constant.AppConstant;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.springblade.system.entity.TopMenu;
/**
- * 用户认证服务器
+ * 顶部菜单表 Mapper 接口
*
- * @author Chill
+ * @author BladeX
*/
-@BladeCloudApplication
-public class AuthApplication {
-
- public static void main(String[] args) {
- BladeApplication.run(AppConstant.APPLICATION_AUTH_NAME, AuthApplication.class, args);
- }
+public interface TopMenuMapper extends BaseMapper<TopMenu> {
}
diff --git a/blade-auth/src/main/java/org/springblade/system/mapper/TopMenuMapper.xml b/blade-auth/src/main/java/org/springblade/system/mapper/TopMenuMapper.xml
new file mode 100644
index 0000000..7f3b5b2
--- /dev/null
+++ b/blade-auth/src/main/java/org/springblade/system/mapper/TopMenuMapper.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="org.springblade.system.mapper.TopMenuMapper">
+
+ <!-- 通用查询映射结果 -->
+ <resultMap id="topMenuResultMap" type="org.springblade.system.entity.TopMenu">
+ <result column="id" property="id"/>
+ <result column="create_user" property="createUser"/>
+ <result column="create_dept" property="createDept"/>
+ <result column="create_time" property="createTime"/>
+ <result column="update_user" property="updateUser"/>
+ <result column="update_time" property="updateTime"/>
+ <result column="status" property="status"/>
+ <result column="is_deleted" property="isDeleted"/>
+ <result column="code" property="code"/>
+ <result column="name" property="name"/>
+ <result column="source" property="source"/>
+ <result column="sort" property="sort"/>
+ </resultMap>
+
+</mapper>
diff --git a/blade-auth/src/main/java/org/springblade/auth/AuthApplication.java b/blade-auth/src/main/java/org/springblade/system/mapper/TopMenuSettingMapper.java
similarity index 66%
copy from blade-auth/src/main/java/org/springblade/auth/AuthApplication.java
copy to blade-auth/src/main/java/org/springblade/system/mapper/TopMenuSettingMapper.java
index 8c18654..0c9e3ce 100644
--- a/blade-auth/src/main/java/org/springblade/auth/AuthApplication.java
+++ b/blade-auth/src/main/java/org/springblade/system/mapper/TopMenuSettingMapper.java
@@ -14,23 +14,16 @@
* this software without specific prior written permission.
* Author: Chill 庄骞 (smallchill@163.com)
*/
-package org.springblade.auth;
+package org.springblade.system.mapper;
-
-import org.springblade.core.cloud.client.BladeCloudApplication;
-import org.springblade.core.launch.BladeApplication;
-import org.springblade.core.launch.constant.AppConstant;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.springblade.system.entity.TopMenuSetting;
/**
- * 用户认证服务器
+ * Mapper 接口
*
* @author Chill
*/
-@BladeCloudApplication
-public class AuthApplication {
-
- public static void main(String[] args) {
- BladeApplication.run(AppConstant.APPLICATION_AUTH_NAME, AuthApplication.class, args);
- }
+public interface TopMenuSettingMapper extends BaseMapper<TopMenuSetting> {
}
diff --git a/blade-auth/src/main/java/org/springblade/system/mapper/TopMenuSettingMapper.xml b/blade-auth/src/main/java/org/springblade/system/mapper/TopMenuSettingMapper.xml
new file mode 100644
index 0000000..5de98e4
--- /dev/null
+++ b/blade-auth/src/main/java/org/springblade/system/mapper/TopMenuSettingMapper.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="org.springblade.system.mapper.TopMenuSettingMapper">
+
+</mapper>
diff --git a/blade-auth/src/main/java/org/springblade/auth/AuthApplication.java b/blade-auth/src/main/java/org/springblade/system/service/IApiScopeService.java
similarity index 65%
copy from blade-auth/src/main/java/org/springblade/auth/AuthApplication.java
copy to blade-auth/src/main/java/org/springblade/system/service/IApiScopeService.java
index 8c18654..293b3e5 100644
--- a/blade-auth/src/main/java/org/springblade/auth/AuthApplication.java
+++ b/blade-auth/src/main/java/org/springblade/system/service/IApiScopeService.java
@@ -14,23 +14,16 @@
* this software without specific prior written permission.
* Author: Chill 庄骞 (smallchill@163.com)
*/
-package org.springblade.auth;
+package org.springblade.system.service;
-
-import org.springblade.core.cloud.client.BladeCloudApplication;
-import org.springblade.core.launch.BladeApplication;
-import org.springblade.core.launch.constant.AppConstant;
+import org.springblade.core.mp.base.BaseService;
+import org.springblade.system.entity.ApiScope;
/**
- * 用户认证服务器
+ * 服务类
*
- * @author Chill
+ * @author BladeX
*/
-@BladeCloudApplication
-public class AuthApplication {
-
- public static void main(String[] args) {
- BladeApplication.run(AppConstant.APPLICATION_AUTH_NAME, AuthApplication.class, args);
- }
+public interface IApiScopeService extends BaseService<ApiScope> {
}
diff --git a/blade-auth/src/main/java/org/springblade/auth/AuthApplication.java b/blade-auth/src/main/java/org/springblade/system/service/IAuthClientService.java
similarity index 66%
copy from blade-auth/src/main/java/org/springblade/auth/AuthApplication.java
copy to blade-auth/src/main/java/org/springblade/system/service/IAuthClientService.java
index 8c18654..695eb1d 100644
--- a/blade-auth/src/main/java/org/springblade/auth/AuthApplication.java
+++ b/blade-auth/src/main/java/org/springblade/system/service/IAuthClientService.java
@@ -14,23 +14,16 @@
* this software without specific prior written permission.
* Author: Chill 庄骞 (smallchill@163.com)
*/
-package org.springblade.auth;
+package org.springblade.system.service;
-
-import org.springblade.core.cloud.client.BladeCloudApplication;
-import org.springblade.core.launch.BladeApplication;
-import org.springblade.core.launch.constant.AppConstant;
+import org.springblade.core.mp.base.BaseService;
+import org.springblade.system.entity.AuthClient;
/**
- * 用户认证服务器
+ * 服务类
*
* @author Chill
*/
-@BladeCloudApplication
-public class AuthApplication {
-
- public static void main(String[] args) {
- BladeApplication.run(AppConstant.APPLICATION_AUTH_NAME, AuthApplication.class, args);
- }
+public interface IAuthClientService extends BaseService<AuthClient> {
}
diff --git a/blade-auth/src/main/java/org/springblade/auth/AuthApplication.java b/blade-auth/src/main/java/org/springblade/system/service/IDataScopeService.java
similarity index 65%
copy from blade-auth/src/main/java/org/springblade/auth/AuthApplication.java
copy to blade-auth/src/main/java/org/springblade/system/service/IDataScopeService.java
index 8c18654..4babdcb 100644
--- a/blade-auth/src/main/java/org/springblade/auth/AuthApplication.java
+++ b/blade-auth/src/main/java/org/springblade/system/service/IDataScopeService.java
@@ -14,23 +14,16 @@
* this software without specific prior written permission.
* Author: Chill 庄骞 (smallchill@163.com)
*/
-package org.springblade.auth;
+package org.springblade.system.service;
-
-import org.springblade.core.cloud.client.BladeCloudApplication;
-import org.springblade.core.launch.BladeApplication;
-import org.springblade.core.launch.constant.AppConstant;
+import org.springblade.core.mp.base.BaseService;
+import org.springblade.system.entity.DataScope;
/**
- * 用户认证服务器
+ * 服务类
*
- * @author Chill
+ * @author BladeX
*/
-@BladeCloudApplication
-public class AuthApplication {
-
- public static void main(String[] args) {
- BladeApplication.run(AppConstant.APPLICATION_AUTH_NAME, AuthApplication.class, args);
- }
+public interface IDataScopeService extends BaseService<DataScope> {
}
diff --git a/blade-auth/src/main/java/org/springblade/system/service/IDeptService.java b/blade-auth/src/main/java/org/springblade/system/service/IDeptService.java
new file mode 100644
index 0000000..fde1c9b
--- /dev/null
+++ b/blade-auth/src/main/java/org/springblade/system/service/IDeptService.java
@@ -0,0 +1,119 @@
+/*
+ * 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.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import org.springblade.system.entity.Dept;
+import org.springblade.system.vo.DeptVO;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 服务类
+ *
+ * @author Chill
+ */
+public interface IDeptService extends IService<Dept> {
+
+ /**
+ * 懒加载部门列表
+ *
+ * @param tenantId
+ * @param parentId
+ * @param param
+ * @return
+ */
+ List<DeptVO> lazyList(String tenantId, Long parentId, Map<String, Object> param);
+
+ /**
+ * 树形结构
+ *
+ * @param tenantId
+ * @return
+ */
+ List<DeptVO> tree(String tenantId);
+
+ /**
+ * 懒加载树形结构
+ *
+ * @param tenantId
+ * @param parentId
+ * @return
+ */
+ List<DeptVO> lazyTree(String tenantId, Long parentId);
+
+ /**
+ * 获取部门ID
+ *
+ * @param tenantId
+ * @param deptNames
+ * @return
+ */
+ String getDeptIds(String tenantId, String deptNames);
+
+ /**
+ * 获取部门ID
+ *
+ * @param tenantId
+ * @param deptNames
+ * @return
+ */
+ String getDeptIdsByFuzzy(String tenantId, String deptNames);
+
+ /**
+ * 获取部门名
+ *
+ * @param deptIds
+ * @return
+ */
+ List<String> getDeptNames(String deptIds);
+
+ /**
+ * 获取子部门
+ *
+ * @param deptId
+ * @return
+ */
+ List<Dept> getDeptChild(Long deptId);
+
+ /**
+ * 删除部门
+ *
+ * @param ids
+ * @return
+ */
+ boolean removeDept(String ids);
+
+ /**
+ * 提交
+ *
+ * @param dept
+ * @return
+ */
+ boolean submit(Dept dept);
+
+ /**
+ * 部门信息查询
+ *
+ * @param deptName
+ * @param parentId
+ * @return
+ */
+ List<DeptVO> search(String deptName, Long parentId);
+
+}
diff --git a/blade-auth/src/main/java/org/springblade/system/service/IDictBizService.java b/blade-auth/src/main/java/org/springblade/system/service/IDictBizService.java
new file mode 100644
index 0000000..e254f40
--- /dev/null
+++ b/blade-auth/src/main/java/org/springblade/system/service/IDictBizService.java
@@ -0,0 +1,101 @@
+/*
+ * 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.service;
+
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.service.IService;
+import org.springblade.core.mp.support.Query;
+import org.springblade.system.entity.DictBiz;
+import org.springblade.system.vo.DictBizVO;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 服务类
+ *
+ * @author Chill
+ */
+public interface IDictBizService extends IService<DictBiz> {
+
+ /**
+ * 树形结构
+ *
+ * @return
+ */
+ List<DictBizVO> tree();
+
+ /**
+ * 树形结构
+ *
+ * @return
+ */
+ List<DictBizVO> parentTree();
+
+ /**
+ * 获取字典表对应中文
+ *
+ * @param code 字典编号
+ * @param dictKey 字典序号
+ * @return
+ */
+ String getValue(String code, String dictKey);
+
+ /**
+ * 获取字典表
+ *
+ * @param code 字典编号
+ * @return
+ */
+ List<DictBiz> getList(String code);
+
+ /**
+ * 新增或修改
+ *
+ * @param dict
+ * @return
+ */
+ boolean submit(DictBiz dict);
+
+ /**
+ * 删除字典
+ *
+ * @param ids
+ * @return
+ */
+ boolean removeDict(String ids);
+
+ /**
+ * 顶级列表
+ *
+ * @param dict
+ * @param query
+ * @return
+ */
+ IPage<DictBizVO> parentList(Map<String, Object> dict, Query query);
+
+ /**
+ * 子列表
+ *
+ * @param dict
+ * @param parentId
+ * @return
+ */
+ List<DictBizVO> childList(Map<String, Object> dict, Long parentId);
+
+}
diff --git a/blade-auth/src/main/java/org/springblade/system/service/IDictService.java b/blade-auth/src/main/java/org/springblade/system/service/IDictService.java
new file mode 100644
index 0000000..28d3a33
--- /dev/null
+++ b/blade-auth/src/main/java/org/springblade/system/service/IDictService.java
@@ -0,0 +1,109 @@
+/*
+ * 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.service;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.service.IService;
+import org.springblade.core.mp.support.Query;
+import org.springblade.system.entity.Dict;
+import org.springblade.system.vo.DictVO;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 服务类
+ *
+ * @author Chill
+ */
+public interface IDictService extends IService<Dict> {
+
+ /**
+ * 自定义分页
+ *
+ * @param page
+ * @param dict
+ * @return
+ */
+ IPage<DictVO> selectDictPage(IPage<DictVO> page, DictVO dict);
+
+ /**
+ * 树形结构
+ *
+ * @return
+ */
+ List<DictVO> tree();
+
+ /**
+ * 树形结构
+ *
+ * @return
+ */
+ List<DictVO> parentTree();
+
+ /**
+ * 获取字典表对应中文
+ *
+ * @param code 字典编号
+ * @param dictKey 字典序号
+ * @return
+ */
+ String getValue(String code, String dictKey);
+
+ /**
+ * 获取字典表
+ *
+ * @param code 字典编号
+ * @return
+ */
+ List<Dict> getList(String code);
+
+ /**
+ * 新增或修改
+ *
+ * @param dict
+ * @return
+ */
+ boolean submit(Dict dict);
+
+ /**
+ * 删除字典
+ *
+ * @param ids
+ * @return
+ */
+ boolean removeDict(String ids);
+
+ /**
+ * 顶级列表
+ *
+ * @param dict
+ * @param query
+ * @return
+ */
+ IPage<DictVO> parentList(Map<String, Object> dict, Query query);
+
+ /**
+ * 子列表
+ *
+ * @param dict
+ * @param parentId
+ * @return
+ */
+ List<DictVO> childList(Map<String, Object> dict, Long parentId);
+
+}
diff --git a/blade-auth/src/main/java/org/springblade/system/service/IMenuService.java b/blade-auth/src/main/java/org/springblade/system/service/IMenuService.java
new file mode 100644
index 0000000..5014981
--- /dev/null
+++ b/blade-auth/src/main/java/org/springblade/system/service/IMenuService.java
@@ -0,0 +1,166 @@
+/*
+ * 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.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import org.springblade.core.secure.BladeUser;
+import org.springblade.core.tool.node.TreeNode;
+import org.springblade.core.tool.support.Kv;
+import org.springblade.system.entity.Menu;
+import org.springblade.system.vo.MenuVO;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 服务类
+ *
+ * @author Chill
+ */
+public interface IMenuService extends IService<Menu> {
+
+ /**
+ * 懒加载列表
+ *
+ * @param parentId
+ * @param param
+ * @return
+ */
+ List<MenuVO> lazyList(Long parentId, Map<String, Object> param);
+
+ /**
+ * 懒加载菜单列表
+ *
+ * @param parentId
+ * @param param
+ * @return
+ */
+ List<MenuVO> lazyMenuList(Long parentId, Map<String, Object> param);
+
+ /**
+ * 菜单树形结构
+ *
+ * @param roleId
+ * @param topMenuId
+ * @return
+ */
+ List<MenuVO> routes(String roleId, Long topMenuId);
+
+ /**
+ * 按钮树形结构
+ *
+ * @param roleId
+ * @return
+ */
+ List<MenuVO> buttons(String roleId);
+
+ /**
+ * 树形结构
+ *
+ * @return
+ */
+ List<TreeNode> tree();
+
+ /**
+ * 授权树形结构
+ *
+ * @param user
+ * @return
+ */
+ List<TreeNode> grantTree(BladeUser user);
+
+ /**
+ * 顶部菜单树形结构
+ *
+ * @param user
+ * @return
+ */
+ List<TreeNode> grantTopTree(BladeUser user);
+
+ /**
+ * 数据权限授权树形结构
+ *
+ * @param user
+ * @return
+ */
+ List<TreeNode> grantDataScopeTree(BladeUser user);
+
+ /**
+ * 接口权限授权树形结构
+ *
+ * @param user
+ * @return
+ */
+ List<TreeNode> grantApiScopeTree(BladeUser user);
+
+ /**
+ * 默认选中节点
+ *
+ * @param roleIds
+ * @return
+ */
+ List<String> roleTreeKeys(String roleIds);
+
+ /**
+ * 默认选中节点
+ *
+ * @param topMenuIds
+ * @return
+ */
+ List<String> topTreeKeys(String topMenuIds);
+
+ /**
+ * 默认选中节点
+ *
+ * @param roleIds
+ * @return
+ */
+ List<String> dataScopeTreeKeys(String roleIds);
+
+ /**
+ * 默认选中节点
+ *
+ * @param roleIds
+ * @return
+ */
+ List<String> apiScopeTreeKeys(String roleIds);
+
+ /**
+ * 获取配置的角色权限
+ *
+ * @param user
+ * @return
+ */
+ List<Kv> authRoutes(BladeUser user);
+
+ /**
+ * 删除菜单
+ *
+ * @param ids
+ * @return
+ */
+ boolean removeMenu(String ids);
+
+ /**
+ * 提交
+ *
+ * @param menu
+ * @return
+ */
+ boolean submit(Menu menu);
+
+}
diff --git a/blade-auth/src/main/java/org/springblade/auth/AuthApplication.java b/blade-auth/src/main/java/org/springblade/system/service/IParamService.java
similarity index 67%
copy from blade-auth/src/main/java/org/springblade/auth/AuthApplication.java
copy to blade-auth/src/main/java/org/springblade/system/service/IParamService.java
index 8c18654..ff29123 100644
--- a/blade-auth/src/main/java/org/springblade/auth/AuthApplication.java
+++ b/blade-auth/src/main/java/org/springblade/system/service/IParamService.java
@@ -14,23 +14,24 @@
* this software without specific prior written permission.
* Author: Chill 庄骞 (smallchill@163.com)
*/
-package org.springblade.auth;
+package org.springblade.system.service;
-
-import org.springblade.core.cloud.client.BladeCloudApplication;
-import org.springblade.core.launch.BladeApplication;
-import org.springblade.core.launch.constant.AppConstant;
+import org.springblade.core.mp.base.BaseService;
+import org.springblade.system.entity.Param;
/**
- * 用户认证服务器
+ * 服务类
*
* @author Chill
*/
-@BladeCloudApplication
-public class AuthApplication {
+public interface IParamService extends BaseService<Param> {
- public static void main(String[] args) {
- BladeApplication.run(AppConstant.APPLICATION_AUTH_NAME, AuthApplication.class, args);
- }
+ /**
+ * 获取参数值
+ *
+ * @param paramKey 参数key
+ * @return String
+ */
+ String getValue(String paramKey);
}
diff --git a/blade-auth/src/main/java/org/springblade/system/service/IPostService.java b/blade-auth/src/main/java/org/springblade/system/service/IPostService.java
new file mode 100644
index 0000000..fc395d5
--- /dev/null
+++ b/blade-auth/src/main/java/org/springblade/system/service/IPostService.java
@@ -0,0 +1,68 @@
+/*
+ * 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.service;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import org.springblade.core.mp.base.BaseService;
+import org.springblade.system.entity.Post;
+import org.springblade.system.vo.PostVO;
+
+import java.util.List;
+
+/**
+ * 岗位表 服务类
+ *
+ * @author Chill
+ */
+public interface IPostService extends BaseService<Post> {
+
+ /**
+ * 自定义分页
+ *
+ * @param page
+ * @param post
+ * @return
+ */
+ IPage<PostVO> selectPostPage(IPage<PostVO> page, PostVO post);
+
+ /**
+ * 获取岗位ID
+ *
+ * @param tenantId
+ * @param postNames
+ * @return
+ */
+ String getPostIds(String tenantId, String postNames);
+
+ /**
+ * 获取岗位ID
+ *
+ * @param tenantId
+ * @param postNames
+ * @return
+ */
+ String getPostIdsByFuzzy(String tenantId, String postNames);
+
+ /**
+ * 获取岗位名
+ *
+ * @param postIds
+ * @return
+ */
+ List<String> getPostNames(String postIds);
+
+}
diff --git a/blade-auth/src/main/java/org/springblade/system/service/IRegionService.java b/blade-auth/src/main/java/org/springblade/system/service/IRegionService.java
new file mode 100644
index 0000000..c46f6fa
--- /dev/null
+++ b/blade-auth/src/main/java/org/springblade/system/service/IRegionService.java
@@ -0,0 +1,86 @@
+/*
+ * 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.service;
+
+import com.baomidou.mybatisplus.core.conditions.Wrapper;
+import com.baomidou.mybatisplus.extension.service.IService;
+import org.springblade.system.entity.Region;
+import org.springblade.system.excel.RegionExcel;
+import org.springblade.system.vo.RegionVO;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 行政区划表 服务类
+ *
+ * @author Chill
+ */
+public interface IRegionService extends IService<Region> {
+
+ /**
+ * 提交
+ *
+ * @param region
+ * @return
+ */
+ boolean submit(Region region);
+
+ /**
+ * 删除
+ *
+ * @param id
+ * @return
+ */
+ boolean removeRegion(String id);
+
+ /**
+ * 懒加载列表
+ *
+ * @param parentCode
+ * @param param
+ * @return
+ */
+ List<RegionVO> lazyList(String parentCode, Map<String, Object> param);
+
+ /**
+ * 懒加载列表
+ *
+ * @param parentCode
+ * @param param
+ * @return
+ */
+ List<RegionVO> lazyTree(String parentCode, Map<String, Object> param);
+
+ /**
+ * 导入区划数据
+ *
+ * @param data
+ * @param isCovered
+ * @return
+ */
+ void importRegion(List<RegionExcel> data, Boolean isCovered);
+
+ /**
+ * 导出区划数据
+ *
+ * @param queryWrapper
+ * @return
+ */
+ List<RegionExcel> exportRegion(Wrapper<Region> queryWrapper);
+
+}
diff --git a/blade-auth/src/main/java/org/springblade/auth/AuthApplication.java b/blade-auth/src/main/java/org/springblade/system/service/IRoleMenuService.java
similarity index 66%
copy from blade-auth/src/main/java/org/springblade/auth/AuthApplication.java
copy to blade-auth/src/main/java/org/springblade/system/service/IRoleMenuService.java
index 8c18654..b504d32 100644
--- a/blade-auth/src/main/java/org/springblade/auth/AuthApplication.java
+++ b/blade-auth/src/main/java/org/springblade/system/service/IRoleMenuService.java
@@ -14,23 +14,16 @@
* this software without specific prior written permission.
* Author: Chill 庄骞 (smallchill@163.com)
*/
-package org.springblade.auth;
+package org.springblade.system.service;
-
-import org.springblade.core.cloud.client.BladeCloudApplication;
-import org.springblade.core.launch.BladeApplication;
-import org.springblade.core.launch.constant.AppConstant;
+import com.baomidou.mybatisplus.extension.service.IService;
+import org.springblade.system.entity.RoleMenu;
/**
- * 用户认证服务器
+ * 服务类
*
* @author Chill
*/
-@BladeCloudApplication
-public class AuthApplication {
-
- public static void main(String[] args) {
- BladeApplication.run(AppConstant.APPLICATION_AUTH_NAME, AuthApplication.class, args);
- }
+public interface IRoleMenuService extends IService<RoleMenu> {
}
diff --git a/blade-auth/src/main/java/org/springblade/auth/AuthApplication.java b/blade-auth/src/main/java/org/springblade/system/service/IRoleScopeService.java
similarity index 67%
copy from blade-auth/src/main/java/org/springblade/auth/AuthApplication.java
copy to blade-auth/src/main/java/org/springblade/system/service/IRoleScopeService.java
index 8c18654..d3d6376 100644
--- a/blade-auth/src/main/java/org/springblade/auth/AuthApplication.java
+++ b/blade-auth/src/main/java/org/springblade/system/service/IRoleScopeService.java
@@ -14,23 +14,16 @@
* this software without specific prior written permission.
* Author: Chill 庄骞 (smallchill@163.com)
*/
-package org.springblade.auth;
+package org.springblade.system.service;
-
-import org.springblade.core.cloud.client.BladeCloudApplication;
-import org.springblade.core.launch.BladeApplication;
-import org.springblade.core.launch.constant.AppConstant;
+import com.baomidou.mybatisplus.extension.service.IService;
+import org.springblade.system.entity.RoleScope;
/**
- * 用户认证服务器
+ * 服务类
*
* @author Chill
*/
-@BladeCloudApplication
-public class AuthApplication {
-
- public static void main(String[] args) {
- BladeApplication.run(AppConstant.APPLICATION_AUTH_NAME, AuthApplication.class, args);
- }
+public interface IRoleScopeService extends IService<RoleScope> {
}
diff --git a/blade-auth/src/main/java/org/springblade/system/service/IRoleService.java b/blade-auth/src/main/java/org/springblade/system/service/IRoleService.java
new file mode 100644
index 0000000..adbe3a1
--- /dev/null
+++ b/blade-auth/src/main/java/org/springblade/system/service/IRoleService.java
@@ -0,0 +1,112 @@
+/*
+ * 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.service;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.service.IService;
+import org.springblade.system.entity.Role;
+import org.springblade.system.vo.RoleVO;
+
+import javax.validation.constraints.NotEmpty;
+import java.util.List;
+
+/**
+ * 服务类
+ *
+ * @author Chill
+ */
+public interface IRoleService extends IService<Role> {
+
+ /**
+ * 自定义分页
+ *
+ * @param page
+ * @param role
+ * @return
+ */
+ IPage<RoleVO> selectRolePage(IPage<RoleVO> page, RoleVO role);
+
+ /**
+ * 树形结构
+ *
+ * @param tenantId
+ * @return
+ */
+ List<RoleVO> tree(String tenantId);
+
+ /**
+ * 权限配置
+ *
+ * @param roleIds 角色id集合
+ * @param menuIds 菜单id集合
+ * @param dataScopeIds 数据权限id集合
+ * @param apiScopeIds 接口权限id集合
+ * @return 是否成功
+ */
+ boolean grant(@NotEmpty List<Long> roleIds, List<Long> menuIds, List<Long> dataScopeIds, List<Long> apiScopeIds);
+
+ /**
+ * 获取角色ID
+ *
+ * @param tenantId
+ * @param roleNames
+ * @return
+ */
+ String getRoleIds(String tenantId, String roleNames);
+
+ /**
+ * 获取角色名
+ *
+ * @param roleIds
+ * @return
+ */
+ List<String> getRoleNames(String roleIds);
+
+ /**
+ * 获取角色名
+ *
+ * @param roleIds
+ * @return
+ */
+ List<String> getRoleAliases(String roleIds);
+
+ /**
+ * 提交
+ *
+ * @param role
+ * @return
+ */
+ boolean submit(Role role);
+
+ /**
+ * 角色信息查询
+ *
+ * @param roleName
+ * @param parentId
+ * @return
+ */
+ List<RoleVO> search(String roleName, Long parentId);
+
+ /**
+ * 删除角色
+ *
+ * @param ids
+ * @return
+ */
+ boolean removeRole(String ids);
+
+}
diff --git a/blade-auth/src/main/java/org/springblade/auth/AuthApplication.java b/blade-auth/src/main/java/org/springblade/system/service/ITenantPackageService.java
similarity index 65%
copy from blade-auth/src/main/java/org/springblade/auth/AuthApplication.java
copy to blade-auth/src/main/java/org/springblade/system/service/ITenantPackageService.java
index 8c18654..9007e1e 100644
--- a/blade-auth/src/main/java/org/springblade/auth/AuthApplication.java
+++ b/blade-auth/src/main/java/org/springblade/system/service/ITenantPackageService.java
@@ -14,23 +14,16 @@
* this software without specific prior written permission.
* Author: Chill 庄骞 (smallchill@163.com)
*/
-package org.springblade.auth;
+package org.springblade.system.service;
-
-import org.springblade.core.cloud.client.BladeCloudApplication;
-import org.springblade.core.launch.BladeApplication;
-import org.springblade.core.launch.constant.AppConstant;
+import org.springblade.core.mp.base.BaseService;
+import org.springblade.system.entity.TenantPackage;
/**
- * 用户认证服务器
+ * 租户产品表 服务类
*
- * @author Chill
+ * @author BladeX
*/
-@BladeCloudApplication
-public class AuthApplication {
-
- public static void main(String[] args) {
- BladeApplication.run(AppConstant.APPLICATION_AUTH_NAME, AuthApplication.class, args);
- }
+public interface ITenantPackageService extends BaseService<TenantPackage> {
}
diff --git a/blade-auth/src/main/java/org/springblade/system/service/ITenantService.java b/blade-auth/src/main/java/org/springblade/system/service/ITenantService.java
new file mode 100644
index 0000000..b2eceb5
--- /dev/null
+++ b/blade-auth/src/main/java/org/springblade/system/service/ITenantService.java
@@ -0,0 +1,76 @@
+/*
+ * 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.service;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import org.springblade.core.mp.base.BaseService;
+import org.springblade.system.entity.Tenant;
+
+import java.util.Date;
+import java.util.List;
+
+/**
+ * 服务类
+ *
+ * @author Chill
+ */
+public interface ITenantService extends BaseService<Tenant> {
+
+ /**
+ * 自定义分页
+ *
+ * @param page
+ * @param tenant
+ * @return
+ */
+ IPage<Tenant> selectTenantPage(IPage<Tenant> page, Tenant tenant);
+
+ /**
+ * 根据租户编号获取实体
+ *
+ * @param tenantId
+ * @return
+ */
+ Tenant getByTenantId(String tenantId);
+
+ /**
+ * 新增
+ *
+ * @param tenant
+ * @return
+ */
+ boolean submitTenant(Tenant tenant);
+
+ /**
+ * 删除
+ *
+ * @param ids
+ * @return
+ */
+ boolean removeTenant(List<Long> ids);
+
+ /**
+ * 配置租户授权
+ *
+ * @param accountNumber
+ * @param expireTime
+ * @param ids
+ * @return
+ */
+ boolean setting(Integer accountNumber, Date expireTime, String ids);
+
+}
diff --git a/blade-auth/src/main/java/org/springblade/auth/AuthApplication.java b/blade-auth/src/main/java/org/springblade/system/service/ITopMenuService.java
similarity index 60%
copy from blade-auth/src/main/java/org/springblade/auth/AuthApplication.java
copy to blade-auth/src/main/java/org/springblade/system/service/ITopMenuService.java
index 8c18654..66fbad1 100644
--- a/blade-auth/src/main/java/org/springblade/auth/AuthApplication.java
+++ b/blade-auth/src/main/java/org/springblade/system/service/ITopMenuService.java
@@ -14,23 +14,28 @@
* this software without specific prior written permission.
* Author: Chill 庄骞 (smallchill@163.com)
*/
-package org.springblade.auth;
+package org.springblade.system.service;
+import org.springblade.core.mp.base.BaseService;
+import org.springblade.system.entity.TopMenu;
-import org.springblade.core.cloud.client.BladeCloudApplication;
-import org.springblade.core.launch.BladeApplication;
-import org.springblade.core.launch.constant.AppConstant;
+import javax.validation.constraints.NotEmpty;
+import java.util.List;
/**
- * 用户认证服务器
+ * 顶部菜单表 服务类
*
- * @author Chill
+ * @author BladeX
*/
-@BladeCloudApplication
-public class AuthApplication {
+public interface ITopMenuService extends BaseService<TopMenu> {
- public static void main(String[] args) {
- BladeApplication.run(AppConstant.APPLICATION_AUTH_NAME, AuthApplication.class, args);
- }
+ /**
+ * 顶部菜单配置
+ *
+ * @param topMenuIds 顶部菜单id集合
+ * @param menuIds 菜单id集合
+ * @return 是否成功
+ */
+ boolean grant(@NotEmpty List<Long> topMenuIds, @NotEmpty List<Long> menuIds);
}
diff --git a/blade-auth/src/main/java/org/springblade/auth/AuthApplication.java b/blade-auth/src/main/java/org/springblade/system/service/ITopMenuSettingService.java
similarity index 66%
copy from blade-auth/src/main/java/org/springblade/auth/AuthApplication.java
copy to blade-auth/src/main/java/org/springblade/system/service/ITopMenuSettingService.java
index 8c18654..83b52f2 100644
--- a/blade-auth/src/main/java/org/springblade/auth/AuthApplication.java
+++ b/blade-auth/src/main/java/org/springblade/system/service/ITopMenuSettingService.java
@@ -14,23 +14,16 @@
* this software without specific prior written permission.
* Author: Chill 庄骞 (smallchill@163.com)
*/
-package org.springblade.auth;
+package org.springblade.system.service;
-
-import org.springblade.core.cloud.client.BladeCloudApplication;
-import org.springblade.core.launch.BladeApplication;
-import org.springblade.core.launch.constant.AppConstant;
+import com.baomidou.mybatisplus.extension.service.IService;
+import org.springblade.system.entity.TopMenuSetting;
/**
- * 用户认证服务器
+ * 服务类
*
* @author Chill
*/
-@BladeCloudApplication
-public class AuthApplication {
-
- public static void main(String[] args) {
- BladeApplication.run(AppConstant.APPLICATION_AUTH_NAME, AuthApplication.class, args);
- }
+public interface ITopMenuSettingService extends IService<TopMenuSetting> {
}
diff --git a/blade-auth/src/main/java/org/springblade/auth/AuthApplication.java b/blade-auth/src/main/java/org/springblade/system/service/impl/ApiScopeServiceImpl.java
similarity index 64%
copy from blade-auth/src/main/java/org/springblade/auth/AuthApplication.java
copy to blade-auth/src/main/java/org/springblade/system/service/impl/ApiScopeServiceImpl.java
index 8c18654..4f7d23a 100644
--- a/blade-auth/src/main/java/org/springblade/auth/AuthApplication.java
+++ b/blade-auth/src/main/java/org/springblade/system/service/impl/ApiScopeServiceImpl.java
@@ -14,23 +14,20 @@
* this software without specific prior written permission.
* Author: Chill 庄骞 (smallchill@163.com)
*/
-package org.springblade.auth;
+package org.springblade.system.service.impl;
-
-import org.springblade.core.cloud.client.BladeCloudApplication;
-import org.springblade.core.launch.BladeApplication;
-import org.springblade.core.launch.constant.AppConstant;
+import org.springblade.core.mp.base.BaseServiceImpl;
+import org.springblade.system.entity.ApiScope;
+import org.springblade.system.mapper.ApiScopeMapper;
+import org.springblade.system.service.IApiScopeService;
+import org.springframework.stereotype.Service;
/**
- * 用户认证服务器
+ * 服务实现类
*
- * @author Chill
+ * @author BladeX
*/
-@BladeCloudApplication
-public class AuthApplication {
-
- public static void main(String[] args) {
- BladeApplication.run(AppConstant.APPLICATION_AUTH_NAME, AuthApplication.class, args);
- }
+@Service
+public class ApiScopeServiceImpl extends BaseServiceImpl<ApiScopeMapper, ApiScope> implements IApiScopeService {
}
diff --git a/blade-auth/src/main/java/org/springblade/auth/AuthApplication.java b/blade-auth/src/main/java/org/springblade/system/service/impl/AuthClientServiceImpl.java
similarity index 64%
copy from blade-auth/src/main/java/org/springblade/auth/AuthApplication.java
copy to blade-auth/src/main/java/org/springblade/system/service/impl/AuthClientServiceImpl.java
index 8c18654..a375e48 100644
--- a/blade-auth/src/main/java/org/springblade/auth/AuthApplication.java
+++ b/blade-auth/src/main/java/org/springblade/system/service/impl/AuthClientServiceImpl.java
@@ -14,23 +14,20 @@
* this software without specific prior written permission.
* Author: Chill 庄骞 (smallchill@163.com)
*/
-package org.springblade.auth;
+package org.springblade.system.service.impl;
-
-import org.springblade.core.cloud.client.BladeCloudApplication;
-import org.springblade.core.launch.BladeApplication;
-import org.springblade.core.launch.constant.AppConstant;
+import org.springblade.core.mp.base.BaseServiceImpl;
+import org.springblade.system.entity.AuthClient;
+import org.springblade.system.mapper.AuthClientMapper;
+import org.springblade.system.service.IAuthClientService;
+import org.springframework.stereotype.Service;
/**
- * 用户认证服务器
+ * 服务实现类
*
* @author Chill
*/
-@BladeCloudApplication
-public class AuthApplication {
-
- public static void main(String[] args) {
- BladeApplication.run(AppConstant.APPLICATION_AUTH_NAME, AuthApplication.class, args);
- }
+@Service
+public class AuthClientServiceImpl extends BaseServiceImpl<AuthClientMapper, AuthClient> implements IAuthClientService {
}
diff --git a/blade-auth/src/main/java/org/springblade/auth/AuthApplication.java b/blade-auth/src/main/java/org/springblade/system/service/impl/DataScopeServiceImpl.java
similarity index 64%
copy from blade-auth/src/main/java/org/springblade/auth/AuthApplication.java
copy to blade-auth/src/main/java/org/springblade/system/service/impl/DataScopeServiceImpl.java
index 8c18654..a1d96c6 100644
--- a/blade-auth/src/main/java/org/springblade/auth/AuthApplication.java
+++ b/blade-auth/src/main/java/org/springblade/system/service/impl/DataScopeServiceImpl.java
@@ -14,23 +14,20 @@
* this software without specific prior written permission.
* Author: Chill 庄骞 (smallchill@163.com)
*/
-package org.springblade.auth;
+package org.springblade.system.service.impl;
-
-import org.springblade.core.cloud.client.BladeCloudApplication;
-import org.springblade.core.launch.BladeApplication;
-import org.springblade.core.launch.constant.AppConstant;
+import org.springblade.core.mp.base.BaseServiceImpl;
+import org.springblade.system.entity.DataScope;
+import org.springblade.system.mapper.DataScopeMapper;
+import org.springblade.system.service.IDataScopeService;
+import org.springframework.stereotype.Service;
/**
- * 用户认证服务器
+ * 服务实现类
*
- * @author Chill
+ * @author BladeX
*/
-@BladeCloudApplication
-public class AuthApplication {
-
- public static void main(String[] args) {
- BladeApplication.run(AppConstant.APPLICATION_AUTH_NAME, AuthApplication.class, args);
- }
+@Service
+public class DataScopeServiceImpl extends BaseServiceImpl<DataScopeMapper, DataScope> implements IDataScopeService {
}
diff --git a/blade-auth/src/main/java/org/springblade/system/service/impl/DeptServiceImpl.java b/blade-auth/src/main/java/org/springblade/system/service/impl/DeptServiceImpl.java
new file mode 100644
index 0000000..1fde029
--- /dev/null
+++ b/blade-auth/src/main/java/org/springblade/system/service/impl/DeptServiceImpl.java
@@ -0,0 +1,173 @@
+/*
+ * 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.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+//import org.springblade.core.log.exception.ServiceException;
+import org.springblade.core.secure.utils.AuthUtil;
+import org.springblade.core.tool.constant.BladeConstant;
+import org.springblade.core.tool.node.ForestNodeMerger;
+import org.springblade.core.tool.utils.Func;
+import org.springblade.core.tool.utils.StringPool;
+import org.springblade.system.cache.SysCache;
+import org.springblade.system.entity.Dept;
+import org.springblade.system.mapper.DeptMapper;
+import org.springblade.system.service.IDeptService;
+import org.springblade.system.vo.DeptVO;
+import org.springblade.system.wrapper.DeptWrapper;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+/**
+ * 服务实现类
+ *
+ * @author Chill
+ */
+@Service
+public class DeptServiceImpl extends ServiceImpl<DeptMapper, Dept> implements IDeptService {
+
+ private static final String TENANT_ID = "tenantId";
+ private static final String PARENT_ID = "parentId";
+
+ @Override
+ public List<DeptVO> lazyList(String tenantId, Long parentId, Map<String, Object> param) {
+ // 设置租户ID
+ if (AuthUtil.isAdministrator()) {
+ tenantId = StringPool.EMPTY;
+ }
+ String paramTenantId = Func.toStr(param.get(TENANT_ID));
+ if (Func.isNotEmpty(paramTenantId) && AuthUtil.isAdministrator()) {
+ tenantId = paramTenantId;
+ }
+ // 判断点击搜索但是没有查询条件的情况
+ if (Func.isEmpty(param.get(PARENT_ID)) && param.size() == 1) {
+ parentId = 0L;
+ }
+ // 判断数据权限控制,非超管角色只可看到本级及以下数据
+ if (Func.toLong(parentId) == 0L && !AuthUtil.isAdministrator()) {
+ Long deptId = Func.firstLong(AuthUtil.getDeptId());
+ Dept dept = SysCache.getDept(deptId);
+ if (dept.getParentId() != 0) {
+ parentId = dept.getParentId();
+ }
+ }
+ // 判断点击搜索带有查询条件的情况
+ if (Func.isEmpty(param.get(PARENT_ID)) && param.size() > 1 && Func.toLong(parentId) == 0L) {
+ parentId = null;
+ }
+ return baseMapper.lazyList(tenantId, parentId, param);
+ }
+
+
+ @Override
+ public List<DeptVO> tree(String tenantId) {
+ return ForestNodeMerger.merge(baseMapper.tree(tenantId));
+ }
+
+ @Override
+ public List<DeptVO> lazyTree(String tenantId, Long parentId) {
+ if (AuthUtil.isAdministrator()) {
+ tenantId = StringPool.EMPTY;
+ }
+ return ForestNodeMerger.merge(baseMapper.lazyTree(tenantId, parentId));
+ }
+
+ @Override
+ public String getDeptIds(String tenantId, String deptNames) {
+ List<Dept> deptList = baseMapper.selectList(Wrappers.<Dept>query().lambda().eq(Dept::getTenantId, tenantId).in(Dept::getDeptName, Func.toStrList(deptNames)));
+ if (deptList != null && deptList.size() > 0) {
+ return deptList.stream().map(dept -> Func.toStr(dept.getId())).distinct().collect(Collectors.joining(","));
+ }
+ return null;
+ }
+
+ @Override
+ public String getDeptIdsByFuzzy(String tenantId, String deptNames) {
+ LambdaQueryWrapper<Dept> queryWrapper = Wrappers.<Dept>query().lambda().eq(Dept::getTenantId, tenantId);
+ queryWrapper.and(wrapper -> {
+ List<String> names = Func.toStrList(deptNames);
+ names.forEach(name -> wrapper.like(Dept::getDeptName, name).or());
+ });
+ List<Dept> deptList = baseMapper.selectList(queryWrapper);
+ if (deptList != null && deptList.size() > 0) {
+ return deptList.stream().map(dept -> Func.toStr(dept.getId())).distinct().collect(Collectors.joining(","));
+ }
+ return null;
+ }
+
+ @Override
+ public List<String> getDeptNames(String deptIds) {
+ return baseMapper.getDeptNames(Func.toLongArray(deptIds));
+ }
+
+ @Override
+ public List<Dept> getDeptChild(Long deptId) {
+ return baseMapper.selectList(Wrappers.<Dept>query().lambda().like(Dept::getAncestors, deptId));
+ }
+
+ @Override
+ public boolean removeDept(String ids) {
+ Long cnt = baseMapper.selectCount(Wrappers.<Dept>query().lambda().in(Dept::getParentId, Func.toLongList(ids)));
+ if (cnt > 0L) {
+// throw new ServiceException("请先删除子节点!");
+ }
+ return removeByIds(Func.toLongList(ids));
+ }
+
+ @Override
+ public boolean submit(Dept dept) {
+ if (Func.isEmpty(dept.getParentId())) {
+ dept.setTenantId(AuthUtil.getTenantId());
+ dept.setParentId(BladeConstant.TOP_PARENT_ID);
+ dept.setAncestors(String.valueOf(BladeConstant.TOP_PARENT_ID));
+ }
+ if (dept.getParentId() > 0) {
+ Dept parent = getById(dept.getParentId());
+ if (Func.toLong(dept.getParentId()) == Func.toLong(dept.getId())) {
+// throw new ServiceException("父节点不可选择自身!");
+ }
+ dept.setTenantId(parent.getTenantId());
+ String ancestors = parent.getAncestors() + StringPool.COMMA + dept.getParentId();
+ dept.setAncestors(ancestors);
+ }
+ dept.setIsDeleted(BladeConstant.DB_NOT_DELETED);
+ return saveOrUpdate(dept);
+ }
+
+ @Override
+ public List<DeptVO> search(String deptName, Long parentId) {
+ String tenantId = AuthUtil.getTenantId();
+ LambdaQueryWrapper<Dept> queryWrapper = Wrappers.<Dept>query().lambda();
+ if (Func.isNotEmpty(tenantId)) {
+ queryWrapper.eq(Dept::getTenantId, tenantId);
+ }
+ if (Func.isNotEmpty(deptName)) {
+ queryWrapper.like(Dept::getDeptName, deptName);
+ }
+ if (Func.isNotEmpty(parentId) && parentId > 0L) {
+ queryWrapper.eq(Dept::getParentId, parentId);
+ }
+ List<Dept> deptList = baseMapper.selectList(queryWrapper);
+ return DeptWrapper.build().listNodeVO(deptList);
+ }
+
+}
diff --git a/blade-auth/src/main/java/org/springblade/system/service/impl/DictBizServiceImpl.java b/blade-auth/src/main/java/org/springblade/system/service/impl/DictBizServiceImpl.java
new file mode 100644
index 0000000..9348bc3
--- /dev/null
+++ b/blade-auth/src/main/java/org/springblade/system/service/impl/DictBizServiceImpl.java
@@ -0,0 +1,119 @@
+/*
+ * 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.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springblade.common.constant.CommonConstant;
+import org.springblade.core.cache.utils.CacheUtil;
+//import org.springblade.core.log.exception.ServiceException;
+import org.springblade.core.mp.support.Condition;
+import org.springblade.core.mp.support.Query;
+import org.springblade.core.tool.constant.BladeConstant;
+import org.springblade.core.tool.node.ForestNodeMerger;
+import org.springblade.core.tool.utils.Func;
+import org.springblade.core.tool.utils.StringPool;
+import org.springblade.system.cache.DictBizCache;
+import org.springblade.system.entity.DictBiz;
+import org.springblade.system.mapper.DictBizMapper;
+import org.springblade.system.service.IDictBizService;
+import org.springblade.system.vo.DictBizVO;
+import org.springblade.system.wrapper.DictBizWrapper;
+import org.springframework.stereotype.Service;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+
+import static org.springblade.core.cache.constant.CacheConstant.DICT_CACHE;
+
+/**
+ * 服务实现类
+ *
+ * @author Chill
+ */
+@Service
+public class DictBizServiceImpl extends ServiceImpl<DictBizMapper, DictBiz> implements IDictBizService {
+
+ @Override
+ public List<DictBizVO> tree() {
+ return ForestNodeMerger.merge(baseMapper.tree());
+ }
+
+ @Override
+ public List<DictBizVO> parentTree() {
+ return ForestNodeMerger.merge(baseMapper.parentTree());
+ }
+
+ @Override
+ public String getValue(String code, String dictKey) {
+ return Func.toStr(baseMapper.getValue(code, dictKey), StringPool.EMPTY);
+ }
+
+ @Override
+ public List<DictBiz> getList(String code) {
+ return baseMapper.getList(code);
+ }
+
+ @Override
+ public boolean submit(DictBiz dict) {
+ LambdaQueryWrapper<DictBiz> lqw = Wrappers.<DictBiz>query().lambda().eq(DictBiz::getCode, dict.getCode()).eq(DictBiz::getDictKey, dict.getDictKey());
+ Long cnt = baseMapper.selectCount((Func.isEmpty(dict.getId())) ? lqw : lqw.notIn(DictBiz::getId, dict.getId()));
+ if (cnt > 0L) {
+// throw new ServiceException("当前字典键值已存在!");
+ }
+ // 修改顶级字典后同步更新下属字典的编号
+ if (Func.isNotEmpty(dict.getId()) && dict.getParentId().longValue() == BladeConstant.TOP_PARENT_ID) {
+ DictBiz parent = DictBizCache.getById(dict.getId());
+ this.update(Wrappers.<DictBiz>update().lambda().set(DictBiz::getCode, dict.getCode()).eq(DictBiz::getCode, parent.getCode()).ne(DictBiz::getParentId, BladeConstant.TOP_PARENT_ID));
+ }
+ if (Func.isEmpty(dict.getParentId())) {
+ dict.setParentId(BladeConstant.TOP_PARENT_ID);
+ }
+ dict.setIsDeleted(BladeConstant.DB_NOT_DELETED);
+ CacheUtil.clear(DICT_CACHE);
+ return saveOrUpdate(dict);
+ }
+
+ @Override
+ public boolean removeDict(String ids) {
+ Long cnt = baseMapper.selectCount(Wrappers.<DictBiz>query().lambda().in(DictBiz::getParentId, Func.toLongList(ids)));
+ if (cnt > 0L) {
+// throw new ServiceException("请先删除子节点!");
+ }
+ return removeByIds(Func.toLongList(ids));
+ }
+
+ @Override
+ public IPage<DictBizVO> parentList(Map<String, Object> dict, Query query) {
+ IPage<DictBiz> page = this.page(Condition.getPage(query), Condition.getQueryWrapper(dict, DictBiz.class).lambda().eq(DictBiz::getParentId, CommonConstant.TOP_PARENT_ID).orderByAsc(DictBiz::getSort));
+ return DictBizWrapper.build().pageVO(page);
+ }
+
+ @Override
+ public List<DictBizVO> childList(Map<String, Object> dict, Long parentId) {
+ if (parentId < 0) {
+ return new ArrayList<>();
+ }
+ dict.remove("parentId");
+ DictBiz parentDict = DictBizCache.getById(parentId);
+ List<DictBiz> list = this.list(Condition.getQueryWrapper(dict, DictBiz.class).lambda().ne(DictBiz::getId, parentId).eq(DictBiz::getCode, parentDict.getCode()).orderByAsc(DictBiz::getSort));
+ return DictBizWrapper.build().listNodeVO(list);
+ }
+}
diff --git a/blade-auth/src/main/java/org/springblade/system/service/impl/DictServiceImpl.java b/blade-auth/src/main/java/org/springblade/system/service/impl/DictServiceImpl.java
new file mode 100644
index 0000000..ad43629
--- /dev/null
+++ b/blade-auth/src/main/java/org/springblade/system/service/impl/DictServiceImpl.java
@@ -0,0 +1,125 @@
+/*
+ * 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.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springblade.common.constant.CommonConstant;
+import org.springblade.core.cache.utils.CacheUtil;
+//import org.springblade.core.log.exception.ServiceException;
+import org.springblade.core.mp.support.Condition;
+import org.springblade.core.mp.support.Query;
+import org.springblade.core.tool.constant.BladeConstant;
+import org.springblade.core.tool.node.ForestNodeMerger;
+import org.springblade.core.tool.utils.Func;
+import org.springblade.core.tool.utils.StringPool;
+import org.springblade.system.cache.DictCache;
+import org.springblade.system.entity.Dict;
+import org.springblade.system.mapper.DictMapper;
+import org.springblade.system.service.IDictService;
+import org.springblade.system.vo.DictVO;
+import org.springblade.system.wrapper.DictWrapper;
+import org.springframework.stereotype.Service;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+
+import static org.springblade.core.cache.constant.CacheConstant.DICT_CACHE;
+
+
+/**
+ * 服务实现类
+ *
+ * @author Chill
+ */
+@Service
+public class DictServiceImpl extends ServiceImpl<DictMapper, Dict> implements IDictService {
+
+ @Override
+ public IPage<DictVO> selectDictPage(IPage<DictVO> page, DictVO dict) {
+ return page.setRecords(baseMapper.selectDictPage(page, dict));
+ }
+
+ @Override
+ public List<DictVO> tree() {
+ return ForestNodeMerger.merge(baseMapper.tree());
+ }
+
+ @Override
+ public List<DictVO> parentTree() {
+ return ForestNodeMerger.merge(baseMapper.parentTree());
+ }
+
+ @Override
+ public String getValue(String code, String dictKey) {
+ return Func.toStr(baseMapper.getValue(code, dictKey), StringPool.EMPTY);
+ }
+
+ @Override
+ public List<Dict> getList(String code) {
+ return baseMapper.getList(code);
+ }
+
+ @Override
+ public boolean submit(Dict dict) {
+ LambdaQueryWrapper<Dict> lqw = Wrappers.<Dict>query().lambda().eq(Dict::getCode, dict.getCode()).eq(Dict::getDictKey, dict.getDictKey());
+ Long cnt = baseMapper.selectCount((Func.isEmpty(dict.getId())) ? lqw : lqw.notIn(Dict::getId, dict.getId()));
+ if (cnt > 0L) {
+// throw new ServiceException("当前字典键值已存在!");
+ }
+ // 修改顶级字典后同步更新下属字典的编号
+ if (Func.isNotEmpty(dict.getId()) && dict.getParentId().longValue() == BladeConstant.TOP_PARENT_ID) {
+ Dict parent = DictCache.getById(dict.getId());
+ this.update(Wrappers.<Dict>update().lambda().set(Dict::getCode, dict.getCode()).eq(Dict::getCode, parent.getCode()).ne(Dict::getParentId, BladeConstant.TOP_PARENT_ID));
+ }
+ if (Func.isEmpty(dict.getParentId())) {
+ dict.setParentId(BladeConstant.TOP_PARENT_ID);
+ }
+ dict.setIsDeleted(BladeConstant.DB_NOT_DELETED);
+ CacheUtil.clear(DICT_CACHE, Boolean.FALSE);
+ return saveOrUpdate(dict);
+ }
+
+ @Override
+ public boolean removeDict(String ids) {
+ Long cnt = baseMapper.selectCount(Wrappers.<Dict>query().lambda().in(Dict::getParentId, Func.toLongList(ids)));
+ if (cnt > 0L) {
+// throw new ServiceException("请先删除子节点!");
+ }
+ return removeByIds(Func.toLongList(ids));
+ }
+
+ @Override
+ public IPage<DictVO> parentList(Map<String, Object> dict, Query query) {
+ IPage<Dict> page = this.page(Condition.getPage(query), Condition.getQueryWrapper(dict, Dict.class).lambda().eq(Dict::getParentId, CommonConstant.TOP_PARENT_ID).orderByAsc(Dict::getSort));
+ return DictWrapper.build().pageVO(page);
+ }
+
+ @Override
+ public List<DictVO> childList(Map<String, Object> dict, Long parentId) {
+ if (parentId < 0) {
+ return new ArrayList<>();
+ }
+ dict.remove("parentId");
+ Dict parentDict = DictCache.getById(parentId);
+ List<Dict> list = this.list(Condition.getQueryWrapper(dict, Dict.class).lambda().ne(Dict::getId, parentId).eq(Dict::getCode, parentDict.getCode()).orderByAsc(Dict::getSort));
+ return DictWrapper.build().listNodeVO(list);
+ }
+}
diff --git a/blade-auth/src/main/java/org/springblade/system/service/impl/MenuServiceImpl.java b/blade-auth/src/main/java/org/springblade/system/service/impl/MenuServiceImpl.java
new file mode 100644
index 0000000..a3acb62
--- /dev/null
+++ b/blade-auth/src/main/java/org/springblade/system/service/impl/MenuServiceImpl.java
@@ -0,0 +1,297 @@
+/*
+ * 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.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import lombok.AllArgsConstructor;
+//import org.springblade.core.log.exception.ServiceException;
+import org.springblade.core.secure.BladeUser;
+import org.springblade.core.secure.utils.AuthUtil;
+import org.springblade.core.tool.constant.BladeConstant;
+import org.springblade.core.tool.node.ForestNodeMerger;
+import org.springblade.core.tool.node.TreeNode;
+import org.springblade.core.tool.support.Kv;
+import org.springblade.core.tool.utils.Func;
+import org.springblade.core.tool.utils.StringUtil;
+import org.springblade.system.cache.SysCache;
+import org.springblade.system.dto.MenuDTO;
+import org.springblade.system.entity.*;
+import org.springblade.system.mapper.MenuMapper;
+import org.springblade.system.service.IMenuService;
+import org.springblade.system.service.IRoleMenuService;
+import org.springblade.system.service.IRoleScopeService;
+import org.springblade.system.service.ITopMenuSettingService;
+import org.springblade.system.vo.MenuVO;
+import org.springblade.system.wrapper.MenuWrapper;
+import org.springframework.cache.annotation.Cacheable;
+import org.springframework.stereotype.Service;
+
+import java.util.*;
+import java.util.stream.Collectors;
+
+import static org.springblade.common.constant.CommonConstant.API_SCOPE_CATEGORY;
+import static org.springblade.common.constant.CommonConstant.DATA_SCOPE_CATEGORY;
+import static org.springblade.core.cache.constant.CacheConstant.MENU_CACHE;
+
+/**
+ * 服务实现类
+ *
+ * @author Chill
+ */
+@Service
+@AllArgsConstructor
+public class MenuServiceImpl extends ServiceImpl<MenuMapper, Menu> implements IMenuService {
+
+ private final IRoleMenuService roleMenuService;
+ private final IRoleScopeService roleScopeService;
+ private final ITopMenuSettingService topMenuSettingService;
+ private final static String PARENT_ID = "parentId";
+ private final static Integer MENU_CATEGORY = 1;
+
+ @Override
+ public List<MenuVO> lazyList(Long parentId, Map<String, Object> param) {
+ if (Func.isEmpty(Func.toStr(param.get(PARENT_ID)))) {
+ parentId = null;
+ }
+ return baseMapper.lazyList(parentId, param);
+ }
+
+ @Override
+ public List<MenuVO> lazyMenuList(Long parentId, Map<String, Object> param) {
+ if (Func.isEmpty(Func.toStr(param.get(PARENT_ID)))) {
+ parentId = null;
+ }
+ return baseMapper.lazyMenuList(parentId, param);
+ }
+
+
+ @Override
+ public List<MenuVO> routes(String roleId, Long topMenuId) {
+ if (StringUtil.isBlank(roleId)) {
+ return null;
+ }
+ List<Menu> allMenus = baseMapper.allMenu();
+ List<Menu> roleMenus;
+ // 超级管理员并且不是顶部菜单请求则返回全部菜单
+ if (AuthUtil.isAdministrator() && Func.isEmpty(topMenuId)) {
+ roleMenus = allMenus;
+ }
+ // 非超级管理员并且不是顶部菜单请求则返回对应角色权限菜单
+ else if (!AuthUtil.isAdministrator() && Func.isEmpty(topMenuId)) {
+ roleMenus = tenantPackageMenu(baseMapper.roleMenuByRoleId(Func.toLongList(roleId)));
+ }
+ // 顶部菜单请求返回对应角色权限菜单
+ else {
+ // 角色配置对应菜单
+ List<Menu> roleIdMenus = baseMapper.roleMenuByRoleId(Func.toLongList(roleId));
+ // 反向递归角色菜单所有父级
+ List<Menu> routes = new LinkedList<>(roleIdMenus);
+ roleIdMenus.forEach(roleMenu -> recursion(allMenus, routes, roleMenu));
+ // 顶部配置对应菜单
+ List<Menu> topIdMenus = baseMapper.roleMenuByTopMenuId(topMenuId);
+ // 筛选匹配角色对应的权限菜单
+ roleMenus = topIdMenus.stream().filter(x ->
+ routes.stream().anyMatch(route -> route.getId().longValue() == x.getId().longValue())
+ ).collect(Collectors.toList());
+ }
+ return buildRoutes(allMenus, roleMenus);
+ }
+
+ private List<MenuVO> buildRoutes(List<Menu> allMenus, List<Menu> roleMenus) {
+ List<Menu> routes = new LinkedList<>(roleMenus);
+ roleMenus.forEach(roleMenu -> recursion(allMenus, routes, roleMenu));
+ routes.sort(Comparator.comparing(Menu::getSort));
+ MenuWrapper menuWrapper = new MenuWrapper();
+ List<Menu> collect = routes.stream().filter(x -> Func.equals(x.getCategory(), 1)).collect(Collectors.toList());
+ return menuWrapper.listNodeVO(collect);
+ }
+
+ private void recursion(List<Menu> allMenus, List<Menu> routes, Menu roleMenu) {
+ Optional<Menu> menu = allMenus.stream().filter(x -> Func.equals(x.getId(), roleMenu.getParentId())).findFirst();
+ if (menu.isPresent() && !routes.contains(menu.get())) {
+ routes.add(menu.get());
+ recursion(allMenus, routes, menu.get());
+ }
+ }
+
+ @Override
+ public List<MenuVO> buttons(String roleId) {
+ List<Menu> buttons = (AuthUtil.isAdministrator()) ? baseMapper.allButtons() : baseMapper.buttons(Func.toLongList(roleId));
+ MenuWrapper menuWrapper = new MenuWrapper();
+ return menuWrapper.listNodeVO(buttons);
+ }
+
+ @Override
+ public List<TreeNode> tree() {
+ return ForestNodeMerger.merge(baseMapper.tree());
+ }
+
+ @Override
+ public List<TreeNode> grantTree(BladeUser user) {
+ List<TreeNode> menuTree = user.getTenantId().equals(BladeConstant.ADMIN_TENANT_ID) ? baseMapper.grantTree() : baseMapper.grantTreeByRole(Func.toLongList(user.getRoleId()));
+ return ForestNodeMerger.merge(tenantPackageTree(menuTree, user.getTenantId()));
+ }
+
+ @Override
+ public List<TreeNode> grantTopTree(BladeUser user) {
+ List<TreeNode> menuTree = user.getTenantId().equals(BladeConstant.ADMIN_TENANT_ID) ? baseMapper.grantTopTree() : baseMapper.grantTopTreeByRole(Func.toLongList(user.getRoleId()));
+ return ForestNodeMerger.merge(tenantPackageTree(menuTree, user.getTenantId()));
+ }
+
+ /**
+ * 租户菜单权限自定义筛选
+ */
+ private List<TreeNode> tenantPackageTree(List<TreeNode> menuTree, String tenantId) {
+ TenantPackage tenantPackage = SysCache.getTenantPackage(tenantId);
+ if (!AuthUtil.isAdministrator() && Func.isNotEmpty(tenantPackage) && tenantPackage.getId() > 0L) {
+ List<Long> menuIds = Func.toLongList(tenantPackage.getMenuId());
+ // 筛选出两者菜单交集集合
+ List<TreeNode> collect = menuTree.stream().filter(x -> menuIds.contains(x.getId())).collect(Collectors.toList());
+ // 创建递归基础集合
+ List<TreeNode> packageTree = new LinkedList<>(collect);
+ // 递归筛选出菜单集合所有父级
+ collect.forEach(treeNode -> recursionParent(menuTree, packageTree, treeNode));
+ // 递归筛选出菜单集合所有子级
+ collect.forEach(treeNode -> recursionChild(menuTree, packageTree, treeNode));
+ // 合并在一起返回最终集合
+ return packageTree;
+ }
+ return menuTree;
+ }
+
+ /**
+ * 父节点递归
+ */
+ public void recursionParent(List<TreeNode> menuTree, List<TreeNode> packageTree, TreeNode treeNode) {
+ Optional<TreeNode> node = menuTree.stream().filter(x -> Func.equals(x.getId(), treeNode.getParentId())).findFirst();
+ if (node.isPresent() && !packageTree.contains(node.get())) {
+ packageTree.add(node.get());
+ recursionParent(menuTree, packageTree, node.get());
+ }
+ }
+
+ /**
+ * 子节点递归
+ */
+ public void recursionChild(List<TreeNode> menuTree, List<TreeNode> packageTree, TreeNode treeNode) {
+ List<TreeNode> nodes = menuTree.stream().filter(x -> Func.equals(x.getParentId(), treeNode.getId())).collect(Collectors.toList());
+ nodes.forEach(node -> {
+ if (!packageTree.contains(node)) {
+ packageTree.add(node);
+ recursionChild(menuTree, packageTree, node);
+ }
+ });
+ }
+
+ /**
+ * 租户菜单权限自定义筛选
+ */
+ private List<Menu> tenantPackageMenu(List<Menu> menu) {
+ TenantPackage tenantPackage = SysCache.getTenantPackage(AuthUtil.getTenantId());
+ if (Func.isNotEmpty(tenantPackage) && tenantPackage.getId() > 0L) {
+ List<Long> menuIds = Func.toLongList(tenantPackage.getMenuId());
+ menu = menu.stream().filter(x -> menuIds.contains(x.getId())).collect(Collectors.toList());
+ }
+ return menu;
+ }
+
+ @Override
+ public List<TreeNode> grantDataScopeTree(BladeUser user) {
+ return ForestNodeMerger.merge(user.getTenantId().equals(BladeConstant.ADMIN_TENANT_ID) ? baseMapper.grantDataScopeTree() : baseMapper.grantDataScopeTreeByRole(Func.toLongList(user.getRoleId())));
+ }
+
+ @Override
+ public List<TreeNode> grantApiScopeTree(BladeUser user) {
+ return ForestNodeMerger.merge(user.getTenantId().equals(BladeConstant.ADMIN_TENANT_ID) ? baseMapper.grantApiScopeTree() : baseMapper.grantApiScopeTreeByRole(Func.toLongList(user.getRoleId())));
+ }
+
+ @Override
+ public List<String> roleTreeKeys(String roleIds) {
+ List<RoleMenu> roleMenus = roleMenuService.list(Wrappers.<RoleMenu>query().lambda().in(RoleMenu::getRoleId, Func.toLongList(roleIds)));
+ return roleMenus.stream().map(roleMenu -> Func.toStr(roleMenu.getMenuId())).collect(Collectors.toList());
+ }
+
+ @Override
+ public List<String> topTreeKeys(String topMenuIds) {
+ List<TopMenuSetting> settings = topMenuSettingService.list(Wrappers.<TopMenuSetting>query().lambda().in(TopMenuSetting::getTopMenuId, Func.toLongList(topMenuIds)));
+ return settings.stream().map(setting -> Func.toStr(setting.getMenuId())).collect(Collectors.toList());
+ }
+
+ @Override
+ public List<String> dataScopeTreeKeys(String roleIds) {
+ List<RoleScope> roleScopes = roleScopeService.list(Wrappers.<RoleScope>query().lambda().eq(RoleScope::getScopeCategory, DATA_SCOPE_CATEGORY).in(RoleScope::getRoleId, Func.toLongList(roleIds)));
+ return roleScopes.stream().map(roleScope -> Func.toStr(roleScope.getScopeId())).collect(Collectors.toList());
+ }
+
+ @Override
+ public List<String> apiScopeTreeKeys(String roleIds) {
+ List<RoleScope> roleScopes = roleScopeService.list(Wrappers.<RoleScope>query().lambda().eq(RoleScope::getScopeCategory, API_SCOPE_CATEGORY).in(RoleScope::getRoleId, Func.toLongList(roleIds)));
+ return roleScopes.stream().map(roleScope -> Func.toStr(roleScope.getScopeId())).collect(Collectors.toList());
+ }
+
+ @Override
+ @Cacheable(cacheNames = MENU_CACHE, key = "'auth:routes:' + #user.roleId")
+ public List<Kv> authRoutes(BladeUser user) {
+ List<MenuDTO> routes = baseMapper.authRoutes(Func.toLongList(user.getRoleId()));
+ List<Kv> list = new ArrayList<>();
+ routes.forEach(route -> list.add(Kv.create().set(route.getPath(), Kv.create().set("authority", Func.toStrArray(route.getAlias())))));
+ return list;
+ }
+
+ @Override
+ public boolean removeMenu(String ids) {
+ Long cnt = baseMapper.selectCount(Wrappers.<Menu>query().lambda().in(Menu::getParentId, Func.toLongList(ids)));
+ if (cnt > 0L) {
+// throw new ServiceException("请先删除子节点!");
+ }
+ return removeByIds(Func.toLongList(ids));
+ }
+
+ @Override
+ public boolean submit(Menu menu) {
+ LambdaQueryWrapper<Menu> menuQueryWrapper = Wrappers.lambdaQuery();
+ if (menu.getId() == null) {
+ menuQueryWrapper.eq(Menu::getCode, menu.getCode()).or(
+ wrapper -> wrapper.eq(Menu::getName, menu.getName()).eq(Menu::getCategory, MENU_CATEGORY)
+ );
+ } else {
+ menuQueryWrapper.ne(Menu::getId, menu.getId()).and(
+ wrapper -> wrapper.eq(Menu::getCode, menu.getCode()).or(
+ o -> o.eq(Menu::getName, menu.getName()).eq(Menu::getCategory, MENU_CATEGORY)
+ )
+ );
+ }
+ Long cnt = baseMapper.selectCount(menuQueryWrapper);
+ if (cnt > 0L) {
+// throw new ServiceException("菜单名或编号已存在!");
+ }
+ if (menu.getParentId() == null && menu.getId() == null) {
+ menu.setParentId(BladeConstant.TOP_PARENT_ID);
+ }
+ if (menu.getParentId() != null && menu.getId() == null) {
+ Menu parentMenu = baseMapper.selectById(menu.getParentId());
+ if (parentMenu != null && parentMenu.getCategory() != 1) {
+// throw new ServiceException("父节点只可选择菜单类型!");
+ }
+ }
+ menu.setIsDeleted(BladeConstant.DB_NOT_DELETED);
+ return saveOrUpdate(menu);
+ }
+
+}
diff --git a/blade-auth/src/main/java/org/springblade/system/service/impl/ParamServiceImpl.java b/blade-auth/src/main/java/org/springblade/system/service/impl/ParamServiceImpl.java
new file mode 100644
index 0000000..3cd73c9
--- /dev/null
+++ b/blade-auth/src/main/java/org/springblade/system/service/impl/ParamServiceImpl.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.service.impl;
+
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import org.springblade.core.mp.base.BaseServiceImpl;
+import org.springblade.system.entity.Param;
+import org.springblade.system.mapper.ParamMapper;
+import org.springblade.system.service.IParamService;
+import org.springframework.stereotype.Service;
+
+/**
+ * 服务实现类
+ *
+ * @author Chill
+ */
+@Service
+public class ParamServiceImpl extends BaseServiceImpl<ParamMapper, Param> implements IParamService {
+
+ @Override
+ public String getValue(String paramKey) {
+ Param param = this.getOne(Wrappers.<Param>query().lambda().eq(Param::getParamKey, paramKey));
+ return param.getParamValue();
+ }
+
+}
diff --git a/blade-auth/src/main/java/org/springblade/system/service/impl/PostServiceImpl.java b/blade-auth/src/main/java/org/springblade/system/service/impl/PostServiceImpl.java
new file mode 100644
index 0000000..240fd39
--- /dev/null
+++ b/blade-auth/src/main/java/org/springblade/system/service/impl/PostServiceImpl.java
@@ -0,0 +1,74 @@
+/*
+ * 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.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import org.springblade.core.mp.base.BaseServiceImpl;
+import org.springblade.core.tool.utils.Func;
+import org.springblade.system.entity.Post;
+import org.springblade.system.mapper.PostMapper;
+import org.springblade.system.service.IPostService;
+import org.springblade.system.vo.PostVO;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ * 岗位表 服务实现类
+ *
+ * @author Chill
+ */
+@Service
+public class PostServiceImpl extends BaseServiceImpl<PostMapper, Post> implements IPostService {
+
+ @Override
+ public IPage<PostVO> selectPostPage(IPage<PostVO> page, PostVO post) {
+ return page.setRecords(baseMapper.selectPostPage(page, post));
+ }
+
+ @Override
+ public String getPostIds(String tenantId, String postNames) {
+ List<Post> postList = baseMapper.selectList(Wrappers.<Post>query().lambda().eq(Post::getTenantId, tenantId).in(Post::getPostName, Func.toStrList(postNames)));
+ if (postList != null && postList.size() > 0) {
+ return postList.stream().map(post -> Func.toStr(post.getId())).distinct().collect(Collectors.joining(","));
+ }
+ return null;
+ }
+
+ @Override
+ public String getPostIdsByFuzzy(String tenantId, String postNames) {
+ LambdaQueryWrapper<Post> queryWrapper = Wrappers.<Post>query().lambda().eq(Post::getTenantId, tenantId);
+ queryWrapper.and(wrapper -> {
+ List<String> names = Func.toStrList(postNames);
+ names.forEach(name -> wrapper.like(Post::getPostName, name).or());
+ });
+ List<Post> postList = baseMapper.selectList(queryWrapper);
+ if (postList != null && postList.size() > 0) {
+ return postList.stream().map(post -> Func.toStr(post.getId())).distinct().collect(Collectors.joining(","));
+ }
+ return null;
+ }
+
+ @Override
+ public List<String> getPostNames(String postIds) {
+ return baseMapper.getPostNames(Func.toLongArray(postIds));
+ }
+
+}
diff --git a/blade-auth/src/main/java/org/springblade/system/service/impl/RegionServiceImpl.java b/blade-auth/src/main/java/org/springblade/system/service/impl/RegionServiceImpl.java
new file mode 100644
index 0000000..3c5cf9a
--- /dev/null
+++ b/blade-auth/src/main/java/org/springblade/system/service/impl/RegionServiceImpl.java
@@ -0,0 +1,120 @@
+/*
+ * 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.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.Wrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+//import org.springblade.core.log.exception.ServiceException;
+import org.springblade.core.tool.utils.BeanUtil;
+import org.springblade.core.tool.utils.Func;
+import org.springblade.core.tool.utils.StringPool;
+import org.springblade.system.entity.Region;
+import org.springblade.system.excel.RegionExcel;
+import org.springblade.system.mapper.RegionMapper;
+import org.springblade.system.service.IRegionService;
+import org.springblade.system.vo.RegionVO;
+import org.springframework.stereotype.Service;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+
+import static org.springblade.system.cache.RegionCache.*;
+
+
+/**
+ * 行政区划表 服务实现类
+ *
+ * @author Chill
+ */
+@Service
+public class RegionServiceImpl extends ServiceImpl<RegionMapper, Region> implements IRegionService {
+
+ @Override
+ public boolean submit(Region region) {
+ Long cnt = baseMapper.selectCount(Wrappers.<Region>query().lambda().eq(Region::getCode, region.getCode()));
+ if (cnt > 0L) {
+ return this.updateById(region);
+ }
+ // 设置祖区划编号
+ Region parent = getByCode(region.getParentCode());
+ if (Func.isNotEmpty(parent) || Func.isNotEmpty(parent.getCode())) {
+ String ancestors = parent.getAncestors() + StringPool.COMMA + parent.getCode();
+ region.setAncestors(ancestors);
+ }
+ // 设置省、市、区、镇、村
+ Integer level = region.getRegionLevel();
+ String code = region.getCode();
+ String name = region.getName();
+ if (level == PROVINCE_LEVEL) {
+ region.setProvinceCode(code);
+ region.setProvinceName(name);
+ } else if (level == CITY_LEVEL) {
+ region.setCityCode(code);
+ region.setCityName(name);
+ } else if (level == DISTRICT_LEVEL) {
+ region.setDistrictCode(code);
+ region.setDistrictName(name);
+ } else if (level == TOWN_LEVEL) {
+ region.setTownCode(code);
+ region.setTownName(name);
+ } else if (level == VILLAGE_LEVEL) {
+ region.setVillageCode(code);
+ region.setVillageName(name);
+ }
+ return this.save(region);
+ }
+
+ @Override
+ public boolean removeRegion(String id) {
+ Long cnt = baseMapper.selectCount(Wrappers.<Region>query().lambda().eq(Region::getParentCode, id));
+ if (cnt > 0L) {
+// throw new ServiceException("请先删除子节点!");
+ }
+ return removeById(id);
+ }
+
+ @Override
+ public List<RegionVO> lazyList(String parentCode, Map<String, Object> param) {
+ return baseMapper.lazyList(parentCode, param);
+ }
+
+ @Override
+ public List<RegionVO> lazyTree(String parentCode, Map<String, Object> param) {
+ return baseMapper.lazyTree(parentCode, param);
+ }
+
+ @Override
+ public void importRegion(List<RegionExcel> data, Boolean isCovered) {
+ List<Region> list = new ArrayList<>();
+ data.forEach(regionExcel -> {
+ Region region = BeanUtil.copy(regionExcel, Region.class);
+ list.add(region);
+ });
+ if (isCovered) {
+ this.saveOrUpdateBatch(list);
+ } else {
+ this.saveBatch(list);
+ }
+ }
+
+ @Override
+ public List<RegionExcel> exportRegion(Wrapper<Region> queryWrapper) {
+ return baseMapper.exportRegion(queryWrapper);
+ }
+}
diff --git a/blade-auth/src/main/java/org/springblade/auth/AuthApplication.java b/blade-auth/src/main/java/org/springblade/system/service/impl/RoleMenuServiceImpl.java
similarity index 65%
copy from blade-auth/src/main/java/org/springblade/auth/AuthApplication.java
copy to blade-auth/src/main/java/org/springblade/system/service/impl/RoleMenuServiceImpl.java
index 8c18654..9bf04c8 100644
--- a/blade-auth/src/main/java/org/springblade/auth/AuthApplication.java
+++ b/blade-auth/src/main/java/org/springblade/system/service/impl/RoleMenuServiceImpl.java
@@ -14,23 +14,20 @@
* this software without specific prior written permission.
* Author: Chill 庄骞 (smallchill@163.com)
*/
-package org.springblade.auth;
+package org.springblade.system.service.impl;
-
-import org.springblade.core.cloud.client.BladeCloudApplication;
-import org.springblade.core.launch.BladeApplication;
-import org.springblade.core.launch.constant.AppConstant;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springblade.system.entity.RoleMenu;
+import org.springblade.system.mapper.RoleMenuMapper;
+import org.springblade.system.service.IRoleMenuService;
+import org.springframework.stereotype.Service;
/**
- * 用户认证服务器
+ * 服务实现类
*
* @author Chill
*/
-@BladeCloudApplication
-public class AuthApplication {
-
- public static void main(String[] args) {
- BladeApplication.run(AppConstant.APPLICATION_AUTH_NAME, AuthApplication.class, args);
- }
+@Service
+public class RoleMenuServiceImpl extends ServiceImpl<RoleMenuMapper, RoleMenu> implements IRoleMenuService {
}
diff --git a/blade-auth/src/main/java/org/springblade/auth/AuthApplication.java b/blade-auth/src/main/java/org/springblade/system/service/impl/RoleScopeServiceImpl.java
similarity index 64%
copy from blade-auth/src/main/java/org/springblade/auth/AuthApplication.java
copy to blade-auth/src/main/java/org/springblade/system/service/impl/RoleScopeServiceImpl.java
index 8c18654..76b19c5 100644
--- a/blade-auth/src/main/java/org/springblade/auth/AuthApplication.java
+++ b/blade-auth/src/main/java/org/springblade/system/service/impl/RoleScopeServiceImpl.java
@@ -14,23 +14,20 @@
* this software without specific prior written permission.
* Author: Chill 庄骞 (smallchill@163.com)
*/
-package org.springblade.auth;
+package org.springblade.system.service.impl;
-
-import org.springblade.core.cloud.client.BladeCloudApplication;
-import org.springblade.core.launch.BladeApplication;
-import org.springblade.core.launch.constant.AppConstant;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springblade.system.entity.RoleScope;
+import org.springblade.system.mapper.RoleScopeMapper;
+import org.springblade.system.service.IRoleScopeService;
+import org.springframework.stereotype.Service;
/**
- * 用户认证服务器
+ * 服务实现类
*
* @author Chill
*/
-@BladeCloudApplication
-public class AuthApplication {
-
- public static void main(String[] args) {
- BladeApplication.run(AppConstant.APPLICATION_AUTH_NAME, AuthApplication.class, args);
- }
+@Service
+public class RoleScopeServiceImpl extends ServiceImpl<RoleScopeMapper, RoleScope> implements IRoleScopeService {
}
diff --git a/blade-auth/src/main/java/org/springblade/system/service/impl/RoleServiceImpl.java b/blade-auth/src/main/java/org/springblade/system/service/impl/RoleServiceImpl.java
new file mode 100644
index 0000000..02d3ebb
--- /dev/null
+++ b/blade-auth/src/main/java/org/springblade/system/service/impl/RoleServiceImpl.java
@@ -0,0 +1,230 @@
+/*
+ * 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.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import lombok.AllArgsConstructor;
+//import org.springblade.core.log.exception.ServiceException;
+import org.springblade.core.secure.utils.AuthUtil;
+import org.springblade.core.tool.constant.BladeConstant;
+import org.springblade.core.tool.constant.RoleConstant;
+import org.springblade.core.tool.node.ForestNodeMerger;
+import org.springblade.core.tool.utils.CollectionUtil;
+import org.springblade.core.tool.utils.Func;
+import org.springblade.system.entity.Role;
+import org.springblade.system.entity.RoleMenu;
+import org.springblade.system.entity.RoleScope;
+import org.springblade.system.mapper.RoleMapper;
+import org.springblade.system.service.IRoleMenuService;
+import org.springblade.system.service.IRoleScopeService;
+import org.springblade.system.service.IRoleService;
+import org.springblade.system.vo.RoleVO;
+import org.springblade.system.wrapper.RoleWrapper;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.validation.annotation.Validated;
+
+import javax.validation.constraints.NotEmpty;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+import java.util.stream.Collectors;
+
+import static org.springblade.common.constant.CommonConstant.API_SCOPE_CATEGORY;
+import static org.springblade.common.constant.CommonConstant.DATA_SCOPE_CATEGORY;
+
+/**
+ * 服务实现类
+ *
+ * @author Chill
+ */
+@Service
+@Validated
+@AllArgsConstructor
+public class RoleServiceImpl extends ServiceImpl<RoleMapper, Role> implements IRoleService {
+
+ private final IRoleMenuService roleMenuService;
+ private final IRoleScopeService roleScopeService;
+
+ @Override
+ public IPage<RoleVO> selectRolePage(IPage<RoleVO> page, RoleVO role) {
+ return page.setRecords(baseMapper.selectRolePage(page, role));
+ }
+
+ @Override
+ public List<RoleVO> tree(String tenantId) {
+ String userRole = AuthUtil.getUserRole();
+ String excludeRole = null;
+ if (!CollectionUtil.contains(Func.toStrArray(userRole), RoleConstant.ADMIN) && !CollectionUtil.contains(Func.toStrArray(userRole), RoleConstant.ADMINISTRATOR)) {
+ excludeRole = RoleConstant.ADMINISTRATOR;
+ }
+ return ForestNodeMerger.merge(baseMapper.tree(tenantId, excludeRole));
+ }
+
+ @Override
+ @Transactional(rollbackFor = Exception.class)
+ public boolean grant(@NotEmpty List<Long> roleIds, List<Long> menuIds, List<Long> dataScopeIds, List<Long> apiScopeIds) {
+ return grantRoleMenu(roleIds, menuIds) && grantDataScope(roleIds, dataScopeIds) && grantApiScope(roleIds, apiScopeIds);
+ }
+
+ private boolean grantRoleMenu(List<Long> roleIds, List<Long> menuIds) {
+ // 防止越权配置超管角色
+ Long administratorCount = baseMapper.selectCount(Wrappers.<Role>query().lambda().eq(Role::getRoleAlias, RoleConstant.ADMINISTRATOR).in(Role::getId, roleIds));
+ if (!AuthUtil.isAdministrator() && administratorCount > 0L) {
+// throw new ServiceException("无权配置超管角色!");
+ }
+ // 防止越权配置管理员角色
+ Long adminCount = baseMapper.selectCount(Wrappers.<Role>query().lambda().eq(Role::getRoleAlias, RoleConstant.ADMIN).in(Role::getId, roleIds));
+ if (!AuthUtil.isAdmin() && adminCount > 0L) {
+// throw new ServiceException("无权配置管理员角色!");
+ }
+ // 删除角色配置的菜单集合
+ roleMenuService.remove(Wrappers.<RoleMenu>update().lambda().in(RoleMenu::getRoleId, roleIds));
+ // 组装配置
+ List<RoleMenu> roleMenus = new ArrayList<>();
+ roleIds.forEach(roleId -> menuIds.forEach(menuId -> {
+ RoleMenu roleMenu = new RoleMenu();
+ roleMenu.setRoleId(roleId);
+ roleMenu.setMenuId(menuId);
+ roleMenus.add(roleMenu);
+ }));
+ // 新增配置
+ roleMenuService.saveBatch(roleMenus);
+ // 递归设置下属角色菜单集合
+ recursionRoleMenu(roleIds, menuIds);
+ return true;
+ }
+
+ private void recursionRoleMenu(List<Long> roleIds, List<Long> menuIds) {
+ roleIds.forEach(roleId -> baseMapper.selectList(Wrappers.<Role>query().lambda().eq(Role::getParentId, roleId)).forEach(role -> {
+ List<RoleMenu> roleMenuList = roleMenuService.list(Wrappers.<RoleMenu>query().lambda().eq(RoleMenu::getRoleId, role.getId()));
+ // 子节点过滤出父节点删除的菜单集合
+ List<Long> collectRoleMenuIds = roleMenuList.stream().map(RoleMenu::getMenuId).filter(menuId -> !menuIds.contains(menuId)).collect(Collectors.toList());
+ if (collectRoleMenuIds.size() > 0) {
+ // 删除子节点权限外的菜单集合
+ roleMenuService.remove(Wrappers.<RoleMenu>update().lambda().eq(RoleMenu::getRoleId, role.getId()).in(RoleMenu::getMenuId, collectRoleMenuIds));
+ // 递归设置下属角色菜单集合
+ recursionRoleMenu(Collections.singletonList(role.getId()), menuIds);
+ }
+ }));
+ }
+
+ private boolean grantDataScope(List<Long> roleIds, List<Long> dataScopeIds) {
+ // 删除角色配置的数据权限集合
+ roleScopeService.remove(Wrappers.<RoleScope>update().lambda().eq(RoleScope::getScopeCategory, DATA_SCOPE_CATEGORY).in(RoleScope::getRoleId, roleIds));
+ // 组装配置
+ List<RoleScope> roleDataScopes = new ArrayList<>();
+ roleIds.forEach(roleId -> dataScopeIds.forEach(scopeId -> {
+ RoleScope roleScope = new RoleScope();
+ roleScope.setScopeCategory(DATA_SCOPE_CATEGORY);
+ roleScope.setRoleId(roleId);
+ roleScope.setScopeId(scopeId);
+ roleDataScopes.add(roleScope);
+ }));
+ // 新增配置
+ roleScopeService.saveBatch(roleDataScopes);
+ return true;
+ }
+
+ private boolean grantApiScope(List<Long> roleIds, List<Long> apiScopeIds) {
+ // 删除角色配置的接口权限集合
+ roleScopeService.remove(Wrappers.<RoleScope>update().lambda().eq(RoleScope::getScopeCategory, API_SCOPE_CATEGORY).in(RoleScope::getRoleId, roleIds));
+ // 组装配置
+ List<RoleScope> roleApiScopes = new ArrayList<>();
+ roleIds.forEach(roleId -> apiScopeIds.forEach(scopeId -> {
+ RoleScope roleScope = new RoleScope();
+ roleScope.setScopeCategory(API_SCOPE_CATEGORY);
+ roleScope.setScopeId(scopeId);
+ roleScope.setRoleId(roleId);
+ roleApiScopes.add(roleScope);
+ }));
+ // 新增配置
+ roleScopeService.saveBatch(roleApiScopes);
+ return true;
+ }
+
+ @Override
+ public String getRoleIds(String tenantId, String roleNames) {
+ List<Role> roleList = baseMapper.selectList(Wrappers.<Role>query().lambda().eq(Role::getTenantId, tenantId).in(Role::getRoleName, Func.toStrList(roleNames)));
+ if (roleList != null && roleList.size() > 0) {
+ return roleList.stream().map(role -> Func.toStr(role.getId())).distinct().collect(Collectors.joining(","));
+ }
+ return null;
+ }
+
+ @Override
+ public List<String> getRoleNames(String roleIds) {
+ return baseMapper.getRoleNames(Func.toLongArray(roleIds));
+ }
+
+ @Override
+ public List<String> getRoleAliases(String roleIds) {
+ return baseMapper.getRoleAliases(Func.toLongArray(roleIds));
+ }
+
+ @Override
+ public boolean submit(Role role) {
+ if (!AuthUtil.isAdministrator()) {
+ if (Func.toStr(role.getRoleAlias()).equals(RoleConstant.ADMINISTRATOR)) {
+// throw new ServiceException("无权限创建超管角色!");
+ }
+ }
+ if (Func.isEmpty(role.getParentId())) {
+ role.setTenantId(AuthUtil.getTenantId());
+ role.setParentId(BladeConstant.TOP_PARENT_ID);
+ }
+ if (role.getParentId() > 0) {
+ Role parent = getById(role.getParentId());
+ if (Func.toLong(role.getParentId()) == Func.toLong(role.getId())) {
+// throw new ServiceException("父节点不可选择自身!");
+ }
+ role.setTenantId(parent.getTenantId());
+ }
+ role.setIsDeleted(BladeConstant.DB_NOT_DELETED);
+ return saveOrUpdate(role);
+ }
+
+ @Override
+ public List<RoleVO> search(String roleName, Long parentId) {
+ String tenantId = AuthUtil.getTenantId();
+ LambdaQueryWrapper<Role> queryWrapper = Wrappers.<Role>query().lambda();
+ if (Func.isNotEmpty(roleName)) {
+ queryWrapper.like(Role::getRoleName, roleName);
+ }
+ if (Func.isNotEmpty(parentId) && parentId > 0L) {
+ queryWrapper.eq(Role::getParentId, parentId);
+ }
+ if (Func.isNotEmpty(tenantId)) {
+ queryWrapper.eq(Role::getTenantId, tenantId);
+ }
+ List<Role> roleList = baseMapper.selectList(queryWrapper);
+ return RoleWrapper.build().listNodeVO(roleList);
+ }
+
+ @Override
+ public boolean removeRole(String ids) {
+ Long cnt = baseMapper.selectCount(Wrappers.<Role>query().lambda().in(Role::getParentId, Func.toLongList(ids)));
+ if (cnt > 0L) {
+// throw new ServiceException("请先删除子节点!");
+ }
+ return removeByIds(Func.toLongList(ids));
+ }
+
+}
diff --git a/blade-auth/src/main/java/org/springblade/auth/AuthApplication.java b/blade-auth/src/main/java/org/springblade/system/service/impl/TenantPackageServiceImpl.java
similarity index 61%
copy from blade-auth/src/main/java/org/springblade/auth/AuthApplication.java
copy to blade-auth/src/main/java/org/springblade/system/service/impl/TenantPackageServiceImpl.java
index 8c18654..dd222e8 100644
--- a/blade-auth/src/main/java/org/springblade/auth/AuthApplication.java
+++ b/blade-auth/src/main/java/org/springblade/system/service/impl/TenantPackageServiceImpl.java
@@ -14,23 +14,20 @@
* this software without specific prior written permission.
* Author: Chill 庄骞 (smallchill@163.com)
*/
-package org.springblade.auth;
+package org.springblade.system.service.impl;
-
-import org.springblade.core.cloud.client.BladeCloudApplication;
-import org.springblade.core.launch.BladeApplication;
-import org.springblade.core.launch.constant.AppConstant;
+import org.springblade.core.mp.base.BaseServiceImpl;
+import org.springblade.system.entity.TenantPackage;
+import org.springblade.system.mapper.TenantPackageMapper;
+import org.springblade.system.service.ITenantPackageService;
+import org.springframework.stereotype.Service;
/**
- * 用户认证服务器
+ * 租户产品表 服务实现类
*
- * @author Chill
+ * @author BladeX
*/
-@BladeCloudApplication
-public class AuthApplication {
-
- public static void main(String[] args) {
- BladeApplication.run(AppConstant.APPLICATION_AUTH_NAME, AuthApplication.class, args);
- }
+@Service
+public class TenantPackageServiceImpl extends BaseServiceImpl<TenantPackageMapper, TenantPackage> implements ITenantPackageService {
}
diff --git a/blade-auth/src/main/java/org/springblade/system/service/impl/TenantServiceImpl.java b/blade-auth/src/main/java/org/springblade/system/service/impl/TenantServiceImpl.java
new file mode 100644
index 0000000..ea883c3
--- /dev/null
+++ b/blade-auth/src/main/java/org/springblade/system/service/impl/TenantServiceImpl.java
@@ -0,0 +1,253 @@
+/*
+ * 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.service.impl;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.IdWorker;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import lombok.AllArgsConstructor;
+import org.springblade.core.cache.utils.CacheUtil;
+//import org.springblade.core.log.exception.ServiceException;
+import org.springblade.core.mp.base.BaseServiceImpl;
+import org.springblade.core.tenant.TenantId;
+import org.springblade.core.tool.api.R;
+import org.springblade.core.tool.constant.BladeConstant;
+import org.springblade.core.tool.jackson.JsonUtil;
+import org.springblade.core.tool.support.Kv;
+import org.springblade.core.tool.utils.DesUtil;
+import org.springblade.core.tool.utils.Func;
+import org.springblade.core.tool.utils.StringUtil;
+import org.springblade.system.cache.ParamCache;
+import org.springblade.system.entity.*;
+import org.springblade.system.mapper.TenantMapper;
+import org.springblade.system.service.*;
+import org.springblade.system.user.entity.User;
+import org.springblade.system.user.enums.UserEnum;
+import org.springblade.system.user.feign.IUserClient;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.stream.Collectors;
+
+import static org.springblade.common.constant.TenantConstant.*;
+import static org.springblade.core.cache.constant.CacheConstant.SYS_CACHE;
+
+/**
+ * 服务实现类
+ *
+ * @author Chill
+ */
+@Service
+@AllArgsConstructor
+public class TenantServiceImpl extends BaseServiceImpl<TenantMapper, Tenant> implements ITenantService {
+
+ private final TenantId tenantId;
+ private final IRoleService roleService;
+ private final IMenuService menuService;
+ private final IDeptService deptService;
+ private final IPostService postService;
+ private final IRoleMenuService roleMenuService;
+ private final IDictBizService dictBizService;
+ private final IUserClient userClient;
+
+ @Override
+ public IPage<Tenant> selectTenantPage(IPage<Tenant> page, Tenant tenant) {
+ return page.setRecords(baseMapper.selectTenantPage(page, tenant));
+ }
+
+ @Override
+ public Tenant getByTenantId(String tenantId) {
+ return getOne(Wrappers.<Tenant>query().lambda().eq(Tenant::getTenantId, tenantId));
+ }
+
+ @Override
+ @Transactional(rollbackFor = Exception.class)
+ public boolean submitTenant(Tenant tenant) {
+ if (Func.isEmpty(tenant.getId())) {
+ 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());
+ }
+ return temp;
+ } else {
+ CacheUtil.clear(SYS_CACHE, tenant.getTenantId());
+ return super.saveOrUpdate(tenant);
+ }
+ }
+
+ @Override
+ @Transactional(rollbackFor = Exception.class)
+ public boolean removeTenant(List<Long> 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);
+ if (tenantIds.contains(BladeConstant.ADMIN_TENANT_ID)) {
+// throw new ServiceException("不可删除管理租户!");
+ }
+ boolean tenantTemp = this.deleteLogic(ids);
+ R<Boolean> result = userClient.removeUser(StringUtil.join(tenantIds));
+ if (!result.isSuccess()) {
+// throw new ServiceException(result.getMsg());
+ }
+ return tenantTemp;
+ }
+
+ @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)
+ );
+ });
+ return true;
+ }
+
+ private String getTenantId(List<String> codes) {
+ String code = tenantId.generate();
+ if (codes.contains(code)) {
+ return getTenantId(codes);
+ }
+ return code;
+ }
+
+ private List<Menu> getMenus(List<String> codes, LinkedList<Menu> menus) {
+ codes.forEach(code -> {
+ Menu menu = menuService.getOne(Wrappers.<Menu>query().lambda().eq(Menu::getCode, code).eq(Menu::getIsDeleted, BladeConstant.DB_NOT_DELETED));
+ if (menu != null) {
+ menus.add(menu);
+ recursionMenu(menu.getId(), menus);
+ }
+ });
+ return menus;
+ }
+
+ private void recursionMenu(Long parentId, LinkedList<Menu> menus) {
+ List<Menu> menuList = menuService.list(Wrappers.<Menu>query().lambda().eq(Menu::getParentId, parentId).eq(Menu::getIsDeleted, BladeConstant.DB_NOT_DELETED));
+ menus.addAll(menuList);
+ menuList.forEach(menu -> recursionMenu(menu.getId(), menus));
+ }
+
+ private List<DictBiz> getDictBizs(String tenantId, LinkedList<DictBiz> dictBizs) {
+ List<DictBiz> dictBizList = dictBizService.list(Wrappers.<DictBiz>query().lambda().eq(DictBiz::getParentId, BladeConstant.TOP_PARENT_ID).eq(DictBiz::getIsDeleted, BladeConstant.DB_NOT_DELETED));
+ dictBizList.forEach(dictBiz -> {
+ Long oldParentId = dictBiz.getId();
+ Long newParentId = IdWorker.getId();
+ dictBiz.setId(newParentId);
+ dictBiz.setTenantId(tenantId);
+ dictBizs.add(dictBiz);
+ recursionDictBiz(tenantId, oldParentId, newParentId, dictBizs);
+ });
+ return dictBizs;
+ }
+
+ private void recursionDictBiz(String tenantId, Long oldParentId, Long newParentId, LinkedList<DictBiz> dictBizs) {
+ List<DictBiz> dictBizList = dictBizService.list(Wrappers.<DictBiz>query().lambda().eq(DictBiz::getParentId, oldParentId).eq(DictBiz::getIsDeleted, BladeConstant.DB_NOT_DELETED));
+ dictBizList.forEach(dictBiz -> {
+ Long oldSubParentId = dictBiz.getId();
+ Long newSubParentId = IdWorker.getId();
+ dictBiz.setId(newSubParentId);
+ dictBiz.setTenantId(tenantId);
+ dictBiz.setParentId(newParentId);
+ dictBizs.add(dictBiz);
+ recursionDictBiz(tenantId, oldSubParentId, newSubParentId, dictBizs);
+ });
+ }
+
+
+}
diff --git a/blade-auth/src/main/java/org/springblade/system/service/impl/TopMenuServiceImpl.java b/blade-auth/src/main/java/org/springblade/system/service/impl/TopMenuServiceImpl.java
new file mode 100644
index 0000000..134252c
--- /dev/null
+++ b/blade-auth/src/main/java/org/springblade/system/service/impl/TopMenuServiceImpl.java
@@ -0,0 +1,63 @@
+/*
+ * 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.service.impl;
+
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import lombok.AllArgsConstructor;
+import org.springblade.core.mp.base.BaseServiceImpl;
+import org.springblade.system.entity.TopMenu;
+import org.springblade.system.entity.TopMenuSetting;
+import org.springblade.system.mapper.TopMenuMapper;
+import org.springblade.system.service.ITopMenuService;
+import org.springblade.system.service.ITopMenuSettingService;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import javax.validation.constraints.NotEmpty;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * 顶部菜单表 服务实现类
+ *
+ * @author BladeX
+ */
+@Service
+@AllArgsConstructor
+public class TopMenuServiceImpl extends BaseServiceImpl<TopMenuMapper, TopMenu> implements ITopMenuService {
+
+ private final ITopMenuSettingService topMenuSettingService;
+
+ @Override
+ @Transactional(rollbackFor = Exception.class)
+ public boolean grant(@NotEmpty List<Long> topMenuIds, @NotEmpty List<Long> menuIds) {
+ // 删除顶部菜单配置的菜单集合
+ topMenuSettingService.remove(Wrappers.<TopMenuSetting>update().lambda().in(TopMenuSetting::getTopMenuId, topMenuIds));
+ // 组装配置
+ List<TopMenuSetting> menuSettings = new ArrayList<>();
+ topMenuIds.forEach(topMenuId -> menuIds.forEach(menuId -> {
+ TopMenuSetting menuSetting = new TopMenuSetting();
+ menuSetting.setTopMenuId(topMenuId);
+ menuSetting.setMenuId(menuId);
+ menuSettings.add(menuSetting);
+ }));
+ // 新增配置
+ topMenuSettingService.saveBatch(menuSettings);
+ return true;
+ }
+
+}
diff --git a/blade-auth/src/main/java/org/springblade/auth/AuthApplication.java b/blade-auth/src/main/java/org/springblade/system/service/impl/TopMenuSettingServiceImpl.java
similarity index 63%
copy from blade-auth/src/main/java/org/springblade/auth/AuthApplication.java
copy to blade-auth/src/main/java/org/springblade/system/service/impl/TopMenuSettingServiceImpl.java
index 8c18654..6c61257 100644
--- a/blade-auth/src/main/java/org/springblade/auth/AuthApplication.java
+++ b/blade-auth/src/main/java/org/springblade/system/service/impl/TopMenuSettingServiceImpl.java
@@ -14,23 +14,20 @@
* this software without specific prior written permission.
* Author: Chill 庄骞 (smallchill@163.com)
*/
-package org.springblade.auth;
+package org.springblade.system.service.impl;
-
-import org.springblade.core.cloud.client.BladeCloudApplication;
-import org.springblade.core.launch.BladeApplication;
-import org.springblade.core.launch.constant.AppConstant;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springblade.system.entity.TopMenuSetting;
+import org.springblade.system.mapper.TopMenuSettingMapper;
+import org.springblade.system.service.ITopMenuSettingService;
+import org.springframework.stereotype.Service;
/**
- * 用户认证服务器
+ * 服务实现类
*
* @author Chill
*/
-@BladeCloudApplication
-public class AuthApplication {
-
- public static void main(String[] args) {
- BladeApplication.run(AppConstant.APPLICATION_AUTH_NAME, AuthApplication.class, args);
- }
+@Service
+public class TopMenuSettingServiceImpl extends ServiceImpl<TopMenuSettingMapper, TopMenuSetting> implements ITopMenuSettingService {
}
diff --git a/blade-auth/src/main/java/org/springblade/system/user/cache/UserCache.java b/blade-auth/src/main/java/org/springblade/system/user/cache/UserCache.java
new file mode 100644
index 0000000..c5a9096
--- /dev/null
+++ b/blade-auth/src/main/java/org/springblade/system/user/cache/UserCache.java
@@ -0,0 +1,88 @@
+/*
+ * 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.user.cache;
+
+import org.springblade.core.cache.utils.CacheUtil;
+import org.springblade.core.tool.api.R;
+import org.springblade.core.tool.utils.Func;
+import org.springblade.core.tool.utils.SpringUtil;
+import org.springblade.core.tool.utils.StringPool;
+import org.springblade.core.tool.utils.StringUtil;
+import org.springblade.system.user.entity.User;
+import org.springblade.system.user.feign.IUserClient;
+import org.springblade.system.user.service.IUserService;
+
+import static org.springblade.core.cache.constant.CacheConstant.USER_CACHE;
+import static org.springblade.core.launch.constant.FlowConstant.TASK_USR_PREFIX;
+
+/**
+ * 系统缓存
+ *
+ * @author Chill
+ */
+public class UserCache {
+ private static final String USER_CACHE_ID = "user:id:";
+ private static final String USER_CACHE_ACCOUNT = "user:account:";
+
+ private static IUserService userClient;
+
+ private static IUserService getUserClient() {
+ if (userClient == null) {
+ userClient = SpringUtil.getBean(IUserService.class);
+ }
+ return userClient;
+ }
+
+ /**
+ * 根据任务用户id获取用户信息
+ *
+ * @param taskUserId 任务用户id
+ * @return
+ */
+ public static User getUserByTaskUser(String taskUserId) {
+ Long userId = Func.toLong(StringUtil.removePrefix(taskUserId, TASK_USR_PREFIX));
+ return getUser(userId);
+ }
+
+ /**
+ * 获取用户
+ *
+ * @param userId 用户id
+ * @return
+ */
+ public static User getUser(Long userId) {
+ return CacheUtil.get(USER_CACHE, USER_CACHE_ID, userId, () -> {
+ User result = getUserClient().getById(userId);
+ return result;
+ });
+ }
+
+ /**
+ * 获取用户
+ *
+ * @param tenantId 租户id
+ * @param account 账号名
+ * @return
+ */
+ public static User getUser(String tenantId, String account) {
+ return CacheUtil.get(USER_CACHE, USER_CACHE_ACCOUNT, tenantId + StringPool.DASH + account, () -> {
+ User result = getUserClient().userByAccount(tenantId, account);
+ return result;
+ });
+ }
+
+}
diff --git a/blade-auth/src/main/java/org/springblade/system/user/entity/User.java b/blade-auth/src/main/java/org/springblade/system/user/entity/User.java
new file mode 100644
index 0000000..576b32d
--- /dev/null
+++ b/blade-auth/src/main/java/org/springblade/system/user/entity/User.java
@@ -0,0 +1,96 @@
+/*
+ * 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.user.entity;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import org.springblade.core.tenant.mp.TenantEntity;
+
+import java.util.Date;
+
+/**
+ * 实体类
+ *
+ * @author Chill
+ */
+@Data
+@TableName("blade_user")
+@EqualsAndHashCode(callSuper = true)
+public class User extends TenantEntity {
+
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * 用户编号
+ */
+ private String code;
+ /**
+ * 用户平台
+ */
+ private Integer userType;
+ /**
+ * 账号
+ */
+ private String account;
+ /**
+ * 密码
+ */
+ private String password;
+ /**
+ * 昵称
+ */
+ private String name;
+ /**
+ * 真名
+ */
+ private String realName;
+ /**
+ * 头像
+ */
+ private String avatar;
+ /**
+ * 邮箱
+ */
+ private String email;
+ /**
+ * 手机
+ */
+ private String phone;
+ /**
+ * 生日
+ */
+ private Date birthday;
+ /**
+ * 性别
+ */
+ private Integer sex;
+ /**
+ * 角色id
+ */
+ private String roleId;
+ /**
+ * 部门id
+ */
+ private String deptId;
+ /**
+ * 岗位id
+ */
+ private String postId;
+
+
+}
diff --git a/blade-auth/src/main/java/org/springblade/system/user/entity/UserApp.java b/blade-auth/src/main/java/org/springblade/system/user/entity/UserApp.java
new file mode 100644
index 0000000..0e21d38
--- /dev/null
+++ b/blade-auth/src/main/java/org/springblade/system/user/entity/UserApp.java
@@ -0,0 +1,64 @@
+/*
+ * 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.user.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.extension.activerecord.Model;
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * 实体类
+ *
+ * @author Chill
+ */
+@Data
+@TableName("blade_user_app")
+@EqualsAndHashCode(callSuper = true)
+@ApiModel(value = "UserApp对象", description = "UserApp对象")
+public class UserApp extends Model<UserApp> {
+
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * 主键
+ */
+ @JsonSerialize(using = ToStringSerializer.class)
+ @ApiModelProperty(value = "主键")
+ @TableId(value = "id", type = IdType.ASSIGN_ID)
+ private Long id;
+
+ /**
+ * 用户ID
+ */
+ @JsonSerialize(using = ToStringSerializer.class)
+ @ApiModelProperty(value = "用户ID")
+ private Long userId;
+
+ /**
+ * 用户拓展信息
+ */
+ @ApiModelProperty(value = "用户拓展信息")
+ private String userExt;
+
+}
diff --git a/blade-auth/src/main/java/org/springblade/system/user/entity/UserDept.java b/blade-auth/src/main/java/org/springblade/system/user/entity/UserDept.java
new file mode 100644
index 0000000..3fb0c02
--- /dev/null
+++ b/blade-auth/src/main/java/org/springblade/system/user/entity/UserDept.java
@@ -0,0 +1,64 @@
+/*
+ * 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.user.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * 实体类
+ *
+ * @author Chill
+ */
+@Data
+@TableName("blade_user_dept")
+@ApiModel(value = "UserDept对象", description = "UserDept对象")
+public class UserDept implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * 主键
+ */
+ @JsonSerialize(using = ToStringSerializer.class)
+ @ApiModelProperty(value = "主键")
+ @TableId(value = "id", type = IdType.ASSIGN_ID)
+ private Long id;
+
+ /**
+ * 用户ID
+ */
+ @JsonSerialize(using = ToStringSerializer.class)
+ @ApiModelProperty(value = "用户ID")
+ private Long userId;
+
+ /**
+ * 部门ID
+ */
+ @JsonSerialize(using = ToStringSerializer.class)
+ @ApiModelProperty(value = "部门ID")
+ private Long deptId;
+
+}
diff --git a/blade-auth/src/main/java/org/springblade/system/user/entity/UserInfo.java b/blade-auth/src/main/java/org/springblade/system/user/entity/UserInfo.java
new file mode 100644
index 0000000..98063fa
--- /dev/null
+++ b/blade-auth/src/main/java/org/springblade/system/user/entity/UserInfo.java
@@ -0,0 +1,68 @@
+/*
+ * 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.user.entity;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import org.springblade.core.tool.support.Kv;
+
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * 用户信息
+ *
+ * @author Chill
+ */
+@Data
+@ApiModel(description = "用户信息")
+public class UserInfo implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * 第三方授权id
+ */
+ @ApiModelProperty(value = "第三方授权id")
+ private String oauthId;
+
+ /**
+ * 用户基础信息
+ */
+ @ApiModelProperty(value = "用户")
+ private User user;
+
+ /**
+ * 拓展信息
+ */
+ @ApiModelProperty(value = "拓展信息")
+ private Kv detail;
+
+ /**
+ * 权限标识集合
+ */
+ @ApiModelProperty(value = "权限集合")
+ private List<String> permissions;
+
+ /**
+ * 角色集合
+ */
+ @ApiModelProperty(value = "角色集合")
+ private List<String> roles;
+
+}
diff --git a/blade-auth/src/main/java/org/springblade/system/user/entity/UserOauth.java b/blade-auth/src/main/java/org/springblade/system/user/entity/UserOauth.java
new file mode 100644
index 0000000..b4b9a68
--- /dev/null
+++ b/blade-auth/src/main/java/org/springblade/system/user/entity/UserOauth.java
@@ -0,0 +1,107 @@
+/*
+ * 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.user.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * 实体类
+ *
+ * @author Chill
+ */
+@Data
+@TableName("blade_user_oauth")
+public class UserOauth implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * 主键
+ */
+ @JsonSerialize(using = ToStringSerializer.class)
+ @ApiModelProperty(value = "主键")
+ @TableId(value = "id", type = IdType.ASSIGN_ID)
+ private Long id;
+
+ /**
+ * 租户ID
+ */
+ private String tenantId;
+
+ /**
+ * 第三方系统用户ID
+ */
+ private String uuid;
+
+ /**
+ * 用户ID
+ */
+ @JsonSerialize(using = ToStringSerializer.class)
+ @ApiModelProperty(value = "用户主键")
+ private Long userId;
+
+ /**
+ * 用户名
+ */
+ private String username;
+ /**
+ * 用户昵称
+ */
+ private String nickname;
+ /**
+ * 用户头像
+ */
+ private String avatar;
+ /**
+ * 用户网址
+ */
+ private String blog;
+ /**
+ * 所在公司
+ */
+ private String company;
+ /**
+ * 位置
+ */
+ private String location;
+ /**
+ * 用户邮箱
+ */
+ private String email;
+ /**
+ * 用户备注(各平台中的用户个人介绍)
+ */
+ private String remark;
+ /**
+ * 性别
+ */
+ private String gender;
+ /**
+ * 用户来源
+ */
+ private String source;
+
+
+}
diff --git a/blade-auth/src/main/java/org/springblade/system/user/entity/UserOther.java b/blade-auth/src/main/java/org/springblade/system/user/entity/UserOther.java
new file mode 100644
index 0000000..fba573e
--- /dev/null
+++ b/blade-auth/src/main/java/org/springblade/system/user/entity/UserOther.java
@@ -0,0 +1,64 @@
+/*
+ * 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.user.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.extension.activerecord.Model;
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * 实体类
+ *
+ * @author Chill
+ */
+@Data
+@TableName("blade_user_other")
+@EqualsAndHashCode(callSuper = true)
+@ApiModel(value = "UserOther对象", description = "UserOther对象")
+public class UserOther extends Model<UserOther> {
+
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * 主键
+ */
+ @JsonSerialize(using = ToStringSerializer.class)
+ @ApiModelProperty(value = "主键")
+ @TableId(value = "id", type = IdType.ASSIGN_ID)
+ private Long id;
+
+ /**
+ * 用户ID
+ */
+ @JsonSerialize(using = ToStringSerializer.class)
+ @ApiModelProperty(value = "用户ID")
+ private Long userId;
+
+ /**
+ * 用户拓展信息
+ */
+ @ApiModelProperty(value = "用户拓展信息")
+ private String userExt;
+
+}
diff --git a/blade-auth/src/main/java/org/springblade/system/user/entity/UserWeb.java b/blade-auth/src/main/java/org/springblade/system/user/entity/UserWeb.java
new file mode 100644
index 0000000..75c6711
--- /dev/null
+++ b/blade-auth/src/main/java/org/springblade/system/user/entity/UserWeb.java
@@ -0,0 +1,64 @@
+/*
+ * 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.user.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.extension.activerecord.Model;
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * 实体类
+ *
+ * @author Chill
+ */
+@Data
+@TableName("blade_user_web")
+@EqualsAndHashCode(callSuper = true)
+@ApiModel(value = "UserWeb对象", description = "UserWeb对象")
+public class UserWeb extends Model<UserWeb> {
+
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * 主键
+ */
+ @JsonSerialize(using = ToStringSerializer.class)
+ @ApiModelProperty(value = "主键")
+ @TableId(value = "id", type = IdType.ASSIGN_ID)
+ private Long id;
+
+ /**
+ * 用户ID
+ */
+ @JsonSerialize(using = ToStringSerializer.class)
+ @ApiModelProperty(value = "用户ID")
+ private Long userId;
+
+ /**
+ * 用户拓展信息
+ */
+ @ApiModelProperty(value = "用户拓展信息")
+ private String userExt;
+
+}
diff --git a/blade-auth/src/main/java/org/springblade/system/user/enums/UserEnum.java b/blade-auth/src/main/java/org/springblade/system/user/enums/UserEnum.java
new file mode 100644
index 0000000..3626e4b
--- /dev/null
+++ b/blade-auth/src/main/java/org/springblade/system/user/enums/UserEnum.java
@@ -0,0 +1,69 @@
+/*
+ * 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.user.enums;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+/**
+ * 用户类型枚举
+ *
+ * @author Chill
+ */
+@Getter
+@AllArgsConstructor
+public enum UserEnum {
+
+ /**
+ * web
+ */
+ WEB("web", 1),
+
+ /**
+ * app
+ */
+ APP("app", 2),
+
+ /**
+ * other
+ */
+ OTHER("other", 3),
+ ;
+
+ final String name;
+ final int category;
+
+ /**
+ * 匹配枚举值
+ *
+ * @param name 名称
+ * @return BladeUserEnum
+ */
+ public static UserEnum of(String name) {
+ if (name == null) {
+ return null;
+ }
+ UserEnum[] values = UserEnum.values();
+ for (UserEnum smsEnum : values) {
+ if (smsEnum.name.equals(name)) {
+ return smsEnum;
+ }
+ }
+ return null;
+ }
+
+}
diff --git a/blade-auth/src/main/java/org/springblade/system/user/excel/UserExcel.java b/blade-auth/src/main/java/org/springblade/system/user/excel/UserExcel.java
new file mode 100644
index 0000000..0ed691d
--- /dev/null
+++ b/blade-auth/src/main/java/org/springblade/system/user/excel/UserExcel.java
@@ -0,0 +1,97 @@
+/*
+ * 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.user.excel;
+
+import com.alibaba.excel.annotation.ExcelIgnore;
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.alibaba.excel.annotation.write.style.ColumnWidth;
+import com.alibaba.excel.annotation.write.style.ContentRowHeight;
+import com.alibaba.excel.annotation.write.style.HeadRowHeight;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * UserExcel
+ *
+ * @author Chill
+ */
+@Data
+@ColumnWidth(25)
+@HeadRowHeight(20)
+@ContentRowHeight(18)
+public class UserExcel implements Serializable {
+ private static final long serialVersionUID = 1L;
+
+ @ColumnWidth(15)
+ @ExcelProperty("租户编号")
+ private String tenantId;
+
+ @ExcelIgnore
+ @ExcelProperty("用户平台")
+ private String userType;
+
+ @ColumnWidth(20)
+ @ExcelProperty("用户平台名称")
+ private String userTypeName;
+
+ @ColumnWidth(15)
+ @ExcelProperty("账户")
+ private String account;
+
+ @ColumnWidth(10)
+ @ExcelProperty("昵称")
+ private String name;
+
+ @ColumnWidth(10)
+ @ExcelProperty("姓名")
+ private String realName;
+
+ @ExcelProperty("邮箱")
+ private String email;
+
+ @ColumnWidth(15)
+ @ExcelProperty("手机")
+ private String phone;
+
+ @ExcelIgnore
+ @ExcelProperty("角色ID")
+ private String roleId;
+
+ @ExcelIgnore
+ @ExcelProperty("部门ID")
+ private String deptId;
+
+ @ExcelIgnore
+ @ExcelProperty("岗位ID")
+ private String postId;
+
+ @ExcelProperty("角色名称")
+ private String roleName;
+
+ @ExcelProperty("部门名称")
+ private String deptName;
+
+ @ExcelProperty("岗位名称")
+ private String postName;
+
+ @ColumnWidth(20)
+ @ExcelProperty("生日")
+ private Date birthday;
+
+}
diff --git a/blade-auth/src/main/java/org/springblade/auth/AuthApplication.java b/blade-auth/src/main/java/org/springblade/system/user/excel/UserImporter.java
similarity index 63%
copy from blade-auth/src/main/java/org/springblade/auth/AuthApplication.java
copy to blade-auth/src/main/java/org/springblade/system/user/excel/UserImporter.java
index 8c18654..0f450d9 100644
--- a/blade-auth/src/main/java/org/springblade/auth/AuthApplication.java
+++ b/blade-auth/src/main/java/org/springblade/system/user/excel/UserImporter.java
@@ -14,23 +14,27 @@
* this software without specific prior written permission.
* Author: Chill 庄骞 (smallchill@163.com)
*/
-package org.springblade.auth;
+package org.springblade.system.user.excel;
+import lombok.RequiredArgsConstructor;
+import org.springblade.core.excel.support.ExcelImporter;
+import org.springblade.system.user.service.IUserService;
-import org.springblade.core.cloud.client.BladeCloudApplication;
-import org.springblade.core.launch.BladeApplication;
-import org.springblade.core.launch.constant.AppConstant;
+import java.util.List;
/**
- * 用户认证服务器
+ * 用户数据导入类
*
* @author Chill
*/
-@BladeCloudApplication
-public class AuthApplication {
+@RequiredArgsConstructor
+public class UserImporter implements ExcelImporter<UserExcel> {
- public static void main(String[] args) {
- BladeApplication.run(AppConstant.APPLICATION_AUTH_NAME, AuthApplication.class, args);
+ private final IUserService service;
+ private final Boolean isCovered;
+
+ @Override
+ public void save(List<UserExcel> data) {
+ service.importUser(data, isCovered);
}
-
}
diff --git a/blade-auth/src/main/java/org/springblade/auth/AuthApplication.java b/blade-auth/src/main/java/org/springblade/system/user/mapper/UserAppMapper.java
similarity index 67%
copy from blade-auth/src/main/java/org/springblade/auth/AuthApplication.java
copy to blade-auth/src/main/java/org/springblade/system/user/mapper/UserAppMapper.java
index 8c18654..feae073 100644
--- a/blade-auth/src/main/java/org/springblade/auth/AuthApplication.java
+++ b/blade-auth/src/main/java/org/springblade/system/user/mapper/UserAppMapper.java
@@ -14,23 +14,17 @@
* this software without specific prior written permission.
* Author: Chill 庄骞 (smallchill@163.com)
*/
-package org.springblade.auth;
+package org.springblade.system.user.mapper;
-
-import org.springblade.core.cloud.client.BladeCloudApplication;
-import org.springblade.core.launch.BladeApplication;
-import org.springblade.core.launch.constant.AppConstant;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.springblade.system.user.entity.UserApp;
/**
- * 用户认证服务器
+ * Mapper 接口
*
* @author Chill
*/
-@BladeCloudApplication
-public class AuthApplication {
+public interface UserAppMapper extends BaseMapper<UserApp> {
- public static void main(String[] args) {
- BladeApplication.run(AppConstant.APPLICATION_AUTH_NAME, AuthApplication.class, args);
- }
}
diff --git a/blade-auth/src/main/java/org/springblade/system/user/mapper/UserAppMapper.xml b/blade-auth/src/main/java/org/springblade/system/user/mapper/UserAppMapper.xml
new file mode 100644
index 0000000..321d2df
--- /dev/null
+++ b/blade-auth/src/main/java/org/springblade/system/user/mapper/UserAppMapper.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="org.springblade.system.user.mapper.UserAppMapper">
+
+</mapper>
diff --git a/blade-auth/src/main/java/org/springblade/auth/AuthApplication.java b/blade-auth/src/main/java/org/springblade/system/user/mapper/UserDeptMapper.java
similarity index 67%
copy from blade-auth/src/main/java/org/springblade/auth/AuthApplication.java
copy to blade-auth/src/main/java/org/springblade/system/user/mapper/UserDeptMapper.java
index 8c18654..a8bf6bd 100644
--- a/blade-auth/src/main/java/org/springblade/auth/AuthApplication.java
+++ b/blade-auth/src/main/java/org/springblade/system/user/mapper/UserDeptMapper.java
@@ -14,23 +14,17 @@
* this software without specific prior written permission.
* Author: Chill 庄骞 (smallchill@163.com)
*/
-package org.springblade.auth;
+package org.springblade.system.user.mapper;
-
-import org.springblade.core.cloud.client.BladeCloudApplication;
-import org.springblade.core.launch.BladeApplication;
-import org.springblade.core.launch.constant.AppConstant;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.springblade.system.user.entity.UserDept;
/**
- * 用户认证服务器
+ * Mapper 接口
*
* @author Chill
*/
-@BladeCloudApplication
-public class AuthApplication {
+public interface UserDeptMapper extends BaseMapper<UserDept> {
- public static void main(String[] args) {
- BladeApplication.run(AppConstant.APPLICATION_AUTH_NAME, AuthApplication.class, args);
- }
}
diff --git a/blade-auth/src/main/java/org/springblade/system/user/mapper/UserDeptMapper.xml b/blade-auth/src/main/java/org/springblade/system/user/mapper/UserDeptMapper.xml
new file mode 100644
index 0000000..e5b4723
--- /dev/null
+++ b/blade-auth/src/main/java/org/springblade/system/user/mapper/UserDeptMapper.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="org.springblade.system.user.mapper.UserDeptMapper">
+
+</mapper>
diff --git a/blade-auth/src/main/java/org/springblade/system/user/mapper/UserMapper.java b/blade-auth/src/main/java/org/springblade/system/user/mapper/UserMapper.java
new file mode 100644
index 0000000..30a83db
--- /dev/null
+++ b/blade-auth/src/main/java/org/springblade/system/user/mapper/UserMapper.java
@@ -0,0 +1,63 @@
+/*
+ * 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.user.mapper;
+
+import com.baomidou.mybatisplus.core.conditions.Wrapper;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import org.apache.ibatis.annotations.Param;
+import org.springblade.system.user.entity.User;
+import org.springblade.system.user.excel.UserExcel;
+
+import java.util.List;
+
+/**
+ * Mapper 接口
+ *
+ * @author Chill
+ */
+public interface UserMapper extends BaseMapper<User> {
+
+ /**
+ * 自定义分页
+ *
+ * @param page
+ * @param user
+ * @param deptIdList
+ * @param tenantId
+ * @return
+ */
+ List<User> selectUserPage(IPage<User> page, @Param("user") User user, @Param("deptIdList") List<Long> deptIdList, @Param("tenantId") String tenantId);
+
+ /**
+ * 获取用户
+ *
+ * @param tenantId
+ * @param account
+ * @return
+ */
+ User getUser(String tenantId, String account);
+
+ /**
+ * 获取导出用户数据
+ *
+ * @param queryWrapper
+ * @return
+ */
+ List<UserExcel> exportUser(@Param("ew") Wrapper<User> queryWrapper);
+
+}
diff --git a/blade-auth/src/main/java/org/springblade/system/user/mapper/UserMapper.xml b/blade-auth/src/main/java/org/springblade/system/user/mapper/UserMapper.xml
new file mode 100644
index 0000000..307340e
--- /dev/null
+++ b/blade-auth/src/main/java/org/springblade/system/user/mapper/UserMapper.xml
@@ -0,0 +1,76 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="org.springblade.system.user.mapper.UserMapper">
+
+ <!-- 通用查询映射结果 -->
+ <resultMap id="userResultMap" type="org.springblade.system.user.entity.User">
+ <result column="id" property="id"/>
+ <result column="tenant_id" property="tenantId"/>
+ <result column="create_user" property="createUser"/>
+ <result column="create_time" property="createTime"/>
+ <result column="update_user" property="updateUser"/>
+ <result column="update_time" property="updateTime"/>
+ <result column="status" property="status"/>
+ <result column="is_deleted" property="isDeleted"/>
+ <result column="code" property="code"/>
+ <result column="user_type" property="userType"/>
+ <result column="account" property="account"/>
+ <result column="password" property="password"/>
+ <result column="name" property="name"/>
+ <result column="real_name" property="realName"/>
+ <result column="email" property="email"/>
+ <result column="phone" property="phone"/>
+ <result column="birthday" property="birthday"/>
+ <result column="sex" property="sex"/>
+ <result column="role_id" property="roleId"/>
+ <result column="dept_id" property="deptId"/>
+ <result column="post_id" property="postId"/>
+ </resultMap>
+
+ <select id="selectUserPage" resultMap="userResultMap">
+ select * from blade_user where is_deleted = 0
+ <if test="tenantId!=null and tenantId != ''">
+ and tenant_id = #{tenantId}
+ </if>
+ <if test="user.tenantId!=null and user.tenantId != ''">
+ and tenant_id = #{user.tenantId}
+ </if>
+ <if test="user.account!=null and user.account != ''">
+ and account = #{user.account}
+ </if>
+ <if test="user.realName!=null and user.realName != ''">
+ and real_name = #{user.realName}
+ </if>
+ <if test="user.userType!=null and user.userType != ''">
+ and user_type = #{user.userType}
+ </if>
+ <if test="deptIdList!=null and deptIdList.size>0">
+ and id in (
+ SELECT
+ user_id
+ FROM
+ blade_user_dept
+ WHERE
+ dept_id IN
+ <foreach collection="deptIdList" index="index" item="item" open="(" separator="," close=")">
+ #{item}
+ </foreach>
+ )
+ </if>
+ ORDER BY id
+ </select>
+
+ <select id="getUser" resultMap="userResultMap">
+ SELECT
+ *
+ FROM
+ blade_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>
+
+</mapper>
diff --git a/blade-auth/src/main/java/org/springblade/auth/AuthApplication.java b/blade-auth/src/main/java/org/springblade/system/user/mapper/UserOauthMapper.java
similarity index 67%
copy from blade-auth/src/main/java/org/springblade/auth/AuthApplication.java
copy to blade-auth/src/main/java/org/springblade/system/user/mapper/UserOauthMapper.java
index 8c18654..edaa704 100644
--- a/blade-auth/src/main/java/org/springblade/auth/AuthApplication.java
+++ b/blade-auth/src/main/java/org/springblade/system/user/mapper/UserOauthMapper.java
@@ -14,23 +14,16 @@
* this software without specific prior written permission.
* Author: Chill 庄骞 (smallchill@163.com)
*/
-package org.springblade.auth;
+package org.springblade.system.user.mapper;
-
-import org.springblade.core.cloud.client.BladeCloudApplication;
-import org.springblade.core.launch.BladeApplication;
-import org.springblade.core.launch.constant.AppConstant;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.springblade.system.user.entity.UserOauth;
/**
- * 用户认证服务器
+ * Mapper 接口
*
* @author Chill
*/
-@BladeCloudApplication
-public class AuthApplication {
-
- public static void main(String[] args) {
- BladeApplication.run(AppConstant.APPLICATION_AUTH_NAME, AuthApplication.class, args);
- }
+public interface UserOauthMapper extends BaseMapper<UserOauth> {
}
diff --git a/blade-auth/src/main/java/org/springblade/system/user/mapper/UserOauthMapper.xml b/blade-auth/src/main/java/org/springblade/system/user/mapper/UserOauthMapper.xml
new file mode 100644
index 0000000..c1ccf8d
--- /dev/null
+++ b/blade-auth/src/main/java/org/springblade/system/user/mapper/UserOauthMapper.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="org.springblade.system.user.mapper.UserOauthMapper">
+
+ <!-- 通用查询映射结果 -->
+ <resultMap id="userResultMap" type="org.springblade.system.user.entity.UserOauth">
+ <result column="id" property="id"/>
+ <result column="tenant_id" property="tenantId"/>
+ <result column="user_id" property="userId"/>
+ <result column="username" property="username"/>
+ <result column="nickname" property="nickname"/>
+ <result column="avatar" property="avatar"/>
+ <result column="blog" property="blog"/>
+ <result column="company" property="company"/>
+ <result column="location" property="location"/>
+ <result column="email" property="email"/>
+ <result column="remark" property="remark"/>
+ <result column="gender" property="gender"/>
+ <result column="source" property="source"/>
+ </resultMap>
+
+</mapper>
diff --git a/blade-auth/src/main/java/org/springblade/auth/AuthApplication.java b/blade-auth/src/main/java/org/springblade/system/user/mapper/UserOtherMapper.java
similarity index 67%
copy from blade-auth/src/main/java/org/springblade/auth/AuthApplication.java
copy to blade-auth/src/main/java/org/springblade/system/user/mapper/UserOtherMapper.java
index 8c18654..f7a9c69 100644
--- a/blade-auth/src/main/java/org/springblade/auth/AuthApplication.java
+++ b/blade-auth/src/main/java/org/springblade/system/user/mapper/UserOtherMapper.java
@@ -14,23 +14,17 @@
* this software without specific prior written permission.
* Author: Chill 庄骞 (smallchill@163.com)
*/
-package org.springblade.auth;
+package org.springblade.system.user.mapper;
-
-import org.springblade.core.cloud.client.BladeCloudApplication;
-import org.springblade.core.launch.BladeApplication;
-import org.springblade.core.launch.constant.AppConstant;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.springblade.system.user.entity.UserOther;
/**
- * 用户认证服务器
+ * Mapper 接口
*
* @author Chill
*/
-@BladeCloudApplication
-public class AuthApplication {
+public interface UserOtherMapper extends BaseMapper<UserOther> {
- public static void main(String[] args) {
- BladeApplication.run(AppConstant.APPLICATION_AUTH_NAME, AuthApplication.class, args);
- }
}
diff --git a/blade-auth/src/main/java/org/springblade/system/user/mapper/UserOtherMapper.xml b/blade-auth/src/main/java/org/springblade/system/user/mapper/UserOtherMapper.xml
new file mode 100644
index 0000000..3cde6e2
--- /dev/null
+++ b/blade-auth/src/main/java/org/springblade/system/user/mapper/UserOtherMapper.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="org.springblade.system.user.mapper.UserOtherMapper">
+
+</mapper>
diff --git a/blade-auth/src/main/java/org/springblade/auth/AuthApplication.java b/blade-auth/src/main/java/org/springblade/system/user/mapper/UserWebMapper.java
similarity index 67%
copy from blade-auth/src/main/java/org/springblade/auth/AuthApplication.java
copy to blade-auth/src/main/java/org/springblade/system/user/mapper/UserWebMapper.java
index 8c18654..735aeaa 100644
--- a/blade-auth/src/main/java/org/springblade/auth/AuthApplication.java
+++ b/blade-auth/src/main/java/org/springblade/system/user/mapper/UserWebMapper.java
@@ -14,23 +14,17 @@
* this software without specific prior written permission.
* Author: Chill 庄骞 (smallchill@163.com)
*/
-package org.springblade.auth;
+package org.springblade.system.user.mapper;
-
-import org.springblade.core.cloud.client.BladeCloudApplication;
-import org.springblade.core.launch.BladeApplication;
-import org.springblade.core.launch.constant.AppConstant;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.springblade.system.user.entity.UserWeb;
/**
- * 用户认证服务器
+ * Mapper 接口
*
* @author Chill
*/
-@BladeCloudApplication
-public class AuthApplication {
+public interface UserWebMapper extends BaseMapper<UserWeb> {
- public static void main(String[] args) {
- BladeApplication.run(AppConstant.APPLICATION_AUTH_NAME, AuthApplication.class, args);
- }
}
diff --git a/blade-auth/src/main/java/org/springblade/system/user/mapper/UserWebMapper.xml b/blade-auth/src/main/java/org/springblade/system/user/mapper/UserWebMapper.xml
new file mode 100644
index 0000000..687ffc1
--- /dev/null
+++ b/blade-auth/src/main/java/org/springblade/system/user/mapper/UserWebMapper.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="org.springblade.system.user.mapper.UserWebMapper">
+
+</mapper>
diff --git a/blade-auth/src/main/java/org/springblade/auth/AuthApplication.java b/blade-auth/src/main/java/org/springblade/system/user/service/IUserDeptService.java
similarity index 67%
copy from blade-auth/src/main/java/org/springblade/auth/AuthApplication.java
copy to blade-auth/src/main/java/org/springblade/system/user/service/IUserDeptService.java
index 8c18654..cc1d8df 100644
--- a/blade-auth/src/main/java/org/springblade/auth/AuthApplication.java
+++ b/blade-auth/src/main/java/org/springblade/system/user/service/IUserDeptService.java
@@ -14,23 +14,17 @@
* this software without specific prior written permission.
* Author: Chill 庄骞 (smallchill@163.com)
*/
-package org.springblade.auth;
+package org.springblade.system.user.service;
-import org.springblade.core.cloud.client.BladeCloudApplication;
-import org.springblade.core.launch.BladeApplication;
-import org.springblade.core.launch.constant.AppConstant;
+import com.baomidou.mybatisplus.extension.service.IService;
+import org.springblade.system.user.entity.UserDept;
/**
- * 用户认证服务器
+ * 服务类
*
* @author Chill
*/
-@BladeCloudApplication
-public class AuthApplication {
-
- public static void main(String[] args) {
- BladeApplication.run(AppConstant.APPLICATION_AUTH_NAME, AuthApplication.class, args);
- }
+public interface IUserDeptService extends IService<UserDept> {
}
diff --git a/blade-auth/src/main/java/org/springblade/auth/AuthApplication.java b/blade-auth/src/main/java/org/springblade/system/user/service/IUserOauthService.java
similarity index 67%
copy from blade-auth/src/main/java/org/springblade/auth/AuthApplication.java
copy to blade-auth/src/main/java/org/springblade/system/user/service/IUserOauthService.java
index 8c18654..4c0dd98 100644
--- a/blade-auth/src/main/java/org/springblade/auth/AuthApplication.java
+++ b/blade-auth/src/main/java/org/springblade/system/user/service/IUserOauthService.java
@@ -14,23 +14,17 @@
* this software without specific prior written permission.
* Author: Chill 庄骞 (smallchill@163.com)
*/
-package org.springblade.auth;
+package org.springblade.system.user.service;
-import org.springblade.core.cloud.client.BladeCloudApplication;
-import org.springblade.core.launch.BladeApplication;
-import org.springblade.core.launch.constant.AppConstant;
+import com.baomidou.mybatisplus.extension.service.IService;
+import org.springblade.system.user.entity.UserOauth;
/**
- * 用户认证服务器
+ * 服务类
*
* @author Chill
*/
-@BladeCloudApplication
-public class AuthApplication {
-
- public static void main(String[] args) {
- BladeApplication.run(AppConstant.APPLICATION_AUTH_NAME, AuthApplication.class, args);
- }
+public interface IUserOauthService extends IService<UserOauth> {
}
diff --git a/blade-auth/src/main/java/org/springblade/system/user/service/IUserSearchService.java b/blade-auth/src/main/java/org/springblade/system/user/service/IUserSearchService.java
new file mode 100644
index 0000000..112712c
--- /dev/null
+++ b/blade-auth/src/main/java/org/springblade/system/user/service/IUserSearchService.java
@@ -0,0 +1,64 @@
+/*
+ * 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.user.service;
+
+
+import org.springblade.core.mp.base.BaseService;
+import org.springblade.system.user.entity.User;
+
+import java.util.List;
+
+/**
+ * 用户查询服务类
+ *
+ * @author Chill
+ */
+public interface IUserSearchService extends BaseService<User> {
+
+ /**
+ * 根据用户ID查询用户列表
+ *
+ * @param userId 用户ID
+ * @return 用户列表
+ */
+ List<User> listByUser(List<Long> userId);
+
+ /**
+ * 根据部门ID查询用户列表
+ *
+ * @param deptId 部门ID
+ * @return 用户列表
+ */
+ List<User> listByDept(List<Long> deptId);
+
+ /**
+ * 根据岗位ID查询用户列表
+ *
+ * @param postId 岗位ID
+ * @return 用户列表
+ */
+ List<User> listByPost(List<Long> postId);
+
+ /**
+ * 根据角色ID查询用户列表
+ *
+ * @param roleId 角色ID
+ * @return 用户列表
+ */
+ List<User> listByRole(List<Long> roleId);
+
+}
diff --git a/blade-auth/src/main/java/org/springblade/system/user/service/IUserService.java b/blade-auth/src/main/java/org/springblade/system/user/service/IUserService.java
new file mode 100644
index 0000000..9f0f3de
--- /dev/null
+++ b/blade-auth/src/main/java/org/springblade/system/user/service/IUserService.java
@@ -0,0 +1,208 @@
+/*
+ * 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.user.service;
+
+
+import com.baomidou.mybatisplus.core.conditions.Wrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import org.springblade.core.mp.base.BaseService;
+import org.springblade.core.mp.support.Query;
+import org.springblade.system.user.entity.User;
+import org.springblade.system.user.entity.UserInfo;
+import org.springblade.system.user.entity.UserOauth;
+import org.springblade.system.user.enums.UserEnum;
+import org.springblade.system.user.excel.UserExcel;
+import org.springblade.system.user.vo.UserVO;
+
+import java.util.List;
+
+/**
+ * 服务类
+ *
+ * @author Chill
+ */
+public interface IUserService extends BaseService<User> {
+
+ /**
+ * 新增用户
+ *
+ * @param user
+ * @return
+ */
+ boolean submit(User user);
+
+ /**
+ * 修改用户
+ *
+ * @param user
+ * @return
+ */
+ boolean updateUser(User user);
+
+ /**
+ * 修改用户基本信息
+ *
+ * @param user
+ * @return
+ */
+ boolean updateUserInfo(User user);
+
+ /**
+ * 自定义分页
+ *
+ * @param page
+ * @param user
+ * @param deptId
+ * @param tenantId
+ * @return
+ */
+ IPage<User> selectUserPage(IPage<User> page, User user, Long deptId, String tenantId);
+
+ /**
+ * 自定义分页
+ *
+ * @param user
+ * @param query
+ * @return
+ */
+ IPage<UserVO> selectUserSearch(UserVO user, Query query);
+
+
+ /**
+ * 用户信息
+ *
+ * @param userId
+ * @return
+ */
+ UserInfo userInfo(Long userId);
+
+ /**
+ * 用户信息
+ *
+ * @param tenantId
+ * @param account
+ * @return
+ */
+ UserInfo userInfo(String tenantId, String account);
+
+ /**
+ * 用户信息
+ *
+ * @param tenantId
+ * @param account
+ * @param userEnum
+ * @return
+ */
+ UserInfo userInfo(String tenantId, String account, UserEnum userEnum);
+
+ /**
+ * 用户信息
+ *
+ * @param userOauth
+ * @return
+ */
+ UserInfo userInfo(UserOauth userOauth);
+
+ /**
+ * 根据账号获取用户
+ *
+ * @param tenantId
+ * @param account
+ * @return
+ */
+ User userByAccount(String tenantId, String account);
+
+ /**
+ * 给用户设置角色
+ *
+ * @param userIds
+ * @param roleIds
+ * @return
+ */
+ boolean grant(String userIds, String roleIds);
+
+ /**
+ * 初始化密码
+ *
+ * @param userIds
+ * @return
+ */
+ boolean resetPassword(String userIds);
+
+ /**
+ * 修改密码
+ *
+ * @param userId
+ * @param oldPassword
+ * @param newPassword
+ * @param newPassword1
+ * @return
+ */
+ boolean updatePassword(Long userId, String oldPassword, String newPassword, String newPassword1);
+
+ /**
+ * 删除用户
+ *
+ * @param userIds
+ * @return
+ */
+ boolean removeUser(String userIds);
+
+ /**
+ * 导入用户数据
+ *
+ * @param data
+ * @param isCovered
+ * @return
+ */
+ void importUser(List<UserExcel> data, Boolean isCovered);
+
+ /**
+ * 导出用户数据
+ *
+ * @param queryWrapper
+ * @return
+ */
+ List<UserExcel> exportUser(Wrapper<User> queryWrapper);
+
+ /**
+ * 注册用户
+ *
+ * @param user
+ * @param oauthId
+ * @return
+ */
+ boolean registerGuest(User user, Long oauthId);
+
+ /**
+ * 配置用户平台
+ *
+ * @param userId
+ * @param userType
+ * @param userExt
+ * @return
+ */
+ boolean updatePlatform(Long userId, Integer userType, String userExt);
+
+ /**
+ * 用户详细信息
+ *
+ * @param user
+ * @return
+ */
+ UserVO platformDetail(User user);
+}
diff --git a/blade-auth/src/main/java/org/springblade/auth/AuthApplication.java b/blade-auth/src/main/java/org/springblade/system/user/service/impl/UserDeptServiceImpl.java
similarity index 64%
copy from blade-auth/src/main/java/org/springblade/auth/AuthApplication.java
copy to blade-auth/src/main/java/org/springblade/system/user/service/impl/UserDeptServiceImpl.java
index 8c18654..3ab95db 100644
--- a/blade-auth/src/main/java/org/springblade/auth/AuthApplication.java
+++ b/blade-auth/src/main/java/org/springblade/system/user/service/impl/UserDeptServiceImpl.java
@@ -14,23 +14,21 @@
* this software without specific prior written permission.
* Author: Chill 庄骞 (smallchill@163.com)
*/
-package org.springblade.auth;
+package org.springblade.system.user.service.impl;
-import org.springblade.core.cloud.client.BladeCloudApplication;
-import org.springblade.core.launch.BladeApplication;
-import org.springblade.core.launch.constant.AppConstant;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springblade.system.user.entity.UserDept;
+import org.springblade.system.user.mapper.UserDeptMapper;
+import org.springblade.system.user.service.IUserDeptService;
+import org.springframework.stereotype.Service;
/**
- * 用户认证服务器
+ * 服务实现类
*
* @author Chill
*/
-@BladeCloudApplication
-public class AuthApplication {
-
- public static void main(String[] args) {
- BladeApplication.run(AppConstant.APPLICATION_AUTH_NAME, AuthApplication.class, args);
- }
+@Service
+public class UserDeptServiceImpl extends ServiceImpl<UserDeptMapper, UserDept> implements IUserDeptService {
}
diff --git a/blade-auth/src/main/java/org/springblade/auth/AuthApplication.java b/blade-auth/src/main/java/org/springblade/system/user/service/impl/UserOauthServiceImpl.java
similarity index 61%
copy from blade-auth/src/main/java/org/springblade/auth/AuthApplication.java
copy to blade-auth/src/main/java/org/springblade/system/user/service/impl/UserOauthServiceImpl.java
index 8c18654..59c9c84 100644
--- a/blade-auth/src/main/java/org/springblade/auth/AuthApplication.java
+++ b/blade-auth/src/main/java/org/springblade/system/user/service/impl/UserOauthServiceImpl.java
@@ -14,23 +14,23 @@
* this software without specific prior written permission.
* Author: Chill 庄骞 (smallchill@163.com)
*/
-package org.springblade.auth;
+package org.springblade.system.user.service.impl;
-import org.springblade.core.cloud.client.BladeCloudApplication;
-import org.springblade.core.launch.BladeApplication;
-import org.springblade.core.launch.constant.AppConstant;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import lombok.AllArgsConstructor;
+import org.springblade.system.user.entity.UserOauth;
+import org.springblade.system.user.mapper.UserOauthMapper;
+import org.springblade.system.user.service.IUserOauthService;
+import org.springframework.stereotype.Service;
/**
- * 用户认证服务器
+ * 服务实现类
*
* @author Chill
*/
-@BladeCloudApplication
-public class AuthApplication {
-
- public static void main(String[] args) {
- BladeApplication.run(AppConstant.APPLICATION_AUTH_NAME, AuthApplication.class, args);
- }
+@Service
+@AllArgsConstructor
+public class UserOauthServiceImpl extends ServiceImpl<UserOauthMapper, UserOauth> implements IUserOauthService {
}
diff --git a/blade-auth/src/main/java/org/springblade/system/user/service/impl/UserSearchServiceImpl.java b/blade-auth/src/main/java/org/springblade/system/user/service/impl/UserSearchServiceImpl.java
new file mode 100644
index 0000000..d934ce2
--- /dev/null
+++ b/blade-auth/src/main/java/org/springblade/system/user/service/impl/UserSearchServiceImpl.java
@@ -0,0 +1,65 @@
+/*
+ * 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.user.service.impl;
+
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import lombok.AllArgsConstructor;
+import org.springblade.core.mp.base.BaseServiceImpl;
+import org.springblade.system.user.entity.User;
+import org.springblade.system.user.mapper.UserMapper;
+import org.springblade.system.user.service.IUserSearchService;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+/**
+ * 用户查询服务实现类
+ *
+ * @author Chill
+ */
+@Service
+@AllArgsConstructor
+public class UserSearchServiceImpl extends BaseServiceImpl<UserMapper, User> implements IUserSearchService {
+
+ @Override
+ public List<User> listByUser(List<Long> userId) {
+ return this.list(Wrappers.<User>lambdaQuery().in(User::getId, userId));
+ }
+
+ @Override
+ public List<User> listByDept(List<Long> deptId) {
+ LambdaQueryWrapper<User> queryWrapper = Wrappers.lambdaQuery();
+ deptId.forEach(id -> queryWrapper.like(User::getDeptId, id).or());
+ return this.list(queryWrapper);
+ }
+
+ @Override
+ public List<User> listByPost(List<Long> postId) {
+ LambdaQueryWrapper<User> queryWrapper = Wrappers.lambdaQuery();
+ postId.forEach(id -> queryWrapper.like(User::getPostId, id).or());
+ return this.list(queryWrapper);
+ }
+
+ @Override
+ public List<User> listByRole(List<Long> roleId) {
+ LambdaQueryWrapper<User> queryWrapper = Wrappers.lambdaQuery();
+ roleId.forEach(id -> queryWrapper.like(User::getRoleId, id).or());
+ return this.list(queryWrapper);
+ }
+}
diff --git a/blade-auth/src/main/java/org/springblade/system/user/service/impl/UserServiceImpl.java b/blade-auth/src/main/java/org/springblade/system/user/service/impl/UserServiceImpl.java
new file mode 100644
index 0000000..4145b2f
--- /dev/null
+++ b/blade-auth/src/main/java/org/springblade/system/user/service/impl/UserServiceImpl.java
@@ -0,0 +1,434 @@
+/*
+ * 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.user.service.impl;
+
+
+import com.baomidou.mybatisplus.core.conditions.Wrapper;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import lombok.AllArgsConstructor;
+import org.springblade.common.constant.CommonConstant;
+import org.springblade.common.constant.TenantConstant;
+import org.springblade.core.mp.base.BaseServiceImpl;
+import org.springblade.core.mp.support.Condition;
+import org.springblade.core.mp.support.Query;
+import org.springblade.core.secure.utils.AuthUtil;
+import org.springblade.core.tenant.BladeTenantProperties;
+import org.springblade.core.tool.api.R;
+import org.springblade.core.tool.constant.BladeConstant;
+import org.springblade.core.tool.jackson.JsonUtil;
+import org.springblade.core.tool.support.Kv;
+import org.springblade.core.tool.utils.*;
+import org.springblade.system.cache.DictCache;
+import org.springblade.system.cache.ParamCache;
+import org.springblade.system.cache.SysCache;
+import org.springblade.system.entity.Tenant;
+import org.springblade.system.enums.DictEnum;
+import org.springblade.system.feign.ISysClient;
+import org.springblade.system.service.IRoleService;
+import org.springblade.system.service.ITenantService;
+import org.springblade.system.user.cache.UserCache;
+import org.springblade.system.user.entity.*;
+import org.springblade.system.user.enums.UserEnum;
+import org.springblade.system.user.excel.UserExcel;
+import org.springblade.system.user.mapper.UserMapper;
+import org.springblade.system.user.service.IUserDeptService;
+import org.springblade.system.user.service.IUserOauthService;
+import org.springblade.system.user.service.IUserService;
+import org.springblade.system.user.vo.UserVO;
+import org.springblade.system.user.wrapper.UserWrapper;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+import java.util.Objects;
+
+import static org.springblade.common.constant.CommonConstant.DEFAULT_PARAM_PASSWORD;
+
+/**
+ * 服务实现类
+ *
+ * @author Chill
+ */
+@Service
+@AllArgsConstructor
+public class UserServiceImpl extends BaseServiceImpl<UserMapper, User> implements IUserService {
+ private static final String GUEST_NAME = "guest";
+
+ private final IUserDeptService userDeptService;
+ private final IUserOauthService userOauthService;
+ private final IRoleService sysClient;
+ private final BladeTenantProperties tenantProperties;
+
+ @Override
+ @Transactional(rollbackFor = Exception.class)
+ public boolean submit(User user) {
+ if (StringUtil.isBlank(user.getTenantId())) {
+ user.setTenantId(BladeConstant.ADMIN_TENANT_ID);
+ }
+ 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()));
+ }
+ 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()));
+ }
+ return save(user) && submitUserDept(user);
+ }
+
+ @Override
+ @Transactional(rollbackFor = Exception.class)
+ public boolean updateUser(User user) {
+ String tenantId = user.getTenantId();
+ Long userCount = baseMapper.selectCount(
+ Wrappers.<User>query().lambda()
+ .eq(User::getTenantId, tenantId)
+ .eq(User::getAccount, user.getAccount())
+ .notIn(User::getId, user.getId())
+ );
+ if (userCount > 0L) {
+// throw new ServiceException(StringUtil.format("当前用户 [{}] 已存在!", user.getAccount()));
+ }
+ return updateUserInfo(user) && submitUserDept(user);
+ }
+
+ @Override
+ public boolean updateUserInfo(User user) {
+ user.setPassword(null);
+ return updateById(user);
+ }
+
+ private boolean submitUserDept(User user) {
+ List<Long> deptIdList = Func.toLongList(user.getDeptId());
+ List<UserDept> userDeptList = new ArrayList<>();
+ deptIdList.forEach(deptId -> {
+ UserDept userDept = new UserDept();
+ userDept.setUserId(user.getId());
+ userDept.setDeptId(deptId);
+ userDeptList.add(userDept);
+ });
+ userDeptService.remove(Wrappers.<UserDept>update().lambda().eq(UserDept::getUserId, user.getId()));
+ return userDeptService.saveBatch(userDeptList);
+ }
+
+ @Override
+ public IPage<User> selectUserPage(IPage<User> page, User user, Long deptId, String tenantId) {
+ List<Long> deptIdList = SysCache.getDeptChildIds(deptId);
+ return page.setRecords(baseMapper.selectUserPage(page, user, deptIdList, tenantId));
+ }
+
+ @Override
+ public IPage<UserVO> selectUserSearch(UserVO user, Query query) {
+ LambdaQueryWrapper<User> queryWrapper = Wrappers.<User>query().lambda();
+ String tenantId = AuthUtil.getTenantId();
+ if (StringUtil.isNotBlank(tenantId)) {
+ queryWrapper.eq(User::getTenantId, tenantId);
+ }
+ if (StringUtil.isNotBlank(user.getName())) {
+ queryWrapper.like(User::getName, user.getName());
+ }
+ if (StringUtil.isNotBlank(user.getDeptName())) {
+ String deptIds = SysCache.getDeptIdsByFuzzy(AuthUtil.getTenantId(), user.getDeptName());
+ if (StringUtil.isNotBlank(deptIds)) {
+ queryWrapper.and(wrapper -> {
+ List<String> ids = Func.toStrList(deptIds);
+ ids.forEach(id -> wrapper.like(User::getDeptId, id).or());
+ });
+ }
+ }
+ if (StringUtil.isNotBlank(user.getPostName())) {
+ String postIds = SysCache.getPostIdsByFuzzy(AuthUtil.getTenantId(), user.getPostName());
+ if (StringUtil.isNotBlank(postIds)) {
+ queryWrapper.and(wrapper -> {
+ List<String> ids = Func.toStrList(postIds);
+ ids.forEach(id -> wrapper.like(User::getPostId, id).or());
+ });
+ }
+ }
+ IPage<User> pages = this.page(Condition.getPage(query), queryWrapper);
+ return UserWrapper.build().pageVO(pages);
+ }
+
+ @Override
+ public User userByAccount(String tenantId, String account) {
+ return baseMapper.selectOne(Wrappers.<User>query().lambda().eq(User::getTenantId, tenantId).eq(User::getAccount, account).eq(User::getIsDeleted, BladeConstant.DB_NOT_DELETED));
+ }
+
+ @Override
+ public UserInfo userInfo(Long userId) {
+ User user = baseMapper.selectById(userId);
+ return buildUserInfo(user);
+ }
+
+ @Override
+ public UserInfo userInfo(String tenantId, String account) {
+ User user = baseMapper.getUser(tenantId, account);
+ return buildUserInfo(user);
+ }
+
+ @Override
+ public UserInfo userInfo(String tenantId, String account, UserEnum userEnum) {
+ User user = baseMapper.getUser(tenantId, account);
+ return buildUserInfo(user, userEnum);
+ }
+
+ private UserInfo buildUserInfo(User user) {
+ return buildUserInfo(user, UserEnum.WEB);
+ }
+
+ private UserInfo buildUserInfo(User user, UserEnum userEnum) {
+ if (ObjectUtil.isEmpty(user)) {
+ return null;
+ }
+ UserInfo userInfo = new UserInfo();
+ userInfo.setUser(user);
+ if (Func.isNotEmpty(user)) {
+ List<String> result = sysClient.getRoleAliases(user.getRoleId());
+ if (result.size()>0) {
+ List<String> roleAlias = result;
+ userInfo.setRoles(roleAlias);
+ }
+ }
+ // 根据每个用户平台,建立对应的detail表,通过查询将结果集写入到detail字段
+ Kv detail = Kv.create().set("type", userEnum.getName());
+ if (userEnum == UserEnum.WEB) {
+ UserWeb userWeb = new UserWeb();
+ UserWeb query = userWeb.selectOne(Wrappers.<UserWeb>lambdaQuery().eq(UserWeb::getUserId, user.getId()));
+ if (ObjectUtil.isNotEmpty(query)) {
+ detail.set("ext", query.getUserExt());
+ }
+ } else if (userEnum == UserEnum.APP) {
+ UserApp userApp = new UserApp();
+ UserApp query = userApp.selectOne(Wrappers.<UserApp>lambdaQuery().eq(UserApp::getUserId, user.getId()));
+ if (ObjectUtil.isNotEmpty(query)) {
+ detail.set("ext", query.getUserExt());
+ }
+ } else {
+ UserOther userOther = new UserOther();
+ UserOther query = userOther.selectOne(Wrappers.<UserOther>lambdaQuery().eq(UserOther::getUserId, user.getId()));
+ if (ObjectUtil.isNotEmpty(query)) {
+ detail.set("ext", query.getUserExt());
+ }
+ }
+ userInfo.setDetail(detail);
+ return userInfo;
+ }
+
+ @Override
+ @Transactional(rollbackFor = Exception.class)
+ public UserInfo userInfo(UserOauth userOauth) {
+ UserOauth uo = userOauthService.getOne(Wrappers.<UserOauth>query().lambda().eq(UserOauth::getUuid, userOauth.getUuid()).eq(UserOauth::getSource, userOauth.getSource()));
+ UserInfo userInfo;
+ if (Func.isNotEmpty(uo) && Func.isNotEmpty(uo.getUserId())) {
+ userInfo = this.userInfo(uo.getUserId());
+ userInfo.setOauthId(Func.toStr(uo.getId()));
+ } else {
+ userInfo = new UserInfo();
+ if (Func.isEmpty(uo)) {
+ userOauthService.save(userOauth);
+ userInfo.setOauthId(Func.toStr(userOauth.getId()));
+ } else {
+ userInfo.setOauthId(Func.toStr(uo.getId()));
+ }
+ User user = new User();
+ user.setAccount(userOauth.getUsername());
+ user.setTenantId(userOauth.getTenantId());
+ userInfo.setUser(user);
+ userInfo.setRoles(Collections.singletonList(GUEST_NAME));
+ }
+ return userInfo;
+ }
+
+ @Override
+ public boolean grant(String userIds, String roleIds) {
+ User user = new User();
+ user.setRoleId(roleIds);
+ return this.update(user, Wrappers.<User>update().lambda().in(User::getId, Func.toLongList(userIds)));
+ }
+
+ @Override
+ public boolean resetPassword(String userIds) {
+ User user = new User();
+ user.setPassword(DigestUtil.encrypt(CommonConstant.DEFAULT_PASSWORD));
+ user.setUpdateTime(DateUtil.now());
+ return this.update(user, Wrappers.<User>update().lambda().in(User::getId, Func.toLongList(userIds)));
+ }
+
+ @Override
+ public boolean updatePassword(Long userId, String oldPassword, String newPassword, String newPassword1) {
+ User user = getById(userId);
+ if (!newPassword.equals(newPassword1)) {
+// throw new ServiceException("请输入正确的确认密码!");
+ }
+ if (!user.getPassword().equals(DigestUtil.hex(oldPassword))) {
+// throw new ServiceException("原密码不正确!");
+ }
+ return this.update(Wrappers.<User>update().lambda().set(User::getPassword, DigestUtil.hex(newPassword)).eq(User::getId, userId));
+ }
+
+ @Override
+ public boolean removeUser(String userIds) {
+ if (Func.contains(Func.toLongArray(userIds), AuthUtil.getUserId())) {
+// throw new ServiceException("不能删除本账号!");
+ }
+ return deleteLogic(Func.toLongList(userIds));
+ }
+
+ @Override
+ @Transactional(rollbackFor = Exception.class)
+ public void importUser(List<UserExcel> data, Boolean isCovered) {
+ data.forEach(userExcel -> {
+ User user = Objects.requireNonNull(BeanUtil.copy(userExcel, User.class));
+ // 设置用户平台
+ user.setUserType(Func.toInt(DictCache.getKey(DictEnum.USER_TYPE, userExcel.getUserTypeName()), 1));
+ // 设置部门ID
+ user.setDeptId(Func.toStrWithEmpty(SysCache.getDeptIds(userExcel.getTenantId(), userExcel.getDeptName()), StringPool.EMPTY));
+ // 设置岗位ID
+ user.setPostId(Func.toStrWithEmpty(SysCache.getPostIds(userExcel.getTenantId(), userExcel.getPostName()), StringPool.EMPTY));
+ // 设置角色ID
+ user.setRoleId(Func.toStrWithEmpty(SysCache.getRoleIds(userExcel.getTenantId(), userExcel.getRoleName()), StringPool.EMPTY));
+ // 设置租户ID
+ if (!AuthUtil.isAdministrator() || StringUtil.isBlank(user.getTenantId())) {
+ user.setTenantId(AuthUtil.getTenantId());
+ }
+ // 覆盖数据
+ if (isCovered) {
+ // 查询用户是否存在
+ User oldUser = UserCache.getUser(userExcel.getTenantId(), userExcel.getAccount());
+ if (oldUser != null && oldUser.getId() != null) {
+ user.setId(oldUser.getId());
+ this.updateUser(user);
+ return;
+ }
+ }
+ // 获取默认密码配置
+ String initPassword = ParamCache.getValue(DEFAULT_PARAM_PASSWORD);
+ user.setPassword(initPassword);
+ this.submit(user);
+ });
+ }
+
+ @Override
+ public List<UserExcel> exportUser(Wrapper<User> queryWrapper) {
+ List<UserExcel> userList = baseMapper.exportUser(queryWrapper);
+ userList.forEach(user -> {
+ user.setUserTypeName(DictCache.getValue(DictEnum.USER_TYPE, user.getUserType()));
+ user.setRoleName(StringUtil.join(SysCache.getRoleNames(user.getRoleId())));
+ user.setDeptName(StringUtil.join(SysCache.getDeptNames(user.getDeptId())));
+ user.setPostName(StringUtil.join(SysCache.getPostNames(user.getPostId())));
+ });
+ return userList;
+ }
+
+ @Override
+ @Transactional(rollbackFor = Exception.class)
+ public boolean registerGuest(User user, Long oauthId) {
+ Tenant tenant = SysCache.getTenant(user.getTenantId());
+ if (tenant == null || tenant.getId() == null) {
+// throw new ServiceException("租户信息错误!");
+ }
+ UserOauth userOauth = userOauthService.getById(oauthId);
+ if (userOauth == null || userOauth.getId() == null) {
+// throw new ServiceException("第三方登陆信息错误!");
+ }
+ user.setRealName(user.getName());
+ user.setAvatar(userOauth.getAvatar());
+ user.setRoleId(StringPool.MINUS_ONE);
+ user.setDeptId(StringPool.MINUS_ONE);
+ user.setPostId(StringPool.MINUS_ONE);
+ boolean userTemp = this.submit(user);
+ userOauth.setUserId(user.getId());
+ userOauth.setTenantId(user.getTenantId());
+ boolean oauthTemp = userOauthService.updateById(userOauth);
+ return (userTemp && oauthTemp);
+ }
+ @Override
+ public boolean updatePlatform(Long userId, Integer userType, String userExt) {
+ if (userType.equals(UserEnum.WEB.getCategory())) {
+ UserWeb userWeb = new UserWeb();
+ UserWeb query = userWeb.selectOne(Wrappers.<UserWeb>lambdaQuery().eq(UserWeb::getUserId, userId));
+ if (ObjectUtil.isNotEmpty(query)) {
+ userWeb.setId(query.getId());
+ }
+ userWeb.setUserId(userId);
+ userWeb.setUserExt(userExt);
+ return userWeb.insertOrUpdate();
+ } else if (userType.equals(UserEnum.APP.getCategory())) {
+ UserApp userApp = new UserApp();
+ UserApp query = userApp.selectOne(Wrappers.<UserApp>lambdaQuery().eq(UserApp::getUserId, userId));
+ if (ObjectUtil.isNotEmpty(query)) {
+ userApp.setId(query.getId());
+ }
+ userApp.setUserId(userId);
+ userApp.setUserExt(userExt);
+ return userApp.insertOrUpdate();
+ } else {
+ UserOther userOther = new UserOther();
+ UserOther query = userOther.selectOne(Wrappers.<UserOther>lambdaQuery().eq(UserOther::getUserId, userId));
+ if (ObjectUtil.isNotEmpty(query)) {
+ userOther.setId(query.getId());
+ }
+ userOther.setUserId(userId);
+ userOther.setUserExt(userExt);
+ return userOther.insertOrUpdate();
+ }
+ }
+
+ @Override
+ public UserVO platformDetail(User user) {
+ User detail = baseMapper.selectOne(Condition.getQueryWrapper(user));
+ UserVO userVO = UserWrapper.build().entityVO(detail);
+ if (userVO.getUserType().equals(UserEnum.WEB.getCategory())) {
+ UserWeb userWeb = new UserWeb();
+ UserWeb query = userWeb.selectOne(Wrappers.<UserWeb>lambdaQuery().eq(UserWeb::getUserId, user.getId()));
+ if (ObjectUtil.isNotEmpty(query)) {
+ userVO.setUserExt(query.getUserExt());
+ }
+ } else if (userVO.getUserType().equals(UserEnum.APP.getCategory())) {
+ UserApp userApp = new UserApp();
+ UserApp query = userApp.selectOne(Wrappers.<UserApp>lambdaQuery().eq(UserApp::getUserId, user.getId()));
+ if (ObjectUtil.isNotEmpty(query)) {
+ userVO.setUserExt(query.getUserExt());
+ }
+ } else {
+ UserOther userOther = new UserOther();
+ UserOther query = userOther.selectOne(Wrappers.<UserOther>lambdaQuery().eq(UserOther::getUserId, user.getId()));
+ if (ObjectUtil.isNotEmpty(query)) {
+ userVO.setUserExt(query.getUserExt());
+ }
+ }
+ return userVO;
+ }
+
+}
diff --git a/blade-auth/src/main/java/org/springblade/system/user/vo/UserVO.java b/blade-auth/src/main/java/org/springblade/system/user/vo/UserVO.java
new file mode 100644
index 0000000..5a11799
--- /dev/null
+++ b/blade-auth/src/main/java/org/springblade/system/user/vo/UserVO.java
@@ -0,0 +1,84 @@
+/*
+ * 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.user.vo;
+
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
+import io.swagger.annotations.ApiModel;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import org.springblade.system.user.entity.User;
+
+/**
+ * 视图实体类
+ *
+ * @author Chill
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ApiModel(value = "UserVO对象", description = "UserVO对象")
+public class UserVO extends User {
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * 主键ID
+ */
+ @JsonSerialize(using = ToStringSerializer.class)
+ private Long id;
+
+ /**
+ * 密码
+ */
+ @JsonIgnore
+ private String password;
+
+ /**
+ * 租户名
+ */
+ private String tenantName;
+
+ /**
+ * 用户平台名
+ */
+ private String userTypeName;
+
+ /**
+ * 角色名
+ */
+ private String roleName;
+
+ /**
+ * 部门名
+ */
+ private String deptName;
+
+ /**
+ * 岗位名
+ */
+ private String postName;
+
+ /**
+ * 性别
+ */
+ private String sexName;
+
+ /**
+ * 拓展信息
+ */
+ private String userExt;
+}
diff --git a/blade-auth/src/main/java/org/springblade/system/user/wrapper/UserWrapper.java b/blade-auth/src/main/java/org/springblade/system/user/wrapper/UserWrapper.java
new file mode 100644
index 0000000..e84aff4
--- /dev/null
+++ b/blade-auth/src/main/java/org/springblade/system/user/wrapper/UserWrapper.java
@@ -0,0 +1,59 @@
+/*
+ * 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.user.wrapper;
+
+import org.springblade.core.mp.support.BaseEntityWrapper;
+import org.springblade.core.tool.utils.BeanUtil;
+import org.springblade.core.tool.utils.Func;
+import org.springblade.system.cache.DictCache;
+import org.springblade.system.cache.SysCache;
+import org.springblade.system.entity.Tenant;
+import org.springblade.system.enums.DictEnum;
+import org.springblade.system.user.entity.User;
+import org.springblade.system.user.vo.UserVO;
+
+import java.util.List;
+import java.util.Objects;
+
+/**
+ * 包装类,返回视图层所需的字段
+ *
+ * @author Chill
+ */
+public class UserWrapper extends BaseEntityWrapper<User, UserVO> {
+
+ public static UserWrapper build() {
+ return new UserWrapper();
+ }
+
+ @Override
+ public UserVO entityVO(User user) {
+ UserVO userVO = Objects.requireNonNull(BeanUtil.copy(user, UserVO.class));
+ Tenant tenant = SysCache.getTenant(user.getTenantId());
+ List<String> roleName = SysCache.getRoleNames(user.getRoleId());
+ List<String> deptName = SysCache.getDeptNames(user.getDeptId());
+ List<String> postName = SysCache.getPostNames(user.getPostId());
+ userVO.setTenantName(tenant.getTenantName());
+ userVO.setRoleName(Func.join(roleName));
+ userVO.setDeptName(Func.join(deptName));
+ userVO.setPostName(Func.join(postName));
+ userVO.setSexName(DictCache.getValue(DictEnum.SEX, user.getSex()));
+ userVO.setUserTypeName(DictCache.getValue(DictEnum.USER_TYPE, user.getUserType()));
+ return userVO;
+ }
+
+}
diff --git a/blade-auth/src/main/java/org/springblade/auth/AuthApplication.java b/blade-auth/src/main/java/org/springblade/system/vo/ApiScopeVO.java
similarity index 64%
copy from blade-auth/src/main/java/org/springblade/auth/AuthApplication.java
copy to blade-auth/src/main/java/org/springblade/system/vo/ApiScopeVO.java
index 8c18654..c4ed3c1 100644
--- a/blade-auth/src/main/java/org/springblade/auth/AuthApplication.java
+++ b/blade-auth/src/main/java/org/springblade/system/vo/ApiScopeVO.java
@@ -14,23 +14,26 @@
* this software without specific prior written permission.
* Author: Chill 庄骞 (smallchill@163.com)
*/
-package org.springblade.auth;
+package org.springblade.system.vo;
-
-import org.springblade.core.cloud.client.BladeCloudApplication;
-import org.springblade.core.launch.BladeApplication;
-import org.springblade.core.launch.constant.AppConstant;
+import io.swagger.annotations.ApiModel;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import org.springblade.system.entity.ApiScope;
/**
- * 用户认证服务器
+ * 视图实体类
*
* @author Chill
*/
-@BladeCloudApplication
-public class AuthApplication {
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ApiModel(value = "ApiScopeVO对象", description = "ApiScopeVO对象")
+public class ApiScopeVO extends ApiScope {
+ private static final long serialVersionUID = 1L;
- public static void main(String[] args) {
- BladeApplication.run(AppConstant.APPLICATION_AUTH_NAME, AuthApplication.class, args);
- }
-
+ /**
+ * 规则类型名
+ */
+ private String scopeTypeName;
}
diff --git a/blade-auth/src/main/java/org/springblade/auth/AuthApplication.java b/blade-auth/src/main/java/org/springblade/system/vo/CheckedTreeVO.java
similarity index 67%
copy from blade-auth/src/main/java/org/springblade/auth/AuthApplication.java
copy to blade-auth/src/main/java/org/springblade/system/vo/CheckedTreeVO.java
index 8c18654..f9f199c 100644
--- a/blade-auth/src/main/java/org/springblade/auth/AuthApplication.java
+++ b/blade-auth/src/main/java/org/springblade/system/vo/CheckedTreeVO.java
@@ -14,23 +14,24 @@
* this software without specific prior written permission.
* Author: Chill 庄骞 (smallchill@163.com)
*/
-package org.springblade.auth;
+package org.springblade.system.vo;
+import lombok.Data;
-import org.springblade.core.cloud.client.BladeCloudApplication;
-import org.springblade.core.launch.BladeApplication;
-import org.springblade.core.launch.constant.AppConstant;
+import java.util.List;
/**
- * 用户认证服务器
+ * CheckedTreeVO
*
* @author Chill
*/
-@BladeCloudApplication
-public class AuthApplication {
+@Data
+public class CheckedTreeVO {
- public static void main(String[] args) {
- BladeApplication.run(AppConstant.APPLICATION_AUTH_NAME, AuthApplication.class, args);
- }
+ private List<String> menu;
+
+ private List<String> dataScope;
+
+ private List<String> apiScope;
}
diff --git a/blade-auth/src/main/java/org/springblade/auth/AuthApplication.java b/blade-auth/src/main/java/org/springblade/system/vo/DataScopeVO.java
similarity index 64%
copy from blade-auth/src/main/java/org/springblade/auth/AuthApplication.java
copy to blade-auth/src/main/java/org/springblade/system/vo/DataScopeVO.java
index 8c18654..6b3bf24 100644
--- a/blade-auth/src/main/java/org/springblade/auth/AuthApplication.java
+++ b/blade-auth/src/main/java/org/springblade/system/vo/DataScopeVO.java
@@ -14,23 +14,26 @@
* this software without specific prior written permission.
* Author: Chill 庄骞 (smallchill@163.com)
*/
-package org.springblade.auth;
+package org.springblade.system.vo;
-
-import org.springblade.core.cloud.client.BladeCloudApplication;
-import org.springblade.core.launch.BladeApplication;
-import org.springblade.core.launch.constant.AppConstant;
+import io.swagger.annotations.ApiModel;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import org.springblade.system.entity.DataScope;
/**
- * 用户认证服务器
+ * 视图实体类
*
* @author Chill
*/
-@BladeCloudApplication
-public class AuthApplication {
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ApiModel(value = "DataScopeVO对象", description = "DataScopeVO对象")
+public class DataScopeVO extends DataScope {
+ private static final long serialVersionUID = 1L;
- public static void main(String[] args) {
- BladeApplication.run(AppConstant.APPLICATION_AUTH_NAME, AuthApplication.class, args);
- }
-
+ /**
+ * 规则类型名
+ */
+ private String scopeTypeName;
}
diff --git a/blade-auth/src/main/java/org/springblade/system/vo/DeptVO.java b/blade-auth/src/main/java/org/springblade/system/vo/DeptVO.java
new file mode 100644
index 0000000..04f5a5e
--- /dev/null
+++ b/blade-auth/src/main/java/org/springblade/system/vo/DeptVO.java
@@ -0,0 +1,84 @@
+/*
+ * 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 com.fasterxml.jackson.annotation.JsonInclude;
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
+import io.swagger.annotations.ApiModel;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import org.springblade.core.tool.node.INode;
+import org.springblade.system.entity.Dept;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * 视图实体类
+ *
+ * @author Chill
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ApiModel(value = "DeptVO对象", description = "DeptVO对象")
+public class DeptVO extends Dept implements INode<DeptVO> {
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * 主键ID
+ */
+ @JsonSerialize(using = ToStringSerializer.class)
+ private Long id;
+
+ /**
+ * 父节点ID
+ */
+ @JsonSerialize(using = ToStringSerializer.class)
+ private Long parentId;
+
+ /**
+ * 子孙节点
+ */
+ @JsonInclude(JsonInclude.Include.NON_EMPTY)
+ private List<DeptVO> children;
+
+ /**
+ * 是否有子孙节点
+ */
+ @JsonInclude(JsonInclude.Include.NON_EMPTY)
+ private Boolean hasChildren;
+
+ @Override
+ public List<DeptVO> getChildren() {
+ if (this.children == null) {
+ this.children = new ArrayList<>();
+ }
+ return this.children;
+ }
+
+ /**
+ * 上级机构
+ */
+ private String parentName;
+
+ /**
+ * 机构类型名称
+ */
+ private String deptCategoryName;
+
+}
diff --git a/blade-auth/src/main/java/org/springblade/system/vo/DictBizVO.java b/blade-auth/src/main/java/org/springblade/system/vo/DictBizVO.java
new file mode 100644
index 0000000..177bb24
--- /dev/null
+++ b/blade-auth/src/main/java/org/springblade/system/vo/DictBizVO.java
@@ -0,0 +1,71 @@
+/*
+ * 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 com.fasterxml.jackson.annotation.JsonInclude;
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
+import io.swagger.annotations.ApiModel;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import org.springblade.core.tool.node.INode;
+import org.springblade.system.entity.DictBiz;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * 视图实体类
+ *
+ * @author Chill
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ApiModel(value = "DictBizVO对象", description = "DictBizVO对象")
+public class DictBizVO extends DictBiz implements INode<DictBizVO> {
+ private static final long serialVersionUID = 1L;
+ /**
+ * 主键ID
+ */
+ @JsonSerialize(using = ToStringSerializer.class)
+ private Long id;
+
+ /**
+ * 父节点ID
+ */
+ @JsonSerialize(using = ToStringSerializer.class)
+ private Long parentId;
+
+ /**
+ * 子孙节点
+ */
+ @JsonInclude(JsonInclude.Include.NON_EMPTY)
+ private List<DictBizVO> children;
+
+ @Override
+ public List<DictBizVO> getChildren() {
+ if (this.children == null) {
+ this.children = new ArrayList<>();
+ }
+ return this.children;
+ }
+
+ /**
+ * 上级字典
+ */
+ private String parentName;
+}
diff --git a/blade-auth/src/main/java/org/springblade/system/vo/DictVO.java b/blade-auth/src/main/java/org/springblade/system/vo/DictVO.java
new file mode 100644
index 0000000..cebf74c
--- /dev/null
+++ b/blade-auth/src/main/java/org/springblade/system/vo/DictVO.java
@@ -0,0 +1,71 @@
+/*
+ * 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 com.fasterxml.jackson.annotation.JsonInclude;
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
+import io.swagger.annotations.ApiModel;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import org.springblade.core.tool.node.INode;
+import org.springblade.system.entity.Dict;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * 视图实体类
+ *
+ * @author Chill
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ApiModel(value = "DictVO对象", description = "DictVO对象")
+public class DictVO extends Dict implements INode<DictVO> {
+ private static final long serialVersionUID = 1L;
+ /**
+ * 主键ID
+ */
+ @JsonSerialize(using = ToStringSerializer.class)
+ private Long id;
+
+ /**
+ * 父节点ID
+ */
+ @JsonSerialize(using = ToStringSerializer.class)
+ private Long parentId;
+
+ /**
+ * 子孙节点
+ */
+ @JsonInclude(JsonInclude.Include.NON_EMPTY)
+ private List<DictVO> children;
+
+ @Override
+ public List<DictVO> getChildren() {
+ if (this.children == null) {
+ this.children = new ArrayList<>();
+ }
+ return this.children;
+ }
+
+ /**
+ * 上级字典
+ */
+ private String parentName;
+}
diff --git a/blade-auth/src/main/java/org/springblade/auth/AuthApplication.java b/blade-auth/src/main/java/org/springblade/system/vo/GrantTreeVO.java
similarity index 67%
copy from blade-auth/src/main/java/org/springblade/auth/AuthApplication.java
copy to blade-auth/src/main/java/org/springblade/system/vo/GrantTreeVO.java
index 8c18654..d36c98e 100644
--- a/blade-auth/src/main/java/org/springblade/auth/AuthApplication.java
+++ b/blade-auth/src/main/java/org/springblade/system/vo/GrantTreeVO.java
@@ -14,23 +14,27 @@
* this software without specific prior written permission.
* Author: Chill 庄骞 (smallchill@163.com)
*/
-package org.springblade.auth;
+package org.springblade.system.vo;
+import lombok.Data;
+import org.springblade.core.tool.node.TreeNode;
-import org.springblade.core.cloud.client.BladeCloudApplication;
-import org.springblade.core.launch.BladeApplication;
-import org.springblade.core.launch.constant.AppConstant;
+import java.io.Serializable;
+import java.util.List;
/**
- * 用户认证服务器
+ * GrantTreeVO
*
* @author Chill
*/
-@BladeCloudApplication
-public class AuthApplication {
+@Data
+public class GrantTreeVO implements Serializable {
+ private static final long serialVersionUID = 1L;
- public static void main(String[] args) {
- BladeApplication.run(AppConstant.APPLICATION_AUTH_NAME, AuthApplication.class, args);
- }
+ private List<TreeNode> menu;
+
+ private List<TreeNode> dataScope;
+
+ private List<TreeNode> apiScope;
}
diff --git a/blade-auth/src/main/java/org/springblade/system/vo/GrantVO.java b/blade-auth/src/main/java/org/springblade/system/vo/GrantVO.java
new file mode 100644
index 0000000..4627b2d
--- /dev/null
+++ b/blade-auth/src/main/java/org/springblade/system/vo/GrantVO.java
@@ -0,0 +1,49 @@
+/*
+ * 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.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * GrantVO
+ *
+ * @author Chill
+ */
+@Data
+public class GrantVO implements Serializable {
+ private static final long serialVersionUID = 1L;
+
+ @ApiModelProperty(value = "roleIds集合")
+ private List<Long> roleIds;
+
+ @ApiModelProperty(value = "menuIds集合")
+ private List<Long> menuIds;
+
+ @ApiModelProperty(value = "topMenuIds集合")
+ private List<Long> topMenuIds;
+
+ @ApiModelProperty(value = "dataScopeIds集合")
+ private List<Long> dataScopeIds;
+
+ @ApiModelProperty(value = "apiScopeIds集合")
+ private List<Long> apiScopeIds;
+
+}
diff --git a/blade-auth/src/main/java/org/springblade/system/vo/MenuVO.java b/blade-auth/src/main/java/org/springblade/system/vo/MenuVO.java
new file mode 100644
index 0000000..6a1f717
--- /dev/null
+++ b/blade-auth/src/main/java/org/springblade/system/vo/MenuVO.java
@@ -0,0 +1,93 @@
+/*
+ * 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 com.fasterxml.jackson.annotation.JsonInclude;
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
+import io.swagger.annotations.ApiModel;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import org.springblade.core.tool.node.INode;
+import org.springblade.system.entity.Menu;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * 视图实体类
+ *
+ * @author Chill
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ApiModel(value = "MenuVO对象", description = "MenuVO对象")
+public class MenuVO extends Menu implements INode<MenuVO> {
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * 主键ID
+ */
+ @JsonSerialize(using = ToStringSerializer.class)
+ private Long id;
+
+ /**
+ * 父节点ID
+ */
+ @JsonSerialize(using = ToStringSerializer.class)
+ private Long parentId;
+
+ /**
+ * 子孙节点
+ */
+ @JsonInclude(JsonInclude.Include.NON_EMPTY)
+ private List<MenuVO> children;
+
+ /**
+ * 是否有子孙节点
+ */
+ @JsonInclude(JsonInclude.Include.NON_EMPTY)
+ private Boolean hasChildren;
+
+ @Override
+ public List<MenuVO> getChildren() {
+ if (this.children == null) {
+ this.children = new ArrayList<>();
+ }
+ return this.children;
+ }
+
+ /**
+ * 上级菜单
+ */
+ private String parentName;
+
+ /**
+ * 菜单类型
+ */
+ private String categoryName;
+
+ /**
+ * 按钮功能
+ */
+ private String actionName;
+
+ /**
+ * 是否新窗口打开
+ */
+ private String isOpenName;
+}
diff --git a/blade-auth/src/main/java/org/springblade/auth/AuthApplication.java b/blade-auth/src/main/java/org/springblade/system/vo/ParamVO.java
similarity index 67%
copy from blade-auth/src/main/java/org/springblade/auth/AuthApplication.java
copy to blade-auth/src/main/java/org/springblade/system/vo/ParamVO.java
index 8c18654..0e8ff1a 100644
--- a/blade-auth/src/main/java/org/springblade/auth/AuthApplication.java
+++ b/blade-auth/src/main/java/org/springblade/system/vo/ParamVO.java
@@ -14,23 +14,22 @@
* this software without specific prior written permission.
* Author: Chill 庄骞 (smallchill@163.com)
*/
-package org.springblade.auth;
+package org.springblade.system.vo;
-
-import org.springblade.core.cloud.client.BladeCloudApplication;
-import org.springblade.core.launch.BladeApplication;
-import org.springblade.core.launch.constant.AppConstant;
+import io.swagger.annotations.ApiModel;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import org.springblade.system.entity.Param;
/**
- * 用户认证服务器
+ * 视图实体类
*
* @author Chill
*/
-@BladeCloudApplication
-public class AuthApplication {
-
- public static void main(String[] args) {
- BladeApplication.run(AppConstant.APPLICATION_AUTH_NAME, AuthApplication.class, args);
- }
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ApiModel(value = "ParamVO对象", description = "ParamVO对象")
+public class ParamVO extends Param {
+ private static final long serialVersionUID = 1L;
}
diff --git a/blade-auth/src/main/java/org/springblade/auth/AuthApplication.java b/blade-auth/src/main/java/org/springblade/system/vo/PostVO.java
similarity index 65%
copy from blade-auth/src/main/java/org/springblade/auth/AuthApplication.java
copy to blade-auth/src/main/java/org/springblade/system/vo/PostVO.java
index 8c18654..c39c335 100644
--- a/blade-auth/src/main/java/org/springblade/auth/AuthApplication.java
+++ b/blade-auth/src/main/java/org/springblade/system/vo/PostVO.java
@@ -14,23 +14,27 @@
* this software without specific prior written permission.
* Author: Chill 庄骞 (smallchill@163.com)
*/
-package org.springblade.auth;
+package org.springblade.system.vo;
-
-import org.springblade.core.cloud.client.BladeCloudApplication;
-import org.springblade.core.launch.BladeApplication;
-import org.springblade.core.launch.constant.AppConstant;
+import io.swagger.annotations.ApiModel;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import org.springblade.system.entity.Post;
/**
- * 用户认证服务器
+ * 岗位表视图实体类
*
* @author Chill
*/
-@BladeCloudApplication
-public class AuthApplication {
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ApiModel(value = "PostVO对象", description = "岗位表")
+public class PostVO extends Post {
+ private static final long serialVersionUID = 1L;
- public static void main(String[] args) {
- BladeApplication.run(AppConstant.APPLICATION_AUTH_NAME, AuthApplication.class, args);
- }
+ /**
+ * 岗位分类名
+ */
+ private String categoryName;
}
diff --git a/blade-auth/src/main/java/org/springblade/system/vo/RegionVO.java b/blade-auth/src/main/java/org/springblade/system/vo/RegionVO.java
new file mode 100644
index 0000000..af7047e
--- /dev/null
+++ b/blade-auth/src/main/java/org/springblade/system/vo/RegionVO.java
@@ -0,0 +1,89 @@
+/*
+ * 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 com.fasterxml.jackson.annotation.JsonInclude;
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
+import io.swagger.annotations.ApiModel;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import org.springblade.core.tool.node.INode;
+import org.springblade.core.tool.utils.Func;
+import org.springblade.system.entity.Region;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * 行政区划表视图实体类
+ *
+ * @author Chill
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ApiModel(value = "RegionVO对象", description = "行政区划表")
+public class RegionVO extends Region implements INode<RegionVO> {
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * 主键ID
+ */
+ @JsonSerialize(using = ToStringSerializer.class)
+ private Long id;
+
+ /**
+ * 父节点ID
+ */
+ @JsonSerialize(using = ToStringSerializer.class)
+ private Long parentId;
+
+ /**
+ * 父节点名称
+ */
+ private String parentName;
+
+ /**
+ * 是否有子孙节点
+ */
+ @JsonInclude(JsonInclude.Include.NON_EMPTY)
+ private Boolean hasChildren;
+
+ /**
+ * 子孙节点
+ */
+ @JsonInclude(JsonInclude.Include.NON_EMPTY)
+ private List<RegionVO> children;
+
+ @Override
+ public Long getId() {
+ return Func.toLong(this.getCode());
+ }
+
+ @Override
+ public Long getParentId() {
+ return Func.toLong(this.getParentCode());
+ }
+
+ @Override
+ public List<RegionVO> getChildren() {
+ if (this.children == null) {
+ this.children = new ArrayList<>();
+ }
+ return this.children;
+ }
+}
diff --git a/blade-auth/src/main/java/org/springblade/auth/AuthApplication.java b/blade-auth/src/main/java/org/springblade/system/vo/RoleMenuVO.java
similarity index 67%
copy from blade-auth/src/main/java/org/springblade/auth/AuthApplication.java
copy to blade-auth/src/main/java/org/springblade/system/vo/RoleMenuVO.java
index 8c18654..1d17232 100644
--- a/blade-auth/src/main/java/org/springblade/auth/AuthApplication.java
+++ b/blade-auth/src/main/java/org/springblade/system/vo/RoleMenuVO.java
@@ -14,23 +14,22 @@
* this software without specific prior written permission.
* Author: Chill 庄骞 (smallchill@163.com)
*/
-package org.springblade.auth;
+package org.springblade.system.vo;
-
-import org.springblade.core.cloud.client.BladeCloudApplication;
-import org.springblade.core.launch.BladeApplication;
-import org.springblade.core.launch.constant.AppConstant;
+import io.swagger.annotations.ApiModel;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import org.springblade.system.entity.RoleMenu;
/**
- * 用户认证服务器
+ * 视图实体类
*
* @author Chill
*/
-@BladeCloudApplication
-public class AuthApplication {
-
- public static void main(String[] args) {
- BladeApplication.run(AppConstant.APPLICATION_AUTH_NAME, AuthApplication.class, args);
- }
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ApiModel(value = "RoleMenuVO对象", description = "RoleMenuVO对象")
+public class RoleMenuVO extends RoleMenu {
+ private static final long serialVersionUID = 1L;
}
diff --git a/blade-auth/src/main/java/org/springblade/system/vo/RoleVO.java b/blade-auth/src/main/java/org/springblade/system/vo/RoleVO.java
new file mode 100644
index 0000000..b8040db
--- /dev/null
+++ b/blade-auth/src/main/java/org/springblade/system/vo/RoleVO.java
@@ -0,0 +1,72 @@
+/*
+ * 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 com.fasterxml.jackson.annotation.JsonInclude;
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
+import io.swagger.annotations.ApiModel;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import org.springblade.core.tool.node.INode;
+import org.springblade.system.entity.Role;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * 视图实体类
+ *
+ * @author Chill
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ApiModel(value = "RoleVO对象", description = "RoleVO对象")
+public class RoleVO extends Role implements INode<RoleVO> {
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * 主键ID
+ */
+ @JsonSerialize(using = ToStringSerializer.class)
+ private Long id;
+
+ /**
+ * 父节点ID
+ */
+ @JsonSerialize(using = ToStringSerializer.class)
+ private Long parentId;
+
+ /**
+ * 子孙节点
+ */
+ @JsonInclude(JsonInclude.Include.NON_EMPTY)
+ private List<RoleVO> children;
+
+ @Override
+ public List<RoleVO> getChildren() {
+ if (this.children == null) {
+ this.children = new ArrayList<>();
+ }
+ return this.children;
+ }
+
+ /**
+ * 上级角色
+ */
+ private String parentName;
+}
diff --git a/blade-auth/src/main/java/org/springblade/system/wrapper/ApiScopeWrapper.java b/blade-auth/src/main/java/org/springblade/system/wrapper/ApiScopeWrapper.java
new file mode 100644
index 0000000..bad6600
--- /dev/null
+++ b/blade-auth/src/main/java/org/springblade/system/wrapper/ApiScopeWrapper.java
@@ -0,0 +1,48 @@
+/*
+ * 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.wrapper;
+
+import org.springblade.core.mp.support.BaseEntityWrapper;
+import org.springblade.core.tool.utils.BeanUtil;
+import org.springblade.system.cache.DictCache;
+import org.springblade.system.entity.ApiScope;
+import org.springblade.system.enums.DictEnum;
+import org.springblade.system.vo.ApiScopeVO;
+
+import java.util.Objects;
+
+
+/**
+ * 包装类,返回视图层所需的字段
+ *
+ * @author Chill
+ */
+public class ApiScopeWrapper extends BaseEntityWrapper<ApiScope, ApiScopeVO> {
+
+ public static ApiScopeWrapper build() {
+ return new ApiScopeWrapper();
+ }
+
+ @Override
+ public ApiScopeVO entityVO(ApiScope dataScope) {
+ ApiScopeVO apiScopeVO = Objects.requireNonNull(BeanUtil.copy(dataScope, ApiScopeVO.class));
+ String scopeTypeName = DictCache.getValue(DictEnum.API_SCOPE_TYPE, dataScope.getScopeType());
+ apiScopeVO.setScopeTypeName(scopeTypeName);
+ return apiScopeVO;
+ }
+
+}
diff --git a/blade-auth/src/main/java/org/springblade/system/wrapper/DataScopeWrapper.java b/blade-auth/src/main/java/org/springblade/system/wrapper/DataScopeWrapper.java
new file mode 100644
index 0000000..2ce546d
--- /dev/null
+++ b/blade-auth/src/main/java/org/springblade/system/wrapper/DataScopeWrapper.java
@@ -0,0 +1,48 @@
+/*
+ * 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.wrapper;
+
+import org.springblade.core.mp.support.BaseEntityWrapper;
+import org.springblade.core.tool.utils.BeanUtil;
+import org.springblade.system.cache.DictCache;
+import org.springblade.system.entity.DataScope;
+import org.springblade.system.enums.DictEnum;
+import org.springblade.system.vo.DataScopeVO;
+
+import java.util.Objects;
+
+
+/**
+ * 包装类,返回视图层所需的字段
+ *
+ * @author Chill
+ */
+public class DataScopeWrapper extends BaseEntityWrapper<DataScope, DataScopeVO> {
+
+ public static DataScopeWrapper build() {
+ return new DataScopeWrapper();
+ }
+
+ @Override
+ public DataScopeVO entityVO(DataScope dataScope) {
+ DataScopeVO dataScopeVO = Objects.requireNonNull(BeanUtil.copy(dataScope, DataScopeVO.class));
+ String scopeTypeName = DictCache.getValue(DictEnum.DATA_SCOPE_TYPE, dataScope.getScopeType());
+ dataScopeVO.setScopeTypeName(scopeTypeName);
+ return dataScopeVO;
+ }
+
+}
diff --git a/blade-auth/src/main/java/org/springblade/system/wrapper/DeptWrapper.java b/blade-auth/src/main/java/org/springblade/system/wrapper/DeptWrapper.java
new file mode 100644
index 0000000..1303f10
--- /dev/null
+++ b/blade-auth/src/main/java/org/springblade/system/wrapper/DeptWrapper.java
@@ -0,0 +1,78 @@
+/*
+ * 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.wrapper;
+
+import org.springblade.core.mp.support.BaseEntityWrapper;
+import org.springblade.core.tool.constant.BladeConstant;
+import org.springblade.core.tool.node.ForestNodeMerger;
+import org.springblade.core.tool.utils.BeanUtil;
+import org.springblade.core.tool.utils.Func;
+import org.springblade.system.cache.DictCache;
+import org.springblade.system.cache.SysCache;
+import org.springblade.system.entity.Dept;
+import org.springblade.system.enums.DictEnum;
+import org.springblade.system.vo.DeptVO;
+
+import java.util.List;
+import java.util.Objects;
+import java.util.stream.Collectors;
+
+/**
+ * 包装类,返回视图层所需的字段
+ *
+ * @author Chill
+ */
+public class DeptWrapper extends BaseEntityWrapper<Dept, DeptVO> {
+
+ public static DeptWrapper build() {
+ return new DeptWrapper();
+ }
+
+ @Override
+ public DeptVO entityVO(Dept dept) {
+ DeptVO deptVO = Objects.requireNonNull(BeanUtil.copy(dept, DeptVO.class));
+ if (Func.equals(dept.getParentId(), BladeConstant.TOP_PARENT_ID)) {
+ deptVO.setParentName(BladeConstant.TOP_PARENT_NAME);
+ } else {
+ Dept parent = SysCache.getDept(dept.getParentId());
+ deptVO.setParentName(parent.getDeptName());
+ }
+ String category = DictCache.getValue(DictEnum.ORG_CATEGORY, dept.getDeptCategory());
+ deptVO.setDeptCategoryName(category);
+ return deptVO;
+ }
+
+
+ public List<DeptVO> listNodeVO(List<Dept> list) {
+ List<DeptVO> collect = list.stream().map(dept -> {
+ DeptVO deptVO = BeanUtil.copy(dept, DeptVO.class);
+ String category = DictCache.getValue(DictEnum.ORG_CATEGORY, dept.getDeptCategory());
+ Objects.requireNonNull(deptVO).setDeptCategoryName(category);
+ return deptVO;
+ }).collect(Collectors.toList());
+ return ForestNodeMerger.merge(collect);
+ }
+
+ public List<DeptVO> listNodeLazyVO(List<DeptVO> list) {
+ List<DeptVO> collect = list.stream().peek(dept -> {
+ String category = DictCache.getValue(DictEnum.ORG_CATEGORY, dept.getDeptCategory());
+ Objects.requireNonNull(dept).setDeptCategoryName(category);
+ }).collect(Collectors.toList());
+ return ForestNodeMerger.merge(collect);
+ }
+
+}
diff --git a/blade-auth/src/main/java/org/springblade/system/wrapper/DictBizWrapper.java b/blade-auth/src/main/java/org/springblade/system/wrapper/DictBizWrapper.java
new file mode 100644
index 0000000..f921da0
--- /dev/null
+++ b/blade-auth/src/main/java/org/springblade/system/wrapper/DictBizWrapper.java
@@ -0,0 +1,61 @@
+/*
+ * 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.wrapper;
+
+import org.springblade.core.mp.support.BaseEntityWrapper;
+import org.springblade.core.tool.constant.BladeConstant;
+import org.springblade.core.tool.node.ForestNodeMerger;
+import org.springblade.core.tool.utils.BeanUtil;
+import org.springblade.core.tool.utils.Func;
+import org.springblade.system.cache.DictBizCache;
+import org.springblade.system.entity.DictBiz;
+import org.springblade.system.vo.DictBizVO;
+
+import java.util.List;
+import java.util.Objects;
+import java.util.stream.Collectors;
+
+
+/**
+ * 包装类,返回视图层所需的字段
+ *
+ * @author Chill
+ */
+public class DictBizWrapper extends BaseEntityWrapper<DictBiz, DictBizVO> {
+
+ public static DictBizWrapper build() {
+ return new DictBizWrapper();
+ }
+
+ @Override
+ public DictBizVO entityVO(DictBiz dict) {
+ DictBizVO dictVO = Objects.requireNonNull(BeanUtil.copy(dict, DictBizVO.class));
+ if (Func.equals(dict.getParentId(), BladeConstant.TOP_PARENT_ID)) {
+ dictVO.setParentName(BladeConstant.TOP_PARENT_NAME);
+ } else {
+ DictBiz parent = DictBizCache.getById(dict.getParentId());
+ dictVO.setParentName(parent.getDictValue());
+ }
+ return dictVO;
+ }
+
+ public List<DictBizVO> listNodeVO(List<DictBiz> list) {
+ List<DictBizVO> collect = list.stream().map(dict -> BeanUtil.copy(dict, DictBizVO.class)).collect(Collectors.toList());
+ return ForestNodeMerger.merge(collect);
+ }
+
+}
diff --git a/blade-auth/src/main/java/org/springblade/system/wrapper/DictWrapper.java b/blade-auth/src/main/java/org/springblade/system/wrapper/DictWrapper.java
new file mode 100644
index 0000000..c1c0514
--- /dev/null
+++ b/blade-auth/src/main/java/org/springblade/system/wrapper/DictWrapper.java
@@ -0,0 +1,60 @@
+/*
+ * 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.wrapper;
+
+import org.springblade.core.mp.support.BaseEntityWrapper;
+import org.springblade.core.tool.constant.BladeConstant;
+import org.springblade.core.tool.node.ForestNodeMerger;
+import org.springblade.core.tool.utils.BeanUtil;
+import org.springblade.core.tool.utils.Func;
+import org.springblade.system.cache.DictCache;
+import org.springblade.system.entity.Dict;
+import org.springblade.system.vo.DictVO;
+
+import java.util.List;
+import java.util.Objects;
+import java.util.stream.Collectors;
+
+/**
+ * 包装类,返回视图层所需的字段
+ *
+ * @author Chill
+ */
+public class DictWrapper extends BaseEntityWrapper<Dict, DictVO> {
+
+ public static DictWrapper build() {
+ return new DictWrapper();
+ }
+
+ @Override
+ public DictVO entityVO(Dict dict) {
+ DictVO dictVO = Objects.requireNonNull(BeanUtil.copy(dict, DictVO.class));
+ if (Func.equals(dict.getParentId(), BladeConstant.TOP_PARENT_ID)) {
+ dictVO.setParentName(BladeConstant.TOP_PARENT_NAME);
+ } else {
+ Dict parent = DictCache.getById(dict.getParentId());
+ dictVO.setParentName(parent.getDictValue());
+ }
+ return dictVO;
+ }
+
+ public List<DictVO> listNodeVO(List<Dict> list) {
+ List<DictVO> collect = list.stream().map(dict -> BeanUtil.copy(dict, DictVO.class)).collect(Collectors.toList());
+ return ForestNodeMerger.merge(collect);
+ }
+
+}
diff --git a/blade-auth/src/main/java/org/springblade/system/wrapper/MenuWrapper.java b/blade-auth/src/main/java/org/springblade/system/wrapper/MenuWrapper.java
new file mode 100644
index 0000000..4f3ea79
--- /dev/null
+++ b/blade-auth/src/main/java/org/springblade/system/wrapper/MenuWrapper.java
@@ -0,0 +1,72 @@
+/*
+ * 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.wrapper;
+
+import org.springblade.core.mp.support.BaseEntityWrapper;
+import org.springblade.core.tool.constant.BladeConstant;
+import org.springblade.core.tool.node.ForestNodeMerger;
+import org.springblade.core.tool.utils.BeanUtil;
+import org.springblade.core.tool.utils.Func;
+import org.springblade.system.cache.DictCache;
+import org.springblade.system.cache.SysCache;
+import org.springblade.system.entity.Menu;
+import org.springblade.system.enums.DictEnum;
+import org.springblade.system.vo.MenuVO;
+
+import java.util.List;
+import java.util.Objects;
+import java.util.stream.Collectors;
+
+/**
+ * 包装类,返回视图层所需的字段
+ *
+ * @author Chill
+ */
+public class MenuWrapper extends BaseEntityWrapper<Menu, MenuVO> {
+
+ public static MenuWrapper build() {
+ return new MenuWrapper();
+ }
+
+ @Override
+ public MenuVO entityVO(Menu menu) {
+ MenuVO menuVO = Objects.requireNonNull(BeanUtil.copy(menu, MenuVO.class));
+ if (Func.equals(menu.getParentId(), BladeConstant.TOP_PARENT_ID)) {
+ menuVO.setParentName(BladeConstant.TOP_PARENT_NAME);
+ } else {
+ Menu parent = SysCache.getMenu(menu.getParentId());
+ menuVO.setParentName(parent.getName());
+ }
+ String category = DictCache.getValue(DictEnum.MENU_CATEGORY, Func.toInt(menuVO.getCategory()));
+ String action = DictCache.getValue(DictEnum.BUTTON_FUNC, Func.toInt(menuVO.getAction()));
+ String open = DictCache.getValue(DictEnum.YES_NO, Func.toInt(menuVO.getIsOpen()));
+ menuVO.setCategoryName(category);
+ menuVO.setActionName(action);
+ menuVO.setIsOpenName(open);
+ return menuVO;
+ }
+
+ public List<MenuVO> listNodeVO(List<Menu> list) {
+ List<MenuVO> collect = list.stream().map(menu -> BeanUtil.copy(menu, MenuVO.class)).collect(Collectors.toList());
+ return ForestNodeMerger.merge(collect);
+ }
+
+ public List<MenuVO> listNodeLazyVO(List<MenuVO> list) {
+ return ForestNodeMerger.merge(list);
+ }
+
+}
diff --git a/blade-auth/src/main/java/org/springblade/system/wrapper/PostWrapper.java b/blade-auth/src/main/java/org/springblade/system/wrapper/PostWrapper.java
new file mode 100644
index 0000000..edeb175
--- /dev/null
+++ b/blade-auth/src/main/java/org/springblade/system/wrapper/PostWrapper.java
@@ -0,0 +1,47 @@
+/*
+ * 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.wrapper;
+
+import org.springblade.core.mp.support.BaseEntityWrapper;
+import org.springblade.core.tool.utils.BeanUtil;
+import org.springblade.system.cache.DictCache;
+import org.springblade.system.entity.Post;
+import org.springblade.system.enums.DictEnum;
+import org.springblade.system.vo.PostVO;
+
+import java.util.Objects;
+
+/**
+ * 岗位表包装类,返回视图层所需的字段
+ *
+ * @author Chill
+ */
+public class PostWrapper extends BaseEntityWrapper<Post, PostVO> {
+
+ public static PostWrapper build() {
+ return new PostWrapper();
+ }
+
+ @Override
+ public PostVO entityVO(Post post) {
+ PostVO postVO = Objects.requireNonNull(BeanUtil.copy(post, PostVO.class));
+ String categoryName = DictCache.getValue(DictEnum.POST_CATEGORY, post.getCategory());
+ postVO.setCategoryName(categoryName);
+ return postVO;
+ }
+
+}
diff --git a/blade-auth/src/main/java/org/springblade/system/wrapper/RegionWrapper.java b/blade-auth/src/main/java/org/springblade/system/wrapper/RegionWrapper.java
new file mode 100644
index 0000000..d78c82c
--- /dev/null
+++ b/blade-auth/src/main/java/org/springblade/system/wrapper/RegionWrapper.java
@@ -0,0 +1,52 @@
+/*
+ * 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.wrapper;
+
+import org.springblade.core.mp.support.BaseEntityWrapper;
+import org.springblade.core.tool.node.ForestNodeMerger;
+import org.springblade.core.tool.utils.BeanUtil;
+import org.springblade.system.cache.RegionCache;
+import org.springblade.system.entity.Region;
+import org.springblade.system.vo.RegionVO;
+
+import java.util.List;
+import java.util.Objects;
+
+/**
+ * 包装类,返回视图层所需的字段
+ *
+ * @author Chill
+ */
+public class RegionWrapper extends BaseEntityWrapper<Region, RegionVO> {
+
+ public static RegionWrapper build() {
+ return new RegionWrapper();
+ }
+
+ @Override
+ public RegionVO entityVO(Region region) {
+ RegionVO regionVO = Objects.requireNonNull(BeanUtil.copy(region, RegionVO.class));
+ Region parentRegion = RegionCache.getByCode(region.getParentCode());
+ regionVO.setParentName(parentRegion.getName());
+ return regionVO;
+ }
+
+ public List<RegionVO> listNodeLazyVO(List<RegionVO> list) {
+ return ForestNodeMerger.merge(list);
+ }
+
+}
diff --git a/blade-auth/src/main/java/org/springblade/system/wrapper/RoleWrapper.java b/blade-auth/src/main/java/org/springblade/system/wrapper/RoleWrapper.java
new file mode 100644
index 0000000..33050f0
--- /dev/null
+++ b/blade-auth/src/main/java/org/springblade/system/wrapper/RoleWrapper.java
@@ -0,0 +1,61 @@
+/*
+ * 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.wrapper;
+
+import org.springblade.core.mp.support.BaseEntityWrapper;
+import org.springblade.core.tool.constant.BladeConstant;
+import org.springblade.core.tool.node.ForestNodeMerger;
+import org.springblade.core.tool.utils.BeanUtil;
+import org.springblade.core.tool.utils.Func;
+import org.springblade.system.cache.SysCache;
+import org.springblade.system.entity.Role;
+import org.springblade.system.vo.RoleVO;
+
+import java.util.List;
+import java.util.Objects;
+import java.util.stream.Collectors;
+
+/**
+ * 包装类,返回视图层所需的字段
+ *
+ * @author Chill
+ */
+public class RoleWrapper extends BaseEntityWrapper<Role, RoleVO> {
+
+ public static RoleWrapper build() {
+ return new RoleWrapper();
+ }
+
+ @Override
+ public RoleVO entityVO(Role role) {
+ RoleVO roleVO = Objects.requireNonNull(BeanUtil.copy(role, RoleVO.class));
+ if (Func.equals(role.getParentId(), BladeConstant.TOP_PARENT_ID)) {
+ roleVO.setParentName(BladeConstant.TOP_PARENT_NAME);
+ } else {
+ Role parent = SysCache.getRole(role.getParentId());
+ roleVO.setParentName(parent.getRoleName());
+ }
+ return roleVO;
+ }
+
+
+ public List<RoleVO> listNodeVO(List<Role> list) {
+ List<RoleVO> collect = list.stream().map(this::entityVO).collect(Collectors.toList());
+ return ForestNodeMerger.merge(collect);
+ }
+
+}
--
Gitblit v1.9.3