跳至主要內容
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?

4563博客

全新的繁體中文 WordPress 網站
  • 首頁
  • 有什么好点的顺序扣款实现方案
未分類
18 8 月 2020

有什么好点的顺序扣款实现方案

有什么好点的顺序扣款实现方案

資深大佬 : zxr615 8

现在货币体系有: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; 

大佬有話說 (2)

  • 資深大佬 : 2067

    总的来说
    算法描述->伪代码->代码
    应该都是一致的

    个人观点,如果你觉得事务判断代码太复杂,应该从优化判断规则入手

  • 資深大佬 : whileFalse

    你的实现方式足够明确了,也不是很冗长。但如果你想要短一点……

    # 执行读出逻辑
    qb_new = max(0, qb – pay)
    qd_new = max(0, qd – max(0, pay – qb))
    dq_new = dq – max(0, pay – qb – qd)

    if dq_new < 0:
    return False
    else:
    # 执行写入操作

文章導覽

上一篇文章
下一篇文章

AD

其他操作

  • 登入
  • 訂閱網站內容的資訊提供
  • 訂閱留言的資訊提供
  • WordPress.org 台灣繁體中文

51la

4563博客

全新的繁體中文 WordPress 網站
返回頂端
本站採用 WordPress 建置 | 佈景主題採用 GretaThemes 所設計的 Memory
4563博客
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?
在這裡新增小工具