Files
mp-java/docs/TICKET_PACKAGE_FEATURE_PLAN.md
赵忠林 d7a6b7cc94 feat(ticket): 实现套票分期释放功能核心数据结构
- 修改 GltUserTicketReleaseParam 中 id 和 userTicketId 类型从 Long 改为 Integer
- 移除 ShopOrderServiceImpl 中的 shopTicketBizService 依赖注入
- 注释掉订单支付成功后的套票发放调用
- 添加套票功能开发计划文档,定义套票模板、用户套票账户、释放计划和变更流水的核心概念
- 设计并创建套票相关数据库表,包括套票模板表、用户套票账户表、释放计划表和变更流水表
2026-02-03 20:37:11 +08:00

2.3 KiB
Raw Blame History

套票(冻结/可用、分期释放)功能开发计划

目标

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