feat: 新增可配置通知中心,支持扫描式/埋点式通知规则与手动群发
新增通知规则实体、扫描任务、API与管理界面,重构站内通知支持用户/电工双类型,移除硬编码的证照到期提醒,新增工单派单、电工审核结果等通知触发场景,调整菜单与数据库结构适配新通知体系。
This commit is contained in:
1 parent
91aa3c06f0
commit
6cf6a3d5b9
36 files changed
+3309
-246
No files matched your search
@@ -0,0 +1,110 @@
|
||||
/**
|
||||
* 通知事件注册表(元数据)
|
||||
*
|
||||
* 事件分两类:
|
||||
* - 扫描式(triggerMode=1):由内置任务 notice_scan 定时扫描,扫描实现位于 NoticeRuleService
|
||||
* - 埋点式(triggerMode=2):业务代码在关键动作处调用 NoticeRuleService.runForEvent()
|
||||
*
|
||||
* 本文件只维护「事件元数据」(供 Web「通知管理」下拉与模板变量提示),
|
||||
* 具体扫描逻辑与业务埋点实现分别位于 NoticeRuleService 与各业务 service。
|
||||
*/
|
||||
|
||||
/** 模板可用变量({变量} 占位符) */
|
||||
export interface NoticeEventVariable {
|
||||
key: string;
|
||||
label: string;
|
||||
}
|
||||
|
||||
/** 事件定义 */
|
||||
export interface NoticeEventDefinition {
|
||||
eventKey: string;
|
||||
eventName: string;
|
||||
/** 1扫描式 2埋点式 */
|
||||
triggerMode: 1 | 2;
|
||||
variables: NoticeEventVariable[];
|
||||
}
|
||||
|
||||
/** 扫描式事件单条命中结果 */
|
||||
export interface NoticeScanItem {
|
||||
bizType: string;
|
||||
bizId: number;
|
||||
/** workers.mode=event 时作为事件关联电工 */
|
||||
workerId?: number | null;
|
||||
vars: Record<string, any>;
|
||||
}
|
||||
|
||||
export const NOTICE_EVENTS: NoticeEventDefinition[] = [
|
||||
{
|
||||
eventKey: "cert_expire",
|
||||
eventName: "电工资质证照到期提醒",
|
||||
triggerMode: 1,
|
||||
variables: [
|
||||
{ key: "workerName", label: "电工姓名" },
|
||||
{ key: "certType", label: "证书类型" },
|
||||
{ key: "certNo", label: "证书编号" },
|
||||
{ key: "issueAuthority", label: "发证机关" },
|
||||
{ key: "expireDate", label: "有效期至" },
|
||||
{ key: "remainDays", label: "剩余天数" },
|
||||
{ key: "expireState", label: "到期状态(即将到期/已过期)" },
|
||||
{ key: "remainDaysText", label: "剩余天数文案" }
|
||||
]
|
||||
},
|
||||
{
|
||||
eventKey: "contract_expire",
|
||||
eventName: "客户合同到期提醒",
|
||||
triggerMode: 1,
|
||||
variables: [
|
||||
{ key: "customerName", label: "客户名称" },
|
||||
{ key: "contractNo", label: "合同编号" },
|
||||
{ key: "contractName", label: "合同名称" },
|
||||
{ key: "endDate", label: "到期日" },
|
||||
{ key: "expireState", label: "到期状态(即将到期/已过期)" },
|
||||
{ key: "remainDaysText", label: "剩余天数文案" }
|
||||
]
|
||||
},
|
||||
{
|
||||
eventKey: "visit_plan",
|
||||
eventName: "客户拜访计划提醒",
|
||||
triggerMode: 1,
|
||||
variables: [
|
||||
{ key: "customerName", label: "客户名称" },
|
||||
{ key: "planDate", label: "计划拜访日期" },
|
||||
{ key: "remainDaysText", label: "到期文案" }
|
||||
]
|
||||
},
|
||||
{
|
||||
eventKey: "order_timeout",
|
||||
eventName: "工单超时未接单提醒",
|
||||
triggerMode: 1,
|
||||
variables: [
|
||||
{ key: "orderTypeName", label: "工单类型" },
|
||||
{ key: "orderNo", label: "工单编号" },
|
||||
{ key: "customerName", label: "客户名称" },
|
||||
{ key: "staleDays", label: "滞留天数" }
|
||||
]
|
||||
},
|
||||
{
|
||||
eventKey: "worker_audit_result",
|
||||
eventName: "电工入驻审核结果通知",
|
||||
triggerMode: 2,
|
||||
variables: [
|
||||
{ key: "auditState", label: "审核结果(已通过/已驳回)" },
|
||||
{ key: "auditRemarkText", label: "驳回理由文案" }
|
||||
]
|
||||
},
|
||||
{
|
||||
eventKey: "dispatch_assign",
|
||||
eventName: "工单派单通知",
|
||||
triggerMode: 2,
|
||||
variables: [
|
||||
{ key: "orderTypeName", label: "工单类型" },
|
||||
{ key: "orderNo", label: "工单编号" },
|
||||
{ key: "customerName", label: "客户名称" },
|
||||
{ key: "detailText", label: "附加说明" }
|
||||
]
|
||||
}
|
||||
];
|
||||
|
||||
export function getNoticeEvent(eventKey: string): NoticeEventDefinition | undefined {
|
||||
return NOTICE_EVENTS.find(e => e.eventKey === eventKey);
|
||||
}
|
||||
Reference in new issue
Block a user