提交 1d3d592c 作者: 洪东保

Merge branch 'hongdongbao'

......@@ -306,6 +306,11 @@
<artifactId>spring-boot-starter-aop</artifactId>
<version>2.7.0</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
<version>2.7.0</version>
</dependency>
<!--security核心包-->
<dependency>
......
......@@ -3,8 +3,8 @@ package com.cmeeting.ad.service.impl;
import com.alibaba.fastjson.JSONObject;
import com.cmeeting.ad.entity.RobotSecurityUser;
import com.cmeeting.ad.service.CustomUserDetailsService;
import com.cmeeting.constant.LoginUserConstant;
import com.cmeeting.constant.UserAdminRouteConstant;
import com.cmeeting.constant.UserTypeConstant;
import com.cmeeting.util.HttpClientUtils;
import com.cmeeting.util.UserAdminConfig;
import com.cmeeting.util.UserAdminTokenUtil;
......@@ -33,7 +33,7 @@ public class DetailsServiceImpl implements CustomUserDetailsService {
@Override
public UserDetails loadUser(String uid, String tenantId) {
RobotSecurityUser user = new RobotSecurityUser();
user.setUserType(LoginUserConstant.SYS);
user.setUserType(UserTypeConstant.SYNC);
String url = userAdminConfig.getUserAdminDomain() + UserAdminRouteConstant.SyncUser.INFO + "?id=" + uid + "&tenantId=" + tenantId;
JSONObject jsonObject = HttpClientUtils.httpGet(url, UserAdminTokenUtil.getUserAdminToken());
JSONObject data = jsonObject.getJSONObject("data");
......
......@@ -10,6 +10,7 @@ public class CategoryConstant {
public static final String ALL = "全部";
public static final String ALL_EN = "all";
public static final String ROOT = "ROOT";
/**
* 根父级id
*/
......
package com.cmeeting.constant;
/**
* 登录的用户类型
*/
public interface LoginUserConstant {
Integer SYS = 0;
Integer APPLICATION = 1;
Integer SYNC = 2;
}
package com.cmeeting.constant;
public interface PermissionPruposeType {
Integer ADMIN_AUTH = 0; // 超管授权纪要功能
Integer TEMPLATE_TYPE_PERMISSION = 1;//纪要类型分享
Integer TEMPLATE_PERMISSION = 2;//纪要模板分享
Integer PERSONAL_CLOSE = 3; //用户自己关闭纪要功能
}
package com.cmeeting.constant;
/**
* 登录的用户类型
*/
public interface UserTypeConstant {
// /**
// * 系统用户
// */
// int SYS = 0;
// /**
// * 应用用户
// */
// int APPLICATION = 1;
/**
* 同步用户
*/
int SYNC = 2;
/**
* 超管分享
*/
int ADMIN = 3;
}
package com.cmeeting.controller;
import com.cmeeting.service.ModulePermissionService;
import com.cmeeting.util.R;
import com.cmeeting.vo.PermissionVO;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
@RestController
@RequestMapping("/permission")
public class PermissionController {
@Resource
private ModulePermissionService modulePermissionService;
@PostMapping("/checkList")
public R list(@Validated @RequestBody PermissionVO.CheckList vo){
return R.ok(modulePermissionService.permissionList(vo.getSearch(), vo.getCategoryId(), vo.getUserType(), vo.getPurpose()));
}
}
package com.cmeeting.dto;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class PermissionCheckedDTO implements Serializable {
private List<Category> categoryList = new ArrayList<>();
private List<User> userList = new ArrayList<>();
@Data
public static class Category{
private String id;
private Integer userType;
private String name;
private Boolean check = false;
}
@Data
public static class User{
private String id;
private Integer userType;
private String name;
private String deptName;
private Boolean check = false;
}
}
package com.cmeeting.mapper.secondary;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.cmeeting.pojo.ShareUser;
import org.apache.ibatis.annotations.Param;
import java.util.List;
/**
* (ShareUser)表数据库访问层
*
* @author makejava
* @since 2025-01-16 14:50:16
*/
public interface ShareUserMapper extends BaseMapper<ShareUser> {
}
package com.cmeeting.mapper.secondary;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.cmeeting.pojo.SysUserSyncCategory;
public interface SysUserSyncCategoryMapper extends BaseMapper<SysUserSyncCategory> {
}
......@@ -3,6 +3,7 @@ package com.cmeeting.mapper.secondary;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.cmeeting.ad.entity.SysDept;
import com.cmeeting.ad.entity.SysUserSync;
import com.cmeeting.dto.PermissionCheckedDTO;
import com.cmeeting.dto.UserDTO;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
......@@ -24,4 +25,13 @@ public interface SysUserSysMapper extends BaseMapper<SysUserSync> {
List<String> getSubDeptId(@Param(value = "deptId")String deptId,@Param(value = "tenantId")String tenantId);
List<String> getUsersByDept(@Param(value = "deptIds") List<String> deptIds,@Param(value = "tenantId")String tenantId);
List<PermissionCheckedDTO.User> findName(@Param("deptIds") List<String> deptIds, @Param("categoryId") String categoryId, @Param("search") String search,
@Param("tenantId") String tenantId, @Param("userList") List<String> userList);
List<PermissionCheckedDTO.User> findInUserIdsOrShareCateIds(@Param("userIds") List<String> userIds, @Param("shareCateIds") List<String> shareCateIds,
@Param("tenantId") String tenantId, @Param("search") String search);
List<PermissionCheckedDTO.User> findByParam(@Param("userIds") List<String> userIds, @Param("notInCateIds") List<String> notInCateIds, @Param("cateIds") List<String> shareCateIds,
@Param("tenantId") String tenantId, @Param("search") String search, @Param("categoryId") String categoryId);
}
package com.cmeeting.pojo;
import com.baomidou.mybatisplus.annotation.*;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.*;
import lombok.experimental.Accessors;
import java.io.Serializable;
import java.util.Date;
/**
* (ShareUser)实体类
*
* @author makejava
* @since 2025-01-16 14:50:14
*/
@Data
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
@TableName("share_user")
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class ShareUser implements Serializable {
private static final long serialVersionUID = -15064516326494187L;
/**
* 单个用户id或者分类id
*/
private String relId;
/**
* 0 分类 1用户
*/
private Integer type;
/**
* 主键ID
*/
@TableId(value = "id", type = IdType.ASSIGN_ID)
private String id;
/**
* 0-正常,1-删除
*/
@TableLogic
@TableField(fill = FieldFill.INSERT)
private boolean isDel;
/**
* 用户创建人
*/
private String createUser;
/**
* 更新者
*/
private String updateUser;
/**
* 修改时间
*/
@TableField(fill = FieldFill.INSERT_UPDATE)
@JsonFormat(pattern="yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
private Date updateTime;
/**
* 创建时间
*/
@TableField(fill = FieldFill.INSERT)
@JsonFormat(pattern="yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
private Date createTime;
/**
* 租户id
*/
private String tenantId;
}
package com.cmeeting.pojo;
import com.baomidou.mybatisplus.annotation.*;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonInclude;
import lombok.*;
import lombok.experimental.Accessors;
import java.io.Serializable;
import java.util.Date;
/**
* 外接系统部门表(SysUserSyncCategory)实体类
*
* @author makejava
* @since 2024-04-25 14:22:52
*/
@Data
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
@TableName("sys_user_sync_category")
@Builder
@NoArgsConstructor
@AllArgsConstructor
@JsonInclude(JsonInclude.Include.NON_NULL)
public class SysUserSyncCategory implements Serializable {
private static final long serialVersionUID = 717019603610366063L;
/**
* 外接系统部门表主键
*/
@TableId(value = "id", type = IdType.ASSIGN_ID)
private String id;
/**
* 部门id
*/
private String deptId;
/**
* 部门名称
*/
private String name;
private String path;
/**
* 部门别名
*/
private String nameEn;
/**
* 平台类型 QWX=企业微信, DD=钉钉,FS=飞书
*/
private String platformType;
/**
* 部门领导,多个领导用逗号隔开
*/
private String departmentLeader;
/**
* 父级id
*/
private String parentId;
/**
* 排序
*/
private Integer sortNo;
/**
* 创建时间
*/
@TableField(fill = FieldFill.INSERT)
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date createTime;
/**
* 租户id
*/
private String tenantId;
}
package com.cmeeting.service;
import cn.hutool.core.lang.tree.Tree;
import com.baomidou.mybatisplus.extension.service.IService;
import com.cmeeting.dto.PermissionCheckedDTO;
import com.cmeeting.pojo.ShareUser;
import java.util.List;
/**
* (ShareUser)表服务接口
*
* @author makejava
* @since 2025-01-16 14:50:15
*/
public interface IShareUserService extends IService<ShareUser>{
PermissionCheckedDTO findName(String categoryId, String search, String tenantId);
}
package com.cmeeting.service;
import cn.hutool.core.lang.tree.Tree;
import com.baomidou.mybatisplus.extension.service.IService;
import com.cmeeting.pojo.SysUserSyncCategory;
import java.util.List;
import java.util.Map;
/**
* 外接系统部门表(SysUserSyncCategory)表服务接口
*
* @author makejava
* @since 2024-04-25 14:22:52
*/
public interface ISysUserSyncCategoryService extends IService<SysUserSyncCategory> {
String getPath(String deptId, Map<String, String> map);
}
package com.cmeeting.service;
import com.cmeeting.dto.PermissionCheckedDTO;
import com.cmeeting.pojo.ModulePermission;
import com.baomidou.mybatisplus.extension.service.IService;
import java.util.List;
/**
* @author Administrator
* @description 针对表【module_permission(权限表)】的数据库操作Service
......@@ -10,4 +13,5 @@ import com.baomidou.mybatisplus.extension.service.IService;
*/
public interface ModulePermissionService extends IService<ModulePermission> {
PermissionCheckedDTO permissionList(String search, String categoryId, Integer userType, Integer purpose);
}
package com.cmeeting.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.cmeeting.ad.entity.RobotSecurityUser;
import com.cmeeting.ad.entity.SysUserSync;
import com.cmeeting.dto.PermissionCheckedDTO;
import java.util.List;
public interface SysUserSyncService extends IService<SysUserSync> {
String getDeptPathByUserId(String userId);
PermissionCheckedDTO listByCategoryId(String categoryId, String search, String tenangId);
List<PermissionCheckedDTO.User> findInUserIdsOrShareCateIds(List<String> userIds, List<String> shareCateIds, String s, String search);
List<PermissionCheckedDTO.User> findByParam(List<String> userIds, List<String> notInCateIds, List<String> shareCateIds, String tenantId, String search, String categoryId);
}
package com.cmeeting.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.cmeeting.ad.util.SecurityUtil;
import com.cmeeting.constant.UserTypeConstant;
import com.cmeeting.dto.PermissionCheckedDTO;
import com.cmeeting.pojo.ModulePermission;
import com.cmeeting.service.IShareUserService;
import com.cmeeting.service.ModulePermissionService;
import com.cmeeting.mapper.primary.ModulePermissionMapper;
import com.cmeeting.service.SysUserSyncService;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.List;
/**
* @author Administrator
* @description 针对表【module_permission(权限表)】的数据库操作Service实现
......@@ -15,6 +23,24 @@ import org.springframework.stereotype.Service;
public class ModulePermissionServiceImpl extends ServiceImpl<ModulePermissionMapper, ModulePermission>
implements ModulePermissionService{
@Resource
private SysUserSyncService iSysUserSyncService;
@Resource
private IShareUserService iShareUserService;
@Override
public PermissionCheckedDTO permissionList(String search, String categoryId, Integer userType, Integer purpose) {
if (userType != null) {
if (userType == UserTypeConstant.SYNC) {
return iSysUserSyncService.listByCategoryId(categoryId, search, SecurityUtil.getTenantId());
} else if (userType == UserTypeConstant.ADMIN) {
return iShareUserService.findName(categoryId, search, SecurityUtil.getTenantId());
}
} else {
}
return null;
}
}
......
package com.cmeeting.service.impl;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.lang.tree.Tree;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.cmeeting.constant.CategoryConstant;
import com.cmeeting.constant.UserTypeConstant;
import com.cmeeting.dto.PermissionCheckedDTO;
import com.cmeeting.mapper.secondary.ShareUserMapper;
import com.cmeeting.pojo.ShareUser;
import com.cmeeting.pojo.SysUserSyncCategory;
import com.cmeeting.service.IShareUserService;
import com.cmeeting.service.ISysUserSyncCategoryService;
import com.cmeeting.service.SysUserSyncService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.stream.Collectors;
/**
* (ShareUser)表服务实现类
*
* @author makejava
* @since 2025-01-16 14:50:15
*/
@Slf4j
@Service
public class ShareUserServiceImpl extends ServiceImpl<ShareUserMapper, ShareUser> implements IShareUserService {
@Resource
private ISysUserSyncCategoryService iSysUserSyncCategoryService;
@Resource
private SysUserSyncService iSysUserSyncService;
@Override
public PermissionCheckedDTO findName(String categoryId, String search, String tenantId) {
List<String> categoryList;
PermissionCheckedDTO dto = new PermissionCheckedDTO();
List<ShareUser> shareUsers = baseMapper.selectList(new LambdaQueryWrapper<ShareUser>().eq(ShareUser::getTenantId, tenantId).select(ShareUser::getRelId, ShareUser::getType));
if (CollUtil.isNotEmpty(shareUsers)) {
//分享给租户的所有分享(直接间接)
List<SysUserSyncCategory> cateList = new ArrayList<>();
List<String> cateIds = shareUsers.stream().filter(e -> e.getType() == 0).map(ShareUser::getRelId).collect(Collectors.toList());
//查询超管的所有分类
List<SysUserSyncCategory> allCategoryIds = iSysUserSyncCategoryService.list(new LambdaQueryWrapper<SysUserSyncCategory>()
.eq(SysUserSyncCategory::getTenantId, "1").select(SysUserSyncCategory::getDeptId, SysUserSyncCategory::getParentId));
if (CollUtil.isNotEmpty(allCategoryIds)) {
Map<String, String> map = allCategoryIds.stream().collect(Collectors.toMap(SysUserSyncCategory::getDeptId, SysUserSyncCategory::getParentId));
for (SysUserSyncCategory category : allCategoryIds) {
String path = iSysUserSyncCategoryService.getPath(category.getDeptId(), map);
if (StrUtil.isNotBlank(path)) {
String[] split = path.split("/");
for (int i = split.length - 1; i >= 0; i--) {
if (StrUtil.isNotBlank(split[i]) && cateIds.contains(split[i])) {
cateList.add(category);
break;
}
}
}
}
}
List<String> shareCateIds = cateList.stream().map(SysUserSyncCategory::getDeptId).collect(Collectors.toList());
categoryList = shareCateIds;
List<String> noExitParentIds = new ArrayList<>();
List<String> childrenDeptIds = new ArrayList<>();
if (CategoryConstant.ROOT.equals(categoryId)) {
// 查询分类为ROOT即查询所有找不到parentId的分类
Set<String> map = cateList.stream().map(SysUserSyncCategory::getDeptId).collect(Collectors.toSet());
for (SysUserSyncCategory category : cateList) {
if (!map.contains(category.getParentId())) {
noExitParentIds.add(category.getDeptId());
}
}
} else if (StrUtil.isNotBlank(categoryId)) {
Map<String, List<String>> parentMap = cateList.stream().collect(Collectors.groupingBy(SysUserSyncCategory::getParentId, Collectors.mapping(SysUserSyncCategory::getDeptId, Collectors.toList())));
List<String> children = getChildren(parentMap, categoryId);
childrenDeptIds.add(categoryId);
childrenDeptIds.addAll(children);
}
List<SysUserSyncCategory> list = null;
if (CollUtil.isNotEmpty(categoryList)) {
list = iSysUserSyncCategoryService.list(new LambdaQueryWrapper<SysUserSyncCategory>()
.eq(SysUserSyncCategory::getTenantId, "1")
.in(StrUtil.isNotBlank(search) && StrUtil.isNotBlank(categoryId) && !CategoryConstant.ROOT.equals(categoryId) && CollUtil.isNotEmpty(childrenDeptIds), SysUserSyncCategory::getDeptId, childrenDeptIds)
.in(StrUtil.isBlank(search) && CategoryConstant.ROOT.equals(categoryId) && CollUtil.isNotEmpty(noExitParentIds), SysUserSyncCategory::getDeptId, noExitParentIds)
.eq(StrUtil.isBlank(search) && StrUtil.isNotBlank(categoryId) && !CategoryConstant.ROOT.equals(categoryId), SysUserSyncCategory::getParentId, categoryId)
.like(StrUtil.isNotBlank(search), SysUserSyncCategory::getName, search)
.in(SysUserSyncCategory::getDeptId, categoryList) // 指定分类以及分享的所有分享下
.select(SysUserSyncCategory::getDeptId, SysUserSyncCategory::getName)
.orderByAsc(SysUserSyncCategory::getId));
}
List<PermissionCheckedDTO.Category> cates = new ArrayList<>();
if (CollUtil.isNotEmpty(list)) {
list.forEach(ca -> {
PermissionCheckedDTO.Category category = new PermissionCheckedDTO.Category();
category.setId(ca.getDeptId());
category.setName(ca.getName());
category.setUserType(UserTypeConstant.ADMIN);
cates.add(category);
});
}
dto.setCategoryList(cates);
List<PermissionCheckedDTO.User> users = new ArrayList<>();
//所有直接分享的用户
List<String> userIds = shareUsers.stream().filter(e -> e.getType() == 1).map(ShareUser::getRelId).collect(Collectors.toList());
if (CategoryConstant.ROOT_ID.equals(categoryId)) {
if (StrUtil.isNotBlank(search)) {
users = iSysUserSyncService.findInUserIdsOrShareCateIds(userIds, shareCateIds, "1", search);
} else {
if (CollUtil.isNotEmpty(userIds)) {
users = iSysUserSyncService.findByParam(userIds, null, null, "1", search, null);
}
}
} else {
if (StrUtil.isNotBlank(search)) {
users = iSysUserSyncService.findByParam(null, null, childrenDeptIds, "1", search, null);
} else {
users = iSysUserSyncService.findByParam(null, null, null, "1", search, categoryId);
}
}
if (CollUtil.isNotEmpty(users)) {
for (PermissionCheckedDTO.User user : users) {
user.setUserType(UserTypeConstant.ADMIN);
}
}
dto.setUserList(users);
}
return dto;
}
private List<String> getChildren(Map<String, List<String>> collect, String deptId) {
List<String> ids = new ArrayList<>();
if (collect.containsKey(deptId)) {
List<String> strings = collect.get(deptId);
ids.addAll(strings);
for (String string : strings) {
ids.addAll(getChildren(collect, string));
}
}
return ids;
}
}
package com.cmeeting.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.cmeeting.constant.CategoryConstant;
import com.cmeeting.mapper.secondary.SysUserSyncCategoryMapper;
import com.cmeeting.pojo.SysUserSyncCategory;
import com.cmeeting.service.ISysUserSyncCategoryService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import java.util.Map;
@Slf4j
@Service
public class SysUserSyncCategoryServiceImpl extends ServiceImpl<SysUserSyncCategoryMapper, SysUserSyncCategory> implements ISysUserSyncCategoryService {
@Override
public String getPath(String id, Map<String, String> map) {
if (map.get(id) == null) {
return "";
}
if (map.get(id).equals(CategoryConstant.ROOT_ID)) {
return CategoryConstant.ROOT_PATH + id;
}
return getPath(map.get(id), map) + CategoryConstant.ROOT_PATH + id;
}
}
package com.cmeeting.service.impl;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.cmeeting.ad.entity.RobotSecurityUser;
import com.cmeeting.ad.entity.SysUserSync;
import com.cmeeting.constant.CategoryConstant;
import com.cmeeting.constant.UserTypeConstant;
import com.cmeeting.dto.PermissionCheckedDTO;
import com.cmeeting.mapper.secondary.SysUserSysMapper;
import com.cmeeting.pojo.SysUserSyncCategory;
import com.cmeeting.service.ISysUserSyncCategoryService;
import com.cmeeting.service.SysUserSyncService;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
......@@ -11,8 +19,12 @@ import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.stream.Collectors;
@Service
@Slf4j
......@@ -21,6 +33,9 @@ public class SysUserSyncServiceImpl extends ServiceImpl<SysUserSysMapper, SysUse
@Value(value = "${permission.tenantId}")
private String perTenantId;
@Resource
private ISysUserSyncCategoryService iSysUserSyncCategoryService;
@Override
public String getDeptPathByUserId(String userId) {
SysUserSync sysUserSync = baseMapper.selectOne(new LambdaQueryWrapper<SysUserSync>().eq(SysUserSync::getTenantId, perTenantId).eq(SysUserSync::getUserId, userId));
......@@ -39,4 +54,106 @@ public class SysUserSyncServiceImpl extends ServiceImpl<SysUserSysMapper, SysUse
return "/" + parentDeptId + deptPath;
}
@Override
public PermissionCheckedDTO listByCategoryId(String categoryId, String search, String tenantId) {
PermissionCheckedDTO dto = new PermissionCheckedDTO();
// 顶层分类查询所有parentId不存在的分类及用户
List<String> noExitParentIds = new ArrayList<>();
List<String> childrenDeptIds = new ArrayList<>();
List<SysUserSyncCategory> categories = iSysUserSyncCategoryService.list(new LambdaQueryWrapper<SysUserSyncCategory>().eq(SysUserSyncCategory::getTenantId, tenantId));
if (CategoryConstant.ROOT.equals(categoryId)) {
// 查询分类为ROOT即查询所有找不到parentId的分类
Set<String> map = categories.stream().map(SysUserSyncCategory::getDeptId).collect(Collectors.toSet());
for (SysUserSyncCategory category : categories) {
if (!map.contains(category.getParentId())) {
noExitParentIds.add(category.getDeptId());
}
}
} else if (StrUtil.isNotBlank(categoryId)) {
Map<String, List<String>> parentMap = categories.stream().collect(Collectors.groupingBy(SysUserSyncCategory::getParentId, Collectors.mapping(SysUserSyncCategory::getDeptId, Collectors.toList())));
List<String> children = getChildren(parentMap, categoryId);
childrenDeptIds.add(categoryId);
childrenDeptIds.addAll(children);
}
List<SysUserSyncCategory> list = iSysUserSyncCategoryService.list(new LambdaQueryWrapper<SysUserSyncCategory>()
.eq(SysUserSyncCategory::getTenantId, tenantId)
.in(StrUtil.isNotBlank(search) && StrUtil.isNotBlank(categoryId) && !CategoryConstant.ROOT.equals(categoryId) && CollUtil.isNotEmpty(childrenDeptIds), SysUserSyncCategory::getDeptId, childrenDeptIds)
.in(StrUtil.isBlank(search) && CategoryConstant.ROOT.equals(categoryId) && CollUtil.isNotEmpty(noExitParentIds), SysUserSyncCategory::getDeptId, noExitParentIds)
.eq(StrUtil.isBlank(search) && StrUtil.isNotBlank(categoryId) && !CategoryConstant.ROOT.equals(categoryId), SysUserSyncCategory::getParentId, categoryId)
.like(StrUtil.isNotBlank(search), SysUserSyncCategory::getName, search)
.select(SysUserSyncCategory::getDeptId, SysUserSyncCategory::getName));
List<PermissionCheckedDTO.Category> cates = new ArrayList<>();
list.forEach(ca -> {
PermissionCheckedDTO.Category category = new PermissionCheckedDTO.Category();
category.setId(ca.getDeptId());
category.setName(ca.getName());
category.setUserType(UserTypeConstant.SYNC);
cates.add(category);
});
dto.setCategoryList(cates);
List<PermissionCheckedDTO.User> users;
if (StrUtil.isNotBlank(search)) {
if (CategoryConstant.ROOT_ID.equals(categoryId)) {
users = baseMapper.findName(null, null, search, tenantId, null);
} else {
users = baseMapper.findName(childrenDeptIds, null, search, tenantId, null);
}
} else {
List<String> userList = new ArrayList<>();
List<String> deptIds = categories.stream().map(SysUserSyncCategory::getDeptId).collect(Collectors.toList());
if (CategoryConstant.ROOT_ID.equals(categoryId)) {
List<SysUserSync> sysUserSyncList = this.list(new LambdaQueryWrapper<SysUserSync>()
.eq(SysUserSync::getTenantId, tenantId)
.notIn(CollUtil.isNotEmpty(deptIds), SysUserSync::getDeptId, deptIds)
.select(SysUserSync::getUserId));
if (CollUtil.isNotEmpty(sysUserSyncList)) {
List<String> sysUserSyncIdList = sysUserSyncList.stream().map(SysUserSync::getUserId).collect(Collectors.toList());
userList.addAll(sysUserSyncIdList);
}
if(CollUtil.isNotEmpty(userList)){
users = baseMapper.findName(null, null, search, tenantId, userList);
} else {
users = new ArrayList<>();
}
} else {
users = baseMapper.findName(null, categoryId, search, tenantId, userList);
}
}
if (CollUtil.isNotEmpty(users)) {
for (PermissionCheckedDTO.User user : users) {
user.setUserType(UserTypeConstant.SYNC);
}
}
dto.setUserList(users);
return dto;
}
@Override
public List<PermissionCheckedDTO.User> findInUserIdsOrShareCateIds(List<String> userIds, List<String> shareCateIds, String tenantId, String search) {
return baseMapper.findInUserIdsOrShareCateIds(userIds, shareCateIds, tenantId, search);
}
@Override
public List<PermissionCheckedDTO.User> findByParam(List<String> userIds, List<String> notInCateIds, List<String> shareCateIds, String tenantId, String search, String categoryId) {
return baseMapper.findByParam(userIds, notInCateIds, shareCateIds, tenantId, search, categoryId);
}
private List<String> getChildren(Map<String, List<String>> collect, String deptId) {
List<String> ids = new ArrayList<>();
if (collect.containsKey(deptId)) {
List<String> strings = collect.get(deptId);
ids.addAll(strings);
for (String string : strings) {
ids.addAll(getChildren(collect, string));
}
}
return ids;
}
}
package com.cmeeting.vo;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.jetbrains.annotations.NotNull;
import javax.validation.constraints.NotBlank;
@Data
public class PermissionVO {
/**
* 选择授权页面查询
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
public static class CheckList {
private String search;
@NotBlank
private String categoryId;
@NotNull
private Integer purpose;
@NotNull
private Integer userType;
}
/**
* 以授权用户/部门查询
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
public static class List {
private String search;
@NotNull
private Integer purpose;
}
}
......@@ -35,7 +35,7 @@ EMAIL_SMTP_HOST: smtp.office365.com
############################################################## permission
PERMISSION_APPLiCATION_ID: 1945681039926104064
PERMISSION_TENANT_ID: 1945678078692954112
PERMISSION_ADMIN_WHITE_USERS: 00015545,1945678083671592960
PERMISSION_ADMIN_WHITE_USERS: 00001,1945678083671592960
spring:
......@@ -155,6 +155,6 @@ logging:
level:
com.cmeeting.mapper.primary: TRACE
com.cmeeting.mapper.secondary: TRACE
root: DEBUG
root: INFO
isDev: true
\ No newline at end of file
......@@ -55,4 +55,78 @@
WHERE
susc.tenant_id = #{tenantId}
</select>
<select id="findName" resultType="com.cmeeting.dto.PermissionCheckedDTO$User">
select distinct t1.user_id as id,t1.name,t2.name as deptName
from sys_user_sync t1
left join sys_user_sync_category t2 on t1.dept_id = t2.dept_id and t1.tenant_id = t2.tenant_id
where t1.tenant_id = #{tenantId}
<if test="categoryId != null and categoryId != ''">
and t1.dept_id = #{categoryId}
</if>
<if test="deptIds!=null and deptIds.size > 0">
and t2.dept_id in
<foreach collection="deptIds" open="(" close=")" item="id" separator=",">#{id}</foreach>
</if>
<if test="userList != null and userList.size > 0">
and t1.user_id in
<foreach collection="userList" item="id" close=")" open="(" separator=",">
#{id}
</foreach>
</if>
<if test="search != null and search!=''">
and t1.name like concat('%',#{search},'%')
</if>
</select>
<select id="findInUserIdsOrShareCateIds" resultType="com.cmeeting.dto.PermissionCheckedDTO$User">
select distinct t1.user_id as id,t1.name,t2.name as deptName
from sys_user_sync t1
left join sys_user_sync_category t2 on t1.dept_id = t2.dept_id and t1.tenant_id = t2.tenant_id
where t1.tenant_id = #{tenantId}
and (
t1.user_id in
<foreach collection="userIds" item="id" close=")" open="(" separator=",">
#{id}
</foreach>
or
t1.dept_id in
<foreach collection="shareCateIds" item="id" close=")" open="(" separator=",">
#{id}
</foreach>
)
<if test="search != null and search!=''">
and t1.name like concat('%',#{search},'%')
</if>
</select>
<select id="findByParam" resultType="com.cmeeting.dto.PermissionCheckedDTO$User">
select distinct t1.user_id as id,t1.name,t2.name as deptName
from sys_user_sync t1
left join sys_user_sync_category t2 on t1.dept_id = t2.dept_id and t1.tenant_id = t2.tenant_id
where t1.tenant_id = #{tenantId}
<if test="categoryId != null and categoryId!=''">
and t1.dept_id = #{categoryId}
</if>
<if test="userIds != null and userIds.size > 0">
and t1.user_id in
<foreach collection="userIds" item="id" close=")" open="(" separator=",">
#{id}
</foreach>
</if>
<if test="cateIds != null and cateIds.size > 0">
and t1.dept_id in
<foreach collection="cateIds" item="id" close=")" open="(" separator=",">
#{id}
</foreach>
</if>
<if test="search != null and search!=''">
and t1.name like concat('%',#{search},'%')
</if>
<if test="notInCateIds != null and notInCateIds.size > 0">
and t1.dept_id not in
<foreach collection="notInCateIds" item="id" close=")" open="(" separator=",">
#{id}
</foreach>
</if>
</select>
</mapper>
\ No newline at end of file
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论