Files
one-pipe-system/openspec/changes/update-carrier-polling-scheduler-integration/design.md
luo 06684e1fc0
All checks were successful
构建并部署前端到测试环境 / deploy (push) Successful in 55s
fix: 轮询按运营商账户限流
2026-10-26 14:31:15 +08:00

4.3 KiB
Raw Blame History

Context

项目已经有网关管理、轮询配置预览与统计、单卡历史、统一导出任务、预签名 CSV 上传、运营商账户编辑和系统配置。最新文档把这些基础能力扩展为按账户调度与停复机指令队列,必须做契约升级,而不是另建同名模块。

Decisions

  • 为新增调度/告警/轮询开关契约建立独立 API 和类型模块,已存在的接口在原服务扩展。分页、枚举、账户搜索、时间格式、权限门禁和异步生命周期优先复用已验证能力。
  • 仅平台账号使用现有平台身份判断(user_type=1/2),仅超级管理员使用 isSuperAdmin。每个写操作同时在入口和处理函数检查,后端继续独立鉴权;禁止用按钮权限绕过身份。
  • 详情遵循店铺详情的独立隐藏兄弟路由,普通页与详情按钮使用不同权限编码;需要数据库菜单配置的隐藏详情与导出任务菜单一并交付。单卡轮询状态通过已有资产信息弹窗/页签进入,卡 ID 来自授权资产详情,绑定卡不使用设备 ID 代替。
  • 展示 effective 与 configured 参数的区别;configured 为空并非零值。执行上限与 consume_capacity 的关系在可判断时前置校验,无法获知的停复机进程容量不凭空假设,由服务端验证。
  • 批量、告警关闭和导入共享接口影响说明及逐项结果展示。每次确认使用目标状态对应的 impact;获取失败不展示硬编码替代文案,更不绕过确认。跨筛选、视图、资产或账号变更时清理勾选和迟到结果。
  • 系统配置修改沿用现有权限,增加 polling 模块、枚举选择与 JSON 合法性提示;不因前端接入自动切换 scheduler、rate_limit_mode 或 queue_enabled。
  • CSV 文件保留标识符原始文本,客户端只做文档明确的格式/数量校验;后端仍负责逐行资产范围、风险状态和权限判定。
  • 模式与范围明确:observe 不宣称已拦截,队列前 500 条的 pending 计数标注近似范围;近似 QPS/p95 保留单位和接口定义。未知枚举保留原值。

Proposed route organization

在已有「轮询管理」/polling-management 下新增以下可见菜单,均非仅超级管理员专属页面;其中平台限定页面还需身份控制:

菜单 URL 账号边界
运营商账户调度参数 /polling-management/carrier-params 查看按后端权限;维护仅超级管理员
请求检查场景 /polling-management/check-scenes 查看按后端权限;维护仅超级管理员
失败告警 /polling-management/failure-alerts 查看、处理按权限;批量关闭仅平台
账户队列监控 /polling-management/carrier-queues 按后端权限
停复机规则演练 /polling-management/stop-resume-dry-run 仅平台
不轮询清单 /polling-management/polling-pauses 仅平台
轮询开关导入 /polling-management/polling-status-imports 仅平台

隐藏详情拟用 /polling-management/carrier-params/detail/:carrier_id、/polling-management/failure-alerts/detail/:id、/polling-management/polling-status-imports/detail/:id。导出管理沿用现有 /asset-management/export-task-management/ 下同场景命名规则,不新建一级菜单。最终以实际注册路由和权限交付为准。

Risks / Trade-offs

  • 本次跨多个既有业务页,必须保留已有 dirty worktree:使用定点修改和基于当前状态的回归,禁止重置前一轮实现。
  • C 端不在本仓库,明确外部待办;不得越出命名项目搜索或修改其他工程。
  • 文档 46/16 是后端相对旧版本的统计,并非当前代码差异;以接口覆盖矩阵逐项闭环。
  • 分页读取过程中数据可能变化,不能凭前端缓存自动扩大写操作目标。导入、批量操作发生部分成功后明确不可回滚,不提供虚构的整批恢复。

Validation

覆盖所有新增/变更接口方法与 Query/Body、true/false/null/0、clear_fields、warnings、保护期删除、账号类型 1/2/3/4、五百条上限、CSV 流程、部分成功、账户级告警、特殊视图、导出场景以及异步终态/关闭/卸载。运行类型、生产构建、全量 Node 回归和针对性 lint/编码检查;浏览器使用本地 mock,明确区别于真实后端联调。