order.php 7.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218
  1. <?php
  2. /**
  3. * Created by PhpStorm.
  4. * User: stanley-king
  5. * Date: 2017/11/4
  6. * Time: 下午10:17
  7. */
  8. namespace async_push;
  9. use push_helper;
  10. use order_helper;
  11. use member_info;
  12. use Exception;
  13. use search;
  14. use bonus;
  15. use bonus_helper;
  16. use sms_helper;
  17. use Sms;
  18. class simple_order
  19. {
  20. private $order_info;
  21. public function __construct($order_info)
  22. {
  23. $this->order_info = $order_info;
  24. }
  25. public function user() {
  26. return $this->order_info['order_info']['buyer_id'];
  27. }
  28. public function discount() {
  29. return $this->order_info['order_info']['pd_amount'];
  30. }
  31. public function goods() {
  32. return $this->order_info['order_goods'][0];
  33. }
  34. public function total() {
  35. return $this->order_info['order_info']['order_amount'];
  36. }
  37. }
  38. class order extends IPusher
  39. {
  40. private $simple_order;
  41. private $user_info;
  42. private $paysn;
  43. public function __construct($paysn)
  44. {
  45. $this->paysn = $paysn;
  46. $order = $this->order(['pay_sn' => $paysn]);
  47. if(empty($order)) throw new Exception("错误的订单");
  48. $this->simple_order = new simple_order($order);
  49. $user = $this->simple_order->user();
  50. $this->user_info = new member_info($user);
  51. }
  52. public function run()
  53. {
  54. }
  55. public function onPaySuccess()
  56. {
  57. push_helper::user_order_paied($this->user_info->member_id(),$this->paysn);
  58. $inviters = search\relation_client::instance()->fetch_inviters(['user_id' => $this->user_info->member_id()]);
  59. $this->notify_paided_goods($inviters);
  60. }
  61. private function notify_paided_goods($inviters)
  62. {
  63. if(empty($inviters)) return false;
  64. $goods = $this->simple_order->goods();
  65. $level = 0;
  66. $ex_invitee = $this->user_info->member_id();
  67. foreach ($inviters as $inviter)
  68. {
  69. $this->nofity_paied_inviter($inviter,$level,$goods);
  70. $invitees = search\relation_client::instance()->fetch_invitees(['user_id' => $inviter]);
  71. $invitees = $this->ex_user($invitees,$ex_invitee);
  72. $this->nofity_paied_invitees($inviter,$invitees,$level,$goods);
  73. $ex_invitee = $inviter;
  74. $level += 1;
  75. }
  76. return true;
  77. }
  78. private function nofity_paied_inviter($inviter,$level,$goods)
  79. {
  80. push_helper::inviter_order_paied($inviter,$this->user_info->member_id(),$level + 1,$goods);
  81. }
  82. private function nofity_paied_invitees($inviter,$invitees,$level,$goods)
  83. {
  84. foreach ($invitees as $invitee) {
  85. push_helper::invitee_order_paied($invitee,$this->user_info->member_id(),$goods);
  86. }
  87. }
  88. public function onOrderComplete()
  89. {
  90. $num = \fcode\operator::unlock($this->paysn);
  91. if($num > 0) {
  92. push_helper::fcode_unlock($this->user_info->member_id(),$num);
  93. }
  94. sms_helper::send_nostore_message($this->user_info->mobile(),Sms::order_received,['time'=>'5']);
  95. $this->send_complete_bonus();
  96. $inviters = search\relation_client::instance()->fetch_inviters(['user_id' => $this->user_info->member_id()]);
  97. $this->notify_complete_inviter($inviters);
  98. }
  99. private function notify_complete_inviter($inviters)
  100. {
  101. if(empty($inviters)) return false;
  102. $level = 0;
  103. $ex_invitee = $this->user_info->member_id();
  104. foreach ($inviters as $inviter)
  105. {
  106. $this->reward_inviter($inviter,$level);
  107. $invitees = search\relation_client::instance()->fetch_invitees(['user_id' => $inviter]);
  108. $invitees = $this->ex_user($invitees,$ex_invitee);
  109. $this->reward_invitees($inviter,$invitees,$level);
  110. $ex_invitee = $inviter;
  111. $level += 1;
  112. }
  113. return true;
  114. }
  115. private function reward_inviter($inviter, $level)
  116. {
  117. $params = bonus\parameters::order_complete_inviter($this->user_info->nickname(),$level);
  118. foreach ($params as $param)
  119. {
  120. $type = bonus_helper::create_type_input($param);
  121. $money = $type->getTotal_amount();
  122. $rate = $type->bonus_rate();
  123. $ret = bonus_helper::make_bonus($param,$param['rate_money']);
  124. if($ret != false) {
  125. $type_sn = $ret['type_sn'];
  126. bonus_helper::send($type_sn,[$inviter]);
  127. push_helper::inviter_order_complete_bonus($inviter,$this->user_info->member_id(),$level + 1,$money,$rate,$type_sn);
  128. } else {
  129. return false;
  130. }
  131. }
  132. }
  133. private function reward_invitees($inviter, $invitees, $level)
  134. {
  135. if(empty($invitees)) return false;
  136. $inviter_info = new member_info($inviter);
  137. $num = count($invitees);
  138. $params = bonus\parameters::order_complete_invitee($inviter_info->nickname(),$level,$num);
  139. foreach ($params as $param)
  140. {
  141. $type = bonus_helper::create_type_input($param);
  142. $money = $type->getTotal_amount();
  143. $rate = $type->bonus_rate();
  144. $ret = bonus_helper::make_bonus($param,$param['rate_money']);
  145. if($ret != false) {
  146. $type_sn = $ret['type_sn'];
  147. bonus_helper::send($type_sn,$invitees);
  148. foreach ($invitees as $invitee) {
  149. push_helper::invitee_order_complete_bonus($invitee,$this->user_info,$money / $num,$rate,$type_sn);
  150. }
  151. } else {
  152. return false;
  153. }
  154. }
  155. }
  156. private function send_complete_bonus()
  157. {
  158. $total_amount = $this->simple_order->total();
  159. $fixed_params = bonus\parameters::order_complete_fixed($total_amount);
  160. foreach ($fixed_params as $param)
  161. {
  162. $ret = bonus_helper::make_bonus($param,$param['rate_money']);
  163. if($ret != false) {
  164. $type_sn = $ret['type_sn'];
  165. $bonus = bonus_helper::send($type_sn, [$this->user_info->member_id()]);
  166. $bonus_value = $bonus[0]['bonus_value'];
  167. $bonus_rate = $bonus[0]['bonus_rate'];
  168. push_helper::user_order_complete_fixed($this->user_info->member_id(),$bonus_value,$bonus_rate,$type_sn);
  169. }
  170. }
  171. $random_params = bonus\parameters::order_complete_random($total_amount);
  172. foreach ($random_params as $param)
  173. {
  174. $ret = bonus_helper::make_bonus($param,$param['rate_money']);
  175. if($ret != false) {
  176. $type_sn = $ret['type_sn'];
  177. push_helper::user_order_complete_random($this->user_info->member_id(),$param['rate_money']['num'],$type_sn);
  178. }
  179. }
  180. }
  181. private function order($condition)
  182. {
  183. $model_order = Model('order');
  184. $order_list = $model_order->getNormalOrderList($condition,0, '*', 'order_id desc', '', ['order_common','order_address', 'order_goods']);
  185. $order_helper = new order_helper($order_list);
  186. $orders = $order_helper->format();
  187. if(!empty($orders)) {
  188. return $orders[0];
  189. } else {
  190. return false;
  191. }
  192. }
  193. }