背景
竞拍是具有很强用户体验的一种电商活动形式。
在竞拍期间,众多用户不断出价,交替登顶榜首;最终竞拍结束时,出价最高的N位用户获得奖品。
产品形式
产品出价
竞拍榜单
后台处理流程
检查竞拍活动时间
检查活动时间是否在竞拍活动时间范围内。
检查用户出价次数
为公平起见,限制用户在竞拍单个产品时的单日出价次数。检查竞拍用户是否榜首用户
榜首用户暂时不能参与竞拍,需要等其他用户覆盖榜首后才能参与竞拍。
检查出价是否在最高价加价范围内
用户竞拍出价,只能在当前最高出价的基础上加价,有最低加价、最高加价和加价级差三个限制。
检查是否有竞拍请求PROCESSING
因为请求在PROCESSING的时候,有线程在异步处理请求,可能会刷新榜单,当前基于最高价的检查都可能失效。
检查用户支付能力
检查用户的支付能力是否能支持出价。榜首用户和非榜首用户检查逻辑不同。
非榜首用户,要检查支付能力余额是否大于等于竞拍出价。
榜首用户,已有支付能力被冻结,检查逻辑:本次出价减去前次有效出价 <= 剩余可用支付余额;
竞拍请求落地NEW状态
将竞拍请求写入数据库,状态为NEW。
非榜首用户处理
按竞拍请求中的出价冻结支付能力。
榜首用户处理
按需要追加的出价,基于之前的支付冻结,追加并冻结支付能力。
插入榜首记录
插入榜首记录。
遍历榜首,剔除淘汰的出价。
遍历整个榜首,将逻辑上已经不在榜首的记录置为无效,并解冻支付能力。
同时统计榜单排序和出价次数(一张用户+产品维度的统计表)
竞拍结束,创建发货记录。
将榜首Top N的记录置换为SUCCESS,创建发货记录。