zoukankan      html  css  js  c++  java
  • 生产环境财务BUG的排查与总结

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

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

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

      1.对这批订单打标记;

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

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

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

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

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

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

  • 相关阅读:
    Django ORM常用的函数以及修饰词
    通过gitlabAPI批量创建用户
    【BZOJ】ARC083 E
    【Atcoder】ARC083 D
    【BZOJ】1604: [Usaco2008 Open]Cow Neighborhoods 奶牛的邻居
    【BZOJ】1593: [Usaco2008 Feb]Hotel 旅馆
    【BZOJ】5010: [Fjoi2017]矩阵填数
    【Atcoder】ARC082 E
    【BZOJ】5028: 小Z的加油店
    【BZOJ】1691: [Usaco2007 Dec]挑剔的美食家
  • 原文地址:https://www.cnblogs.com/bruceChan0018/p/14960676.html
Copyright © 2011-2022 走看看