Warn 模块架构设计
1. 模块概述
Warn(预警管理)模块负责企业级预警消息的全链路管理:从预警节点检测、策略配置、模板渲染到多渠道消息推送。支持按等级(高/中/低)分级告警,支持防重复预警机制,支持定时调度自动检测。
2. 架构分层
┌──────────────────────────────────────────────────────────────────────┐
│ Controller 层(11 个) │
│ WarnInitController │ WarnChannelController │
│ WarnTemplateController │ WarnCategoryController │
│ WarnNodeController │ WarnStrategyController │
│ WarnStrategyLevelController │ WarnStrategyLevelPushController │
│ WarnStrategyLevelRecipientController │
│ WarnLogController │ WarnLogDetailController │
├──────────────────────────────────────────────────────────────────────┤
│ Service 层(14 个) │
│ WarnInitService │ WarnChannelService │
│ WarnTemplateService │ WarnCategoryService │
│ WarnNodeService │ WarnStrategyService │
│ WarnStrategyLevelService │ WarnStrategyLevelPushService │
│ WarnStrategyLevelRecipientService │
│ WarnStrategyLevelRecipientObjectService │
│ WarnStrategySendService │ WarnStrategySendHandleService │
│ WarnLogService │ WarnLogDetailService │
├──────────────────────────────────────────────────────────────────────┤
│ Handle 层(渠道 SPI) │
│ MessageChannelHandle(接口) │ MessageChannelFactory(工厂) │
│ └─ MessageEmailHandlerHandle(邮件渠道实现) │
├──────────────────────────────────────────────────────────────────────┤
│ Seed 数据层 │
│ WarnSeedInitial<T>(API 接口) │
│ ├─ DemoWarnChannelSeedInitial (渠道种子) │
│ ├─ DemoWarnCategorySeedInitial (业务类种子) │
│ ├─ DemoWarnNodeSeedInitial (节点种子) │
│ └─ DemoWarnTemplateSeedInitial (模板种子) │
├──────────────────────────────────────────────────────────────────────┤
│ Entity(11)│ DTO(44)│ Mapper(11)│ Enum(6)│ Convert(7) │
└──────────────────────────────────────────────────────────────────────┘
3. 核心数据模型
3.1 ER 关系
WarnChannel (消息渠道)
└── code: sms / email / wecom / dingtalk / innerMessage / app
WarnCategory (业务分类)
└── WarnNode (预警节点)
├── WarnTemplate (预警模板,绑定渠道)
└── WarnStrategy (预警策略)
└── WarnStrategyLevel (策略等级: high/middle/low)
├── WarnStrategyLevelPush (推送方式,关联渠道)
└── WarnStrategyLevelRecipient (接收人)
└── WarnStrategyLevelRecipientObject (接收人对象)
WarnLog (预警日志)
└── WarnLogDetail (日志明细)
3.2 核心实体
WarnChannel(消息渠道)
| 字段 | 类型 | 说明 |
|---|---|---|
| code | String | 渠道编码:sms/email/wecom/dingtalk/innerMessage/app |
| name | String | 渠道名称 |
| isEnabled | String | 状态:1-启用, 0-禁用 |
WarnCategory(业务分类)
| 字段 | 类型 | 说明 |
|---|---|---|
| code | String | 业务编码 |
| name | String | 业务名称 |
WarnNode(预警节点)
| 字段 | 类型 | 说明 |
|---|---|---|
| code | String | 节点编码 |
| name | String | 节点名称 |
| categoryId | String | 所属业务分类ID |
WarnTemplate(预警模板)
| 字段 | 类型 | 说明 |
|---|---|---|
| code | String | 模板编码 |
| name | String | 模板名称 |
| channel | String | 渠道编码 |
| nodeCode | String | 绑定节点编码 |
| title | String | 消息标题 |
| content | String | 消息内容(支持占位符) |
WarnStrategy(预警策略)
| 字段 | 类型 | 说明 |
|---|---|---|
| nodeCode | String | 关联节点编码 |
| categoryId | String | 业务分类ID |
| scheduleId | Long | 关联调度任务ID |
| intervalMinutes | Integer | 检测间隔(分钟) |
| repeatedWarningType | String | 防重复类型 |
| prohibitRepeatedCycle | Integer | 禁重复周期(分钟) |
| isEnabled | String | 状态 |
WarnStrategyLevel(策略等级)
| 字段 | 类型 | 说明 |
|---|---|---|
| strategyId | Long | 所属策略ID |
| level | String | 等级:high/middle/low |
4. 核心流程
4.1 预警发送流程
外部调用: POST /sys/v1/warn-strategy/send
→ WarnStrategySendService.send()
→ 根据 strategyCode 查找策略
→ 查找策略等级(high/middle/low)
→ 按等级查找推送方式(WarnStrategyLevelPush → 渠道)
→ 按等级查找接收人(WarnStrategyLevelRecipient)
→ 渲染模板(WarnTemplate)
→ MessageChannelFactory.getHandler(channelCode)
→ MessageChannelHandle.send()(SPI 扩展)
→ 记录日志(WarnLog + WarnLogDetail)
4.2 初始化流程
调用: POST /sys/v1/warn/init
→ WarnInitService.init()
→ 收集所有 WarnSeedInitial<T> Bean 的种子数据
→ 按类型分组同步:
1. syncWarnChannel() → 渠道(按 code 去重)
2. syncWarnCategory() → 业务分类(按 code 去重)
3. syncWarnNode() → 节点(按 code 去重,关联分类)
4. syncWarnTemplate() → 模板(按 code 去重,关联节点)
5. syncWarnStrategy() → 策略(按 nodeCode 去重,默认禁用)
6. syncWarnStrategyLevel() → 策略等级(每策略自动创建 high/middle/low)
→ 批量入库
→ 初始化定时调度任务(PowerJob)
5. 扩展机制
5.1 渠道 SPI
public interface MessageChannelHandle {
String getChannel(); // 渠道编码
void send(MessageDTO message); // 发送消息
}
新增渠道只需实现接口并注册为 Spring Bean,MessageChannelFactory 自动收集。
5.2 种子数据 SPI
public interface WarnSeedInitial<T> {
List<T> getSeedData(); // 返回种子数据列表
}
支持的种子数据类型:
WarnChannel— 渠道WarnCategory— 业务分类WarnNodeSeedDTO— 节点 + 策略配置WarnTemplateSeedDTO— 模板
6. 防重复预警机制
| 字段 | 说明 |
|---|---|
| repeatedWarningType | 防重复类型 |
| prohibitRepeatedCycle | 禁重复周期(分钟) |
策略级别支持按时间段防重复,避免同一预警短时间内反复推送。
7. 枚举定义
| 枚举 | 值 | 说明 |
|---|---|---|
WarnChannelEnum |
sms, email, wecom, dingtalk, innerMessage, app | 消息渠道 |
WarnLevelEnum |
high, middle, low | 预警等级 |
WarnRecipientTypeEnum |
— | 接收人对象类型 |
WarnReleaseConditionEnum |
— | 预警解除条件 |
WarnRepeatedWarningTypeEnum |
— | 防重复类型 |