WebcatEE 帮助文档


本文档的目标用户是 JAVA 开发人员。

本文档描述如何进行消息通知扩展。

版本要求:1.2.8+

不稳定接口,2.4.5+ 版本已移除该接口。低版本建议直接删除所有 listener 和 notify 配置,并基于 WorkOrderEventListener 自行实现发送通知。

消息通知

当用户提交提交工单时,系统会向拥有审核权限的用户发送消息通知。WebcatEE 默认的实现仅仅会发送邮件通知,若要实现自定义的消息通知,可通过 WebcatEE 提供的接口进行扩展。

消息通知扩展是 WebcatEE 提供的默认实现,应用方也可以不使用该实现,基于事件监听自己实现通知发送。

该接口暂不稳定,不建议基于该接口扩展,建议使用监听器自行扩展。


1. 开发消息通知实现类,实现类必须实现 com.skin.webcat.api.notify.WorkOrderNotifyService 接口,接口定义参见下方附录;
2. 注入消息通知实现类,~/WEB-INF/webcat/application.xml,示例:

<?xml version="1.0" encoding="utf-8"?>
<webcatee>
    <!-- 该监听器是必须的, 如果不注册将不会发送邮件 -->
    <listener class="com.skin.webcat.api.order.DefaultOrderEventListener"/>

    <notify>
        <!-- 发送渠道允许定义多个, WebcatEE 在发送通知时会依次调用, 即: 审核者可以同时收到多个渠道的通知。 -->
        <!-- 消息通知是在用户提交工单之后异步发送,不会影响主线程。实现类自己控制发送失败时自动重试,WebcatEE 不提供自动重试机制。 -->
        <channel class="com.skin.webcat.api.notify.WorkOrderMailNotifyService"/>
    </notify>
</webcatee>

附录


public interface WorkOrderNotifyService {
    /**
     * 用于记录发送日志
     * @return String
     */
    String getChannelName();

    /**
     * 返回值为审核者ID和发送结果的Map, 系统会根据返回结果记录发送日志
     * @param user
     * @param workOrder
     * @return Map<Long, ReturnValue<String>>
     */
    Map<Long, ReturnValue<String>> send(User user, List<User> auditors, DatabaseOrder workOrder);

    /**
     * @param user
     * @param workOrder
     * @return Map<Long, ReturnValue<String>>
     */
    Map<Long, ReturnValue<String>> send(User user, List<User> auditors, TableOrder workOrder);

    /**
     * @param user
     * @param workOrder
     * @return Map<Long, ReturnValue<String>>
     */
    Map<Long, ReturnValue<String>> send(User user, List<User> auditors, BaseChangeOrder workOrder);

    /**
     * @param user
     * @param workOrder
     * @return Map<Long, ReturnValue<String>>
     */
    Map<Long, ReturnValue<String>> send(User user, List<User> auditors, DataChangeOrder workOrder);

    /**
     * @param user
     * @param workOrder
     * @return Map<Long, ReturnValue<String>>
     */
    Map<Long, ReturnValue<String>> send(User user, List<User> auditors, DataExportOrder workOrder);
}

示例


public WorkOrderMailNotifyService implements WorkOrderNotifyService {
    /**
     * @return String
     */
    @Override
    public String getChannelName() {
        return "mail";
    }

    /**
     * @param user
     * @param databaseOrder
     * @return ReturnValue<String>
     */
    @Override
    public Map<Long, ReturnValue<String>> send(User user, List<User> auditors, DatabaseOrder databaseOrder) {
        try {
            // 发送邮件
            String address = this.getMailAddress(auditors);
            String subject = "[WebcatEE] - " + databaseOrder.getOrderName();
            String content = "...";
            MailService.send(address, subject, content);

            // 发送成功
            return ...
        }
        catch(Exception e) {
            // 发送失败
            logger.error(e.getMessage(), e);
            return ...
        }
    }

    // 其他方法
    ...
}