feat(worker-platform): 支持后台人工调级锁定等级与解除自动升级限制

- 做了什么:
  1. 新增数据库迁移 098_worker_level_lock.sql,在 worker_users 表增加 is_level_locked、level_locked_at、level_locked_reason、level_locked_by 字段;
  2. 后端自动升级函数 maybeUpgradeWorkerLevelWithClient 和判定函数 shouldApplyAutomaticWorkerLevel 增加 is_level_locked 守卫,被锁定的打手跳过自动升级;
  3. 后台打手审核调级服务 reviewAdminWorkerUser 支持等级锁定参数与变更记录,人工调级时自动写入 worker_level_logs 流水,并提供 updateAdminWorkerLevelLock 专用接口;
  4. 前端打手列表等级列展示「已锁定」状态及 Tooltip 原因,调级弹窗支持「锁定自动升级」开关与原因输入,操作列提供「解除限制」快捷操作;
  5. 打手详情抽屉补充展示等级锁定说明。
- 为什么:
  解决打手被人工调整等级(如 VIP5 调至 VIP4)后,因历史累计完成单数满足门槛导致后续结算再次自动升级回高等级的问题,并支持后续随时解除限制恢复自动升级。
- 验证方式:
  1. 后端新增 shouldApplyAutomaticWorkerLevel 与 mapWorkerUser 单元测试,运行 npm run check(670 测试全过,类型与 SQL guard 验证通过);
  2. 前端新增 worker-level-lock.test.ts 单元测试,运行 npm run check(130 测试全过,typecheck 与 build 验证通过)。
This commit is contained in:
yml2213
2026-10-10 13:44:57 +08:00
parent 687bb40db1
commit 85fc2eaa7c
15 changed files with 395 additions and 11 deletions
@@ -0,0 +1,12 @@
-- 098_worker_level_lock.sql —— 打手等级人工锁定与自动升级限制。
ALTER TABLE worker_users
ADD COLUMN IF NOT EXISTS is_level_locked BOOLEAN NOT NULL DEFAULT FALSE,
ADD COLUMN IF NOT EXISTS level_locked_at TIMESTAMPTZ,
ADD COLUMN IF NOT EXISTS level_locked_reason TEXT NOT NULL DEFAULT '',
ADD COLUMN IF NOT EXISTS level_locked_by TEXT NOT NULL DEFAULT '';
COMMENT ON COLUMN worker_users.is_level_locked IS '是否锁定打手等级,锁定后禁止自动升级';
COMMENT ON COLUMN worker_users.level_locked_at IS '等级锁定时间';
COMMENT ON COLUMN worker_users.level_locked_reason IS '等级锁定原因/调级备注';
COMMENT ON COLUMN worker_users.level_locked_by IS '锁定操作人';