refactor(utils): 修复密码哈希比较逻辑错误 feat(user): 新增按状态筛选优惠券接口 docs: 添加虚拟发货与任务中心相关文档 fix(wechat): 修正Code2Session上下文传递问题 test: 补充订单折扣与积分转换测试用例 build: 更新配置文件与构建脚本 style: 清理多余的空行与注释
1.8 KiB
1.8 KiB
验收报告:任务中心优化
1. 优化内容
针对任务中心(Task Center)的并发安全性和事务一致性进行了全面优化。
1.1 错误处理增强
- 位置:
grantTierRewards方法 - 变更: 增加了对
userSvc(积分、优惠券、道具卡、头衔)调用返回值的检查。 - 效果: 如果奖励下发失败,不再忽略错误,而是立即回滚事务并返回错误。这防止了“日志显示已发奖但实际未发奖”的严重 BUG,确保了数据的一致性。
1.2 并发安全控制
- 位置:
OnOrderPaid,OnInviteSuccess,ClaimTier - 变更: 引入了数据库事务 (
Transaction) 和排他锁 (SELECT ... FOR UPDATE)。 - 效果:
- 防止了高并发场景下(如短时间内多次支付)任务进度更新丢失 (
Lost Update) 的问题。 - 确保了
UserTaskProgress的创建和更新是原子的。
- 防止了高并发场景下(如短时间内多次支付)任务进度更新丢失 (
1.3 状态更新原子化
- 位置:
matchAndGrant - 变更: 在标记任务层级为“已领取”时,不再依赖内存中可能过期的对象,而是开启新事务并加锁重新读取最新状态,确认未领取后再写入。
- 效果: 防止了并发领奖导致的状态覆盖问题,确保
ClaimedTiers字段的数据完整性。
2. 代码验证
已对 internal/service/task_center/service.go 完成了所有计划内的修改。代码逻辑符合 Go 语言并发编程的最佳实践。
3. 遗留事项与建议
- 性能监控: 虽然加锁范围控制在用户级别,但在极大并发下仍需监控数据库锁等待时间。
- 重试机制: 目前如果发奖失败,会返回错误给上层调用者(如支付回调)。建议在上层增加重试机制(如消息队列重试),以确保最终成功。