5.5 KiB
5.5 KiB
房间红包功能开发完成清单
✅ 已完成文件列表
1. Domain层(11个文件)
- ✅ RoomRedPacketType.java - 红包类型枚举
- ✅ RoomRedPacketStatus.java - 红包状态枚举
- ✅ RoomRedPacketSourceType.java - 红包来源类型枚举
- ✅ RoomRedPacketRefundStatus.java - 退款状态枚举
- ✅ RoomRedPacket.java - 红包领域对象
- ✅ RoomRedPacketRecord.java - 红包记录领域对象
- ✅ RoomRedPacketGateway.java - 红包网关接口
- ✅ RoomRedPacketRecordGateway.java - 红包记录网关接口
2. Infrastructure层(13个文件)
- ✅ RoomRedPacketEntity.java - 红包实体
- ✅ RoomRedPacketRecordEntity.java - 红包记录实体
- ✅ RoomRedPacketDAO.java - 红包DAO接口
- ✅ RoomRedPacketRecordDAO.java - 红包记录DAO接口
- ✅ RoomRedPacketDAO.xml - MyBatis映射文件
- ✅ RoomRedPacketRecordDAO.xml - MyBatis映射文件
- ✅ RoomRedPacketConvertor.java - 基础设施转换器
- ✅ RoomRedPacketGatewayImpl.java - 红包网关实现
- ✅ RoomRedPacketRecordGatewayImpl.java - 红包记录网关实现
- ✅ RoomRedPacketKeys.java - Redis Key枚举
- ✅ RoomRedPacketCacheService.java - Redis缓存服务接口
- ✅ RoomRedPacketCacheServiceImpl.java - Redis缓存服务实现
3. Client层(10个文件)
- ✅ SendRoomRedPacketCmd.java - 发红包命令
- ✅ GrabRoomRedPacketCmd.java - 抢红包命令
- ✅ QueryRoomRedPacketListCmd.java - 查询列表命令
- ✅ QueryRoomRedPacketDetailCmd.java - 查询详情命令
- ✅ RoomRedPacketCO.java - 红包CO
- ✅ RoomRedPacketDetailCO.java - 红包详情CO
- ✅ RoomRedPacketRecordCO.java - 红包记录CO
- ✅ GrabRoomRedPacketResultCO.java - 抢红包结果CO
- ✅ RoomRedPacketService.java - 服务接口
4. Application层(6个文件)
- ✅ RoomRedPacketAppConvertor.java - 应用层转换器
- ✅ SendRoomRedPacketCmdExe.java - 发红包执行器
- ✅ GrabRoomRedPacketCmdExe.java - 抢红包执行器(高并发核心)
- ✅ QueryRoomRedPacketListQryExe.java - 查询列表执行器
- ✅ QueryRoomRedPacketDetailQryExe.java - 查询详情执行器
- ✅ RoomRedPacketServiceImpl.java - 服务实现
5. Adapter层(1个文件)
- ✅ RoomRedPacketRestController.java - REST控制器
6. Scheduler层(1个文件)
- ✅ RoomRedPacketExpireTask.java - 过期退款定时任务
7. 错误码
- ✅ OtherErrorCode.java - 已添加红包相关错误码(3260-3271)
8. 数据库SQL
- ✅ room_red_packet_tables.sql - 数据库建表SQL
📊 统计
- 总文件数: 42个
- 代码行数: 约3500+行
- 涉及模块: 7个层级
🚀 API接口清单
1. 发送红包
POST /api/room/red-packet/send
请求参数:
{
"roomId": 123456,
"packetType": 1, // 1-固定金额 2-拼手气
"totalAmount": 1000, // 总金额(金币数量)
"totalCount": 10, // 红包个数
"expireMinutes": 3 // 过期分钟数:1/3/5
}
2. 抢红包
POST /api/room/red-packet/grab
请求参数:
{
"packetId": "uuid-string"
}
3. 查询房间红包列表
GET /api/room/red-packet/list?roomId=123456&limit=20
4. 查询红包详情
GET /api/room/red-packet/detail?packetId=uuid-string
🔧 配置说明
1. Redis Key前缀
所有Redis Key使用前缀 ROOM:RED_PACKET:
2. 错误码范围
红包相关错误码:3260-3279
3. 定时任务
- 过期退款任务: 每分钟执行一次 (cron = "0 * * * * ?")
⚠️ 待完成事项
1. 钱包服务GoldOrigin枚举
需要在钱包服务的 GoldOrigin 枚举中添加以下事件类型:
// 在 wallet-inner-model 的 GoldOrigin 枚举中添加
RED_PACKET_SEND("red_packet_send", "发红包"),
RED_PACKET_GRAB("red_packet_grab", "抢红包"),
RED_PACKET_REFUND("red_packet_refund", "红包退款"),
2. IM推送集成
发红包时,如果金额>=10000,需要触发全服IM推送。代码中已预留TODO位置:
// SendRoomRedPacketCmdExe.java 第94行
// TODO: 调用IM服务触发全服推送
3. WebSocket房间推送
抢红包成功后,需要通过WebSocket推送消息到房间内其他用户。可选实现。
4. 用户信息补充
在查询接口中,需要补充用户昵称和头像信息。建议调用user服务批量查询。
5. 房间权限校验
发红包和抢红包前,需要校验用户是否在房间内。建议调用live服务校验。
📝 注意事项
1. 高并发保护
- Redis防重标记
- Lua脚本原子扣减
- 异步写库提高响应速度
2. 幂等性保证
- 发红包:使用packetId作为bizNo
- 抢红包:使用recordId作为bizNo
- 退款:使用packetId_refund作为bizNo
3. 数据一致性
- 异步写库失败会记录日志
- 可扩展异常日志表进行补偿
4. 性能优化
- Redis缓存红包主数据
- 拼手气金额预生成
- 查询接口可加缓存
🧪 测试建议
1. 单元测试
- 固定金额红包发送
- 拼手气红包发送
- 高并发抢红包(多线程)
- 过期退款
2. 压力测试
- 100人同时抢1个红包
- 1000QPS发红包
- Redis性能测试
3. 异常测试
- 余额不足
- 重复领取
- 红包过期
- 异步失败补偿
📦 部署步骤
- 执行数据库SQL建表
- 确保Redis服务正常
- 在钱包服务添加GoldOrigin枚举
- 重启other服务
- 验证接口可用性
开发完成时间: 2025-11-25
开发者: Leo
状态: ✅ 核心功能完成,待集成测试