1
T0m008 2022-12-02 06:08:54 +08:00
第二次扣款没有余额变动记录你怎么在余额变动表里找? mysql 这条路无解。
先通过时间段把被扣款用户粗略筛选出来,然后再看能不能细分。 |
2
eason1874 2022-12-02 06:14:36 +08:00 1
一亿条也不是很多吧,先把这段时间付款的用户 ID 导出列表,然后分成几批同时跑,再慢,几个小时也该跑完了。有时候简单粗暴的方法就是最快的方法
|
3
danhahaha 2022-12-02 08:18:14 +08:00 via iPhone
直接去访问记录里面找出访问过下单界面的用户
|
4
bao3 2022-12-02 08:21:19 +08:00 via iPhone
我和二楼的疑问一样
|
5
leaves615 2022-12-02 08:37:49 +08:00
测试不到位。
|
6
bthulu 2022-12-02 08:55:01 +08:00
既然第二次扣款是没有创建余额变动记录的, 那不就相当于没有扣款么, 那你什么都不用干就行了, 反正用户余额也没变少, 你们的余额也没增加.
|
8
Lexgni 2022-12-02 09:06:58 +08:00
把收款方流水拿出来,再把用户收款流水拿出来,对比一下
|
9
wqhui 2022-12-02 09:08:20 +08:00
第一次付款后余额是 A ,该用户下一次有记录的充值 /付款订单,变动前余额是 B ,那么造成 A 到 B 的差额订单就是丢失了
|
11
pjntt 2022-12-02 09:20:36 +08:00
如果确认是第二扣款没有记录的。那就找交易流水,把有 2 次及以上的交易用户就是异常的。
|
12
8355 2022-12-02 09:35:33 +08:00 1
如 2 楼所说确实 你能确定明确的时间筛出来最后其实没多少
救火任务要先考虑救火方式 先修 bug 再捞数据 看一遍代码才能了解问题出在哪里 之后根据现有表结构和数据去排查 起码是不是先把并发锁和事务加上。。。。 |
13
changyang 2022-12-02 09:36:18 +08:00 1
这个要看余额变动表里面有没有记录本次扣除后剩余余额,如果记录的了的话就能根据这个剩余余额查询。
假设 用户表 user: userId 用户 id money 剩余金额 余额变动表 moneyChage: userId 用户 id createTime 创建时间 lastMoney 扣除后剩余金额 deductMoney 本次扣除金额 1 ,先查询最近一天的订单(问题以来的) 2 ,查询这些订单所属用户。userList 3 ,循环查询用户的余额变动记录,查询有问题的用户 for user in userList userMoneyChangeList = queryUserMoneyChangeListDescByCreateTime(userId) (以创建时间倒排) lastMoney = user.money for changeItem in userMoneyChangeList if lastMoney != changeItem.lastMoney: print("该用户余额不符,userId: %s" , user.userId) lastMoney = lastMoney + deductMoney |
14
changyang 2022-12-02 09:40:05 +08:00
以上还可以优化一下 queryUserMoneyChangeListDescByCreateTime 方法,在 sql 中只限定查询问题时间以来的
|
15
jorneyr 2022-12-02 09:42:17 +08:00 1
以前参与的英国电商项目,异常没处好导致给客户信用卡扣款 150 多次,直到额度不够。
时不时发生,几年了这个 Bug 没解决掉,把钱还给客户就解决了问题。 |
16
changyang 2022-12-02 09:42:26 +08:00
如果嫌慢可以加入线程,查询出 userList 后,把 userList 切分成 N 组放入线程任务中进行查询最后组合,会更快。
|
17
Huelse 2022-12-02 10:02:04 +08:00
有日志吗?
|
18
wudi77 2022-12-02 12:06:34 +08:00
查交易流水,比对
|
19
dcsuibian 2022-12-02 12:59:51 +08:00
这个帖子能有效降低我写出 bug 时的愧疚感
|
20
joApioVVx4M4X6Rf 2022-12-02 13:03:36 +08:00
想知道楼主是怎么解决这个问题的
|
22
fackVL 2022-12-02 14:34:49 +08:00 via iPhone
余额变动表肯定有扣除后的余额啊,找最后一条变动记录的最后余额和钱包余额做对比就行了呗
|
23
dorothyREN 2022-12-02 18:59:25 +08:00
直接对比 binlog 吧, 有 binlog 没有变动记录就是异常用户
|