生产环境中执行一个财务业务相关的定时任务,但执行完任务进行数据核对时无法对准。

  具体的场景大概可以描述为:一批订单进行分类存储在另一张表中,每个类别的数量统计后放入一个字段中。但最终第一张表进行COUNT(*)计算的结果与第二张表中SUM(orders_by_type)的结果不同,总是差了几单。

  想到应该是从第一部分查找,到组装逻辑直到最终存放分类数据的这个过程中发生了问题。于是将关键的几个步骤打了日志,放到生产环境执行一次任务后对比了这些日志,最终确定了是在这个过程中,流程可以细分为:

  1.对这批订单打标记;

  2.对这批订单进行处理,在处理的过程中有部分订单发生了异常,即跳过了未处理;

  3.对处理完成的订单进行合并分类存放

  问题出在第2步,发生异常后没有对之前标记的订单进行还原处理,导致最终两边的数据不通。

----------------------------------------------------------------------------------------------------------------------------------------------

  与公司前辈讨论了一下,财务模块的数据无法核对上是开发过程中比较普遍的bug。比较妥当的做法是,将生产环境的订单数据拷贝一份,放入测试环境,而后进行调试。这样在写数据时,可以将风险降至最低。如果有条件,其实可以在开发时期就创建一批量的数据,并将该组数据保存,制作脚本不断地进行这个流程的测试与计算核对。这个过程如果是使用方也不是很明白,那最好拉着他们一起进行测试核对,毕竟钱的事情不是小事。如果是生产环境产生问题,那么就将数据存入本地DB,再进行反复调试与验证。

  另外,财务的计算逻辑和处理流程一般是比较复杂的,所以设计代码时还是应该将代码的函数单一原则尽量执行,而对于一些分类处理,可以使用好模板模式,在父类处理好通用逻辑,在子类处理好各自不同的逻辑。

posted on 2021-07-01 20:41  长江同学  阅读(159)  评论(0编辑  收藏  举报