norate_holder.php 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141
  1. <?php
  2. /**
  3. * Created by PhpStorm.
  4. * User: stanley-king
  5. * Date: 2018/8/23
  6. * Time: 下午3:31
  7. */
  8. namespace bonus;
  9. use bonus_helper;
  10. use QueueClient;
  11. class norate_holder
  12. {
  13. private $member_id;
  14. private $usable_amount; //可用红包总金额
  15. private $mUsedType;
  16. private $mod_bonus;
  17. private $all_bonus;
  18. public function __construct($member_id,$used_type)
  19. {
  20. $this->mod_bonus = Model('user_bonus');
  21. $this->member_id = $member_id;
  22. $this->usable_amount = 0.00;
  23. $items = $this->mod_bonus->getUsableBonus($this->member_id);
  24. $this->all_bonus = [];
  25. foreach ($items as $item) {
  26. $bonus = user_bonus::create_by_param($item);
  27. $this->all_bonus[] = $bonus;
  28. $this->usable_amount += $bonus->remain_amount();
  29. }
  30. $this->usable_amount = ($this->usable_amount * 100 + 0.5) / 100;
  31. $this->mUsedType = $used_type;
  32. }
  33. public function usable_amount() {
  34. return $this->usable_amount;
  35. }
  36. public function withold_bonus($rate,$bonus_sn,$money)
  37. {
  38. foreach ($this->all_bonus as $bonus)
  39. {
  40. if($bonus_sn == $bonus->bonus_sn())
  41. {
  42. $left = intval($bonus->remain_amount() * 100 + 0.5);
  43. $money = intval($money * 100 + 0.5);
  44. $left = $left - $money;
  45. $left = $left >= 0 ? $left / 100 : 0.00;
  46. $rate = $bonus->bonus_rate();
  47. $param = $bonus->get_param();
  48. $param['remain_amount'] = $left;
  49. if($this->mUsedType == bonus_helper::send_bonus_withold) {
  50. $send = intval($bonus->send_amount() * 100 + 0.5);
  51. $send = $send + $money;
  52. $send = $send / 100;
  53. $param['send_amount'] = $send;
  54. }
  55. elseif($this->mUsedType == bonus_helper::pay_order_withold) {
  56. $paied = intval($bonus->pay_amount() * 100 + 0.5);
  57. $paied = $paied + $money;
  58. $paied = $paied / 100;
  59. $param['pay_amount'] = $paied;
  60. }
  61. else {
  62. }
  63. QueueClient::push("onUseBonus",['time' => time(),'use_type' => $this->mUsedType,'rate' => $rate,'amount' => $money / 100,'member_id' => $this->member_id]);
  64. $this->mod_bonus->replace($param);
  65. return true;
  66. }
  67. }
  68. return false;
  69. }
  70. public function withold($rate,$money)
  71. {
  72. $left_cent = intval($this->usable_amount * 100 + 0.5);
  73. $money_cent = intval($money * 100 + 0.5);
  74. if($money_cent <= 0 || $left_cent <= 0 || $left_cent <= $money_cent) {
  75. return false;
  76. }
  77. $left = $money_cent;
  78. $datas = [];
  79. foreach ($this->all_bonus as $bonus)
  80. {
  81. if($left <= 0) break;
  82. if($this->mUsedType == bonus_helper::send_bonus_withold && $bonus->can_share() == false) {
  83. continue;
  84. }
  85. $rate = $bonus->bonus_rate();
  86. $param = $bonus->get_param();
  87. $remain = $bonus->remain_amount();
  88. $remain = intval($remain * 100 + 0.5);
  89. if($left >= $remain) {
  90. $left -= $remain;
  91. $param['remain_amount'] = 0.00;
  92. $used = $remain;
  93. } else {
  94. $remain -= $left;
  95. $param['remain_amount'] = $remain / 100;
  96. $used = $left;
  97. $left = 0;
  98. }
  99. if($this->mUsedType == bonus_helper::send_bonus_withold) {
  100. $send = intval($bonus->send_amount() * 100 + 0.5);
  101. $send = $send + $used;
  102. $send = $send / 100;
  103. $param['send_amount'] = $send;
  104. }
  105. elseif($this->mUsedType == bonus_helper::pay_order_withold) {
  106. $paied = intval($bonus->pay_amount() * 100 + 0.5);
  107. $paied = $paied + $used;
  108. $paied = $paied / 100;
  109. $param['pay_amount'] = $paied;
  110. }
  111. else {
  112. }
  113. QueueClient::push("onUseBonus",['time' => time(),'use_type' => $this->mUsedType,'rate' => $rate,'amount' => $used / 100,'member_id' => $this->member_id]);
  114. array_push($datas,$param);
  115. }
  116. if(!empty($datas)) {
  117. $this->mod_bonus->replaceAll($datas);
  118. }
  119. return true;
  120. }
  121. }