数据权限,登录
parent
c01d68aec8
commit
76ed1f579c
|
|
@ -7,6 +7,7 @@ import com.fjrcloud.community.framework.common.enums.UserTypeEnum;
|
||||||
import com.fjrcloud.community.framework.common.pojo.CommonResult;
|
import com.fjrcloud.community.framework.common.pojo.CommonResult;
|
||||||
import com.fjrcloud.community.framework.security.config.SecurityProperties;
|
import com.fjrcloud.community.framework.security.config.SecurityProperties;
|
||||||
import com.fjrcloud.community.framework.security.core.util.SecurityFrameworkUtils;
|
import com.fjrcloud.community.framework.security.core.util.SecurityFrameworkUtils;
|
||||||
|
import com.fjrcloud.community.framework.tenant.core.aop.TenantIgnore;
|
||||||
import com.fjrcloud.community.module.system.controller.admin.auth.vo.*;
|
import com.fjrcloud.community.module.system.controller.admin.auth.vo.*;
|
||||||
import com.fjrcloud.community.module.system.convert.auth.AuthConvert;
|
import com.fjrcloud.community.module.system.convert.auth.AuthConvert;
|
||||||
import com.fjrcloud.community.module.system.dal.dataobject.permission.MenuDO;
|
import com.fjrcloud.community.module.system.dal.dataobject.permission.MenuDO;
|
||||||
|
|
@ -148,6 +149,14 @@ public class AuthController {
|
||||||
return success(true);
|
return success(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@PostMapping("/get-user-tenant-list")
|
||||||
|
@PermitAll
|
||||||
|
@TenantIgnore
|
||||||
|
@Operation(summary = "获取用户的租户列表(未登录状态)")
|
||||||
|
public CommonResult<AuthUserTenantListRespVO> getUserTenantList(@RequestBody @Valid AuthUserTenantListReqVO reqVO) {
|
||||||
|
return success(authService.getUserTenantList(reqVO));
|
||||||
|
}
|
||||||
|
|
||||||
// ========== 社交登录相关 ==========
|
// ========== 社交登录相关 ==========
|
||||||
|
|
||||||
@GetMapping("/social-auth-redirect")
|
@GetMapping("/social-auth-redirect")
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,22 @@
|
||||||
|
package com.fjrcloud.community.module.system.controller.admin.auth.vo;
|
||||||
|
|
||||||
|
import io.swagger.v3.oas.annotations.media.Schema;
|
||||||
|
import lombok.Data;
|
||||||
|
import org.hibernate.validator.constraints.Length;
|
||||||
|
|
||||||
|
import javax.validation.constraints.NotEmpty;
|
||||||
|
|
||||||
|
@Schema(description = "管理后台 - 获取用户租户列表 Request VO")
|
||||||
|
@Data
|
||||||
|
public class AuthUserTenantListReqVO {
|
||||||
|
|
||||||
|
@Schema(description = "账号", requiredMode = Schema.RequiredMode.REQUIRED, example = "admin")
|
||||||
|
@NotEmpty(message = "登录账号不能为空")
|
||||||
|
@Length(min = 4, max = 30, message = "账号长度为 4-30 位")
|
||||||
|
private String username;
|
||||||
|
|
||||||
|
@Schema(description = "密码", requiredMode = Schema.RequiredMode.REQUIRED, example = "admin123")
|
||||||
|
@NotEmpty(message = "密码不能为空")
|
||||||
|
@Length(min = 4, max = 16, message = "密码长度为 4-16 位")
|
||||||
|
private String password;
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,29 @@
|
||||||
|
package com.fjrcloud.community.module.system.controller.admin.auth.vo;
|
||||||
|
|
||||||
|
import io.swagger.v3.oas.annotations.media.Schema;
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.Builder;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.NoArgsConstructor;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
@Schema(description = "管理后台 - 用户租户列表 Response VO")
|
||||||
|
@Data
|
||||||
|
@Builder
|
||||||
|
@NoArgsConstructor
|
||||||
|
@AllArgsConstructor
|
||||||
|
public class AuthUserTenantListRespVO {
|
||||||
|
|
||||||
|
@Schema(description = "用户ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
|
||||||
|
private Long userId;
|
||||||
|
|
||||||
|
@Schema(description = "用户名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "admin")
|
||||||
|
private String username;
|
||||||
|
|
||||||
|
@Schema(description = "用户昵称", requiredMode = Schema.RequiredMode.REQUIRED, example = "管理员")
|
||||||
|
private String nickname;
|
||||||
|
|
||||||
|
@Schema(description = "租户列表", requiredMode = Schema.RequiredMode.REQUIRED)
|
||||||
|
private List<TenantInfoVO> tenants;
|
||||||
|
}
|
||||||
|
|
@ -11,6 +11,7 @@ import com.fjrcloud.community.framework.tenant.core.aop.TenantIgnore;
|
||||||
import com.fjrcloud.community.module.system.controller.admin.tenant.vo.tenant.TenantPageReqVO;
|
import com.fjrcloud.community.module.system.controller.admin.tenant.vo.tenant.TenantPageReqVO;
|
||||||
import com.fjrcloud.community.module.system.controller.admin.tenant.vo.tenant.TenantRespVO;
|
import com.fjrcloud.community.module.system.controller.admin.tenant.vo.tenant.TenantRespVO;
|
||||||
import com.fjrcloud.community.module.system.controller.admin.tenant.vo.tenant.TenantSaveReqVO;
|
import com.fjrcloud.community.module.system.controller.admin.tenant.vo.tenant.TenantSaveReqVO;
|
||||||
|
import com.fjrcloud.community.module.system.controller.admin.tenant.vo.tenant.TenantSimpleRespVO;
|
||||||
import com.fjrcloud.community.module.system.dal.dataobject.tenant.TenantDO;
|
import com.fjrcloud.community.module.system.dal.dataobject.tenant.TenantDO;
|
||||||
import com.fjrcloud.community.module.system.service.tenant.TenantService;
|
import com.fjrcloud.community.module.system.service.tenant.TenantService;
|
||||||
import io.swagger.v3.oas.annotations.Operation;
|
import io.swagger.v3.oas.annotations.Operation;
|
||||||
|
|
@ -29,6 +30,7 @@ import java.util.List;
|
||||||
import static com.fjrcloud.community.framework.apilog.core.enums.OperateTypeEnum.EXPORT;
|
import static com.fjrcloud.community.framework.apilog.core.enums.OperateTypeEnum.EXPORT;
|
||||||
import static com.fjrcloud.community.framework.common.pojo.CommonResult.success;
|
import static com.fjrcloud.community.framework.common.pojo.CommonResult.success;
|
||||||
import static com.fjrcloud.community.framework.common.util.collection.CollectionUtils.convertList;
|
import static com.fjrcloud.community.framework.common.util.collection.CollectionUtils.convertList;
|
||||||
|
import static com.fjrcloud.community.framework.security.core.util.SecurityFrameworkUtils.getLoginUserId;
|
||||||
|
|
||||||
@Tag(name = "管理后台 - 租户")
|
@Tag(name = "管理后台 - 租户")
|
||||||
@RestController
|
@RestController
|
||||||
|
|
@ -48,7 +50,7 @@ public class TenantController {
|
||||||
return success(tenant != null ? tenant.getId() : null);
|
return success(tenant != null ? tenant.getId() : null);
|
||||||
}
|
}
|
||||||
|
|
||||||
@GetMapping({ "simple-list" })
|
@GetMapping({ "simple-total-list" })
|
||||||
@PermitAll
|
@PermitAll
|
||||||
@TenantIgnore
|
@TenantIgnore
|
||||||
@Operation(summary = "获取租户精简信息列表", description = "只包含被开启的租户,用于【首页】功能的选择租户选项")
|
@Operation(summary = "获取租户精简信息列表", description = "只包含被开启的租户,用于【首页】功能的选择租户选项")
|
||||||
|
|
@ -133,4 +135,12 @@ public class TenantController {
|
||||||
BeanUtils.toBean(list, TenantRespVO.class));
|
BeanUtils.toBean(list, TenantRespVO.class));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@GetMapping("/simple-list")
|
||||||
|
@Operation(summary = "获取租户精简列表")
|
||||||
|
@PermitAll
|
||||||
|
@TenantIgnore
|
||||||
|
public CommonResult<List<TenantSimpleRespVO>> getSimpleTenantList() {
|
||||||
|
List<TenantSimpleRespVO> list = tenantService.getUserTenantList(getLoginUserId());
|
||||||
|
return success(list);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,21 @@
|
||||||
|
package com.fjrcloud.community.module.system.controller.admin.tenant.vo.tenant;
|
||||||
|
|
||||||
|
import io.swagger.v3.oas.annotations.media.Schema;
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.Builder;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.NoArgsConstructor;
|
||||||
|
|
||||||
|
@Schema(description = "管理后台 - 租户精简 Response VO")
|
||||||
|
@Data
|
||||||
|
@Builder
|
||||||
|
@NoArgsConstructor
|
||||||
|
@AllArgsConstructor
|
||||||
|
public class TenantSimpleRespVO {
|
||||||
|
|
||||||
|
@Schema(description = "租户编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
|
||||||
|
private Long tenantId;
|
||||||
|
|
||||||
|
@Schema(description = "租户名", requiredMode = Schema.RequiredMode.REQUIRED, example = "XX小区")
|
||||||
|
private String tenantName;
|
||||||
|
}
|
||||||
|
|
@ -13,7 +13,9 @@ import com.fjrcloud.community.module.system.dal.dataobject.dept.DeptDO;
|
||||||
import com.fjrcloud.community.module.system.dal.dataobject.user.AdminUserDO;
|
import com.fjrcloud.community.module.system.dal.dataobject.user.AdminUserDO;
|
||||||
import com.fjrcloud.community.module.system.enums.common.SexEnum;
|
import com.fjrcloud.community.module.system.enums.common.SexEnum;
|
||||||
import com.fjrcloud.community.module.system.service.dept.DeptService;
|
import com.fjrcloud.community.module.system.service.dept.DeptService;
|
||||||
|
import com.fjrcloud.community.module.system.service.tenant.TenantService;
|
||||||
import com.fjrcloud.community.module.system.service.user.AdminUserService;
|
import com.fjrcloud.community.module.system.service.user.AdminUserService;
|
||||||
|
import com.fjrcloud.community.module.system.service.usertenant.UserTenantRelService;
|
||||||
import io.swagger.v3.oas.annotations.Operation;
|
import io.swagger.v3.oas.annotations.Operation;
|
||||||
import io.swagger.v3.oas.annotations.Parameter;
|
import io.swagger.v3.oas.annotations.Parameter;
|
||||||
import io.swagger.v3.oas.annotations.Parameters;
|
import io.swagger.v3.oas.annotations.Parameters;
|
||||||
|
|
@ -28,6 +30,7 @@ import javax.servlet.http.HttpServletResponse;
|
||||||
import javax.validation.Valid;
|
import javax.validation.Valid;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
|
import java.util.Collections;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
|
|
@ -45,6 +48,10 @@ public class UserController {
|
||||||
private AdminUserService userService;
|
private AdminUserService userService;
|
||||||
@Resource
|
@Resource
|
||||||
private DeptService deptService;
|
private DeptService deptService;
|
||||||
|
@Resource
|
||||||
|
private TenantService tenantService;
|
||||||
|
@Resource
|
||||||
|
private UserTenantRelService userTenantRelService;
|
||||||
|
|
||||||
@PostMapping("/create")
|
@PostMapping("/create")
|
||||||
@Operation(summary = "新增用户")
|
@Operation(summary = "新增用户")
|
||||||
|
|
@ -100,23 +107,24 @@ public class UserController {
|
||||||
@Operation(summary = "获得用户分页列表")
|
@Operation(summary = "获得用户分页列表")
|
||||||
@PreAuthorize("@ss.hasPermission('system:user:query')")
|
@PreAuthorize("@ss.hasPermission('system:user:query')")
|
||||||
public CommonResult<PageResult<UserRespVO>> getUserPage(@Valid UserPageReqVO pageReqVO) {
|
public CommonResult<PageResult<UserRespVO>> getUserPage(@Valid UserPageReqVO pageReqVO) {
|
||||||
// 获得用户分页列表
|
|
||||||
PageResult<AdminUserDO> pageResult = userService.getUserPage(pageReqVO);
|
PageResult<AdminUserDO> pageResult = userService.getUserPage(pageReqVO);
|
||||||
if (CollUtil.isEmpty(pageResult.getList())) {
|
if (CollUtil.isEmpty(pageResult.getList())) {
|
||||||
return success(new PageResult<>(pageResult.getTotal()));
|
return success(new PageResult<>(pageResult.getTotal()));
|
||||||
}
|
}
|
||||||
// 拼接数据
|
|
||||||
Map<Long, DeptDO> deptMap = deptService.getDeptMap(
|
Map<Long, DeptDO> deptMap = deptService.getDeptMap(
|
||||||
convertList(pageResult.getList(), AdminUserDO::getDeptId));
|
convertList(pageResult.getList(), AdminUserDO::getDeptId));
|
||||||
return success(new PageResult<>(UserConvert.INSTANCE.convertList(pageResult.getList(), deptMap),
|
List<UserRespVO> list = UserConvert.INSTANCE.convertList(pageResult.getList(), deptMap);
|
||||||
pageResult.getTotal()));
|
|
||||||
|
userService.fillUserTenantNames(list);
|
||||||
|
|
||||||
|
return success(new PageResult<>(list, pageResult.getTotal()));
|
||||||
}
|
}
|
||||||
|
|
||||||
@GetMapping({"/list-all-simple", "/simple-list"})
|
@GetMapping({"/list-all-simple", "/simple-list"})
|
||||||
@Operation(summary = "获取用户精简信息列表", description = "只包含被开启的用户,主要用于前端的下拉选项")
|
@Operation(summary = "获取用户精简信息列表", description = "只包含被开启的用户,主要用于前端的下拉选项")
|
||||||
public CommonResult<List<UserSimpleRespVO>> getSimpleUserList() {
|
public CommonResult<List<UserSimpleRespVO>> getSimpleUserList() {
|
||||||
List<AdminUserDO> list = userService.getUserListByStatus(CommonStatusEnum.ENABLE.getStatus());
|
List<AdminUserDO> list = userService.getUserListByStatus(CommonStatusEnum.ENABLE.getStatus());
|
||||||
// 拼接数据
|
|
||||||
Map<Long, DeptDO> deptMap = deptService.getDeptMap(
|
Map<Long, DeptDO> deptMap = deptService.getDeptMap(
|
||||||
convertList(list, AdminUserDO::getDeptId));
|
convertList(list, AdminUserDO::getDeptId));
|
||||||
return success(UserConvert.INSTANCE.convertSimpleList(list, deptMap));
|
return success(UserConvert.INSTANCE.convertSimpleList(list, deptMap));
|
||||||
|
|
@ -131,9 +139,12 @@ public class UserController {
|
||||||
if (user == null) {
|
if (user == null) {
|
||||||
return success(null);
|
return success(null);
|
||||||
}
|
}
|
||||||
// 拼接数据
|
|
||||||
DeptDO dept = deptService.getDept(user.getDeptId());
|
DeptDO dept = deptService.getDept(user.getDeptId());
|
||||||
return success(UserConvert.INSTANCE.convert(user, dept));
|
UserRespVO userVO = UserConvert.INSTANCE.convert(user, dept);
|
||||||
|
|
||||||
|
userService.fillUserTenantNames(Collections.singletonList(userVO));
|
||||||
|
|
||||||
|
return success(userVO);
|
||||||
}
|
}
|
||||||
|
|
||||||
@GetMapping("/export-excel")
|
@GetMapping("/export-excel")
|
||||||
|
|
@ -144,24 +155,24 @@ public class UserController {
|
||||||
HttpServletResponse response) throws IOException {
|
HttpServletResponse response) throws IOException {
|
||||||
exportReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
|
exportReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
|
||||||
List<AdminUserDO> list = userService.getUserPage(exportReqVO).getList();
|
List<AdminUserDO> list = userService.getUserPage(exportReqVO).getList();
|
||||||
// 输出 Excel
|
|
||||||
Map<Long, DeptDO> deptMap = deptService.getDeptMap(
|
Map<Long, DeptDO> deptMap = deptService.getDeptMap(
|
||||||
convertList(list, AdminUserDO::getDeptId));
|
convertList(list, AdminUserDO::getDeptId));
|
||||||
ExcelUtils.write(response, "用户数据.xls", "数据", UserRespVO.class,
|
List<UserRespVO> userVOList = UserConvert.INSTANCE.convertList(list, deptMap);
|
||||||
UserConvert.INSTANCE.convertList(list, deptMap));
|
|
||||||
|
userService.fillUserTenantNames(userVOList);
|
||||||
|
|
||||||
|
ExcelUtils.write(response, "用户数据.xls", "数据", UserRespVO.class, userVOList);
|
||||||
}
|
}
|
||||||
|
|
||||||
@GetMapping("/get-import-template")
|
@GetMapping("/get-import-template")
|
||||||
@Operation(summary = "获得导入用户模板")
|
@Operation(summary = "获得导入用户模板")
|
||||||
public void importTemplate(HttpServletResponse response) throws IOException {
|
public void importTemplate(HttpServletResponse response) throws IOException {
|
||||||
// 手动创建导出 demo
|
|
||||||
List<UserImportExcelVO> list = Arrays.asList(
|
List<UserImportExcelVO> list = Arrays.asList(
|
||||||
UserImportExcelVO.builder().username("yunai").deptId(1L).email("yunai@fjrcloud.cn").mobile("15601691300")
|
UserImportExcelVO.builder().username("yunai").deptId(1L).email("yunai@fjrcloud.cn").mobile("15601691300")
|
||||||
.nickname("融云").status(CommonStatusEnum.ENABLE.getStatus()).sex(SexEnum.MALE.getSex()).build(),
|
.nickname("融云").status(CommonStatusEnum.ENABLE.getStatus()).sex(SexEnum.MALE.getSex()).build(),
|
||||||
UserImportExcelVO.builder().username("yuanma").deptId(2L).email("yuanma@fjrcloud.cn").mobile("15601701300")
|
UserImportExcelVO.builder().username("yuanma").deptId(2L).email("yuanma@fjrcloud.cn").mobile("15601701300")
|
||||||
.nickname("源码").status(CommonStatusEnum.DISABLE.getStatus()).sex(SexEnum.FEMALE.getSex()).build()
|
.nickname("源码").status(CommonStatusEnum.DISABLE.getStatus()).sex(SexEnum.FEMALE.getSex()).build()
|
||||||
);
|
);
|
||||||
// 输出
|
|
||||||
ExcelUtils.write(response, "用户导入模板.xls", "用户列表", UserImportExcelVO.class, list);
|
ExcelUtils.write(response, "用户导入模板.xls", "用户列表", UserImportExcelVO.class, list);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,10 +1,10 @@
|
||||||
package com.fjrcloud.community.module.system.controller.admin.user.vo.user;
|
package com.fjrcloud.community.module.system.controller.admin.user.vo.user;
|
||||||
|
|
||||||
|
import cn.idev.excel.annotation.ExcelIgnoreUnannotated;
|
||||||
|
import cn.idev.excel.annotation.ExcelProperty;
|
||||||
import com.fjrcloud.community.framework.excel.core.annotations.DictFormat;
|
import com.fjrcloud.community.framework.excel.core.annotations.DictFormat;
|
||||||
import com.fjrcloud.community.framework.excel.core.convert.DictConvert;
|
import com.fjrcloud.community.framework.excel.core.convert.DictConvert;
|
||||||
import com.fjrcloud.community.module.system.enums.DictTypeConstants;
|
import com.fjrcloud.community.module.system.enums.DictTypeConstants;
|
||||||
import cn.idev.excel.annotation.ExcelIgnoreUnannotated;
|
|
||||||
import cn.idev.excel.annotation.ExcelProperty;
|
|
||||||
import io.swagger.v3.oas.annotations.media.Schema;
|
import io.swagger.v3.oas.annotations.media.Schema;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
|
|
||||||
|
|
@ -65,6 +65,10 @@ public class UserRespVO{
|
||||||
@ExcelProperty("最后登录IP")
|
@ExcelProperty("最后登录IP")
|
||||||
private String loginIp;
|
private String loginIp;
|
||||||
|
|
||||||
|
@Schema(description = "数据权限", requiredMode = Schema.RequiredMode.REQUIRED, example = "光明小区")
|
||||||
|
@ExcelProperty("数据权限")
|
||||||
|
private String tenantNames;
|
||||||
|
|
||||||
@Schema(description = "最后登录时间", requiredMode = Schema.RequiredMode.REQUIRED, example = "时间戳格式")
|
@Schema(description = "最后登录时间", requiredMode = Schema.RequiredMode.REQUIRED, example = "时间戳格式")
|
||||||
@ExcelProperty("最后登录时间")
|
@ExcelProperty("最后登录时间")
|
||||||
private LocalDateTime loginDate;
|
private LocalDateTime loginDate;
|
||||||
|
|
|
||||||
|
|
@ -73,16 +73,13 @@ public interface AdminAuthService {
|
||||||
/**
|
/**
|
||||||
* 用户注册
|
* 用户注册
|
||||||
*
|
*
|
||||||
* @param createReqVO 注册用户
|
* @param registerReqVO 注册用户
|
||||||
* @return 注册结果
|
* @return 注册结果
|
||||||
*/
|
*/
|
||||||
AuthLoginRespVO register(AuthRegisterReqVO createReqVO);
|
AuthLoginRespVO register(@Valid AuthRegisterReqVO registerReqVO);
|
||||||
|
|
||||||
/**
|
void resetPassword(@Valid AuthResetPasswordReqVO reqVO);
|
||||||
* 重置密码
|
|
||||||
*
|
AuthUserTenantListRespVO getUserTenantList(@Valid AuthUserTenantListReqVO reqVO);
|
||||||
* @param reqVO 验证码信息
|
|
||||||
*/
|
|
||||||
void resetPassword(AuthResetPasswordReqVO reqVO);
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -334,4 +334,30 @@ public class AdminAuthServiceImpl implements AdminAuthService {
|
||||||
|
|
||||||
userService.updateUserPassword(userByMobile.getId(), reqVO.getPassword());
|
userService.updateUserPassword(userByMobile.getId(), reqVO.getPassword());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
@DataPermission(enable = false)
|
||||||
|
public AuthUserTenantListRespVO getUserTenantList(AuthUserTenantListReqVO reqVO) {
|
||||||
|
AdminUserDO user = userService.getUserByUsername(reqVO.getUsername());
|
||||||
|
if (user == null) {
|
||||||
|
throw exception(AUTH_LOGIN_BAD_CREDENTIALS);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!userService.isPasswordMatch(reqVO.getPassword(), user.getPassword())) {
|
||||||
|
throw exception(AUTH_LOGIN_BAD_CREDENTIALS);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (CommonStatusEnum.isDisable(user.getStatus())) {
|
||||||
|
throw exception(AUTH_LOGIN_USER_DISABLED);
|
||||||
|
}
|
||||||
|
|
||||||
|
List<TenantInfoVO> tenants = userTenantRelService.getUserTenants(user.getId());
|
||||||
|
|
||||||
|
return AuthUserTenantListRespVO.builder()
|
||||||
|
.userId(user.getId())
|
||||||
|
.username(user.getUsername())
|
||||||
|
.nickname(user.getNickname())
|
||||||
|
.tenants(tenants)
|
||||||
|
.build();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -4,6 +4,7 @@ import com.fjrcloud.community.framework.common.pojo.PageResult;
|
||||||
import com.fjrcloud.community.framework.tenant.core.context.TenantContextHolder;
|
import com.fjrcloud.community.framework.tenant.core.context.TenantContextHolder;
|
||||||
import com.fjrcloud.community.module.system.controller.admin.tenant.vo.tenant.TenantPageReqVO;
|
import com.fjrcloud.community.module.system.controller.admin.tenant.vo.tenant.TenantPageReqVO;
|
||||||
import com.fjrcloud.community.module.system.controller.admin.tenant.vo.tenant.TenantSaveReqVO;
|
import com.fjrcloud.community.module.system.controller.admin.tenant.vo.tenant.TenantSaveReqVO;
|
||||||
|
import com.fjrcloud.community.module.system.controller.admin.tenant.vo.tenant.TenantSimpleRespVO;
|
||||||
import com.fjrcloud.community.module.system.dal.dataobject.tenant.TenantDO;
|
import com.fjrcloud.community.module.system.dal.dataobject.tenant.TenantDO;
|
||||||
import com.fjrcloud.community.module.system.service.tenant.handler.TenantInfoHandler;
|
import com.fjrcloud.community.module.system.service.tenant.handler.TenantInfoHandler;
|
||||||
import com.fjrcloud.community.module.system.service.tenant.handler.TenantMenuHandler;
|
import com.fjrcloud.community.module.system.service.tenant.handler.TenantMenuHandler;
|
||||||
|
|
@ -135,11 +136,10 @@ public interface TenantService {
|
||||||
*/
|
*/
|
||||||
List<Long> getTenantIdList();
|
List<Long> getTenantIdList();
|
||||||
|
|
||||||
/**
|
|
||||||
* 校验租户是否合法
|
|
||||||
*
|
|
||||||
* @param id 租户编号
|
|
||||||
*/
|
|
||||||
void validTenant(Long id);
|
void validTenant(Long id);
|
||||||
|
|
||||||
|
List<TenantSimpleRespVO> getUserTenantList(Long userId);
|
||||||
|
|
||||||
|
List<TenantSimpleRespVO> getTenantListByIds(List<Long> ids);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -3,6 +3,7 @@ package com.fjrcloud.community.module.system.service.tenant;
|
||||||
import cn.hutool.core.collection.CollUtil;
|
import cn.hutool.core.collection.CollUtil;
|
||||||
import cn.hutool.core.lang.Assert;
|
import cn.hutool.core.lang.Assert;
|
||||||
import cn.hutool.core.util.ObjectUtil;
|
import cn.hutool.core.util.ObjectUtil;
|
||||||
|
import com.baomidou.dynamic.datasource.annotation.DSTransactional;
|
||||||
import com.fjrcloud.community.framework.common.enums.CommonStatusEnum;
|
import com.fjrcloud.community.framework.common.enums.CommonStatusEnum;
|
||||||
import com.fjrcloud.community.framework.common.pojo.PageResult;
|
import com.fjrcloud.community.framework.common.pojo.PageResult;
|
||||||
import com.fjrcloud.community.framework.common.util.collection.CollectionUtils;
|
import com.fjrcloud.community.framework.common.util.collection.CollectionUtils;
|
||||||
|
|
@ -15,11 +16,13 @@ import com.fjrcloud.community.framework.tenant.core.util.TenantUtils;
|
||||||
import com.fjrcloud.community.module.system.controller.admin.permission.vo.role.RoleSaveReqVO;
|
import com.fjrcloud.community.module.system.controller.admin.permission.vo.role.RoleSaveReqVO;
|
||||||
import com.fjrcloud.community.module.system.controller.admin.tenant.vo.tenant.TenantPageReqVO;
|
import com.fjrcloud.community.module.system.controller.admin.tenant.vo.tenant.TenantPageReqVO;
|
||||||
import com.fjrcloud.community.module.system.controller.admin.tenant.vo.tenant.TenantSaveReqVO;
|
import com.fjrcloud.community.module.system.controller.admin.tenant.vo.tenant.TenantSaveReqVO;
|
||||||
|
import com.fjrcloud.community.module.system.controller.admin.tenant.vo.tenant.TenantSimpleRespVO;
|
||||||
import com.fjrcloud.community.module.system.convert.tenant.TenantConvert;
|
import com.fjrcloud.community.module.system.convert.tenant.TenantConvert;
|
||||||
import com.fjrcloud.community.module.system.dal.dataobject.permission.MenuDO;
|
import com.fjrcloud.community.module.system.dal.dataobject.permission.MenuDO;
|
||||||
import com.fjrcloud.community.module.system.dal.dataobject.permission.RoleDO;
|
import com.fjrcloud.community.module.system.dal.dataobject.permission.RoleDO;
|
||||||
import com.fjrcloud.community.module.system.dal.dataobject.tenant.TenantDO;
|
import com.fjrcloud.community.module.system.dal.dataobject.tenant.TenantDO;
|
||||||
import com.fjrcloud.community.module.system.dal.dataobject.tenant.TenantPackageDO;
|
import com.fjrcloud.community.module.system.dal.dataobject.tenant.TenantPackageDO;
|
||||||
|
import com.fjrcloud.community.module.system.dal.dataobject.user.UserTenantRelDO;
|
||||||
import com.fjrcloud.community.module.system.dal.mysql.tenant.TenantMapper;
|
import com.fjrcloud.community.module.system.dal.mysql.tenant.TenantMapper;
|
||||||
import com.fjrcloud.community.module.system.enums.permission.RoleCodeEnum;
|
import com.fjrcloud.community.module.system.enums.permission.RoleCodeEnum;
|
||||||
import com.fjrcloud.community.module.system.enums.permission.RoleTypeEnum;
|
import com.fjrcloud.community.module.system.enums.permission.RoleTypeEnum;
|
||||||
|
|
@ -29,7 +32,7 @@ import com.fjrcloud.community.module.system.service.permission.RoleService;
|
||||||
import com.fjrcloud.community.module.system.service.tenant.handler.TenantInfoHandler;
|
import com.fjrcloud.community.module.system.service.tenant.handler.TenantInfoHandler;
|
||||||
import com.fjrcloud.community.module.system.service.tenant.handler.TenantMenuHandler;
|
import com.fjrcloud.community.module.system.service.tenant.handler.TenantMenuHandler;
|
||||||
import com.fjrcloud.community.module.system.service.user.AdminUserService;
|
import com.fjrcloud.community.module.system.service.user.AdminUserService;
|
||||||
import com.baomidou.dynamic.datasource.annotation.DSTransactional;
|
import com.fjrcloud.community.module.system.service.usertenant.UserTenantRelService;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.context.annotation.Lazy;
|
import org.springframework.context.annotation.Lazy;
|
||||||
|
|
@ -37,9 +40,11 @@ import org.springframework.stereotype.Service;
|
||||||
import org.springframework.validation.annotation.Validated;
|
import org.springframework.validation.annotation.Validated;
|
||||||
|
|
||||||
import javax.annotation.Resource;
|
import javax.annotation.Resource;
|
||||||
|
import java.util.Collections;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
import static com.fjrcloud.community.framework.common.exception.util.ServiceExceptionUtil.exception;
|
import static com.fjrcloud.community.framework.common.exception.util.ServiceExceptionUtil.exception;
|
||||||
import static com.fjrcloud.community.module.system.enums.ErrorCodeConstants.*;
|
import static com.fjrcloud.community.module.system.enums.ErrorCodeConstants.*;
|
||||||
|
|
@ -73,6 +78,8 @@ public class TenantServiceImpl implements TenantService {
|
||||||
private MenuService menuService;
|
private MenuService menuService;
|
||||||
@Resource
|
@Resource
|
||||||
private PermissionService permissionService;
|
private PermissionService permissionService;
|
||||||
|
@Resource
|
||||||
|
private UserTenantRelService userTenantRelService;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public List<Long> getTenantIdList() {
|
public List<Long> getTenantIdList() {
|
||||||
|
|
@ -317,4 +324,36 @@ public class TenantServiceImpl implements TenantService {
|
||||||
return tenantProperties == null || Boolean.FALSE.equals(tenantProperties.getEnable());
|
return tenantProperties == null || Boolean.FALSE.equals(tenantProperties.getEnable());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<TenantSimpleRespVO> getUserTenantList(Long userId) {
|
||||||
|
List<UserTenantRelDO> rels = userTenantRelService.getUserTenantRels(userId);
|
||||||
|
if (CollUtil.isEmpty(rels)) {
|
||||||
|
return Collections.emptyList();
|
||||||
|
}
|
||||||
|
|
||||||
|
List<Long> tenantIds = CollectionUtils.convertList(rels, UserTenantRelDO::getTenantId);
|
||||||
|
List<TenantDO> tenants = tenantMapper.selectBatchIds(tenantIds);
|
||||||
|
|
||||||
|
return tenants.stream()
|
||||||
|
.map(tenant -> TenantSimpleRespVO.builder()
|
||||||
|
.tenantId(tenant.getId())
|
||||||
|
.tenantName(tenant.getName())
|
||||||
|
.build())
|
||||||
|
.collect(Collectors.toList());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<TenantSimpleRespVO> getTenantListByIds(List<Long> ids) {
|
||||||
|
if (CollUtil.isEmpty(ids)) {
|
||||||
|
return Collections.emptyList();
|
||||||
|
}
|
||||||
|
List<TenantDO> tenants = tenantMapper.selectBatchIds(ids);
|
||||||
|
return tenants.stream()
|
||||||
|
.map(tenant -> TenantSimpleRespVO.builder()
|
||||||
|
.tenantId(tenant.getId())
|
||||||
|
.tenantName(tenant.getName())
|
||||||
|
.build())
|
||||||
|
.collect(Collectors.toList());
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -6,10 +6,7 @@ import com.fjrcloud.community.framework.common.util.collection.CollectionUtils;
|
||||||
import com.fjrcloud.community.module.system.controller.admin.auth.vo.AuthRegisterReqVO;
|
import com.fjrcloud.community.module.system.controller.admin.auth.vo.AuthRegisterReqVO;
|
||||||
import com.fjrcloud.community.module.system.controller.admin.user.vo.profile.UserProfileUpdatePasswordReqVO;
|
import com.fjrcloud.community.module.system.controller.admin.user.vo.profile.UserProfileUpdatePasswordReqVO;
|
||||||
import com.fjrcloud.community.module.system.controller.admin.user.vo.profile.UserProfileUpdateReqVO;
|
import com.fjrcloud.community.module.system.controller.admin.user.vo.profile.UserProfileUpdateReqVO;
|
||||||
import com.fjrcloud.community.module.system.controller.admin.user.vo.user.UserImportExcelVO;
|
import com.fjrcloud.community.module.system.controller.admin.user.vo.user.*;
|
||||||
import com.fjrcloud.community.module.system.controller.admin.user.vo.user.UserImportRespVO;
|
|
||||||
import com.fjrcloud.community.module.system.controller.admin.user.vo.user.UserPageReqVO;
|
|
||||||
import com.fjrcloud.community.module.system.controller.admin.user.vo.user.UserSaveReqVO;
|
|
||||||
import com.fjrcloud.community.module.system.dal.dataobject.user.AdminUserDO;
|
import com.fjrcloud.community.module.system.dal.dataobject.user.AdminUserDO;
|
||||||
|
|
||||||
import javax.validation.Valid;
|
import javax.validation.Valid;
|
||||||
|
|
@ -188,13 +185,8 @@ public interface AdminUserService {
|
||||||
*/
|
*/
|
||||||
List<AdminUserDO> getUserListByNickname(String nickname);
|
List<AdminUserDO> getUserListByNickname(String nickname);
|
||||||
|
|
||||||
/**
|
void fillUserTenantNames(List<UserRespVO> userList);
|
||||||
* 批量导入用户
|
|
||||||
*
|
|
||||||
* @param importUsers 导入用户列表
|
|
||||||
* @param isUpdateSupport 是否支持更新
|
|
||||||
* @return 导入结果
|
|
||||||
*/
|
|
||||||
UserImportRespVO importUserList(List<UserImportExcelVO> importUsers, boolean isUpdateSupport);
|
UserImportRespVO importUserList(List<UserImportExcelVO> importUsers, boolean isUpdateSupport);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
||||||
|
|
@ -15,15 +15,14 @@ import com.fjrcloud.community.framework.datapermission.core.util.DataPermissionU
|
||||||
import com.fjrcloud.community.framework.tenant.core.context.TenantContextHolder;
|
import com.fjrcloud.community.framework.tenant.core.context.TenantContextHolder;
|
||||||
import com.fjrcloud.community.module.infra.api.config.ConfigApi;
|
import com.fjrcloud.community.module.infra.api.config.ConfigApi;
|
||||||
import com.fjrcloud.community.module.system.controller.admin.auth.vo.AuthRegisterReqVO;
|
import com.fjrcloud.community.module.system.controller.admin.auth.vo.AuthRegisterReqVO;
|
||||||
|
import com.fjrcloud.community.module.system.controller.admin.tenant.vo.tenant.TenantSimpleRespVO;
|
||||||
import com.fjrcloud.community.module.system.controller.admin.user.vo.profile.UserProfileUpdatePasswordReqVO;
|
import com.fjrcloud.community.module.system.controller.admin.user.vo.profile.UserProfileUpdatePasswordReqVO;
|
||||||
import com.fjrcloud.community.module.system.controller.admin.user.vo.profile.UserProfileUpdateReqVO;
|
import com.fjrcloud.community.module.system.controller.admin.user.vo.profile.UserProfileUpdateReqVO;
|
||||||
import com.fjrcloud.community.module.system.controller.admin.user.vo.user.UserImportExcelVO;
|
import com.fjrcloud.community.module.system.controller.admin.user.vo.user.*;
|
||||||
import com.fjrcloud.community.module.system.controller.admin.user.vo.user.UserImportRespVO;
|
|
||||||
import com.fjrcloud.community.module.system.controller.admin.user.vo.user.UserPageReqVO;
|
|
||||||
import com.fjrcloud.community.module.system.controller.admin.user.vo.user.UserSaveReqVO;
|
|
||||||
import com.fjrcloud.community.module.system.dal.dataobject.dept.DeptDO;
|
import com.fjrcloud.community.module.system.dal.dataobject.dept.DeptDO;
|
||||||
import com.fjrcloud.community.module.system.dal.dataobject.dept.UserPostDO;
|
import com.fjrcloud.community.module.system.dal.dataobject.dept.UserPostDO;
|
||||||
import com.fjrcloud.community.module.system.dal.dataobject.user.AdminUserDO;
|
import com.fjrcloud.community.module.system.dal.dataobject.user.AdminUserDO;
|
||||||
|
import com.fjrcloud.community.module.system.dal.dataobject.user.UserTenantRelDO;
|
||||||
import com.fjrcloud.community.module.system.dal.mysql.dept.UserPostMapper;
|
import com.fjrcloud.community.module.system.dal.mysql.dept.UserPostMapper;
|
||||||
import com.fjrcloud.community.module.system.dal.mysql.user.AdminUserMapper;
|
import com.fjrcloud.community.module.system.dal.mysql.user.AdminUserMapper;
|
||||||
import com.fjrcloud.community.module.system.service.dept.DeptService;
|
import com.fjrcloud.community.module.system.service.dept.DeptService;
|
||||||
|
|
@ -47,6 +46,7 @@ import javax.validation.ConstraintViolationException;
|
||||||
import java.time.LocalDateTime;
|
import java.time.LocalDateTime;
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
import java.util.concurrent.atomic.AtomicInteger;
|
import java.util.concurrent.atomic.AtomicInteger;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
import static com.fjrcloud.community.framework.common.exception.util.ServiceExceptionUtil.exception;
|
import static com.fjrcloud.community.framework.common.exception.util.ServiceExceptionUtil.exception;
|
||||||
import static com.fjrcloud.community.framework.common.util.collection.CollectionUtils.*;
|
import static com.fjrcloud.community.framework.common.util.collection.CollectionUtils.*;
|
||||||
|
|
@ -488,6 +488,81 @@ public class AdminUserServiceImpl implements AdminUserService {
|
||||||
return passwordEncoder.matches(rawPassword, encodedPassword);
|
return passwordEncoder.matches(rawPassword, encodedPassword);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void fillUserTenantNames(List<UserRespVO> userList) {
|
||||||
|
if (CollUtil.isEmpty(userList)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
Map<Long, List<UserTenantRelDO>> userTenantRelMap = getUserTenantRelsBatch(userList);
|
||||||
|
Map<Long, String> tenantNameMap = buildTenantNameMap(userTenantRelMap);
|
||||||
|
|
||||||
|
for (UserRespVO userVO : userList) {
|
||||||
|
Long userId = userVO.getId();
|
||||||
|
if (userId != null && tenantNameMap.containsKey(userId)) {
|
||||||
|
userVO.setTenantNames(tenantNameMap.get(userId));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private Map<Long, List<UserTenantRelDO>> getUserTenantRelsBatch(List<UserRespVO> userList) {
|
||||||
|
List<Long> userIds = userList.stream()
|
||||||
|
.map(UserRespVO::getId)
|
||||||
|
.filter(Objects::nonNull)
|
||||||
|
.collect(Collectors.toList());
|
||||||
|
|
||||||
|
if (CollUtil.isEmpty(userIds)) {
|
||||||
|
return Collections.emptyMap();
|
||||||
|
}
|
||||||
|
|
||||||
|
Map<Long, List<UserTenantRelDO>> result = new HashMap<>();
|
||||||
|
for (Long userId : userIds) {
|
||||||
|
List<UserTenantRelDO> rels = userTenantRelService.getUserTenantRels(userId);
|
||||||
|
if (CollUtil.isNotEmpty(rels)) {
|
||||||
|
result.put(userId, rels);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
private Map<Long, String> buildTenantNameMap(Map<Long, List<UserTenantRelDO>> userTenantRelMap) {
|
||||||
|
if (CollUtil.isEmpty(userTenantRelMap)) {
|
||||||
|
return Collections.emptyMap();
|
||||||
|
}
|
||||||
|
|
||||||
|
Set<Long> allTenantIds = userTenantRelMap.values().stream()
|
||||||
|
.flatMap(List::stream)
|
||||||
|
.map(UserTenantRelDO::getTenantId)
|
||||||
|
.filter(Objects::nonNull)
|
||||||
|
.collect(Collectors.toSet());
|
||||||
|
|
||||||
|
if (CollUtil.isEmpty(allTenantIds)) {
|
||||||
|
return Collections.emptyMap();
|
||||||
|
}
|
||||||
|
|
||||||
|
List<TenantSimpleRespVO> allTenants = tenantService.getTenantListByIds(new ArrayList<>(allTenantIds));
|
||||||
|
if (CollUtil.isEmpty(allTenants)) {
|
||||||
|
return Collections.emptyMap();
|
||||||
|
}
|
||||||
|
|
||||||
|
Map<Long, String> tenantIdNameMap = allTenants.stream()
|
||||||
|
.collect(Collectors.toMap(TenantSimpleRespVO::getTenantId, TenantSimpleRespVO::getTenantName, (v1, v2) -> v1));
|
||||||
|
|
||||||
|
Map<Long, String> result = new HashMap<>();
|
||||||
|
for (Map.Entry<Long, List<UserTenantRelDO>> entry : userTenantRelMap.entrySet()) {
|
||||||
|
String tenantNames = entry.getValue().stream()
|
||||||
|
.map(UserTenantRelDO::getTenantId)
|
||||||
|
.filter(tenantIdNameMap::containsKey)
|
||||||
|
.map(tenantIdNameMap::get)
|
||||||
|
.collect(Collectors.joining(","));
|
||||||
|
if (StrUtil.isNotBlank(tenantNames)) {
|
||||||
|
result.put(entry.getKey(), tenantNames);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
private String encodePassword(String password) {
|
private String encodePassword(String password) {
|
||||||
return passwordEncoder.encode(password);
|
return passwordEncoder.encode(password);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -13,6 +13,8 @@ public interface UserTenantRelService {
|
||||||
|
|
||||||
UserTenantRelDO getDefaultTenant(Long userId);
|
UserTenantRelDO getDefaultTenant(Long userId);
|
||||||
|
|
||||||
|
List<UserTenantRelDO> getUserTenantRels(Long userId);
|
||||||
|
|
||||||
void assignUserToTenant(Long userId, Long tenantId, Boolean isDefault);
|
void assignUserToTenant(Long userId, Long tenantId, Boolean isDefault);
|
||||||
|
|
||||||
void removeUserFromTenant(Long userId, Long tenantId);
|
void removeUserFromTenant(Long userId, Long tenantId);
|
||||||
|
|
|
||||||
|
|
@ -54,6 +54,11 @@ public class UserTenantRelServiceImpl implements UserTenantRelService {
|
||||||
return userTenantRelMapper.selectDefaultByUserId(userId);
|
return userTenantRelMapper.selectDefaultByUserId(userId);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<UserTenantRelDO> getUserTenantRels(Long userId) {
|
||||||
|
return userTenantRelMapper.selectListByUserId(userId);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@Transactional(rollbackFor = Exception.class)
|
@Transactional(rollbackFor = Exception.class)
|
||||||
public void assignUserToTenant(Long userId, Long tenantId, Boolean isDefault) {
|
public void assignUserToTenant(Long userId, Long tenantId, Boolean isDefault) {
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue