/** * 通知事件注册表(元数据) * * 事件分两类: * - 扫描式(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; } 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); }