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

3.7 KiB
Raw Blame History

字段与行为详解(以 effect_type=6 双倍概率为例)

  • 目标IDtarget_prize_ids
    • 含义:指定哪些奖品可触发双倍;为空数组表示对所有奖品生效。
    • 应用代码:合并目标集 doubleTargetsinternal/service/activity/draw_with_effects.go:143-145
  • 概率chance_x1000
    • 含义双倍触发的概率千分制1000=100%、200=20%)。多个效果的概率会累加,并受统一封顶限制。
    • 应用代码:累加并按 CapValueX1000 统一封顶internal/service/activity/draw_with_effects.go:146-149最终判定199-207
  • 周期内次数上限period_cap_times
    • 业务含义一个统计周期内最多能触发几次双倍例如自然日内最多1次
    • 当前实现字段已解析internal/service/activity/draw_with_effects.go:137但暂未做持久化计数与强制限制建议后续以“用户+周期”维度计数DB/Redis命中后递减或阻断。
  • 叠加策略stacking_strategy
    • 业务含义多效果如何合并0最大值/1累加封顶/2首个匹配
    • 当前实现对“概率加成type=5”生效internal/service/activity/draw_with_effects.go:117-132对“双倍概率type=6”未使用合并逻辑仅累加+封顶)。
  • 统一封顶cap_value_x1000
    • 含义:对累计概率(或加成)的统一上限(单位:千分)。
    • 应用代码双倍概率封顶internal/service/activity/draw_with_effects.go:147-149概率加成默认分支封顶127-131
  • 包含期issue_ids/排除期exclude.issue_ids
    • 含义:限定效果只在指定期生效,或在某些期不生效。
    • 应用代码抽奖路径按期过滤internal/service/activity/draw_with_effects.go:85-103更全面的范围匹配在效果解析器internal/service/title/effects_resolver.go:133-155
  • 包含活动activity_ids
    • 含义:限定效果只在指定活动生效。
    • 应用代码效果解析器支持internal/service/title/effects_resolver.go:60-69, 133-155抽奖路径当前只按期(issue)做简化过滤。
  • 排序sort
    • 含义:效果的展示与应用顺序;不同策略可能受顺序影响(如取最大值时先后无影响,叠加时顺序影响可忽略)。
    • 应用代码:读取效果按 Sort 排序internal/api/admin/titles_admin.go:163internal/service/activity/draw_with_effects.go:47-49

作用范围简化(仅“活动”和“期”)

  • 目标:将前端“作用范围”精简为:
    • 包含活动 activity_ids
    • 包含期 issue_ids
    • 排除期 exclude.issue_ids(可选)
  • 不再展示/保存分类category_ids、时间/地区等复杂范围。

实施步骤(前端改造)

  1. 效果编辑对话框EffectEditDialog.vue
  • 保留 effect_type=6 的参数:target_prize_ids/chance_x1000/period_cap_times
  • 精简作用范围面板,仅保留:activity_idsissue_idsexclude.issue_ids
  • 提交时 scopes_json 只包含上述三个字段。
  1. 效果列表EffectManagerDialog.vue
  • 参数展示映射只显示:目标奖品、概率、周期上限;范围只显示包含/排除期与活动。
  1. 文档更新
  • 在《说明文档.md》中标注“作用范围简化”并更新字段速查表。

注意与后续

  • 周期计数未实现:若您需要严格的“周期内次数上限”,我将增加一次触发计数的服务(用户+周期维度),并在抽奖路径强制限制。
  • 抽奖路径按期过滤:如需按活动过滤,请在抽奖服务中引入效果解析器返回的范围匹配结果,或将 issueactivity 进行绑定映射。