新增完整换货生命周期管理:后台发起 → 客户端填收货信息 → 后台发货 → 确认完成(含可选全量迁移) → 旧资产转新再销售 后台接口(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 旧表改名
3.5 KiB
3.5 KiB
客户端换货系统功能总结
1. 功能概述
本次实现完成了客户端换货系统的后台与客户端闭环能力,覆盖「后台建单 → 客户端填写收货信息 → 后台发货 → 后台确认完成(可选全量迁移) → 旧资产转新」完整流程。
2. 数据模型与迁移
- 新增
tb_exchange_order表,承载换货生命周期全量字段:旧/新资产、收货信息、物流信息、迁移状态、业务状态、多租户字段。 - 保留历史能力:将旧表
tb_card_replacement_record重命名为tb_card_replacement_record_legacy。 - 新增迁移文件:
000085_add_exchange_order.up/down.sql000086_rename_card_replacement_to_legacy.up/down.sql
3. 后端实现
3.1 Store 层
-
新增
ExchangeOrderStore:- 创建、按 ID 查询、分页列表查询
- 条件状态流转更新(
WHERE status = fromStatus) - 按旧资产查询进行中换货单(状态
1/2/3)
-
新增
ResourceTagStore:用于资源标签复制。
3.2 Service 层
-
新增
internal/service/exchange/service.go:- H1 创建换货单(资产存在校验、进行中校验、单号生成、状态初始化)
- H2 列表查询
- H3 详情查询
- H4 发货(状态校验、同类型校验、新资产在库校验、物流与新资产快照写入)
- H5 确认完成(状态校验,可选全量迁移)
- H6 取消(仅允许
1/2 -> 5) - H7 转新(校验已换货状态、
generation+1、状态重置、清理绑定、创建新钱包) - G1 查询待处理换货单
- G2 提交收货信息(
1 -> 2)
-
新增
internal/service/exchange/migration.go:- 单事务迁移实现
- 钱包余额迁移并写入迁移流水
- 套餐使用记录迁移(
tb_package_usage) - 套餐日记录联动更新(
tb_package_usage_daily_record) - 累计充值/首充字段复制(旧资产 -> 新资产)
- 标签复制(
tb_resource_tag) - 客户绑定
virtual_no更新(tb_personal_customer_device) - 旧资产状态置为已换货(
asset_status=3) - 换货单迁移结果回写(
migration_completed、migration_balance)
4. Handler 与路由
4.1 后台换货接口
- 新增
internal/handler/admin/exchange.go - 新增
internal/routes/exchange.go - 注册接口(标签:
换货管理):POST /api/admin/exchangesGET /api/admin/exchangesGET /api/admin/exchanges/:idPOST /api/admin/exchanges/:id/shipPOST /api/admin/exchanges/:id/completePOST /api/admin/exchanges/:id/cancelPOST /api/admin/exchanges/:id/renew
4.2 客户端换货接口
- 新增
internal/handler/app/client_exchange.go - 在
internal/routes/personal.go注册:GET /api/c/v1/exchange/pendingPOST /api/c/v1/exchange/:id/shipping-info
5. 兼容与替换
iot_card_store.go的is_replaced过滤逻辑已切换至tb_exchange_order。- 业务主流程不再依赖旧换卡表(仅模型与 legacy 表保留用于历史数据)。
6. 启动装配与文档生成
已完成换货模块在以下位置的全链路接入:
internal/bootstrap/types.gointernal/bootstrap/stores.gointernal/bootstrap/services.gointernal/bootstrap/handlers.gointernal/routes/admin.gopkg/openapi/handlers.gocmd/api/docs.gocmd/gendocs/main.go
7. 验证结果
- 已执行:
go build ./...,编译通过。 - 已执行:数据库迁移
make migrate-up,版本到86。 - 已完成:变更文件 LSP 诊断检查(无 error 级问题)。