binded_over() == false && $type->isEnd() == false) { return $type->getType_sn(); } } $param = bonus\parameters::invite($relay_id); $ret = bonus_helper::make_bonus($param,$param['rate_money']); if($ret != false) { $type_sn = $ret['type_sn']; return $type_sn; } else { return false; } } private static function evaluate_bonus($member_id,&$money) { $param = bonus\parameters::evaluate(); $type = bonus_helper::create_type_input($param); $money = $type->getTotal_amount(); $ret = bonus_helper::make_bonus($param,$param['rate_money']); 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_bonus($member_id,&$money) { $param = bonus\parameters::guide(); $type = bonus_helper::create_type_input($param); $money = $type->getTotal_amount(); $ret = bonus_helper::make_bonus($param,$param['rate_money']); 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 gain_system($to_id, $amount) { if(self::$stSysBonus == null) { self::$stSysBonus = new bonus\sys_bonus(); } if(self::$stSysBonus->bind_over()) { $param = self::$stSysBonus->gen_param($rates); $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; } 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; } $minfo = new member_info($from_id); $param = \bonus\parameters::shake_gain($minfo->member_id(),$minfo->mobile(),$minfo->nickname(),$bonus_rate['rate'],$bonus_rate['amount']); $ret = bonus_helper::make_bonus($param,$param['rate_money']); if($ret != false) { $to_minfo = new member_info($to_id); $thief = $to_minfo->nickname(); bonus_helper::withold_money($from_id,$bonus_rate['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']; $minfo = new member_info($from_id); $param = \bonus\parameters::shake_lost($minfo->member_id(),$minfo->mobile(),$minfo->nickname(),$bonus_rate['rate'],$bonus_rate['amount']); $ret = bonus_helper::make_bonus($param,$param['rate_money']); 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 use_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); } public 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); } $params = \bonus\parameters::order_cancel($bonus_rate); foreach ($params as $param) { $rate_money = $param['rate_money']; $ret = bonus_helper::make_bonus($param,$rate_money); $rate = $rate_money[0]['rate']; $amount = $rate_money[0]['amount']; 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}失败."); } } Model()->table('order')->where(array('order_sn' => $order_sn))->update(array('bonus_rate' => '')); } 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 = \bonus\parameters::bonus_refund($rate,$amount); $ret = bonus_helper::make_bonus($param,$param['rate_money']); 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 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 = \bonus\parameters::reigster_fixed(); $fix_bonus = self::send_bonus($fix_param,$fix_param['rate_money'],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 = \bonus\parameters::register_random(); $random_bonus = self::send_bonus($random_param,$random_param['rate_money'],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; } public static function add_bonus($rate,$amount,$member_ids,$type_name) { $param = \bonus\parameters::admin_fixed(intval($rate),doubleval($amount),count($member_ids),$type_name); $fix_bonus = self::send_bonus($param,$param['rate_money'],$member_ids); if($fix_bonus != false) { return true; } else { return false; } } public static function withhold_bonus($rate,$amount,$member_id) { $rates = array(intval($rate) => doubleval($amount)); $ret = bonus_helper::withold($member_id,$rates); if($ret) { $pred = new predeposit_helper($member_id); $pred->reduce_pred($amount); } else { Log::record('扣除预存款失败',Log::ERR); } return $ret; } static public function paysuccess_bonus($buyer_id, $total_amount) { $params = \bonus\parameters::paied($total_amount); $val = 0.00; foreach ($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,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::use_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::invite_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')); } } }