现在货币体系有:Q 币、Q 点、点券
例小明账户:Q 币:30Q 点:20 点券:60
现在有一个订单需要扣 100 元,要实现顺序扣款成功,要怎么实现比较好,现在的实现方式感觉很傻。
目前的实现方法:
应扣余额==100 如果账户余额加起来都不够,false 如果 Q 币足够,则扣除 100 扣款成功,否则扣去全部 Q 币, 结果:应扣余额==70 如果 Q 点大于应扣余额,扣除 Q 点 70 返回成功,否则扣除全部 Q 点 结果:应扣余额==50 如果点券大于应扣余额,扣除点券 50,否则扣除全部点券 结果:应扣余额==0 账户剩余:0 Q 币:0 Q 点:10 点券 事务提交
以下是伪代码
# 应支付
payable = 100
# 先查询出用户余额
user_qb = 30
user_qd = 20
user_dq = 100
# 如果余额小于应付款扣款失败
if ((user_qb + user_qd + user_dq) < payable) {
return false;
}
if(user_qb >= 100) {
pay(qb, 100)
payable = 0;
} else {
pay(qb, user_qb)
payable = payable - user_qb
}
if (payabel > 0 && user_qd >= payabel) {
pay(qd, payable)
payable = 0;
} else {
pay(qd, user_qd)
payable = payable - user_qd;
}
if (payable > 0) {
pay(dq, payable);
}
db->commit;
return true;
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.