拼团组队结算统计业务流程与代码实现梳理¶
星尘的学习笔记 https://articles.zsxq.com/id_5tfh1ko2r2h6.html
一、业务流程概述¶
拼团组队结算统计主要围绕用户参与拼团活动、订单支付、组队达成、结算分账等环节展开。核心流程如下:
- 用户参与拼团活动,生成预购订单并锁定。
- 用户支付订单,触发结算流程。
- 系统根据订单和组队信息,更新拼团进度与状态。
- 拼团达成后,批量更新订单状态,完成结算。
- 结算结果写入结算表,后续可用于分账、统计等。
二、核心实体与表结构¶
1. 主要表结构¶
- group_buy_order:拼团组队订单表,记录组队ID、活动ID、拼团目标、完成数量、状态等。
- group_buy_order_list:拼团订单明细表,记录每个用户的订单、状态、支付信息等。
- group_buy_activity、group_buy_discount:活动与优惠配置。
- notify_task:结算回调任务表。
2. 关键实体类¶
- GroupBuyTeamEntity:拼团组队实体,包含teamId、activityId、targetCount等属性。
- GroupBuyTeamSettlementAggregate:拼团组队结算聚合,聚合用户、组队、支付订单等信息。
- TradePaySuccessEntity、TradePaySettlementEntity:交易支付与结算实体。
三、服务接口与实现¶
1. 结算服务接口¶
Java | |
---|---|
2. 结算服务实现¶
- TradeSettlementOrderService 实现了上述接口,核心逻辑如下:
- 查询拼团订单信息(MarketPayOrderEntity)。
- 查询组团信息(GroupBuyTeamEntity)。
- 更新拼团订单明细状态为完成。
- 更新组团完成数量。
- 若拼团达成目标,批量更新组团订单状态为完成,并查询所有完成订单号。
- 生成结算实体,写入结算表。
关键代码片段¶
四、流程总结¶
- 结算流程以订单支付为触发点,串联订单、组队、活动等多表多实体。
- 通过聚合根(GroupBuyTeamSettlementAggregate)统一管理结算所需上下文。
- 结算服务实现了拼团进度、状态、明细的原子性更新,确保数据一致性。
- 达成拼团目标后,批量处理订单状态,便于后续分账与统计。
五、相关技术¶
单一职责原则 single responsibility principle¶
职责
定义为改变的原因,SRP 指的是一个模块应该有且只有一个改变的原因。
反例:一个用于编辑和打印报表的模块。
-
报表的内容可以被改变(编辑)
-
报表的格式可以被改变(打印)
SRP 认为应该拆解将两个职责。
为什么要这么做?
继续上面的案例,修改编辑功能,很可能影响打印功能,具有危险性。
再比如,营销交易锁单和结算是两个不同的业务,拆分后具有下面的好处,
- 降低复杂性。
- 提高可读性。
- 提高可维护性。
- 降低依赖风险。