Appearance
第十章 状态流转规则
本章定义操盘列表中各类状态的流转规则,包括触发条件、流转方向、系统行为等。
10.1 状态体系概述
操盘系统中存在多种状态维度,各维度独立管理但存在联动关系。
10.1.1 状态维度划分
| 状态维度 | 定义 | 来源 | 详细定义 |
|---|---|---|---|
| 比赛进程 | 比赛当前所处阶段 | 由IM字段计算得出 | 第九章 9.2.3节 |
| 结算状态 | 赛事的结算处理状态 | 结算接口或人工标记 | 第九章 9.3.2节 |
| 上架状态 | 赛事在本地系统的上架情况 | 本地操作 | 第九章 9.4节 |
| 盘口状态 | 盘口的投注开关状态 | 数据源+人工+风控叠加 | 第九章 9.5节 |
| 数据源状态 | IM推送的盘口开关状态 | IM Delta推送 | 第九章 9.3.1节 |
10.1.2 比赛进程定义
比赛进程(MatchPhase)是本地派生字段,由IM的Market、EventPeriodId和开赛时间计算得出。
| 比赛进程值 | 计算条件 | 说明 |
|---|---|---|
| 赛前 | Market ∈ (1,2) 且 EventPeriodId=10 且 距开赛 > 30分钟 | 距离开赛较远 |
| 即将 | Market ∈ (1,2) 且 EventPeriodId=10 且 距开赛 ≤ 30分钟 | 即将开赛 |
| 滚球 | Market=3 且 EventPeriodId ∈ (20, 30, 40, 50, 60) | 比赛进行中 |
| 中场 | Market=3 且 EventPeriodId ∈ (25, 45) | 中场休息 |
| 完场 | EventPeriodId=100 | 比赛已结束 |
EventPeriodId=100与盘口状态的联动:当IM推送EventPeriodId=100(完场)时,系统同步将本地盘口状态流转为「关盘」。此流转由数据源触发,与EventStatusId=2(数据源关盘)具有相同优先级,均为终态不可逆。操盘列表判断完场后将赛事从操盘列表移除,流转至结算管理模块。
10.1.3 结算状态定义
结算状态(SettlementStatus)是本地派生字段,由结算接口或人工标记确定。
| 结算状态值 | 含义 | 触发来源 | 结算规则 | 操盘列表处理 |
|---|---|---|---|---|
| — | 进行中 | 默认 | — | 正常显示在操盘列表 |
| postponed | 延期 | 结算接口或人工标记 | 不结算 | 保留在操盘列表等待恢复 |
| normal_end | 正常完场 | 结算接口 | 按结果结算 | 流转到结算管理 |
| cancelled | 取消 | 结算接口或人工标记 | 全额退款 | 流转到结算管理 |
| interrupted | 中断 | 结算接口或人工标记 | 待人工决策 | 流转到结算管理 |
| abandoned | 腰斩 | 结算接口或人工标记 | 已产生结果正常结算,未产生结果退款 | 流转到结算管理 |
| walkover | 弃权 | 人工标记 | 按弃权规则结算 | 流转到结算管理 |
| withdrawal | 退赛 | 人工标记 | 按退赛规则结算 | 流转到结算管理 |
设计说明:延期(postponed)是唯一保留在操盘列表的异常状态,其他终态均流转到结算管理模块处理。
10.2 上架状态流转
上架状态由本地操作驱动,表示赛事在系统中的上架情况。
10.2.1 上架状态定义
| 状态值 | 含义 | 客户端可见 | 接受投注 |
|---|---|---|---|
| 待上架 | 数据源已下发,等待审核上架 | 否 | 否 |
| 已上架 | 已对外展示 | 是 | 由盘口状态决定 |
| 已下架 | 人工隐藏 | 否 | 否 |
10.2.2 流转规则表
| 当前状态 | 目标状态 | 触发条件 | 操作权限 | 系统行为 |
|---|---|---|---|---|
| 待上架 | 已上架 | 人工点击上架并确认 | 全部角色 | 必须选择操盘手和盘口初始状态 |
| 待上架 | 已下架 | 人工点击隐藏 | 全部角色 | 赛事不对外展示 |
| 已上架 | 已下架 | 人工点击下架并确认 | 全部角色 | 盘口状态变为隐藏(隐藏来源=system,详情=delist_link) |
| 已下架 | 已上架 | 人工点击重新上架并确认 | 全部角色 | 需重新选择盘口初始状态 |
| 已下架 | 待上架 | 不允许 | 无 | 已下架不可回退到待上架 |
| 已上架 | 待上架 | 不允许 | 无 | 已上架不可回退到待上架 |
10.2.2.1 操盘手分配的边界条件(写死)
上架时分配操盘手必须满足以下边界条件,否则阻止上架操作:
| 边界条件 | 检查规则 | 失败提示 |
|---|---|---|
| 操盘手存在 | 所选操盘手在系统中必须存在(未被删除) | 所选操盘手不存在 |
| 操盘手权限 | 所选操盘手必须有该联赛的操盘权限 | {操盘手名}无该联赛操盘权限 |
| 操盘手在职状态 | 所选操盘手必须处于在职状态(非离职/禁用) | {操盘手名}已离职或被禁用 |
| 赛事与操盘手关系 | 同一赛事的不同玩法可分配不同操盘手 | —(系统支持) |
| 操盘手离线 | 若操盘手离线超过30分钟,弹窗警告但不阻止上架 | {操盘手名}已离线,建议重新分配 |
| 无操盘手情况 | 不允许留空,必须为所有玩法分配操盘手 | 请为所有玩法分配操盘手 |
10.2.3 上架时盘口初始状态选项
上架操作时必须选择盘口初始状态,提供三个选项:
完整状态覆盖优先级:详见第16章16.3.11节「状态覆盖优先级」。
| 选项 | 说明 | 默认 | 适用场景 |
|---|---|---|---|
| 跟随数据源 | 上架后盘口跟随IM状态,可立即投注 | ✓ | 默认信任数据源的常规赛事 |
| 锁定 | 盘口可见但暂停投注,需手动解锁 | 需检查赔率后再开放投注 | |
| 隐藏 | 盘口对玩家不可见,需手动取消隐藏 | 高风险赛事 |
设计说明:三个选项对应不同风险等级的处理策略。「跟随数据源」为默认选项,适合常规赛事;「锁定」允许玩家看到盘口但无法投注,给操盘手检查赔率的窗口;「隐藏」最严格,盘口对玩家完全不可见,适合需要全面审查的高风险赛事。
10.2.4 下架与盘口状态联动
关键规则:下架操作将盘口状态变为隐藏(隐藏来源=system,详情=delist_link),客户端不可见。
| 操作 | 盘口状态变化 | 原因 |
|---|---|---|
| 下架 | → 隐藏(隐藏来源=system,详情=delist_link) | 下架联动隐藏,客户端不可见;需先上架才能恢复 |
| 重新上架 | 根据选择的盘口初始状态 | 不继承下架前状态,需人工确认 |
隐藏与锁定的核心区别:
| 状态 | 触发方式 | 恢复方式 | 特点 |
|---|---|---|---|
| 隐藏 | 系统/数据源/风控/下架联动 | 可自动恢复(下架联动时需先上架) | 临时中断,如进球、数据延迟、下架 |
| 锁定 | 仅人工操作 | 必须人工解锁 | 主动干预,如风险控制 |
10.3 盘口状态流转
盘口状态表示投注开关,可由数据源推送、人工操作、风控规则三种方式触发。
10.3.1 盘口状态定义
| 状态值 | 含义 | 触发方式 | 接受投注 | 客户端可见 |
|---|---|---|---|---|
| 开盘 | 可接受投注 | 人工开盘或数据源恢复 | 是 | 是 |
| 隐藏 | 临时隐藏投注 | 风控触发或人工隐藏 | 否 | 是 |
| 锁定 | 人工锁定 | 仅人工操作 | 否 | 是 |
| 关盘 | 已关盘 | 玩法结算完成或赛事结束 | 否 | 否 |
客户端可见性说明:开盘和隐藏状态客户端可见(隐藏显示「隐藏」标记),锁定状态客户端可见但不可投注,关盘状态客户端不可见。
锁定与隐藏的区别(SSOT)
锁定和隐藏都会停止接受投注,但两者存在本质区别:
| 维度 | 隐藏 | 锁定 |
|---|---|---|
| 触发方式 | 数据源推送、风控触发、人工隐藏、下架联动 | 仅人工操作 |
| 恢复方式 | 可自动恢复(数据源/风控条件解除)或人工取消隐藏(下架联动时需先上架) | 必须人工解锁 |
| 语义 | 临时性、系统可控 | 强制性、人工意图 |
| 客户端显示 | 不可见 | 可见,显示「锁定」标记,不可投注 |
| 典型场景 | 滚球进球隐藏、单边超限隐藏、下架联动隐藏 | 风险赛事人工锁定 |
设计原则:隐藏是系统自动控制的临时状态(含下架联动),锁定是人工强制干预的状态。锁定状态必须由人工解锁,防止系统自动恢复导致的风险敞口。下架联动的隐藏需先上架才能恢复,取消隐藏按钮禁用,提示"赛事已下架,请先上架"。
10.3.2 隐藏来源标记
盘口进入隐藏状态时,系统记录隐藏来源,用于决定恢复条件。
| 隐藏来源 | 触发方式 | 恢复条件 | 优先级 |
|---|---|---|---|
| 风控隐藏 | 单边超限、大额投注等规则触发 | 风控条件解除后自动恢复,或人工取消隐藏 | 中 |
| 人工隐藏 | 操盘手手动点击隐藏按钮 | 必须人工点击取消隐藏,数据源恢复推送不生效 | 高 |
| 赛事事件隐藏 | 进球、红牌、VAR等事件触发 | 默认10秒发起一次自动恢复尝试;若恢复失败则继续跟随事件状态;连续等待超过60秒仍未恢复则触发告警并要求人工复核后恢复 | 低 |
v1.8说明:IM暂停不再作为隐藏来源。IM暂停时本地状态保持不变,仅C端显示暂停投注;IM恢复时C端自动回到可投注。详见10.4节数据源状态联动。
与10.3.5触发源优先级的区别:本节定义的是隐藏状态内部的恢复条件优先级(人工隐藏需人工取消隐藏);10.3.5节定义的是不同状态之间的覆盖优先级(关盘>锁定>隐藏)。两者是不同维度的优先级。
隐藏来源优先级规则
完整隐藏来源枚举:本节定义4种主要隐藏来源类型。系统实际支持6种隐藏来源 + 3种IM状态标记(如区分联赛暂停/联赛关盘、数据源维护等),详见第16章16.1.4节「隐藏来源枚举定义」(SSOT)。
当多个隐藏来源同时存在时,按优先级处理恢复:
| 场景 | 处理规则 |
|---|---|
| 人工隐藏 + 人工取消隐藏 | 允许取消隐藏,状态变为开盘 |
| 风控隐藏 + 人工取消隐藏 | 需同时满足风控条件解除或人工覆盖 |
| 人工隐藏 + 风控隐藏 | 需同时满足人工取消隐藏和风控解除 |
| 赛事事件隐藏 + 人工取消隐藏 | 允许人工取消隐藏,状态变为开盘 |
隐藏来源的存储与展示
| 字段 | 说明 |
|---|---|
| 隐藏来源标识 | 枚举,取值见「隐藏来源枚举SSOT」 |
| hidden_time | 隐藏时间戳 |
| hidden_operator | 人工隐藏时记录操作人ID,其他来源为空 |
| hidden_reason | 隐藏原因描述,风控隐藏时记录触发规则 |
| 隐藏来源标识 | 枚举:风控隐藏/人工隐藏/赛事事件隐藏(详见本节10.3.2表格) |
10.3.3 流转规则表
| 当前状态 | 目标状态 | 触发方式 | 说明 |
|---|---|---|---|
| 开盘 | 隐藏 | 风控触发 | 单边超限、大额投注等 |
| 开盘 | 隐藏 | 人工操作 | 操盘手手动隐藏 |
| 开盘 | 锁定 | 人工操作 | 操盘手主动锁定 |
| 开盘 | 隐藏 | 下架操作触发 | 下架时盘口强制隐藏(隐藏来源=system,详情=delist_link) |
| 隐藏 | 开盘 | 人工操作 | 操盘手手动取消隐藏 |
| 隐藏 | 锁定 | 人工操作 | 隐藏期间人工加锁 |
| 锁定 | 开盘 | 人工操作 | 操盘手解锁且数据源开盘 |
| 锁定 | 隐藏 | 人工操作 | 操盘手解锁但风控或人工隐藏 |
| 任意 | 关盘 | 数据源推送关盘 | 数据源关盘优先级最高 |
| 任意 | 关盘 | 玩法结算完成 | 该玩法已无法投注 |
| 关盘 | 任意 | 不允许 | 关盘是终态 |
10.3.4 状态覆盖优先级
SSOT:完整的状态覆盖优先级及触发源优先级定义见第16章16.3.11节。本节为简化速查表。
当多个触发源同时作用时,按以下优先级决定最终状态:
| 优先级 | 状态 | 说明 |
|---|---|---|
| 1(最高) | 关盘 | 数据源关盘或玩法结算后,不可逆 |
| 2 | 锁定 | 人工锁定后,数据源暂停/恢复无法改变 |
| 3 | 隐藏 | 可被锁定覆盖,可恢复为开盘 |
| 4(最低) | 开盘 | 可被任何状态覆盖 |
10.3.5 触发源优先级
SSOT:完整的状态覆盖优先级定义见第16章16.3.11节。本节与16.3.11保持一致。
| 优先级 | 触发源 | 说明 |
|---|---|---|
| 1(最高) | 数据源关盘 | 终态,不可逆 |
| 2 | 人工锁定 | 必须人工解锁 |
| 3 | 风控自动隐藏 | 触发条件解除后可自动恢复 |
| 4 | 联赛暂停/关盘 | 联赛级控制 |
| 5 | 数据源暂停/恢复 | 受跟随配置控制 |
| 6(最低) | 人工隐藏/取消隐藏 | 日常操作 |
术语说明:
- 人工锁定:主动锁定,必须人工解锁
- 人工隐藏/取消隐藏:临时隐藏,可被风控或数据源触发覆盖
10.4 数据源状态联动
10.4.1 数据源状态定义
| 状态值 | 含义 | IM字段条件 | 本地响应 |
|---|---|---|---|
| 开盘 | 数据源正常推送 | EventStatusId=1 且 IsMaintenance=false | 正常接收更新 |
| 暂停 | 数据源临时暂停推送 | MarketlineStatusId≠1 或事件触发 | 受跟随配置控制 |
| 维护 | 数据源维护中 | IsMaintenance=true | 本地盘口强制隐藏 |
| 关盘 | 数据源关盘该赛事 | EventStatusId=2 | 本地盘口强制关盘 |
10.4.2 跟随数据源盘口状态配置
在联赛管理页面配置「是否跟随数据源盘口状态」,控制上架后盘口是否自动跟随IM开盘/暂停状态。
| 配置项 | 位置 | 选项 | 默认值 |
|---|---|---|---|
| 是否跟随数据源盘口状态 | 联赛管理 | 是/否 | 是 |
10.4.3 跟随配置的作用范围
跟随配置仅影响数据源「暂停」和「恢复」推送,以下情况不受配置影响:
| 数据源状态 | 跟随配置=是 | 跟随配置=否 |
|---|---|---|
| 开盘(正常) | 盘口可开盘 | 盘口可开盘 |
| 暂停 | C端显示暂停投注(本地状态不变) | 本地保持当前状态,告警列显示「数据源暂停」 |
| 恢复 | C端自动恢复可投注(本地状态不变) | 本地保持当前状态 |
| 维护 | 本地盘口强制隐藏 | 本地盘口强制隐藏(不受配置影响) |
| 关盘 | 本地盘口强制关盘 | 本地盘口强制关盘(不受配置影响) |
10.4.4 人工锁定状态下的数据源交互
当盘口处于人工锁定状态时,数据源推送的处理规则:
| 数据源推送 | 处理方式 | 说明 |
|---|---|---|
| 暂停 | 忽略,保持锁定 | 人工锁定优先级高于数据源暂停 |
| 恢复 | 忽略,保持锁定 | 必须人工解锁 |
| 维护 | 忽略,保持锁定 | 人工锁定优先级高于维护 |
| 关盘 | 执行,变为关盘 | 关盘优先级最高,覆盖人工锁定 |
10.4.5 解锁后的状态恢复
人工解锁时,根据数据源当前状态决定解锁后的盘口状态:
| 数据源当前状态 | 解锁后盘口状态 | 说明 |
|---|---|---|
| 开盘 | 开盘 | 正常恢复 |
| 暂停 | 开盘 | 本地状态恢复为开盘,C端显示暂停投注 |
| 维护 | 隐藏 | 维护期间无法开盘 |
| 关盘 | 阻止解锁 | 提示「数据源已关盘,无法解锁」 |
10.5 延期赛事状态规则
10.5.1 延期触发
收到结算接口或内部系统推送赛事变为延期状态(SettlementStatus=postponed)时,根据当前上架状态处理:
| 当前上架状态 | 处理方式 |
|---|---|
| 待上架 | 标记延期,禁止上架操作,上架按钮置灰 |
| 已上架 | 标记延期,盘口自动隐藏,客户端显示延期标签 |
| 已下架 | 标记延期,保持下架状态 |
10.5.2 延期期间操作限制
| 操作 | 是否允许 | 说明 |
|---|---|---|
| 上架 | 禁止 | 延期赛事无法上架 |
| 下架 | 允许 | 可将延期赛事下架 |
| 隐藏 | 禁止 | 延期期间盘口已隐藏 |
| 取消隐藏 | 禁止 | 延期期间盘口无法取消隐藏 |
| 锁盘 | 允许 | 可对延期赛事加锁 |
| 解锁 | 禁止 | 延期期间无法解锁 |
10.5.3 延期恢复
收到数据源恢复推送时,根据延期前盘口状态和跟随配置决定盘口恢复后状态。
延期前盘口为锁定状态:
| 延期前状态 | 延期恢复后状态 | 说明 |
|---|---|---|
| 锁定 | 锁定 | 保持锁定,需人工解锁后才能开盘 |
锁定状态不受延期影响:如果延期前盘口已被人工锁定,延期恢复后仍保持锁定状态,不受跟随配置影响。这确保人工锁定的意图不会因延期事件而被覆盖。
人工锁定的优先级说明:人工锁定(优先级2)高于联赛暂停(优先级4)和数据源暂停(优先级5),因此:
- 延期恢复时,锁定状态不会被数据源恢复推送覆盖
- 联赛暂停/关盘时,锁定状态保持不变
- 必须由主管/风控人工解锁后,才会按照跟随配置和数据源状态决定盘口状态
完整优先级定义见第16章16.3.11节。
延期前盘口为非锁定状态:
| 跟随配置 | 数据源状态 | 盘口恢复后状态 |
|---|---|---|
| 是 | 开盘 | 开盘 |
| 是 | 暂停 | 开盘(C端显示暂停投注) |
| 否 | 开盘 | 保持隐藏(需人工取消隐藏) |
| 否 | 暂停 | 保持隐藏 |
延期期间已下架的赛事:
| 下架时机 | 数据源恢复后状态 | 说明 |
|---|---|---|
| 延期前下架 | 保持已下架 | 人工下架意图保留,需人工重新上架 |
| 延期后下架 | 保持已下架 | 人工下架意图保留,需人工重新上架 |
下架状态不因数据源恢复而改变:延期赛事被人工下架后,即使数据源恢复正常,系统保持下架状态,不会自动重新上架。操盘手需人工确认后决定是否重新上架。
10.5.4 延期超时告警
| 条件 | 告警级别 | 显示内容 |
|---|---|---|
| 延期时长达到阈值80% | 橙色 | 延期较长 |
| 延期时长达到阈值100% | 红色 | 延期超时 |
| 延期时长超过阈值150% | 红色+置顶 | 延期超时,建议下架 |
阈值配置:延期超时阈值在联赛管理配置中定义,默认为24小时。
10.6 状态组合约束
以下状态组合是系统禁止的:
| 禁止组合 | 说明 |
|---|---|
| 待上架 + 盘口开盘 | 未上架的赛事盘口不能开盘 |
| 已下架 + 盘口开盘 | 已下架的赛事盘口不能开盘 |
| 延期 + 滚球中 | 延期赛事不能同时处于滚球状态 |
10.7 状态流转日志
所有状态流转都会记录日志,包含以下信息:
| 字段 | 说明 |
|---|---|
| 流转时间 | 精确到毫秒 |
| 赛事编号 | 流转涉及的赛事 |
| 流转类型 | 上架状态、盘口状态、结算状态 |
| 原状态 | 流转前的状态 |
| 新状态 | 流转后的状态 |
| 触发方式 | 人工、数据源、风控、系统 |
| 操作人 | 人工操作时记录操作人 |
| 备注 | 附加说明信息 |
日志保留时间为180天,支持导出和查询。与第12章12.6.1节审计日志保留时间、第18章操盘日志保留时间一致。
修订记录
| 版本 | 日期 | 修订内容 |
|---|---|---|
| v1.0 | 2026-01-19 | 初稿 |
| v1.1 | 2026-01-20 | 【审计修正】1) 重写10.1节,移除"本地状态ID 1-10"概念,正确引用9字段定义;2) 10.2.3节移除"锁定"选项,与D1决策一致;3) 10.3.1节锁定状态客户端可见=是,与9统一;4) 10.4.1节增加IM字段条件列;5) 10.5.1节延期来源改为"结算接口或内部系统";6) 修复10.5.3节表格格式问题;7) 移除::: warning等VitePress语法,改为引用块 |
| v1.2 | 2026-01-22 | 【SSOT审计修正】10.7节日志保留时间从90天改为180天,与第12章12.6.1节、第18章统一 |
| v1.3 | 2026-01-28 | 【审计修正】10.1.2节补充EventPeriodId=100与盘口关盘联动说明 |
| v1.4 | 2026-01-28 | 【审计修正】10.5.3节补充人工锁定的优先级说明及SSOT引用;10.3.4节已有SSOT引用 |
| v1.5 | 2026-01-28 | 【术语澄清】明确"即将开赛(比赛进程)"=≤30分钟,"紧急(一键锁盘/置顶)"=≤10分钟,两者为不同概念 |
| v1.6 | 2026-01-29 | 【术语一致性】本地盘口状态"暂停"统一更名为"隐藏",与宪法v1.6保持一致;人工操作从"暂停/恢复"改为"隐藏/取消隐藏";数据源状态术语(IM暂停)保持不变 |
| v1.7 | 2026-02-11 | 【数据源暂停架构重构】IM暂停不再执行"本地自动隐藏",改为"C端显示暂停投注,本地状态不变";10.2.3节上架初始状态选项表、10.3.1节盘口状态定义、10.3.2节隐藏来源定义、10.4.3节跟随配置作用范围、10.4.5节解锁后状态恢复等相关表格同步更新 |
| v1.8 | 2026-02-11 | 【全量交叉验证】10.3.2节隐藏来源表移除已废弃的"数据源暂停"行(v1.8已不是隐藏来源),枚举从4种改为3种;补充v1.8说明引用10.4节 |
| v1.9 | 2026-02-12 | 【下架联动隐藏】下架操作从"盘口变为锁定"改为"盘口变为隐藏(隐藏来源=system,详情=delist_link)":10.2.2节流转规则表、10.2.4节下架与盘口状态联动、10.3.1节锁定触发方式、10.3.3节流转规则表、锁定vs隐藏对比表同步更新 |