-- =====================================================
-- IM 即时通讯模块数据库表结构
-- 生成日期: 2026-06-29
-- 适用项目: mom-pro2-after
-- 包含: 好友管理、群聊管理、私聊消息、群聊消息
-- =====================================================

-- =====================================================
-- 第一部分: 字典类型定义
-- =====================================================

-- IM 私聊消息状态
INSERT INTO `system_dict_type` (`id`, `name`, `type`, `status`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`)
VALUES (600, 'IM 私聊消息状态', 'im_private_message_status', 0, '私聊消息状态', 'admin', NOW(), 'admin', NOW(), b'0');

-- IM 群聊消息状态
INSERT INTO `system_dict_type` (`id`, `name`, `type`, `status`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`)
VALUES (601, 'IM 群聊消息状态', 'im_group_message_status', 0, '群聊消息状态', 'admin', NOW(), 'admin', NOW(), b'0');

-- IM 群聊消息回执状态
INSERT INTO `system_dict_type` (`id`, `name`, `type`, `status`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`)
VALUES (602, 'IM 群聊消息回执状态', 'im_group_message_receipt_status', 0, '群聊消息回执状态', 'admin', NOW(), 'admin', NOW(), b'0');

-- IM 好友状态
INSERT INTO `system_dict_type` (`id`, `name`, `type`, `status`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`)
VALUES (603, 'IM 好友状态', 'im_friend_status', 0, '好友状态', 'admin', NOW(), 'admin', NOW(), b'0');

-- IM 群状态
INSERT INTO `system_dict_type` (`id`, `name`, `type`, `status`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`)
VALUES (604, 'IM 群状态', 'im_group_status', 0, '群状态', 'admin', NOW(), 'admin', NOW(), b'0');

-- IM 群成员角色
INSERT INTO `system_dict_type` (`id`, `name`, `type`, `status`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`)
VALUES (605, 'IM 群成员角色', 'im_group_member_role', 0, '群成员角色', 'admin', NOW(), 'admin', NOW(), b'0');

-- IM 好友添加来源
INSERT INTO `system_dict_type` (`id`, `name`, `type`, `status`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`)
VALUES (606, 'IM 好友添加来源', 'im_friend_add_source', 0, '好友添加来源', 'admin', NOW(), 'admin', NOW(), b'0');

-- IM 好友申请处理结果
INSERT INTO `system_dict_type` (`id`, `name`, `type`, `status`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`)
VALUES (607, 'IM 好友申请处理结果', 'im_friend_request_handle_result', 0, '好友申请处理结果', 'admin', NOW(), 'admin', NOW(), b'0');

-- IM 消息类型
INSERT INTO `system_dict_type` (`id`, `name`, `type`, `status`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`)
VALUES (608, 'IM 消息类型', 'im_message_type', 0, '消息类型', 'admin', NOW(), 'admin', NOW(), b'0');

-- =====================================================
-- 第二部分: 字典数据定义
-- =====================================================

-- IM 私聊消息状态字典数据
INSERT INTO `system_dict_data` (`sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`)
VALUES (1, '未读', '0', 'im_private_message_status', 0, 'warning', '', '私聊=未读', 'admin', NOW(), 'admin', NOW(), b'0');
INSERT INTO `system_dict_data` (`sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`)
VALUES (2, '已撤回', '2', 'im_private_message_status', 0, 'danger', '', 'RECALL', 'admin', NOW(), 'admin', NOW(), b'0');
INSERT INTO `system_dict_data` (`sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`)
VALUES (3, '已读', '3', 'im_private_message_status', 0, 'success', '', 'READ', 'admin', NOW(), 'admin', NOW(), b'0');

-- IM 群聊消息状态字典数据
INSERT INTO `system_dict_data` (`sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`)
VALUES (1, '正常', '0', 'im_group_message_status', 0, 'success', '', '群聊正常', 'admin', NOW(), 'admin', NOW(), b'0');
INSERT INTO `system_dict_data` (`sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`)
VALUES (2, '已撤回', '2', 'im_group_message_status', 0, 'danger', '', '群聊已撤回', 'admin', NOW(), 'admin', NOW(), b'0');

-- IM 好友状态字典数据
INSERT INTO `system_dict_data` (`sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`)
VALUES (1, '正常', '0', 'im_friend_status', 0, 'success', '', '正常好友关系', 'admin', NOW(), 'admin', NOW(), b'0');
INSERT INTO `system_dict_data` (`sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`)
VALUES (2, '已删除', '1', 'im_friend_status', 0, 'danger', '', '已删除好友关系', 'admin', NOW(), 'admin', NOW(), b'0');

-- IM 群状态字典数据
INSERT INTO `system_dict_data` (`sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`)
VALUES (1, '正常', '0', 'im_group_status', 0, 'success', '', '群正常', 'admin', NOW(), 'admin', NOW(), b'0');
INSERT INTO `system_dict_data` (`sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`)
VALUES (2, '已解散', '1', 'im_group_status', 0, 'info', '', '群已解散', 'admin', NOW(), 'admin', NOW(), b'0');

-- IM 群成员角色字典数据
INSERT INTO `system_dict_data` (`sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`)
VALUES (1, '群主', '1', 'im_group_member_role', 0, 'primary', '', NULL, 'admin', NOW(), 'admin', NOW(), b'0');
INSERT INTO `system_dict_data` (`sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`)
VALUES (2, '管理员', '2', 'im_group_member_role', 0, 'warning', '', NULL, 'admin', NOW(), 'admin', NOW(), b'0');
INSERT INTO `system_dict_data` (`sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`)
VALUES (3, '普通成员', '3', 'im_group_member_role', 0, 'info', '', NULL, 'admin', NOW(), 'admin', NOW(), b'0');

-- IM 好友添加来源字典数据
INSERT INTO `system_dict_data` (`sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`)
VALUES (1, '搜索', '1', 'im_friend_add_source', 0, 'default', '', NULL, 'admin', NOW(), 'admin', NOW(), b'0');
INSERT INTO `system_dict_data` (`sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`)
VALUES (2, '群聊', '2', 'im_friend_add_source', 0, 'default', '', NULL, 'admin', NOW(), 'admin', NOW(), b'0');
INSERT INTO `system_dict_data` (`sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`)
VALUES (3, '扫码', '3', 'im_friend_add_source', 0, 'default', '', NULL, 'admin', NOW(), 'admin', NOW(), b'0');
INSERT INTO `system_dict_data` (`sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`)
VALUES (4, '名片', '4', 'im_friend_add_source', 0, 'default', '', NULL, 'admin', NOW(), 'admin', NOW(), b'0');

-- IM 好友申请处理结果字典数据
INSERT INTO `system_dict_data` (`sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`)
VALUES (1, '等待验证', '0', 'im_friend_request_handle_result', 0, 'warning', '', NULL, 'admin', NOW(), 'admin', NOW(), b'0');
INSERT INTO `system_dict_data` (`sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`)
VALUES (2, '已添加', '1', 'im_friend_request_handle_result', 0, 'success', '', NULL, 'admin', NOW(), 'admin', NOW(), b'0');
INSERT INTO `system_dict_data` (`sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`)
VALUES (3, '已拒绝', '2', 'im_friend_request_handle_result', 0, 'info', '', NULL, 'admin', NOW(), 'admin', NOW(), b'0');

-- IM 消息类型字典数据
INSERT INTO `system_dict_data` (`sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`)
VALUES (101, '文本', '101', 'im_message_type', 0, '', '', NULL, 'admin', NOW(), 'admin', NOW(), b'0');
INSERT INTO `system_dict_data` (`sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`)
VALUES (102, '图片', '102', 'im_message_type', 0, 'success', '', NULL, 'admin', NOW(), 'admin', NOW(), b'0');
INSERT INTO `system_dict_data` (`sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`)
VALUES (103, '语音', '103', 'im_message_type', 0, 'warning', '', NULL, 'admin', NOW(), 'admin', NOW(), b'0');
INSERT INTO `system_dict_data` (`sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`)
VALUES (104, '视频', '104', 'im_message_type', 0, 'warning', '', NULL, 'admin', NOW(), 'admin', NOW(), b'0');
INSERT INTO `system_dict_data` (`sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`)
VALUES (105, '文件', '105', 'im_message_type', 0, 'info', '', NULL, 'admin', NOW(), 'admin', NOW(), b'0');
INSERT INTO `system_dict_data` (`sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`)
VALUES (2101, '撤回', '2101', 'im_message_type', 0, 'danger', '', NULL, 'admin', NOW(), 'admin', NOW(), b'0');
INSERT INTO `system_dict_data` (`sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`)
VALUES (2200, '回执', '2200', 'im_message_type', 0, 'warning', '', NULL, 'admin', NOW(), 'admin', NOW(), b'0');
INSERT INTO `system_dict_data` (`sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`)
VALUES (2201, '已读', '2201', 'im_message_type', 0, 'success', '', NULL, 'admin', NOW(), 'admin', NOW(), b'0');

-- IM 群消息回执状态
INSERT INTO `system_dict_data` (`sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`)
VALUES (1, '不需要回执', '0', 'im_group_message_receipt_status', 0, 'info', '', 'NO_RECEIPT', 'admin', NOW(), 'admin', NOW(), b'0');
INSERT INTO `system_dict_data` (`sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`)
VALUES (2, '待完成', '1', 'im_group_message_receipt_status', 0, 'warning', '', 'PENDING', 'admin', NOW(), 'admin', NOW(), b'0');
INSERT INTO `system_dict_data` (`sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`)
VALUES (3, '已完成', '2', 'im_group_message_receipt_status', 0, 'success', '', 'DONE', 'admin', NOW(), 'admin', NOW(), b'0');

-- =====================================================
-- 第三部分: IM 模块核心表结构 (11 张表)
-- =====================================================

-- 3.1 好友关系表
DROP TABLE IF EXISTS `im_friend`;
CREATE TABLE `im_friend` (
  `id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键',
  `user_id` bigint NOT NULL COMMENT '用户编号',
  `friend_user_id` bigint NOT NULL COMMENT '好友用户编号',
  `remark` varchar(255) DEFAULT NULL COMMENT '好友备注',
  `status` tinyint NOT NULL DEFAULT 0 COMMENT '好友状态（0正常 1已删除）',
  `creator` varchar(64) DEFAULT '' COMMENT '创建者',
  `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `updater` varchar(64) DEFAULT '' COMMENT '更新者',
  `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除',
  PRIMARY KEY (`id`),
  KEY `idx_user_id` (`user_id`),
  KEY `idx_friend_user_id` (`friend_user_id`),
  UNIQUE KEY `uk_user_friend` (`user_id`, `friend_user_id`)
) ENGINE=InnoDB COMMENT='好友关系表';

-- 3.2 好友申请表
DROP TABLE IF EXISTS `im_friend_request`;
CREATE TABLE `im_friend_request` (
  `id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键',
  `user_id` bigint NOT NULL COMMENT '申请人编号',
  `target_user_id` bigint NOT NULL COMMENT '目标用户编号',
  `content` varchar(500) DEFAULT NULL COMMENT '申请内容',
  `source` tinyint NOT NULL DEFAULT 1 COMMENT '添加来源（1搜索 2群聊 3扫码 4名片）',
  `handle_result` tinyint NOT NULL DEFAULT 0 COMMENT '处理结果（0等待 1已添加 2已拒绝）',
  `handle_time` datetime DEFAULT NULL COMMENT '处理时间',
  `creator` varchar(64) DEFAULT '' COMMENT '创建者',
  `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `updater` varchar(64) DEFAULT '' COMMENT '更新者',
  `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除',
  PRIMARY KEY (`id`),
  KEY `idx_user_id` (`user_id`),
  KEY `idx_target_user_id` (`target_user_id`)
) ENGINE=InnoDB COMMENT='好友申请表';

-- 3.3 群组表
DROP TABLE IF EXISTS `im_group`;
CREATE TABLE `im_group` (
  `id` bigint NOT NULL AUTO_INCREMENT COMMENT '群编号',
  `name` varchar(100) NOT NULL COMMENT '群名称',
  `avatar` varchar(255) DEFAULT NULL COMMENT '群头像',
  `owner_user_id` bigint NOT NULL COMMENT '群主用户编号',
  `notice` varchar(500) DEFAULT NULL COMMENT '群公告',
  `status` tinyint NOT NULL DEFAULT 0 COMMENT '群状态（0正常 1已解散）',
  `creator` varchar(64) DEFAULT '' COMMENT '创建者',
  `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `updater` varchar(64) DEFAULT '' COMMENT '更新者',
  `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除',
  PRIMARY KEY (`id`),
  KEY `idx_owner_user_id` (`owner_user_id`)
) ENGINE=InnoDB COMMENT='群组表';

-- 3.4 群成员表
DROP TABLE IF EXISTS `im_group_member`;
CREATE TABLE `im_group_member` (
  `id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键',
  `group_id` bigint NOT NULL COMMENT '群编号',
  `user_id` bigint NOT NULL COMMENT '用户编号',
  `nickname` varchar(100) DEFAULT NULL COMMENT '群内昵称',
  `role` tinyint NOT NULL DEFAULT 3 COMMENT '群角色（1群主 2管理员 3普通成员）',
  `mute_flag` bit(1) DEFAULT b'0' COMMENT '是否禁言',
  `creator` varchar(64) DEFAULT '' COMMENT '创建者',
  `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `updater` varchar(64) DEFAULT '' COMMENT '更新者',
  `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除',
  PRIMARY KEY (`id`),
  KEY `idx_group_id` (`group_id`),
  KEY `idx_user_id` (`user_id`),
  UNIQUE KEY `uk_group_user` (`group_id`, `user_id`)
) ENGINE=InnoDB COMMENT='群成员表';

-- 3.5 私聊消息表
DROP TABLE IF EXISTS `im_private_message`;
CREATE TABLE `im_private_message` (
  `id` bigint NOT NULL AUTO_INCREMENT COMMENT '消息编号',
  `from_user_id` bigint NOT NULL COMMENT '发送人编号',
  `to_user_id` bigint NOT NULL COMMENT '接收人编号',
  `content` text COMMENT '消息内容',
  `message_type` int NOT NULL DEFAULT 101 COMMENT '消息类型（101文本 102图片 103语音 104视频 105文件）',
  `status` tinyint NOT NULL DEFAULT 0 COMMENT '消息状态（0未读 2已撤回 3已读）',
  `send_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '发送时间',
  `read_time` datetime DEFAULT NULL COMMENT '已读时间',
  `creator` varchar(64) DEFAULT '' COMMENT '创建者',
  `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `updater` varchar(64) DEFAULT '' COMMENT '更新者',
  `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除',
  PRIMARY KEY (`id`),
  KEY `idx_from_user_id` (`from_user_id`),
  KEY `idx_to_user_id` (`to_user_id`)
) ENGINE=InnoDB COMMENT='私聊消息表';

-- 3.6 群聊消息表
DROP TABLE IF EXISTS `im_group_message`;
CREATE TABLE `im_group_message` (
  `id` bigint NOT NULL AUTO_INCREMENT COMMENT '消息编号',
  `group_id` bigint NOT NULL COMMENT '群编号',
  `from_user_id` bigint NOT NULL COMMENT '发送人编号',
  `content` text COMMENT '消息内容',
  `message_type` int NOT NULL DEFAULT 101 COMMENT '消息类型',
  `status` tinyint NOT NULL DEFAULT 0 COMMENT '消息状态（0正常 2已撤回）',
  `receipt_status` tinyint NOT NULL DEFAULT 0 COMMENT '回执状态（0不需要 1待完成 2已完成）',
  `send_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '发送时间',
  `creator` varchar(64) DEFAULT '' COMMENT '创建者',
  `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `updater` varchar(64) DEFAULT '' COMMENT '更新者',
  `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除',
  PRIMARY KEY (`id`),
  KEY `idx_group_id` (`group_id`),
  KEY `idx_from_user_id` (`from_user_id`)
) ENGINE=InnoDB COMMENT='群聊消息表';

-- 3.7 群消息回执表
DROP TABLE IF EXISTS `im_group_message_receipt`;
CREATE TABLE `im_group_message_receipt` (
  `id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键',
  `message_id` bigint NOT NULL COMMENT '群消息编号',
  `user_id` bigint NOT NULL COMMENT '用户编号',
  `read_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '已读时间',
  `creator` varchar(64) DEFAULT '' COMMENT '创建者',
  `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `updater` varchar(64) DEFAULT '' COMMENT '更新者',
  `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除',
  PRIMARY KEY (`id`),
  KEY `idx_message_id` (`message_id`),
  KEY `idx_user_id` (`user_id`),
  UNIQUE KEY `uk_message_user` (`message_id`, `user_id`)
) ENGINE=InnoDB COMMENT='群消息回执表';

-- 3.8 会话表（私聊+群聊）
DROP TABLE IF EXISTS `im_conversation`;
CREATE TABLE `im_conversation` (
  `id` bigint NOT NULL AUTO_INCREMENT COMMENT '会话编号',
  `user_id` bigint NOT NULL COMMENT '用户编号',
  `conversation_type` tinyint NOT NULL COMMENT '会话类型（1私聊 2群聊）',
  `target_id` bigint NOT NULL COMMENT '目标编号（私聊为用户ID，群聊为群ID）',
  `last_message_id` bigint DEFAULT NULL COMMENT '最后消息编号',
  `last_message_time` datetime DEFAULT NULL COMMENT '最后消息时间',
  `unread_count` int NOT NULL DEFAULT 0 COMMENT '未读消息数',
  `creator` varchar(64) DEFAULT '' COMMENT '创建者',
  `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `updater` varchar(64) DEFAULT '' COMMENT '更新者',
  `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除',
  PRIMARY KEY (`id`),
  KEY `idx_user_id` (`user_id`),
  UNIQUE KEY `uk_user_target_type` (`user_id`, `target_id`, `conversation_type`)
) ENGINE=InnoDB COMMENT='会话表';

-- 3.9 用户在线状态表
DROP TABLE IF EXISTS `im_user_online`;
CREATE TABLE `im_user_online` (
  `id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键',
  `user_id` bigint NOT NULL COMMENT '用户编号',
  `online_status` tinyint NOT NULL DEFAULT 0 COMMENT '在线状态（0离线 1在线）',
  `last_online_time` datetime DEFAULT NULL COMMENT '最后在线时间',
  `last_offline_time` datetime DEFAULT NULL COMMENT '最后离线时间',
  `device_type` tinyint DEFAULT NULL COMMENT '设备类型（1Web 2Android 3iOS）',
  `creator` varchar(64) DEFAULT '' COMMENT '创建者',
  `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `updater` varchar(64) DEFAULT '' COMMENT '更新者',
  `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除',
  PRIMARY KEY (`id`),
  KEY `idx_user_id` (`user_id`),
  UNIQUE KEY `uk_user_id` (`user_id`)
) ENGINE=InnoDB COMMENT='用户在线状态表';

-- 3.10 群申请表
DROP TABLE IF EXISTS `im_group_request`;
CREATE TABLE `im_group_request` (
  `id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键',
  `group_id` bigint NOT NULL COMMENT '群编号',
  `user_id` bigint NOT NULL COMMENT '申请人编号',
  `content` varchar(500) DEFAULT NULL COMMENT '申请内容',
  `handle_result` tinyint NOT NULL DEFAULT 0 COMMENT '处理结果（0等待 1已通过 2已拒绝）',
  `handle_user_id` bigint DEFAULT NULL COMMENT '处理人编号',
  `handle_time` datetime DEFAULT NULL COMMENT '处理时间',
  `creator` varchar(64) DEFAULT '' COMMENT '创建者',
  `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `updater` varchar(64) DEFAULT '' COMMENT '更新者',
  `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除',
  PRIMARY KEY (`id`),
  KEY `idx_group_id` (`group_id`),
  KEY `idx_user_id` (`user_id`)
) ENGINE=InnoDB COMMENT='群申请表';

-- 3.11 消息文件表
DROP TABLE IF EXISTS `im_message_file`;
CREATE TABLE `im_message_file` (
  `id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键',
  `message_id` bigint NOT NULL COMMENT '消息编号',
  `message_type` tinyint NOT NULL COMMENT '消息类型（102图片 103语音 104视频 105文件）',
  `file_url` varchar(500) NOT NULL COMMENT '文件URL',
  `file_name` varchar(255) DEFAULT NULL COMMENT '文件名',
  `file_size` bigint DEFAULT NULL COMMENT '文件大小（字节）',
  `file_duration` int DEFAULT NULL COMMENT '文件时长（秒，语音/视频）',
  `width` int DEFAULT NULL COMMENT '宽度（图片/视频）',
  `height` int DEFAULT NULL COMMENT '高度（图片/视频）',
  `creator` varchar(64) DEFAULT '' COMMENT '创建者',
  `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `updater` varchar(64) DEFAULT '' COMMENT '更新者',
  `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除',
  PRIMARY KEY (`id`),
  KEY `idx_message_id` (`message_id`)
) ENGINE=InnoDB COMMENT='消息文件表';

-- =====================================================
-- IM 模块表统计: 11 张表
-- =====================================================