feat(system): 分页查询用户关联业务租户
This commit is contained in:
parent
e3dfb9b98f
commit
2e468d0ebc
@ -2,14 +2,18 @@ package org.dromara.system.controller;
|
||||
|
||||
import cn.dev33.satoken.annotation.SaCheckPermission;
|
||||
import cn.dev33.satoken.annotation.SaIgnore;
|
||||
import cn.dev33.satoken.annotation.SaMode;
|
||||
import cn.dev33.satoken.secure.BCrypt;
|
||||
import cn.hutool.core.lang.tree.Tree;
|
||||
import cn.hutool.core.util.ArrayUtil;
|
||||
import cn.hutool.core.util.ObjectUtil;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import jakarta.servlet.http.HttpServletResponse;
|
||||
import jakarta.validation.constraints.NotNull;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.dromara.common.core.constant.Constants;
|
||||
import org.dromara.common.core.constant.SystemConstants;
|
||||
import org.dromara.common.core.constant.TenantConstants;
|
||||
import org.dromara.common.core.domain.R;
|
||||
import org.dromara.common.core.domain.model.LoginUser;
|
||||
import org.dromara.common.core.enums.TenantType;
|
||||
@ -303,7 +307,7 @@ public class SysUserController extends BaseController {
|
||||
/**
|
||||
* 保存用户关联业务租户
|
||||
*/
|
||||
@SaCheckPermission("system:user:tenant")
|
||||
@SaCheckPermission(value = "system:user:tenant", mode = SaMode.OR, orRole = TenantConstants.TENANT_ADMIN_ROLE_KEY)
|
||||
@Log(title = "保存用户关联业务租户", businessType = BusinessType.INSERT)
|
||||
@PostMapping("/tenant")
|
||||
public R<Void> saveUserTenant(@Validated @RequestBody SysUserTenantBO userTenantBO) {
|
||||
@ -312,14 +316,15 @@ public class SysUserController extends BaseController {
|
||||
}
|
||||
|
||||
/**
|
||||
* 查询用户关联业务的指定类型租户
|
||||
* 分页查询用户关联业务的指定类型租户
|
||||
* @param userId 用户id
|
||||
* @param type 租户类型 {@link TenantType}
|
||||
* @param pageQuery
|
||||
*
|
||||
*/
|
||||
@GetMapping("/tenantList/{userId}/{type}")
|
||||
public R<List<SysUserTenantVO>> getUserTenantList(@PathVariable("userId") Long userId, @PathVariable("type") int type) {
|
||||
return R.ok(userTenantService.getUserTenantList(userId, type));
|
||||
public R<Page<SysUserTenantVO>> getUserTenantList(@PathVariable("userId") Long userId, @PathVariable("type") int type, PageQuery pageQuery) {
|
||||
return R.ok(userTenantService.getUserTenantList(userId, type, pageQuery));
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -1,13 +1,13 @@
|
||||
package org.dromara.system.domain.bo;
|
||||
|
||||
|
||||
import jakarta.validation.constraints.NotBlank;
|
||||
import jakarta.validation.constraints.NotNull;
|
||||
import jakarta.validation.constraints.Size;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@Data
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
@ -22,7 +22,5 @@ public class SysUserTenantBO {
|
||||
/**
|
||||
* 租户id
|
||||
*/
|
||||
@Size(max = 255,message = "租户id最大长度要小于 255")
|
||||
@NotBlank(message = "租户id不能为空")
|
||||
private String tenantId;
|
||||
private List<String> tenantIds;
|
||||
}
|
||||
|
@ -12,11 +12,6 @@ import lombok.NoArgsConstructor;
|
||||
@Builder
|
||||
public class SysUserTenantVO {
|
||||
|
||||
/**
|
||||
* 用户ID
|
||||
*/
|
||||
private Long userId;
|
||||
|
||||
/**
|
||||
* 租户id
|
||||
*/
|
||||
@ -26,4 +21,9 @@ public class SysUserTenantVO {
|
||||
* 租户名称
|
||||
*/
|
||||
private String tenantName;
|
||||
|
||||
/**
|
||||
* 是否已关联该租户
|
||||
*/
|
||||
private boolean has;
|
||||
}
|
||||
|
@ -91,5 +91,5 @@ public interface SysTenantMapper extends BaseMapperPlus<SysTenant, SysTenantVo>
|
||||
"AND status = 0 " +
|
||||
"AND del_flag = '0'" +
|
||||
"</script>")
|
||||
List<SysTenant> selectByTenantTypeAndCreateDept(@Param("tenantType") int tenantType, @Param("deptIdList") List<Long> deptIdList);
|
||||
Page<SysTenant> selectByTenantTypeAndCreateDept(@Param("page") Page<SysTenant> page, @Param("tenantType") int tenantType, @Param("deptIdList") List<Long> deptIdList);
|
||||
}
|
||||
|
@ -1,5 +1,7 @@
|
||||
package org.dromara.system.service;
|
||||
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import org.dromara.common.mybatis.core.page.PageQuery;
|
||||
import org.dromara.system.domain.SysUserTenant;
|
||||
import com.baomidou.mybatisplus.extension.service.IService;
|
||||
import org.dromara.system.domain.bo.SysUserTenantBO;
|
||||
@ -12,5 +14,5 @@ public interface ISysUserTenantService extends IService<SysUserTenant>{
|
||||
|
||||
void save(SysUserTenantBO userTenantBO);
|
||||
|
||||
List<SysUserTenantVO> getUserTenantList(Long userId, int type);
|
||||
Page<SysUserTenantVO> getUserTenantList(Long userId, int type, PageQuery pageQuery);
|
||||
}
|
||||
|
@ -1,25 +1,29 @@
|
||||
package org.dromara.system.service.impl;
|
||||
|
||||
import cn.hutool.core.collection.CollUtil;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.dromara.common.core.enums.TenantType;
|
||||
import org.dromara.common.mybatis.core.page.PageQuery;
|
||||
import org.dromara.common.satoken.utils.LoginHelper;
|
||||
import org.dromara.common.tenant.helper.TenantHelper;
|
||||
import org.dromara.system.domain.SysDept;
|
||||
import org.dromara.system.domain.SysTenant;
|
||||
import org.dromara.system.domain.bo.SysUserTenantBO;
|
||||
import org.dromara.system.domain.vo.SysUserTenantVO;
|
||||
import org.dromara.system.mapper.SysDeptMapper;
|
||||
import org.dromara.system.mapper.SysTenantMapper;
|
||||
import org.dromara.system.mapper.SysUserMapper;
|
||||
import org.dromara.system.service.ISysUserService;
|
||||
import org.springframework.stereotype.Service;
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import org.dromara.system.domain.SysUserTenant;
|
||||
import org.dromara.system.mapper.SysUserTenantMapper;
|
||||
import org.dromara.system.service.ISysUserTenantService;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
import java.util.Optional;
|
||||
import java.util.*;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
@Service
|
||||
@RequiredArgsConstructor
|
||||
@ -31,27 +35,39 @@ public class SysUserTenantServiceImpl extends ServiceImpl<SysUserTenantMapper, S
|
||||
|
||||
@Override
|
||||
public void save(SysUserTenantBO userTenantBO) {
|
||||
this.save(SysUserTenant.builder().userId(userTenantBO.getUserId()).tenantId(userTenantBO.getTenantId()).build());
|
||||
List<String> tenantIds = userTenantBO.getTenantIds();
|
||||
if(CollUtil.isEmpty(tenantIds)){
|
||||
this.remove(Wrappers.lambdaQuery(SysUserTenant.class).eq(SysUserTenant::getUserId, userTenantBO.getUserId()));
|
||||
}else{
|
||||
List<SysUserTenant> list = tenantIds.stream().map(tenantId -> SysUserTenant.builder().userId(userTenantBO.getUserId()).tenantId(tenantId).build())
|
||||
.toList();
|
||||
this.saveBatch(list);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<SysUserTenantVO> getUserTenantList(Long userId, int type) {
|
||||
// 租户管理员可查当前租户下所有部门创建的指定类型租户
|
||||
if (LoginHelper.isTenantAdmin()) {
|
||||
ArrayList<Long> deptIdList = CollUtil.newArrayList(LoginHelper.getDeptId());
|
||||
Optional.ofNullable(sysDeptMapper.selectListByParentId(LoginHelper.getDeptId()))
|
||||
.ifPresent(sysDepts -> {
|
||||
List<Long> list = sysDepts.stream()
|
||||
.map(SysDept::getDeptId)
|
||||
.filter(Objects::nonNull)
|
||||
.toList();
|
||||
deptIdList.addAll(list);
|
||||
});
|
||||
List<SysTenant> sysTenants = sysTenantMapper.selectByTenantTypeAndCreateDept(type, deptIdList);
|
||||
return sysTenants.stream().map(
|
||||
sysTenant -> SysUserTenantVO.builder().userId(userId).tenantId(sysTenant.getTenantId()).tenantName(sysTenant.getStoreName()).build()
|
||||
).toList();
|
||||
}
|
||||
return baseMapper.getUserTenantList(userId, type);
|
||||
public Page<SysUserTenantVO> getUserTenantList(Long userId, int type, PageQuery pageQuery) {
|
||||
List<Long> deptIdList = sysDeptMapper.selectList().stream().map(SysDept::getDeptId).toList();
|
||||
// 获取当前登录用户所属租户创建的指定类型租户
|
||||
Page<SysTenant> tenantPage = sysTenantMapper.selectByTenantTypeAndCreateDept(pageQuery.build(), type, deptIdList);
|
||||
// 转换为SysUserTenantVO分页数据
|
||||
List<SysTenant> records = tenantPage.getRecords();
|
||||
List<String> tenantIds = records.stream().map(SysTenant::getTenantId).toList();
|
||||
// 获取指定用户关联的租户
|
||||
Map<String, SysUserTenant> userTenantMap = baseMapper.selectList(new LambdaQueryWrapper<SysUserTenant>()
|
||||
.eq(SysUserTenant::getUserId, userId)
|
||||
.in(SysUserTenant::getTenantId, tenantIds)
|
||||
).stream().collect(Collectors.toMap(SysUserTenant::getTenantId, o -> o));
|
||||
List<SysUserTenantVO> userTenantVOList = records.stream()
|
||||
.map(sysTenant -> SysUserTenantVO.builder()
|
||||
.tenantId(sysTenant.getTenantId())
|
||||
.tenantName(sysTenant.getStoreName())
|
||||
.has((LoginHelper.isTenantAdmin() && userId.equals(LoginHelper.getUserId())) || userTenantMap.containsKey(sysTenant.getTenantId()))
|
||||
.build())
|
||||
.toList();
|
||||
// 构建新的分页结果
|
||||
Page<SysUserTenantVO> resultPage = new Page<>(tenantPage.getCurrent(), tenantPage.getSize(), tenantPage.getTotal());
|
||||
resultPage.setRecords(userTenantVOList);
|
||||
return resultPage;
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user