## 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** 系统返回警告,提示优先级重复可能导致匹配顺序不确定,建议使用唯一优先级