# 消息转发模块快速参考 > **模块**: 消息转发模块(模块13) > **状态**: ✅ 已完成 > **更新时间**: 2024年12月26日 --- ## 📋 API接口清单 ### 1. 转发消息给好友 ```http POST /api/front/messages/forward/friend ``` **需要登录**: ✅ 是 **请求参数**: | 参数名 | 类型 | 必填 | 说明 | |--------|------|------|------| | originalMessageId | Long | 是 | 原始消息ID | | originalMessageType | String | 是 | 原始消息类型(private/group)| | targetUserId | Integer | 是 | 目标好友ID | | forwardComment | String | 否 | 转发时的附加消息 | **响应示例**: ```json { "code": 200, "message": "转发成功", "data": { "id": 1, "userId": 123, "originalMessageId": 456, "originalMessageType": "private", "targetType": "friend", "targetId": 789, "newMessageId": 1001, "forwardComment": "分享给你看看", "isDeleted": false, "createTime": "2024-12-26 10:00:00", "updateTime": "2024-12-26 10:00:00" } } ``` --- ### 2. 转发消息到群组 ```http POST /api/front/messages/forward/group ``` **需要登录**: ✅ 是 **请求参数**: | 参数名 | 类型 | 必填 | 说明 | |--------|------|------|------| | originalMessageId | Long | 是 | 原始消息ID | | originalMessageType | String | 是 | 原始消息类型(private/group)| | targetGroupId | Long | 是 | 目标群组ID | | forwardComment | String | 否 | 转发时的附加消息 | **响应示例**: ```json { "code": 200, "message": "转发成功", "data": { "id": 2, "userId": 123, "originalMessageId": 456, "originalMessageType": "private", "targetType": "group", "targetId": 888, "newMessageId": 1002, "forwardComment": "大家看看这个", "isDeleted": false, "createTime": "2024-12-26 10:05:00", "updateTime": "2024-12-26 10:05:00" } } ``` --- ### 3. 批量转发消息 ```http POST /api/front/messages/forward/batch ``` **需要登录**: ✅ 是 **请求参数**: | 参数名 | 类型 | 必填 | 说明 | |--------|------|------|------| | originalMessageId | Long | 是 | 原始消息ID | | originalMessageType | String | 是 | 原始消息类型(private/group)| | targetType | String | 是 | 目标类型(friend/group)| | targetIds | List | 是 | 目标ID列表(Body JSON)| | forwardComment | String | 否 | 转发时的附加消息 | **请求示例**: ```json { "targetIds": [101, 102, 103, 104, 105] } ``` **响应示例**: ```json { "code": 200, "message": "批量转发完成,成功:5,失败:0", "data": [ { "id": 3, "userId": 123, "targetType": "friend", "targetId": 101, "newMessageId": 1003 }, { "id": 4, "userId": 123, "targetType": "friend", "targetId": 102, "newMessageId": 1004 } // ... 更多记录 ] } ``` --- ### 4. 获取转发历史记录 ```http GET /api/front/messages/forward/history ``` **需要登录**: ✅ 是 **请求参数**: | 参数名 | 类型 | 必填 | 默认值 | 说明 | |--------|------|------|--------|------| | page | Integer | 否 | 1 | 页码 | | pageSize | Integer | 否 | 20 | 每页数量 | **响应示例**: ```json { "code": 200, "message": "success", "data": [ { "id": 1, "userId": 123, "originalMessageId": 456, "originalMessageType": "private", "targetType": "friend", "targetId": 789, "newMessageId": 1001, "forwardComment": "分享给你看看", "isDeleted": false, "createTime": "2024-12-26 10:00:00", "updateTime": "2024-12-26 10:00:00" } // ... 更多记录 ] } ``` --- ### 5. 删除转发记录 ```http DELETE /api/front/messages/forward/{forwardId} ``` **需要登录**: ✅ 是 **路径参数**: | 参数名 | 类型 | 必填 | 说明 | |--------|------|------|------| | forwardId | Long | 是 | 转发记录ID | **响应示例**: ```json { "code": 200, "message": "删除成功", "data": true } ``` --- ## 🔐 权限验证规则 ### 转发消息给好友 - ✅ 必须登录 - ✅ 必须是原始消息的发送者或接收者 - ✅ 目标用户必须是好友 ### 转发消息到群组 - ✅ 必须登录 - ✅ 必须是原始消息的发送者或接收者 - ✅ 必须是目标群组的成员 ### 批量转发 - ✅ 必须登录 - ✅ 必须是原始消息的发送者或接收者 - ✅ 每个目标都需要满足相应的权限要求 ### 查看转发历史 - ✅ 必须登录 - ✅ 只能查看自己的转发记录 ### 删除转发记录 - ✅ 必须登录 - ✅ 只能删除自己的转发记录 --- ## 💾 数据库表结构 ### 表名: eb_message_forward | 字段名 | 类型 | 说明 | 索引 | |--------|------|------|------| | id | BIGINT | 转发记录ID(主键)| PRIMARY | | user_id | INT | 转发用户ID | idx_user_id | | original_message_id | BIGINT | 原始消息ID | idx_original_message_id | | original_message_type | VARCHAR(20) | 原始消息类型 | idx_target_type | | target_type | VARCHAR(20) | 转发目标类型 | - | | target_id | BIGINT | 转发目标ID | idx_target_id | | new_message_id | BIGINT | 新消息ID | - | | forward_comment | VARCHAR(500) | 转发时的附加消息 | - | | is_deleted | TINYINT(1) | 是否删除 | idx_deleted | | create_time | DATETIME | 创建时间 | idx_create_time | | update_time | DATETIME | 更新时间 | - | | ext_field1 | VARCHAR(100) | 扩展字段1 | - | | ext_field2 | INT | 扩展字段2 | - | | ext_field3 | VARCHAR(50) | 扩展字段3 | - | | ext_field4 | BIGINT | 扩展字段4 | - | | ext_field5 | TEXT | 扩展字段5 | - | --- ## 🎯 使用场景 ### 场景1: 转发私聊消息给好友 ```java // 用户A收到用户B的消息,想转发给用户C POST /api/front/messages/forward/friend { "originalMessageId": 123, "originalMessageType": "private", "targetUserId": 456, "forwardComment": "这个消息很重要,分享给你" } ``` ### 场景2: 转发群组消息到另一个群 ```java // 用户在群A看到一条消息,想转发到群B POST /api/front/messages/forward/group { "originalMessageId": 789, "originalMessageType": "group", "targetGroupId": 999, "forwardComment": "大家看看这个" } ``` ### 场景3: 批量转发消息给多个好友 ```java // 用户想把一条消息同时转发给多个好友 POST /api/front/messages/forward/batch { "originalMessageId": 123, "originalMessageType": "private", "targetType": "friend", "targetIds": [101, 102, 103, 104, 105], "forwardComment": "分享给大家" } ``` ### 场景4: 查看转发历史 ```java // 用户想查看自己的转发记录 GET /api/front/messages/forward/history?page=1&pageSize=20 ``` ### 场景5: 删除转发记录 ```java // 用户想删除某条转发记录 DELETE /api/front/messages/forward/123 ``` --- ## ⚠️ 错误码说明 | 错误码 | 错误信息 | 说明 | |--------|----------|------| | 401 | 用户未登录 | 需要先登录 | | 403 | 对方不是您的好友 | 转发目标不是好友 | | 403 | 您不是该群组成员 | 不是目标群组成员 | | 404 | 原始消息不存在或无权访问 | 消息不存在或无权限 | | 403 | 无权删除此转发记录 | 只能删除自己的记录 | | 404 | 转发记录不存在 | 记录已被删除或不存在 | --- ## 🔧 扩展字段使用示例 ### ext_field1: 转发来源/渠道 ```java forward.setExtField1("from_private_chat"); // 从私聊转发 forward.setExtField1("from_group_chat"); // 从群聊转发 forward.setExtField1("from_live_room"); // 从直播间转发 ``` ### ext_field2: 转发优先级/标记 ```java forward.setExtField2(1); // 普通转发 forward.setExtField2(2); // 重要转发 forward.setExtField2(3); // 紧急转发 ``` ### ext_field3: 转发状态/类型 ```java forward.setExtField3("normal"); // 普通转发 forward.setExtField3("urgent"); // 紧急转发 forward.setExtField3("scheduled"); // 定时转发 ``` ### ext_field4: 关联数据ID ```java forward.setExtField4(12345L); // 关联的活动ID forward.setExtField4(67890L); // 关联的任务ID ``` ### ext_field5: JSON扩展数据 ```java String jsonData = "{\"tags\":[\"工作\",\"重要\"],\"metadata\":{\"priority\":\"high\"}}"; forward.setExtField5(jsonData); ``` --- ## 📝 注意事项 ### 1. 权限验证 - 转发消息前会验证用户是否有权访问原始消息 - 转发给好友前会验证好友关系 - 转发到群组前会验证群组成员身份 ### 2. 消息内容 - 转发的消息会自动添加`[转发消息]`标记 - 如果提供了`forwardComment`,会添加在消息前面 - 转发后的消息类型与原始消息类型相同 ### 3. 逻辑删除 - 删除转发记录使用逻辑删除(is_deleted=1) - 已删除的记录不会在查询中返回 - 数据不会真正从数据库中删除,可以恢复 ### 4. 批量转发 - 批量转发时,部分失败不会影响其他转发 - 返回结果中包含成功和失败的数量 - 失败的转发会记录日志,但不会抛出异常 ### 5. 性能优化 - 转发历史记录支持分页查询 - 数据库表添加了索引,提升查询性能 - 批量转发建议一次不超过50个目标 --- ## 🚀 快速开始 ### 1. 前端调用示例(JavaScript) ```javascript // 转发消息给好友 async function forwardToFriend(messageId, messageType, targetUserId, comment) { const response = await fetch('/api/front/messages/forward/friend', { method: 'POST', headers: { 'Content-Type': 'application/x-www-form-urlencoded', 'Authorization': 'Bearer ' + token }, body: new URLSearchParams({ originalMessageId: messageId, originalMessageType: messageType, targetUserId: targetUserId, forwardComment: comment || '' }) }); return await response.json(); } // 批量转发 async function batchForward(messageId, messageType, targetType, targetIds, comment) { const response = await fetch('/api/front/messages/forward/batch', { method: 'POST', headers: { 'Content-Type': 'application/json', 'Authorization': 'Bearer ' + token }, body: JSON.stringify({ originalMessageId: messageId, originalMessageType: messageType, targetType: targetType, targetIds: targetIds, forwardComment: comment || '' }) }); return await response.json(); } ``` ### 2. Android调用示例(Kotlin) ```kotlin // 转发消息给好友 suspend fun forwardToFriend( messageId: Long, messageType: String, targetUserId: Int, comment: String? ): Result { return apiService.forwardToFriend( originalMessageId = messageId, originalMessageType = messageType, targetUserId = targetUserId, forwardComment = comment ) } // 批量转发 suspend fun batchForward( messageId: Long, messageType: String, targetType: String, targetIds: List, comment: String? ): Result> { return apiService.batchForward( originalMessageId = messageId, originalMessageType = messageType, targetType = targetType, targetIds = targetIds, forwardComment = comment ) } ``` --- ## 📚 相关文档 - **开发指南**: `直播IM系统开发指南.md` - 模块13 - **完善总结**: `消息转发模块完善总结.md` - **API文档**: Swagger UI - `/api/front/messages/forward/**` --- **更新时间**: 2024年12月26日 **维护状态**: ✅ 活跃维护中