Appearance
第十一章 赛果数据录入规则
关盘口径(2026-04-21 生效):关盘来源统一为数据源推送(唯一来源);关盘 = 绝对终态,操盘页与结算详情页均不提供人工开盘入口。
一期调整(2026-04-23 生效):第 11.7 节"录入后的系统行为"中"已结算盘口赛果变化 → 自动重新结算"、第 11.7.3 节"5 分钟聚合窗口"、第 11.0.1 节"已结算盘口赛果变化后的自动重新结算 本期实装"声明一期全部不实装。无论赛事处于待结算还是终态,只要已结算盘口的赛果发生变化(包括 IM 推送新比分或结算人员修正赛果),系统仅在该盘口上标记提示"⚠️ 结算比分已发生变化,请检查盘口赛果",由结算人员主动发起「盘口二次结算」处理;标记仅在执行完盘口二次结算后自动清除(不支持手动关闭)。事件触发类盘口(BT37 / BT159)的赛果变化同样走"仅标记,人工触发"路径。正文规则保留作为二期设计参考。
11.0 录入层级
一期仅赛事级录入(无玩法级特殊录入):
| 层级 | 触发入口 | 录入范围 | 影响盘口 |
|---|---|---|---|
| 赛事级赛果录入(按时段 4 个独立入口) | 上半场赛果录入(上半场类分组顶部,蓝)/ 下半场赛果录入(下半场类分组顶部,青绿)/ 15 分钟段赛果录入(15 分钟段类分组顶部,紫,弹窗含 6 Tab)/ 全场赛果与扩展(全场类分组顶部,绿,弹窗内 3 分区:全场累计扩展 · 加时赛 · 点球大战,各分区独立应用)→ 各自弹窗见第 9 章 9.1 | 按时段分治:半场比分 / 下半场比分 / 各段比分 / 加时 / 点球大战 / 扩展统计 等 | 所有关联盘口(按 11.6 映射表 自动分发到各 BT) |
BT158 反波胆说明:一期 BT158 统一采用赛事级终场比分自动判定(选项结构 5×5 + 其他 = 26 个,与 BT6 取反),无需玩法级特殊录入。详见第 7 章 7.3.3 和 第 12 章 12.8。
关于"玩法级特殊录入"的预留:未来若出现赛事级数据无法完全描述结算条件的极少数玩法,可在此处定义玩法级卡片内嵌录入区;一期暂无此类场景。
11.0.1 本期范围声明
本期实装范围(一期落地):
- 数据源自动拉取比分数据:本地系统从数据源拉取半场比分 / 全场比分 / 进球明细 / 角球 / 红黄牌等原始数据到本地 —— 本期实装
- 数据源同步 / 混合模式录入:结算人员打开赛果录入弹窗时,若数据源已同步对应时段的比分,字段预填(数据源开关 = 开时只读核对;= 关时默认可编辑)—— 本期实装
- 4 弹窗赛果录入分治(上半场 / 下半场 / 15 分钟段 / 全场扩展)+ 全场扩展弹窗内 3 分区(全场累计扩展 · 加时赛 · 点球大战,各分区独立应用按钮)+ 跨弹窗一致性校验 —— 本期实装
- 各时段独立结算:上半场 / 下半场 / 15 分钟段 / 全场扩展各按自身判定时机独立结算,对应盘口立即可结算,不强制依赖全场扩展弹窗完成
- 结算人员手动确认:所有"应用赛果"动作由结算人员主动点击;所有盘口结算由结算人员逐盘口"结算"按钮手动确认 —— 本期实装
- 盘口关盘 → 预填结算结果:盘口关盘 + 所需赛果字段到位后,本地按 BT 级判定规则预填盘口卡片结算结果(未自动确认)—— 本期实装
本期不实装范围(文档保留作为后续迭代设计参考):
- 第 11.1 节"可操盘盘口自动结算(L2 自动确认)":数据源开关 = 开 + 比分到位时由系统自动应用赛果并自动派彩
- 数据源盘口"L1 自动派彩":数据源盘口直接按数据源状态字段自动结算(见第 8 章)
本期实装的自动重结算路径:
- 已结算盘口赛果变化时一律自动重新结算:无论是数据源推送的新比分导致本地重判、或结算人员通过赛果录入弹窗修正比分后赛果改变(须赛事 = 待结算),系统按 第 11.7 节 自动执行二次结算 + 按 第 15.4 节差额矩阵 自动处理派彩差额;赛事非待结算时走提示,由结算人员手动"赛事驳回 → 盘口二次结算"
- 5 分钟聚合窗口、聚合窗口与人工操作的冲突处理:配套本期实装
- 串关母单"自动重算":子单赛果变化触发母单自动差额处理,本期实装
核心区分:
- "首次应用赛果"(从无到有)= 结算人员手动点击"应用赛果",逐盘口确认结算
- "已结算盘口赛果变化后的自动重结算"(赛果从 X 变为 Y,Y ≠ X)= 本期实装,系统自动执行
- "L1 / L2 的首次自动派彩"(关盘+赛果到位时系统直接派彩,无需人工)= 本期不实装,首次结算一律人工确认
11.1 录入模式
本期范围:一期实装全部 3 种录入模式(数据源同步 / 人工录入 / 混合模式)。数据源自动拉取比分数据属于基础数据获取,本期实装;但数据到达后由结算人员手动点击"应用赛果",不做自动应用与自动派彩(见第 11.0.1 节)。
| 模式 | 触发条件 | 录入方式 | 可编辑 | 本期是否实装 |
|---|---|---|---|---|
| 数据源同步 | 数据源开关 = 开 + 数据源已拉取该赛事该时段的比分数据 | 系统预填数据源已拉取的比分数据,页面只读核对;结算人员手动点击"应用赛果"触发后续流程 | 否 | 是 |
| 人工录入 | 数据源开关 = 关 或 数据源尚未提供该字段 | 结算人员手动录入 / 修正字段 → 手动点击"应用赛果" | 是 | 是 |
| 混合模式 | 同一赛事部分字段由数据源提供、部分字段缺失 | 基础字段取数据源值(只读核对),缺失字段由结算人员补充;统一手动点击"应用赛果" | 部分 | 是 |
赛果字段可按阶段分步录入 / 分步同步(半场字段在半场结束后同步 / 录入;全场字段在全场结束后同步 / 录入),无需等待"赛事完赛"这一统一时刻。
可操盘盘口自动结算(本期不实装):以下路径为后续迭代设计参考 —— 数据源开关 = 开且比分数据已到位时,由系统自动触发"应用赛果"并按 BT 级判定规则自动计算 + 自动派彩(L2 自动确认)。一期无论数据源开关状态,"应用赛果"均由结算人员手动点击;系统"应用赛果"后仅预填盘口结算结果,不自动派彩,由结算人员逐盘口"结算"按钮手动确认。数据源盘口 L1 自动派彩的完整定义见第 8 章,本期同样按手动路径处理。
11.2 录入时机与前置条件
赛果录入允许按阶段分步开启。各时段(半场、15 分钟段、全场)的赛果由数据源分别同步或由结算人员分别录入,对应时段的盘口一旦关盘即可走结算流程。
数据源会在完整赛果数据中返回"比赛结束时间"字段,但这只是赛果数据里的一个时间戳,不是业务规则的前置条件——盘口结算只需盘口关盘 + 该盘口所需赛果字段到位即可,不要求先拿到"比赛结束时间"。
11.2.1 前置条件(分层独立)
| 层级 | 前置条件 | 未满足时行为 |
|---|---|---|
| 赛事级赛果录入弹窗(3 个按时段独立弹窗) | 数据源开关 = 开时:对应时段盘口已关盘 或 数据源已拉取该时段比分数据;数据源开关 = 关时:直接可开启(无需数据源前置) | 数据源开关 = 开且条件未满足:对应时段按钮灰置(半场/分段/全场按钮各自启用条件,见 9.1.0) |
| 盘口级结算 | 盘口已关盘 + 该盘口所需赛果字段已确定(数据源同步预填 或 人工录入,两种来源均可) | 盘口卡片标记「开盘中」或「缺少数据」;结算按钮禁用 |
| 赛事级结算赛事 | 该赛事下所有盘口均已结算或已取消 | 「结算赛事」按钮禁用,展示未完成盘口清单 |
本期范围:数据源自动拉取比分属于基础数据获取,一期实装;数据到达后**结算人员手动点击"应用赛果"**触发后续流程,不做自动应用(见第 11.0.1 节)。
三个层级独立判定。各类盘口按自身判定时机独立推进,不要求整场统一等待:
- 全场类 (FT)(BT1 / BT2 / BT3 / BT5 / BT7 / BT8 / BT158 / BT160 / BT161 等;含下半场派生玩法 BT1-2H / BT2-2H / BT6-2H / BT24-30 / BT57 等):全场结束后结算
- 上半场类 (1H)(BT1-1H / BT2-1H / BT6-1H / BT9 半全场):半场结束后结算
- 15 分钟段类(BT48 / BT179 / BT180 15 分钟段):该段结束后结算
- 事件触发类(BT37 第 X 粒进球队伍 / BT159 角球第 X 粒):对应事件发生后即可结算,可能远早于终场
- 比分变动触发类(BT6 波胆赛中判输):比分变化时实时触发结算(只判输不判赢)
下半场玩法归属说明:下半场比分 = FT − 1H 由系统自动推导(见 第 11.2.2.4 节 下半场(2H)派生字段),因此从"判定时机"维度归入全场类(需 FT 齐备)。UI 筛选维度参见 第 6.2 节 盘口筛选工具栏(单独有「下半场 (2H)」筛选入口,方便按下半场玩法集中查看)。
完整判定时机分类与所需赛果字段见第 7 章 7.8.1。
冠军赛事 / 长期盘口(夺冠球队、小组晋级、最佳球员等 EventTypeId = 1)不在本章规则范围,由独立的 冠军赛事结算详情 模块处理(按盘口独立在盘口卡片上选结果,不使用赛果录入弹窗体系)。
11.2.2 弹窗字段归属矩阵(4 弹窗分治 + 全场扩展 3 分区)
核心原则:同一字段只出现在一个弹窗(或分区)里录入,不跨弹窗重复。4 个弹窗按时段分治,全场扩展弹窗内再分 3 个独立应用分区。
11.2.2.1 上半场赛果录入弹窗字段
| 分组 | 字段 | 必填/选填 | 时间区间 |
|---|---|---|---|
| 基础 | 半场比分主 | 必填 | 1-45 + 半场伤停 |
| 基础 | 半场比分客 | 必填 | 同上 |
| 进球详情 | 上半场每粒进球(序号 + 进球队 + 时间 + 球员选填) | 条件必填(有 BT159 / BT37 半场相关依赖) | 1 ≤ t ≤ 45 + 伤停(上限 50) |
| 扩展统计 | 半场主队角球数 / 半场客队角球数 | 条件必填(有半场角球类依赖) | 半场累计 |
| 扩展统计 | 半场首个角球(球队 + 时间) | 条件必填 | 1-45 + 伤停 |
| 扩展统计 | 半场主队黄牌 / 红牌 | 条件必填(有半场牌类依赖) | 半场累计 |
| 扩展统计 | 半场客队黄牌 / 红牌 | 同上 | 半场累计 |
| 扩展统计 | 半场首张牌(球队 + 类型 + 时间) | 条件必填 | 1-45 + 伤停 |
| 特殊事件 | 半场乌龙球 / 半场点球进球(勾选 + 数量) | 选填 | 半场累计 |
影响盘口:BT1-1H / BT2-1H / BT6-1H / BT9 半全场(半场部分)/ 半场角球类 / 半场牌类 / BT159 半场相关 / BT37 半场相关。
11.2.2.2 下半场赛果录入弹窗字段
| 分组 | 字段 | 必填/选填 | 时间区间 |
|---|---|---|---|
| 基础 | 下半场比分主 | 必填(数据源开关 = 开时预填 = 数据源全场 − 半场;结算人员主动核对 / 修正) | 46-90 + 全场伤停 |
| 基础 | 下半场比分客 | 必填 | 同上 |
| 进球详情 | 下半场每粒进球(序号 + 进球队 + 时间 + 球员选填) | 条件必填(有 BT159 / BT37 下半场相关依赖) | 46 ≤ t ≤ 90 + 伤停(上限 100) |
| 扩展统计 | 下半场主队角球数 / 下半场客队角球数 | 条件必填(有下半场角球类依赖) | 下半场累计 |
| 扩展统计 | 下半场首个角球(球队 + 时间) | 条件必填 | 46-90 + 伤停 |
| 扩展统计 | 下半场主队黄牌 / 红牌 | 条件必填(有下半场牌类依赖) | 下半场累计 |
| 扩展统计 | 下半场客队黄牌 / 红牌 | 同上 | 下半场累计 |
| 扩展统计 | 下半场首张牌(球队 + 类型 + 时间) | 条件必填 | 46-90 + 伤停 |
| 特殊事件 | 下半场乌龙球 / 下半场点球进球(勾选 + 数量) | 选填 | 下半场累计 |
影响盘口:BT1-2H / BT2-2H / BT6-2H / BT24-30 / BT57 等下半场派生玩法 / 下半场角球类 / 下半场牌类 / BT159 下半场相关 / BT37 下半场相关。
独立结算优势:本弹窗应用后 2H 类盘口立即可结算,不依赖全场扩展弹窗是否应用。
前置硬约束:本弹窗"打开按钮"在上半场弹窗已应用之后才启用(避免结算人员在无基准时盲填)。未满足时按钮灰置,提示"请先应用上半场赛果"。
11.2.2.3 15 分钟段赛果录入弹窗字段(6 Tab 独立)
| Tab | 段区间 | 字段 | 必填/选填 |
|---|---|---|---|
| 段 1 | 0-15 分钟 | 段内主/客得分 + 段内进球详情 | 必填 |
| 段 2 | 16-30 分钟 | 同上 | 必填 |
| 段 3 | 31-45 分钟 + 半场伤停 | 同上 | 必填 |
| 段 4 | 46-60 分钟 | 同上 | 必填 |
| 段 5 | 61-75 分钟 | 同上 | 必填 |
| 段 6 | 76-90 分钟 + 全场伤停 | 同上 | 必填 |
影响盘口:BT48 / BT179 / BT180 的对应 15 分钟段盘口。
本弹窗只管常规 6 段。加时段(91-120 分钟)不录于本弹窗,改录于全场扩展弹窗的加时赛分区(见 11.2.2.4)。
11.2.2.4 全场赛果与扩展弹窗字段(3 分区,各分区独立应用按钮)
弹窗内分 3 个独立分区,每个分区有独立的"应用"按钮,触发对应盘口结算:
分区 A:全场累计扩展(常规结束后可用)
| 字段 | 必填/选填 | 说明 |
|---|---|---|
| 全场主队得分(只读合计) | 自动 | = 半场主 + 下半场主(两个弹窗都应用后显示) |
| 全场客队得分(只读合计) | 自动 | = 半场客 + 下半场客 |
| 全场角球主/客(只读合计) | 自动 | = 半场角球 + 下半场角球 |
| 全场黄牌主/客(只读合计) | 自动 | = 半场 + 下半场 各队黄牌之和 |
| 全场红牌主/客(只读合计) | 自动 | 同上 |
| 射门主/客 | 选填(无依赖盘口) | 全场累计,独立录入 |
| 射正主/客 | 选填 | 同上 |
| 越位主/客 | 选填 | 同上 |
| 犯规主/客 | 选填 | 同上 |
| 应用按钮 | [应用全场扩展] | 触发 FT 类盘口结算(BT1 / BT2 / BT3 / BT5 / BT6 / BT7 / BT8 / BT158 / BT160 / BT161 等)+ BT9 半全场(全场部分)+ 全场角球类 / 全场牌类 / 射门射正类 |
前置条件:上半场弹窗 + 下半场弹窗均已应用(全场合计字段才有值)。
分区 B:加时赛(赛事进入加时才启用)
| 字段 | 必填/选填 | 时间区间 |
|---|---|---|
| 加时上比分主/客 | 条件必填(赛事进入加时) | 91-105 + 伤停 |
| 加时下比分主/客 | 条件必填 | 106-120 + 伤停 |
| 加时全场比分(只读) | 自动 | = 加时上 + 加时下 |
| 加时段进球详情(序号 + 进球队 + 时间 + 球员选填) | 条件必填(有 BT159/BT37 加时相关依赖) | 91 ≤ t ≤ 126 |
| 加时段角球主/客 | 条件必填(有加时角球类依赖) | 加时累计 |
| 加时段牌主/客(黄/红) | 条件必填(有加时牌类依赖) | 加时累计 |
| 应用按钮 | [应用加时赛] | 触发加时类盘口结算(BT84 / BT85 等加时让球 / 大小 / 独赢)+ 加时角球 / 牌类 |
前置条件:分区 A 已应用(全场比分确定后才能判断"赛事是否进入加时")。
分区 C:点球大战(赛事进入点球大战才启用)
| 字段 | 必填/选填 | 说明 |
|---|---|---|
| 主点球进球数 | 条件必填(进入点球大战) | 整数 |
| 客点球进球数 | 条件必填 | 整数 |
| 晋级方(单选:主 / 客) | 条件必填 | 必须与点球多者一致(校验) |
| 应用按钮 | [应用点球大战] | 触发晋级类盘口结算(杯赛晋级、小组出线等) |
前置条件:分区 B 已应用 且 加时全场平局(否则点球大战不启用)。
独立字段:点球大战比分不计入任何全场 / 加时比分字段,仅用于决定晋级方。
11.2.2.5 关键字段定义
- 半场比分:常规 45 分钟 + 半场伤停的主/客得分
- 下半场比分:46-90 分钟 + 全场伤停的主/客得分(独立录入,不派生)
- 全场比分:= 半场 + 下半场 自动合计(只读展示),不含加时与点球大战
- 加时比分:加时上(91-105' + 伤停)+ 加时下(106-120' + 伤停);加时全场由系统自动合计
- 点球大战比分:加时结束仍平局后独立进行,独立字段,仅用于决定晋级方
- 扩展统计(角球 / 牌)按时段独立录入:半场在上半场弹窗录;下半场在下半场弹窗录;加时段在全场扩展弹窗加时区录;全场累计值由系统自动合计(只读)
- 触发启用:加时分区仅当赛事实际进入加时阶段时启用;点球大战分区仅当赛事进入点球大战阶段时启用;常规 90 分钟结束的赛事加时/点球分区保持禁用,对应盘口按"未进入"规则处理(走水/取消视盘口规则而定)
11.2.3 操作流程
各时段赛果分阶段可得(半场结束、全场结束、15 分钟段结束等)
↓
数据源自动拉取该阶段字段(数据源开关 = 开时)或 结算人员手动打开「赛果录入」弹窗
↓
结算人员打开对应时段的赛果录入弹窗(4 弹窗择一:上半场 / 下半场 / 15 分钟段 / 全场扩展)
· 数据源同步模式:已拉取的字段预填(只读核对)
· 人工录入模式:所有字段可编辑
· 混合模式:数据源已拉取字段只读,缺失字段可编辑
↓
结算人员核对 / 补充 / 修正字段
↓
系统实时校验(弹窗内 + 跨弹窗一致性,见 11.4 节)
↓ 校验通过
结算人员点击「应用赛果」(本期统一手动点击,不自动触发)
↓
系统对"所需赛果字段已确定 + 已关盘"的盘口按 BT 级判定规则**预填**结算结果到盘口卡片
↓
结算人员逐盘口确认(点击盘口卡片的「结算」按钮,本期统一手动确认)
↓
所有盘口结算完成后 → 结算人员点击「结算赛事」本期范围:数据源自动拉取比分与字段预填属于基础数据能力,本期实装。首次结算(关盘 + 赛果到位首次应用赛果)由结算人员手动触发("应用赛果"、"L2 首次确认派彩"均手动);已结算盘口赛果变化后的自动重新结算(赛果从 X 变为 Y,赛事 = 待结算)本期实装,系统自动触发二次结算 + 差额处理。见第 11.0.1 节。
11.2.4 IM 推送比分数据拉取与兜底
本期实装:数据源自动拉取比分数据属于基础数据能力,本期实装;本节下述规则(拉取时机、拉取中 / 失败状态、混合模式、自收结算兜底)本期生效。唯一差异是**"自收结算兜底"不自动派彩**:本地按已拉取比分数据 + 注单下注时比分按规则计算出结算结果后仅做预填,由结算人员手动确认派彩(见第 11.0.1 节)。
| 规则 | 说明 |
|---|---|
| 拉取时机 | IM 推送比分数据后即可拉取;支持分阶段(半场数据、分段数据可先于全场提供) |
| 已拉取 | 允许打开赛果录入弹窗,并开放后续结算 |
| 拉取中/失败 | 不允许录入和结算,仅展示等待/重试状态 |
| 盘口终态缺失 | 已拉到比分数据但 IM 未推送盘口终态时,允许人工补录并由本地系统按 BT 级判定规则计算 |
| 混合模式 | 基础比分以已拉取赛果为准,缺失字段允许人工补充 |
| 自收结算兜底 | IM 盘口终态推送未送达时,本地系统根据已拉取比分数据 + 注单下注时比分按规则计算结算结果(按 12.0.2 下注后比分口径) |
11.3 录入数据分层
必填/选填 的判定口径:
- "必填" = 该赛事必须录入,未录入时相关结算全部阻塞
- "条件必填(有依赖盘口时必填)" = 本赛事存在依赖该字段的盘口时必须录入(否则盘口结算按钮禁用、展示"缺少数据",见 第 11.5 节);本赛事不存在依赖盘口时可跳过
- "条件必填(赛事进入加时/点球大战)" = 赛事实际进入对应阶段时必须录入;否则该字段不启用
- "自动" = 系统自动计算,结算人员不操作
| 层级 | 数据项 | 必填/选填 | 输入控件 | 依赖玩法 | 所属弹窗 / 分区 |
|---|---|---|---|---|---|
| 基础层 | 半场比分(主/客) | 必填 | 两个整数输入框 | 1H 类 + BT9 半场部分 | 上半场弹窗 |
| 基础层 | 下半场比分(主/客) | 必填(数据源开关 = 开时预填 = 全场 − 半场) | 两个整数输入框 | 2H 类全部 | 下半场弹窗 |
| 基础层 | 全场比分(主/客,只读合计 = 半场 + 下半场) | 自动 | 只读 | FT 类全部 | 全场扩展弹窗 · 分区 A |
| 基础层 | 总进球 / 单双结果 | 自动计算 | 只读 | BT7 / BT5 | 全场扩展弹窗 · 分区 A(派生) |
| 进球层 | 上半场进球详情(时间 ≤ 45'+ 伤停) | 条件必填(有 BT159 / BT37 依赖时) | 动态行表格 | BT159 / BT37 半场相关 | 上半场弹窗 |
| 进球层 | 下半场进球详情(45'< 时间 ≤ 90'+ 伤停) | 条件必填(有依赖时) | 动态行表格 | BT159 / BT37 下半场相关 | 下半场弹窗 |
| 进球层 | 加时段进球详情(90'< 时间 ≤ 120'+ 伤停) | 条件必填(进入加时且有依赖时) | 动态行表格 | 加时类、BT159/BT37 加时相关 | 全场扩展弹窗 · 分区 B(加时赛) |
| 分段层 | 15 分钟段内比分(常规 6 段 Tab 各自独立) | 必填 | 两个整数输入框 | BT48 / BT179 / BT180 | 15 分钟段弹窗(对应 Tab) |
| 分段层 | 段内进球详情 | 条件必填(该段有依赖时) | 动态行表格 | BT159 段相关 | 15 分钟段弹窗(对应 Tab) |
| 扩展层 | 半场角球:主/客角球数 + 首个角球(球队+时间) | 条件必填(有半场角球类依赖时) | 整数输入 + 下拉 | 半场角球类 | 上半场弹窗 |
| 扩展层 | 半场红黄牌:主/客黄牌/红牌 + 首张牌(球队+类型+时间) | 条件必填(有半场牌类依赖时) | 整数输入 + 下拉 | 半场牌类 | 上半场弹窗 |
| 扩展层 | 下半场角球:主/客角球数 + 首个角球 | 条件必填(有下半场角球类依赖时) | 整数输入 + 下拉 | 下半场角球类 | 下半场弹窗 |
| 扩展层 | 下半场红黄牌:主/客黄牌/红牌 + 首张牌 | 条件必填(有下半场牌类依赖时) | 整数输入 + 下拉 | 下半场牌类 | 下半场弹窗 |
| 扩展层 | 全场累计角球 / 黄牌 / 红牌(只读合计) | 自动 | 只读 | 全场角球类 / 全场牌类 | 全场扩展弹窗 · 分区 A |
| 扩展层 | 加时段角球:主/客 | 条件必填(有加时角球类依赖时) | 整数输入 | 加时角球类 | 全场扩展弹窗 · 分区 B |
| 扩展层 | 加时段红黄牌:主/客 | 条件必填(有加时牌类依赖时) | 整数输入 | 加时牌类 | 全场扩展弹窗 · 分区 B |
| 扩展层 | 射门 / 射正 / 越位 / 犯规(主/客,全场累计) | 选填(无依赖盘口) | 整数输入 | — | 全场扩展弹窗 · 分区 A |
| 特殊层 | 半场乌龙球 / 半场点球进球(勾选 + 数量) | 选填 | 勾选 + 整数 | — | 上半场弹窗 |
| 特殊层 | 下半场乌龙球 / 下半场点球进球(勾选 + 数量) | 选填 | 勾选 + 整数 | — | 下半场弹窗 |
| 基础层 | 加时上比分(主/客) | 条件必填(赛事进入加时) | 两个整数输入框 | 加时类玩法 | 全场扩展弹窗 · 分区 B |
| 基础层 | 加时下比分(主/客) | 条件必填(赛事进入加时) | 两个整数输入框 | 加时类玩法 | 全场扩展弹窗 · 分区 B |
| 基础层 | 加时全场比分(自动合计) | 自动 | 只读 | 加时类玩法 | 全场扩展弹窗 · 分区 B |
| 基础层 | 点球大战比分(主/客进球数) | 条件必填(赛事进入点球大战) | 两个整数输入框 | 点球大战 / 晋级类玩法 | 全场扩展弹窗 · 分区 C |
| 基础层 | 点球大战晋级方 | 条件必填(赛事进入点球大战) | 单选:主 / 客 | 晋级类玩法 | 全场扩展弹窗 · 分区 C |
11.4 校验规则(按弹窗分治)
校验在录入过程中实时执行。校验失败时,对应输入框红色高亮 + 下方展示提示文案,当前弹窗的「应用赛果」按钮禁用。
11.4.1 半场赛果录入弹窗内校验
| 校验项 | 规则 | 提示文案 |
|---|---|---|
| 半场比分非负 | 半场主/客 ≥ 0 | 「比分不能为负数」 |
| 仅支持整数 | 半场比分为整数 | 「请输入整数」 |
| 必填 | 半场主/客不可为空 | 「请输入半场比分」 |
| 上半场进球归属一致 | 上半场进球详情行数 = 半场总进球(主+客) | 「上半场进球详情数量与半场比分不一致,当前 N 条,应为 M 条」 |
| 上半场主队归属 | 上半场主队进球行数 = 半场主队比分 | 「上半场主队进球归属数量与比分不一致」 |
| 上半场客队归属 | 上半场客队进球行数 = 半场客队比分 | 「上半场客队进球归属数量与比分不一致」 |
| 进球队必选 | 每行必须选择进球球队 | 「请选择第 N 粒进球的进球球队」 |
| 上半场进球时间范围 | 1 ≤ 时间 ≤ 45 + 伤停(上限 50) | 「上半场进球时间必须在 1-50 分钟之间」 |
| 进球时间顺序 | 后一粒进球时间 ≥ 前一粒 | 「进球时间顺序不正确,第 N 粒进球应晚于第 N-1 粒」 |
11.4.2 下半场赛果录入弹窗内校验
| 校验项 | 规则 | 提示文案 |
|---|---|---|
| 下半场比分非负 | 下半场主/客 ≥ 0 | 「比分不能为负数」 |
| 仅支持整数 | 下半场比分为整数 | 「请输入整数」 |
| 必填 | 下半场主/客不可为空 | 「请输入下半场比分」 |
| 上半场已应用(前置硬约束) | 打开本弹窗前必须上半场弹窗已应用 | 「请先录入并应用上半场赛果」 |
| 下半场进球归属一致 | 下半场进球详情行数 = 下半场总进球(下半场主 + 下半场客) | 「下半场进球详情数量与下半场比分不一致,当前 N 条,应为 M 条」 |
| 下半场主队归属 | 下半场主队进球行数 = 下半场主队比分 | 「下半场主队进球归属数量与比分不一致」 |
| 下半场客队归属 | 下半场客队进球行数 = 下半场客队比分 | 「下半场客队进球归属数量与比分不一致」 |
| 进球队必选 | 每行必须选择进球球队 | 「请选择第 N 粒进球的进球球队」 |
| 下半场进球时间范围 | 46 ≤ 时间 ≤ 90 + 伤停(上限 100) | 「下半场进球时间必须在 46-100 分钟之间」 |
| 进球时间顺序 | 后一粒进球时间 ≥ 前一粒 | 「进球时间顺序不正确」 |
| 下半场扩展统计非负 | 下半场角球/黄牌/红牌 ≥ 0 | 「数值不能为负数」 |
| 下半场扩展统计整数 | 不支持小数 | 「请输入整数」 |
| 下半场首个角球时间范围 | 46 ≤ 时间 ≤ 90 + 伤停 | 「角球时间必须在 46-100 分钟之间」 |
| 下半场首张牌时间范围 | 46 ≤ 时间 ≤ 90 + 伤停 | 「牌时间必须在 46-100 分钟之间」 |
11.4.3 15 分钟段赛果录入弹窗内校验(每 Tab 独立)
| 校验项 | 规则 | 提示文案 |
|---|---|---|
| 段比分非负 | 每段主/客 ≥ 0 | 「段比分不能为负数」 |
| 段比分整数 | 不支持小数 | 「请输入整数」 |
| 段内进球时间范围 | 进球时间落在该段起止区间内 | 「该段进球时间必须在 X-Y 分钟之间」 |
| 段内进球归属一致 | 行数 = 段内主客得分合计 | 「段内进球数量与段比分不一致」 |
| 段内进球主客归属 | 主队进球行数 = 段内主队得分 | 「主队段内进球归属数量与比分不一致」 |
| 进球队必选 | 每行必须选择进球球队 | 「请选择该段第 N 粒进球的进球球队」 |
每个 Tab 独立校验、独立应用;Tab 间不互相阻塞(段 A 未应用不影响段 B 可应用)。
11.4.4 全场赛果与扩展弹窗内校验(按 A / B / C 分区)
弹窗内 3 个分区各自独立校验,对应独立应用按钮。
11.4.4.A 分区 A:全场累计扩展
| 校验项 | 规则 | 提示文案 |
|---|---|---|
| 上半场 + 下半场已应用(前置硬约束) | 打开本分区前上半场 + 下半场两弹窗必须均已应用 | 「请先录入并应用上半场 + 下半场赛果」 |
| 扩展统计非负 | 射门 / 射正 / 越位 / 犯规 ≥ 0 | 「数值不能为负数」 |
| 扩展统计整数 | 不支持小数 | 「请输入整数」 |
| 合计值校验 | 全场比分合计 = 半场 + 下半场;全场角球合计 = 半场 + 下半场;全场牌合计 = 半场 + 下半场 | 系统自动计算展示,校验一致 |
11.4.4.B 分区 B:加时赛(赛事进入加时才启用)
| 校验项 | 规则 | 提示文案 |
|---|---|---|
| 分区 A 已应用(前置硬约束) | 打开本分区前分区 A 必须已应用 | 「请先应用全场扩展」 |
| 赛事进入加时(前置) | 全场合计比分平局 + 业务规则允许加时(杯赛 / 淘汰赛) | 「赛事未进入加时,本分区不可用」 |
| 加时段非负 | 加时上 / 加时下 ≥ 0 | 「加时比分不能为负数」 |
| 加时段整数 | 加时上 / 加时下为整数 | 「请输入整数」 |
| 加时全场自动合计 | 加时全场 = 加时上 + 加时下 | 系统自动计算,只读 |
| 加时段进球归属一致 | 加时进球详情行数 = 加时全场总进球(主+客) | 「加时进球详情数量与比分不一致」 |
| 加时进球时间范围 | 91 ≤ 时间 ≤ 120 + 伤停(上限 126) | 「加时进球时间必须在 91-126 分钟之间」 |
| 加时段扩展非负 | 加时段角球 / 牌 ≥ 0 | 「数值不能为负数」 |
11.4.4.C 分区 C:点球大战(赛事进入点球大战才启用)
| 校验项 | 规则 | 提示文案 |
|---|---|---|
| 分区 B 已应用(前置硬约束) | 打开本分区前分区 B 必须已应用 | 「请先应用加时赛」 |
| 赛事进入点球大战(前置) | 加时后仍平局 | 「加时未平局,本分区不可用」 |
| 点球大战非负 | 主 / 客点球进球数 ≥ 0 | 「点球大战比分不能为负数」 |
| 点球大战必分胜负 | 主点球数 ≠ 客点球数 | 「点球大战必须分出胜负」 |
| 晋级方一致性 | 点球数较多的一方 = 选中晋级方 | 「晋级方与点球比分不一致」 |
11.4.5 跨弹窗一致性校验(完整清单,阻塞式)
触发时机:弹窗 / 分区应用赛果时。任一校验失败,阻塞当前应用按钮,不允许矛盾赛果进入系统。
| 跨弹窗校验 | 触发方 | 规则 | 失败提示 |
|---|---|---|---|
| 上 + 下 合计非负校验 | 下半场应用时 | 下半场主 ≥ 0 且 下半场客 ≥ 0 | 「下半场比分不能为负」 |
| 上 + 下 = 数据源全场比分(核对) | 下半场应用时(若数据源已推送全场比分) | 半场主 + 下半场主 = 数据源全场主;客队同理 | 「上半场 + 下半场 合计 X:Y 与数据源全场 A:B 不一致,请核对」 |
| 全场合计 ≥ 半场 | 自动(分区 A 合计值展示时) | 合计值约束(主客各自 ≥ 半场) | 合计派生,天然满足 |
| 段 1+2+3 = 半场 | 第 3 段应用 / 上半场应用(互相触发) | 段 1+2+3 主 = 半场主 · 段 1+2+3 客 = 半场客 | 「段 1-3 累计 A:B 与半场比分 X:Y 不一致」 |
| 段 4+5+6 = 下半场 | 第 6 段应用 / 下半场应用(互相触发) | 段 4+5+6 主 = 下半场主 · 段 4+5+6 客 = 下半场客 | 「段 4-6 累计 A:B 与下半场比分 X:Y 不一致」 |
| 段 1-6 累计 = 全场合计 | 任一段 / 分区 A 应用时 | 所有段累计 = 半场 + 下半场 | 「6 段累计 A:B 与全场合计 X:Y 不一致」 |
| 段累计单调不减 | 每段 Tab 应用时 | Σ(段 1-N) 主客累计随 N 单调不减 | 「该段累计比分小于前一段」 |
| 半场角球 + 下半场角球 = 全场合计角球 | 分区 A 应用时 | 半场角球 + 下半场角球 = 合计值(自动派生,校验一致) | 自动派生天然一致;若有加时段角球 → 合计 = 半场 + 下半场 + 加时段 |
| 半场牌 + 下半场牌 = 全场合计牌 | 同上 | 同上 | 同上 |
| 进球详情时间分布一致 | 分区 A 应用时 | 上半场进球数(上半场弹窗)+ 下半场进球数(下半场弹窗)= 全场合计总进球 | 「进球详情总数与全场比分不一致」 |
| 进球详情归属与段一致 | 15 分钟段应用时(若上/下半场已应用) | 段 1-3 进球归属 = 上半场进球详情;段 4-6 进球归属 = 下半场进球详情 | 「段内进球与上/下半场进球明细不一致」 |
| 加时下 ≥ 加时上(累计) | 分区 B 应用时 | 加时下累计 ≥ 加时上 | 「加时下比分应大于等于加时上」 |
| 加时段进球数 = 加时全场总进球 | 分区 B 应用时 | 加时进球详情行数 = 加时全场主 + 客 | 「加时进球详情数量与加时比分不一致」 |
阻塞行为:
- 校验失败时,当前应用按钮所在的弹窗 / 分区顶部展示红色横幅提示 + 定位到失败字段高亮
- 对应的「应用」按钮禁用
- 不允许绕过(即使结算人员坚持,也需先修正源弹窗或调整本弹窗)
修正路径:
- 若上半场已应用且下半场录入与其合计矛盾 → 结算人员须先判断哪边正确
- 若上半场错 → 需先对 1H 类已结算盘口执行二次结算并重录上半场
- 若下半场录入错 → 当前弹窗内直接修正
- 若下半场已应用且上半场录入与其矛盾(反向校验)→ 同上
- 全场扩展分区与上/下半场不一致 → 修正上/下半场或调整全场扩展字段
11.4.6 校验时机与行为
| 规则 | 说明 |
|---|---|
| 实时校验 | 输入过程中实时校验,输入框失去焦点时触发 |
| 红色高亮 | 校验失败的输入框边框变红 |
| 提示文案 | 输入框下方展示红色提示文案 |
| 按钮禁用 | 任一校验失败时,当前弹窗 / 分区的「应用」按钮禁用 |
| 多条同时失败 | 所有失败项同时高亮并展示提示 |
| 修正后自动恢复 | 修正后校验通过,红色高亮消失,按钮恢复可用 |
| 跨弹窗校验触发时机 | 仅在应用按钮点击时校验(不在输入过程中做跨弹窗比对,避免过度打扰录入) |
| 分区应用按钮独立 | 全场扩展弹窗内分区 A / B / C 各有独立应用按钮;分区之间按前置硬约束依次启用(A → B → C) |
11.5 数据缺失时的盘口处理(按弹窗分治)
当某 BT 类型所需的赛果数据未录入时,该盘口不可结算:
| 场景 | 受影响盘口 | 盘口卡片表现 | 提示文案 |
|---|---|---|---|
| 上半场弹窗未应用 | BT1-1H / BT2-1H / BT6-1H / BT9 半全场(半场部分) | 橙色「缺少数据」标记,结算按钮禁用 | 「请先应用上半场赛果录入」 |
| 下半场弹窗未应用 | 2H 类全部(BT1-2H / BT2-2H / BT6-2H / BT24-30 / BT57 等) | 同上 | 「请先应用下半场赛果录入」 |
| 上半场 + 下半场任一未应用 | 全场扩展弹窗分区 A 不可打开 → 影响 FT 类全部(BT1 / BT2 / BT3 / BT5 / BT6 / BT7 / BT8 / BT158 / BT160 / BT161 等)+ BT9 半全场(全场部分) | 同上 | 「请先应用上半场 + 下半场赛果」 |
| 全场扩展弹窗 · 分区 A 未应用 | FT 类全部 + 全场角球类 / 全场牌类 / 射门射正类 | 同上 | 「请先应用全场扩展」 |
| 全场扩展弹窗 · 分区 B 未应用(赛事进入加时时) | 加时类玩法(BT84 / BT85 等加时让球 / 大小 / 独赢)+ 加时角球 / 牌类 | 同上 | 「请先应用加时赛」 |
| 全场扩展弹窗 · 分区 C 未应用(赛事进入点球大战时) | 晋级类玩法(杯赛晋级 / 小组出线等) | 同上 | 「请先应用点球大战」 |
| 15 分钟段某 Tab 未应用 | 对应段 BT48 / BT179 / BT180 | 同上 | 「请先应用第 X 段赛果录入」 |
| 上半场进球详情未录入 | BT159 半场相关 / BT37 半场相关 | 同上 | 「请先在上半场赛果录入弹窗录入进球详情」 |
| 下半场进球详情未录入 | BT159 下半场相关 / BT37 下半场相关 | 同上 | 「请先在下半场赛果录入弹窗录入进球详情」 |
| 数据源推送的进球明细字段缺失或归属不明(如仅推送总进球数,未推送每粒进球归属球队) | BT37 / BT159 事件触发类盘口 | 盘口卡片标记「进球明细缺失」,橙色提示 | 「数据源未推送进球归属明细,请结算人员人工补录每粒进球的归属球队与时间」 |
| 数据源推送的角球明细字段缺失(如仅推送总角球数,未推送每粒角球归属 / 时间) | BT159 角球相关盘口 | 盘口卡片标记「角球明细缺失」,橙色提示 | 「数据源未推送角球归属明细,请结算人员人工补录」 |
| 加时段进球详情未录入 | BT159 加时相关 / BT37 加时相关 | 同上 | 「请先在全场扩展弹窗 · 加时赛分区录入进球详情」 |
| 段内进球详情未录入 | BT159 段相关 | 同上 | 「请先在对应 15 分钟段 Tab 录入进球详情」 |
| 半场角球未录入 | 半场角球类盘口 | 同上 | 「请先在上半场赛果录入弹窗录入角球统计」 |
| 下半场角球未录入 | 下半场角球类盘口 | 同上 | 「请先在下半场赛果录入弹窗录入角球统计」 |
| 半场红黄牌未录入 | 半场牌类盘口 | 同上 | 「请先在上半场赛果录入弹窗录入红黄牌统计」 |
| 下半场红黄牌未录入 | 下半场牌类盘口 | 同上 | 「请先在下半场赛果录入弹窗录入红黄牌统计」 |
| 加时比分未录入(赛事进入加时) | 加时类玩法 | 同上 | 「请先在全场扩展弹窗 · 加时赛分区录入加时比分」 |
| 点球大战未录入(赛事进入点球大战) | 晋级类玩法 | 同上 | 「请先在全场扩展弹窗 · 点球大战分区录入」 |
缺少数据的盘口不影响其他盘口的结算操作。
11.6 赛果数据 → 盘口映射表
录入每项赛果数据后,系统自动计算以下盘口的结算结果。开发必须按此映射实现。
全场比分(主 X : 客 Y)
| 影响的盘口 | 判定依据 |
|---|---|
| BT1 全场让球 | 净差值 = X - Y + 盘口线 |
| BT2 全场大小 | 净差值 = (X+Y) - 盘口线 |
| BT3 全场独赢 | X vs Y 直接比较 |
| BT5 全场单双 | (X+Y) 奇偶 |
| BT6 全场波胆 | 精确匹配 X:Y |
| BT7 总进球 | X+Y 匹配选项 |
| BT8 双重机会 | X vs Y → 映射 1X/12/X2 |
| BT18 双方进球 | X ≥ 1 且 Y ≥ 1 |
| BT22 主队零失球 | Y = 0 |
| BT23 客队零失球 | X = 0 |
| BT158 反波胆 | X:Y ≠ 选项比分 |
| BT160 主队大小 | 净差值 = X - 盘口线 |
| BT161 客队大小 | 净差值 = Y - 盘口线 |
半场比分(主 A : 客 B)
| 影响的盘口 | 判定依据 |
|---|---|
| BT1-1H 上半场让球 | 净差值 = A - B + 盘口线 |
| BT2-1H 上半场大小 | 净差值 = (A+B) - 盘口线 |
| BT6-1H 上半场波胆 | 精确匹配 A:B |
| BT9 半全场 | 半场结果(A vs B) + 全场结果(X vs Y) 组合 |
系统自动计算 2H 下半场
| 自动计算 | 公式 | 影响的盘口 |
|---|---|---|
| 2H 主队 | X - A | BT1-2H、BT2-2H、BT6-2H |
| 2H 客队 | Y - B | 同上 |
15分钟段比分
| 影响的盘口 | 判定依据 |
|---|---|
| BT48 15分钟1X2 | 该段主客比分差 |
| BT179 15分钟让球 | 段内净差值 = 段内主队 - 段内客队 + 盘口线 |
| BT180 15分钟大小 | 段内净差值 = 段内总进球 - 盘口线 |
进球详情
| 影响的盘口 | 判定依据 |
|---|---|
| BT159 第X粒入球球队 | 第X粒进球由哪队打入 |
扩展统计
| 数据 | 影响的盘口 |
|---|---|
| 角球数(主/客) | 角球让球、角球大小(数据源盘口) |
| 红黄牌数 | 红牌大小、黄牌大小(数据源盘口) |
11.7 录入后的系统行为
结算人员完成某弹窗录入并点"应用赛果"后:
| 步骤 | 说明 |
|---|---|
| 1 | 保存本次弹窗的赛果数据 |
| 2 | 系统对比本弹窗字段是否发生变化(与上次应用值比较) |
| 3 | 按弹窗 / 分区独立判断影响范围:上半场弹窗变化 → 影响 1H 类 + BT9 半场部分 + 半场角球/牌类 + BT159/BT37 半场相关;下半场弹窗变化 → 影响 2H 类全部 + 下半场角球/牌类 + BT159/BT37 下半场相关;15 分钟段 Tab 变化 → 影响该段对应 BT;全场扩展分区 A → FT 类全部 + BT9 全场部分 + 全场角球/牌累计类;分区 B → 加时类 + 加时角球/牌;分区 C → 晋级类 |
| 4 | 仅对受影响且已关盘的盘口,根据映射表(11.6)重新计算结算结果 |
| 4a | 含多组基准分的盘口(详见第 7.3.6 节):系统按组独立推导基准分(每组自取其下注时比分代入终场比分 / 半场比分 / 分段比分公式),分别预填每组结果;多组弹窗 UX 走 §7.3.6.4 首次结算弹窗分区,结算人员按组分别核对 / 调整 / 确认 |
| 5 | 赛果未变化或本弹窗未受影响的盘口不重新计算,保持原结算结果 |
| 6 | 变化的盘口卡片展示新的预填结算结果(结算人员可修改);多组盘口按组分区展示各组的预填结果 |
| 7 | 结算人员逐盘口确认(点击「结算」按钮执行);多组盘口需按组分别确认(可一次性全部选定后合并提交,也可逐组提交) |
| 8 | 本次应用后的赛果数据锁定,本弹窗不可再次应用;如需修改需对受影响的已结算盘口先执行二次结算(多组盘口支持"全部组统一二次结算"或"仅二次结算某一组",见第 9.4.3 节) |
自动结算触发规则
本期实装(已结算盘口赛果变化→自动重新结算):本节规则本期实装。核心口径:首次结算走人工(结算人员逐盘口确认);已结算盘口赛果变化后的重算走自动(系统按新赛果自动执行二次结算 + 差额处理)。L1 / L2 的首次自动派彩本期不实装。
| 规则 | 说明 |
|---|---|
| 触发条件 | 赛果数据发生变化(比分变了、进球详情变了等) |
| 不触发 | 赛果数据未变化时,不重新计算,不覆盖已有结算结果 |
| 已关盘盘口(赛事待结算,盘口待结算) | 计算结算结果,预填到盘口卡片 |
| 已结算盘口(赛事待结算) | 盘口赛果改变时,系统自动重新计算并执行二次结算(等效于自动执行"二次结算 → 重算 → 再次结算"的合并操作),无需结算人员手动干预;按 15.4 差额矩阵自动处理派彩差额。若赛果未变(例如重选相同结果),则不触发任何注单级联 |
| 已结算盘口(赛事已结算 / 已取消 / 异常) | 不触发自动二次结算。仅在赛果录入弹窗顶部提示"比分已更新 / 进球明细已更新,如需修正请先执行赛事驳回"。结算人员需手动:1) 赛事驳回 → 2) 盘口二次结算 → 3) 重录赛果 → 4) 重新确认。避免赛事终态被系统自动绕过 |
| 开盘中盘口 | 不计算结算结果(BT6 波胆比分变动触发结算除外) |
自动重结算聚合窗口(资金安全保护)
| 规则项 | 说明 |
|---|---|
| 聚合窗口时长 | 5 分钟(系统级写死,对齐 第 16.4b 节 VAR 观察窗口 默认值) |
| 触发场景 | 同一盘口在 5 分钟内被 IM 多次推送比分变化(如 VAR 反复改判、IM 网络抖动重发、数据源短时多次纠错),本地系统按新比分重新判定导致结算结果连续变动 |
| 聚合行为 | 系统仅按窗口期内最后一次赛果计算一次差额处理;中间态不触发余额操作 |
| 窗口期满触发时机 | 窗口内最后一次赛果变化后再等待 5 分钟无新变化 → 统一执行差额处理 |
| 窗口内新赛果 | 若窗口未满又收到新赛果 → 重置 5 分钟计时器,按最新赛果覆盖 |
| 结算人员告警 | 窗口期内每次赛果变化均在赛果录入弹窗实时提示"比分已更新"(与原 11.8 提示机制一致) |
| 审计日志 | 每次窗口期结束生成一条自动重结算日志:原结果 → 最终结果 → 差额 → 窗口内累计变化次数 N |
聚合窗口适用范围:仅作用于"已结算盘口 + 赛事待结算"场景(即上表第 4 行)。其他场景(如已关盘待结算盘口的赛果首次应用)不适用聚合窗口,按实时逻辑处理。
设计意图:降低 IM 短时间多次推送造成的用户余额抖动风险;保持结算人员对异常推送的感知(通过实时告警);单次差额不设阈值(运营主管复核机制暂不引入,留后续优化)。
聚合窗口与人工操作的冲突处理
聚合窗口期内,结算人员若主动对该盘口执行二次结算,按"人工优先"原则处理:
| 冲突场景 | 系统行为 |
|---|---|
| 聚合窗口期内,结算人员点击"二次结算"按钮 | ① 弹出二次确认弹窗,展示窗口剩余时间 + 窗口内 IM 已累计推送次数 + 最近一次 IM 比分 ② 结算人员确认后,立即终止当前聚合窗口 ③ 窗口期内 IM 累计推送的中间态比分全部丢弃(不执行差额处理) ④ 盘口状态回到"关盘",按正常二次结算流程走(重选结果) ⑤ 记录审计日志:终止窗口时刻、丢弃的 IM 推送次数、丢弃的比分序列、操作人 |
| 人工二次结算完成后 IM 继续推送新比分 | 走 第 11.7 节 自动结算触发规则: • 赛事仍待结算 → 进入新的 5 分钟聚合窗口(与之前窗口独立) • 赛事已结算 / 已取消 / 异常 → 仅告警,不动数据 |
| 聚合窗口期内结算人员打开赛果录入弹窗(未点二次结算) | 不终止窗口;弹窗顶部提示"本盘口处于自动重结算聚合窗口中(剩余 X 分 Y 秒),请等待窗口结束再操作" |
| 聚合窗口期内多位结算人员同时点击二次结算 | 按 第 15.6c 节 操作版本校验:先点击者成功并终止窗口;后点击者返回"该盘口已被他人操作,请刷新" |
| 聚合窗口期内赛事被点击"结算赛事"(赛事级确认) | 窗口立即终止,之后的 IM 推送走"已结算 / 仅告警"规则 |
二次确认弹窗示例:
┌─ ⚠️ 聚合窗口中的盘口 ─────────────────────────┐
│ │
│ 盘口:BT1 全场让球 -0.5 │
│ │
│ 系统检测到此盘口正处于自动重结算聚合窗口: │
│ • 窗口剩余:2 分 34 秒 │
│ • 窗口内已累计 IM 推送:3 次 │
│ • 最近一次 IM 赛果:终场 2:1 │
│ │
│ 继续人工二次结算将: │
│ ✕ 立即终止聚合窗口 │
│ ✕ 丢弃窗口内 3 次 IM 推送(不执行差额处理) │
│ ✓ 以您的人工操作结果为准 │
│ │
│ [返回,等待窗口结束] [确认继续二次结算] │
└────────────────────────────────────────────────┘审计日志字段(对齐 第 21.2 节 操作类型清单):
| 字段 | 说明 |
|---|---|
| 操作类型 | 聚合窗口终止 |
| 触发时刻 | 结算人员点击"确认继续二次结算"的本地时刻 |
| 窗口已进行时长 | 从窗口开启到终止的秒数 |
| 丢弃的 IM 推送次数 | 窗口期内累计推送次数 |
| 丢弃的赛果摘要 | 窗口期内每次 IM 赛果的简要描述(如"1:0 → 2:0 → 2:1") |
| 操作人 | 结算人员姓名 |
| 后续人工操作 | 关联的盘口二次结算日志 ID |
事件触发类盘口(BT37 / BT159)的特殊性:当进球明细 / 角球明细发生变化时(如 VAR 取消第 N 粒进球),数据源通过增量推送更新明细。系统按上述"自动结算触发规则"处理:赛事待结算时自动重算;赛事已结算 / 已取消 / 异常时仅提示,不自动重算。保持与普通盘口一致的前置约束。
分段规则跨章节对齐:本节"已结算盘口"分赛事状态的处理规则与 第 19.3.3 节 数据源恢复后赛果同步 保持一致。两节从不同视角(录入操作 vs 数据源恢复)描述同一业务规则:
- 赛事 = 待结算 + 盘口已结算 → 系统自动重新计算执行二次结算 + 差额处理(11.7 详述、19.3.3 引用)
- 赛事 = 已结算 / 已取消 / 异常 + 盘口已结算 → 不触发自动二次结算,仅在赛果录入弹窗提示"比分已更新,如需修正请先执行赛事驳回"
业务规则以 11.7 为主;页面提示按 19.3.3 约束呈现。
关于"关盘"操作
| 场景 | 行为 |
|---|---|
| 盘口已关盘 | 不会再次执行关盘操作,仅应用赛果数据并计算结算结果 |
| 盘口仍在开盘 | 不自动关盘,不计算结算结果。盘口需通过数据源 IM 推送关盘后,才进入可结算状态 |
11.8 边界场景与异常处理
前置说明:以下「比分拉取中」「拉取失败」相关场景仅在数据源开关 = 开时成立;数据源开关 = 关时,赛果录入略过拉取(无请求、无 loading 态、无拉取中提示),所有字段默认可编辑。
| 场景 | 适用条件 | 系统行为 | 提示文案 |
|---|---|---|---|
| 打开赛果录入时系统正在拉取比分 | 数据源开关 = 开 | 弹窗展示 loading 覆盖层 + 所有比分输入框 disabled;拉取完成后自动回填 | 「⏳ 比分拉取中,请稍候……」 |
| 比分拉取超时(如 > 10s 未返回) | 数据源开关 = 开 | 输入框保持 disabled;展示重试按钮 | 「比分拉取超时,请点击重试」 |
| 比分拉取失败(网络/IM 异常) | 数据源开关 = 开 | 输入框保持 disabled;展示重试按钮 + 错误码 | 「比分拉取失败(IM-503),请重试或联系运维」 |
| 数据源开关 = 关时打开赛果录入 | 数据源开关 = 关 | 略过拉取;所有比分输入框直接可编辑(人工录入模式) | — |
| 比分输入为空后点击应用 | 所有模式 | 按钮禁用 | 「请输入比分」 |
| 输入非数字字符 | 输入框不接受,自动过滤 | — | |
| 输入超大数值(如 999) | 允许输入但展示橙色提示 | 「比分异常偏高,请确认是否正确」 | |
| 半场比分 > 全场比分 | 红色高亮 + 按钮禁用 | 「半场比分不能大于全场比分」 | |
| 进球详情与比分不一致 | 红色高亮 + 按钮禁用 | 「进球详情与总进球不一致」 | |
| 已应用赛果后尝试修改 | 输入框禁用 | 「赛果已应用,如需修改请先二次结算」 | |
| 网络中断时提交 | 提交失败,保留已输入数据 | 「网络异常,请重试」 | |
| 数据源开关 = 开 且 IM 推送新比分时本地正在录入(见下 IM 覆盖边界细分) | 按场景处理 | 按场景提示 | |
| 数据源开关 = 关 时 IM 推送新比分 | 不自动同步,保留本地录入 | —(系统不展示提示) | |
| 赛事驳回后对已结算盘口执行二次结算 | 该盘口赛果录入解锁,恢复可编辑 | 「盘口二次结算中,赛果可重录」 | |
| 录入赛果但盘口仍在开盘 | 不计算结算结果,不关盘 | 「该盘口仍在开盘中,结算需等待关盘」 | |
| 赛果未变化时重复提交 | 不重新计算,保持原结果 | 「赛果未发生变化,无需重新计算」 | |
| 赛果变化导致已结算盘口结果改变 | 系统直接二次结算 + 自动差额处理 | 「赛果变化,盘口 {ID} 已二次结算,差额 ¥{N} 已处理」 | |
| 下半场弹窗打开但上半场未应用 | 前置硬约束阻塞,下半场按钮灰置 | 「请先录入并应用上半场赛果」 | |
| 上+下 合计 ≠ 数据源全场比分(数据源已推送时) | 下半场应用时橙色提示(不阻塞) | 「上 + 下 合计 X:Y 与数据源全场 A:B 不一致,请核对」 | |
| 段 1+2+3 ≠ 半场 或 段 4+5+6 ≠ 下半场 | 阻塞末次应用 | 「段累计比分与对应半场比分不一致」 | |
| 段 1-6 累计 ≠ 全场合计 | 阻塞末次应用 | 「6 段累计比分与全场合计不一致」 | |
| 2H 类盘口结算时下半场未应用 | 显示缺少数据 | 「2H 类盘口需下半场赛果已应用」 | |
| FT 类盘口结算时全场扩展 · 分区 A 未应用 | 显示缺少数据 | 「FT 类盘口需全场扩展 · 分区 A 已应用」 | |
| 全场扩展分区 A 打开时上半场或下半场未应用 | 前置硬约束阻塞 | 「请先应用上半场 + 下半场赛果」 | |
| 全场扩展分区 B 打开时分区 A 未应用 | 前置硬约束阻塞 | 「请先应用全场扩展 · 分区 A」 | |
| 全场扩展分区 C 打开时分区 B 未应用 | 前置硬约束阻塞 | 「请先应用加时赛」 |
11.8.1 IM 覆盖本地录入的边界细分(数据源开关 = 开时)
本期实装:数据源自动拉取比分本期实装,本节所述覆盖本地录入的场景本期生效。
- 阶段 1 / 2 / 3(录入中被覆盖、已填未应用、已应用但盘口未结算)本期实装
- 阶段 4(赛事待结算 + 盘口已结算 + 赛果变化)本期实装,走 第 11.7 节 "已结算盘口自动重结算" + 5 分钟聚合窗口自动处理
- 阶段 5(赛事已结算 / 已取消 / 异常 + 盘口已结算 + 赛果变化)本期实装为"仅告警不动数据"路径——弹窗顶部提示"比分已更新",结算人员手动执行"赛事驳回 → 盘口二次结算 → 重录赛果"
详见第 11.0.1 节。
IM 推送新比分数据与本地录入冲突时,按结算人员所处的操作阶段细分处理:
| 操作阶段 | 系统行为 | 提示文案 |
|---|---|---|
| 阶段 1:结算人员正在录入中(未点"应用赛果") | 数据源覆盖本地录入,页面字段刷新为数据源值;本地未保存的输入丢失。未保存即未录入;比分一旦点击"应用赛果"即进入阶段 2/3 的保护机制 | 「数据源已更新赛果,页面已刷新」 |
| 阶段 2:录入完成、未点"应用赛果"(字段已填但弹窗未提交) | 弹窗保留 + 顶部弹出选择提示:「数据源已更新赛果,是否用数据源值替换?」两选项:「使用数据源值」/ 「保留我的录入」 | 「数据源已更新赛果,请选择如何处理」 |
| 阶段 3:赛果已应用但盘口未结算(盘口处于"关盘 + 待结算") | IM 覆盖 + 预填结算结果自动刷新;弹窗关闭状态下不打扰结算人员,重新打开弹窗时展示新赛果 | 「数据源更新赛果,盘口 {ID} 预填结果已刷新」 |
| 阶段 4:赛果已应用且盘口已结算(赛事待结算) | 走 第 11.7 节 "已结算盘口自动重结算"规则 + 5 分钟聚合窗口 | 「赛果变化,盘口 {ID} 已自动二次结算,差额 ¥{N} 已处理」 |
| 阶段 5:赛果已应用且盘口已结算(赛事已结算 / 已取消 / 异常) | 走 第 11.7 节 "仅告警不动数据"规则,弹窗顶部提示 | 「比分已更新,如需修正请先执行赛事驳回」 |
扩展数据的保留策略(进球详情 / 角球 / 红黄牌等):
| IM 推送的覆盖范围 | 扩展数据处理 |
|---|---|
| IM 推送的新比分数据包含扩展字段(如新进球详情) | 按阶段规则覆盖扩展字段 |
| IM 推送的新比分数据不包含扩展字段 | 保留本地已录入的扩展数据,不清空(避免人工录入的角球/红黄牌等被意外清除) |