邹进
|
94cbf2adab
|
feat: 采集记录成功失败分表并保存网关原始数据,到期归档 csv.gz,新增记录分页查询接口
- 网关客户端新增原始数据收集器,记录最后一次尝试的明文请求、HTTP 状态、响应体与 code/msg/trace_id
- tb_card_traffic_collection 只写成功读数,新增 carrier_id 与原始数据列;新增 tb_card_traffic_collection_failure,失败不判断有无套餐并带错误详情
- 采集记录在线保留当月加最近 2 个整月,到期分区摘出、导出 csv.gz、校验行数与 SHA-256 后删除,本地保留 3 个月
- 新增采集成功/失败、卡日流量、套餐日流量详单、冲正流水、退款后处理尝试列表接口:可查单个也可查全部,分页与条件筛选
- 停复机记录支持资产标识、场景、原因、指令号筛选;单卡历史支持动作、结果、来源筛选
- 单卡采集记录支持筛选与合并失败记录;套餐日流量详单支持分页;退款列表支持后处理状态筛选
- 测试环境 api、worker 日志分目录,保留 40 个压缩备份;worker 挂载 archive 目录
- 迁移 000272、000273 需维护者在测试库执行后再部署
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
2026-11-05 18:47:00 +09:00 |
|
邹进
|
5cf67b98de
|
feat: 网关只读资产改为数据表,只读资产只允许查询类调用
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 9m36s
- 新增 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 |
|
邹进
|
6266cf9d86
|
feat: 网关只读卡名单,测试环境导入的生产卡只允许查询
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 9m30s
- 新增 JUNHONG_GATEWAY_READONLY_ICCIDS:名单内的卡只放行查流量、卡状态、实名查询,
停机、复机、限速、实名认证等写操作在网关出口本地拦截、不发请求,返回明确失败
- 未配置时不生效;测试环境部署脚本配置卡 89861590172420410612 用于流量采集验证
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
2026-10-29 15:15:00 +09:00 |
|
邹进
|
9c3c258f16
|
feat: 卡流量读数先过采集队列再入账,扣减按采集时刻确定套餐
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 9m27s
- 每卡 Redis 采集队列(默认 N=3、跨天清空、回退容差 1 MB),攒满且不下降才写最后一个点
- 测试环境全量切换日快照计量,下线灰度名单、切换水位与卡表基线扣费;全部卡置待建起点
- 读数区分没给值与 0;有套餐的卡读数 0 也写快照与日用量 0 行;重置日比较基准为 0 照常防旧值
- 新增采集记录(按月分区保留 90 天)、人工冲正流水与后台接口、采集告警
- 扣减按采集时刻有效套餐查找,只对生效中套餐做状态迁移,查不到套餐按成功跳过
- 换货新卡(新设备下的卡)打待建起点;采集间隔上限只校验启用中的轮询配置
Change: add-card-traffic-queue-and-observed-deduction
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
2026-10-29 12:18:47 +09:00 |
|
邹进
|
2fe7c1f8ac
|
feat: 按运营商账户调度的分发器、卡任务执行器与模式切换
- 四个轮询处理器拆为步骤函数 Step(返回结果分类),旧 Asynq Handle 只做并发控制与原有重入队映射,行为不变;carrier 模式下旧 handler 直接结束
- 网关限流增加等待模式(ctx 标记),NSQ 消费者等名额到单步超时,超时按限流处理不计失败;记录限流等待次数
- 卡任务执行器:核对 token 并抢执行权,按配置步骤顺序串行执行到期检查(单步超时、总超时、panic 恢复、流量已触发评估时跳过套餐),执行中续期并 Touch,续期失败立即停止;收尾写回到期、连续失败、退避、延迟确认与告警
- 分发器:每秒按账户抢分发锁领取(执行上限按消费能力收紧、优先占比、按限流组剩余 QPS 估算),发布到 polling.card.{账户},发布失败释放;消费旧优先提示与手动触发;心跳与处理中标记到期计数
- NSQ 生产者与按账户动态订阅的消费者管理器,优雅退出宽限期
- 失败告警异步写 tb_polling_failure_alert(同卡同类型一条未处理,成功转已恢复),账户窗口内告警数超阈值产生账户级告警
- 模式监听:切 carrier 时旧分片调度停止出队,加锁初始化新结构后开始领取并订阅;回 legacy 时停止消费、重建旧分片队列;生命周期(API 与 Worker)在 carrier 模式写账户队列
|
2026-10-25 18:44:23 +09:00 |
|
邹进
|
42e881576d
|
feat: 卡网关按运营商账户限流并记录停复机调用
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 9m33s
- 新增网关限流:按本系统运营商账户(卡 carrier_id)→ 限流组 → 操作限制每秒请求数,每次 HTTP 尝试计量,默认限流、仅后台人工点击/通道阈值/自动续费/手动刷新豁免;支持只统计与拦截两种模式,默认只统计
- Asynq 遇限流不计失败、固定短延迟重试;轮询任务与停复机业务重试遇限流短延迟重排
- 停机、复机不再使用网关内部重试,只发一次请求
- 网关返回结构化错误;新增上游错误分类规则表与测试接口
- 新增按月分区的停复机记录表:系统自动停复机只写记录,不再写统一审计与集成日志;普通轮询查询不再写集成日志
- 新增限流组、错误分类、停复机记录、按账户调用统计与枚举后台接口
- 迁移 000243~000246;同步 OpenSpec 提案(含后续 6 个 change)与技术方案、工程约束
|
2026-10-24 15:06:41 +09:00 |
|
|
|
7891189712
|
feat(代理自充): AUG26-017 代理自充收款方式与线下预存款审批字段
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 8m52s
- 受控配置新增代理在线自充允许范围(仅微信/仅支付宝/同时支持),读侧与创建侧取允许范围与可用商户池交集,两侧失败关闭
- 新增允许范围查询与修改端点,读限代理与平台账号、写限超级管理员,复用受控配置写服务留痕
- tb_agent_recharge_record 新增交易流水号、线下收款方式三列快照与其他凭证列(成对迁移 000213)
- 线下申请校验启用的收款方式字典项与必填交易流水号,交易流水号独立于在线渠道交易号、不参与去重
- 扩展 offline_recharge_approval 场景可映射字段白名单与字典引用保护
- 新增付款凭证识别能力与交易流水号预填接口,识别不落库、日志不记录载荷
|
2026-09-11 15:21:23 +08:00 |
|
|
|
5e552d99bc
|
收口审计治理与套餐任务进展
Constraint: 在线热修前必须保存当前迭代分支全部有效代码进展
Confidence: medium
Scope-risk: broad
Directive: 后续修改需保持审计事件与业务事务边界一致
Tested: git diff --cached --check
Not-tested: 未运行全量测试,提交用于切换分支前保存既有工作
|
2026-08-05 14:30:54 +08:00 |
|
|
|
73f5125d3d
|
七月迭代短暂完结,还有很多后端的关键东西没有弄,这是一版赶时间做的东西
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 8m26s
|
2026-07-25 17:06:58 +08:00 |
|
|
|
a18ed8bc8d
|
暂存一下,防止丢失
|
2026-07-24 16:07:18 +08:00 |
|
|
|
3f21f7a7d6
|
让超时时间设置成60秒
|
2026-06-21 17:06:40 +08:00 |
|
Break
|
bcbc290bad
|
卡新增imei字段
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 8m10s
|
2026-05-26 16:30:12 +08:00 |
|
|
|
98ff88d5c3
|
开放接口,修复上游同步不对的问题
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 7m55s
|
2026-05-11 11:20:48 +08:00 |
|
|
|
74c7b27327
|
切卡模式更新
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 7m58s
|
2026-04-29 10:18:15 +08:00 |
|
|
|
c3ae7fcfbc
|
修复设备WiFi上游请求参数
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 7m40s
|
2026-04-27 15:19:23 +08:00 |
|
|
|
ba73913a41
|
当前卡的逻辑变更
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 7m53s
|
2026-04-24 09:25:44 +08:00 |
|
|
|
6eb6d381f7
|
日志
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 7m32s
|
2026-04-22 16:58:04 +08:00 |
|
|
|
7137ed087f
|
修复序列化的问题
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 7m29s
|
2026-04-22 15:24:39 +08:00 |
|
|
|
a9690a49db
|
提交
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 7m33s
|
2026-04-22 15:06:01 +08:00 |
|
|
|
0f58886454
|
增加日志,提交流程图
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 7m42s
|
2026-04-22 14:49:09 +08:00 |
|
|
|
fd795d8742
|
feat: 新增设备切卡模式接口 SetSwitchMode
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 7m32s
|
2026-04-18 16:22:30 +08:00 |
|
|
|
dd408fcdca
|
日志输出
|
2026-04-15 11:17:09 +08:00 |
|
|
|
ecfa417c15
|
设备调用问题
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 7m12s
|
2026-04-02 11:05:21 +08:00 |
|
|
|
50dbc52432
|
fix: C端资产详情设备补充已连接数(client_number)字段
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Has been cancelled
Gateway sync-info 返回的 client_number 字段未在整条数据链路中传递,
导致 C 端资产详情的设备实时状态缺少已连接客户端数。
修改范围:
- Gateway 模型 SyncDeviceInfoResp 新增 ClientNumber
- B 端 DTO DeviceGatewayInfo 新增 ClientNumber
- C 端 DTO DeviceRealtimeInfo 新增 ClientNumber
- 两层映射函数同步补充字段传递
|
2026-03-30 10:18:30 +08:00 |
|
|
|
f5dd2ce4ab
|
fix: Gateway 响应类型兼容 — 新增 FlexBool/FlexInt 处理设备返回的字符串类型字段
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 7m4s
部分设备厂商(如华为)的 Gateway 响应中 bool/int 字段返回为字符串(wifi_enabled: "1"、battery_level: "30"),
导致 sonic 严格类型检查反序列化失败,整个设备实时数据丢失。
- 新增 FlexBool 类型:兼容 true/false、"1"/"0"、"true"/"false"
- 新增 FlexInt 类型:兼容 30、"30"、null
- SyncDeviceInfoResp 所有 bool/int 字段改用 Flex 类型
- 更新 B 端和 C 端 DTO 映射函数的类型转换
|
2026-03-28 18:24:17 +08:00 |
|
|
|
02b10f87cf
|
feat: 新增退款管理模块 — 完整的退款审批流程、佣金回扣和资产重置
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 7m8s
新增退款申请全生命周期管理:创建/列表/详情/审批通过/拒绝/退回/重新提交
审批通过后异步执行佣金全额回扣(扣减各代理佣金钱包)和资产重置(套餐失效+停机+世代重置)
新增 tb_refund_request 表(迁移 000093)、RefundRequest Model、8 个 DTO
新增 Store/Service/Handler/路由注册,仅平台用户可访问
|
2026-03-28 17:57:52 +08:00 |
|
|
|
5e64c64ce3
|
修复
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 7m5s
|
2026-03-28 17:12:29 +08:00 |
|
|
|
00dba42a63
|
feat(03.1-01): 补全 Gateway SyncDeviceInfoResp 缺失字段及 B 端 DeviceGatewayInfo DTO
- SyncDeviceInfoResp 新增 Rsrp/Rsrq/Sinr/WifiPassword/IPAddress/WANIP/LANIP/MaxClients/ConnectTime/Status/IMSI/ULStats/DLStats/LimitSpeed/SyncInterval 共 15 个字段
- asset_dto.go 新增 DeviceGatewayInfo B 端实时状态结构体(49 字段,全部含 description tag)
- AssetRealtimeStatusResponse 新增 DeviceRealtime *DeviceGatewayInfo 字段
- AssetResolveResponse 新增 5 个设备 DB 缓存字段(online_status/last_online_time/software_version/switch_mode/last_gateway_sync_at)
|
2026-03-28 13:17:52 +08:00 |
|
|
|
825def88a4
|
feat(03-01): Gateway SyncDeviceInfo 方法 + DTO 字段扩展
- gateway/models.go:新增 SyncDeviceInfoReq / SyncDeviceInfoResp 结构定义
- gateway/device.go:新增 SyncDeviceInfo() 方法,POST /device/sync-info
- device_dto.go:DeviceResponse 新增 5 个 sync-info 同步字段;DeviceCardBindingResponse 新增 is_current
- asset_dto.go:BoundCardInfo 新增 is_current 字段
|
2026-03-28 11:33:01 +08:00 |
|
|
|
b5147d1acb
|
设备的部分改造
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 7m34s
|
2026-03-10 10:34:08 +08:00 |
|
|
|
a83dca2eb2
|
fix: 修复 Gateway 流量卡接口路径、响应模型和时间戳与上游文档不一致
- 时间戳从 UnixMilli (13位) 改为 Unix (10位秒级)
- 实名状态接口路径 /realname-status → /realName
- 实名链接接口路径 /realname-link → /RealNameVerification
- RealnameStatusResp: status string → realStatus bool + iccid
- FlowUsageResp: usedFlow int64 → used float64 + iccid
- RealnameLinkResp: link → url
|
2026-03-07 11:29:34 +08:00 |
|
|
|
353621d923
|
移除所有测试代码和测试要求
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 6m33s
**变更说明**:
- 删除所有 *_test.go 文件(单元测试、集成测试、验收测试、流程测试)
- 删除整个 tests/ 目录
- 更新 CLAUDE.md:用"测试禁令"章节替换所有测试要求
- 删除测试生成 Skill (openspec-generate-acceptance-tests)
- 删除测试生成命令 (opsx:gen-tests)
- 更新 tasks.md:删除所有测试相关任务
**新规范**:
- ❌ 禁止编写任何形式的自动化测试
- ❌ 禁止创建 *_test.go 文件
- ❌ 禁止在任务中包含测试相关工作
- ✅ 仅当用户明确要求时才编写测试
**原因**:
业务系统的正确性通过人工验证和生产环境监控保证,测试代码维护成本高于价值。
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
|
2026-02-11 17:13:42 +08:00 |
|
|
|
3f63fffbb1
|
chore: apply task changes
|
2026-01-30 17:05:44 +08:00 |
|
|
|
9600e5b6e0
|
做一次小小的备份,等会又删掉了
|
2025-11-11 10:09:45 +08:00 |
|
|
|
37c4404293
|
初始化项目结构
|
2025-11-10 15:57:21 +08:00 |
|