feat: 完成消息通知中心全功能开发
1. 新增消息通知相关实体、Mapper、Service、控制器与前端页面 2. 实现审批通知、报价到期提醒等通知发送逻辑 3. 完成通知菜单配置与路由注册 4. 修复通知数据与跳转路径问题 5. 新增配套SQL脚本与定时任务
This commit is contained in:
5
sql/_q2.sql
Normal file
5
sql/_q2.sql
Normal file
@@ -0,0 +1,5 @@
|
||||
SELECT menu_id, menu_name, parent_id, path FROM sys_menu WHERE parent_id=2000 ORDER BY menu_id;
|
||||
SELECT '---bid_sub2---' AS '';
|
||||
SELECT m.menu_id, m.menu_name, m.parent_id, m.path, m.component FROM sys_menu m WHERE m.parent_id IN (SELECT menu_id FROM sys_menu WHERE parent_id=2000);
|
||||
SELECT '---bizconfig---' AS '';
|
||||
SELECT menu_id, menu_name, parent_id, path, component FROM sys_menu WHERE parent_id=2130;
|
||||
1
sql/_q3.sql
Normal file
1
sql/_q3.sql
Normal file
@@ -0,0 +1 @@
|
||||
SELECT menu_id, menu_name, parent_id, path, component FROM sys_menu WHERE parent_id=2060;
|
||||
3
sql/_query.sql
Normal file
3
sql/_query.sql
Normal file
@@ -0,0 +1,3 @@
|
||||
SELECT menu_id, menu_name, parent_id, order_num, path FROM sys_menu WHERE menu_name LIKE '%approval%' OR menu_name LIKE '%待我%' OR path LIKE '%approval%' OR path LIKE '%待我%';
|
||||
SELECT '---' AS 'all_menus';
|
||||
SELECT menu_id, menu_name, parent_id, order_num, path FROM sys_menu ORDER BY parent_id, order_num;
|
||||
72
sql/bid_notify.sql
Normal file
72
sql/bid_notify.sql
Normal file
@@ -0,0 +1,72 @@
|
||||
-- ════════════════════════════════════════════════════════════════════
|
||||
-- 消息通知中心 - 数据库表结构
|
||||
-- 功能:统一管理站内通知,支持审批结果、报价到期、任务分配等场景
|
||||
-- 执行方式: mysql --default-character-set=utf8mb4 -u root -p < bid_notify.sql
|
||||
-- ════════════════════════════════════════════════════════════════════
|
||||
SET NAMES utf8mb4;
|
||||
|
||||
-- 1. 消息通知表(存储所有通知消息)
|
||||
DROP TABLE IF EXISTS biz_notify_message;
|
||||
CREATE TABLE biz_notify_message (
|
||||
message_id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '消息ID',
|
||||
tenant_id BIGINT DEFAULT 0 COMMENT '租户ID',
|
||||
user_id BIGINT NOT NULL COMMENT '接收人用户ID',
|
||||
notice_type VARCHAR(32) NOT NULL COMMENT '通知类型(approval-审批结果/quotation_expire-报价到期/rfq_deadline-RFQ截止/task-任务分配/system-系统公告/exception-异常提醒)',
|
||||
priority TINYINT DEFAULT 0 COMMENT '优先级(0普通 1重要 2紧急)',
|
||||
title VARCHAR(200) NOT NULL COMMENT '消息标题',
|
||||
content TEXT COMMENT '消息内容',
|
||||
biz_type VARCHAR(32) COMMENT '关联业务类型(PURCHASE_ORDER/CLIENT_QUOTE/QUOTATION/DELIVERY_ORDER/ORDER_OBJECTION)',
|
||||
biz_id BIGINT COMMENT '关联业务ID',
|
||||
biz_url VARCHAR(255) COMMENT '业务跳转URL',
|
||||
is_read CHAR(1) DEFAULT '0' COMMENT '是否已读(0未读 1已读)',
|
||||
read_time DATETIME COMMENT '阅读时间',
|
||||
create_by VARCHAR(64) DEFAULT '' COMMENT '创建者',
|
||||
create_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
|
||||
update_by VARCHAR(64) DEFAULT '' COMMENT '更新者',
|
||||
update_time DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
|
||||
KEY idx_user_read (user_id, is_read),
|
||||
KEY idx_user_type (user_id, notice_type),
|
||||
KEY idx_tenant (tenant_id),
|
||||
KEY idx_create_time (create_time)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='消息通知表';
|
||||
|
||||
-- 2. 通知规则配置表(定义各类通知的触发规则)
|
||||
DROP TABLE IF EXISTS biz_notify_rule;
|
||||
CREATE TABLE biz_notify_rule (
|
||||
rule_id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '规则ID',
|
||||
tenant_id BIGINT DEFAULT 0 COMMENT '租户ID',
|
||||
rule_name VARCHAR(100) NOT NULL COMMENT '规则名称',
|
||||
notice_type VARCHAR(32) NOT NULL COMMENT '通知类型',
|
||||
biz_type VARCHAR(32) COMMENT '业务类型',
|
||||
trigger_condition VARCHAR(500) COMMENT '触发条件(JSON格式)',
|
||||
advance_days INT DEFAULT 0 COMMENT '提前提醒天数(用于到期类提醒)',
|
||||
enabled CHAR(1) DEFAULT '0' COMMENT '是否启用(0停用 1启用)',
|
||||
create_by VARCHAR(64) DEFAULT '' COMMENT '创建者',
|
||||
create_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
|
||||
update_by VARCHAR(64) DEFAULT '' COMMENT '更新者',
|
||||
update_time DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
|
||||
KEY idx_tenant_type (tenant_id, notice_type)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='通知规则配置表';
|
||||
|
||||
-- 3. 初始化默认通知规则
|
||||
INSERT INTO biz_notify_rule (rule_name, notice_type, biz_type, trigger_condition, advance_days, enabled, create_by) VALUES
|
||||
('审批结果通知', 'approval', NULL, '{"event":"approve,reject"}', 0, '1', 'admin'),
|
||||
('报价到期提醒', 'quotation_expire', 'QUOTATION', '{"field":"submit_time","unit":"day"}', 3, '1', 'admin'),
|
||||
('报价到期紧急提醒', 'quotation_expire', 'QUOTATION', '{"field":"submit_time","unit":"day"}', 1, '1', 'admin'),
|
||||
('RFQ截止提醒', 'rfq_deadline', NULL, '{"field":"deadline","unit":"day"}', 2, '1', 'admin'),
|
||||
('系统公告', 'system', NULL, '{}', 0, '1', 'admin');
|
||||
|
||||
-- 4. 菜单权限初始化
|
||||
-- 消息通知中心菜单(挂在"系统配置"目录 menu_id=2130 path=bizconfig 下,与"待我审批"同级)
|
||||
DELETE FROM sys_menu WHERE menu_id IN (2170, 2171, 2172, 2173, 2174);
|
||||
INSERT INTO sys_menu (menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, remark) VALUES
|
||||
(2170, '消息通知中心', 2130, 100, 'notify', 'bid/notify/index', 1, 0, 'C', '0', '0', 'bid:notify:list', 'message', 'admin', sysdate(), '消息通知中心'),
|
||||
(2171, '通知查询', 2170, 1, '', '', 1, 0, 'F', '0', '0', 'bid:notify:query', '#', 'admin', sysdate(), ''),
|
||||
(2172, '通知删除', 2170, 2, '', '', 1, 0, 'F', '0', '0', 'bid:notify:remove', '#', 'admin', sysdate(), ''),
|
||||
(2173, '标记已读', 2170, 3, '', '', 1, 0, 'F', '0', '0', 'bid:notify:read', '#', 'admin', sysdate(), ''),
|
||||
(2174, '通知规则配置', 2170, 4, '', '', 1, 0, 'F', '0', '0', 'bid:notify:rule', '#', 'admin', sysdate(), '');
|
||||
|
||||
-- 为 admin 角色授权
|
||||
DELETE FROM sys_role_menu WHERE role_id = 1 AND menu_id IN (2170, 2171, 2172, 2173, 2174);
|
||||
INSERT INTO sys_role_menu (role_id, menu_id) VALUES
|
||||
(1, 2170), (1, 2171), (1, 2172), (1, 2173), (1, 2174);
|
||||
20
sql/bid_notify_fix.sql
Normal file
20
sql/bid_notify_fix.sql
Normal file
@@ -0,0 +1,20 @@
|
||||
-- ════════════════════════════════════════════════════════════════════
|
||||
-- 消息通知中心 - Bug 修复脚本
|
||||
-- 修复内容:
|
||||
-- 1. 注册 Quartz 定时任务(报价到期检查)
|
||||
-- 2. 将现有待审批的 CLIENT_QUOTE(quote_id=6) 状态重置为 draft
|
||||
-- ════════════════════════════════════════════════════════════════════
|
||||
SET NAMES utf8mb4;
|
||||
|
||||
-- 1. 注册 Quartz 定时任务(报价到期检查,每天上午9点执行)
|
||||
-- 如果已通过 UI 注册则跳过
|
||||
DELETE FROM sys_job WHERE job_name = '报价到期检查' AND job_group = 'DEFAULT';
|
||||
INSERT INTO sys_job (job_id, job_name, job_group, invoke_target, cron_expression,
|
||||
misfire_policy, concurrent, status, create_by, create_time, remark)
|
||||
VALUES (100, '报价到期检查', 'DEFAULT',
|
||||
'quotationExpireTask.checkQuotationExpire()',
|
||||
'0 0 9 * * ?',
|
||||
'3', '1', '0', 'admin', sysdate(), '报价到期提醒,每天检查即将到期和已过期的报价单');
|
||||
|
||||
-- 2. 将 quote_id=6 的测试数据重置为 draft 方便重新测试审批提交通知
|
||||
UPDATE biz_client_quote SET status = 'draft', update_time = sysdate() WHERE quote_id = 6 AND status = '10';
|
||||
21
sql/bid_notify_fix2.sql
Normal file
21
sql/bid_notify_fix2.sql
Normal file
@@ -0,0 +1,21 @@
|
||||
-- ════════════════════════════════════════════════════════════════════
|
||||
-- 消息通知中心 - 修复脚本 #2
|
||||
-- 修复内容:
|
||||
-- 1. 修复现有通知 is_read=NULL 的问题(导致铃铛未读数为0)
|
||||
-- 2. 将消息通知中心菜单从"系统管理"下移到"系统配置"下,与"待我审批"同级
|
||||
-- ════════════════════════════════════════════════════════════════════
|
||||
SET NAMES utf8mb4;
|
||||
|
||||
-- 1. 修复现有数据的 is_read=NULL → '0'(新消息默认未读)
|
||||
UPDATE biz_notify_message SET is_read = '0' WHERE is_read IS NULL OR is_read = '';
|
||||
|
||||
-- 2. 移动"消息通知中心"菜单从"系统管理"(parent_id=1) 到"系统配置"(parent_id=2130)
|
||||
-- 放到"待我审批"(order_num=99) 之后,order_num=100
|
||||
UPDATE sys_menu SET parent_id = 2130, order_num = 100
|
||||
WHERE menu_id = 2170 AND parent_id = 1;
|
||||
|
||||
-- 3. 为 admin 角色重新授权(菜单路径变了,权限不受影响,但刷新一下角色-菜单关联)
|
||||
-- 注: role_id=1(admin) 的关联已在初始化 SQL 中添加,这里不做重复插入
|
||||
|
||||
-- 4. 清理之前插入的测试通知记录(is_read 已修复,保留即可)
|
||||
-- 无需操作
|
||||
17
sql/bid_notify_fix3.sql
Normal file
17
sql/bid_notify_fix3.sql
Normal file
@@ -0,0 +1,17 @@
|
||||
-- ════════════════════════════════════════════════════════════════════
|
||||
-- 消息通知中心 - 修复脚本 #3
|
||||
-- 修复内容:
|
||||
-- 1. 修复通知菜单路径为绝对路径 /bid/notify(解决"查看全部" 404)
|
||||
-- 2. 修复所有通知的 bizUrl 跳转路径(解决"查看详情" 404)
|
||||
-- ════════════════════════════════════════════════════════════════════
|
||||
SET NAMES utf8mb4;
|
||||
|
||||
-- 1. 修复通知菜单路径为绝对路径,使 /bid/notify 路由生效
|
||||
UPDATE sys_menu SET path = '/bid/notify' WHERE menu_id = 2170;
|
||||
|
||||
-- 2. 修复现有通知的 bizUrl(将旧路径改为正确路径)
|
||||
UPDATE biz_notify_message SET biz_url = REPLACE(biz_url, '/bid/purchaseorder?id=', '/quote/purchaseorder?id=') WHERE biz_url LIKE '/bid/purchaseorder?id=%';
|
||||
UPDATE biz_notify_message SET biz_url = REPLACE(biz_url, '/bid/clientquote?id=', '/bid/clientquote/detail?id=') WHERE biz_url LIKE '/bid/clientquote?id=%';
|
||||
UPDATE biz_notify_message SET biz_url = REPLACE(biz_url, '/bid/quotation?quotationId=', '/quote/quotation?quotationId=') WHERE biz_url LIKE '/bid/quotation?quotationId=%';
|
||||
UPDATE biz_notify_message SET biz_url = REPLACE(biz_url, '/bid/order/pending?id=', '/bid/order/pending?id=') WHERE biz_url LIKE '/bid/order/pending?id=%';
|
||||
UPDATE biz_notify_message SET biz_url = REPLACE(biz_url, '/bid/objection?id=', '/bid/order/objection?id=') WHERE biz_url LIKE '/bid/objection?id=%';
|
||||
Reference in New Issue
Block a user