# 套票（冻结/可用、分期释放）功能开发计划

## 目标
- 为“买N送M（例如买1送4）、起售（例如20桶起售）、按月释放（例如每月释放10桶）、可用未用完叠加”的套票/权益，提供后端可配置、可发放、可释放、可消费的能力。

## 核心概念
- 套票模板：按商品(goodsId)配置买赠规则、起售/起送、释放规则（每期释放数或释放期数）、首期释放时机。
- 用户套票账户：记录总量、可用量、冻结量、已用量、已释放量；绑定订单（用于幂等与追溯）。
- 释放计划：每期一条，到期后把冻结转可用（可用未用完自然叠加）。
- 变更流水：发放/释放/消费等都记录流水，便于对账与排查。

## 关键默认规则（可在模板里改）
- 仅赠送量进入套票账户（默认不包含“购买量”本身）；如需“买20送80=总100”，可在模板设置 `includeBuyQty=true`。
- 首期释放：默认“支付成功当日/当刻”释放（`firstReleaseMode=0`）；如需“下个月同日释放”，设 `firstReleaseMode=1`。
- 每期释放：默认按 `monthlyReleaseQty`；如配置了 `releasePeriods`，则平均分摊并处理余数。

## 开发步骤（建议按顺序）
1. 需求确认与接入点确认（订单哪个节点发放、桶票如何消费/核销、退款是否回滚、释放日期规则）。
2. 数据表设计与SQL输出（模板/账户/释放计划/流水）。
3. 实现套票模板后台CRUD接口。
4. 支付成功接入：在订单支付成功后发放套票账户+生成释放计划（幂等）。
5. 定时任务释放：扫描到期释放计划，执行“冻结->可用”转账（幂等）。
6. 消费扣减：对用户可用量做扣减（支持跨多套票账户FIFO扣减），并落流水。
7. 测试与验收：至少覆盖（买赠计算、分期拆分、叠加逻辑、幂等、并发扣减）。

## 待确认点（不确认也可先按默认实现）
- 套票数量=赠送量？还是（购买量+赠送量）？
- “释放日期”是按支付时间的“日”还是固定每月某一天？（31号跨月如何处理？）
- 退款/取消：是否回滚未使用的可用/冻结？已释放但未用如何处理？
- 消费场景：在哪个业务点扣减（下单抵扣/提货核销/线下核销）？

