Files
junhong_cmp_fiber/docs/polling-system/轮询配置二维条件重构计划.md
Break 1f634eb465
All checks were successful
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 8m3s
init
2026-06-16 15:15:50 +08:00

3.1 KiB
Raw Permalink Blame History

轮询配置二维条件重构计划

背景

当前轮询配置使用 card_condition 单字段表达卡的轮询条件,但业务上实际存在两个独立维度:

  • 实名状态:未实名、已实名
  • 卡状态:开机、停机

单字段枚举会把两个维度压成互斥状态,导致“未实名 + 停机”这类卡只能命中一个条件,配置语义不直观,也容易出现高低频策略互相覆盖。

目标

将轮询配置从单一 card_condition 改为二维条件匹配:

  • realname_conditionanynot_real_namereal_name
  • network_conditionanyonlineoffline

配置匹配规则调整为:

实名条件匹配 AND 卡状态条件匹配 AND 卡类型/运营商等条件匹配

一张卡允许同时命中多条配置;每个任务类型仍按现有 priority ASC 选择第一条非空 interval。

推荐语义

条件字段 语义
realname_condition any 不限制实名状态
realname_condition not_real_name real_name_status != 1
realname_condition real_name real_name_status = 1
network_condition any 不限制开停机状态
network_condition online network_status = 1
network_condition offline network_status = 0

迁移映射

为了平滑迁移旧配置,可按以下规则回填新字段:

card_condition realname_condition network_condition
any any
not_real_name not_real_name online
real_name real_name any
suspended any offline
activated real_name online

示例配置

未实名卡高频实名:

realname_condition = not_real_name
network_condition = any
realname_check_interval = 120
其他 interval = NULL

停机卡高频套餐和卡状态:

realname_condition = any
network_condition = offline
package_check_interval = 120
card_status_check_interval = 120
其他 interval = NULL

已实名开机卡低频实名、常规套餐和卡状态:

realname_condition = real_name
network_condition = online
realname_check_interval = 86400
package_check_interval = 300
card_status_check_interval = 3600

实施步骤

  1. 新增数据库字段 realname_conditionnetwork_condition,保留旧字段用于迁移兼容。
  2. 回填历史配置的新字段值。
  3. 调整 DTO、Handler、Service、文档生成器和 OpenAPI 描述。
  4. 调整 PollingConfigManager 的匹配逻辑,按二维条件筛选配置。
  5. 验证典型组合:未实名开机、未实名停机、已实名开机、已实名停机。
  6. 确认线上配置完成迁移后,再考虑废弃旧 card_condition 字段。

风险

  • real_name 条件生效后,现有灰度配置可能覆盖大量已实名卡,需要上线前确认优先级和 interval。
  • 多条配置同时命中是预期行为,但需要用 priority 明确每个任务类型的最终 interval。
  • 迁移期间需要保持旧配置兼容,避免配置未更新时轮询队列为空。