Files
junhong_cmp_fiber/docs/package-price-fallback-and-platform-gift-policy/功能总结.md
huang 37b4483183
All checks were successful
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 7m55s
赠送套餐逻辑
2026-04-28 17:40:06 +08:00

3.1 KiB
Raw Blame History

套餐价格回退与平台赠送策略功能总结

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 只读查询验证字段、默认值和回填结果
  • 后续手工回归按《最终验收清单》执行