|
|
315a7de3e4
|
docs(归档): 归档代理自充支付方式与员工代收款路由前缀两个变更
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 53s
- add-agent-self-recharge-payment-methods 归档为 2026-09-11-add-agent-self-recharge-payment-methods,delta 应用后主规格 agent-funds-commission 完成 1 条 Requirement 改名并新增 4 条 Requirement
- 在可达操作索引补充代理自充支付方式配置与付款凭证识别共 3 个端点
- 同步 requirement-evidence.json 与 entry-capability-requirement-matrix.json 证据链
- fix-employee-collection-route-prefix 归档为 2026-09-11-fix-employee-collection-route-prefix 并勾选任务 2.5
门禁:context-health 通过、openspec validate --all 40 passed / 0 failed、doctor healthy
|
2026-09-11 15:50:15 +08:00 |
|
|
|
9c3e3fe32b
|
归档员工代收款账单闭环变更并同步主规格
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 1m36s
- 新增主规格 openspec/specs/employee-collection-bill/spec.md(5 条 Requirement、22 个 Scenario)
- 变更目录归档至 openspec/changes/archive/2026-09-11-add-employee-collection-bills
|
2026-09-11 09:45:12 +08:00 |
|
|
|
dc4e0d4103
|
归档支付商户池变更并同步主规格
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 1m25s
|
2026-09-10 12:03:28 +08:00 |
|
|
|
a9e2302f7c
|
1
|
2026-09-10 10:53:07 +08:00 |
|
|
|
696120ab38
|
feat: 资产套餐历史增加主子层级查询
|
2026-09-07 17:17:15 +08:00 |
|
|
|
c7c2b17d78
|
归档
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 54s
|
2026-09-07 11:34:23 +08:00 |
|
|
|
5424751993
|
修复停复机忽略免实名策略并归档变更
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Has been cancelled
|
2026-09-07 10:06:17 +08:00 |
|
|
|
370fd3e67f
|
update
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 10m49s
|
2026-09-03 09:28:28 +08:00 |
|
|
|
395e5fb47c
|
修复套餐接续停机竞态与轮询兜底
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 11m13s
|
2026-08-29 16:27:48 +08:00 |
|
|
|
62f3d25e81
|
修复批量订购
|
2026-08-26 14:54:26 +08:00 |
|
|
|
5797fd0e94
|
修复企微兜底机制
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 10m40s
|
2026-08-20 18:06:45 +08:00 |
|
|
|
22b95db2f9
|
每日清理
|
2026-08-20 12:03:17 +08:00 |
|
|
|
656a921ff0
|
富友支付支持
|
2026-08-18 17:13:20 +08:00 |
|
|
|
46c8e819df
|
修改相关证据
|
2026-08-18 16:30:16 +08:00 |
|
|
|
c8052df8eb
|
补充退款列表应当让本店铺的人看见
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 8m30s
|
2026-08-18 11:44:30 +08:00 |
|
|
|
b5285877bf
|
归档
|
2026-08-13 17:45:49 +08:00 |
|
|
|
6883b5b42b
|
归档
|
2026-08-13 17:26:36 +08:00 |
|
|
|
fcfa347005
|
修复
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 8m38s
|
2026-08-12 10:42:35 +08:00 |
|
|
|
619d0c5efe
|
提案
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 51s
|
2026-08-11 15:39:51 +08:00 |
|
|
|
a795ca3650
|
修复通知
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 8m25s
|
2026-08-11 11:18:11 +08:00 |
|
|
|
f6b11eb9ac
|
修复
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 8m23s
|
2026-08-10 17:37:55 +08:00 |
|
|
|
77ce9db722
|
并发监控修复
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 8m20s
|
2026-08-10 16:58:33 +08:00 |
|
|
|
f15a64395f
|
修复反馈
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 8m30s
|
2026-08-10 16:30:38 +08:00 |
|
|
|
79e2d9ff92
|
重置项目上下文与规范文档
|
2026-08-07 16:18:07 +08:00 |
|
|
|
072ec1db7e
|
修复企微的问题
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 8m15s
|
2026-07-27 17:04:32 +08:00 |
|
|
|
95fc0b0a1b
|
修复一些问题,主要是生效套餐
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 8m16s
|
2026-05-12 10:32:38 +08:00 |
|
|
|
3a2e3f2571
|
浅浅升级一下
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 8m8s
|
2026-05-06 14:41:14 +08:00 |
|
|
|
b4a9e0c1c9
|
归档
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 7m52s
|
2026-04-30 15:59:40 +08:00 |
|
|
|
70fb7dadef
|
归档
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 7m53s
|
2026-04-30 11:58:33 +08:00 |
|
|
|
9238eeb56e
|
更新提案
|
2026-04-30 11:18:13 +08:00 |
|
|
|
6b1fbf4a92
|
修复金额的问题
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 7m30s
|
2026-04-23 10:09:23 +08:00 |
|
|
|
2b3a9cb33f
|
feat: 新增套餐使用记录实付金额快照字段 paid_amount
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 7m19s
- 新增迁移 000129:tb_package_usage 添加 paid_amount BIGINT 字段,存量数据通过 JOIN tb_order 回填
- PackageUsage Model 新增 PaidAmount *int64 字段
- 4 个写入点(order service 主套餐/加油包、auto_purchase 主套餐/加油包)赋值 order.ActualPaidAmount
- AssetPackageResponse DTO 新增 paid_amount 字段
- GetCurrentPackage / GetPackages 填充 paid_amount,接口直接返回购买价格无需 JOIN 订单表
|
2026-04-18 10:19:21 +08:00 |
|
|
|
e52671eaed
|
归档提案
|
2026-04-18 09:35:27 +08:00 |
|
|
|
4aab0bcbf2
|
提案以及归档
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 4m39s
|
2026-04-18 09:10:29 +08:00 |
|
|
|
5d9be1d7e4
|
fix: 修正轮询配置多匹配逻辑,支持同卡匹配多个配置并按 priority 合并 interval
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 7m27s
核心变更:
- MatchConfig 改为 MatchConfigs,返回所有匹配配置
- MergedTaskIntervals 按 task type 合并各配置,选取最高优先级(非 nil 且最小 priority 值)
- hasAnyEnabledInterval 过滤所有 interval 均为 NULL 的配置
- calcInitialDelay 重构为纯函数,接收 interval 参数
- 移除 getEnabledTaskTypes 和 getIntervalByTaskType(被 MergedTaskIntervals 替代)
- scheduler.go 新增心跳 key + 顶层 panic recovery + Init 完成守卫
- initializer.go 批量失败日志升级为 Error,逐条检查 Pipeline 命令错误
- 数据迁移:禁用 id=29 的轮询配置(所有 interval 均为 NULL)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
|
2026-04-16 14:27:47 +08:00 |
|
|
|
5065d925ad
|
fix: 修正套餐激活和时间字段nullable问题
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 7m33s
核心变更:
1. Model层时间字段改为*time.Time并设为nullable
- PackageUsage.ActivatedAt/ExpiresAt
- PersonalCustomerDevice/ICCID/Phone.LastUsedAt/VerifiedAt
2. 数据库迁移:
- activated_at/expires_at列移除NOT NULL约束
- 清洗零值记录(status=0且activated_at<'2000-01-01')
3. 新增ActivateSpecificPackage方法:精准激活指定套餐,
修复HandlePackageQueueActivation从"查找过期包"改为直接激活payload指定套餐
4. 新增孤儿套餐恢复扫描:Worker启动或每次套餐检查时,
自动发现并恢复无status=1主套餐的孤儿载体
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
|
2026-04-16 11:14:39 +08:00 |
|
|
|
8bf1282378
|
归档: add-polling-card-status-with-verbose-log,同步主规范
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 7m24s
change 目录归档至 openspec/changes/archive/2026-04-15-add-polling-card-status-with-verbose-log/
新建主规范 openspec/specs/polling-card-status-task/spec.md(6个需求)
追加 verbose log 需求至 openspec/specs/polling-task-handlers/spec.md(4个新需求)
protect handler 规范更新字段名:network_status → network_status_at_check + action_taken
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)
Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
|
2026-04-15 12:23:05 +08:00 |
|
|
|
4a1e44f9e1
|
提案
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Has been cancelled
|
2026-04-15 11:17:23 +08:00 |
|
|
|
d9de704d73
|
归档
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 49s
|
2026-04-14 12:14:29 +08:00 |
|
|
|
7308afe801
|
归档
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 7m18s
|
2026-04-13 15:03:02 +08:00 |
|
|
|
7e613a0d2b
|
归档: fix-status-convention-comments
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)
Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
|
2026-04-11 12:21:02 +08:00 |
|
|
|
677d6239ce
|
fix: 统一佣金状态常量并修复佣金明细关联查询
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 7m33s
- 删除 model/commission.go 中与 constants 包冲突的旧常量(值=1/2)
- 所有服务层改用 constants.CommissionStatusReleased(值=3)写入和查询
- 数据库迁移:status 1→3(已发放),2→4(已失效)
- 修复佣金明细列表接口,通过 JOIN 关联返回 order_no、iccid、virtual_no、order_created_at
- 新增 seller_shop_id / seller_shop_name 销售来源字段
- 统计接口过滤条件从精确匹配改为排除无效(NOT IN 4,99)
- 更新 OpenAPI 文档及 commission-record-query spec
|
2026-04-11 10:42:37 +08:00 |
|
|
|
5496cb58aa
|
feat: 订单创建时快照买家手机号/昵称和套餐类型
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Has been cancelled
新增字段:
- tb_order: buyer_phone, buyer_nickname(个人客户下单时快照)
- tb_order_item: package_type(套餐类型快照)
后台订单列表支持按 buyer_phone 精确过滤查询。
OpenSpec: order-buyer-snapshot
|
2026-04-10 17:12:56 +08:00 |
|
|
|
afc6d7fc76
|
docs: 归档 excel-import-refactor,同步更新主 specs
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 50s
- 将变更目录移至 archive/2026-04-09-excel-import-refactor
- device-import spec:更新为固定列位置读取(IMEI 调整至第5列),新增 MaxSimSlots 范围校验说明
- iot-card-import-task spec:更新为固定列位置读取,新增"导入批次支持卡业务类型"需求
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
2026-04-09 17:37:44 +08:00 |
|
|
|
ff7e749bf2
|
归档
|
2026-04-09 14:53:48 +08:00 |
|
|
|
6dfc5c0301
|
feat: 资产解析接口新增实名时间字段
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 7m5s
- AssetResolveResponse 新增 real_name_at 字段:card 类型取 first_realname_at,device 类型取绑定卡中最小的实名时间
- BoundCardInfo 新增 real_name_at 字段:各卡自己的 first_realname_at
- RefreshCardDataFromGateway 手动刷新路径补写实名时间:检测到 0→1 变化时同步写入 first_realname_at
- 同步更新 asset-resolve 规格文档
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
2026-04-09 12:12:28 +08:00 |
|
|
|
e9df1e7ded
|
feat: IoT卡新增绑定设备虚拟号快照字段
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 7m28s
- tb_iot_card 新增 device_virtual_no 字段,存储绑定设备的虚拟号快照
- 列表/详情接口响应新增 device_virtual_no 字段
- 列表接口 is_standalone 改为可选参数(不传返回全部卡)
- 移除列表接口 virtual_no 查询参数
- 绑卡/解绑时同步更新 device_virtual_no 快照
- 设备导入时批量写入 device_virtual_no 快照
- 归档 feat-iot-card-device-virtual-no 变更提案
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
2026-04-09 10:50:46 +08:00 |
|
|
|
80c6f6c756
|
feat: 资产标识符标准化、资产历史订单查询及导入虚拟号强制验证
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 7m21s
主要变更:
- 新增 AssetIdentifier 模型及 Store,统一管理资产标识符(ICCID/IMEI/SN 等)
- 新增迁移:asset_identifier 表、order 表新增 asset_identifier 字段、iot_card.virtual_no NOT NULL 约束
- 资产 Handler/Service/Route 全面重构,支持标识符路由查询与解析
- 新增资产历史订单查询接口,支持跨设备/卡/钱包维度的订单聚合
- 设备与物联卡导入任务强制校验虚拟号,缺失时直接拒绝
- Excel 工具函数优化,前端导入指引文档同步更新
- 归档三个 OpenSpec 提案:asset-identifier-standardization、asset-historical-orders、import-mandatory-virtual-no
- 更新 OpenAPI 文档及相关 DTO
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)
Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
|
2026-04-07 17:39:36 +08:00 |
|
|
|
434a8b0349
|
feat: 轮询系统重构(分片队列 + 停复机统一 + Handler 拆分)
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 9m46s
【核心变更】
1. 停复机逻辑统一(StopResumeService)
- 新增 EvaluateAndAct 统一入口,封装三条件停复机判断
- 停机条件:无套餐(no_package) / 流量耗尽(traffic_exhausted) / 未实名(not_realname)
- 复机条件:stop_reason 合规 + 有套餐且未耗尽 + 已实名或行业卡
- 修复设备套餐 Bug:hasValidPackage 按 device_id 查套餐,而非仅 iot_card_id
- 设备维度停复机加幂等锁(Redis SetNX,TTL 30s),防止多卡并发重复调 Gateway
2. Redis 分片队列(PollingQueueManager)
- 新建 queue_manager.go,封装所有轮询 Redis 操作
- 16 分片 Sorted Set,Key 格式:polling:shard:{shardID}:queue:{taskType}
- Lua 脚本原子出队(ZRANGEBYSCORE + 分批 ZREM),消除竞态窗口
- 新增背压检测:队列深度超 50 万时 Scheduler 跳过该分片
- RemoveFromAllQueues 覆盖 4 种任务类型(含 protect)
3. Handler 拆分(polling_handler.go 1360行 → 5个专注文件)
- polling_base.go:共享基类(并发控制/卡缓存/重入队)
- polling_realname_handler.go:实名采集,实名 0→1 时立即触发复机
- polling_carddata_handler.go:流量采集,保留跨月边界检测逻辑
- polling_package_handler.go:套餐采集,委托 EvaluateAndAct 决策
- polling_protect_handler.go:保护期一致性检查,保护期内强制修正
4. 配置管理(PollingConfigManager)
- 新建 config_manager.go,从 scheduler.go 提取配置职责
- 内存缓存 + 5 分钟定时刷新,刷新失败保留原缓存
- 修复 getCardCondition:停机卡返回 suspended,不再错配 activated 配置
5. 渐进式初始化(CardInitializer)
- 新建 initializer.go,分批加载(每批 10 万),批次间 sleep 500ms
- 过滤 enable_polling=false 的卡,初始化完成前 Scheduler 不出队
6. 卡生命周期服务(PollingLifecycleService)
- 新建 lifecycle_service.go,替代已删除的 callbacks.go 和 api_callback.go
- OnCardCreated/OnCardEnabled/OnCardStatusChanged 入队前检查 enable_polling
7. Scheduler 精简(1000+行 → 227行)
- 保留纯调度循环:scheduleLoop + processShardSchedule + enqueueBatch
- 保留每 10 秒触发套餐过期检测和流量重置
- 移除所有 DB 操作、配置加载、卡初始化逻辑
8. 轮询管控 API(enable_polling)
- 新增 PUT /api/admin/assets/:id/polling-status 接口
- 支持对设备/卡维度开关轮询,关闭后从所有分片队列移除
9. 数据库迁移
- 000103:tb_device 新增 enable_polling 字段(boolean, NOT NULL, DEFAULT true)
- 000104:新增 suspended 轮询配置,为 activated 配置补全 protect_check_interval
【文件统计】
- 新增:19 个文件(handler × 5、polling 组件 × 4、迁移 × 3 等)
- 修改:20 个文件(bootstrap 注入、store 接口、monitoring 适配分片等)
- 删除:3 个文件(polling_handler.go、callbacks.go、api_callback.go)
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)
Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
|
2026-04-07 12:27:04 +08:00 |
|
|
|
8980e6d999
|
fix: 补全三处轮询覆盖缺口
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 7m11s
问题一:protect 轮询任务从未被调度器初始化入队
PollingConfig 新增 protect_check_interval 字段(NULL=不参与),
调度器 initCardsBatch/initCardPolling/requeueCard 补全 protect 队列
初始化逻辑,IotCard 新增 last_protect_check_at 记录上次检查时间。
迁移文件:000102_add_polling_protect_fields
问题二:设备套餐流量耗尽时绑定卡未被停机
UsageService.checkAndTriggerSuspension 新增 carrier_type=device 分支,
通过 DeviceSimBindingStore.ListByDeviceID 查询绑定卡,对每张卡异步
触发 CheckAndStopCard,同步注入 Bootstrap 依赖。
问题三:主套餐过期后不立即停机,依赖下次轮询兜底
PackageActivationHandler.processExpiredPackage 在 updateCarrierSuspended
Status 后,若载体无后续生效套餐,立即异步调用 CheckAndStopCard(iot_card
类型直接触发,device 类型遍历绑定卡),消除停机延迟窗口。
Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
|
2026-04-02 14:36:24 +08:00 |
|