mirror of https://gitee.com/stylefeng/roses
【8.1.0】【notice】发送系统通知打通发送个人消息
parent
9f284f1867
commit
9ad569cdae
|
@ -0,0 +1,78 @@
|
|||
/*
|
||||
* Copyright [2020-2030] [https://www.stylefeng.cn]
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*
|
||||
* Guns采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
|
||||
*
|
||||
* 1.请不要删除和修改根目录下的LICENSE文件。
|
||||
* 2.请不要删除和修改Guns源码头部的版权声明。
|
||||
* 3.请保留源码和相关描述文件的项目出处,作者声明等。
|
||||
* 4.分发源码时候,请注明软件出处 https://gitee.com/stylefeng/guns
|
||||
* 5.在修改包名,模块名称,项目代码等时,请注明软件出处 https://gitee.com/stylefeng/guns
|
||||
* 6.若您的项目无法满足以上几点,可申请商业授权
|
||||
*/
|
||||
package cn.stylefeng.roses.kernel.sys.api.enums.message;
|
||||
|
||||
import cn.hutool.core.util.ObjectUtil;
|
||||
import cn.stylefeng.roses.kernel.rule.base.ReadableEnum;
|
||||
import lombok.Getter;
|
||||
|
||||
/**
|
||||
* 消息的业务类型枚举
|
||||
* <p>
|
||||
* 当前只有一个系统通知
|
||||
*
|
||||
* @author fengshuonan
|
||||
* @since 2024/1/14 22:55
|
||||
*/
|
||||
@Getter
|
||||
public enum MessageBusinessTypeEnum implements ReadableEnum<MessageBusinessTypeEnum> {
|
||||
|
||||
/**
|
||||
* 系统通知
|
||||
*/
|
||||
SYS_NOTICE("SYS_NOTICE", "系统通知");
|
||||
|
||||
private final String code;
|
||||
|
||||
private final String message;
|
||||
|
||||
MessageBusinessTypeEnum(String code, String message) {
|
||||
this.code = code;
|
||||
this.message = message;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Object getKey() {
|
||||
return this.code;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Object getName() {
|
||||
return this.message;
|
||||
}
|
||||
|
||||
@Override
|
||||
public MessageBusinessTypeEnum parseToEnum(String originValue) {
|
||||
if (ObjectUtil.isEmpty(originValue)) {
|
||||
return null;
|
||||
}
|
||||
for (MessageBusinessTypeEnum value : MessageBusinessTypeEnum.values()) {
|
||||
if (value.code.equals(originValue)) {
|
||||
return value;
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,81 @@
|
|||
/*
|
||||
* Copyright [2020-2030] [https://www.stylefeng.cn]
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*
|
||||
* Guns采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
|
||||
*
|
||||
* 1.请不要删除和修改根目录下的LICENSE文件。
|
||||
* 2.请不要删除和修改Guns源码头部的版权声明。
|
||||
* 3.请保留源码和相关描述文件的项目出处,作者声明等。
|
||||
* 4.分发源码时候,请注明软件出处 https://gitee.com/stylefeng/guns
|
||||
* 5.在修改包名,模块名称,项目代码等时,请注明软件出处 https://gitee.com/stylefeng/guns
|
||||
* 6.若您的项目无法满足以上几点,可申请商业授权
|
||||
*/
|
||||
package cn.stylefeng.roses.kernel.sys.api.enums.message;
|
||||
|
||||
import cn.hutool.core.util.ObjectUtil;
|
||||
import cn.stylefeng.roses.kernel.rule.base.ReadableEnum;
|
||||
import lombok.Getter;
|
||||
|
||||
/**
|
||||
* 消息类型的枚举
|
||||
*
|
||||
* @author fengshuonan
|
||||
* @since 2024/1/14 22:53
|
||||
*/
|
||||
@Getter
|
||||
public enum MessageTypeEnum implements ReadableEnum<MessageTypeEnum> {
|
||||
|
||||
/**
|
||||
* 普通类型
|
||||
*/
|
||||
NORMAL("NORMAL", "普通类型"),
|
||||
|
||||
/**
|
||||
* 带链接跳转
|
||||
*/
|
||||
URL("URL", "带链接跳转");
|
||||
|
||||
private final String code;
|
||||
|
||||
private final String message;
|
||||
|
||||
MessageTypeEnum(String code, String message) {
|
||||
this.code = code;
|
||||
this.message = message;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Object getKey() {
|
||||
return this.code;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Object getName() {
|
||||
return this.message;
|
||||
}
|
||||
|
||||
@Override
|
||||
public MessageTypeEnum parseToEnum(String originValue) {
|
||||
if (ObjectUtil.isEmpty(originValue)) {
|
||||
return null;
|
||||
}
|
||||
for (MessageTypeEnum value : MessageTypeEnum.values()) {
|
||||
if (value.code.equals(originValue)) {
|
||||
return value;
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,43 @@
|
|||
package cn.stylefeng.roses.kernel.sys.modular.notice.factory;
|
||||
|
||||
import cn.stylefeng.roses.kernel.sys.api.enums.message.MessageBusinessTypeEnum;
|
||||
import cn.stylefeng.roses.kernel.sys.api.enums.message.MessageTypeEnum;
|
||||
import cn.stylefeng.roses.kernel.sys.api.pojo.message.MessageSendDTO;
|
||||
import cn.stylefeng.roses.kernel.sys.modular.notice.entity.SysNotice;
|
||||
|
||||
import java.util.Set;
|
||||
|
||||
/**
|
||||
* 通知的创建工厂
|
||||
*
|
||||
* @author fengshuonan
|
||||
* @since 2024/1/14 22:47
|
||||
*/
|
||||
public class NoticeFactory {
|
||||
|
||||
/**
|
||||
* 创建消息发送的参数封装
|
||||
*
|
||||
* @author fengshuonan
|
||||
* @since 2024/1/14 22:47
|
||||
*/
|
||||
public static MessageSendDTO createMessageSendDTO(Set<Long> userIdList, SysNotice noticeInfo) {
|
||||
MessageSendDTO messageSendDTO = new MessageSendDTO();
|
||||
|
||||
messageSendDTO.setUserIdList(userIdList);
|
||||
messageSendDTO.setSendUserId(noticeInfo.getCreateUser());
|
||||
messageSendDTO.setMessageTitle(noticeInfo.getNoticeTitle());
|
||||
messageSendDTO.setMessageContent(noticeInfo.getNoticeContent());
|
||||
messageSendDTO.setMessageType(MessageTypeEnum.NORMAL.getMessage());
|
||||
|
||||
// 优先级
|
||||
messageSendDTO.setPriorityLevel(noticeInfo.getPriorityLevel());
|
||||
|
||||
// 业务类型:系统通知
|
||||
messageSendDTO.setBusinessType(MessageBusinessTypeEnum.SYS_NOTICE.getMessage());
|
||||
messageSendDTO.setBusinessId(String.valueOf(noticeInfo.getNoticeId()));
|
||||
|
||||
return messageSendDTO;
|
||||
}
|
||||
|
||||
}
|
|
@ -7,9 +7,13 @@ import cn.stylefeng.roses.kernel.db.api.factory.PageResultFactory;
|
|||
import cn.stylefeng.roses.kernel.db.api.pojo.entity.BaseEntity;
|
||||
import cn.stylefeng.roses.kernel.db.api.pojo.page.PageResult;
|
||||
import cn.stylefeng.roses.kernel.rule.exception.base.ServiceException;
|
||||
import cn.stylefeng.roses.kernel.rule.pojo.dict.SimpleDict;
|
||||
import cn.stylefeng.roses.kernel.sys.api.MessagePublishApi;
|
||||
import cn.stylefeng.roses.kernel.sys.api.SysUserOrgServiceApi;
|
||||
import cn.stylefeng.roses.kernel.sys.api.enums.notice.NoticePublishStatusEnum;
|
||||
import cn.stylefeng.roses.kernel.sys.modular.notice.entity.SysNotice;
|
||||
import cn.stylefeng.roses.kernel.sys.modular.notice.enums.SysNoticeExceptionEnum;
|
||||
import cn.stylefeng.roses.kernel.sys.modular.notice.factory.NoticeFactory;
|
||||
import cn.stylefeng.roses.kernel.sys.modular.notice.mapper.SysNoticeMapper;
|
||||
import cn.stylefeng.roses.kernel.sys.modular.notice.pojo.NoticeUserScope;
|
||||
import cn.stylefeng.roses.kernel.sys.modular.notice.pojo.request.SysNoticeRequest;
|
||||
|
@ -20,7 +24,11 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
|||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import java.util.LinkedHashSet;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
* 通知管理业务实现层
|
||||
|
@ -31,6 +39,12 @@ import java.util.List;
|
|||
@Service
|
||||
public class SysNoticeServiceImpl extends ServiceImpl<SysNoticeMapper, SysNotice> implements SysNoticeService {
|
||||
|
||||
@Resource
|
||||
private MessagePublishApi messagePublishApi;
|
||||
|
||||
@Resource
|
||||
private SysUserOrgServiceApi sysUserOrgServiceApi;
|
||||
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void add(SysNoticeRequest sysNoticeRequest) {
|
||||
|
@ -90,7 +104,8 @@ public class SysNoticeServiceImpl extends ServiceImpl<SysNoticeMapper, SysNotice
|
|||
LambdaQueryWrapper<SysNotice> wrapper = createWrapper(sysNoticeRequest);
|
||||
|
||||
// 只查询需要的字段
|
||||
wrapper.select(SysNotice::getNoticeId, SysNotice::getNoticeTitle, SysNotice::getPublishStatus, SysNotice::getPriorityLevel, SysNotice::getNoticeBeginTime,
|
||||
wrapper.select(SysNotice::getNoticeId, SysNotice::getNoticeTitle, SysNotice::getPublishStatus, SysNotice::getPriorityLevel,
|
||||
SysNotice::getNoticeBeginTime,
|
||||
SysNotice::getNoticeEndTime,
|
||||
BaseEntity::getCreateUser, BaseEntity::getCreateTime);
|
||||
|
||||
|
@ -107,7 +122,12 @@ public class SysNoticeServiceImpl extends ServiceImpl<SysNoticeMapper, SysNotice
|
|||
sysNotice.setPublishStatus(NoticePublishStatusEnum.ALREADY.getCode());
|
||||
this.updateById(sysNotice);
|
||||
|
||||
// 2. 发送通知给接收人
|
||||
// 2. 获取发送对象,全部转化为用户id
|
||||
NoticeUserScope noticeUserScope = sysNoticeRequest.getNoticeUserScope();
|
||||
Set<Long> noticeUserList = this.getNoticeUserList(noticeUserScope);
|
||||
|
||||
// 3. 发送通知给接收人
|
||||
messagePublishApi.batchSendMessage(NoticeFactory.createMessageSendDTO(noticeUserList, sysNotice));
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -120,6 +140,8 @@ public class SysNoticeServiceImpl extends ServiceImpl<SysNoticeMapper, SysNotice
|
|||
this.updateById(sysNotice);
|
||||
|
||||
// 2. 调用撤回接口,将已发送的消息全都撤回
|
||||
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -191,4 +213,34 @@ public class SysNoticeServiceImpl extends ServiceImpl<SysNoticeMapper, SysNotice
|
|||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 通知的范围,转化为具体的用户id
|
||||
*
|
||||
* @author fengshuonan
|
||||
* @since 2024/1/14 22:46
|
||||
*/
|
||||
private Set<Long> getNoticeUserList(NoticeUserScope noticeUserScope) {
|
||||
|
||||
// 初始化用户集合
|
||||
Set<Long> userIdCollection = new LinkedHashSet<>();
|
||||
|
||||
// 添加通知中的用户集合
|
||||
List<SimpleDict> pointUserList = noticeUserScope.getPointUserList();
|
||||
if (ObjectUtil.isNotEmpty(pointUserList)) {
|
||||
userIdCollection.addAll(pointUserList.stream().map(SimpleDict::getId).collect(Collectors.toList()));
|
||||
}
|
||||
|
||||
// 组织机构id转化为用户id
|
||||
List<SimpleDict> pointOrgList = noticeUserScope.getPointOrgList();
|
||||
if (ObjectUtil.isNotEmpty(pointOrgList)) {
|
||||
Set<Long> orgUserIdList = sysUserOrgServiceApi.getOrgUserIdList(
|
||||
pointOrgList.stream().map(SimpleDict::getId).collect(Collectors.toSet()));
|
||||
if (ObjectUtil.isNotEmpty(orgUserIdList)) {
|
||||
userIdCollection.addAll(orgUserIdList);
|
||||
}
|
||||
}
|
||||
|
||||
return userIdCollection;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue