# yudao-module-demo **Repository Path**: sxran/yudao-module-demo ## Basic Information - **Project Name**: yudao-module-demo - **Description**: 将微服务的模块维护在独立的仓库 - **Primary Language**: Unknown - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-07-20 - **Last Updated**: 2025-10-03 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # IM聊天系统核心功能设计文档 ## 功能概述 该IM聊天系统设计实现了以下核心功能,支持单聊、群聊、语音和视频通话、多端同步等基础聊天功能,同时具备消息存储、撤回、删除等功能。系统以消息传递为主,确保高效、安全的实时通讯。 ## 核心功能 ### 1. 消息发送与接收 #### 单聊 - 用户之间可以进行一对一的聊天,支持发送多种消息类型: - 文本消息 - 语音消息 - 图片消息 - 视频消息 - 文件消息 #### 群聊 - 多个用户可以在群聊中进行互动,支持发送以下消息类型: - 文本消息 - 图片消息 - 文件消息 - 群聊功能包括管理群成员、群公告等。 ### 2. 消息类型 支持以下多种类型的消息: - **文本消息**:普通文本信息。 - **语音消息**:通过语音发送的消息。 - **图片消息**:发送图片。 - **视频消息**:发送视频。 - **文件消息**:可以发送各种文件。 - **表情消息**:支持常见的表情包和动态表情。 - **动态表情**:可以发送动态表情(如GIF)。 ### 3. 消息存储与历史记录 - 所有消息都会进行存储,并支持历史记录的查看。 - 支持本地存储与云存储两种方式,确保消息的持久化。 - 用户可以方便地查找历史消息记录。 ### 4. 消息推送与通知 - 支持消息推送功能,实时推送未读消息。 - 当用户离线时,系统会缓存消息,用户上线后推送未读消息。 ### 5. 在线状态管理 - 支持用户设置以下几种状态: - **在线**:用户在线,能够接收消息。 - **离线**:用户不在线,无法接收消息。 - **隐身**:用户在线但显示为隐身状态。 - **忙碌**:用户在线但显示为忙碌,其他人知道该用户可能无法即时响应。 - **离开**:用户暂时离开,状态可由系统自动设定。 - 用户可以查看其他用户的状态,并设置自己的状态。 ### 6. 群组管理 - **创建群组**:用户可以创建新的群组,并邀请其他用户加入。 - **加入群组**:用户可以加入自己感兴趣的群组。 - **退出群组**:用户可以选择退出群组。 - **群成员管理**:群管理员可以管理群成员,进行踢人、设置管理员等操作。 - **群公告**:群管理员可以发布公告,群成员可以查看公告。 ### 7. 多端同步 - 用户同一账户在多个设备(手机、Web端、PC等)之间进行实时同步。 - 所有设备上消息会保持同步,确保用户不会错过任何一条消息。 ### 8. 消息撤回与删除 - **撤回消息**:用户可以撤回自己发送的消息,在规定时间内可以撤回。 - **删除消息**:用户可以删除自己发送的消息或已接收到的消息。 ## 模块结构 ``` yudao-module-im/ ├── yudao-module-im-api/ # API模块,供其他模块调用 │ ├── src/main/java/cn/iocoder/yudao/module/im/api/ │ │ ├── group/ # 群组API │ │ │ ├── dto/ # 数据传输对象 │ │ │ ├── GroupApiConstants.java # API常量定义 │ │ │ └── GroupService.java # Feign服务接口 │ │ ├── status/ # 用户在线状态API │ │ │ ├── dto/ # 数据传输对象 │ │ │ ├── UserStatusApiConstants.java # API常量定义 │ │ │ └── UserStatusService.java # Feign服务接口 │ │ └── announcement/ # 群公告API │ │ ├── dto/ # 数据传输对象 │ │ ├── GroupAnnouncementApiConstants.java # API常量定义 │ │ └── GroupAnnouncementService.java # Feign服务接口 ├── yudao-module-im-server/ # 服务实现模块 │ ├── src/main/java/cn/iocoder/yudao/module/im/ │ │ ├── controller/ # 控制器 │ │ │ ├── admin/ # 后台管理接口 │ │ │ └── app/ # 客户端接口 │ │ ├── service/ # 服务接口 │ │ │ ├── impl/ # 服务实现 │ │ │ └── constants/ # 常量定义 │ │ ├── dal/ # 数据访问层 │ │ │ ├── mapper/ # MyBatis映射器 │ │ │ └── dataobject/ # 数据对象 │ │ ├── config/ # 配置类 │ │ └── framework/ # 框架扩展 │ └── src/main/resources/ # 资源文件 │ ├── db/migration/ # 数据库迁移脚本 │ └── application.yaml # 应用配置 ``` ## 建表规范 表名: 全小写,并且以 im_ 开头。 表结构,必定有以下公共字段 ```SQL `planet_id` bigint NOT NULL DEFAULT '0' COMMENT '星球ID', `creator` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '创建者', `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `updater` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '更新者', `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除', `tenant_id` bigint NOT NULL DEFAULT '0' COMMENT '租户编号', ```