fix(通道流量阈值): AUG26-011 修复周期处理连接池自锁并补齐根池句柄验证与文档
Some checks failed
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Has been cancelled

This commit is contained in:
2026-09-16 16:59:32 +08:00
parent 15bbb953db
commit ef4d3696d4
4 changed files with 22 additions and 7 deletions

View File

@@ -66,7 +66,7 @@ period_start = M.AddDate(0, -1, 0) if now < M // 上月重置日 0 点
1. **周期处理**:扫描待处理的持锁锁行(`status=locked`),按**锁行自身 carrier** 的 `data_reset_day` 分两种结果处理:
- 已跨期(`period_start` 早于该 carrier 的当前周期起点,支持换运营商后旧锁归属):条件更新认领解锁(`status=locked → unlocked`,防并发重复);逐卡评估有效主套餐(`hasValidPackage`+ 流量未耗尽(`isTrafficExhausted`+ 实名 OK`isRealnameOK`+ 非风险 extend + 无其他停因;全满足写复机 Outbox 事件,任一不满足只解锁并把原因写入锁行。
- 周期归属不可判定(锁行引用的 carrier 已不存在/软删,或 `data_reset_day` 非法):**同样认领解锁**(按 spec「新周期对仍持锁卡解除通道锁」的语义**并同事务 `anomaly_flag=1` + 安全原因**、Warn 日志转人工;不写复机事件、不调运营商。该分支是必须的出路:`ActiveLock` 对配置缺失按仍未生效处理fail-closed不放开复机若周期处理也跳过这些行持锁卡将永久禁止一切复机且无自动出路。
- 周期归属不可判定(锁行引用的 carrier 已不存在/软删,或 `data_reset_day` 非法):**同样认领解锁**(按 spec「新周期对仍持锁卡解除通道锁」的语义**并同事务 `anomaly_flag=1` + 安全原因**、Warn 日志转人工;不写复机事件、不调运营商。解锁与异常标记 MUST 共用同一事务句柄(解锁已持有该行锁,异常标记若改走连接池的另一条连接会等待该行锁直到语句超时,表现为该锁停在 `locked` 且周期处理每分钟空转)。该分支是必须的出路:`ActiveLock` 对配置缺失按仍未生效处理fail-closed不放开复机若周期处理也跳过这些行持锁卡将永久禁止一切复机且无自动出路。
2. **恢复扫描**:扫描 `anomaly_flag=0``stop_status`/`resume_status` 处于**未决集合 `{submitted, unknown, failed}`** 的锁;**只查询网关状态回填,绝不重复发起停复机**;确认成功 → 回填任务状态(`confirmed` 只写一次条件更新按未决集合为谓词并补写卡状态覆盖「Gateway 成功但 DB 更新失败」场景);自提交起超过 **30 分钟**(常量定义)仍不可查 → `anomaly_flag=1` + 安全失败原因,退出扫描转人工,不自动删除锁。
- **复机消费者**:结构同停机消费者,认领字段 `resume_submitted_at`,复用 `resumeCardWithRetry`,成功后写 `network_status=online``resumed_at`,并**只在该卡停因正是 `channel_threshold` 时清除停因**(不覆盖 arrears/manual 等其他停因)。
- 周期处理与恢复 Handler 审计上下文固定 `ActorKind=AuditActorScheduledJob``Source=AuditSourceScheduler`