回流日志(2)- 惊心动魄的夜晚
当财务告诉你因为你代码的Bug导致公司损失了6万块钱,你当时会是什么感受?
明天就是周末,其实今天心情都挺不错。虽然周末要上班,不过既然工作没什么紧急的事情就打算请个半天假出去办点正事儿。然而正准备盖上电脑休息的时候,发现笔记本右上角的企业微信有数字标,行吧,这么晚估计也没啥大事儿吧,看看呗。
财务在群里发了个截图说,我的代码出问题了,这个用户的账户余额里面多了1.5万,并且钱已经转过去了。这个用户应该不是个案,因为根据手头上的钱来算,公司手上可用金额还差6万块钱左右。在公司正慢慢往盈利的方向努力的时候,自己的代码导致了公司净亏损6万块钱,当时真的想死的心情都有了。
遇到这种情况,要心里没有一丝丝逃避的心理,那是假的。当个懦夫,一走了之容易,顶着压力去排查问题难。还是静下心来排查问题吧(我这心真静不下来)。
问题主要出在一段在2021年10月20日运行的代码,那段代码是给用户钱包打钱的,用户当天也提现了。然而这段代码在2021年10月21日再运行了一遍,给用户钱包再打了1.5万。要是句代码被大量运行,无论业务团队多努力公司永远都不可能盈利。
幸运的是,出现这种情况的用户只有3个,其中只有这一位用户资金出现了问题。不幸的却是,调研了一晚上,考虑了各种情况,却始终推演不出来为何这个转账代码会在第二天再运行了一遍。因为这一行代码藏得很深,要运行这一段代码需要很多先决条件,而这些先决条件在后期根本不可能满足。甚至有些怀疑是不是自己在后台操作的时候不小心给这个用户再一次打了款。幸好款项追回来了(好人一生平安)。代码的bug还得好好研究研究,如果真的是误操作,那真的是要吃一堑长一智了,Rails的控制台操作数据十分容易,然而出错的几率也大,一不小心就容易把事情搞砸。
这1.5万可能是误操作,剩下的4万多去了哪里了?公司使用的是电商收付通,公司作为平台商协助二级商户完成支付流程。不过由于平台每天交易额正在上涨,微信不知为何就判定我们交易异常,一开始会限制订单,因为我们没有及时申诉,微信直接关闭支付功能。而且是来一个关闭一个。过去一个星期我们基本上是每天申请一个新的二级商户号来保持业务逻辑的正常运行,微信每天都会封杀我们的商户号(申诉流程要1-5个工作日,这太长了,我们只能这样扛着。)。
而平台缺少的流动资金就是因为商户号封禁,一些本应该解冻的资金没有解冻导致的。这个故事告诉我们
没啥事别跟微信对着干,该申诉的及时申诉。
毕竟别人才是制定规则的人。有些规则你不遵循,别人对你重点关注,最后吃不了兜着走的还是你自己。基本这一天都是老板跟财务在群里说:“我们要XXXX的数据”。“得嘞”10-20分钟内立即开发出来(感谢Ruby On Rails)。所幸最终资金核对完毕之后跟预期差别不是特别大,大家也松了口气。这次“灾难”确实再次让心态崩裂一次,毕竟6万块钱如果工资去填补的话,那几个月不用吃饭了。最后,资金没有什么问题,也了解到财务一般会需要统计什么数据,后台的资金统计功能也初步搭建起来,也算是不幸中的大幸。