跳到主要内容

消息推送接口

统一消息推送接口,通过此接口实现,系统消息、邮箱消息、企业微信、钉钉消息四种类型消息推送。

一、主要API说明

//注入
@Autowired
private ISysBaseAPI sysBaseApi;
//推送消息
MessageDTO messageDTO = new MessageDTO();
messageDTO.setToAll(false);
messageDTO.setToUser(applyUserId);
messageDTO.setTitle("消息发送测试");
//推送消息类型
messageDTO.setType(MessageTypeEnum.XT.getType());
messageDTO.setIsMarkdown(false);
messageDTO.setFromUser("system");
messageDTO.setContent(templateContext);
log.info("------------消息发送对象:{}--------------", JSON.toJSONString(messageDTO));
iSysBaseAPI.sendTemplateMessage(messageDTO);
注意点
  1. type 为消息类型,目前支持四种类型:系统消息、邮箱消息、企业微信、钉钉消息
  2. templateCode模板编码,对应菜单【消息中心】-->【消息模板管理】
  3. data解析模板的数据,需自定义
  4. content,如果不需要通过模板解析数据,可以直接传入一个固定文本发送

属性说明

属性类型说明
fromUserstring发送人(用户登录账户)
toUserstring发送给(用户登录账户)
toAllboolean发送给所有人
titlestring消息主题
contentstring消息内容
templateCodestring模板消息对应的模板编码
typestring消息类型:参考枚举org.jeecg.common.constant.enums.MessageTypeEnum
dataMap<String, Object>解析模板内容 对应的数据

二、推送示例代码

示例1:流程结束给某个人发通知

//推送消息正文内容
String templateContext = "从工作表获取,查找结果无数据,工作流【"+process+"】,节点【"+node+"】";

String title = "流程结束通知";
MessageDTO messageDTO = new MessageDTO();
messageDTO.setToAll(false);
messageDTO.setToUser("admin");
messageDTO.setTitle("测试推送");
messageDTO.setType(MessageTypeEnum.XT.getType());
messageDTO.setIsMarkdown(false);
messageDTO.setFromUser("system");
messageDTO.setContent(templateContext);
log.info("------------消息发送对象:{}--------------", JSON.toJSONString(messageDTO));
iSysBaseAPI.sendTemplateMessage(messageDTO);

其他类型说明

 enum TaskTipTypeEnum {

XT("system", "bpm_system"),
YJ("email", "bpm_email"),
DD("dingtalk", "bpm_dingtalk"),
QYWX("wechat_enterprise", "bpm_wechat_enterprise");

示例2:通过模板code推送消息

MessageDTO md = new MessageDTO();
md.setToAll(false);
md.setTitle("消息发送测试");
md.setTemplateCode("bpm_cuiban");
md.setToUser("admin,jeecg");
md.setType(msgParams.getMsgType());
String testData = msgParams.getTestData();
if(oConvertUtils.isNotEmpty(testData)){
Map<String, Object> data = JSON.parseObject(testData, Map.class);
md.setData(data);
}
sysBaseApi.sendTemplateMessage(md);
return result.success("消息发送成功!");

三、更多API说明

3.1 通过消息模板推送消息

通过设计模板,可以自定义格式,支持Markdown、富文本、普通文本,发送邮件和系统消息。

  • 1.先设计消息模板

    • 菜单: 消息中心 -> 模板管理
  • 2.调用ISysBaseAPI接口发送系统消息

/**
* 发送系统消息
* @param fromUser 发送人(用户登录账户)
* @param toUser 发送给(用户登录账户)
* @param title 通知标题
* @param map 模板参数
* @param templateCode 模板编码
*/
public void sendSysAnnouncement(String fromUser, String toUser,String title, Map<String, String> map, String templateCode);

/**
* 通过消息中心模板,生成推送内容
*
* @param templateCode 模板编码
* @param map 模板参数
* @return
*/
public String parseTemplateByCode(String templateCode, Map<String, String> map);

3.2 高级应用示例

推送消息,系统通知点击详情,打开对应的业务表单。

Map<String, String> templateParam = new HashMap<>();
//设置PC详情页面打开所需路由参数 (系统通知点击详情,打开审批表单)
templateParam.put(CommonSendStatus.MSG_ABSTRACT_JSON, "{'taskDetail':true,'procInsId':'1706599178455097345','taskId':'task630958764530507776'}");
//设置钉钉移动端审批详情页面打开URL
templateParam.put(CommonConstant.MSG_HREF_URL, "http://www.jeecg.com"));

BusTemplateMessageDTO message = new BusTemplateMessageDTO("admin","jeecg","流程催办提醒",templateParam, CommonSendStatus.TZMB_BPM_CUIBAN, SysAnnmentTypeEnum.BPM.getType(),task.getId());
sysBaseAPI.sendBusTemplateAnnouncement(message);

这里只是部分示例代码,大家可以参考这个原理去自己实现。大概逻辑就是

3.3 更多推送接口

参考类:org/jeecg/common/system/api/ISysBaseAPI.java 目前推送这块接口较多,大家尽快采用iSysBaseAPI.sendTemplateMessage(messageDTO)方法,其他方法后续会优化掉。