# 《拼团交易平台系统》第2-27节:已支付未成团退单
作者:小傅哥
博客:https://bugstack.cn (opens new window)
视频:https://t.zsxq.com/319Es (opens new window)
沉淀、分享、成长,让自己和他人都能有所收获!😄
# 一、本章诉求
继续迭代退单流程,处理已支付未成团退单。
而对于已支付未成团的退单,拼团退单完成后,需要驱动退款流程。也就是另外一个项目(小型支付)在用户发起退单后,需要先把优惠逆向处理掉,之后等待逆向完成进行支付退款。
那么,为什么不是项目(小型支付)调用完拼团,就直接退款呢。其实是做直接退款的,但有时候会出现一个临界的异常。如,调用拼团退掉优惠完成后,rpc/http 请求返回结果,可能因为网络超时,导致项目(小型支付)拿不到结果。这个时候,一种是可以重试,另外一种是可以等待MQ消息,驱动后续流程。而在大厂中,MQ消息驱动,是更为常见的使用方式。
# 二、功能流程
如图,退单流程设计领域结构。

- 首先,整体我们设计了3个退单策略,
未支付退单策略
、已支付未成团退单策略
、已支付已成团退单策略
。在这几个章节,会陆续的处理。 - 之后,结合上一节的
未支付退单策略
,本节继续实现已支付未成团退单策略
。不过这里有一个差异,需要写一个本地消息表,对于已支付的退单,要发送一个退单完成的MQ消息。其实后续未支付退单策略
也要补充这个MQ,用于恢复参与拼团量。 - 另外,因为这里也用到了,MQ 的发送和任务补偿。所以要把之前写到 trade 结算里的任务发送操作,抽取一个接口方法,进行共用。