|
@@ -7,15 +7,21 @@
|
|
|
*/
|
|
|
|
|
|
|
|
|
-require_once(BASE_ROOT_PATH.'/helper/model_helper.php');
|
|
|
+require_once(BASE_ROOT_PATH . '/helper/model_helper.php');
|
|
|
+require_once(BASE_ROOT_PATH . '/helper/bonus_helper.php');
|
|
|
+
|
|
|
|
|
|
class RateMoney
|
|
|
{
|
|
|
const ASC = 1;
|
|
|
const DESC = 2;
|
|
|
private $mRates;
|
|
|
+ private $mDirty;
|
|
|
+
|
|
|
public function __construct($rates)
|
|
|
{
|
|
|
+ $this->mDirty = false;
|
|
|
+
|
|
|
$this->mRates = [];
|
|
|
foreach ($rates as $key => $val)
|
|
|
{
|
|
@@ -27,7 +33,7 @@ class RateMoney
|
|
|
ksort($this->mRates);
|
|
|
}
|
|
|
|
|
|
- public function is_enough($amount,&$rate)
|
|
|
+ public function is_enough(&$rate,$amount)
|
|
|
{
|
|
|
$amount = intval($amount * 100 + 0.5);
|
|
|
foreach ($this->mRates as $key => $val)
|
|
@@ -57,157 +63,31 @@ class RateMoney
|
|
|
return false;
|
|
|
}
|
|
|
|
|
|
+ public function with_hold($rate,$amount)
|
|
|
+ {
|
|
|
+ if(array_key_exists($rate,$this->mRates)) {
|
|
|
+ $this->mDirty = true;
|
|
|
+ $this->mRates[$rate] = $this->mRates[$rate] - $amount;
|
|
|
+ }
|
|
|
+ }
|
|
|
|
|
|
-// public function separate($order_type,$amount,$num)
|
|
|
-// {
|
|
|
-// $rates = $this->mRates;
|
|
|
-// if($order_type == self::ASC) {
|
|
|
-// ksort($rates);
|
|
|
-// } else {
|
|
|
-// krsort($rates);
|
|
|
-// }
|
|
|
-//
|
|
|
-// $moneys = $this->moneys($rates,$amount);
|
|
|
-// return $this->numbers($moneys,$num);
|
|
|
-// }
|
|
|
-//
|
|
|
-// private function numbers($moneys,$num)
|
|
|
-// {
|
|
|
-// $count = count($moneys);
|
|
|
-// if($count > $num)
|
|
|
-// {
|
|
|
-// $result = [];
|
|
|
-//
|
|
|
-// $pos = 0;
|
|
|
-// foreach ($moneys as $key => $val) {
|
|
|
-// if($pos >= $num) break;
|
|
|
-// $item['rate'] = $key;
|
|
|
-// $item['amount'] = $val;
|
|
|
-// $item['num'] = 1;
|
|
|
-// $result[] = $item;
|
|
|
-// }
|
|
|
-//
|
|
|
-// return $result;
|
|
|
-// }
|
|
|
-// else if($count == $num)
|
|
|
-// {
|
|
|
-// $result = [];
|
|
|
-// foreach ($moneys as $key => $val) {
|
|
|
-// $item['rate'] = $key;
|
|
|
-// $item['amount'] = $val;
|
|
|
-// $item['num'] = 1;
|
|
|
-// $result[] = $item;
|
|
|
-// }
|
|
|
-// return $result;
|
|
|
-// }
|
|
|
-// else
|
|
|
-// {
|
|
|
-// return $this->nor_num($moneys,$num);
|
|
|
-// }
|
|
|
-// }
|
|
|
-//
|
|
|
-// private function nor_num($moneys,$num)
|
|
|
-// {
|
|
|
-// $amount = 0;
|
|
|
-// $nums = [];
|
|
|
-// foreach ($moneys as $key => $val) {
|
|
|
-// $amount += intval($val * 100 + 0.5);
|
|
|
-// }
|
|
|
-//
|
|
|
-// foreach ($moneys as $key => $val)
|
|
|
-// {
|
|
|
-// $val = intval($val * 100 + 0.5);
|
|
|
-// $n = intval($val * $num / $amount + 0.5);
|
|
|
-// if($n == 0) {
|
|
|
-// $n = 1;
|
|
|
-// }
|
|
|
-// $nums[] = $n;
|
|
|
-// }
|
|
|
-//
|
|
|
-// $delta = array_sum($nums) - $num;
|
|
|
-// if($delta > 0)
|
|
|
-// {
|
|
|
-// while($delta > 0)
|
|
|
-// {
|
|
|
-// foreach ($nums as &$n)
|
|
|
-// {
|
|
|
-// if($delta == 0) break;
|
|
|
-//
|
|
|
-// if($n > 1) {
|
|
|
-// $n -= 1;
|
|
|
-// $delta -= 1;
|
|
|
-// }
|
|
|
-// }
|
|
|
-// }
|
|
|
-// }
|
|
|
-// elseif($delta < 0)
|
|
|
-// {
|
|
|
-// while($delta < 0)
|
|
|
-// {
|
|
|
-// foreach ($nums as &$n)
|
|
|
-// {
|
|
|
-// if($delta == 0) break;
|
|
|
-// if($n > 1) {
|
|
|
-// $n += 1;
|
|
|
-// $delta += 1;
|
|
|
-// }
|
|
|
-// }
|
|
|
-// }
|
|
|
-// }
|
|
|
-//
|
|
|
-// $result = [];
|
|
|
-// $pos = 0;
|
|
|
-// foreach ($moneys as $key => $val) {
|
|
|
-// $item['rate'] = $key;
|
|
|
-// $item['amount'] = $val;
|
|
|
-// $item['num'] = $nums[$pos];
|
|
|
-// $pos++;
|
|
|
-//
|
|
|
-// $result[] = $item;
|
|
|
-// }
|
|
|
-//
|
|
|
-// return $result;
|
|
|
-// }
|
|
|
-//
|
|
|
-// private function moneys($rates,$amount)
|
|
|
-// {
|
|
|
-// $result = [];
|
|
|
-// $amount = intval($amount * 100 + 0.5);
|
|
|
-// foreach ($rates as $key => $val)
|
|
|
-// {
|
|
|
-// $val = intval($val * 100 + 0.5);
|
|
|
-// if($val >= $amount) {
|
|
|
-// $result[$key] = $amount / 100;
|
|
|
-// $amount = 0;
|
|
|
-// } else {
|
|
|
-// $result[$key] = $val / 100;
|
|
|
-// $amount -= $val;
|
|
|
-// }
|
|
|
-//
|
|
|
-// if($amount == 0) break;
|
|
|
-// }
|
|
|
-//
|
|
|
-// return $result;
|
|
|
-// }
|
|
|
-// public function is_enough($amount)
|
|
|
-// {
|
|
|
-// $amount = intval($amount * 100 + 0.5);
|
|
|
-// foreach ($this->mRates as $key => $val)
|
|
|
-// {
|
|
|
-// $val = intval($val * 100 + 0.5);
|
|
|
-// if($val >= $amount) {
|
|
|
-// $amount = 0;
|
|
|
-// } else {
|
|
|
-// $amount -= $val;
|
|
|
-// }
|
|
|
-//
|
|
|
-// if($amount == 0) return true;
|
|
|
-// }
|
|
|
-//
|
|
|
-// return false;
|
|
|
-// }
|
|
|
-}
|
|
|
+ public function format()
|
|
|
+ {
|
|
|
+ $result = [];
|
|
|
+ foreach ($this->mRates as $key => $val)
|
|
|
+ {
|
|
|
+ $val = intval($val * 100 + 0.5);
|
|
|
+ if($val > 0) {
|
|
|
+ $result[$key] = $val / 100;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return $result;
|
|
|
+ }
|
|
|
|
|
|
+ public function dirty() {
|
|
|
+ return $this->mDirty;
|
|
|
+ }
|
|
|
+}
|
|
|
|
|
|
class predeposit_helper
|
|
|
{
|
|
@@ -227,12 +107,28 @@ class predeposit_helper
|
|
|
$this->mFreeze_value = $pd_array['freeze_predeposit']; // 当前预存款冻结
|
|
|
|
|
|
$available_bonus = $pd_array['available_bonus'];
|
|
|
- if (empty($available_bonus)) {
|
|
|
- $this->mRates = null;
|
|
|
+ if (empty($available_bonus))
|
|
|
+ {
|
|
|
+ $total = intval($this->mTotal_value * 100 + 0.5);
|
|
|
+ if($total > 0) {
|
|
|
+ $this->mRates = new RateMoney(array(30 => $this->mTotal_value));
|
|
|
+ } else {
|
|
|
+ $this->mRates = null;
|
|
|
+ }
|
|
|
} else {
|
|
|
$this->mRates = new RateMoney(unserialize($available_bonus));
|
|
|
}
|
|
|
}
|
|
|
+
|
|
|
+ public function __destruct()
|
|
|
+ {
|
|
|
+ if($this->mRates != null && $this->mRates->dirty()) {
|
|
|
+ $data = $this->mRates->format();
|
|
|
+ $member = Model('member');
|
|
|
+ $member->editMember(array('member_id' => $this->member_id),array('available_bonus' => serialize($data)));
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
public function total_pred() {
|
|
|
return $this->mTotal_value;
|
|
|
}
|
|
@@ -242,10 +138,93 @@ class predeposit_helper
|
|
|
public function is_enough($money) {
|
|
|
return intval($this->total_pred() * 100) >= intval($money * 100);
|
|
|
}
|
|
|
+
|
|
|
+ public function person_enough($money,&$bonus_rate)
|
|
|
+ {
|
|
|
+ if($this->mRates == null) return false;
|
|
|
+ return $this->mRates->is_enough($bonus_rate,$money);
|
|
|
+ }
|
|
|
+
|
|
|
public function rates() {
|
|
|
return $this->mRates == null ? false : $this->mRates;
|
|
|
}
|
|
|
|
|
|
+ public function make_bonus($param,$rate_moneys)
|
|
|
+ {
|
|
|
+ $result = bonus_helper::make_bonusex($param,$rate_moneys);
|
|
|
+ if($result == false) return false;
|
|
|
+
|
|
|
+ bonus_helper::witholdex($this->member_id,$rate_moneys);
|
|
|
+ $type_sn = $result['type_sn'];
|
|
|
+ $money = $result['money'];
|
|
|
+ $this->handout_bonus($money,$type_sn,session_helper::nickname(),"发送了{$money}元的红包.",\bonus\type::MakeSendType);
|
|
|
+
|
|
|
+ foreach ($rate_moneys as $item) {
|
|
|
+ $this->mRates->with_hold($item['rate'],$item['amount']);
|
|
|
+ }
|
|
|
+
|
|
|
+ return $result;
|
|
|
+ }
|
|
|
+
|
|
|
+ private function base_param($amount,$total_num)
|
|
|
+ {
|
|
|
+ $param = array();
|
|
|
+ $param['total_amount'] = $amount;
|
|
|
+ $param['total_num'] = $total_num;
|
|
|
+ $param['send_type'] = 1;
|
|
|
+ $param['use_type'] = 1;
|
|
|
+ $param['user_type'] = 2;
|
|
|
+
|
|
|
+ return $param;
|
|
|
+ }
|
|
|
+
|
|
|
+ public function share_bonus($bonus_sn,&$msg)
|
|
|
+ {
|
|
|
+ $bonus = bonus\user_bonus::create_by_sn($bonus_sn);
|
|
|
+ if($bonus->spend_over()) {
|
|
|
+ $msg = "该红包现金已经花光了~";
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+
|
|
|
+ $amount = $bonus->remain_amount();
|
|
|
+ $param = $this->base_param($amount,1);
|
|
|
+
|
|
|
+ $minfo = new member_info($this->member_id);
|
|
|
+ $param['sender_id'] = $this->member_id;
|
|
|
+ $param['sender_mobile'] = $minfo->mobile();
|
|
|
+ $param['sender_name'] = $minfo->nickname();
|
|
|
+ $param['make_type'] = \bonus\type::MakeSendType;
|
|
|
+ $name = $minfo->nickname();
|
|
|
+ $param['type_name'] = "{$name}";
|
|
|
+
|
|
|
+ $type = \bonus\type::crate_by_input($param);
|
|
|
+
|
|
|
+ $rate_moneys = [];
|
|
|
+ $item['amount'] = $type->getTotal_amount();
|
|
|
+ $item['num'] = $type->getTotal_num();
|
|
|
+ $item['rate'] = $bonus->bonus_rate();
|
|
|
+ $rate_moneys[] = $item;
|
|
|
+
|
|
|
+ $result = bonus_helper::make_bonusex($param,$rate_moneys);
|
|
|
+ if($result == false) {
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ if(bonus_helper::withold_bonus($this->member_id,$bonus->bonus_rate(),$bonus_sn)) {
|
|
|
+ $type_sn = $result['type_sn'];
|
|
|
+ $money = $result['money'];
|
|
|
+ $this->handout_bonus($money,$type_sn,session_helper::nickname(),"发送了{$money}元的红包.",\bonus\type::MakeSendType);
|
|
|
+ }
|
|
|
+ return $result;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ public function admin_make_bonus($param,$rate_moneys)
|
|
|
+ {
|
|
|
+ return bonus_helper::make_bonusex($param,$rate_moneys);
|
|
|
+ }
|
|
|
+
|
|
|
public function bonus_expire($bouns)
|
|
|
{
|
|
|
try
|
|
@@ -327,7 +306,7 @@ class predeposit_helper
|
|
|
$this->model_pd->changePd("bonus_add_money", $data);
|
|
|
}
|
|
|
|
|
|
- public function handout_bonus($amount, $type_sn, $sender_name, $info,$make_type = 0,$rate_moneys = array())
|
|
|
+ public function handout_bonus($amount, $type_sn, $sender_name, $info,$make_type = 0)
|
|
|
{
|
|
|
Log::record("handout_bonus {$amount} {$type_sn} {$sender_name}",Log::DEBUG);
|
|
|
$minfo = new member_info($this->member_id);
|