All checks were successful
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 6m35s
实现功能: - 实名状态检查轮询(可配置间隔) - 卡流量检查轮询(支持跨月流量追踪) - 套餐检查与超额自动停机 - 分布式并发控制(Redis 信号量) - 手动触发轮询(单卡/批量/条件筛选) - 数据清理配置与执行 - 告警规则与历史记录 - 实时监控统计(队列/性能/并发) 性能优化: - Redis 缓存卡信息,减少 DB 查询 - Pipeline 批量写入 Redis - 异步流量记录写入 - 渐进式初始化(10万卡/批) 压测工具(scripts/benchmark/): - Mock Gateway 模拟上游服务 - 测试卡生成器 - 配置初始化脚本 - 实时监控脚本 Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
6.6 KiB
6.6 KiB
ADDED Requirements
Requirement: 创建轮询配置
系统 SHALL 允许管理员创建轮询配置,指定卡匹配条件(卡状态、卡类型、运营商)和检查间隔(实名检查、卡流量检查、套餐流量检查),以及优先级。
Scenario: 创建基本轮询配置
- WHEN 管理员提交创建轮询配置请求,包含配置名称、卡状态条件(not_real_name)、实名检查间隔(30秒)、优先级(10)
- THEN 系统创建轮询配置并返回配置ID和详情
Scenario: 创建带运营商筛选的配置
- WHEN 管理员创建轮询配置,指定卡状态条件(not_real_name)、运营商ID(1-中国移动)、实名检查间隔(60秒)
- THEN 系统创建配置,该配置只匹配中国移动的未实名卡
Scenario: 创建带卡类型筛选的配置
- WHEN 管理员创建轮询配置,指定卡业务类型(industry-行业卡)、卡流量检查间隔(1800秒)、禁用实名检查
- THEN 系统创建配置,行业卡不参与实名检查,只参与流量检查
Scenario: 配置名称重复
- WHEN 管理员创建轮询配置,配置名称与已有配置重复
- THEN 系统返回错误,提示配置名称已存在
Scenario: 检查间隔无效
- WHEN 管理员创建轮询配置,检查间隔小于 10 秒或大于 86400 秒(24小时)
- THEN 系统返回错误,提示检查间隔超出有效范围(10-86400秒)
Requirement: 查询轮询配置列表
系统 SHALL 提供轮询配置列表查询接口,支持分页和状态筛选。
Scenario: 查询所有配置
- WHEN 管理员请求查询轮询配置列表,不指定筛选条件
- THEN 系统返回所有轮询配置列表,按优先级升序排序,包含配置ID、名称、卡匹配条件、检查间隔、优先级、状态
Scenario: 查询启用的配置
- WHEN 管理员请求查询轮询配置列表,筛选条件为状态=启用
- THEN 系统只返回状态为启用的配置
Scenario: 分页查询
- WHEN 管理员请求查询轮询配置列表,指定分页参数(page=2, page_size=10)
- THEN 系统返回第二页的配置列表,每页最多 10 条
Requirement: 查询单个轮询配置详情
系统 SHALL 提供查询单个轮询配置详情的接口,包含完整的配置信息和匹配卡数量统计。
Scenario: 查询配置详情
- WHEN 管理员请求查询配置ID为 1 的详情
- THEN 系统返回配置的完整信息,包括配置名称、描述、卡匹配条件、检查间隔、优先级、状态、创建时间、更新时间
Scenario: 查询不存在的配置
- WHEN 管理员请求查询不存在的配置ID
- THEN 系统返回错误,提示配置不存在
Scenario: 包含匹配卡数量
- WHEN 管理员请求查询配置详情,请求参数包含 include_stats=true
- THEN 系统返回配置信息,额外包含当前匹配该配置的卡数量
Requirement: 更新轮询配置
系统 SHALL 允许管理员更新轮询配置,修改检查间隔、优先级、启用状态等参数,更新后自动影响匹配的卡。
Scenario: 更新检查间隔
- WHEN 管理员更新配置,将实名检查间隔从 30 秒修改为 60 秒
- THEN 系统更新配置,所有匹配该配置的卡的下次实名检查时间重新计算
Scenario: 更新优先级
- WHEN 管理员更新配置优先级,从 10 修改为 5
- THEN 系统更新配置,重新匹配所有卡(因为优先级影响匹配顺序)
Scenario: 修改卡匹配条件
- WHEN 管理员更新配置,将卡状态条件从 not_real_name 修改为 real_name
- THEN 系统更新配置,重新匹配所有卡,原匹配该配置的卡不再匹配,原不匹配的卡可能匹配
Scenario: 禁用某项检查
- WHEN 管理员更新配置,禁用实名检查(real_name_check_enabled=false)
- THEN 系统更新配置,所有匹配该配置的卡从实名检查队列移除
Scenario: 更新不存在的配置
- WHEN 管理员尝试更新不存在的配置ID
- THEN 系统返回错误,提示配置不存在
Requirement: 删除轮询配置
系统 SHALL 允许管理员删除轮询配置(软删除),删除后匹配该配置的卡将从轮询队列移除。
Scenario: 删除未使用的配置
- WHEN 管理员删除一个没有匹配卡的配置
- THEN 系统软删除配置,标记 deleted_at 字段
Scenario: 删除正在使用的配置
- WHEN 管理员删除一个有 1000 张卡匹配的配置
- THEN 系统软删除配置,所有匹配该配置的卡从轮询队列移除,卡缓存中的 matched_config_id 清空
Scenario: 删除后卡重新匹配
- WHEN 管理员删除配置后,卡失去匹配配置
- THEN 系统自动为卡重新匹配其他可用配置(按优先级),如果没有匹配配置,卡不参与轮询
Scenario: 删除不存在的配置
- WHEN 管理员尝试删除不存在的配置ID
- THEN 系统返回错误,提示配置不存在
Requirement: 启用/禁用轮询配置
系统 SHALL 提供快捷接口启用或禁用轮询配置,禁用后匹配该配置的卡不再参与轮询。
Scenario: 禁用配置
- WHEN 管理员禁用配置ID为 1 的配置
- THEN 系统更新配置状态为禁用(status=2),所有匹配该配置的卡从轮询队列移除
Scenario: 启用配置
- WHEN 管理员启用配置ID为 1 的配置
- THEN 系统更新配置状态为启用(status=1),重新匹配卡并加入轮询队列
Scenario: 禁用后卡重新匹配其他配置
- WHEN 管理员禁用优先级为 10 的配置A,该配置有 1000 张卡匹配
- THEN 系统为这 1000 张卡重新匹配其他配置(如优先级为 20 的配置B),卡使用新配置的检查间隔
Requirement: 配置匹配规则验证
系统 SHALL 验证轮询配置的匹配规则,确保配置逻辑正确。
Scenario: 实名检查不适用于行业卡
- WHEN 管理员创建配置,卡类型为 industry(行业卡),启用实名检查
- THEN 系统返回警告,提示行业卡无需实名检查,建议禁用实名检查
Scenario: 至少启用一种检查
- WHEN 管理员创建配置,禁用所有检查(实名、流量、套餐都为 false)
- THEN 系统返回错误,提示至少启用一种检查类型
Scenario: 优先级唯一性建议
- WHEN 管理员创建配置,优先级与已有配置相同
- THEN 系统返回警告,提示优先级重复可能导致匹配顺序不确定,建议使用唯一优先级