【仅供内部供应商使用,不提供对外解答和培训】

Page tree

【仅供内部供应商使用,不提供对外解答和培训】

Skip to end of metadata
Go to start of metadata

一、特殊名词介绍

二、背景、场景介绍

帆软决策平台具有消息功能,来实现对用户的一些关键信息的提醒和预警。在系统集成场景中,往往会遇到,第三方系统向决策平台推送消息或者决策系统向第三方推送消息的需求。当决策平台要同步一些消息推送到第三方时,就可以使用MessageEventProvider接口进行处理。该接口提供了决策平台消息发送后的一个事件处理接口,开发者可以在接口内对消息进行额外的处理,比如同步给第三方系统、或者给第三方做回调等等的。

三、接口介绍

MessageEventProvider.java
package com.fr.decision.fun;

import com.fr.stable.fun.mark.Mutable;

import java.util.Map;

/**
 * @author Zed
 * @version 10.0
 * Created by Zed on 2019/11/13
 */
public interface MessageEventProvider extends Mutable {

    String MARK_STRING = "MessageEventProvider";

    int CURRENT_LEVEL = 1;

    /**
     * 消息处理
     */
    void handleMessage(Map<String, Object> message);
}

Message.java
package com.fr.decision.system.bean.message;

import com.fr.decision.system.entity.message.AbstractMessageEntity;
import com.fr.stable.db.data.BaseDataRecord;
import com.fr.decision.system.entity.message.MessageEntity;
import com.fr.third.fasterxml.jackson.annotation.JsonFormat;

import java.io.Serializable;
import java.util.Date;

/**
 * Created by Zed on 2018/02/27.
 * 消息bean对象
 */
public abstract class Message extends BaseDataRecord implements Serializable {

    private static final long serialVersionUID = 6348359470150684892L;

    private String userId;
    private String username;
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date datetime = new Date();
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date createTime = new Date();
    private String message;
    private String url;
    // 是否弹出过了 只弹出提示一次
    private boolean toasted = false;
    //已读或未读
    private boolean readed = false;
    //消息类型
    private int type;
    //url类型(平台内路由,目录节点访问,外部url)
    private int urlType;

    public abstract AbstractMessageEntity createEntity();

    public Message() {

    }

    public MessageEntity setSelf2Entity() {
        MessageEntity entity = new MessageEntity();
        entity.setId(this.getId());
        entity.setCreateTime(this.getCreateTime());
        entity.setDatetime(this.getDatetime());
        entity.setMessage(this.getMessage());
        entity.setReaded(this.isReaded());
        entity.setToasted(this.isToasted());
        entity.setUrl(this.getUrl());
        entity.setUserId(this.getUserId());
        entity.setUsername(this.getUsername());
        entity.setType(this.getType());
        entity.setUrlType(this.getUrlType());
        return entity;
    }

    public Message(String userId, String message, String url, int urlType) {
        this.userId = userId;
        this.message = message;
        this.url = url;
        this.urlType = urlType;
    }

    public Message(String userId, String username, String message, String url, int type, int urlType) {
        this.userId = userId;
        this.username = username;
        this.message = message;
        this.url = url;
        this.type = type;
        this.urlType = urlType;
    }

    public String getUserId() {
        return userId;
    }

    public void setUserId(String userId) {
        this.userId = userId;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public Date getDatetime() {
        return datetime;
    }

    public void setDatetime(Date datetime) {
        this.datetime = datetime;
    }

    public Date getCreateTime() {
        return createTime;
    }

    public void setCreateTime(Date createTime) {
        this.createTime = createTime;
    }

    public String getMessage() {
        return message;
    }

    public void setMessage(String message) {
        this.message = message;
    }

    public String getUrl() {
        return url;
    }

    public void setUrl(String url) {
        this.url = url;
    }

    public boolean isToasted() {
        return toasted;
    }

    public void setToasted(boolean toasted) {
        this.toasted = toasted;
    }

    public boolean isReaded() {
        return readed;
    }

    public void setReaded(boolean readed) {
        this.readed = readed;
    }

    public int getType() {
        return type;
    }

    public void setType(int type) {
        this.type = type;
    }

    public int getUrlType() {
        return urlType;
    }

    public void setUrlType(int urlType) {
        this.urlType = urlType;
    }
}

四、支持版本

产品线

版本

支持情况

备注

FR10.0支持
BI5.1支持
BI5.1.2支持
BI5.1.3支持

五、插件注册

plugin.xml
<extra-decision>
	<MessageEventProvider class="your classname"/>
</extra-decision>

六、原理说明

该接口在需要调用的地方通过:Set<MessageEventProvider> providers = ExtraDecisionClassManager.getInstance().getArray(MessageEventProvider.MARK_STRING);读取插件中申明的所有消息事件处理实例。

在决策平台中主要通过:WebServiceActivator中监听了MessageEvent.HANDLE事件,在事件的处理中调用了消息处理的实例进行生效。而MessageEvent.HANDLE事件的触发又是在MessageService发生消息后,进行消息保存saveMessage(Message message) 后触发的。

七、特殊限制说明

handleMessage入参的Map对象是Message对象转换来的。

该接口设计时存在一定缺陷,导致目前只能对消息的发送进行监听处理,对于消息的已读、处理是无法感知的。

八、常用链接

demo地址:demo-message-event-provider

九、开源案例

免责声明:所有文档中的开源示例,均为开发者自行开发并提供。仅用于参考和学习使用,开发者和官方均无义务对开源案例所涉及的所有成果进行教学和指导。若作为商用一切后果责任由使用者自行承担。

decision-message-event

  • No labels