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

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

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

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

      1.对这批订单打标记;

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

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

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

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

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

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

  • 相关阅读:
    ldap集成jenkins
    自动发现实现url+响应时间监控
    5秒跳转
    String的使用
    数字货币转换为中文货币
    字符串的使用(string,StringBuffer,StringBuilder)
    修饰符
    类的继承,抽象类,接口,方法重写和重载
    类的使用
    java中的输入流(Scanner),数据类型,运算符,switch,数组的用法
  • 原文地址:https://www.cnblogs.com/bruceChan0018/p/14960676.html
Copyright © 2011-2022 走看看