背景
经营消息通常通过业务代码进行取数,并发送消息到指定的地方,不同伙伴写的逻辑分散各处,存在重复工作,逻辑耦合严重,管理困难,故设计通用的报表通知功能,对取数与通知进行解耦。
报表通知开发流程
graph LR 开始 --> 需求 需求 --> 是否有现成的表 是否有现成的表-->|是| 报表通知模块配置 是否有现成的表-->|否| 离线计算 离线计算 --> 处理结果存入mysql 处理结果存入mysql --> 报表通知模块配置 报表通知模块配置-->结束
- 由专业的数据工程师进行数据处理
- 数据有问题,只需要数据修改离线计算逻辑(也可应用事实计算)
- 通知配置人员面对的永远是已经经过处理的数据
- 通知配置人员可通过管理界面进行简单的调试
消息通知操作界面
目前的消息推送配置是写在配置文件里,管理跟改动比较麻烦,后续期望能转成如下类似的界面进行管理
消息推送逻辑
- 定时任务每分钟20秒执行一次
- 获取获取所有需要通知的任务
- 判断符合当前时间的任务按sql语句进行取数
- 对到的数据,按照通用的格式进行消息推送
- 消息推送,可以接入短信、邮件或钉钉、微信等消息机器人
数据流转
sequenceDiagram participant user participant admin participant task user ->> web : 业务操作 web ->> mysql: 数据存入 mysql ->> bigdata: 业务数据同步到大数据平台 bigdata ->> bigdata: 数据处理 bigdata -->> mysql: 数据处理结果写回mysql admin ->> web: 配置消息规则 web->> mysql: 消息规则写入mysql task ->> mysql: 获取消息源数据 mysql ->> task: 返回消息源数据 task ->> task: 根据配置规则组装多个消息 task->> dingtalk: 发送消息到钉钉
- 业务操作按常规的方式进行存储
- 大数据同步数据,并将计算结果写入消息数据表
- 定时任务负责从消息表中获取消息,并推送到指定的接收方
消息格式
- 查询结果为单条数据
1 | 今日单量 |
- 查询结果为多条数据
1 | 订单类型 下单量 发货量 退单量 |