## 字段与行为详解(以 effect_type=6 双倍概率为例) - 目标ID(target_prize_ids) - 含义:指定哪些奖品可触发双倍;为空数组表示对所有奖品生效。 - 应用代码:合并目标集 `doubleTargets`(internal/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:163;internal/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_ids`、`issue_ids`、`exclude.issue_ids`。 - 提交时 `scopes_json` 只包含上述三个字段。 2. 效果列表(EffectManagerDialog.vue) - 参数展示映射只显示:目标奖品、概率、周期上限;范围只显示包含/排除期与活动。 3. 文档更新 - 在《说明文档.md》中标注“作用范围简化”,并更新字段速查表。 ## 注意与后续 - 周期计数未实现:若您需要严格的“周期内次数上限”,我将增加一次触发计数的服务(用户+周期维度),并在抽奖路径强制限制。 - 抽奖路径按期过滤:如需按活动过滤,请在抽奖服务中引入效果解析器返回的范围匹配结果,或将 `issue` 与 `activity` 进行绑定映射。