feat: 停复机新规则转正,删除总开关与旧口径
All checks were successful
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 9m35s
All checks were successful
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 9m35s
- 删除总开关 stop_resume.unified_rule_enabled(配置、加载、部署工作流与 docker-compose.prod.yml 环境变量) - 复机不看停机原因:删除只对轮询停因复机的旧分支与 ListByDeviceIDAndPollingStopReasons;设备复机取全部停机卡 - 实名门槛只按卡所属通道实名管控判断,删除行业卡与卡/设备实名策略放行;暂停轮询的卡不自动停复机无条件生效 - 通道阈值新周期解锁后的复机条件固定为新规则复机条件 - 资产自动续费复机同步新规则:不看停因、暂停轮询不复机、设备取全部停机卡、复机成功清除停因 - 实名轮询不再按行业卡跳过;所属运营商账户未开启实名管控时跳过查询,但卡未实名且所在资产有等待实名激活的套餐时照常查询,避免囤货套餐无法激活
This commit is contained in:
@@ -86,12 +86,16 @@
|
||||
|
||||
### Requirement: 实名轮询按通道实名管控跳过
|
||||
|
||||
系统 SHALL 在卡所属运营商账户未开启实名管控时跳过该卡的实名查询(结果不影响停复机),开启时照常查询;MUST NOT 再按卡类别(行业卡)跳过实名查询。
|
||||
系统 SHALL 在卡所属运营商账户未开启实名管控时跳过该卡的实名查询(结果不影响停复机),开启时照常查询;MUST NOT 再按卡类别(行业卡)跳过实名查询。例外:卡未实名且所在资产(绑定设备时按设备)有等待实名激活的待生效套餐时,即使账户未开启实名管控也 MUST 照常查询,保证囤货套餐在卡实名后激活。查询账户实名管控失败时按可恢复失败处理并重入队。
|
||||
|
||||
#### Scenario: 未开管控账户的普通卡
|
||||
- **WHEN** 卡所属账户 `realname_control_enabled = 0`,实名检查到期
|
||||
- **THEN** 系统不调用网关查实名,按正常间隔安排下次检查
|
||||
|
||||
#### Scenario: 未开管控账户中等待实名激活的卡
|
||||
- **WHEN** 卡所属账户 `realname_control_enabled = 0`,卡未实名,所在设备有等待实名激活的待生效套餐
|
||||
- **THEN** 系统照常调用网关查实名,卡实名后激活该套餐
|
||||
|
||||
#### Scenario: 开启管控账户的行业卡
|
||||
- **WHEN** 卡所属账户开启实名管控,行业卡实名检查到期
|
||||
- **THEN** 系统调用网关查实名
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
|
||||
## 2. 规则演练
|
||||
|
||||
- [x] 2.1 新增演练 Query:按批读取卡与资产数据,复用新规则判断函数(不受总开关影响,始终按新规则判断),支持假设的实名管控配置;只读。(纯判断函数 `internal/domain/stopresume`,读侧 `internal/query/stopresumerule` 按 1000 张一批读取绑定、设备轮询开关、套餐、通道实名管控与通道阈值锁;评估主流程仍按逐卡读取,第二次发布并入时改为复用同一判断函数)
|
||||
- [x] 2.1 新增演练 Query:按批读取卡与资产数据,复用新规则判断函数(不受总开关影响,始终按新规则判断),支持假设的实名管控配置;只读。(纯判断函数 `internal/domain/stopresume`,读侧 `internal/query/stopresumerule` 按 1000 张一批读取绑定、设备轮询开关、套餐、通道实名管控与通道阈值锁;评估主流程仍按逐卡读取,与演练按同一套条件实现,未改为调用同一函数)
|
||||
- [x] 2.2 `GET /stop-resume-rule/dry-run`(运营商账户、停机原因筛选,汇总 + 分页明细),仅超级管理员与平台用户;导出场景 `stop_resume_rule_dry_run`。(另加 `POST /stop-resume-rule/dry-run/export` 创建导出任务;明细可按 result 筛选,汇总不受影响)
|
||||
- [x] 2.3 同步路由与文档生成入口,重新生成接口文档。
|
||||
|
||||
@@ -28,24 +28,24 @@
|
||||
|
||||
## 5. 开启新规则(运营与维护者,第一次发布上线后)
|
||||
|
||||
- [ ] 5.1 为需要实名的运营商账户设置 `realname_control_enabled = 1`。
|
||||
- [ ] 5.2 生产执行演练并导出明细,运营确认"将被复机 / 将被停机"清单;需保持停机的卡先关闭轮询。
|
||||
- [ ] 5.3 维护者在生产开启 `JUNHONG_STOP_RESUME_UNIFIED_RULE_ENABLED` 并重启全部进程;首日监控复机成功率与终态错误数,确认稳定运行。
|
||||
- [x] 5.1 为需要实名的运营商账户设置 `realname_control_enabled = 1`。(按用户 2026-10-25 决定"生产的都不用管",以测试环境为准:测试环境账户 1580、1583、1589 已开启实名管控)
|
||||
- [x] 5.2 生产执行演练并导出明细,运营确认"将被复机 / 将被停机"清单;需保持停机的卡先关闭轮询。(同上,测试环境已执行演练并核对,见 4.2)
|
||||
- [x] 5.3 维护者在生产开启 `JUNHONG_STOP_RESUME_UNIFIED_RULE_ENABLED` 并重启全部进程;首日监控复机成功率与终态错误数,确认稳定运行。(同上,测试环境部署配置已开启总开关并稳定运行;生产不处理)
|
||||
|
||||
## 第二次发布:转正(新规则在生产稳定运行后)
|
||||
|
||||
## 6. 删除总开关与旧口径
|
||||
|
||||
- [ ] 6.1 `stop_resume_unified.go` 并入主逻辑:删除 `unifiedStopResumeEnabled` 与各分支,`autoResumableStopReason` 恒为真,`autoControlSuspended`、`unifiedRealnameOK` 无条件生效。
|
||||
- [ ] 6.2 `stop_resume_service.go` 删除旧口径:`isRealnameOK` 行业卡与 `realname_policy` 分支、`isPollingStopReason` 限定、`ListByDeviceIDAndPollingStopReasons` 的调用。
|
||||
- [ ] 6.3 删除 `pkg/config/config.go`、`loader.go`、`defaults/config.yaml` 的总开关,`.gitea/workflows/deploy.yaml` 与 `docker-compose.prod.yml` 中的 `JUNHONG_STOP_RESUME_UNIFIED_RULE_ENABLED`。
|
||||
- [ ] 6.4 通道阈值新周期复机条件去掉开关分支,固定为新规则复机条件。
|
||||
- [x] 6.1 `stop_resume_unified.go` 并入主逻辑:删除 `unifiedStopResumeEnabled` 与各分支,`autoResumableStopReason` 恒为真,`autoControlSuspended`、`unifiedRealnameOK` 无条件生效。(`stop_resume_unified.go` 只保留暂停轮询判断与按通道实名管控的 `isRealnameOK`)
|
||||
- [x] 6.2 `stop_resume_service.go` 删除旧口径:`isRealnameOK` 行业卡与 `realname_policy` 分支、`isPollingStopReason` 限定、`ListByDeviceIDAndPollingStopReasons` 的调用。(`isPollingStopReason` 与 `ListByDeviceIDAndPollingStopReasons` 已删除;资产自动续费复机同步改为不看停因、暂停轮询不复机、设备取全部停机卡)
|
||||
- [x] 6.3 删除 `pkg/config/config.go`、`loader.go`、`defaults/config.yaml` 的总开关,`.gitea/workflows/deploy.yaml` 与 `docker-compose.prod.yml` 中的 `JUNHONG_STOP_RESUME_UNIFIED_RULE_ENABLED`。
|
||||
- [x] 6.4 通道阈值新周期复机条件去掉开关分支,固定为新规则复机条件。
|
||||
|
||||
## 7. 实名轮询
|
||||
|
||||
- [ ] 7.1 `polling_realname_handler.go`:删除按行业卡跳过;卡所属账户未开实名管控时跳过查询并按正常间隔重入队;账户查询失败按可恢复失败处理。
|
||||
- [x] 7.1 `polling_realname_handler.go`:删除按行业卡跳过;卡所属账户未开实名管控时跳过查询并按正常间隔重入队;账户查询失败按可恢复失败处理。(与提案不同:未开管控账户中,卡未实名且所在资产有等待实名激活的待生效套餐时照常查询,避免后台囤货套餐无法激活;规范已同步补充)
|
||||
|
||||
## 8. 第二次发布的编译与验证
|
||||
|
||||
- [ ] 8.1 `gofmt -w`;`go build ./cmd/api ./cmd/worker` 通过;全仓检索无 `UnifiedRuleEnabled` 残留;`openspec validate` 与 `openspec doctor --json` 通过。
|
||||
- [x] 8.1 `gofmt -w`;`go build ./cmd/api ./cmd/worker` 通过;全仓检索无 `UnifiedRuleEnabled` 残留;`openspec validate` 与 `openspec doctor --json` 通过。(validate 通过;当前 openspec 无 doctor 命令)
|
||||
- [ ] 8.2 测试环境:未开管控账户不查实名;开启管控账户的行业卡查实名并按未实名停机;通道阈值新周期解锁后按新规则复机或只解锁;停复机行为与第一次发布开启总开关后一致。
|
||||
|
||||
Reference in New Issue
Block a user