# 《拼团交易平台系统》第2-13节:交易结算责任链过滤
作者:小傅哥
博客:https://bugstack.cn (opens new window)
视频:https://t.zsxq.com/ScKNa (opens new window)
沉淀、分享、成长,让自己和他人都能有所收获!😄
大家好,我是技术UP主小傅哥。
在我整个互联网编程的职业生涯中,有一段时间一个人负责了4-5个业务系统,还有3-4个技术类组件。领导看我有这么多系统,就给我招聘了几个人,让我把活分配出去。
但最开始我是比较抗拒的,因为这些系统已经非常手到擒来了,想做什么设计实现,也是能非常容易的迭代完成,并且随着每次的迭代也会做细腻的重构设计。
而我抗拒的原因是因为中间招聘的伙伴,有几次都是来了半年多又走了,系统又交接回来了。这个时候在对这个系统做实现时候,就会发现很多细节的地方,与预期非常不符。不过,后来也慢慢习惯了,增加了很多的评审、提供了的设计,让工程尽量别走型严重。
# 一、本站诉求
拼团交易结算的过程,需要一些列的规则过滤。包括;我们上一节提到的校验外部交易单的时间是否在拼团有效时间内,同时还有关于这笔外部交易单是否为有效的拼团锁单订单。另外像是 SC 渠道的有效性也需要在结算时进行校验。
所以,本节我们需要实现一套规则链,来处理这些业务规则。因为规则链已经被抽取为通用的模板了,那么本节使用起来会非常容易。
# 二、业务流程
如图,拼团交易结算流程设计;

- 首先,本节的重点在于新增加结算规则过滤的责任链,处理;SC渠道管控、有效的外部交易单号、结算实现是否为拼团时效内。
- 那么这里会有一些功能改造点;
- 拼团表,group_buy_order 增加 valid_start_time(有效开始时间)、valid_end_time(有效结束时间) 字段。用于每笔交易结算时候,用结算时间判断是否匹配到拼团有效时间范围内。
- 拼团明细,group_buy_order_list 增加 out_trade_time(交易时间) 字段,记录每笔结算的订单结算的时间。随着状态更新的时候更新。
- trade 领域下,lock 锁单。实体对象,修改名称。TradeRuleCommandEntity -> TradeLockRuleCommandEntity,TradeRuleFilterBackEntity -> TradeLockRuleFilterBackEntity 增加了 Lock 标识。便于在添加 TradeSettlementRuleCommandEntity、TradeSettlementRuleFilterBackEntity 时更好理解。
- PayActivityEntity 添加 validTime,GroupBuyTeamEntity 添加 validStartTime、validEndTime
- trade 领域下,settlement 结算服务中,使用责任链模板,实现营销交易规则的过滤。SCRuleFilter(SC黑名单管控过滤 DCCService 配置新的属性 scBlacklist)、OutTradeNoRuleFilter(外部交易单号有效性过滤)、SettableRuleFilter(交易时间是否在拼团有效时间内过滤)、EndRuleFilter(结束节点封装返回数据)
- 交易服务,TradePaySettlementEntity 调用 tradeSettlementRuleFilter 责任链方法,并返回相关的数据信息。
- settlementMarketPayOrder 结算一个事务下操作,增加 updateOrderStatus2COMPLETE 更新时候添加 outTradeTime 时间。