This commit is contained in:
wuweihua
2026-10-09 17:20:05 +08:00
20 changed files with 2065 additions and 7 deletions
+98
View File
@@ -0,0 +1,98 @@
-- ============================================================
-- 功能:系统管理 - 消息通知管理(客户超额通知)
-- 日期: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(), '扫描已超额(欠费)客户并按通知规则投递消息');