# 套票(冻结/可用、分期释放)功能开发计划 ## 目标 - 为“买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号跨月如何处理?) - 退款/取消:是否回滚未使用的可用/冻结?已释放但未用如何处理? - 消费场景:在哪个业务点扣减(下单抵扣/提货核销/线下核销)?