bindbox-game/.trae/documents/头衔规则与设计思路.md
邹方成 8141a47690
Some checks failed
Build docker and publish / linux (1.24.5) (push) Failing after 39s
feat(称号系统): 新增称号管理功能与抽奖效果集成
- 新增系统称号模板与效果配置表及相关CRUD接口
- 实现用户称号分配与抽奖效果应用逻辑
- 优化抽奖接口支持用户ID参数以应用称号效果
- 新增称号管理前端页面与分配功能
- 修复Windows时区错误与JSON字段初始化问题
- 移除无用管理接口代码并更新文档说明
2025-11-16 11:37:40 +08:00

55 lines
5.3 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.

## 目标与范围
- 设计并梳理六类头衔效果1领取优惠券、2抽奖折扣、3签到双倍积分、4领取道具卡、5概率加成、6奖励双倍。
- 输出参数规范、叠加与封顶策略、作用域策略,以及标准化新建流程(管理端接口与数据约束)。
## 效果类型与参数规范
- 1 领取优惠券:`template_id`(券模板ID)、`frequency.period`(day|week|month)、`frequency.times`(周期次数)。示例:`{"template_id":123,"frequency":{"period":"day","times":1}}`(种子示例 `internal/api/admin/titles_seed.go:31`)。
- 2 抽奖折扣:`discount_type`(percentage|fixed)、`value_x1000`(千分比或固定额)、`max_discount_x1000`(折扣封顶)。示例:`{"discount_type":"percentage","value_x1000":100,"max_discount_x1000":300}``internal/api/admin/titles_seed.go:32`)。
- 3 签到双倍积分:`multiplier_x1000`(如2000表示x2)、`daily_cap_points`(每日积分上限)。示例:`{"multiplier_x1000":2000,"daily_cap_points":3000}``internal/api/admin/titles_seed.go:33`)。
- 4 领取道具卡:`template_id``frequency.period/times`(同“领券”频控)。示例:`{"template_id":456,"frequency":{"period":"week","times":2}}``internal/api/admin/titles_seed.go:34`)。
- 5 概率加成:`target_prize_ids[]`(目标奖品ID)、`boost_x1000`(加成千分比)、`cap_x1000`(单项封顶,可选)。示例:`{"target_prize_ids":[1,2],"boost_x1000":100,"cap_x1000":300}`;应用参考 `internal/service/activity/draw_with_effects.go:104-131`
- 6 奖励双倍:`target_prize_ids[]``chance_x1000`(命中概率千分比)、`period_cap_times`(期内命中上限,可选)。示例:`{"target_prize_ids":[3],"chance_x1000":150}`;命中判定参考 `internal/service/activity/draw_with_effects.go:197-208`
## 叠加与封顶策略
- `StackingStrategy`
- `0` max_only取效果最大值。
- `1` sum_with_cap累加并按封顶值限制优先使用效果内的 `cap_x1000`,否则用 `CapValueX1000`)。
- `2` first_match首个命中后忽略后续。
- 默认:累加并按 `CapValueX1000` 封顶(抽奖已实现 `internal/service/activity/draw_with_effects.go:117-131``internal/service/activity/draw_with_effects.go:146-149`)。
- 封顶单位统一为 `x1000` 千分比,避免浮点误差。
## 作用域策略ScopesJSON
- 字段:`activity_ids/issue_ids/category_ids``exclude` 子段;解析与匹配参考 `internal/service/title/effects_resolver.go:59-69``internal/service/title/effects_resolver.go:133-155`
- 生效原则:先排除再包含;未配置视为全局生效。
## 新建流程(管理端)
- 步骤1创建称号模板
- `POST /api/admin/system_titles``internal/router/router.go:128`;处理 `internal/api/admin/titles_admin.go:81-103`)。
- 请求体:`name/description/status/obtain_rules_json/scopes_json`空JSON默认填 `{}`)。
- 步骤2为称号模板添加效果
- `POST /api/admin/system_titles/:title_id/effects``internal/router/router.go:132-133`;处理 `internal/api/admin/titles_admin.go:183-213`)。
- 请求体:`effect_type/params_json/stacking_strategy/cap_value_x1000/scopes_json/sort/status`
- 步骤3分配给用户可选含有效期
- `POST /api/admin/users/:user_id/titles``internal/router/router.go:127`;处理 `internal/api/admin/titles_admin.go:291-353`)。
- 请求体:`title_id/expires_at(RFC3339)/remark`
- 步骤4校验
- 列表查询与检查:`GET /api/admin/system_titles``GET /api/admin/system_titles/:title_id/effects``internal/router/router.go:126``internal/router/router.go:131`;处理 `internal/api/admin/titles_admin.go:27-59``internal/api/admin/titles_admin.go:156-171`)。
## 数据与规则约束
- 名称唯一与幂等:同名不重复创建(`internal/api/admin/titles_seed.go:41-48`)。
- 状态控制:模板与效果需同时启用才会生效(抽奖过滤 `internal/service/activity/draw_with_effects.go:46-49``internal/service/activity/draw_with_effects.go:80-83`)。
- 有效期与激活:仅激活且未过期的用户称号参与计算(`internal/service/activity/draw_with_effects.go:54-67`)。
- 参数校验:`params_json` 必填(`internal/api/admin/titles_admin.go:195-206`)。
## 示例:新增“签到双倍积分”称号
- 创建模板:`name=签到达人``status=1``scopes_json={}`
- 添加效果:`effect_type=3``params_json={"multiplier_x1000":2000,"daily_cap_points":3000}``stacking_strategy=1``cap_value_x1000=3000``status=1`
- 分配给用户:设置 `expires_at`如7天后并激活。
## 示例:新增“抽奖折扣”称号
- 创建模板:`name=折扣官``status=1``scopes_json={"activity_ids":[1001]}`
- 添加效果:`effect_type=2``params_json={"discount_type":"percentage","value_x1000":150,"max_discount_x1000":500}``stacking_strategy=1``cap_value_x1000=500``status=1`
## 后续实施建议
- 在签到与购票模块接入统一解析器与效果计算器,实现(2)(3)的实际应用;领取型(1)(4)接入 `UserTitleEffectClaims` 做周期限流与资产发放;抽奖效果写入审计日志。
- 你确认后,我将按上述流程与参数规范为每种类型提供可执行的创建脚手架(接口调用示例与测试用例),并补齐未接入业务的效果逻辑。