Files
BMS/bms-back/sql/20261009_add_sys_notify.sql
2026-10-09 17:06:40 +08:00

99 lines
7.4 KiB
SQL
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
-- ============================================================
-- 功能:系统管理 - 消息通知管理(客户超额通知)
-- 日期:2026-10-09
-- 说明:
-- 1) sys_notify_rule 通知规则(当前事件类型:CUSTOMER_OVERDUE 客户已超额)
-- 2) sys_notify_rule_target 规则通知对象(USER 指定用户 / ROLE 指定角色,可多个)
-- 3) sys_notify_message 通知消息(一次超额扫描/客户/天最多一条,防重复打扰)
-- 4) sys_notify_receive 接收人与已读/弹屏记录
-- 5) sys_notify_scan_log 扫描状态日志(用于超额->恢复状态机与当日去重)
-- 6) 菜单:系统管理 -> 消息通知管理(system/notify/index)
-- 7) 定时任务:notifyCustomerTask.scanOverdue() 每日09:00
-- 口径:通知与核销无关,不涉及任何余额/额度变动。
-- ============================================================
-- 1. 通知规则
CREATE TABLE IF NOT EXISTS `sys_notify_rule` (
`rule_id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '规则ID',
`rule_name` varchar(100) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '规则名称',
`event_type` varchar(40) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'CUSTOMER_OVERDUE' COMMENT '事件类型:CUSTOMER_OVERDUE客户已超额',
`status` char(1) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '0' COMMENT '状态(0启用 1停用)',
`remark` varchar(500) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '备注',
`create_by` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '创建者',
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
`update_by` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '更新者',
`update_time` datetime DEFAULT NULL COMMENT '更新时间',
`del_flag` char(1) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '0' COMMENT '删除标志(0存在 2删除)',
PRIMARY KEY (`rule_id`),
KEY `idx_snr_event_status` (`event_type`,`status`,`del_flag`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='消息通知规则';
-- 2. 规则通知对象
CREATE TABLE IF NOT EXISTS `sys_notify_rule_target` (
`target_id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '对象ID',
`rule_id` bigint(20) NOT NULL COMMENT '规则ID',
`target_type` varchar(10) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '对象类型:USER用户/ROLE角色',
`ref_id` bigint(20) NOT NULL COMMENT '用户ID或角色ID',
`ref_name` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '用户名/角色名快照',
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
PRIMARY KEY (`target_id`),
UNIQUE KEY `uk_snrt_rule_type_ref` (`rule_id`,`target_type`,`ref_id`),
KEY `idx_snrt_type_ref` (`target_type`,`ref_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='通知规则对象(用户/角色)';
-- 3. 通知消息
CREATE TABLE IF NOT EXISTS `sys_notify_message` (
`message_id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '消息ID',
`event_type` varchar(40) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'CUSTOMER_OVERDUE' COMMENT '事件类型',
`title` varchar(200) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '标题',
`content` varchar(2000) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '内容',
`customer_id` bigint(20) DEFAULT NULL COMMENT '关联客户ID',
`customer_code` varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '客户编号快照',
`customer_name` varchar(200) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '客户名称快照',
`overdue_amount` decimal(18,2) DEFAULT NULL COMMENT '超额金额(CNY,正数)',
`create_by` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '创建者(系统任务记为system)',
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
PRIMARY KEY (`message_id`),
KEY `idx_snm_event_customer` (`event_type`,`customer_id`),
KEY `idx_snm_create_time` (`create_time`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='通知消息';
-- 4. 接收人
CREATE TABLE IF NOT EXISTS `sys_notify_receive` (
`receive_id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '接收ID',
`message_id` bigint(20) NOT NULL COMMENT '消息ID',
`user_id` bigint(20) NOT NULL COMMENT '接收用户ID',
`read_flag` char(1) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '0' COMMENT '已读标志(0未读 1已读)',
`read_time` datetime DEFAULT NULL COMMENT '阅读时间',
`popup_flag` char(1) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'N' COMMENT '登录弹屏是否已展示(N否 Y是)',
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
PRIMARY KEY (`receive_id`),
UNIQUE KEY `uk_snr_message_user` (`message_id`,`user_id`),
KEY `idx_snr_user_popup` (`user_id`,`popup_flag`,`read_flag`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='通知消息接收人';
-- 5. 扫描状态日志(每客户每事件一行)
CREATE TABLE IF NOT EXISTS `sys_notify_scan_log` (
`log_id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '日志ID',
`event_type` varchar(40) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '事件类型',
`customer_id` bigint(20) NOT NULL COMMENT '客户ID',
`last_status` varchar(20) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '最近状态:OVERDUE超额/NORMAL正常',
`last_notify_date` date DEFAULT NULL COMMENT '最近通知日期(当日去重)',
`update_time` datetime DEFAULT NULL COMMENT '更新时间',
PRIMARY KEY (`log_id`),
UNIQUE KEY `uk_snsl_event_customer` (`event_type`,`customer_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='通知扫描状态日志';
-- 6. 菜单:系统管理 -> 消息通知管理
INSERT INTO `sys_menu`(`menu_id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `query`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `remark`)
VALUES (2450, '消息通知管理', 1, 9, 'notify', 'system/notify/index', NULL, 1, 0, 'C', '0', '0', 'system:notify:list', 'message', 'admin', sysdate(), '消息通知配置与记录');
INSERT INTO `sys_menu`(`menu_id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `query`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `remark`) VALUES
(2451, '通知规则查询', 2450, 1, '#', '', NULL, 1, 0, 'F', '0', '0', 'system:notify:query', '#', 'admin', sysdate(), ''),
(2452, '通知规则新增', 2450, 2, '#', '', NULL, 1, 0, 'F', '0', '0', 'system:notify:add', '#', 'admin', sysdate(), ''),
(2453, '通知规则修改', 2450, 3, '#', '', NULL, 1, 0, 'F', '0', '0', 'system:notify:edit', '#', 'admin', sysdate(), ''),
(2454, '通知规则删除', 2450, 4, '#', '', NULL, 1, 0, 'F', '0', '0', 'system:notify:remove', '#', 'admin', sysdate(), '');
-- 7. 定时任务:客户超额通知扫描(每日09:00,misfire不补偿、禁止并发)
INSERT INTO `sys_job`(`job_id`, `job_name`, `job_group`, `invoke_target`, `cron_expression`, `misfire_policy`, `concurrent`, `status`, `create_by`, `create_time`, `remark`)
VALUES (8, '客户超额通知扫描', 'DEFAULT', 'notifyCustomerTask.scanOverdue()', '0 0 9 * * ?', '3', '1', '0', 'admin', sysdate(), '扫描已超额(欠费)客户并按通知规则投递消息');