Files
huang 37b4483183
All checks were successful
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 7m55s
赠送套餐逻辑
2026-04-28 17:40:06 +08:00

109 lines
3.1 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 套餐价格回退与平台赠送策略功能总结
## 1. 变更背景
本次改动解决了套餐价格语义长期混用的问题:
- 普通可售套餐在建议零售价未配置时,会自动回退到成本价作为生效售价
- 赠送套餐不再通过 `0` 价临时猜语义,而是使用独立赠送标记
- 赠送套餐仅允许平台后台通过创建订单进行发放不能进入代理分配、C 端购买或自动购包链路
## 2. 核心规则
### 2.1 价格配置状态
新增统一价格配置状态:
- `0`:未配置
- `1`:赠送 0 价
- `2`:已配置非 0
普通可售套餐:
- 建议售价留空 → 视为未配置,销售链路按成本价生效
- 建议售价填非 0 → 按原值生效
- 建议售价显式填 `0` → 拒绝保存
赠送套餐:
- 必须显式配置 `0`
- 仅平台可创建和维护
### 2.2 后台套餐管理
后台创建、编辑、详情、列表现在同时返回:
- 原始建议售价(未配置时为空)
- 价格配置状态
- 是否赠送套餐
同时保留生效价字段,供销售链路或只读展示使用,但不会回写覆盖原始配置值。
### 2.3 C 端与销售链路
以下链路统一改为使用生效售价:
- C 端可购买套餐列表
- C 端下单
- 后台订单创建
- 自动购包
赠送套餐会被以下链路拦截或隐藏:
- C 端可购列表
- H5/客户端购买
- 自动购包
- 代理授权与批量分配
### 2.4 后台发放口径
“发放”统一解释为**平台后台创建订单**。
- 赠送套餐只能通过后台创建订单进入资产
- 赠送订单仅允许平台侧发起
- 赠送订单不要求线下支付凭证
- 赠送加油包仍然要求目标资产先存在主套餐
## 3. 数据库变更
迁移版本:`000139_add_package_price_status_and_gift_policy`
主要新增:
- `tb_package.price_config_status`
- `tb_package.is_gift`
- `tb_shop_package_allocation.retail_price_config_status`
- `tb_order_item.package_price_config_status`
- `tb_order_item.package_is_gift`
- `tb_package_usage.package_price_config_status`
- `tb_package_usage.package_is_gift`
- `tb_package_price_review_queue`
## 4. 历史数据回填策略
- 历史非 0 建议售价 → 回填为“已配置非 0”
- 历史 `0` 且满足“后台创建订单 0 元成交,且未进入代理分配” → 回填为赠送套餐
- 其余历史 `0` → 回填为未配置;若无法确认语义,则进入 `tb_package_price_review_queue`
## 5. 影响范围
主要涉及:
- `internal/service/package/service.go`
- `internal/service/purchase_validation/service.go`
- `internal/service/order/service.go`
- `internal/service/client_order/service.go`
- `internal/task/auto_purchase.go`
- `internal/handler/app/client_asset.go`
- `internal/service/shop_series_grant/service.go`
- `internal/service/shop_package_batch_allocation/service.go`
## 6. 验证方式
本次变更按项目约束使用以下方式验证:
- `lsp_diagnostics` 静态诊断
- `make migrate-up` 迁移执行
- PostgreSQL 只读查询验证字段、默认值和回填结果
- 后续手工回归按《最终验收清单》执行