# 消息推送模块 统一的消息推送模块,支持站内信、短信等渠道。 ## 引入依赖 ```xml com.mdframe.forge forge-starter-message ``` ## 配置 ```yaml forge: message: channels: - web - sms templates: cache-enabled: true ``` ## 使用示例 ### 发送消息 ```java @Autowired private MessageClient messageClient; public void sendNotification(Long userId, String content) { messageClient.send(MessageSendRequest.builder() .userId(userId) .title("系统通知") .content(content) .channel("web") .build()); } ``` ### 批量发送 ```java public void sendToUsers(List userIds, String content) { messageClient.sendBatch(MessageSendRequest.builder() .userIds(userIds) .title("批量通知") .content(content) .channel("web") .build()); } ``` ### 使用模板 ```java public void sendWithTemplate(Long userId, String templateCode, Map params) { messageClient.sendByTemplate(userId, templateCode, params); } ``` ## 消息渠道 ### 站内信 (Web) ```java @Component public class WebMessageChannel implements MessageChannel { @Override public String getChannelType() { return "web"; } @Override public void send(Message message) { // 保存到消息表 messageMapper.insert(message); } } ``` ### 短信 (SMS) ```java @Component public class SmsMessageChannel implements MessageChannel { @Override public String getChannelType() { return "sms"; } @Override public void send(Message message) { // 调用短信服务 smsService.send(message.getPhone(), message.getContent()); } } ``` ## 消息模板 ### 模板配置 ```java public class SysMessageTemplate { private Long templateId; private String templateCode; // 模板编码 private String templateName; // 模板名称 private String title; // 标题模板 private String content; // 内容模板 private String channel; // 渠道 } ``` ### 模板变量 ``` 标题:订单状态变更通知 内容:尊敬的${username},您的订单${orderNo}状态已变更为${status}。 ``` ```java Map params = new HashMap<>(); params.put("username", "张三"); params.put("orderNo", "ORD20240115001"); params.put("status", "已发货"); messageClient.sendByTemplate(userId, "ORDER_STATUS_CHANGE", params); ``` ## API 参考 ### MessageClient ```java // 发送单条消息 void send(MessageSendRequest request); // 批量发送 void sendBatch(MessageSendRequest request); // 使用模板发送 void sendByTemplate(Long userId, String templateCode, Map params); // 获取未读数量 int getUnreadCount(Long userId); // 标记已读 void markAsRead(Long messageId); ```