✨ 消息通知接收人筛选
This commit is contained in:
@@ -0,0 +1,28 @@
|
||||
package com.hccake.ballcat.admin.constants;
|
||||
|
||||
import lombok.Getter;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
|
||||
/**
|
||||
* 通知接收者筛选类型
|
||||
* @author Hccake 2020/12/21
|
||||
* @version 1.0
|
||||
*/
|
||||
@Getter
|
||||
@RequiredArgsConstructor
|
||||
public enum NotifyRecipientFilterType {
|
||||
|
||||
// 全部
|
||||
ALL(1),
|
||||
// 指定用户
|
||||
SPECIFY_ROLE(2),
|
||||
// 指定组织
|
||||
SPECIFY_ORGANIZATION(3),
|
||||
// 指定用户类型
|
||||
SPECIFY_USER_TYPE(4),
|
||||
// 指定用户
|
||||
SPECIFY_USER(5),;
|
||||
|
||||
private final int value;
|
||||
|
||||
}
|
||||
@@ -3,13 +3,13 @@ package com.hccake.ballcat.admin.modules.notify.listener;
|
||||
import com.hccake.ballcat.admin.modules.notify.event.AnnouncementPublishEvent;
|
||||
import com.hccake.ballcat.admin.modules.notify.model.entity.Announcement;
|
||||
import com.hccake.ballcat.admin.modules.notify.push.NotifyPushRunner;
|
||||
import com.hccake.ballcat.admin.modules.notify.recipient.RecipientHandler;
|
||||
import com.hccake.ballcat.admin.modules.sys.model.entity.SysUser;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.context.event.EventListener;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
@@ -23,6 +23,8 @@ import java.util.List;
|
||||
@RequiredArgsConstructor
|
||||
public class AnnouncementEventListener {
|
||||
|
||||
private final RecipientHandler recipientHandler;
|
||||
|
||||
private final NotifyPushRunner notifyPusherRunner;
|
||||
|
||||
/**
|
||||
@@ -33,11 +35,11 @@ public class AnnouncementEventListener {
|
||||
public void onAnnouncementPublishEvent(AnnouncementPublishEvent event) {
|
||||
Announcement announcement = event.getAnnouncement();
|
||||
|
||||
// TODO 根据接收人条件筛选
|
||||
List<SysUser> userList = new ArrayList<>();
|
||||
SysUser sysUser = new SysUser();
|
||||
sysUser.setEmail("chengbohua@foxmail.com");
|
||||
userList.add(sysUser);
|
||||
// 获取通知接收人
|
||||
Integer recipientFilterType = announcement.getRecipientFilterType();
|
||||
List<Object> recipientFilterCondition = announcement.getRecipientFilterCondition();
|
||||
List<SysUser> userList = recipientHandler.query(recipientFilterType, recipientFilterCondition);
|
||||
log.trace("公告接收用户:[{}]", userList);
|
||||
|
||||
// 推送通知
|
||||
notifyPusherRunner.run(announcement, userList, announcement.getReceiveMode());
|
||||
|
||||
@@ -0,0 +1,41 @@
|
||||
package com.hccake.ballcat.admin.modules.notify.recipient;
|
||||
|
||||
import com.hccake.ballcat.admin.constants.NotifyRecipientFilterType;
|
||||
import com.hccake.ballcat.admin.modules.sys.model.entity.SysUser;
|
||||
import com.hccake.ballcat.admin.modules.sys.service.SysUserService;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @author Hccake 2020/12/21
|
||||
* @version 1.0
|
||||
*/
|
||||
@Component
|
||||
@RequiredArgsConstructor
|
||||
public class AllRecipientFilter implements RecipientFilter {
|
||||
|
||||
private final SysUserService sysUserService;
|
||||
|
||||
/**
|
||||
* 当前筛选器对应的筛选类型
|
||||
* @return 筛选类型对应的标识
|
||||
* @see NotifyRecipientFilterType
|
||||
*/
|
||||
@Override
|
||||
public Integer filterType() {
|
||||
return NotifyRecipientFilterType.ALL.getValue();
|
||||
}
|
||||
|
||||
/**
|
||||
* 接收者筛选
|
||||
* @param filterCondition 筛选条件
|
||||
* @return 接收者集合
|
||||
*/
|
||||
@Override
|
||||
public List<SysUser> filter(List<Object> filterCondition) {
|
||||
return sysUserService.list();
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,29 @@
|
||||
package com.hccake.ballcat.admin.modules.notify.recipient;
|
||||
|
||||
import com.hccake.ballcat.admin.modules.sys.model.entity.SysUser;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 接收者筛选器
|
||||
*
|
||||
* @author Hccake 2020/12/21
|
||||
* @version 1.0
|
||||
*/
|
||||
public interface RecipientFilter {
|
||||
|
||||
/**
|
||||
* 当前筛选器对应的筛选类型
|
||||
* @see com.hccake.ballcat.admin.constants.NotifyRecipientFilterType
|
||||
* @return 筛选类型对应的标识
|
||||
*/
|
||||
Integer filterType();
|
||||
|
||||
/**
|
||||
* 接收者筛选
|
||||
* @param filterCondition 筛选条件
|
||||
* @return 接收者集合
|
||||
*/
|
||||
List<SysUser> filter(List<Object> filterCondition);
|
||||
|
||||
}
|
||||
@@ -0,0 +1,37 @@
|
||||
package com.hccake.ballcat.admin.modules.notify.recipient;
|
||||
|
||||
import com.hccake.ballcat.admin.modules.sys.model.entity.SysUser;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.LinkedHashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* @author Hccake 2020/12/21
|
||||
* @version 1.0
|
||||
*/
|
||||
@Slf4j
|
||||
@Component
|
||||
public class RecipientHandler {
|
||||
|
||||
private final Map<Integer, RecipientFilter> recipientFilterMap = new LinkedHashMap<>();
|
||||
|
||||
public RecipientHandler(List<RecipientFilter> recipientFilterList) {
|
||||
for (RecipientFilter recipientFilter : recipientFilterList) {
|
||||
this.recipientFilterMap.put(recipientFilter.filterType(), recipientFilter);
|
||||
}
|
||||
}
|
||||
|
||||
public List<SysUser> query(Integer filterType, List<Object> filterCondition) {
|
||||
RecipientFilter recipientFilter = recipientFilterMap.get(filterType);
|
||||
if (recipientFilter == null) {
|
||||
log.error("Unknown recipient filter:[{}],filterCondition:{}", filterType, filterCondition);
|
||||
return new ArrayList<>();
|
||||
}
|
||||
return recipientFilter.filter(filterCondition);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,43 @@
|
||||
package com.hccake.ballcat.admin.modules.notify.recipient;
|
||||
|
||||
import com.hccake.ballcat.admin.constants.NotifyRecipientFilterType;
|
||||
import com.hccake.ballcat.admin.modules.sys.model.entity.SysUser;
|
||||
import com.hccake.ballcat.admin.modules.sys.service.SysUserService;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
* @author Hccake 2020/12/21
|
||||
* @version 1.0
|
||||
*/
|
||||
@Component
|
||||
@RequiredArgsConstructor
|
||||
public class SpecifyOrganizationRecipientFilter implements RecipientFilter {
|
||||
|
||||
private final SysUserService sysUserService;
|
||||
|
||||
/**
|
||||
* 当前筛选器对应的筛选类型
|
||||
* @return 筛选类型对应的标识
|
||||
* @see NotifyRecipientFilterType
|
||||
*/
|
||||
@Override
|
||||
public Integer filterType() {
|
||||
return NotifyRecipientFilterType.SPECIFY_ORGANIZATION.getValue();
|
||||
}
|
||||
|
||||
/**
|
||||
* 接收者筛选
|
||||
* @param filterCondition 筛选条件
|
||||
* @return 接收者集合
|
||||
*/
|
||||
@Override
|
||||
public List<SysUser> filter(List<Object> filterCondition) {
|
||||
List<Integer> organizationIds = filterCondition.stream().map(x -> (Integer) x).collect(Collectors.toList());
|
||||
return sysUserService.selectUsersByOrganizationIds(organizationIds);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,43 @@
|
||||
package com.hccake.ballcat.admin.modules.notify.recipient;
|
||||
|
||||
import com.hccake.ballcat.admin.constants.NotifyRecipientFilterType;
|
||||
import com.hccake.ballcat.admin.modules.sys.model.entity.SysUser;
|
||||
import com.hccake.ballcat.admin.modules.sys.service.SysUserService;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
* @author Hccake 2020/12/21
|
||||
* @version 1.0
|
||||
*/
|
||||
@Component
|
||||
@RequiredArgsConstructor
|
||||
public class SpecifyRoleRecipientFilter implements RecipientFilter {
|
||||
|
||||
private final SysUserService sysUserService;
|
||||
|
||||
/**
|
||||
* 当前筛选器对应的筛选类型
|
||||
* @return 筛选类型对应的标识
|
||||
* @see NotifyRecipientFilterType
|
||||
*/
|
||||
@Override
|
||||
public Integer filterType() {
|
||||
return NotifyRecipientFilterType.SPECIFY_ROLE.getValue();
|
||||
}
|
||||
|
||||
/**
|
||||
* 接收者筛选
|
||||
* @param filterCondition 筛选条件
|
||||
* @return 接收者集合
|
||||
*/
|
||||
@Override
|
||||
public List<SysUser> filter(List<Object> filterCondition) {
|
||||
List<String> roleCodes = filterCondition.stream().map(x -> (String) x).collect(Collectors.toList());
|
||||
return sysUserService.selectUsersByRoleCodes(roleCodes);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,43 @@
|
||||
package com.hccake.ballcat.admin.modules.notify.recipient;
|
||||
|
||||
import com.hccake.ballcat.admin.constants.NotifyRecipientFilterType;
|
||||
import com.hccake.ballcat.admin.modules.sys.model.entity.SysUser;
|
||||
import com.hccake.ballcat.admin.modules.sys.service.SysUserService;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
* @author Hccake 2020/12/21
|
||||
* @version 1.0
|
||||
*/
|
||||
@Component
|
||||
@RequiredArgsConstructor
|
||||
public class SpecifyUserRecipientFilter implements RecipientFilter {
|
||||
|
||||
private final SysUserService sysUserService;
|
||||
|
||||
/**
|
||||
* 当前筛选器对应的筛选类型
|
||||
* @return 筛选类型对应的标识
|
||||
* @see NotifyRecipientFilterType
|
||||
*/
|
||||
@Override
|
||||
public Integer filterType() {
|
||||
return NotifyRecipientFilterType.SPECIFY_USER.getValue();
|
||||
}
|
||||
|
||||
/**
|
||||
* 接收者筛选
|
||||
* @param filterCondition 筛选条件 用户ID集合
|
||||
* @return 接收者集合
|
||||
*/
|
||||
@Override
|
||||
public List<SysUser> filter(List<Object> filterCondition) {
|
||||
List<Integer> userIds = filterCondition.stream().map(x -> (Integer) x).collect(Collectors.toList());
|
||||
return sysUserService.selectUsersByUserIds(userIds);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,43 @@
|
||||
package com.hccake.ballcat.admin.modules.notify.recipient;
|
||||
|
||||
import com.hccake.ballcat.admin.constants.NotifyRecipientFilterType;
|
||||
import com.hccake.ballcat.admin.modules.sys.model.entity.SysUser;
|
||||
import com.hccake.ballcat.admin.modules.sys.service.SysUserService;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
* @author Hccake 2020/12/21
|
||||
* @version 1.0
|
||||
*/
|
||||
@Component
|
||||
@RequiredArgsConstructor
|
||||
public class SpecifyUserTypeRecipientFilter implements RecipientFilter {
|
||||
|
||||
private final SysUserService sysUserService;
|
||||
|
||||
/**
|
||||
* 当前筛选器对应的筛选类型
|
||||
* @return 筛选类型对应的标识
|
||||
* @see NotifyRecipientFilterType
|
||||
*/
|
||||
@Override
|
||||
public Integer filterType() {
|
||||
return NotifyRecipientFilterType.SPECIFY_USER_TYPE.getValue();
|
||||
}
|
||||
|
||||
/**
|
||||
* 接收者筛选
|
||||
* @param filterCondition 筛选条件
|
||||
* @return 接收者集合
|
||||
*/
|
||||
@Override
|
||||
public List<SysUser> filter(List<Object> filterCondition) {
|
||||
List<Integer> userTypes = filterCondition.stream().map(x -> (Integer) x).collect(Collectors.toList());
|
||||
return sysUserService.selectUsersByUserTypes(userTypes);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -28,10 +28,10 @@ public interface SysUserMapper extends BaseMapper<SysUser> {
|
||||
|
||||
/**
|
||||
* 根据RoleCode 查询对应用户
|
||||
* @param roleCode 角色标识
|
||||
* @param roleCodes 角色标识
|
||||
* @return List<SysUser> 该角色标识对应的用户列表
|
||||
*/
|
||||
List<SysUser> selectUsersByRoleCode(String roleCode);
|
||||
List<SysUser> selectUsersByRoleCodes(@Param("roleCodes") List<String> roleCodes);
|
||||
|
||||
/**
|
||||
* 返回用户的select数据 name=> username value => userId
|
||||
|
||||
@@ -4,9 +4,9 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
import com.baomidou.mybatisplus.extension.service.IService;
|
||||
import com.hccake.ballcat.admin.modules.sys.model.dto.SysUserDTO;
|
||||
import com.hccake.ballcat.admin.modules.sys.model.dto.SysUserScope;
|
||||
import com.hccake.ballcat.admin.modules.sys.model.dto.UserInfoDTO;
|
||||
import com.hccake.ballcat.admin.modules.sys.model.entity.SysUser;
|
||||
import com.hccake.ballcat.admin.modules.sys.model.qo.SysUserQO;
|
||||
import com.hccake.ballcat.admin.modules.sys.model.dto.UserInfoDTO;
|
||||
import com.hccake.ballcat.admin.modules.sys.model.vo.SysUserVO;
|
||||
import com.hccake.ballcat.common.core.vo.SelectData;
|
||||
import org.springframework.web.multipart.MultipartFile;
|
||||
@@ -105,6 +105,34 @@ public interface SysUserService extends IService<SysUser> {
|
||||
*/
|
||||
List<SysUser> selectUsersByRoleCode(String roleCode);
|
||||
|
||||
/**
|
||||
* 根据角色查询用户
|
||||
* @param roleCodes 角色标识集合
|
||||
* @return List<SysUser> 用户集合
|
||||
*/
|
||||
List<SysUser> selectUsersByRoleCodes(List<String> roleCodes);
|
||||
|
||||
/**
|
||||
* 根据组织机构ID查询用户
|
||||
* @param organizationIds 组织机构id集合
|
||||
* @return 用户集合
|
||||
*/
|
||||
List<SysUser> selectUsersByOrganizationIds(List<Integer> organizationIds);
|
||||
|
||||
/**
|
||||
* 根据用户类型查询用户
|
||||
* @param userTypes 用户类型集合
|
||||
* @return 用户集合
|
||||
*/
|
||||
List<SysUser> selectUsersByUserTypes(List<Integer> userTypes);
|
||||
|
||||
/**
|
||||
* 根据用户Id集合查询用户
|
||||
* @param userIds 用户Id集合
|
||||
* @return 用户集合
|
||||
*/
|
||||
List<SysUser> selectUsersByUserIds(List<Integer> userIds);
|
||||
|
||||
/**
|
||||
* 返回用户的select数据
|
||||
* @param type 为空时返回所有客户为1返回系统客户 name=> username value => userId
|
||||
|
||||
@@ -274,7 +274,47 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
|
||||
*/
|
||||
@Override
|
||||
public List<SysUser> selectUsersByRoleCode(String roleCode) {
|
||||
return baseMapper.selectUsersByRoleCode(roleCode);
|
||||
return selectUsersByRoleCodes(Collections.singletonList(roleCode));
|
||||
}
|
||||
|
||||
/**
|
||||
* 根据角色查询用户
|
||||
* @param roleCodes 角色标识集合
|
||||
* @return List<SysUser>
|
||||
*/
|
||||
@Override
|
||||
public List<SysUser> selectUsersByRoleCodes(List<String> roleCodes) {
|
||||
return baseMapper.selectUsersByRoleCodes(roleCodes);
|
||||
}
|
||||
|
||||
/**
|
||||
* 根据组织机构ID查询用户
|
||||
* @param organizationIds 组织机构id集合
|
||||
* @return 用户集合
|
||||
*/
|
||||
@Override
|
||||
public List<SysUser> selectUsersByOrganizationIds(List<Integer> organizationIds) {
|
||||
return baseMapper.selectList(Wrappers.<SysUser>lambdaQuery().in(SysUser::getOrganizationId, organizationIds));
|
||||
}
|
||||
|
||||
/**
|
||||
* 根据用户类型查询用户
|
||||
* @param userTypes 用户类型集合
|
||||
* @return 用户集合
|
||||
*/
|
||||
@Override
|
||||
public List<SysUser> selectUsersByUserTypes(List<Integer> userTypes) {
|
||||
return baseMapper.selectList(Wrappers.<SysUser>lambdaQuery().in(SysUser::getType, userTypes));
|
||||
}
|
||||
|
||||
/**
|
||||
* 根据用户Id集合查询用户
|
||||
* @param userIds 用户Id集合
|
||||
* @return 用户集合
|
||||
*/
|
||||
@Override
|
||||
public List<SysUser> selectUsersByUserIds(List<Integer> userIds) {
|
||||
return baseMapper.selectList(Wrappers.<SysUser>lambdaQuery().in(SysUser::getUserId, userIds));
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -3,7 +3,10 @@
|
||||
<mapper namespace="com.hccake.ballcat.admin.modules.sys.mapper.SysUserMapper">
|
||||
|
||||
<sql id="Base_Alias_Column_List">
|
||||
su.user_id,
|
||||
su
|
||||
.
|
||||
user_id
|
||||
,
|
||||
su.username,
|
||||
su.nickname,
|
||||
su.avatar,
|
||||
@@ -23,26 +26,28 @@
|
||||
, so.name as organization_name
|
||||
FROM sys_user su
|
||||
LEFT JOIN
|
||||
sys_organization so
|
||||
sys_organization so
|
||||
ON su.organization_id = so.id
|
||||
${ew.customSqlSegment}
|
||||
</select>
|
||||
|
||||
<!-- 通过用户ID查询其关联的角色ID-->
|
||||
<select id="selectUsersByRoleCode" resultType="com.hccake.ballcat.admin.modules.sys.model.entity.SysUser">
|
||||
SELECT
|
||||
<select id="selectUsersByRoleCodes" resultType="com.hccake.ballcat.admin.modules.sys.model.entity.SysUser">
|
||||
SELECT
|
||||
<include refid="Base_Alias_Column_List"/>
|
||||
FROM
|
||||
sys_user su
|
||||
FROM
|
||||
sys_user su
|
||||
left join
|
||||
sys_user_role ur
|
||||
on su.user_id = ur.user_id
|
||||
left join
|
||||
sys_role r
|
||||
on r.code = ur.role_code
|
||||
WHERE r.`code` = #{0}
|
||||
and su.deleted = 0
|
||||
</select>
|
||||
sys_user_role ur
|
||||
on su.user_id = ur.user_id
|
||||
WHERE
|
||||
ur.`role_code`
|
||||
in
|
||||
<foreach collection="roleCodes" item="roleCode" separator="," open="(" close=")">
|
||||
#{roleCode}
|
||||
</foreach>
|
||||
and su.deleted = 0
|
||||
</select>
|
||||
|
||||
<select id="getSelectData" resultType="com.hccake.ballcat.common.core.vo.SelectData">
|
||||
select
|
||||
@@ -58,6 +63,4 @@
|
||||
</foreach>
|
||||
</if>
|
||||
</select>
|
||||
|
||||
|
||||
</mapper>
|
||||
|
||||
Reference in New Issue
Block a user