mType_sn = null; } public function reset($type_sn) { $this->mType_sn = $type_sn; } public function rate_moneys(&$amount,&$num) { $result = []; { $item['amount'] = 50; $item['num'] = 10; $item['rate'] = 50; $result[] = $item; } { $item['amount'] = 100; $item['num'] = 20; $item['rate'] = 40; $result[] = $item; } { $item['amount'] = 850; $item['num'] = 70; $item['rate'] = 30; $result[] = $item; } $amount = 1000; $num = 100; return $result; } public function type_sn() { return $this->mType_sn; } public function bind_over() { if($this->mType_sn == null) { return true; } $type = \bonus\type::create_by_sn($this->mType_sn); return $type->binded_over(); } } class account_helper { const admin_member_id = 36429; const admin_mobile = '13911129867'; const admin_name = '熊猫美妆'; const period_hour = 5 * 24; const total_number = 10; const send_type = 1; static private $stSysBonus = null; private static function base_param($amount,$total_num) { $param = array(); $param['total_amount'] = $amount; $param['total_num'] = $total_num; $param['send_type'] = 1; return $param; } private static function invite_param($relay_id,&$rate_moneys) { try { $info = new member_info($relay_id); $nickname = $info->nickname(); $type_name = "您的好友{$nickname},邀请您使用熊猫美妆"; } catch (Exception $ex) { $type_name = "好友邀请红包"; } $param['make_type'] = \bonus\type::MakeInviteType; $param['type_name'] = $type_name; $param['fixed_money'] = 20; $param['total_num'] = 10; $param['send_type'] = \bonus\type::SendType_Fixed; $param['grab_type'] = \bonus\type::GrabType_EXEXIST; $param['bonus_rate'] = 50; $param['relayer_id'] = $relay_id; $param['sender_id'] = self::admin_member_id; $param['sender_name'] = self::admin_name; $rate_moneys = []; $item['amount'] = 200; $item['num'] = 10; $item['rate'] = 50; $rate_moneys[] = $item; return $param; } private static function evaluate_param(&$rate_moneys) { $param['make_type'] = \bonus\type::MakeEvaluateType; $param['type_name'] = "订单评论奖励红包"; $param['fixed_money'] = 10; $param['total_num'] = 1; $param['send_type'] = \bonus\type::SendType_Fixed; $param['grab_type'] = \bonus\type::GrabType_All; $param['bonus_rate'] = 50; $param['sender_id'] = self::admin_member_id; $param['sender_name'] = self::admin_name; $rate_moneys = []; $item['amount'] = 10; $item['num'] = 1; $item['rate'] = 50; $rate_moneys[] = $item; return $param; } public static function evaluate_bonus($member_id,&$money) { $param = self::evaluate_param($rates); $type = bonus_helper::create_type_input($param); $money = $type->getTotal_amount(); $ret = bonus_helper::make_bonus($param,$rates); if($ret != false) { $type_sn = $ret['type_sn']; bonus_helper::send($type_sn,array($member_id)); return $type_sn; } else { return false; } } private static function guide_param(&$rate_moneys) { $param['make_type'] = \bonus\type::MakePayType; $param['type_name'] = "邀请好友,奖励红包"; $param['fixed_money'] = 10; $param['total_num'] = 1; $param['send_type'] = \bonus\type::SendType_Fixed; $param['grab_type'] = \bonus\type::GrabType_All; $param['bonus_rate'] = 50; $param['sender_id'] = self::admin_member_id; $param['sender_name'] = self::admin_name; $rate_moneys = []; $item['amount'] = 10; $item['num'] = 1; $item['rate'] = 50; $rate_moneys[] = $item; return $param; } public static function guide_bonus($member_id,&$money) { $param = self::guide_param($rates); $type = bonus_helper::create_by_paramer($param); $money = $type->getTotal_amount(); $ret = bonus_helper::make_bonus($param,$rates); if($ret != false) { $type_sn = $ret['type_sn']; bonus_helper::send($type_sn,array($member_id)); return $type_sn; } else { return false; } } public static function invite_bonus($relay_id) { $last_type = bonus_helper::last_invite_type($relay_id); if(is_null($last_type) == false) { $type = bonus_helper::create_by_paramer($last_type); if($type->binded_over() == false && $type->isEnd() == false) { return $type->getType_sn(); } } $param = self::invite_param($relay_id,$rates); $ret = bonus_helper::make_bonus($param,$rates); if($ret != false) { $type_sn = $ret['type_sn']; return $type_sn; } else { return false; } } public static function gain_sysBonus($to_id,$amount) { if(self::$stSysBonus == null) { self::$stSysBonus = new sys_bonus(); } if(self::$stSysBonus->bind_over()) { $rates = self::$stSysBonus->rate_moneys($amount,$num); $param = self::base_param($amount,$num); self::admin_param($param); $param['make_type'] = \bonus\type::MakeShakeGainType; $param['type_name'] = "从熊猫美妆摇来的红包"; $ret = bonus_helper::make_bonus($param,$rates); if($ret != false) { $type_sn = $ret['type_sn']; self::$stSysBonus->reset($type_sn); } else { return false; } } $bonus = bonus_helper::send(self::$stSysBonus->type_sn(),array($to_id)); return $bonus; } private static function admin_param(&$param) { $param['sender_id'] = self::admin_member_id; $param['sender_mobile'] = self::admin_mobile; $param['sender_name'] = self::admin_name; } private static function make_rate($amount, $num, $rate) { $rate_moneys = []; $item['amount'] = $amount; $item['num'] = $num; $item['rate'] = $rate; $rate_moneys[] = $item; return $rate_moneys; } public static function gain_bonus($from_id,$to_id,$amount) { $pred_from = new predeposit_helper($from_id); $bonus_rate = $pred_from->find_bonus($amount); if($bonus_rate == false) { return false; } $rate = $bonus_rate['rate']; $amount = $bonus_rate['amount']; $param = self::base_param($amount,1); $minfo = new member_info($from_id); $param['sender_id'] = $minfo->member_id(); $param['sender_mobile'] = $minfo->mobile(); $param['sender_name'] = $minfo->nickname(); $param['make_type'] = \bonus\type::MakeShakeGainType; $name = $minfo->nickname(); $param['type_name'] = "从{$name}摇来的红包"; $rate_moneys = self::make_rate($amount,1,$rate); $ret = bonus_helper::make_bonus($param,$rate_moneys); if($ret != false) { $to_minfo = new member_info($to_id); $thief =$to_minfo->nickname(); bonus_helper::withold_money($from_id,$rate,$amount); $pred_from->handout_bonus($amount,$ret['type_sn'],$thief,"{$thief}摇走了您{$amount}元的红包.",\bonus\type::MakeShakeGainType); $bonusex = bonus_helper::send($ret['type_sn'],array($to_id)); push_helper::stolen_bonus($minfo,$to_minfo,$amount); return $bonusex; } else { return false; } } public static function lost_bonus($from_id,$to_id,$amount) { $pred_from = new predeposit_helper($from_id); $bonus_rate = $pred_from->find_bonus($amount); if($bonus_rate == false) { return false; } $rate = $bonus_rate['rate']; $amount = $bonus_rate['amount']; $param = self::base_param($amount,1); $minfo = new member_info($from_id); $param['sender_id'] = $minfo->member_id(); $param['sender_mobile'] = $minfo->mobile(); $param['sender_name'] = $minfo->nickname(); $param['make_type'] = \bonus\type::MakeShakeLostType; $name = $minfo->nickname(); $param['type_name'] = "{$name}摇飞的红包"; $rate_moneys = self::make_rate($amount,1,$rate); $ret = bonus_helper::make_bonus($param,$rate_moneys); if($ret != false) { $to_info = new member_info($to_id); $pred_from->handout_bonus($amount,$ret['type_sn'],$to_info->nickname(),"您摇丢了{$amount}的红包.",\bonus\type::MakeShakeLostType); bonus_helper::withold_money($from_id,$rate,$amount); $bonusex = bonus_helper::send($ret['type_sn'],array($to_id)); push_helper::fly_bonus($minfo,$to_info,$amount); return $bonusex; } else { return false; } } private static function pay_refund($member_id,$amount,$bonus_name) { // $param = self::base_param($amount,1); // self::admin_param($param); // $param['make_type'] = \bonus\type::MakePayRefundType; // $param['type_name'] = $bonus_name; // // $ret = bonus_helper::make_bonus($param); // if($ret != false) // { // bonus_helper::send($ret['type_sn'],array($member_id)); // push_helper::order_refund_bonus($member_id,$amount); // } else { // Log::record("给用户 {$member_id} 退款{$amount}失败."); // } } private static function pay_bonus($order_sn,$member_id) { $mod_order = Model('order'); $order = $mod_order->getOrderInfo(array('order_sn' => $order_sn)); $pd_amount = $order['pd_amount']; $bonus_rate = $order['bonus_rate']; if(empty($bonus_rate)) { $bonus_rate = array(30 => $pd_amount); } else { $bonus_rate = unserialize($bonus_rate); } $pred = new predeposit_helper($member_id); $pred->pay_bonus($bonus_rate); } private static function order_cancel($order_sn,$member_id) { $mod_order = Model('order'); $order = $mod_order->getOrderInfo(array('order_sn' => $order_sn)); $pd_amount = $order['pd_amount']; $bonus_rate = $order['bonus_rate']; if(empty($bonus_rate)) { $bonus_rate = array(30 => $pd_amount); } else { $bonus_rate = unserialize($bonus_rate); } foreach ($bonus_rate as $rate => $amount) { $param = self::base_param($amount,1); self::admin_param($param); $param['make_type'] = \bonus\type::MakeOrderCancelType; $param['type_name'] = '订单退款'; $rate_moneys = self::make_rate($amount,1,$rate); $ret = bonus_helper::make_bonus($param,$rate_moneys); if($ret != false) { bonus_helper::send($ret['type_sn'],array($member_id)); push_helper::order_cancel_bonus($member_id,$rate,$amount); } else { Log::record("给用户{$member_id} 退款{$amount}失败."); } } } public static function bonus_refund($type_sn,$member_id) { $type = \bonus\type::create_by_sn($type_sn); $amount = $type->remain_amount(); $rate = $type->bonus_rate(); if(empty($rate)) $rate = 30; $param = self::base_param($amount,1); self::admin_param($param); $param['make_type'] = \bonus\type::MakeBonusRefundType; $param['type_name'] = "发送红包过期退款"; $rate_moneys = self::make_rate($amount,1,$rate); $ret = bonus_helper::make_bonus($param,$rate_moneys); if($ret != false) { $bonus = bonus_helper::send($ret['type_sn'],array($member_id)); if($bonus != false) { push_helper::bonus_refund($member_id,$amount); } } else { Log::record("给用户 {$member_id} 红包退款{$amount}失败."); } } private static function new_fixed_param(&$rate_moneys) { $param['make_type'] = \bonus\type::MakeRegisterType; $param['type_name'] = "新人红包"; $param['fixed_money'] = 20; $param['total_num'] = 1; $param['send_type'] = \bonus\type::SendType_Fixed; $param['grab_type'] = \bonus\type::GrabType_All; $param['bonus_rate'] = 50; $param['sender_id'] = self::admin_member_id; $param['sender_name'] = self::admin_name; $rate_moneys = []; $item['amount'] = 20; $item['num'] = 1; $item['rate'] = 50; $rate_moneys[] = $item; return $param; } private static function new_random_param(&$rate_moneys) { $param['make_type'] = \bonus\type::MakeRegisterType; $param['type_name'] = "新人可分享红包"; $param['total_amount'] = 200; $param['total_num'] = 10; $param['send_type'] = \bonus\type::SendType_Random; $param['grab_type'] = \bonus\type::GrabType_All; $param['bonus_rate'] = 30; $param['sender_id'] = self::admin_member_id; $param['sender_name'] = self::admin_name; $rate_moneys = []; $item['amount'] = 200; $item['num'] = 10; $item['rate'] = 30; $rate_moneys[] = $item; return $param; } private static function send_bonus($param,$rates,array $member_ids) { $ret = bonus_helper::make_bonus($param,$rates); if($ret != false) { $type_sn = $ret['type_sn']; $items = bonus_helper::send($type_sn,$member_ids); if($items != false) { $result = []; foreach ($items as $bonus_param) { $bonus = bonus\user_bonus::create_by_param($bonus_param); $user_id = $bonus->user_id(); $result[$user_id] = $bonus; } return $result; } else { return false; } } else { return false; } } public static function register_bonus($member_id) { $member_id = intval($member_id); $total_amount = 0.00; $fix_param = self::new_fixed_param($fix_rates); $fix_bonus = self::send_bonus($fix_param,$fix_rates,array($member_id)); if($fix_bonus != false && array_key_exists($member_id,$fix_bonus)) { $bonus = $fix_bonus[$member_id]; $total_amount += $bonus->bonus_value(); } $random_param = self::new_random_param($random_rates); $random_bonus = self::send_bonus($random_param,$random_rates,array($member_id)); if($random_bonus != false && array_key_exists($member_id,$random_bonus)) { $bonus = $random_bonus[$member_id]; $total_amount += $bonus->bonus_value(); } return $total_amount; } static private function make_rates($order_amount) { $money = intval($order_amount/100) * 100; $rate_moneys = []; if(intval($money / 4) > 0) { $item['amount'] = intval($money / 4); $item['num'] = 5; $item['rate'] = 40; $rate_moneys[] = $item; } if($money == 0) $money = 100; { $item['amount'] = $money; $item['num'] = 10; $item['rate'] = 30; $rate_moneys[] = $item; } return $rate_moneys; } static public function paysuccess_bonus($buyer_id, $total_amount) { $rate_moneys = self::make_rates($total_amount); $val = 0.00; foreach ($rate_moneys as $rate_money) { $amount = $rate_money['amount']; $num = $rate_money['num']; $param = self::base_param($amount,$num); self::admin_param($param); $param['send_start_date'] = time(); $param['send_end_date'] = $param['send_start_date'] + self::period_hour * 3600; $param['make_type'] = bonus\type::MakePayType; $param['type_name'] = "支付奖励红包(可分享)"; $ret = bonus_helper::make_bonus($param,array($rate_money)); if($ret != false) { $type_sn = $ret['type_sn']; $bonus = bonus_helper::send($type_sn,array($buyer_id)); $val += $bonus[0]['bonus_value']; } } return $val; } public static function onPredRefund($change_type,$member_id,$sn,$refund_id) { // $order_sn = $sn; // $order = order::create_by_sn($order_sn); // if($order == false) { // self::pay_refund($member_id,$pd_amount,"退款红包"); // } else { // self::pay_refund($member_id,$order->pd_amount(),"退款红包"); // } } public static function onPredeposit($change_type,$member_id,$sn) { if($change_type == 'order_pay' || $change_type == 'order_freeze') { self::pay_bonus($sn,$member_id); } elseif($change_type == 'order_cancel') { //发送给该用户一个同等额度的红包 self::order_cancel($sn,$member_id); } elseif($change_type == 'refund') { //发送给该用户一个同等额度的红包 } elseif($change_type == 'bonus_refund') { // 发送给该用户一个同等额度的红包 self::bonus_refund($sn,$member_id); } } //和营销相关的事件区域 public static function onRegister($member_id) { account_helper::register_bonus($member_id); relation_helper::onRegister($member_id); } public static function onRegisterBonus($member_info,\bonus\type $type,$relay_id) { $member_id = intval($member_info['member_id']); relation_helper::onRegister($member_id); if($relay_id > 0) { $share_user = $relay_id; } else { $share_user = $type->sender_id(); } $ret = relation_helper::onSubscribe($member_id,$share_user); if($ret) { $mem = new member_info($member_info); push_helper::notice_subscribe($share_user,$mem); } relation_helper::onInvite($share_user,$member_id); $amount = self::register_bonus($member_id); return $amount; } public static function onStatus($member_id) { relation_helper::onLogin($member_id); $member_info = Model('member')->getMemberInfoByID($member_id); $update_info['member_login_num'] = $member_info['member_login_num'] + 1; $update_info['member_login_time'] = time(); $update_info['member_old_login_time'] = $member_info['member_login_time']; $update_info['member_login_ip'] = getIp(); $update_info['member_old_login_ip'] = $member_info['member_login_ip']; Model('member')->editMember(array('member_id' => $member_id), $update_info); } public static function onLogin($member_id) { relation_helper::onLogin($member_id); } public static function onEvaluate($member_id) { if(self::evaluate_bonus($member_id,$money) != false) { push_helper::evaluation_bonus($member_id,$money); } } public static function onInvite($sender_id,$relay_id) { if($relay_id > 0) { $member_id = $relay_id; } else { $member_id = $sender_id; } if($member_id < 0) { return false; } if(self::guide_bonus($member_id,$money) != false) { push_helper::evaluation_bonus($member_id,$money); } } //在支付成功之后,可以提醒用户收到货后,可以收到红包奖励。 public static function onPaySuccess($pay_sn) { Log::record("account_helper::onPaySuccess pay_sn={$pay_sn}",Log::DEBUG); $mod = Model('order'); $info = $mod->getOrderInfo(array('pay_sn' => $pay_sn)); $buyer_id = intval($info['buyer_id']); push_helper::paysuccess($buyer_id); } //在发货之后,可以提醒用户留意收货,在订单中查看物流,短信通知 public static function onOrderSend($order_sn,$logistics_company,$logistics) { Log::record("account_helper::onOrderSend order_sn={$order_sn} company={$logistics_company} no={$logistics}",Log::DEBUG); $mod = Model('order'); $info = $mod->getOrderInfo(array('order_sn' => $order_sn)); $buyer_id = intval($info['buyer_id']); if($buyer_id <= 0) return; $mem_info = new member_info($buyer_id); $mobile = $mem_info->mobile(); sms_helper::send_nostore_message($mobile,Sms::order_sended,array('company'=> $logistics_company,'logistics'=>$logistics,'time'=>'5')); } public static function onOrderSuccess($order_id) { if(empty($pay_sn)) { Log::record("account_helper::onOrderSuccess $order_id error.",Log::ERR); } else { Log::record("account_helper::onOrderSuccess $order_id={$order_id}.",Log::ERR); } $mod_order = Model('order'); $order = $mod_order->getOrderInfo(array('order_id' => $order_id)); $buyer_id = intval($order['buyer_id']); $goods_amount = intval($order['goods_amount']); if($buyer_id <= 0) { Log::record("account_helper::onOrderSuccess err buyer_id.",Log::ERR); return; } $bonus_amount = account_helper::paysuccess_bonus($buyer_id,$goods_amount); if(intval($bonus_amount * 100) + 0.5 > 10) { push_helper::paysuccess_bonus($buyer_id,$bonus_amount); $mem_info = new member_info($buyer_id); $mobile = $mem_info->mobile(); sms_helper::send_nostore_message($mobile,Sms::order_received,array('time'=>'5')); } } }