usable_time(); $t_r = $right->usable_time(); if($t_l > $t_r) { return 1; } elseif($t_l == $t_r) { return 0; } else { return -1; } } class witholder { private $member_id; private $mRateBonus; private $usable_amount; //可用红包总金额 private $mod_bonus; public function __construct($member_id) { $this->mod_bonus = Model('user_bonus'); $this->member_id = $member_id; $this->mRateBonus = array(); $this->usable_amount = 0.00; $this->usable_amount = $this->mod_bonus->getUsableSum($this->member_id); $items = $this->mod_bonus->getUsableBonus($this->member_id); foreach ($items as $item) { $bonus = user_bonus::create_by_param($item); $this->add_bouns($bonus); } foreach ($this->mRateBonus as &$item) { $bonuses = &$item['bonus']; uasort($bonuses,'bonus\asc_usable'); } } private function add_bouns(user_bonus $bonus) { $rate = $bonus->bonus_rate(); if(array_key_exists($rate,$this->mRateBonus) == false) { $this->mRateBonus[$rate]['bonus'] = []; $this->mRateBonus[$rate]['amount'] = 0.00; $this->mRateBonus[$rate]['rate'] = $rate; } $this->mRateBonus[$rate]['bonus'][] = $bonus; $this->mRateBonus[$rate]['amount'] = $this->mRateBonus[$rate]['amount'] + $bonus->remain_amount(); } public function usable_amount() { return $this->usable_amount; } public function withold_bonus($rate,$bonus_sn,$money) { if(array_key_exists($rate,$this->mRateBonus) == false) return false; $bounses = $this->mRateBonus[$rate]['bonus']; foreach ($bounses as $bonus) { if($bonus_sn == $bonus->bonus_sn()) { $left = intval($bonus->remain_amount() * 100 + 0.5); $money = intval($money * 100 + 0.5); $left = $left - $money; $left = $left >= 0 ? $left / 100 : 0.00; $param = $bonus->get_param(); $param['remain_amount'] = $left; $this->mod_bonus->replace($param); return true; } } return false; } public function withold($rate,$money) { if(array_key_exists($rate,$this->mRateBonus) == false) { return false; } $r_bonuses = &$this->mRateBonus[$rate]; $left = intval($money * 100 + 0.5); if($left <= 0 || intval($r_bonuses['amount'] * 100 + 0.5) < $left) { return false; } $r_bonuses['amount'] -= $money; $datas = array(); $bonuses = &$r_bonuses['bonus']; foreach ($bonuses as $bonus) { if($left <= 0) break; $param = $bonus->get_param(); $remain = $bonus->remain_amount(); $remain = intval($remain * 100 + 0.5); if($left >= $remain) { $left -= $remain; $param['remain_amount'] = 0.00; } else { $remain -= $left; $param['remain_amount'] = $remain / 100; $left = 0; } array_push($datas,$param); } if(!empty($datas)) { $this->mod_bonus->replaceAll($datas); } return true; } }