新增IM聊天

This commit is contained in:
geht
2026-05-28 14:37:05 +08:00
parent 99e574f600
commit 3539eab924
35 changed files with 2864 additions and 36 deletions

View File

@@ -0,0 +1,70 @@
-- 租户 IM 聊天表结构 + 我的租户菜单
SET NAMES utf8mb4;
CREATE TABLE IF NOT EXISTS `sys_im_conversation` (
`id` varchar(32) NOT NULL COMMENT '主键',
`conv_type` varchar(10) NOT NULL DEFAULT 'single' COMMENT '会话类型 single单聊',
`user_pair_key` varchar(80) DEFAULT NULL COMMENT '单聊唯一键(较小userId_较大userId)',
`tenant_id` int DEFAULT NULL COMMENT '租户ID',
`last_content` varchar(500) DEFAULT NULL COMMENT '最后一条消息摘要',
`last_time` datetime DEFAULT NULL COMMENT '最后消息时间',
`create_by` varchar(50) DEFAULT NULL COMMENT '创建人',
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
`update_by` varchar(50) DEFAULT NULL COMMENT '更新人',
`update_time` datetime DEFAULT NULL COMMENT '更新时间',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_im_conv_pair` (`tenant_id`, `user_pair_key`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='IM会话表';
CREATE TABLE IF NOT EXISTS `sys_im_conversation_member` (
`id` varchar(32) NOT NULL COMMENT '主键',
`conversation_id` varchar(32) NOT NULL COMMENT '会话ID',
`user_id` varchar(32) NOT NULL COMMENT '用户ID',
`unread_count` int NOT NULL DEFAULT 0 COMMENT '未读数',
`last_read_time` datetime DEFAULT NULL COMMENT '最后已读时间',
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_im_member` (`conversation_id`, `user_id`),
KEY `idx_im_member_user` (`user_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='IM会话成员表';
CREATE TABLE IF NOT EXISTS `sys_im_message` (
`id` varchar(32) NOT NULL COMMENT '主键',
`conversation_id` varchar(32) NOT NULL COMMENT '会话ID',
`sender_id` varchar(32) NOT NULL COMMENT '发送人ID',
`content` text COMMENT '消息内容',
`msg_type` varchar(20) NOT NULL DEFAULT 'text' COMMENT '消息类型 text/image/file',
`tenant_id` int DEFAULT NULL COMMENT '租户ID',
`create_time` datetime DEFAULT NULL COMMENT '发送时间',
PRIMARY KEY (`id`),
KEY `idx_im_msg_conv_time` (`conversation_id`, `create_time`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='IM消息表';
INSERT IGNORE INTO `sys_permission` (
`id`, `parent_id`, `name`, `url`, `component`, `is_route`, `component_name`, `redirect`,
`menu_type`, `perms`, `perms_type`, `sort_no`, `always_show`, `icon`, `is_leaf`, `keep_alive`,
`hidden`, `hide_tab`, `description`, `create_by`, `create_time`, `update_by`, `update_time`,
`del_flag`, `rule_flag`, `status`, `internal_or_external`
) VALUES (
'1995000000000000110', '1674708136602542082', 'IM聊天', '/my/ImChat',
'system/im/ImChat', 1, 'ImChat', NULL,
1, NULL, '0', 1.10, 0, 'ant-design:message-outlined', 0, 1,
0, 0, '租户内用户即时聊天', 'admin', NOW(), 'admin', NOW(),
0, 0, '1', 0
);
INSERT IGNORE INTO `sys_permission` (`id`, `parent_id`, `name`, `menu_type`, `perms`, `perms_type`, `sort_no`, `is_route`, `is_leaf`, `hidden`, `status`, `del_flag`, `create_by`, `create_time`)
VALUES ('1995000000000000111', '1995000000000000110', '查询', 2, 'sys:im:chat:list', '1', 1.00, 0, 1, 0, '1', 0, 'admin', NOW());
INSERT IGNORE INTO `sys_permission` (`id`, `parent_id`, `name`, `menu_type`, `perms`, `perms_type`, `sort_no`, `is_route`, `is_leaf`, `hidden`, `status`, `del_flag`, `create_by`, `create_time`)
VALUES ('1995000000000000112', '1995000000000000110', '发送', 2, 'sys:im:chat:send', '1', 2.00, 0, 1, 0, '1', 0, 'admin', NOW());
INSERT INTO `sys_role_permission` (`id`, `role_id`, `permission_id`, `data_rule_ids`, `operate_date`, `operate_ip`)
SELECT REPLACE(UUID(), '-', ''), r.id, p.id, NULL, NOW(), '127.0.0.1'
FROM `sys_role` r
CROSS JOIN `sys_permission` p
WHERE r.`role_code` = 'admin'
AND p.`id` IN ('1995000000000000110', '1995000000000000111', '1995000000000000112')
AND NOT EXISTS (
SELECT 1 FROM `sys_role_permission` rp WHERE rp.`role_id` = r.`id` AND rp.`permission_id` = p.`id`
);