IM 功能设计
这篇解决什么
完整 IM 怎么分层:频道 / 好友 / 群是关系主数据,三类消息是业务。读完先对模块边界和表,以及它和 OA 轻聊不是同一套会话。
默认端口 48080,前缀 /admin-api。工程启动见 快速开始。
业务流程及架构
IM 自己不算流程引擎,没有 processDefinitionKey。配置 yudao.office.im-mode 只改顶栏 / 审批找人 / 移动端底栏联动。两套菜单不会互斥隐藏。
示意图:默认 im-mode: oa。改成 im 且 classpath 有 ImProperties 才走完整 IM。切换不迁历史会话。
| 名称 | 说明 | 仓库路径 |
|---|---|---|
| 频道 | im_channel / im_channel_material | 频道、频道素材 |
| 好友 | im_friend / im_friend_request | 好友关系、好友申请 |
| 群 | im_group / im_group_member | 群组、群成员 |
| 消息 | im_private_message / im_group_message / im_channel_message | 私聊、群聊、频道消息 |
| 表情 / 敏感词 | im_face_* / im_sensitive_word | 表情、敏感词 |
| WebSocket / RTC | 推送、通话 | IM WebSocket、音视频通话 |
| 移动 | IM 搬家 | 移动端 IM |
轻聊和完整 IM 不是同一套表
views/oa/im 是企业内轻聊。本指南后面几篇写的是 yudao-module-im。两套会话不能互相看见。
菜单在不等于通道已切
im-mode 不自动停另一套入口。实施要在菜单管理里自己停 6030 或 7500。没引入模块会回落 oa,并去掉 7500 整棵菜单。
数据表 ER
主干表按已有篇和 DO 画出。表情包、RTC 通话、已读游标不进这张图。
示意图:群和频道挂各自的消息表。好友在 im_friend,私聊在 im_private_message,两张表没有外键。
前后端代码
| 名称 | 说明 | 仓库路径 |
|---|---|---|
| 模块 | 好友、群、频道、消息、RTC | ruoyi-office/yudao-module-im/ |
| 单体引入 | yudao-module-im-server | ruoyi-office/yudao-server/pom.xml |
| 通道 | OfficeImModeService | yudao-module-system/.../office/core/OfficeImModeService.java |
| 配置 | yudao.office.im-mode | application.yaml |
| 用户端 | 会话页 | ruoyi-office-vben/apps/web-antd/src/views/im/home/ |
| 运营端 | 管理页 | views/im/manager/ |
| 轻聊 | OA 即时通讯 | views/oa/im/ |
官方菜单:完整 IM 根 7500。OA 即时通讯(轻聊)是 6030。OA 版默认走轻聊菜单。
运行参数在 yudao.im:好友自动通过、群人数上限、表情上限、已读开关、LiveKit。YAML 没写就用 ImProperties 默认值。微服务可单独起 im-server(模块配置端口 48093),单体日常不用。缺表时全局异常会提示导入 IM 结构。

本系统截图:完整 IM 会话页。im-mode 切到 im 后顶栏走这一套。

本系统截图:好友关系。互加两行落 im_friend。
功能开启
单体 -P boot 时已经依赖 IM 实现,没有单独的「IM 开关」页。启动 YudaoServerApplication 即可。
客户默认包 ruoyi-office-db/dump/latest/ 带 im_friend、im_group、im_channel、im_face_*、im_sensitive_word 等表。以后改表走 ruoyi-office-db/update/。
默认 im-mode: oa。要完整 IM 再改成 im,并在角色里勾选 7500。
示意图:先表和菜单。再决定顶栏走哪条通道。
旧文 IM 功能开启 已并入本页,请收藏本篇。
