邹进
|
96ff9c1e35
|
fix: 换货迁移按套餐是否已开始与新资产占位决定主套餐状态
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 12m0s
- 未开始的主套餐(无生效、到期时间且无用量)迁移为待生效,新资产不满足实名条件(行业卡/已实名/无需实名)时标记等实名激活
- 已开始的主套餐在新资产无当前主套餐时原样迁移;新资产已有当前主套餐时改为待生效排队、清空周期与用量
- 迁移后重排新资产主套餐优先级,保证同一载体只有一个当前主套餐
- 换货审计记录套餐状态、优先级、用量的前后值
OpenSpec: fix-exchange-migration-package-state
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
2026-11-04 23:25:06 +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 |
|
邹进
|
62ec94adec
|
refactor: 出库时间更名为首次购买套餐时间,换货新资产不再按换货完成时间记录
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Failing after 38s
- 字段 outbound_at → first_purchase_at,记录表 tb_asset_outbound_record → tb_asset_first_purchase_record,接口 /outbound-records → /first-purchase-records,筛选参数与导出列同步更名
- 换货后的新资产不因换货写入,在当前世代真正支付套餐订单时才记录;记录来源只保留 order / backfill,去掉换货单字段
- 迁移 000266 重命名列、表、索引与约束;同步 Spec、设计、任务与前端接口变更说明
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
2026-10-27 16:47:02 +09:00 |
|
邹进
|
909f4d0ec2
|
feat: 实名即生效套餐沉默期、延期办理与资产出库时间
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Failing after 8m39s
- 迁移 000259~000265:套餐记录沉默期字段与扫描索引、套餐默认沉默期、延期政策/流水/订单/批次/明细 5 张表、默认政策与系统配置(总开关默认关闭)、企微审批白名单、卡与设备出库时间及出库记录
- 沉默期设置(订单发放、自动购包、钱包续费)、后台购买时调整(超默认值按政策免审或企微审批)、统一判定与激活闸门、排队与孤儿扫描跳过过期套餐、过期套餐禁止退款、每 10 分钟扫描
- 总开关专用接口与打开前 4 项检查;延期政策;延期资格与计费;H5 自助与后台二维码在线支付(商户池路由)、支付回调与查单恢复、线下登记、特殊/批量延期、异常重试与原路退款;沉默期审批场景与终态处理
- 换货沉默期流水与出库时间;卡/设备列表、详情、导出与出库记录接口;延期订单与即将过期套餐列表及导出;财务流水纳入延期支付
- 沉默期与出库时间回填工具 cmd/silence-backfill;前端接口变更说明
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
2026-10-27 16:32:58 +09:00 |
|
邹进
|
465016a333
|
fix: 第1批 F1、M12 换货清空客户绑定的审计写入失败
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 10m0s
- 换货清空旧资产绑定写 personal_customer.unbind_asset 时,资产资源带主体摘要却缺省为仅内部可见,
被审计写入拒绝并静默降级(“内部事件不得写入主体投影”);资产资源改为声明结论可见级别。
后台按虚拟号解除绑定(UnbindByVirtualNo)同样受益
- 设备换货完成审计不再把新设备已有的扫码绑定记为“新设备客户绑定”:换货已不迁移绑定
- 测试环境验证 F1(4.3)与 M12(4.4)完成
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
2026-10-12 09:21:46 +09:00 |
|
邹进
|
9ced14fa1b
|
fix: 第1批 F1、M12 一资产一号与换货按手机号关联校验
- F1 一个资产同时只能有一个有效手机号关联,他号绑定返回 1192(不含号码),同号幂等
- 登录 need_bind_phone 改看资产是否已有有效关联,新增 asset_phone_bound、asset_phone_is_own;H5 绑定按客户/资产两侧状态分别写入
- 客户换号不再迁移资产关联
- M12 换货新资产有有效手机号关联即拒绝,号码只在 data.phone;换货完成清空旧资产客户绑定并失效旧资产关联(exchange_completed),均不迁移
- OpenSpec Change enforce-single-phone-per-asset:11/16,H5 短信与换货端到端验证待测试部署后完成
|
2026-10-12 00:10:41 +09:00 |
|
|
|
b09275a0d0
|
修复待处理换货资产归属
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 9m53s
|
2026-09-24 12:30:33 +08:00 |
|
|
|
93e072e1e2
|
feat(换货): AUG26-005 换货业务数据迁移状态与失败恢复
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 11m42s
- 新增成对迁移 000222:tb_exchange_order 增加非空 migration_status 与
migration_failure_reason,按既有 migrate_data/migration_completed 回填历史,
并加四值 CHECK 约束,不新增索引
- 模型与常量定义四种迁移状态及中文名称,保留既有布尔字段兼容语义
- 物流换货创建恒 not_migrated,发货按请求落 pending/not_migrated,
完成成功写 migrated/not_migrated 并清空失败原因、同步兼容字段
- 直接换货创建即完成,任一步失败整体回滚,不持久化换货单、不产生 failed
- 迁移失败回滚全部业务修改后,在独立短事务内条件更新 failed 与安全失败原因
并写失败审计,RowsAffected 为 0 时跳过状态写入但仍写审计
- failed 物流单重试仅限超级管理员或平台用户,授权以锁内 FOR UPDATE 判定为准,
重试从钱包余额起整表重跑;非 failed 单沿用既有完成门禁
- 列表与详情返回迁移状态与中文名称,仅 failed 返回失败原因;既有三字段保持兼容
- 换货导出在「状态」列后新增中文「迁移状态」列,不导出失败原因
- 同步 order-refund-exchange 主 spec 与验证证据,归档本 Change
- 登记 KNOWN-ISSUE-001:既有标签复制 OnConflict 未声明部分索引谓词(42P10),
旧资产带标签时迁移最后一步失败,待另立变更修复
|
2026-09-14 18:32:26 +08:00 |
|
|
|
79e2d9ff92
|
重置项目上下文与规范文档
|
2026-08-07 16:18:07 +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 |
|
|
|
a8ca00e5f2
|
让换货选择不受新资产状态与原归属阻碍
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 8m13s
新资产仍需通过有效客户绑定和进行中换货占用校验,并返回明确的绑定冲突提示。
Constraint: 运营明确要求移除新资产在库和店铺一致限制
Rejected: 保留在库条件仅放宽店铺归属 | 无法支持已销售资产参与换货
Confidence: high
Scope-risk: moderate
Directive: 不得移除客户绑定和换货占用校验
Tested: git diff --check
Not-tested: 按用户要求未运行自动化测试
|
2026-07-27 18:43:16 +08:00 |
|
|
|
73f5125d3d
|
七月迭代短暂完结,还有很多后端的关键东西没有弄,这是一版赶时间做的东西
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 8m26s
|
2026-07-25 17:06:58 +08:00 |
|
|
|
5d6e23f1a5
|
允许平台库存资产直接完成换货归属继承
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 11m27s
换货完成事务允许平台库存新资产换入,并同步店铺归属、分销状态及钱包租户标签;其他店铺资产继续拒绝。
Constraint: 七月迭代要求归属继承不受 migrate_data 控制
Rejected: 先将新资产人工分配到旧资产店铺 | 会保留冲突校验并增加多余操作
Confidence: high
Scope-risk: narrow
Directive: 后续换货资料迁移不得覆盖归属继承规则
Tested: gofmt;git diff --check
Not-tested: 按用户要求未运行自动化测试
|
2026-07-24 11:31:45 +08:00 |
|
|
|
55bdc3a8d0
|
实现换货资产快照与新旧独立搜索
|
2026-07-22 16:37:08 +09:00 |
|
|
|
ba435dd6a6
|
关于绑定的问题
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Has been cancelled
|
2026-06-22 12:08:41 +09:00 |
|
Break
|
420f3d83f9
|
应当允许卡就算没有销售也能换货
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Has been cancelled
|
2026-06-04 10:26:47 +08:00 |
|
Break
|
5089a71764
|
返回错误原因
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 8m25s
|
2026-06-03 17:52:51 +08:00 |
|
Break
|
5f57429fb0
|
直接换货流程
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 8m28s
|
2026-06-03 16:55:32 +08:00 |
|
|
|
a93acc0784
|
有效天数问题,充值单回调问题
|
2026-05-08 11:46:34 +08:00 |
|
|
|
42c5ec912f
|
feat: 技术债务清理(支付配置动态化、API文档补全、轮询常量提取、废弃代码清理)
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 7m13s
|
2026-04-14 11:11:15 +08:00 |
|
|
|
e78f5794b9
|
feat: 实现客户端换货系统(client-exchange-system)
新增完整换货生命周期管理:后台发起 → 客户端填收货信息 → 后台发货 → 确认完成(含可选全量迁移) → 旧资产转新再销售
后台接口(7个):
- POST /api/admin/exchanges(发起换货)
- GET /api/admin/exchanges(换货列表)
- GET /api/admin/exchanges/:id(换货详情)
- POST /api/admin/exchanges/:id/ship(发货)
- POST /api/admin/exchanges/:id/complete(确认完成+可选迁移)
- POST /api/admin/exchanges/:id/cancel(取消)
- POST /api/admin/exchanges/:id/renew(旧资产转新)
客户端接口(2个):
- GET /api/c/v1/exchange/pending(查询换货通知)
- POST /api/c/v1/exchange/:id/shipping-info(填写收货信息)
核心能力:
- ExchangeOrder 模型与状态机(1待填写→2待发货→3已发货→4已完成,1/2可取消→5)
- 全量迁移事务(11张表:钱包、套餐、标签、客户绑定等)
- 旧资产转新(generation+1、状态重置、新钱包、历史隔离)
- 旧 CardReplacementRecord 表改名为 legacy,is_replaced 过滤改为查新表
- 数据库迁移:000085 新建 tb_exchange_order,000086 旧表改名
|
2026-03-19 13:26:54 +08:00 |
|