Appearance
第十五章 驳回与二次结算
关盘口径(2026-04-21 生效):关盘来源统一为数据源推送(唯一来源);关盘 = 绝对终态,操盘页与结算详情页均不提供人工开盘入口。
数据错误处理入口(2026-04-23 定稿):数据错误的实际修正全部走各自独立入口(不走赛事异常处理弹窗内的业务动作):开盘中赔率错 → 操盘详情页调赔率;关盘未结算赔率错 → 本章盘口卡片「取消盘口」按钮(void);开盘中 / 关盘未结算赛果字段错 → 赛果录入页修正;已结算 / 已取消盘口错 → 本章盘口二次结算(第 15.2 节前置条件盘口=已结算/已取消)。第 16.5 节赛事异常处理 → 数据错误弹窗仅做审计标记(不下架、不关盘、不改赛事态、不动订单),不替代以上实际修正动作。
15.1 两类操作
| 操作 | 作用对象 | 触发入口 | 状态变化 | 时效 | 对下级的影响 |
|---|---|---|---|---|---|
| 赛事驳回 | 赛事 | 赛事信息头「赛事驳回」按钮(见第 4 章) | 已结算 / 已取消 / 异常 → 待结算 | 距最新结算时间 ≤ 24 小时 | 不影响任何盘口 / 注单 / 母单状态 |
| 盘口二次结算 | 单个盘口(或盘口线) | 盘口卡片「二次结算」按钮(见第 7 章) | 已结算 / 已取消 → 关盘 | — | 该盘口下注单回退待结算,关联母单回退待结算 |
操作顺序约束:盘口二次结算要求赛事状态 = 待结算。若赛事非待结算状态(已结算 / 已取消 / 异常),必须先执行赛事驳回(→待结算),再进入盘口二次结算。
24 小时驳回窗口:所有赛事驳回操作须在赛事最新结算时间起 24 小时内发起。多次"驳回 → 重选 → 再结算"循环时,窗口以最新一次结算时间向后滚动。超窗后按钮永久禁用,赛事终态不可恢复;如需修正须走业务事故流程由运营人工介入。
时区基准:24 小时窗口按 UTC 时间戳计算(赛事结算时间以 UTC 存储,对应数据源的 UTC 时间标准)。展示时按用户浏览器本地时区转换展示(菲律宾运营团队看到 UTC+8)。跨时区团队基准一致,避免歧义。
15.2 赛事驳回
| 规则 | 说明 |
|---|---|
| 前置条件 | 赛事状态 = 已结算、已取消或异常(三种状态均可执行赛事驳回) |
| 时效约束 | 距赛事最新结算时间 ≤ 24 小时;超窗按钮永久禁用 |
| 操作入口 | 结算详情页赛事信息头「赛事驳回」按钮 |
| 操作权限 | 结算人员 |
| 确认弹窗 | 见第 9 章 9.2b |
| 状态变化 | 赛事 已结算 / 已取消 / 异常 → 待结算 |
| 对盘口的影响 | 无。所有盘口保持原状态(已结算 / 已取消等) |
| 对注单的影响 | 无 |
| 对串关母单的影响 | 无 |
| 对操盘列表的影响 | 赛事重新出现在操盘列表中 |
| 赛事驳回的目的 | 解除盘口二次结算的赛事级前置限制,使结算人员可以对具体盘口执行二次结算 |
| 驳回次数 | 不设上限;24 小时窗口以最新结算时间滚动 |
15.3 盘口二次结算
15.3.1 前置条件(首次结算 vs 二次结算区分)
盘口操作分两类,异常态下的行为不同:
| 操作类型 | 赛事状态要求 | 说明 |
|---|---|---|
| 盘口首次结算(关盘 → 已结算) | 待结算 或 异常态 | 行业做法:异常态下有明确赛果的盘口(如腰斩时上半场类)允许正常首次结算;赛事状态和盘口状态两层独立 |
| 盘口二次结算(已结算 → 关盘) | 仅待结算 | 赛事非待结算时按钮禁用,提示「请先执行赛事驳回」。确保已结算盘口的修改走完整 [赛事驳回→二次结算] 路径 |
| 盘口取消(待结算 → 已取消) | 待结算 或 异常态 | 异常态下可发起盘口级取消 |
| 条件 | 说明 |
|---|---|
| 盘口状态 = 已结算 | 仅已结算盘口可发起二次结算 |
15.3.2 盘口二次结算流程
结算人员点击盘口卡片「二次结算」按钮
↓
弹出二次结算弹窗(展示影响范围:注单数/已派彩/关联串关数)
↓
点击「确认二次结算」
↓
盘口结算结果撤销,盘口状态回退为「关盘」(不是开盘,不接受投注)
↓
该盘口下所有注单回退为待结算
↓
盘口卡片恢复为关盘状态,可重新选择结算结果
↓
结算人员重新选择结算结果并确认 → 系统执行差额处理15.4 派彩回收机制
一期不做派彩冻结。盘口二次结算时,系统直接从用户余额扣回差额:
| 规则 | 说明 |
|---|---|
| 扣回方式 | 二次结算后系统自动计算新旧派彩差额,直接从用户余额扣回 |
| 余额充足 | 差额全额扣回,正常完成 |
| 余额不足 | 能扣多少扣多少,不足部分记为坏账 |
| 新派彩 > 旧派彩 | 补发差额给用户 |
| 坏账记录 | 每笔坏账记录:注单 ID + 用户 ID + 应扣金额 + 实扣金额 + 坏账金额 |
差额处理触发时机:差额处理在新结算结果确定后自动触发。
风险说明:二次结算期间用户可能已提现导致余额不足。一期接受此风险,坏账由运营跟进处理。
15.4.1 统一差额公式
设 W = 注单投注额(本金),D = 注单投注时的 Decimal 赔率(= HK + 1)。
| 变量 | 口径 |
|---|---|
| 旧派彩 | 二次结算前注单对应的账面已支出金额(参见 15.4.2 派彩口径表) |
| 新派彩 | 二次结算后按新结算结果计算的应支出金额(同口径) |
| 差额 | 新派彩 - 旧派彩 |
| 差额 | 系统动作 |
|---|---|
| 差额 > 0 | 从平台向用户余额补发差额绝对值 |
| 差额 < 0 | 从用户余额扣回差额绝对值;余额不足时按剩余余额扣回,不足部分记为坏账 |
| 差额 = 0 | 不触发任何余额操作,仅记录盘口二次结算状态变更日志 |
15.4.2 各结算结果的派彩口径(核心规则)
| 结算结果 | 派彩金额 | 推导 | 适用渲染器 |
|---|---|---|---|
| 赢 | W × D | 全额派彩(含本金 + 净赢利,即 W + W × HK) | 全部 |
| 输 | 0 | 平台收入本金,用户无支付 | 全部 |
| 赢半 | W × (D+1) / 2 | 半注赢 + 半注走水:0.5W × D + 0.5W | 仅 MultiLineTable |
| 输半 | 0.5W | 半注输 + 半注走水:0 + 0.5W | 仅 MultiLineTable |
| 走水 | W | 全退本金 | 仅 MultiLineTable |
| 取消 | W | 全退本金 | 全部 |
| 退款 | W | 全退本金 | 全部 |
等价提示:走水 / 取消 / 退款三种结果在账面上完全等价(均为"全退本金 W"),三者之间互转时差额恒为 0。
已取消赛事场景:赛事已取消导致盘口进入已取消状态(注单已退款 W)。赛事驳回后执行盘口二次结算时,旧派彩 = W(视同"取消"结果),按矩阵末行计算差额。
15.4.3 差额处理矩阵(全量)
下表横轴为新结算结果,纵轴为旧结算结果。单元格值 = 差额 = 新派彩 − 旧派彩(正 = 补发,负 = 追回,0 = 不动)。走水/取消/退款合并为一列。
| 旧 ↓ \ 新 → | 赢 (W·D) | 输 (0) | 赢半 (W·(D+1)/2) | 输半 (0.5W) | 走水/取消/退款 (W) |
|---|---|---|---|---|---|
| 赢 (W·D) | 0 | −W·D | −W·(D−1)/2 | W·(0.5−D) | W·(1−D) |
| 输 (0) | +W·D | 0 ⭐ | +W·(D+1)/2 | +0.5W | +W |
| 赢半 (W·(D+1)/2) | +W·(D−1)/2 | −W·(D+1)/2 | 0 | −W·D/2 | +W·(1−D)/2 |
| 输半 (0.5W) | +W·(D−0.5) | −0.5W | +W·D/2 | 0 | +0.5W |
| 走水/取消/退款 (W) | +W·(D−1) | −W | +W·(D−1)/2 | −0.5W | 0 |
⭐ 特殊约束:旧 = 输 & 新 = 输——差额 = 0,无余额操作、无需触发差额日志条目;盘口状态仍完成"已结算 → 关盘 → 已结算"的回退流程,但对该注单本身的差额处理链路被跳过(仅保留盘口状态变更日志,不生成注单级差额日志)。
15.4.4 多组基准分场景下的差额基线(组级独立口径)
15.4.4.1 背景与适用范围
当盘口内存在多组基准分时(见 第 7.3.6 节),同一盘口的不同组独立结算,各组可能呈现不同结算结果。本小节规定此类盘口发生二次结算时,差额基线按组独立维护,不与同盘口其他组串扰。
适用范围:仅适用于第 7.3.6 节定义的多组基准分盘口的二次结算场景(常规赛事滚球让球 / 大小类;本地结算路径 L2 / L3 / L4)。单组场景退化为现有盘口级基线(无改动)。冠军赛事不适用(冠军盘口不存在"下注时比分"概念,无多组基准分)。
15.4.4.2 核心原则:组级独立基线
| 层级 | 记录单元 | 口径 |
|---|---|---|
| 组级原派彩基线 | 每个基准分组在首次结算时固化一份"该组全部注单的原派彩总额" | 作为该组未来二次结算的差额计算基数 |
| 组级新派彩 | 二次结算选定新结果后,按该组全部注单重算派彩总额 | — |
| 组级差额 | 组新派彩 − 组原派彩基线 | 按 第 15.4.3 节 差额处理矩阵 落位到资金动作 |
关键不变式:
- 不同组的基线互相隔离,任一组二次结算不影响其他组的基线快照
- 其他组未发生赛果变化时,其他组的差额 = 0,不触发资金操作
- 日志落位以组为单位
15.4.4.3 二次结算触发粒度
| 场景 | 差额处理粒度 | 联动范围 |
|---|---|---|
| 单组盘口(1 组) | 盘口级 = 组级(退化一致) | 盘口全部注单 |
| 多组盘口,某 1 组二次结算 | 仅该组基线 + 该组注单重算 | 仅该组注单;其他组不动 |
| 多组盘口,多组同时二次结算 | 各组独立执行本节规则 | 各组互不串扰 |
15.4.4.4 循环计数粒度(对第 15.6 节的扩展)
赛果变更计数在多组场景下按"盘口线级 + 基准分组"粒度维护:
- 每组独立累计计数
- 某组第 N 次二次结算时,其他组计数不变
- 不同组可能经历不同次数的修正(例如组 1 赛果无争议保持 0 次;组 2 因数据源修正经历 2 次)
落位:第 15.6 节"计数粒度"行追加一条"多组基准分场景按组独立维护计数"。
15.4.4.5 基准分组与首次结算的协作
多组场景首次结算弹窗(见第 7.3.6.4 节 / 第 7.3.6.3a 节)提交时,系统对每组分别记录以下字段作为基线快照:
| 字段 | 口径 |
|---|---|
| 基准分组标识 | 下注时比分 |
| 组内注单数 | 该组聚合的注单笔数 |
| 组原派彩总额 | 该组全部注单按首次结算结果计算的派彩合计 |
该快照作为后续二次结算差额计算的基数。
15.4.4.6 盘口级回滚场景与组级基线的协作(对第 15.6d.5 节的澄清)
第 15.6d.5 节已约定"多组基准分盘口的回滚对盘口内所有组统一执行(全部回退到待结算);差额处理按组独立计算"。本小节具体化该规则:
- 回滚动作对"所有组注单一并回退到待结算"是盘口级统一执行的
- 但"差额处理"仍以各组基线快照为基数,逐组按第 15.4.3 节矩阵计算
- 重新结算后,每组独立产生新的基线快照(覆盖原快照)
15.4.4.7 日志落位(对第 21 章的补充)
每次多组盘口二次结算,每组独立生成一条结算日志,字段含:
- 盘口标识 + 组标识(下注时比分)
- 组内注单数 / 组投注额
- 组原结果 + 组新结果
- 组原派彩总额 + 组新派彩总额 + 组差额
- 关联母单数(该组子单涉及的母单)
15.4.4.8 边界场景
| 场景 | 处理 |
|---|---|
| 某组二次结算后触发数据源开盘回滚(见第 15.6d 节) | 回滚粒度盘口级(全部组回退);差额基数仍按各组首次结算时的基线快照 |
| 某组二次结算时,其他组尚未首次结算 | 其他组无基线;首次结算时按组生成基线,不参与本次差额计算 |
| 组数变化(二次结算前后新增 / 减少组) | 业务不可能——基准分组由"下注时比分"静态决定,结算动作不改变注单字段 |
| 多组全部组被同时二次结算(整盘口修正) | 各组按本节规则并发执行;全部组的差额日志合集呈现 |
| L4 多组手动结算的二次结算 | 本节规则同样适用(L4 首次结算时每组独立选结果 → 写入各自基线 → 二次结算按组独立重算) |
15.4.4.9 与现有规则的一致性校验
| 既有规则 | 本节兼容性 |
|---|---|
| 第 7.3.6.5 节 跨组不联动 | 差额基线组级独立等价于"跨组不联动"在资金维度的延伸 |
| 第 15.4.1 节 统一差额公式 | 公式不变,仅基数由"盘口原派彩"改为"组原派彩" |
| 第 15.4.3 节 差额矩阵 | 矩阵不变,作用单元由"盘口"改为"组" |
| 第 15.5 节 二次结算对串关的影响 | 子单系数仍派生自引用盘口该组的结算结果,母单按各组新系数重算 |
| 第 15.6 节 赛果变更计数 | 粒度扩展为"盘口线级 + 基准分组" |
15.4.5 渲染器可用结算结果范围
不同渲染器支持的结算结果子集不同,矩阵的适用范围按渲染器裁剪:
| 渲染器 | 可选结算结果 | 矩阵适用范围 |
|---|---|---|
| MultiLineTable | 赢 / 输 / 赢半 / 输半 / 走水 / 取消 / 退款 | 完整 5×5 矩阵 |
| SingleLineTable | 赢 / 输 / 取消 / 退款 | 仅"赢 / 输 / 走水-取消-退款" 三行三列子集 |
| Matrix | 赢 / 输 / 取消 / 退款 | 同上 |
| LongList | 赢 / 输 / 取消 / 退款 | 同上 |
SingleLineTable / Matrix / LongList 三种渲染器不支持"赢半 / 输半 / 走水"结果,矩阵中涉及"赢半 / 输半"的单元格不适用于这三类渲染器;"取消"与"退款"在账面等价,互转差额为 0。
15.4.6 基准示例
以下用例均基于 W = 1,000(投注额),D = 1.88(HK 0.88):
| # | 旧结果 | 旧派彩 | 新结果 | 新派彩 | 差额 | 系统动作 |
|---|---|---|---|---|---|---|
| 1 | 赢 | 1,880 | 输 | 0 | −1,880 | 追回 1,880(不足记坏账) |
| 2 | 输 | 0 | 输 | 0 | 0 | 不处理 ⭐(用户约束:输→输跳过差额处理) |
| 3 | 赢 | 1,880 | 赢 | 1,880 | 0 | 不处理 |
| 4 | 赢半 | 1,440 | 赢 | 1,880 | +440 | 补发 440(另半注净赢利) |
| 5 | 赢 | 1,880 | 赢半 | 1,440 | −440 | 追回 440 |
| 6 | 输半 | 500 | 赢 | 1,880 | +1,380 | 补发 1,380 |
| 7 | 走水 | 1,000 | 赢 | 1,880 | +880 | 补发 880(净赢利) |
| 8 | 走水 | 1,000 | 输 | 0 | −1,000 | 追回本金 1,000 |
| 9 | 已取消赛事驳回 → 判赢 | 1,000(视同取消) | 赢 | 1,880 | +880 | 补发 880 |
| 10 | 已取消赛事驳回 → 判输 | 1,000 | 输 | 0 | −1,000 | 追回本金 1,000 |
| 11 | 已取消赛事驳回 → 维持取消 | 1,000 | 取消 | 1,000 | 0 | 不处理 |
| 12 | 已取消赛事驳回 → 走水 | 1,000 | 走水 | 1,000 | 0 | 不处理 |
验证方法:用户账面最终净变化(投注时 −W + 中间状态发放 ± 差额操作)应等于"按新结算结果从一开始就结算"的净变化。所有用例代入后恒等(开发/测试可交叉验证)。
15.5 盘口二次结算对串关的影响
| 场景 | 行为 |
|---|---|
| 被二次结算盘口有串关母单关联 | 母单状态回退为待结算 |
| 母单已派彩 | 母单派彩待二次结算后按 15.4.1 差额公式处理(差额 > 0 补发;< 0 扣回,不足记坏账;= 0 不动) |
| 母单中其他子单 | 不受影响,保持原结果 |
| 子单二次结算后 | 母单自动按新系数乘积重新计算派彩,执行差额处理 |
差额 = 0 的串关场景:若子单新旧结算结果都导致子单系数相同(如旧输→新输系数都为 0;旧走水→新走水系数都为 1.00),母单派彩无变化,差额 = 0,不触发余额操作(与 15.4.3 矩阵⭐规则一致)。
15.6 赛果变更计数
| 规则 | 说明 |
|---|---|
| 计数事件 | 仅当盘口赛果发生实质改变时(新结算结果 ≠ 原结算结果)+ 1 |
| 不计数 | 首次结算(赛果从无到有)、数据源推送开盘自动回滚、二次结算但重选相同结果 |
| 计数粒度 | 盘口线级(MLT 渲染器)/ 玩法级(其他渲染器);多组基准分场景按组独立维护(详见 第 15.4.4.4 节) |
| 记录位置 | 结算日志的"赛果变化触发自动重算"条目,字段:累计次数 N |
| 用途 | 仅作统计追溯,不做告警或阈值禁止 |
15.6b 数据源推送开盘后的新旧注单混合处理
盘口经历"关盘 → 已结算 → 数据源推送开盘(自动回滚)→ 再次关盘 → 结算"路径时,同一盘口下会同时存在两批注单:
| 注单类型 | 下注时比分字段 | 结算逻辑 |
|---|---|---|
| 旧注单(第一次开盘期间投注) | 记录第一次投注瞬间的比分 | 按该字段计算"下注后比分"结算(赛前注单 = 终场比分;滚球注单 = 终场比分 − 下注时比分,详见 12.0.2 基准分定义) |
| 新注单(数据源推送开盘后投注) | 记录开盘恢复后投注瞬间的比分 | 同上逻辑,但"下注时比分"是开盘恢复后的当前比分 |
关键规则:
- 系统按注单的"下注时比分"字段逐笔独立判定,新旧注单互不干扰
- 同一盘口下可能出现"旧注单判输 / 新注单判赢"等不同结果(视下注时比分而定,符合业务预期)
- 派彩计算独立,盘口卡片汇总展示时按注单维度分别统计
- 盘口分母口径:分母为已关盘盘口数(不含数据源推送开盘后再次回到开盘态的盘口计数)
15.6c 并发操作控制(操作版本校验 + 请求去重窗口)
多结算人员同时操作同一赛事 / 盘口时,系统按两层机制处理:
第一层:操作版本校验(冲突控制主机制)
| 规则 | 说明 |
|---|---|
| 实现机制 | 盘口 / 赛事各自维护递增版本号,每次状态变更 +1;用户端提交操作时携带当前版本号 |
| 冲突判定 | 系统校验版本号:匹配则执行(执行后版本号 +1),不匹配则拒绝 |
| 优势 | 无时间窗口,先到先得,已在处理的操作永远保护,避免永久锁死 |
| 适用范围 | 盘口级结算 / 二次结算 / 取消;赛事级结算 / 驳回 / 异常处理 |
| UX 反馈 | 冲突时弹窗提示"该盘口 / 赛事已被他人操作,请刷新后重试",不自动重试 |
第二层:请求去重窗口(防重复提交)
| 规则 | 说明 |
|---|---|
| 触发场景 | 网络抖动导致用户端自动重试、用户双击按钮等导致同一操作重复提交 |
| 防重复机制 | 每次操作生成唯一操作标识;系统在 500ms 内识别到相同操作标识只执行 1 次 |
| 默认值 | 500ms(行业常见范围 100-500ms,取上限以容纳典型网络抖动) |
| 配置归属 | 系统级写死,修改需发版 |
并发场景处理示例
| 场景 | 行为 |
|---|---|
| 两人同时结算同一盘口 | 先到的请求更新版本号成功;后到的版本号不匹配,返回"该盘口已被他人操作,请刷新后重试" |
| 两人同时操作同一赛事不同盘口 | 允许并行(不同盘口独立版本号) |
| 同一用户网络抖动双发请求 | 同一操作标识在 500ms 内被识别,只执行 1 次(防重复保护) |
| 赛事级操作与盘口级操作并发 | 赛事级和盘口级各自版本号独立;有依赖关系时按前置校验拒绝(如"结算赛事"要求所有盘口已结算) |
15.6d 数据源推送开盘信号的自动回滚流程
关盘 = 绝对终态,无人工开盘入口;但数据源作为权威数据源,其推送的开盘信号对本地是硬约束,必须自动响应。本节定义数据源推送开盘信号时的完整回滚流程。受 24 小时窗口限制——超过 24 小时窗口的赛事不再执行回滚,数据源推送被拒收。
15.6d.1 触发条件与数据源事实
数据源事实:数据源无独立的"开盘/关盘切换"业务指令。数据源仅通过 MarketlineStatusId(增量推送)推送盘口状态值:
| MarketlineStatusId | 含义 |
|---|---|
| 1 | 开盘 |
| 2 | 关盘 |
状态变化语义:本地基于数据源推送 MarketlineStatusId: 2→1 的状态变化,识别出"盘口由关盘变为开盘"。数据源本身不区分"首次开盘"和"再次开盘",只关心当前应有状态值。
触发条件:仅由数据源推送 MarketlineStatusId = 1 且本地盘口当前状态非开盘触发。人工无任何触发入口。
15.6d.2 按本地状态分支处理
系统接收 IM 开盘信号后,按本地盘口当前状态执行不同操作:
| 本地状态 | 盘口级操作 | 注单级操作 | 串关母单级操作 | 资金处理 | 日志类型 |
|---|---|---|---|---|---|
| 开盘中 | 忽略冗余推送 | 无 | 无 | 无 | 信息日志(可选记录) |
| 关盘(待结算) | 关盘 → 开盘 | 保持待结算 | 保持待结算 | 无 | F9 IM 推送开盘(关盘态恢复) |
| 已结算⭐(赛事 = 待结算 或 赛事终态但 ≤ 24h) | 已结算 → 开盘 | 已结算 → 待结算 | 已结算 → 待结算(短路解除) | 已派彩按 15.4 差额矩阵延迟处理 | F10 IM 推送开盘 + 自动回滚 |
| 已结算(赛事终态且 > 24h) | 拒收 IM 推送(本地状态保持已结算) | 无变化 | 无变化 | 无变化 | F12 IM 推送被 24h 超窗拒收 |
| 已取消(赛事 = 待结算 或 赛事终态但 ≤ 24h) | 已取消 → 开盘 | 已取消 → 待结算 | 已取消 → 待结算 | 已退款金额撤销(从余额扣回,不足记坏账) | F11 IM 推送开盘(取消撤销) |
| 已取消(赛事终态且 > 24h) | 拒收 IM 推送(本地状态保持已取消) | 无变化 | 无变化 | 无变化 | F12 IM 推送被 24h 超窗拒收 |
15.6d.3 已结算自动回滚详细流程
数据源推送开盘信号到已结算盘口
↓
系统自动执行
↓
① 盘口状态:已结算 → 开盘
② 该盘口下所有子注单:已结算 → 待结算
③ 关联串关母单:已结算 → 待结算
· 若母单因该子单判输触发过短路结算(派彩=0)→ 自动解除短路,母单恢复待结算;母单原派彩为 0 不涉及资金撤销
· 母单其他子单状态保持不变(赢/输/走水各自保留);母单恢复待结算后等所有子单重新确定
· 该盘口"再次关盘 + 完成结算"时,母单按新子单结果重新评估:
- 该子单再次判输 → 母单再次短路判负(派彩 0,零差额,无资金变动)
- 该子单判赢 / 走水 → 母单按 14.3 子单系数表重新计算派彩(可能产生补发差额)
- 该子单判取消/退款(系数=1.00)→ 母单按其他子单重新评估
④ 原派彩按 15.4 差额矩阵延迟处理:
· 系统记录"原派彩总额"作为差额计算基数(**不立即扣回**)
· **多组基准分盘口**:按组独立记录各组原派彩总额(对齐 [§15.4.4.2 组级独立基线](#_15-4-4-2-核心原则-组级独立基线)),再次结算时各组分别计算差额,跨组互不串扰
· 具体差额 = 新派彩 − 原派彩,**需等盘口再次关盘并完成结算后才能计算**
· 差额处理时机:盘口"再次关盘 + 完成新一轮结算"触发,按 15.4.3 矩阵执行:
- 补发场景:新派彩 > 原派彩 → 差额补发给用户
- 扣回场景:新派彩 < 原派彩 → 从余额扣回(不足记坏账)
- 零差额:不触发资金变动,仅记日志
⑤ 赛事级状态联动判断(24h 超窗拒收)
· 赛事 = 待结算 → 盘口直接回滚,赛事状态不改变
· 赛事 = 已结算 / 已取消 / 异常态(腰斩暂缓 / 延期暂缓):
- 距最新结算时间 **≤ 24h** → 自动驳回赛事至待结算 + 执行盘口回滚流程(步骤 ①-④)
* **业务合理性**:24 小时窗口内赛事结算仍可调整,IM 推送开盘等效于"数据源恢复正常"业务信号,解除赛事异常/终态合理
- 距最新结算时间 **> 24h** → **拒收本次 IM 推送**,盘口保持已结算态,赛事保持原状态
* **业务合理性**:超过 24 小时后赛事已完成结算流程,IM 推送回滚不再执行;以稳定结算结果优先
* 结果:本地与 IM 状态永久不一致,但超窗后盘口无活跃注单(均已派彩/已结算),业务影响可控
* 记录 F12 拒收日志供审计追溯;**不自动重试**,后续 IM 推送同一盘口开盘也持续拒收(直到人工干预或赛事重建)
⑥ 记录系统日志:
· 24h 内回滚 → F10 IM 推送开盘 + 自动回滚(绿色系统级)
· 超窗拒收 → F12 IM 推送开盘被 24h 超窗拒收(红色警告级)
⑦ 对正在操作该盘口的结算人员推送提示:"盘口状态已由数据源更新,请刷新"(仅 24h 内回滚场景;超窗拒收不触发提示,因为本地状态未变)15.6d.4 自动回滚机制要点
| 维度 | 2026-04-21 数据源推送自动回滚 |
|---|---|
| 触发方 | 仅数据源推送(MarketlineStatusId: 2→1);人工无触发入口 |
| 前置条件 | 无前置;按本地状态自动分支 |
| 赛事级联动 | 赛事 = 待结算:直接回滚;终态 24h 内:自动驳回回滚;终态超窗:拒收数据源推送 |
| 24h 窗口约束 | 约束数据源推送的回滚(按 24 小时窗口约束) |
| 并发处理 | 24h 内回滚:数据源优先,结算人员被提示刷新;超窗拒收:本地状态不变,无提示 |
| 差额处理 | 按 15.4 矩阵延迟到再次关盘结算 |
| 串关短路解除 | 自动解除 |
| 日志类型 | F 类:F9(恢复)/ F10(回滚)/ F11(撤销退款)/ F12(超窗拒收,红色警告) |
15.6d.5 边界场景
| 场景 | 处理 |
|---|---|
| 数据源反复推送(关→开→关) | 每次推送独立处理(本节仅作用于盘口状态变化;已结算盘口的赛果变化走 第 11.7 节 5 分钟聚合窗口);若 1 分钟内频繁切换,二期评估引入状态切换聚合窗口 |
| 同一推送同时包含新状态 + 新赛果 | 状态变化先处理(按本节规则触发盘口回滚);赛果变化随后触发(盘口处于已结算且赛果发生改变 → 按 11.7 节自动重新结算 + 5 分钟聚合窗口) |
| IM 推送开盘但本地查询到盘口不存在 | 忽略 + 记录异常日志 |
| 结算人员正在操作该盘口时收到 IM 推送(24h 内回滚场景) | IM 优先;结算人员未提交的操作被取消,页面提示"盘口状态已由数据源更新,请刷新" |
| 数据源盘口进入本地锁定态后 IM 推送开盘 | 拒收(本地锁定态设计初衷就是避免 IM 后续推送覆盖本地手动结算,详见 第 18 章 18.2.4)+ 记录 F7 拒收日志;IM 推送回滚规则仅作用于可操盘盘口和非本地锁定态的数据源盘口 |
| 多组基准分盘口(第 7.3.6 节)回滚 | 盘口已结算 → 待结算的回退动作对盘口内所有基准分组统一执行(所有组注单一并回退到待结算);差额处理按组独立计算(每组记录各自的原派彩总额作为差额基数) |
| 盘口下注单已部分派彩到用户钱包(有提现)(24h 内回滚场景) | 已派彩金额仍按 15.4 矩阵延迟处理;若再次结算需扣回但余额不足 → 记坏账 |
| 24h 超窗拒收后 IM 持续推送开盘 | 每次推送均拒收,均记 F12 日志;不自动重试;结算人员可通过审计日志查看所有拒收记录 |
| 本地与数据源状态因超窗拒收永久不一致 | 可接受(超窗赛事结算已完成,无活跃注单;数据源侧持续认为盘口开盘不影响本地业务流程)。持续不一致且影响业务时,由操盘手联系数据源方排查推送来源并要求纠正,本地不做自动重试 |
15.7 操作记录
本章涉及的 3 类操作的日志字段完整定义见 第 21 章 21.2 日志记录范围:
| 操作类型 | 对应 21 章定义 |
|---|---|
| 赛事驳回 | 21.2.1:赛事 ID + 赛事名 + 原状态(已结算 / 已取消 / 异常态)→ 待结算 + 距最新结算时间剩余窗口(小时) |
| 盘口二次结算 | 21.2.1:盘口 ID + 盘口名 + 原结算结果 + 新结算结果(如已重选)+ 影响注单数 + 已派彩金额 + 差额金额 + 关联串关母单数 |
| 赛果变化触发自动重算 | 21.2.3:盘口 ID + 盘口名 + 原结算结果 + 新结算结果 + 差额金额 + 影响单关数 + 影响母单数 + 该盘口累计赛果变更次数 N |