前段时间业务人员一直反应上传股指期货数据文件的时候,会“偶尔”发生读中登数据读不进去的问题。这个“偶尔”最是让人头疼,偶尔,意味着没什么规律,不能重现错误,也就谈不上解决问题了。
今天业务人员又反应了这个问题。头大。之前接手同事的程序,代码写得七绕八绕,也许分层是变得清晰了,可是要穿成串弄明白一个问题或一个模块逻辑,可就有点不容易了。正在头大之际,同事提醒把日志文件要过来看下。
看日志文件看了许久,忽然发现了一点奇怪的地方:有四个产品,每个产品有两个文件(SettlementDetail和Trade文件),每次都是只有一个产品的1个或2个文件成功。其他的失败;而且最后一次只有一个产品,一个产品成功。
心中一动,是不是意味着数据丢了,文件没读进去,后面的把前面的冲掉了?赶快去找。在框架代码里,找上传、读到数据库的逻辑。这个逻辑居然不在最后一步集中处理,而是在第三步处理。
原来上传数据的时候,在赋值一个ArrayList对象,也就是文件信息的时候,for循环里,ArrayList应该是AddRange,但是每次都是用了“=”号。晕倒。前面都知道用for循环,为何里面又用了“=”而不是AddRange?
也难怪,测试的时候,都是用一个期货公司的数据文件去测试,自然测不出来。业务人员选一个就可以成功,选多个,就有一个失败,所以她也不敢肯定原因。就导致了这种现象。
就和上次xbrl传递文件失败一样,偶尔会出现一个奇怪的问题,文件找不到。后来仔细检查代码,发现是MakeFileName函数调用了两次,里面有计算当前时间的秒数。如果刚好文件比较大,处理时间超过1秒,就会返回一个不同的FileName,所以找不到。
这种“偶尔”出现的问题,最是不好处理。
今天这个股指期货数据文件的问题,关键还是在于日志文件的分析。所以第一个反应应该是看日志。推理模拟业务人员的工作场景。
另外,这几天验证了交易所印花税、开放式货币基金红利计提、浮息债券计息的计算过程。看文档和代码总是理解不深入,只有自己计算一遍,印象才深刻,实际弄清楚一个个数字是怎么计算的。不过这也是之前有两个同事早就做过的事情。接下来还需要验证估值凭证的生成过程。