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; const def_bless = '熊猫美妆与你分享美丽的秘密~'; 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) { $param['make_type'] = \bonus\type::MakeInviteType; $param['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; } public static function invite_bonus($relay_id,&$err) { $last_type = bonus_helper::last_invite_type($relay_id); if(is_null($last_type) == false) { $type = bonus_helper::create_type($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 = new predeposit_helper($from_id); $bonus_rate = $pred->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->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 = new predeposit_helper($from_id); $bonus_rate = $pred->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->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); Model('member')->inc_rate_version($member_id); } 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}失败."); } } Model('member')->inc_rate_version($member_id); } 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}失败."); } Model('member')->inc_rate_version($member_id); } public static function register_bonus($member_id) { $rate_moneys = []; { $item['amount'] = 300; $item['num'] = 10; $item['rate'] = 40; $rate_moneys[] = $item; } { $item['amount'] = 500; $item['num'] = 10; $item['rate'] = 30; $rate_moneys[] = $item; } $total = 0; foreach ($rate_moneys as $rate) { $amount = $rate['amount']; $num = $rate['num']; $param = self::base_param($amount,$num); self::admin_param($param); $param['make_type'] = \bonus\type::MakeRegisterType; $param['type_name'] = "新人红包"; $ret = bonus_helper::make_bonus($param,array($rate)); if($ret != false) { bonus_helper::send($ret['type_sn'],array($member_id)); $total += $amount; } } Model('member')->inc_rate_version($member_id); if(($total * 100 + 0.5) > 0 ) { return $total; } else { return false; } } static private function make_rates($order_amount) { $money = intval($order_amount/100) * 100; $rate_moneys = []; if(intval($money / 2) > 0) { $item['amount'] = intval($money / 2); $item['num'] = 10; $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) { Log::record("paysuccess_bonus total_amount={$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']; Log::record("type_sn={$type_sn} value={$val}"); } } push_helper::paysuccess_bonus($buyer_id,$val); Model('member')->inc_rate_version($buyer_id); return array('money' => $val,'total_num' => self::total_number,'sender_name' => '熊猫美妆'); } 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,$mobile,$member_info['member_nickname']); } public static function onLogin($member_id) { relation_helper::onLogin($member_id); } }