最近做了一个(奇坑的)需求,用户退款信息导出至excel。听起来似乎是一个简单的小功能,但是做起来却发现有数不清的大坑- -,整个项目我大约花了2-3周时间去开发(当然中间穿插着一些其他的需求),并后续仍在优化或解决bug。不过现在已经完成,大部份的坑也已经被填满了。
首先来说下整体的开发流程图:
对于这个需求,首先我们需要明确一点:必须要异步来做,导出任务很耗时间(当记录较多时,时间会比较长),如果采用同步策略,势必影响用户的体验。
然后我们来分析下开发的流程图,首先我们有两个异步的定时任务:正常的退款导出任务以及失败重试的定时任务。前者负责“正常”任务的执行,后者负责“失败”的任务的重试。那么怎么来定义任务?我们用了一张表:task表。建表语句如下:
主要用到的表字段有以下几个:taskId, status, rule。taskId很好理解,每个任务都有自己的编号,我们需要根据编号来执行相依的任务。那么具体的执行呢?以退款导出为例,我们需要调用退款列表接口,需要的入参如下图展示的那样: