admin-fund-pin.php

20260916-201504 轮 · 看它的历史
  ✔ 隔离库 jnc_ma_e2e_h8 就绪(105 张表,缺列 0)

【组 C 影响面预览 —— 不带 confirm 就只回人数与金额,一分钱不动】
  ✅ 预览时 M1 余额未变
  ✅ 预览时零流水
  ✅ 预览回的是 JSON 且 info=1
  ✅ 预览报的人数 = 2
  ✅ 确认文案里有人数 2
  ✅ 确认文案里带着后端算出的货币符号 RM
  ✅ 确认文案里有合计金额(2500 分 × 2 人 = 50.00)
  ✅ 确认文案里有档位名「发放奖金」
  ✅ 积分档预览用「点」而不是货币符号
  ✅ 积分档预览同样零写入
  ✅ 组 C 全程零流水
  ✅ 预览路径不校验 PIN(PIN 给错也照样回预览)
  ✅ 给错 PIN 的预览同样零写入

  · 执行回执必须同时报「执行了几个 / 跳过了几个」
  ✅ 回执报了执行数
  ✅ 回执报了跳过数
  ✅ 组 C 收尾:流水清零

【组 P 二级 PIN —— 未设 / 缺失 / 错误 一律拒且钱不动】
  ✅ 未设 PIN → 提示先去设置
  ✅ 未设 PIN 时 M1 余额未变
  ✅ 未设 PIN 时零流水
  ✅ 缺 PIN → 拒(空 PIN 判为 wrong)
  ✅ 缺 PIN 时 M1 余额未变
  ✅ PIN 错 → 拒
  ✅ PIN 错时 M1 余额未变
  ✅ PIN 未通过时全程零流水
  ✅ PIN 正确 → M1 余额精确 +4200
  ✅ PIN 正确 → 记了一条流水
  ✅ 组 P 收尾:流水已清零

  · huiyuanguanli_huiyuan_xiugai cmd=2 同样要 PIN
  ✅ cmd=2 PIN 错 → 拒
  ✅ cmd=2 PIN 错时积分未变
  ✅ cmd=2 PIN 对 → 积分写进去了

  · 🔴 守卫:cmd=1/3/4 不是资金面,不该被 PIN 拦
  ✅ cmd=1 冻结:不带 PIN 照样生效
  ✅ cmd=1 解冻:不带 PIN 照样生效
  ✅ cmd=3 改等级:不带 PIN 照样生效

【组 V 数值校验 —— 非法值一律拒,余额逐分不变】
  ✅ value=-5 (负数) 被拒
  ✅ value=-5 后 M1 余额未变
  ✅ value=-5 未产生 PHP 异常
  ✅ value=abc (非数字) 被拒
  ✅ value=abc 后 M1 余额未变
  ✅ value=abc 未产生 PHP 异常
  ✅ value= (空串) 被拒
  ✅ value= 后 M1 余额未变
  ✅ value= 未产生 PHP 异常
  ✅ value=0 (零(增量语义下会让 affected 守卫失去分辨力)) 被拒
  ✅ value=0 后 M1 余额未变
  ✅ value=0 未产生 PHP 异常
  ✅ value=1.5 (小数) 被拒
  ✅ value=1.5 后 M1 余额未变
  ✅ value=1.5 未产生 PHP 异常
  ✅ value=100000001 (超上限) 被拒
  ✅ value=100000001 后 M1 余额未变
  ✅ value=100000001 未产生 PHP 异常
  ✅ 组 V 全程零流水

【组 U uid 校验 —— 非法 JSON 不再 Fatal;vip 组只认会员档位】
  ✅ uid=[1,2,abc] (非法 JSON(json_decode 返 null,原实现 count(null) 是 Fatal)) 被拒
  ✅ uid=[1,2,abc] 未产生 PHP 异常(不是 Fatal)
  ✅ uid=[] (空数组) 被拒
  ✅ uid=[] 未产生 PHP 异常(不是 Fatal)
  ✅ uid=[990991,"x"] (数组里混了非数字) 被拒
  ✅ uid=[990991,"x"] 未产生 PHP 异常(不是 Fatal)
  ✅ uid="notanarray" (不是数组) 被拒
  ✅ uid="notanarray" 未产生 PHP 异常(不是 Fatal)
  ✅ 组 U 后 M1 余额未变

  · vip 组白名单(§2.12 过载字段:9/10=管理员 100=DDM 101=SucaiManager)
  ✅ cmdid=2 uid=[10](管理员档) → 解析为空
  ✅ cmdid=2 uid=[100](DDM 档) → 解析为空(⚠️ 当前库无 vip=100,此条恒真)
  ✅ cmdid=2 uid=[101](SucaiManager 档) → 解析为空
  ✅ cmdid=2 uid=[0,1,9] 混入 9 → 整体解析为空(不静默丢弃那一档)
  ✅ cmdid=2 uid=[0] 合法档确实解析得出人(否则上面几条是恒真断言)
  ✅ cmdid=2 uid=[10] 走完整写路径同样被拒
  ✅ 管理员余额未被批量发钱按钮改动
  ✅ 组 U 全程零流水

【组 S 扣除不足 —— 跳过而非抛 ERROR 1690】
  ✅ 积分扣超额没有抛 ERROR 1690
  ✅ 积分扣超额没有抛任何 PHP 异常
  ✅ M1(score=100) 被跳过,积分不变
  ✅ M2(score=1000) 扣成 500
  ✅ 只给真的扣成的那一个记了流水
  ✅ 那条流水属于 M2
  ✅ 余额扣超额没有抛异常
  ✅ M3 余额未被扣成负数
  ✅ 余额扣超额未新增流水

【组 L 流水 —— 记会员本人;没改到行就不记】
  ✅ 合法发放未报异常
  ✅ M1 余额精确 +2500
  ✅ 发放后新增一条流水
  ✅ 🔴 流水 dealuserid = 会员本人(不是管理员)
  ✅ 🔴 全部流水都不属于管理员

  · 会员 id 不存在时不得留下流水
  ✅ 不存在的会员未报异常
  ✅ 不存在的会员没有产生流水

  · 混合名单:一个存在、一个不存在
  ✅ 存在的那个照常 +300
  ✅ 只多了一条流水(不存在的那个没记)

【组 D 借贷方向 —— 发放只填 dealin,不能两列都填】

  · 发放积分
  ✅ 发放积分未报异常
  ✅ M1 积分精确 +77
  ✅ 发放积分产生了一条流水
  ✅ 币种档位是积分(dealgoldmode=2)
  ✅ dealin = 发放数
  ✅ 🔴 dealout = 0
  ✅ 明细页渲染出的这一行确实是本次那条流水
  ✅ 「用户收入」格显示了发放数 77
  ✅ 🔴「用户支出」格逐字是 -(改前这一格也会显示 77 积分)
  ✅ 🔴 收入格与支出格不相同(改前两格逐字一样)

  · 守卫:扣除积分仍然只填支出侧(证明不是把判据整个翻过来)
  ✅ 扣除积分未报异常
  ✅ 扣除产生了一条流水
  ✅ 扣除:dealin = 0
  ✅ 扣除:dealout = 扣除数
  ✅ 扣除:「用户收入」格是 -
  ✅ 扣除:「用户支出」格显示了 55

  · 守卫:发放余额不受影响
  ✅ 发余额产生了一条流水
  ✅ 发余额:币种档位是虚拟货币(dealgoldmode=0)
  ✅ 发余额:dealin = 1200
  ✅ 发余额:dealout = 0

【组 G 守卫 —— huiyuanguanli_huiyuan_xiugai 的其余分支未被误伤】
  ✅ cmd=1 冻结仍然生效
  ✅ cmd=1 解冻仍然生效
  ✅ cmd=3 改会员等级仍然生效

  · cmd=2 改积分:非法值拒、合法值成
  ✅ cmd=2 value=-1 (负数) 被拒
  ✅ cmd=2 value=-1 后积分未变
  ✅ cmd=2 value=-1 未 Fatal
  ✅ cmd=2 value=abc (非数字) 被拒
  ✅ cmd=2 value=abc 后积分未变
  ✅ cmd=2 value=abc 未 Fatal
  ✅ cmd=2 value=100000001 (超上限) 被拒
  ✅ cmd=2 value=100000001 后积分未变
  ✅ cmd=2 value=100000001 未 Fatal
  ✅ cmd=2 合法值仍然写得进去
  ✅ cmd=2 允许清零(绝对赋值语义,下限是 0 不是 1)
  ✅ 还原:管理员 admin_pin 回到原值
  ✅ 还原:所有夹具账号的余额与积分都回到原值
  ✅ 🔴 非夹具账号的余额与积分总和一分未动
  ✅ 清理:本轮产生的资金流水已删净

=== PASS=125 FAIL=0 ===
  ✔ 已销毁 jnc_ma_e2e_h8