Files
junhong_cmp_fiber/openspec/specs/carrier/spec.md
huang cebcada950
All checks were successful
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 7m16s
refactor: 流量系统重构 — 增量累加算法 + 日粒度缓冲 + 旧详单清理
核心改造:
- 增量算法:流量计算从覆盖式改为增量累加(gateway - lastReading),支持上游运营商重置检测
- 日流量缓冲:insertDataUsageRecord 改为 Redis INCRBYFLOAT,每日凌晨落盘到 tb_card_daily_usage
- 运营商:新增 data_reset_day 字段(联通=27,其余=1)
- IoT卡:新增 last_gateway_reading_mb 字段存储上次网关读数
- 查询层:新建 TrafficQueryService 合并 Redis(今日)+ DB(历史)数据源
- 清理:删除 DataUsageRecord model/store,移除 polling_handler 旧引用

迁移:000094-000097(carrier字段、iot_card字段、数据初始化、日流量表)
2026-03-30 09:59:30 +08:00

1.1 KiB
Raw Permalink Blame History

MODIFIED Requirements

Requirement: 运营商上游流量重置日配置

tb_carrier SHALL 包含 data_reset_day 字段INT, 1-28表示该运营商每月上游流量重置日即上游运营商清零网关计数器的日期。创建/编辑运营商时 SHALL 支持设置此字段。

注意:此字段与套餐级别的 data_reset_cycledaily/monthly/yearly完全独立的两个维度data_reset_day 用于检测上游网关值下降是否为正常重置,data_reset_cycle 用于我们系统套餐的已用量定时归零。

Scenario: 创建运营商时指定重置日

  • WHEN 管理员创建运营商,指定 data_reset_day = 27
  • THEN 该运营商记录的 data_reset_day SHALL 为 27

Scenario: 轮询时读取重置日判断上游重置

  • WHEN 轮询系统检测到网关流量值下降(increment < 0
  • THEN 系统 SHALL 读取该卡对应运营商的 data_reset_day
  • AND 使用 isResetWindow(now, resetDay) 判断是否在重置日窗口内(重置日当天 + 前一天容错)
  • AND 窗口内视为正常上游重置,窗口外记录 Warn 日志并丢弃异常值