order_info = $order_info; } public function user() { return $this->order_info['order_info']['buyer_id']; } public function discount() { return $this->order_info['order_info']['pd_amount']; } public function goods() { return $this->order_info['order_goods'][0]; } public function total() { return $this->order_info['order_info']['order_amount']; } } class order extends IPusher { private $simple_order; private $user_info; private $paysn; public function __construct($paysn) { $this->paysn = $paysn; $order = $this->order(['pay_sn' => $paysn]); if(empty($order)) throw new Exception("错误的订单"); $this->simple_order = new simple_order($order); $user = $this->simple_order->user(); $this->user_info = new member_info($user); } public function run() { } public function onPaySuccess() { push_helper::user_order_paied($this->user_info->member_id(),$this->paysn); $inviters = search\relation_client::instance()->fetch_inviters(['user_id' => $this->user_info->member_id()]); $this->notify_paided_goods($inviters); } private function notify_paided_goods($inviters) { if(empty($inviters)) return false; $goods = $this->simple_order->goods(); $level = 0; $ex_invitee = $this->user_info->member_id(); foreach ($inviters as $inviter) { $this->nofity_paied_inviter($inviter,$level,$goods); $invitees = search\relation_client::instance()->fetch_invitees(['user_id' => $inviter]); $invitees = $this->ex_user($invitees,$ex_invitee); $this->nofity_paied_invitees($inviter,$invitees,$level,$goods); $ex_invitee = $inviter; $level += 1; } return true; } private function nofity_paied_inviter($inviter,$level,$goods) { push_helper::inviter_order_paied($inviter,$this->user_info->member_id(),$level + 1,$goods); } private function nofity_paied_invitees($inviter,$invitees,$level,$goods) { foreach ($invitees as $invitee) { push_helper::invitee_order_paied($invitee,$this->user_info->member_id(),$goods); } } public function onOrderComplete() { $num = \fcode\operator::unlock($this->paysn); if($num > 0) { push_helper::fcode_unlock($this->user_info->member_id(),$num); } sms_helper::send_nostore_message($this->user_info->mobile(),Sms::order_received,['time'=>'5']); $this->send_complete_bonus(); $inviters = search\relation_client::instance()->fetch_inviters(['user_id' => $this->user_info->member_id()]); $this->notify_complete_inviter($inviters); } private function notify_complete_inviter($inviters) { if(empty($inviters)) return false; $level = 0; $ex_invitee = $this->user_info->member_id(); foreach ($inviters as $inviter) { $this->reward_inviter($inviter,$level); $invitees = search\relation_client::instance()->fetch_invitees(['user_id' => $inviter]); $invitees = $this->ex_user($invitees,$ex_invitee); $this->reward_invitees($inviter,$invitees,$level); $ex_invitee = $inviter; $level += 1; } return true; } private function reward_inviter($inviter, $level) { $params = bonus\parameters::order_complete_inviter($this->user_info->nickname(),$level); foreach ($params as $param) { $type = bonus_helper::create_type_input($param); $money = $type->getTotal_amount(); $rate = $type->bonus_rate(); $ret = bonus_helper::make_bonus($param,$param['rate_money']); if($ret != false) { $type_sn = $ret['type_sn']; bonus_helper::send($type_sn,[$inviter]); push_helper::inviter_order_complete_bonus($inviter,$this->user_info->member_id(),$level + 1,$money,$rate,$type_sn); } else { return false; } } } private function reward_invitees($inviter, $invitees, $level) { if(empty($invitees)) return false; $inviter_info = new member_info($inviter); $num = count($invitees); $params = bonus\parameters::order_complete_invitee($inviter_info->nickname(),$level,$num); foreach ($params as $param) { $type = bonus_helper::create_type_input($param); $money = $type->getTotal_amount(); $rate = $type->bonus_rate(); $ret = bonus_helper::make_bonus($param,$param['rate_money']); if($ret != false) { $type_sn = $ret['type_sn']; bonus_helper::send($type_sn,$invitees); foreach ($invitees as $invitee) { push_helper::invitee_order_complete_bonus($invitee,$this->user_info,$money / $num,$rate,$type_sn); } } else { return false; } } } private function send_complete_bonus() { $total_amount = $this->simple_order->total(); $fixed_params = bonus\parameters::order_complete_fixed($total_amount); foreach ($fixed_params as $param) { $ret = bonus_helper::make_bonus($param,$param['rate_money']); if($ret != false) { $type_sn = $ret['type_sn']; $bonus = bonus_helper::send($type_sn, [$this->user_info->member_id()]); $bonus_value = $bonus[0]['bonus_value']; $bonus_rate = $bonus[0]['bonus_rate']; push_helper::user_order_complete_fixed($this->user_info->member_id(),$bonus_value,$bonus_rate,$type_sn); } } $random_params = bonus\parameters::order_complete_random($total_amount); foreach ($random_params as $param) { $ret = bonus_helper::make_bonus($param,$param['rate_money']); if($ret != false) { $type_sn = $ret['type_sn']; push_helper::user_order_complete_random($this->user_info->member_id(),$param['rate_money']['num'],$type_sn); } } } private function order($condition) { $model_order = Model('order'); $order_list = $model_order->getNormalOrderList($condition,0, '*', 'order_id desc', '', ['order_common','order_address', 'order_goods']); $order_helper = new order_helper($order_list); $orders = $order_helper->format(); if(!empty($orders)) { return $orders[0]; } else { return false; } } }