1. 概要

在流程审批时,当新的任务创建时,我们需要通知任务执行人。在通知的时候,我们可能会有多种通知方式,比如邮件,短信,微信,内部消息等等。另外我们也可以使用其他的通知方式。

在平台种通知的实现方式是:

1.构建一个消息对象。
2.将这个消息对象发送到消息队列。
3.消息队列的消费者获取消息并根据消息的类型,找到相应的消息处理器对消息进行发送。

2. 实现方式

2.1 消息对象模型

com.redxun.mq.MessageModel

该对象定义在jpaas-share 模块中。

2.2 消息处理器接口定义

package com.redxun.bpm.core.ext.messagehandler;
import com.redxun.mq.MessageModel;
public interface IMessageHandler {
    /**
     * 消息类型。
     * @return
     */
    MessageType getType();
    /**
     * 处理消息数据。
     */
    void handMessage(MessageModel messageModel);
}

我们需要实现这个接口对消息进行发送。

2.3 内部消息发送实现案例

package com.redxun.bpm.core.ext.messagehandler.impl;
@Component
@Slf4j
public class InfInnerMsgHandler implements IMessageHandler {

    @Override
    public MessageType getType() {
        return new MessageType( "inner","内部消息");
    }

    @Override
    public void handMessage(MessageModel messageModel) {
        //发送人Id
        String fromUserId= messageModel.getSender().getUserId();
        if(StringUtils.isEmpty(fromUserId)){
            return;
        }
        //发送内容
        String content="";
        //接收人
        for(IUser receiver:messageModel.getReceivers()){
            if(receiver==null || StringUtils.isEmpty(receiver.getUserId())){
                continue;
            }
            try{
                String subject=InformUtil.getInformSubject(messageModel);
                if(StringUtils.isNotEmpty(subject)){
                    messageModel.setSubject(subject);
                }
                content  = MessageUtil.getContent(messageModel, receiver, getType().getType());
                InfInnerMsgUtil.sendSystemMsg(receiver,content,messageModel.getSender().getFullName()+"抄送给你一条流程实例信息");
            }
            catch (Exception ex){
                String message= ExceptionUtil.getExceptionMessage(ex);
                log.error(message);
            }
        }

    }
}

这里需要注意的是需要增加 @Component 注解。用户可以根据自己的实际情况,实现自己的发送消息的实现。

文档更新时间: 2022-01-20 14:53   作者:zyg