zhibo/Zhibo/zhibo-h/群组聊天模块快速参考.md

12 KiB
Raw Blame History

群组聊天模块快速参考

模块: 模块11 - 群组聊天模块
状态: 已完成
更新时间: 2024年12月26日


📋 核心功能

群组管理

  • 创建群组
  • 更新群组信息
  • 解散群组(逻辑删除)
  • 获取群组列表
  • 获取群组详情
  • 更新群公告
  • 设置全员禁言

成员管理

  • 邀请成员加入
  • 移除成员(逻辑删除)
  • 退出群组(逻辑删除)
  • 获取成员列表
  • 设置管理员
  • 禁言/取消禁言成员
  • 更新群昵称

消息管理

  • 发送群组消息
  • 获取消息列表
  • 撤回消息2分钟内
  • 删除消息(逻辑删除)
  • @提醒功能

🔑 API接口

群组管理接口

# 创建群组
POST /api/front/groups/create
Content-Type: application/json
Authorization: Bearer {token}

{
  "groupName": "我的群组",
  "avatar": "https://example.com/avatar.jpg",
  "description": "群组描述"
}

# 更新群组信息
PUT /api/front/groups/{groupId}
Content-Type: application/json
Authorization: Bearer {token}

{
  "groupName": "新群组名称",
  "avatar": "https://example.com/new-avatar.jpg",
  "description": "新描述",
  "announcement": "群公告"
}

# 解散群组(逻辑删除)
DELETE /api/front/groups/{groupId}
Authorization: Bearer {token}

# 获取用户的群组列表
GET /api/front/groups/list
Authorization: Bearer {token}

# 获取群组详情
GET /api/front/groups/{groupId}
Authorization: Bearer {token}

# 更新群公告
PUT /api/front/groups/{groupId}/announcement
Content-Type: application/json
Authorization: Bearer {token}

{
  "announcement": "新的群公告内容"
}

# 设置全员禁言
PUT /api/front/groups/{groupId}/mute-all
Content-Type: application/json
Authorization: Bearer {token}

{
  "muteAll": true
}

成员管理接口

# 邀请成员加入群组
POST /api/front/groups/{groupId}/members/invite
Content-Type: application/json
Authorization: Bearer {token}

{
  "userIds": [1001, 1002, 1003]
}

# 移除群成员(逻辑删除)
DELETE /api/front/groups/{groupId}/members/{userId}
Authorization: Bearer {token}

# 退出群组(逻辑删除)
POST /api/front/groups/{groupId}/quit
Authorization: Bearer {token}

# 获取群成员列表
GET /api/front/groups/{groupId}/members
Authorization: Bearer {token}

# 设置管理员
PUT /api/front/groups/{groupId}/members/{userId}/admin
Content-Type: application/json
Authorization: Bearer {token}

{
  "isAdmin": true
}

# 禁言成员
PUT /api/front/groups/{groupId}/members/{userId}/mute
Content-Type: application/json
Authorization: Bearer {token}

{
  "muteEndTime": 1703606400000
}

# 取消禁言
PUT /api/front/groups/{groupId}/members/{userId}/unmute
Authorization: Bearer {token}

# 更新群昵称
PUT /api/front/groups/{groupId}/members/nickname
Content-Type: application/json
Authorization: Bearer {token}

{
  "nickname": "我的群昵称"
}

消息管理接口

# 发送群组消息
POST /api/front/groups/{groupId}/messages
Content-Type: application/json
Authorization: Bearer {token}

{
  "messageType": "text",
  "content": "消息内容",
  "mediaUrl": "",
  "atUserIds": [1001, 1002],
  "atAll": false
}

# 获取群组消息列表
GET /api/front/groups/{groupId}/messages?page=1&pageSize=20
Authorization: Bearer {token}

# 撤回群组消息
POST /api/front/groups/messages/{messageId}/recall
Authorization: Bearer {token}

# 删除群组消息(逻辑删除)
DELETE /api/front/groups/messages/{messageId}
Authorization: Bearer {token}

🗄️ 数据库表结构

eb_group群组表

字段 类型 说明
id BIGINT 群组ID主键
group_name VARCHAR(50) 群组名称
avatar VARCHAR(255) 群组头像
owner_id INT 群主ID
announcement VARCHAR(500) 群公告
description VARCHAR(200) 群组描述
max_members INT 最大成员数默认200
member_count INT 当前成员数
allow_member_invite TINYINT(1) 是否允许成员邀请
mute_all TINYINT(1) 是否全员禁言
is_deleted TINYINT(1) 是否删除(逻辑删除)
create_time DATETIME 创建时间
update_time DATETIME 更新时间
ext_field1 VARCHAR(50) 扩展字段1群组分类
ext_field2 VARCHAR(200) 扩展字段2群组标签
ext_field3 INT 扩展字段3群组等级
ext_field4 BIGINT 扩展字段4关联数据ID
ext_field5 TEXT 扩展字段5JSON扩展数据

eb_group_member群成员表

字段 类型 说明
id BIGINT 成员ID主键
group_id BIGINT 群组ID
user_id INT 用户ID
nickname VARCHAR(50) 群昵称
role TINYINT 成员角色0-普通 1-管理员 2-群主)
is_muted TINYINT(1) 是否禁言
mute_end_time DATETIME 禁言到期时间
unread_count INT 未读消息数
is_silent TINYINT(1) 是否静音
is_deleted TINYINT(1) 是否删除(逻辑删除)
join_time DATETIME 加入时间
update_time DATETIME 更新时间
ext_field1 VARCHAR(100) 扩展字段1成员标签
ext_field2 INT 扩展字段2成员等级
ext_field3 VARCHAR(200) 扩展字段3自定义备注
ext_field4 BIGINT 扩展字段4关联数据ID
ext_field5 TEXT 扩展字段5JSON扩展数据

eb_group_message群消息表

字段 类型 说明
id BIGINT 消息ID主键
group_id BIGINT 群组ID
sender_id INT 发送者ID
message_type VARCHAR(20) 消息类型
content VARCHAR(2000) 消息内容
media_url VARCHAR(500) 媒体URL
at_user_ids VARCHAR(500) @的用户ID列表
at_all TINYINT(1) 是否@全体成员
is_recalled TINYINT(1) 是否已撤回
recall_time DATETIME 撤回时间
is_deleted TINYINT(1) 是否删除(逻辑删除)
create_time DATETIME 创建时间
update_time DATETIME 更新时间
ext_field1 VARCHAR(50) 扩展字段1消息来源
ext_field2 BIGINT 扩展字段2引用消息ID
ext_field3 VARCHAR(100) 扩展字段3消息标签
ext_field4 BIGINT 扩展字段4附件大小
ext_field5 TEXT 扩展字段5JSON扩展数据

🔐 权限说明

成员角色

  • 群主role=2:拥有所有权限
  • 管理员role=1:可以管理成员、禁言、修改群公告
  • 普通成员role=0:可以发送消息、邀请成员

权限矩阵

操作 群主 管理员 普通成员
创建群组
更新群组信息
解散群组
更新群公告
设置全员禁言
邀请成员
移除成员
退出群组
设置管理员
禁言成员
发送消息
撤回消息 (仅自己)

💡 使用示例

创建群组并邀请成员

// 1. 创建群组
const createGroupResponse = await fetch('/api/front/groups/create', {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json',
    'Authorization': 'Bearer ' + token
  },
  body: JSON.stringify({
    groupName: '技术交流群',
    avatar: 'https://example.com/group-avatar.jpg',
    description: '讨论技术问题的群组'
  })
});

const group = await createGroupResponse.json();
const groupId = group.data.id;

// 2. 邀请成员
await fetch(`/api/front/groups/${groupId}/members/invite`, {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json',
    'Authorization': 'Bearer ' + token
  },
  body: JSON.stringify({
    userIds: [1001, 1002, 1003]
  })
});

发送群组消息

// 发送文本消息
await fetch(`/api/front/groups/${groupId}/messages`, {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json',
    'Authorization': 'Bearer ' + token
  },
  body: JSON.stringify({
    messageType: 'text',
    content: '大家好!',
    atUserIds: [],
    atAll: false
  })
});

// 发送@消息
await fetch(`/api/front/groups/${groupId}/messages`, {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json',
    'Authorization': 'Bearer ' + token
  },
  body: JSON.stringify({
    messageType: 'text',
    content: '@张三 @李四 请查看这个问题',
    atUserIds: [1001, 1002],
    atAll: false
  })
});

// 发送@全体成员消息
await fetch(`/api/front/groups/${groupId}/messages`, {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json',
    'Authorization': 'Bearer ' + token
  },
  body: JSON.stringify({
    messageType: 'text',
    content: '@全体成员 重要通知!',
    atUserIds: [],
    atAll: true
  })
});

管理员操作

// 设置管理员
await fetch(`/api/front/groups/${groupId}/members/${userId}/admin`, {
  method: 'PUT',
  headers: {
    'Content-Type': 'application/json',
    'Authorization': 'Bearer ' + token
  },
  body: JSON.stringify({
    isAdmin: true
  })
});

// 禁言成员禁言1小时
const muteEndTime = Date.now() + 3600000;
await fetch(`/api/front/groups/${groupId}/members/${userId}/mute`, {
  method: 'PUT',
  headers: {
    'Content-Type': 'application/json',
    'Authorization': 'Bearer ' + token
  },
  body: JSON.stringify({
    muteEndTime: muteEndTime
  })
});

// 设置全员禁言
await fetch(`/api/front/groups/${groupId}/mute-all`, {
  method: 'PUT',
  headers: {
    'Content-Type': 'application/json',
    'Authorization': 'Bearer ' + token
  },
  body: JSON.stringify({
    muteAll: true
  })
});

⚠️ 注意事项

登录验证

  • 所有接口都需要登录后才能访问
  • 未登录会返回401 UNAUTHORIZED错误
  • Token通过Authorization头传递

权限验证

  • 权限验证在Service层进行
  • 权限不足会抛出异常并返回错误信息
  • 群主不能退出群组(需要先转让群主)

逻辑删除

  • 解散群组、移除成员、退出群组、删除消息都使用逻辑删除
  • 逻辑删除的数据不会真正从数据库中删除
  • 可以通过is_deleted字段查询已删除的数据

消息撤回

  • 只能撤回2分钟内的消息
  • 只能撤回自己发送的消息
  • 撤回后消息不会被删除,只是标记为已撤回

扩展字段

  • 预留了5个扩展字段ext_field1-5
  • 可以根据业务需求自定义使用
  • 建议使用JSON格式存储复杂数据

🔧 技术实现

JPA自动建表

@Entity
@Table(name = "eb_group")
public class Group {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    
    @TableLogic
    private Boolean isDeleted;
    
    @UpdateTimestamp
    private Date updateTime;
}

逻辑删除

// MyBatis-Plus会自动处理逻辑删除
groupDao.deleteById(groupId); // 实际执行UPDATE eb_group SET is_deleted=1 WHERE id=?

自动时间管理

@CreationTimestamp  // 创建时自动设置
private Date createTime;

@UpdateTimestamp    // 更新时自动设置
private Date updateTime;

📚 相关文档


最后更新: 2024年12月26日
模块状态: 已完成
代码质量: 优秀