Files
邹进 5cf67b98de
All checks were successful
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 9m36s
feat: 网关只读资产改为数据表,只读资产只允许查询类调用
- 新增 tb_gateway_readonly_card(卡 ICCID / 设备 IMEI)与开关 JUNHONG_GATEWAY_READONLY_ENABLED,
  替换环境变量名单 JUNHONG_GATEWAY_READONLY_ICCIDS
- 只读资产只放行查卡状态、查实名、查流量、查设备信息、查设备槽位、同步设备状态;
  停机、复机、限速、实名认证链接与设备写操作在网关出口本地拦截;查表失败按拦截;不缓存
- 测试环境部署开启只读模式;新增技术方案与清理顺序文档

Change: add-gateway-readonly-prod-import

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-29 17:55:52 +09:00

3.4 KiB
Raw Permalink Blame History

Why

生产仍是卡表基线算法,2026-10-29 核对到 1632 张有生效套餐的卡被"卡住"(基线高于运营商读数、套餐长期扣 0),其中 916 张自 10-26 起持续用量、合计约 1635 GB 未扣。单卡导入测试环境已证明新计量逻辑(add-card-traffic-queue-and-observed-deduction)能解冻并按增量扣费,但无法说明全量差距。需要把生产卡、设备与套餐全量导入测试环境,按现有轮询跑真实读数算出差距;这些是真实用户的卡与设备,测试环境对它们只能查询,绝不能停复机或发其他写指令。现有环境变量名单 JUNHONG_GATEWAY_READONLY_ICCIDS 承载不了约 12 万个卡号与设备号。依据为 docs/测试环境导入生产数据验证流量计量技术方案.md(2026-10-29 已确认)。

What Changes

  • 新增网关只读资产表 tb_gateway_readonly_card(identifier 为网关请求卡号:卡为 ICCID、设备为 IMEI,唯一)。
  • 新增环境变量 JUNHONG_GATEWAY_READONLY_ENABLED:开启后,只读表中的资产只允许查询类网关调用(查卡状态、查实名、查流量、查设备信息、查设备槽位、同步设备状态);停机、复机、限速、实名认证链接及设备切卡、恢复出厂、重启、WiFi 配置、模式切换在网关出口本地拦截、不发请求、返回明确失败;查表失败按拦截处理;不做内存缓存。未配置或关闭时不查表(生产不配置)。
  • BREAKING(测试环境配置):删除 JUNHONG_GATEWAY_READONLY_ICCIDS,现有两张只读卡迁入只读表。
  • 测试环境全量导入生产卡(约 9.86 万)、设备(约 2.01 万)、有效绑定、卡套餐与设备套餐(待生效、生效中、已用完;保留开始与结束时间、真实已用量、真总量与虚流量条款快照、重置周期、优先级与主套餐 / 加油包关系),全部挂测试代理 9「测试采购部」并置"待建起点";手机号、虚拟号按原值导入。导入用临时脚本,不提交;只读表必须先于导入写入并确认开关已部署。
  • 导入资产完全按测试环境现有轮询配置与代码逻辑运行,不另设配置、不改业务流程。
  • 输出差距报表:导入后测试环境新增扣减 vs 生产同期新增扣减、是否已到停机线。
  • 不在本 Change:订单、钱包、分佣、退款、个人客户、审批等导入与验证;生产发布与回滚;验证结束后的撤除按 docs/测试环境生产卡只读模式清理顺序.md 另行执行。

Capabilities

New Capabilities

  • gateway-readonly-assets:网关只读资产表、开关、查询类调用放行与其余调用拦截、查表失败拦截。

Modified Capabilities

(无)

Impact

  • 数据库:新增成对迁移建 tb_gateway_readonly_card(不写入数据)。
  • 代码:internal/gateway/client.go、internal/gateway/readonly_guard.go(改为按表判断)、新增只读表存储、pkg/config(删 ReadonlyICCIDs,加 ReadonlyEnabled)、cmd/api/main.go、cmd/worker/main.go 注入。
  • 部署:.gitea/workflows/deploy.yaml 改为 JUNHONG_GATEWAY_READONLY_ENABLED=true;docker-compose.prod.yml 传递新变量、删除旧变量。
  • 数据:测试库写入约 9.86 万卡、2.01 万设备、约 2.9 万套餐及只读表约 12 万行;导入脚本只连接 junhong_cmp_test,生产只读导出。
  • 范围:测试环境。