Skip to content

GitLab

  • Projects
  • Groups
  • Snippets
  • Help
    • Loading...
  • Help
    • Help
    • Support
    • Community forum
    • Submit feedback
    • Contribute to GitLab
  • Sign in / Register
fly_moon_payment fly_moon_payment
  • Project overview
    • Project overview
    • Details
    • Activity
    • Releases
  • Repository
    • Repository
    • Files
    • Commits
    • Branches
    • Tags
    • Contributors
    • Graph
    • Compare
  • Issues 0
    • Issues 0
    • List
    • Boards
    • Labels
    • Service Desk
    • Milestones
  • Merge requests 6
    • Merge requests 6
  • CI/CD
    • CI/CD
    • Pipelines
    • Jobs
    • Schedules
  • Operations
    • Operations
    • Incidents
    • Environments
  • Packages & Registries
    • Packages & Registries
    • Package Registry
  • Analytics
    • Analytics
    • CI/CD
    • Repository
    • Value Stream
  • Wiki
    • Wiki
  • Snippets
    • Snippets
  • Members
    • Members
  • Activity
  • Graph
  • Create a new issue
  • Jobs
  • Commits
  • Issue Boards
Collapse sidebar

已经迁移到新的代码仓库,使用飞书登录 https://gitlab.deeplink.media/

  • Administrator
  • fly_moon_paymentfly_moon_payment
  • Merge requests
  • !70

Merged
Created Apr 23, 2026 by 冼杰铿@JieKMaintainer

fix: 注册积分 A/B 仅作用于非首次调用,避免双发污染

  • Overview 0
  • Commits 2
  • Changes 4

背景

注册积分 A/B 实验:验证"新用户注册即发 100 积分" 是否带来下游转化提升。对照组=偶数 uid 发 100,实验组=奇数 uid 发 0。

核心改动

1. 注册积分分流(AgentUserPointsServiceImpl.initUserPoints)

上游会连调两次——注册本身 + 绑邀请码。首次调用按原值落账,不走 A/B;二次及以后且 initPoints==0 才按 uid 奇偶分桶。 initPoints>0(正常邀请码 / admin 充值)全场景原值透传。

首次判断抓手:AgentUserPointsInnerService.existsByUserId(userId) 查 agent_user_points 汇总表是否已有记录。

2. 停用免费用户月度初始化积分补贴

AnnuallyPlanPointsResetTaskJob.FREE_USER_MONTHLY_INITIALIZE_POINTS 100 → 0;grantMonthlyInitializePointsToNoSubscriptionUsers() 入口加 early-return 短路整段发放,避免下游 grantPoints<=0 → failed 触发批量告警日志。

行为矩阵

调用顺序 initPoints uid 已存在记录 最终落账
Call 1(注册) 0 任何 无 0(原值,首次不走 A/B)
Call 2(绑 0 分码) 0 偶 有 100(对照组)
Call 2(绑 0 分码) 0 奇 有 0(实验组)
Call 2(绑正常码 N) N>0 任何 有 N(原值透传)
月度 reset job — — — 全员跳过(早退)

测试覆盖

AgentUserPointsServiceImplAbTest:8 个纯 Mockito 用例,首次/二次 × 偶/奇/正值全覆盖。Tests run: 8, Failures: 0, Errors: 0 ✅

回滚

  • A/B 下线:把 REGISTER_AB_CONTROL_POINTS/REGISTER_AB_TREATMENT_POINTS 都置 0,或直接 revert 本 MR
  • 恢复月度补贴:FREE_USER_MONTHLY_INITIALIZE_POINTS 改回 100,早退分支自动失效

风险点

  1. 依赖"首次调用 existsByUserId=false":若未来上游在 provider 之外先创建 agent_user_points 行,会导致第一次 init 被判成"已初始化"。当前仓库内无此类路径。
  2. 奇数 uid 实验组落账 0:对下游扣积分 / 展示层来说是合法状态,需产品/运营知晓文案。
  3. 0 分邀请码:命中二次调用 A/B 路径——此即本次实验的核心诉求。

Commits

  • be54542 feat: 注册积分 A/B 分流 + 停用免费用户月度补贴
  • cb7b248 fix: 注册积分 A/B 仅作用于非首次调用,避免双发污染
Edited Apr 23, 2026 by 冼杰铿
Assignee
Assign to
Reviewer
Request review from
None
Milestone
None
Assign milestone
Time tracking
Source branch: feat/registration-points-ab-split