案例: 拼团系统设计
Table of Contents
1. 拼团
1.1. 拼团需求分析
- 商家能创建/参与拼团活动
- op 能审核&发布该拼团活动
- 当拼团活动发布之后,符合一定的标准,用户可以在商品详情页看到
- 用户可以发起或者参加某个团
- 团符合成功标准,则拼团成功。超时未符合,则拼团失败
- 拼团成功,则用户购买成功。失败,则退款
- 购买成功后,用户能看到订单, 能看到后续的发货流程,正常消费。
- 如果拼团成功,但是超卖,可能也需要退款
1.2. 拼团用户场景
- 商家
- 创建拼团活动
- 修改拼团活动内容
- 查看拼团活动审核情况
- 管理人员
- 审核拼团活动
- 驳回拼团活动
- 用户
- 基于项目查看拼团活动
- 创建一个拼团
- 参与一个拼团
- 查看拼团进度
- 拼团成功后查看订单,消费票券
- 拼团失败后退款
1.3. 拼团场景分析
商家创建拼团活动
用户创建拼团
1.4. 拼团系统概要设计
1.4.1. 重点概念解释
拼团活动
制作领域的概念,包含参与拼团活动的项目,场次,票档,拼团价格,结算价格,有效期,是否公开等信息
团
第一个拼团订单创建完成,会生成一个团。用于承载拼团动作的结果
拼团订单
用于承载针对某个团的参与动作,以及支付行为, 驱动后续的订单生成等
1.4.2. 模块划分
- 拼团活动模块
- 负责拼团活动的创建,审核,发布功能
- 负责拼团活动的查询
- 拼团模块
- 负责拼团的创建
- 负责参团
- 负责拼团的信息查询
- 负责拼团状态的维护,包含拼团成功,超时失败等
- 负责拼团成功后对应订单的创建
- 负责可能的超卖后的退款处理
- 支付模块
- 负责拼团订单的支付
- 负责拼团订单的退款
- 订单模块
- 负责拼团订单对应的商品按照指定价格和结算价进行下单
1.5. 拼团模块内部设计
1.5.1. 拼团活动模块
- 与外部模块关系
- 提供拼团的定价和结算信息给拼团模块
- 根据项目,提供审核通过的拼团活动的详细信息,用于演出模块展示拼团活动和最低拼团价
- 内部逻辑
- 同一个项目,选择不同的票档参与拼团,设置拼团价格和库存
- 拼团活动以项目为维度,可以审核通过或者驳回
- 可以设置开始时间和结束时间
- 如果考虑到一定的灵活性,审核的维度可以到票档。
- 保证最终成团的售卖数量不超过拼团活动设置的最大库存
- 倘若超卖,则支付成功,购买失败,做退款。产品上需有说明
- 若拼团成功 3 单,其中 2 单有库存,一单超卖失败, 则仅退款一单
- 可以是判断是否当前团的最后一个团员,如果是,那么提交订单时就锁定整个团的库存, 如果不是,那么提交订单时不锁定整个团的库存
- 外部接口
- 创建拼团活动
- 更新拼团活动
- 拼团活动审核
- 根据项目 ID,查询拼团信息(支持是否过滤 shopId)
- 一个商家一个项目多个票档,叫做一个拼团活动
- 一个项目可能会有多个拼团活动,选择其中拼团价最低的有库存的票档用于展示
- 如果有 shopId 的过滤条件,只查询指定 shopId 的拼团活动
- 批量根据项目 ID,查询拼团信息(支持是否过滤 shopId)
- 根据拼团活动票档 Id, 查询结算价和数量
模型设计
- PinTuanCampaign
字段名 字段类型 字段含义 - - - id int 主键 ID effectiveFrom Date 拼团活动开始时间 effectiveTo Date 拼团活动结束时间 status int 拼团活动状态,已提交,已驳回, 已发布 isOpen int 是否公开 activityId int 演出 ID - PinTuanCampaignItem
字段名 字段类型 字段含义 - - - id int 主键 ID pinTuanCampaignId int 拼团活动 ID ticketCategoryId int 票档 Id activityEventId int 场次 Id salePrice int 拼团活动售价 count int 拼团活动总库存 status int 票档审核状态, 未通过,已通过 sellStatus int 票档售卖状态,开启,关闭 - 拼团活动审核的维度
- 基于票档/基于项目/基于项目当前未审核通过的部分
- 拼团活动票档的修改
- 一旦审批通过后,不可以修改拼团价格
- 关闭状态下,可以调整库存
- 拼团活动如何保证(尽量)不超卖
- 在参团下单前,校验一次已参团人员的库存情况,如果库存不足,则不允许新团员参团
1.5.2. 拼团模块
- 与外部模块关系
- 成团后,驱动生成对应订单
- 支付拼团
- 拼团失败后,退款
- 内部逻辑
- 创建拼团/参团订单,校验拼团商品价格
- 支付拼团订单,创建拼团
- 支付参团订单,参与拼团
- 拼团超时未成功, 自动退款
- 参团达到标准,拼团成功
- 如果超卖,拼团订单退款
- 外部接口
- 创建拼团订单(包含发起团和参与团)
- 查看拼团订单详情
- 查看团的详情
模型设计
- Tuan
字段名 字段类型 字段含义 - - - id int 团 ID ownerId int 创建团的人 status int 拼团状态 addTime Date 团的创建时间 expireTime Date 团的有效期 requiredNum int 成团订单数量要求 - PinTuanOrder
字段名 字段类型 字段含义 - - - id int 拼团订单 ID payStatus int 支付状态, 待支付,已支付,已退款 tuanId int 团的 Id userId int 拼团订单的用户 count int 购买数量 salePrice int 拼团价格 - TODO: 如何自动分配选座订单的座位
- TODO: 如何保证驱动生成订单动作的幂等
1.6. 拼团任务分解
- 商家后台
- 拼团活动列表页
- 拼团活动详情页
- 拼团活动列表页接口
- 拼团活动详情页接口
- op 后台
- 拼团活动列表表
- 拼团活动详情页
- 拼团活动列表接口
- 拼团活动详情接口
- 拼团活动审核接口
- 拼团首页运营位配置
- android && ios
- 项目详情页拼团入口展示
- 商家项目详情页拼团入口展示
- 首页拼团运营位展示
- 商家列表页 && 列表页拼团价格展示
- 个人中心增加拼团订单的入口
- m 站用户侧发起/参加拼团
- 项目的拼团活动入口
- 拼团详情分享
- 拼团详情页面(各种状态和操作参考 PRD)
- 项目的拼团活动查询接口
- 拼团详情接口
- TODO: 拼团项目的场次和票档以及库存查询接口
- 拼团确认订单页面
- 拼团下单接口
- 拼团支付
- 拼团订单详情页
- 个人中心增加拼团订单的入口
- 拼团活动服务
- 拼团活动创建,更新,提交,审核,发布接口
- 拼团活动信息查询接口
- 拼团服务
- 拼团创建接口
- 拼团参加接口
- 拼团成功创建订单
- 拼团超时未成功自动退款
- 拼团超卖?
- 订单服务
- TODO: 能够根据指定的商品售价创建拼团成功后的订单