Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
C
cmeeting
概览
概览
详情
活动
周期分析
版本库
存储库
文件
提交
分支
标签
贡献者
分支图
比较
统计图
问题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程表
图表
维基
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
Issue Boards
Open sidebar
翟斌
cmeeting
Commits
1d3d592c
提交
1d3d592c
authored
7月 17, 2025
作者:
洪东保
浏览文件
操作
浏览文件
下载
差异文件
Merge branch 'hongdongbao'
父级
1c367187
b33c9eef
隐藏空白字符变更
内嵌
并排
正在显示
24 个修改的文件
包含
800 行增加
和
14 行删除
+800
-14
pom.xml
+5
-0
src/main/java/com/cmeeting/ad/service/impl/DetailsServiceImpl.java
+2
-2
src/main/java/com/cmeeting/constant/CategoryConstant.java
+1
-0
src/main/java/com/cmeeting/constant/LoginUserConstant.java
+0
-10
src/main/java/com/cmeeting/constant/PermissionPruposeType.java
+8
-0
src/main/java/com/cmeeting/constant/UserTypeConstant.java
+23
-0
src/main/java/com/cmeeting/controller/PermissionController.java
+25
-0
src/main/java/com/cmeeting/dto/PermissionCheckedDTO.java
+38
-0
src/main/java/com/cmeeting/mapper/secondary/ShareUserMapper.java
+18
-0
src/main/java/com/cmeeting/mapper/secondary/SysUserSyncCategoryMapper.java
+7
-0
src/main/java/com/cmeeting/mapper/secondary/SysUserSysMapper.java
+10
-0
src/main/java/com/cmeeting/pojo/ShareUser.java
+80
-0
src/main/java/com/cmeeting/pojo/SysUserSyncCategory.java
+73
-0
src/main/java/com/cmeeting/service/IShareUserService.java
+20
-0
src/main/java/com/cmeeting/service/ISysUserSyncCategoryService.java
+19
-0
src/main/java/com/cmeeting/service/ModulePermissionService.java
+4
-0
src/main/java/com/cmeeting/service/SysUserSyncService.java
+10
-0
src/main/java/com/cmeeting/service/impl/ModulePermissionServiceImpl.java
+26
-0
src/main/java/com/cmeeting/service/impl/ShareUserServiceImpl.java
+163
-0
src/main/java/com/cmeeting/service/impl/SysUserSyncCategoryServiceImpl.java
+28
-0
src/main/java/com/cmeeting/service/impl/SysUserSyncServiceImpl.java
+117
-0
src/main/java/com/cmeeting/vo/PermissionVO.java
+45
-0
src/main/resources/application.yml
+3
-2
src/main/resources/mapper/secondary/SysUserSysMapper.xml
+75
-0
没有找到文件。
pom.xml
浏览文件 @
1d3d592c
...
...
@@ -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>
...
...
src/main/java/com/cmeeting/ad/service/impl/DetailsServiceImpl.java
浏览文件 @
1d3d592c
...
...
@@ -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"
);
...
...
src/main/java/com/cmeeting/constant/CategoryConstant.java
浏览文件 @
1d3d592c
...
...
@@ -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
*/
...
...
src/main/java/com/cmeeting/constant/LoginUserConstant.java
deleted
100644 → 0
浏览文件 @
1c367187
package
com
.
cmeeting
.
constant
;
/**
* 登录的用户类型
*/
public
interface
LoginUserConstant
{
Integer
SYS
=
0
;
Integer
APPLICATION
=
1
;
Integer
SYNC
=
2
;
}
src/main/java/com/cmeeting/constant/PermissionPruposeType.java
0 → 100644
浏览文件 @
1d3d592c
package
com
.
cmeeting
.
constant
;
public
interface
PermissionPruposeType
{
Integer
ADMIN_AUTH
=
0
;
// 超管授权纪要功能
Integer
TEMPLATE_TYPE_PERMISSION
=
1
;
//纪要类型分享
Integer
TEMPLATE_PERMISSION
=
2
;
//纪要模板分享
Integer
PERSONAL_CLOSE
=
3
;
//用户自己关闭纪要功能
}
src/main/java/com/cmeeting/constant/UserTypeConstant.java
0 → 100644
浏览文件 @
1d3d592c
package
com
.
cmeeting
.
constant
;
/**
* 登录的用户类型
*/
public
interface
UserTypeConstant
{
// /**
// * 系统用户
// */
// int SYS = 0;
// /**
// * 应用用户
// */
// int APPLICATION = 1;
/**
* 同步用户
*/
int
SYNC
=
2
;
/**
* 超管分享
*/
int
ADMIN
=
3
;
}
src/main/java/com/cmeeting/controller/PermissionController.java
0 → 100644
浏览文件 @
1d3d592c
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
()));
}
}
src/main/java/com/cmeeting/dto/PermissionCheckedDTO.java
0 → 100644
浏览文件 @
1d3d592c
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
;
}
}
src/main/java/com/cmeeting/mapper/secondary/ShareUserMapper.java
0 → 100644
浏览文件 @
1d3d592c
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
>
{
}
src/main/java/com/cmeeting/mapper/secondary/SysUserSyncCategoryMapper.java
0 → 100644
浏览文件 @
1d3d592c
package
com
.
cmeeting
.
mapper
.
secondary
;
import
com.baomidou.mybatisplus.core.mapper.BaseMapper
;
import
com.cmeeting.pojo.SysUserSyncCategory
;
public
interface
SysUserSyncCategoryMapper
extends
BaseMapper
<
SysUserSyncCategory
>
{
}
src/main/java/com/cmeeting/mapper/secondary/SysUserSysMapper.java
浏览文件 @
1d3d592c
...
...
@@ -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
);
}
src/main/java/com/cmeeting/pojo/ShareUser.java
0 → 100644
浏览文件 @
1d3d592c
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
;
}
src/main/java/com/cmeeting/pojo/SysUserSyncCategory.java
0 → 100644
浏览文件 @
1d3d592c
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
;
}
src/main/java/com/cmeeting/service/IShareUserService.java
0 → 100644
浏览文件 @
1d3d592c
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
);
}
src/main/java/com/cmeeting/service/ISysUserSyncCategoryService.java
0 → 100644
浏览文件 @
1d3d592c
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
);
}
src/main/java/com/cmeeting/service/ModulePermissionService.java
浏览文件 @
1d3d592c
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
);
}
src/main/java/com/cmeeting/service/SysUserSyncService.java
浏览文件 @
1d3d592c
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
);
}
src/main/java/com/cmeeting/service/impl/ModulePermissionServiceImpl.java
浏览文件 @
1d3d592c
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
;
}
}
...
...
src/main/java/com/cmeeting/service/impl/ShareUserServiceImpl.java
0 → 100644
浏览文件 @
1d3d592c
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
;
}
}
src/main/java/com/cmeeting/service/impl/SysUserSyncCategoryServiceImpl.java
0 → 100644
浏览文件 @
1d3d592c
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
;
}
}
src/main/java/com/cmeeting/service/impl/SysUserSyncServiceImpl.java
浏览文件 @
1d3d592c
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
;
}
}
src/main/java/com/cmeeting/vo/PermissionVO.java
0 → 100644
浏览文件 @
1d3d592c
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
;
}
}
src/main/resources/application.yml
浏览文件 @
1d3d592c
...
...
@@ -35,7 +35,7 @@ EMAIL_SMTP_HOST: smtp.office365.com
############################################################## permission
PERMISSION_APPLiCATION_ID
:
1945681039926104064
PERMISSION_TENANT_ID
:
1945678078692954112
PERMISSION_ADMIN_WHITE_USERS
:
000
15545
,1945678083671592960
PERMISSION_ADMIN_WHITE_USERS
:
000
01
,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
src/main/resources/mapper/secondary/SysUserSysMapper.xml
浏览文件 @
1d3d592c
...
...
@@ -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
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论