Skip to content

第十四章 异常与边界处理

14.1 空状态处理

当列表数据为空时,根据不同场景显示不同的空状态界面:

场景显示内容操作建议
筛选结果为空插图 +「没有符合条件的赛事」显示「清除筛选条件」按钮
今日无赛事插图 +「今日暂无赛事安排」提示切换日期查看
无待上架赛事插图 +「没有待上架的赛事」
搜索无结果插图 +「未找到匹配的赛事」提示修改搜索关键词

14.2 加载状态处理

场景显示内容
首次加载表格区域显示骨架屏(10 行灰色占位符)
刷新中刷新按钮显示旋转图标
筛选中表格内容半透明遮罩 + 居中旋转图标
操作执行中操作按钮显示加载状态,禁止重复点击

加载超时处理

超时时间处理方式
5 秒显示「加载时间较长,请耐心等待」
15 秒显示「加载超时」+「重试」按钮
30 秒自动取消请求,显示错误状态

14.3 错误状态处理

错误类型处理方式
数据加载失败显示错误提示 +「重试」按钮
操作执行失败Toast 通知提示错误原因
权限不足对话框提示「权限不足」
网络超时显示网络异常横幅
服务器错误显示「服务暂时不可用,请稍后重试」

错误码与提示映射

错误码用户提示处理建议
400请求参数错误检查输入内容
401登录已过期跳转登录页
403权限不足联系管理员
404数据不存在刷新页面
429操作过于频繁稍后重试
500服务器错误稍后重试
502/503服务暂时不可用稍后重试
504请求超时检查网络后重试

14.4 并发冲突处理

当多个用户同时操作同一赛事时,采用乐观锁机制处理冲突:

场景处理方式
用户 A 上架,用户 B 也点上架用户 B 收到提示「该赛事已被他人上架」
用户 A 下架,用户 B 正在操盘用户 B 收到提示「该赛事已被下架」
用户 A 分配操盘手,用户 B 也在分配后提交的覆盖先提交的(分配操作允许覆盖)

冲突检测机制

机制说明
版本号校验每次操作提交时携带数据版本号
实时状态推送状态变更实时推送给所有在线用户
行级锁同一赛事的状态变更操作采用数据库行级锁,先到先得

冲突提示对话框

元素内容
标题操作冲突
描述该赛事状态已被其他用户修改,请刷新后重试
按钮「刷新」「取消」

14.5 跨天比赛处理

比赛日以每日 06:00(北京时间)为分界线:

开赛时间所属比赛日
1月19日 23:301月19日
1月20日 01:301月19日
1月20日 05:591月19日
1月20日 06:001月20日

跨天比赛的筛选规则

筛选条件筛选结果
日期 = 1月19日包含 1月19日 06:00 至 1月20日 05:59 开赛的比赛
日期 = 今日包含今日 06:00 至明日 05:59 开赛的比赛

跨天比赛的显示规则

场景显示方式
开赛时间显示实际开赛时间(如 01:30)
日期标签显示所属比赛日(如 1月19日)
列表排序按实际开赛时间排序

14.6 大数据量处理

分页策略

参数说明
每页条数选项50 / 100 / 200 条用户可选
默认每页条数50 条平衡性能与信息密度
最大总数据量10000 条超出时提示缩小筛选范围

14.7 告警阈值配置

各类告警阈值的默认值、允许范围及调整方式,按配置归属分别参阅:

  • 风控管理配置:单边超限、大额投注阈值
  • 联赛管理配置:延期超时、即将开赛告警等阈值

操盘列表中涉及告警阈值判断的功能(如告警标签、置顶规则等)均读取对应配置模块中的阈值设定,本文档不重复定义具体数值。


14.8 操作时序边界场景

当操盘手发起操作到提交之间,赛事状态会发生变化。以下定义各类时序边界场景的处理规则。

14.8.1 上架操作时序边界

场景触发条件系统行为操盘手感知
上架时赛事进入滚球点击上架时赛前,提交时已滚球弹出二次确认弹窗提示「该赛事已进入滚球,是否继续上架?」
上架时赛事已取消点击上架时正常,提交时已取消阻止上架,关闭弹窗Toast「赛事已取消,无法上架」
上架时赛事已结束点击上架时滚球,提交时已完场阻止上架,关闭弹窗Toast「赛事已结束」
上架时赛事已延期点击上架时正常,提交时已延期阻止上架Toast「赛事延期中,无法上架」
跟随数据源但 IM 暂停上架选择跟随,数据源当前暂停上架成功,盘口状态=开盘(C端显示暂停投注)弹窗提示当前数据源状态
跟随数据源但 IM 关盘上架选择跟随,数据源已关盘阻止上架Toast「数据源已关盘,无法上架」

14.8.2 批量上架时序边界

场景触发条件系统行为操盘手感知
批量含已取消赛事批量选中 5 场,其中 1 场已取消部分成功:4 场上架成功,1 场跳过结果弹窗显示「成功 4 场,失败 1 场」,点击查看详情
批量含延期赛事批量选中含延期赛事延期赛事跳过,其他正常上架结果弹窗显示失败原因「赛事延期中」
批量含已结束赛事批量选中含已结束赛事已结束赛事跳过,其他正常上架结果弹窗显示失败原因「赛事已结束」

14.8.3 下架操作时序边界

场景触发条件系统行为操盘手感知
下架时赛事已结束点击下架,提交时赛事完场允许下架下架成功(下架仅控制客户端是否展示;结算处置在结算详情页,互不冲突)
下架滚球赛事对滚球中的赛事执行下架弹窗增加红色警告,显示当前投注额需二次确认,下架后盘口状态=隐藏(客户端不可见)
下架时赛事已取消点击下架,提交时赛事取消允许下架下架成功(下架仅控制客户端是否展示;结算处置在结算详情页,互不冲突)

14.8.4 锁盘解锁时序边界

操作位置说明:根据D1设计决策,锁盘/解锁操作统一在「赛事操盘详情页」进行,列表页不提供这些操作按钮。

场景触发条件系统行为操盘手感知
锁盘时数据源推送关盘人工锁盘中,数据源推送关盘数据源关盘优先级最高,盘口变为关盘Toast「数据源已推送关盘,盘口最终状态为关盘」
解锁时数据源暂停(跟随=是)人工解锁,数据源暂停解锁成功,本地恢复开盘,C端显示暂停投注Toast「解锁成功,数据源暂停中」
解锁时数据源暂停(跟随=否)人工解锁,数据源暂停解锁成功,本地恢复开盘,告警列显示「数据源暂停」Toast「解锁成功」
解锁时数据源维护人工解锁,数据源维护中解锁成功,盘口强制隐藏Toast「解锁成功,数据源维护中,盘口状态为隐藏」
解锁时数据源已关盘人工解锁,数据源已关盘阻止解锁Toast「数据源已关盘,无法解锁」

解锁后状态与跟随配置的关系

数据源状态跟随配置解锁后盘口状态
开盘是/否开盘
暂停开盘(C端暂停投注)
暂停开盘(告警列显示「数据源暂停」)
维护是/否隐藏(强制)
关盘是/否阻止解锁

14.8.5 结算侧异常标记的操盘列表联动(2026-04-23 定稿)

字段说明:赛事异常状态(延期、取消、腰斩等)不由 IM 数据源推送任何枚举字段,由结算人员在结算详情页「赛事异常处理」按钮主动标记产生(详见结算详情页 16.0 异常识别三源)。IM 仅推送盘口级状态(EventStatusId / MarketlineStatusId 等)和赛事结束时间时间戳。赛事异常状态标记后,操盘列表同步展示,但不提供标记入口。详见第9章/第10章数据字段定义 + 本页 1.5.3 异常赛事联动规则

联动规则核心(2026-04-23 定稿):仅取消 / 延期 / 腰斩触发整场下架(盘口关盘由数据源推送触发,人工无关盘权限);数据错误不下架、不关盘、不改赛事态、不动订单,弹窗仅做审计标记,实际修正走各自独立入口(操盘页调赔率 / 赛果录入页 / 盘口卡片 void / 盘口二次结算)。

场景触发条件系统行为操盘手感知
滚球时主动标记延期赛事滚球中,结算人员在结算详情页发起「赛事异常处理 → 赛事延期 → 延期暂缓」(IM 不推送赛事延期枚举)赛事状态变为延期;立即批量关盘该赛事所有开盘中盘口;操盘列表整场下架(UI 隔离)行变为橙色背景,告警列显示「延期」;上架状态变"已下架"
滚球时主动取消赛事滚球中,结算人员在结算详情页发起「赛事异常处理 → 赛事取消」立即批量关盘该赛事所有开盘中盘口;操盘列表整场下架赛事保留在操盘列表(红色高亮 + 已下架);结算列表红色边框置顶;结算人员完成异常处置确认后才从操盘列表移除
滚球时主动标记腰斩赛事滚球中,结算人员发起「赛事异常处理 → 赛事腰斩」并选择处置方式(按比分结算 / 全额退款 / 暂缓处理)暂缓处理进异常态 + 批量关盘;按比分结算 / 全额退款直接进终态;三种处置均整场下架红色高亮 + 已下架;处置确认后按赛事终态处理
滚球时主动标记数据错误赛事滚球中,结算人员发起「赛事异常处理 → 数据错误」弹窗仅做审计标记:留审计日志 + 赛事标红色「数据错误」标签;不下架、不关盘、不改赛事态(保持待结算)、不动订单(已结算和未结算订单均保持原状)红色边框 + 红色「数据错误」标签;上架状态不变(仍为"已上架");赛事客户端正常可见
数据错误的实际修正(不在弹窗内)修正动作按颗粒度走各自独立入口开盘中赔率错 → 操盘详情页调赔率(操盘手);关盘未结算赔率错 → 盘口卡片取消盘口 void(结算人员);赛果字段错 → 赛果录入页修正;已结算错 → 盘口二次结算所有盘口正常运营
延期→恢复→再次延期延期赛事恢复后再次收到延期状态允许状态循环,记录完整状态变更链日志记录完整流转历史
取消 / 延期 / 腰斩 期间尝试上架对异常态赛事点击上架阻止上架按钮禁用,hover 显示对应原因
数据错误期间的上架数据错误不下架,赛事仍为"已上架"状态无需上架操作(本来就没下架)上架按钮对数据错误赛事不禁用(因为不下架)
延期期间尝试取消隐藏盘口对延期赛事的隐藏盘口点击取消隐藏阻止取消隐藏按钮禁用,提示「赛事延期中,盘口无法取消隐藏」
取消 / 延期 / 腰斩 赛事驳回后是否自动上架结算人员执行「赛事驳回」回待结算不自动上架;上架由操盘手手动决定赛事态恢复,但仍显示"已下架";操盘手确认数据无误后手动点击「上架」恢复客户端展示

14.8.6 并发操作竞争处理

操作位置说明:隐藏/取消隐藏/锁定/解锁操作在详情页进行,以下并发场景指不同用户在各自页面同时操作同一赛事。

场景触发条件系统行为操盘手感知
A 上架,B 也上架两个操盘手同时对同一赛事上架先提交者成功,后提交者收到「赛事已被上架」后操作者弹窗关盘,列表刷新
A 下架,B 锁盘A 下架,B 同时锁盘同一赛事先提交者成功,后提交者收到冲突提示后操作者需刷新查看最新状态
A 解锁,B 下架A 解锁,B 同时下架同一赛事下架优先级高于解锁,以下架为准A 操作失败,收到「赛事已被下架」
A 隐藏,B 锁盘A 隐藏,B 同时锁盘同一赛事锁盘优先级高于隐藏,以锁盘为准A 操作被覆盖,B 操作成功

并发操作竞争优先级

同一赛事的状态变更操作采用数据库行级锁,先到先得。当两个操作在极短时间内到达时,按以下优先级决定最终状态:

优先级操作类型说明
1(最高)下架涉及客户端可见性,影响最大
2锁盘主动风控行为,优先保障
3解锁需确认数据源状态后执行
4(最低)隐藏/取消隐藏临时状态变更

概念区分

  • 状态覆盖优先级第16章16.3.11节):决定盘口最终状态由哪个触发源(数据源/人工/风控/联赛)决定
  • 操作竞争优先级(本节):决定同时到达的多个人工操作请求哪个先执行

两者是不同层面的优先级规则,状态覆盖优先级用于计算最终状态,操作竞争优先级用于解决并发冲突。


14.9 批量操作失败详情

当批量操作存在部分失败时,点击「查看详情」弹出失败详情弹窗。

弹窗结构

元素内容
标题批量操作结果
汇总信息成功 X 场,失败 Y 场
失败列表表格形式展示失败详情(赛事编号、赛事名称、联赛、失败原因)
按钮「关盘」

失败原因与建议操作映射

失败原因建议操作
赛事已取消盘口已关盘,无需关盘;结算处理在结算详情页
赛事已结束盘口已关盘(完场),无需关盘;结算处理在结算详情页
赛事延期中等待数据源推送恢复或取消状态
数据源已关盘等待数据源恢复
已被其他用户操作刷新列表查看最新状态
权限不足联系主管处理

14.10 延期超时处理

当赛事延期时间超过配置阈值时,系统触发延期超时告警。阈值定义请参考联赛管理配置。

延期超时告警规则

条件系统行为
延期时长达到阈值的 80%告警列显示「延期较长」标签(橙色)
延期时长达到阈值的 100%告警列显示「延期超时」标签(红色)
延期时长超过阈值的 150%自动置顶该赛事,建议下架

延期超时后的操作建议

建议说明
下架处理如确认赛事不会恢复,执行下架
继续等待如有消息表明赛事将恢复,可继续等待
联系数据源确认赛事最新状态

说明:延期超时告警为建议性提示,系统不会自动执行下架操作,最终决策权归操盘手。


14.11 投注时序边界

当盘口状态变更(关盘、隐藏、锁定)时,服务端状态变更与客户端收到通知之间存在延迟窗口。本节定义该窗口期内投注请求的处理规则。

14.11.1 时序窗口定义

时间点定义
T0服务端盘口状态变更时间
T1客户端收到状态推送时间(T1 > T0,延迟约 100-500ms)
Tx用户投注请求到达服务端时间

14.11.2 窗口期投注处理规则

场景Tx 位置处理方式用户提示
盘口关盘T0 < Tx < T1拒绝投注该盘口已关盘
盘口隐藏T0 < Tx < T1拒绝投注盘口隐藏中,请稍后
盘口锁定T0 < Tx < T1拒绝投注盘口已锁定
赛事流转T0 < Tx < T1拒绝投注该赛事已结束

关键原则:以服务端状态为准,客户端延迟不影响判断。

14.11.3 服务端校验流程

投注请求处理时,服务端按以下顺序校验:

步骤校验内容失败错误码
1赛事是否存在且已上架EVENT_NOT_AVAILABLE
2盘口状态是否为开盘MARKET_NOT_OPEN
3赔率版本是否匹配ODDS_CHANGED
4投注额度是否在限额内AMOUNT_EXCEED_LIMIT
5用户是否有投注权限USER_RESTRICTED

修订记录

版本日期修订内容
v1.02026-01-15初稿
v1.12026-01-211) 14.8.5节EventStatusId改为SettlementId;2) 14.8.4/14.8.6节增加操作位置说明(详情页);3) 14.4节移除列表页不存在的锁盘场景
v1.22026-01-29本地状态术语统一:14.8.5/14.8.6节"暂停/恢复"→"隐藏/取消隐藏";14.11节"盘口暂停"→"盘口隐藏"
v1.32026-02-11IM暂停不再改变本地状态,仅影响C端展示:1)14.8.4节解锁场景修正:暂停改为本地恢复开盘,C端显示差异说明;2)14.8.4下方解锁后状态表:暂停项从"隐藏"改为"开盘(C端暂停投注)"
v1.42026-02-1114.8.1节上架时IM暂停场景:盘口状态从"隐藏"改为"开盘(C端显示暂停投注)";14.7节"可配置范围"改为"允许范围"

体育操盘系统产品文档