✅数据对账时,如果日切时间点前后的数据不一致怎么办?
典型回答
这个问题,做过对账的一定遇到过,没做过对账的一定不知道怎么回答,甚至都无法理解问题是怎么发生的。甚至你可能连什么叫日切都不知道。
所以,到底真的做没做过对账,这一个问题就能看出来,当然,如果你把我写的看会了,你也就相当于做过对账了。。。。(PS:就这玩意儿,全网应该只有我会讲吧。。。兄弟们算是学到真东西了。)
科普时间:什么是日切?
在银行、支付、核心系统里,日切(End of Day,EOD) 是个关键点。日切就是金融系统在每天营业结束后,将当天的数据进行结转、汇总、清算,并切换到下一会计日的过程。 主要做以下事情:
- 结转账户数据
- 把当天的交易流水(借贷发生额)汇总到账户余额里。
- 更新账户状态(比如存款计息、贷款结息)。
- 生成对账/清算数据
- 输出日终对账文件(和支付清算系统、银联、同业机构做对账)。
- 生成各种报表:分户账、总账、监管报表等。
- 批量处理
- 跑批量任务(批量划扣、代发工资、结算资金)。
- 清理过期数据,归档日志。
- 切换会计日
- 从 T 日切换到 T+1 日,把系统日期推进。
为什么会不一致
最常见的原因就是业务发生时间不一致。
- A系统使用业务发生时间(例如,用户发起支付的时间)。
- B系统使用系统处理时间(例如,支付渠道处理成功的时间)。
- 一笔在23:59:59发起的支付,可能在00:00:01才处理成功。A系统会把它算作前一天的数据,B系统则算作后一天。
以上这种是最常见的一种"正常情况",尤其是和很多外部机构交互的时候,这种问题时有发生。
当然,除了这种,还有很多异常情况,比如真的请求丢了之类的,这个就和非日切处理方式一样了,这里主要讲因为日切导致的问题。
如何解决?
对于上面说的业务发生时间不一致的问题,有一些解决方案。
如果对业务方有约束性,比如我们是牛逼的大甲方,可以要求他们如何写入数据,那么可以与业务方协商,明确一个统一的对账口径。例如,统一以“业务发生时间”为准,另一方根据这个时间调整自己的数据汇总逻辑。
也就是说,他的接口中开一个字段,类似bizTime这种,我把我的发生时间给他,然后他存下来,后面拉数据的时候,就以这个时间为准。
但是上面的情况过于理想化了,一般都很难搞得定,那么怎么办呢?
有个常见的做法,那就是针对这批数据识别出来,然后重新核对。比如定义一个时间窗口,比如每天的23:55:00-00:05:00之间,算作是日切窗口,在这个时间段内发生的不一致的数据,我们进行二次核对。
二次核对一般是记录下来(不告警,避免浪费人工排查),第二天再拉出来核对一次,对实时性要求高的话,也可以立刻调接口查一遍。