bindbox-game/.trae/documents/后台新增「一番赏奖品展示」模块实现方案.md
邹方成 45815bfb7d chore: 清理无用文件与优化代码结构
refactor(utils): 修复密码哈希比较逻辑错误
feat(user): 新增按状态筛选优惠券接口
docs: 添加虚拟发货与任务中心相关文档
fix(wechat): 修正Code2Session上下文传递问题
test: 补充订单折扣与积分转换测试用例
build: 更新配置文件与构建脚本
style: 清理多余的空行与注释
2025-12-18 17:35:55 +08:00

51 lines
3.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

## 目标
- 在管理端实时查看某一期每个 `slot_index` 对应的奖品与当前状态(名称、图片、等级、原始数量/剩余数量、是否已占用),支持分页与筛选。
## 数据来源与算法
- 奖励配置:`activity_reward_settings`name/level/product_id/original_qty/quantity/sort
- 奖品图片:`products.image`(如为实物奖关联商品)
- 位置占用:`issue_position_claims`(唯一记录已占用 slot
- 承诺种子:`activities.commitment_seed_master`HMAC-SHA256 确定性洗牌,活动级)
- 映射生成:
1. 构造长度 N 的 `slots` 列表:按各奖励 `original_qty` 重复填入 `reward_id`
2. FisherYates + `HMAC-SHA256(seed, "shuffle:"+i+"|issue:"+issueId)` 前 8 字节取模生成交换索引
3. 得到稳定映射 `slot_index → reward_id`;该映射在期内不变
## 后端接口(只读)
- 组:`/api/admin`(需登录与 RBAC`ichiban:slots:view`
- `GET /api/admin/ichiban/activities/:activity_id/issues/:issue_id/slots`
- 入参:`page``page_size`(默认 1/50`claimed`(可选 true/false 过滤已占用状态)
- 返回:
- `total_slots`N
- `list[]`{`slot_index`,`reward_id`,`reward_name`,`level`,`product_image`,`original_qty`,`remaining_qty`,`claimed`}
- `seed_version`:活动承诺版本号,`rule``level_desc_sort_asc_id_asc`
- 实现:按上述算法生成映射,联表/查询实时数量与占用状态;服务端分页
- `GET /api/admin/ichiban/issues/:issue_id/slot/:slot_index`
- 返回单个位置详情与计算证明HMAC 输入与结果),用于抽样核验
## 服务与性能
- Service`internal/service/activity/ichiban_slots_service.go`
- `BuildMapping(issueID)`读取奖励配置与种子生成映射1000+ 在 2s 内);可引入本地 LRU 缓存TTL 60s
- `QuerySlots(issueID, page,size, claimed?)`:分页拼装响应,`remaining_qty` 直接读 `activity_reward_settings.quantity`
- 性能优化:
- 映射缓存 + 仅在奖励配置或种子变更时失效;可选将完整映射预生成入表以应对更大规模(保留扩展)
- `issue_position_claims(issue_id,slot_index)``reward_id` 索引保障查询速度
## 前端管理页面
- 路由:`/operations/ichiban/slots`
- 组件:表格布局(分页、排序标签、序号列),筛选(活动/期、占用状态),图片懒加载
- 列:序号、奖品图、名称、等级标签、原始数量/剩余数量、占用状态;顶部显示 `seed_version` 与排序规则说明
## 权限与审计
- 仅管理员可访问(`RequireAdminRole` + `RequireAdminAction("ichiban:slots:view")`
- 查询操作写入操作日志(模块/期次/分页参数)
## 验收标准
- 1000+ 奖品分页加载 ≤2s映射稳定一致显示字段完整占用状态实时筛选与分页正常
## 交付内容
- 管理端两条 GET 接口与 Service
- 管理页面与 API 封装
- 单元测试:映射稳定性、分页正确性、占用过滤
- 文档:算法与接口说明