1. 概述

流程的通知主要是指待办事项产生时的信息提醒,任务过期催办、任务转办、任务完成提醒、任务沟通与抄送等需要及时通知相关用户的信息。

2. 通知类型扩展

在平台中,当任务产生时是会产生通知的,具体的流程是:

1.产生通知消息。
2.发送到消息队列。
3.流程消费处理器,会根据消息的类型(比如email,短信等)调用相应的处理器进行通知。

平台默认支持的消息通知类型有:

  • 内部消息(inner)
  • 企业微信(weixin)
  • 钉钉(ding)
  • 个推(getui)
  • 邮件(mail)
  • 短信(sms)
  • 飞书(feishu)

使用效果:

已有实现:

2.1 消息接口定义如下

package com.redxun.bpm.core.ext.messagehandler;
import com.redxun.mq.MessageModel;

public interface IMessageHandler {

    /**
     * 消息类型。
     * @return
     */
    MessageType getType();
    /**
     * 处理消息数据。
     */
    void handMessage(MessageModel messageModel);
}

2.2 平台实现案例

说明:
若需要实现一个新的消息通知,只需要参考MailHandler的代码实现,如下所示:

package com.redxun.bpm.core.ext.messagehandler.impl;


import com.redxun.bpm.core.ext.messagehandler.IMessageHandler;
import com.redxun.bpm.core.ext.messagehandler.MessageType;
import com.redxun.bpm.core.ext.messagehandler.MessageUtil;
import com.redxun.bpm.util.InformUtil;
import com.redxun.common.base.entity.IUser;
import com.redxun.common.mail.MailUtil;
import com.redxun.common.tool.StringUtils;
import com.redxun.common.utils.ExceptionUtil;
import com.redxun.mq.MessageModel;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;

import javax.annotation.Resource;

/**
 * 处理邮件消息。
 * @author ray
 */
@Component
@Slf4j
public class MailHandler implements IMessageHandler {

    @Resource
    private MailUtil mailUtil;

    @Override
    public MessageType getType() {
        return new MessageType( "mail","邮件");
    }

    @Override
    public void handMessage(MessageModel messageModel) {
        //javax.mail.Address
        String fromMail= messageModel.getSender().getEmail();
        if(StringUtils.isEmpty(fromMail)){
            return;
        }
        for(IUser receiver:messageModel.getReceivers()){
            if(receiver==null || StringUtils.isEmpty(receiver.getEmail())){
                continue;
            }
            try{
                String subject=InformUtil.getInformSubject(messageModel);
                if(StringUtils.isNotEmpty(subject)){
                    messageModel.setSubject(subject);
                }
                String content = InformUtil.getInformContent(messageModel);
                if(StringUtils.isEmpty(content)) {
                    content = MessageUtil.getContent(messageModel, receiver, getType().getType());
                }
                mailUtil.sendMail(fromMail,receiver.getEmail(),messageModel.getSubject(),content);
            }
            catch (Exception ex){
                String message= ExceptionUtil.getExceptionMessage(ex);
                log.error(message);
            }
        }
    }
}
文档更新时间: 2022-06-30 16:07   作者:csx