支付回调偶然出现没有更改订单状态,造成微信请求一直发送

来源:10-31 事务与锁防止多次减库存

慕盖茨8017619

2019-10-01

老师,你好,按你的课程我们进行了一个实际业务的运行,当客户支付成功后,会进入回调,更改订单状态和减掉库存量,还有一个是我们业务需求以邮件形式告诉业务员有人下单,目前偶尔会出现订单状态没有改变,同一个订单持续发送多封相同邮件给业务员。从理论上来说不管无论如何都会进入updateOrderStatus的函数更改订单状态,但数据库有时候就会出现订单状态没有改变,我猜想会不会是数据库被锁住了造成无法更改,也就是在更改订单状态的时候下一个微信请求正好进来查询订单数据库(它们是同一个数据表),查询数据库的代码是有lock锁的,但更改数据库的代码是没有lock锁的(老师可以看一下源代码),同一个订单号,一个函数锁住了,另一个函数却要更新,冲突造成无法改变订单状态,请老师帮忙看一下有没有可能是这个情况,以及如何修改,非常感谢

写回答

1回答

7七月

2019-10-01

这个锁怎么回把整个表锁住?这种情况,首先是需要进行代码测试,而不是感觉。锁只会在update的时候锁住,而且即使锁住了后续有update的语句也会等待结束后执行。

0
14
慕盖茨8017619
回复
7七月
查一次数据库或者用缓存也可以,但这样就有一个问题,如果订单状态没有改变,那后续算账就会错误,因为结算不会把未付款的订单算进去。某种程度上来说,多发邮件的情况也是提示我们订单状态可能未更改为‘已付款’,管理员会去关注这个订单,异常还是订单状态偶尔会出现未更改,不可能客人付款了,后台确却显示‘未付款’。
2019-10-08
共14条回复

微信小程序电商实战 从前端到后端的全流程精讲

全栈工程师/前后端都讲/架构思想/ RESTFul API、MySQL表设计

4805 学习 · 4382 问题

查看课程