register.php 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195
  1. <?php
  2. /**
  3. * Created by PhpStorm.
  4. * User: stanley-king
  5. * Date: 2017/11/2
  6. * Time: 下午7:57
  7. */
  8. namespace async;
  9. use search;
  10. use push_helper;
  11. use bonus;
  12. use bonus_helper;
  13. use member_info;
  14. use Log;
  15. use Exception;
  16. use account_helper;
  17. class register extends IAsync
  18. {
  19. private $cur_user;
  20. private $cur_info;
  21. private $last_inviter;
  22. const max_inviters = 10;
  23. public function __construct($user,$inviter)
  24. {
  25. $mod_member = Model('member');
  26. $minfo = $mod_member->getMemberInfo(['member_id' => $user], '*', true);
  27. $this->cur_user = $user;
  28. $this->cur_info = new member_info($minfo);
  29. if($this->cur_info->binded_wechat() == false) {
  30. throw new Exception('为防止欺诈,需要微信授权登录');
  31. }
  32. $this->last_inviter = $inviter;
  33. }
  34. private function inviters()
  35. {
  36. if($this->last_inviter <= 0){
  37. return [];
  38. }
  39. else
  40. {
  41. $inviters = [];
  42. $parent_inviters = search\relation_client::instance()->fetch_inviters(['user_id' => $this->last_inviter]);
  43. $inviters[] = $this->last_inviter;
  44. foreach ($parent_inviters as $inviter) {
  45. $inviters[] = $inviter;
  46. }
  47. return $inviters;
  48. }
  49. }
  50. public function run()
  51. {
  52. if($this->cur_info->rewared_inviter()) return false;
  53. if($this->tag_rewarded($this->cur_user))
  54. {
  55. $unionid = $this->cur_info->unionid();
  56. $mod_member = Model('member');
  57. $count = $mod_member->getMemberCount(['member_wxunionid' => $unionid]);
  58. if($count <= 1) {
  59. $this->reward_user();
  60. $inviters = $this->inviters();
  61. $this->notify_inviter($inviters);
  62. }
  63. $this->add_invitee($this->last_inviter);
  64. }
  65. return true;
  66. }
  67. private function notify_inviter($inviters)
  68. {
  69. if(empty($inviters)) return false;
  70. $level = 0;
  71. $ex_invitee = $this->cur_user;
  72. foreach ($inviters as $inviter)
  73. {
  74. $this->reward_inviter($inviter,$level);
  75. $invitees = search\relation_client::instance()->fetch_invitees(['user_id' => $inviter]);
  76. $invitees = $this->ex_user($invitees,$ex_invitee);
  77. //$this->reward_invitees($inviter,$invitees,$level);
  78. $ex_invitee = $inviter;
  79. $level += 1;
  80. }
  81. return true;
  82. }
  83. //给Level 级的邀请者发奖励
  84. private function reward_inviter($inviter, $level)
  85. {
  86. $inviter_info = new member_info($inviter);
  87. if($inviter_info->invitees() > register::max_inviters) return false;
  88. $params = bonus\parameters::guide_inviter($this->cur_info->nickname(),$level);
  89. foreach ($params as $param)
  90. {
  91. $type = bonus_helper::create_type_input($param);
  92. $money = $type->getTotal_amount();
  93. $rate = $type->bonus_rate();
  94. $ret = bonus_helper::make_bonus($param,$param['rate_money']);
  95. if($ret != false)
  96. {
  97. $type_sn = $ret['type_sn'];
  98. $fSuccess = bonus_helper::send($type_sn,[$inviter]);
  99. if($fSuccess == false) {
  100. Log::record("send bonus error: type_sn={$type_sn}",Log::DEBUG);
  101. }
  102. else {
  103. push_helper::inviter_bonus($inviter,$this->cur_user,$level + 1,$money,$rate,$type_sn);
  104. $this->add_reward($inviter,$money);
  105. }
  106. }
  107. else {
  108. return false;
  109. }
  110. }
  111. return true;
  112. }
  113. private function reward_invitees($inviter, $invitees, $level)
  114. {
  115. if(empty($invitees)) return false;
  116. $inviter_info = new member_info($inviter);
  117. if($level > 1) return false;
  118. $num = count($invitees);
  119. $params = bonus\parameters::guide_invitee($inviter_info->nickname(),$this->cur_info->nickname(),$level,$num);
  120. foreach ($params as $param)
  121. {
  122. $type = bonus_helper::create_type_input($param);
  123. $money = $type->getTotal_amount();
  124. $rate = $type->bonus_rate();
  125. $ret = bonus_helper::make_bonus($param,$param['rate_money']);
  126. if($ret != false)
  127. {
  128. $type_sn = $ret['type_sn'];
  129. bonus_helper::send($type_sn,$invitees);
  130. $i = 0;
  131. foreach ($invitees as $invitee)
  132. {
  133. $amount = $money / $num;
  134. $this->add_reward($invitee,$amount);
  135. if($i < self::max_level_pushs) {
  136. push_helper::invitee_bonus($inviter, $invitee, $this->cur_info, $level + 1, $amount, $rate, $type_sn);
  137. }
  138. $i++;
  139. }
  140. } else {
  141. return false;
  142. }
  143. }
  144. return true;
  145. }
  146. private function reward_user()
  147. {
  148. if($this->last_inviter > 0)
  149. {
  150. $params = bonus\parameters::user_reigster_fixed();
  151. foreach ($params as $param) {
  152. $type = bonus_helper::create_type_input($param);
  153. $money = $type->getTotal_amount();
  154. $ret = bonus_helper::make_bonus($param, $param['rate_money']);
  155. if ($ret != false) {
  156. $type_sn = $ret['type_sn'];
  157. bonus_helper::send($type_sn, [$this->cur_user]);
  158. push_helper::register_bonus($this->cur_user, $money, $type_sn);
  159. } else {
  160. return false;
  161. }
  162. }
  163. }
  164. else {
  165. $type_sn = account_helper::invite_bonus(0);
  166. if($type_sn != false) {
  167. bonus_helper::send($type_sn, [$this->cur_user]);
  168. push_helper::register_bonus($this->cur_user, 100, $type_sn);
  169. }
  170. }
  171. return true;
  172. }
  173. }