Bladeren bron

增加红包有效期

stanley-king 8 jaren geleden
bovenliggende
commit
201ec46507

+ 6 - 0
core/33hao.php

@@ -95,4 +95,10 @@ function is_mobile()
 	return (defined('MOBILE_SERVER') && MOBILE_SERVER == true);
 }
 
+//是否考虑红包有效期
+function isBonusExpiryDate()
+{
+	return (defined('BONUS_EXPIRY_DATE') && BONUS_EXPIRY_DATE == true);
+}
+
 ?>

+ 6 - 17
data/logic/buy_1.logic.php

@@ -5,8 +5,8 @@
  * by 33hao.com 好商城V3 运营版
  */
 defined('InShopNC') or exit('Access Invalid!');
-class buy_1Logic {
-
+class buy_1Logic
+{
     /**
      * 取得商品最新的属性及促销[购物车]
      * @param unknown $cart_list
@@ -256,7 +256,6 @@ class buy_1Logic {
      */
     public function getStoreFreightDescList($store_goods_total)
     {
-        Log::record("Store goods total ".json_encode($store_goods_total), Log::DEBUG);
         if (empty($store_goods_total) || !is_array($store_goods_total)) return array(array(),array());
 
         //定义返回数组
@@ -266,7 +265,6 @@ class buy_1Logic {
         //如果商品金额未达到免运费设置下线,则需要计算运费
         $condition = array('store_id' => array('in',array_keys($store_goods_total)));
         $store_list = Model('store')->getStoreOnlineList($condition,null,'','store_id,store_free_price');
-        Log::record("Store list ".json_encode($store_list), Log::DEBUG);
         foreach ($store_list as $store_info) {
             $limit_price = floatval($store_info['store_free_price']);
             if ($limit_price == 0 || $limit_price > $store_goods_total[$store_info['store_id']]) {
@@ -354,14 +352,8 @@ class buy_1Logic {
 
 		//免费和固定运费计算结果
 		$return_list = $freight_list['iscalced'];
-
-        Log::record("No freight ".json_encode($return_list)." count ".count($return_list), Log::DEBUG);
-
 		//使用运费模板的信息(array(店铺ID=>array(运费模板ID=>购买数量))
 		$nocalced_list = $freight_list['nocalced'];
-
-        Log::record("Freight ".json_encode($nocalced_list)." count ".count($nocalced_list), Log::DEBUG);
-
 		//然后计算使用运费运费模板的在该$city_id时的运费值
 		if (!empty($nocalced_list) && is_array($nocalced_list)) {
 		    //如果有商品使用的运费模板,先计算这些商品的运费总金额
@@ -562,21 +554,18 @@ class buy_1Logic {
      * 预存款支付,依次循环每个订单
      * 如果预存款足够就单独支付了该订单,如果不足就暂时冻结,等API支付成功了再彻底扣除
      */
-    public function pdPay($order_list, $input, $buyer_info) {
+    public function pdPay($order_list, $input, $buyer_info)
+    {
         $member_id = $buyer_info['member_id'];
         $member_name = $buyer_info['member_name'];
 
-//         $model_payment = Model('payment');
-//         $pd_payment_info = $model_payment->getPaymentOpenInfo(array('payment_code'=>'predeposit'));
-//         if (empty($pd_payment_info)) return;
-
         $available_pd_amount = floatval($buyer_info['available_predeposit']);
         if ($available_pd_amount <= 0) return;
 
         $model_order = Model('order');
         $model_pd = Model('predeposit');
-        foreach ($order_list as $order_info) {
-
+        foreach ($order_list as $order_info)
+        {
             //货到付款的订单、已经充值卡支付的订单跳过
             if ($order_info['payment_code'] == 'offline') continue;
             if ($order_info['order_state'] == ORDER_STATE_PAY) continue;

+ 5 - 0
data/logic/payment.logic.php

@@ -199,6 +199,11 @@ class paymentLogic
                         throw new Exception("订单更新失败");
                     }
 
+                    if(isBonusExpiryDate()) {
+                        require_once (BASE_ROOT_PATH . '/helper/account_helper.php');
+                        account_helper::onPredeposit($change_type,$member_id,floatval($order_pd_amount) / 100);
+                    }
+
                     // 修改订单
                     $data_order = array('pd_amount' => $order_info['pd_amount']);
                     $ret = $model_order->editOrder($data_order, array('order_id' => $order_info['order_id']));

+ 17 - 2
data/model/member_relation.model.php

@@ -15,17 +15,32 @@ class member_relationModel extends Model
 
     public function findByID($member_id)
     {
-        return $this->field('*')->where(array('member_id' => $member_id))->find();
+        $member = Model('member');
+        $info = $member->getMemberInfoByID($member_id);
+        if(!empty($info)) {
+            $mobile = $info['member_mobile'];
+            return $this->findByMobile($mobile);
+        }
+        else {
+            return array();
+        }
     }
 
     public function findByMobile($mobile)
     {
-        return $this->field('*')->where(array('member_mobile' => $mobile))->find();
+        $relation_info = rcache($mobile, 'member_relation');
+        if (empty($relation_info)) {
+            $relation_info = $this->field('*')->where(array('member_mobile' => $mobile))->find();
+            wcache($mobile, $relation_info, 'member_relation');
+        }
+        return $relation_info;
     }
 
     public function replace($data)
     {
+        $mobile = $data['member_mobile'];
         $this->insert($data,true);
+        dcache($mobile,'member_relation');
     }
 
     public function replaceAll($datas)

+ 6 - 1
data/model/predeposit.model.php

@@ -287,7 +287,12 @@ class predepositModel extends Model {
                 $data_log['lg_freeze_amount'] = -$data['amount'];
                 $data_log['lg_desc'] = '取消订单,解冻预存款,订单号: '.$data['order_sn'];
                 $data_pd['freeze_predeposit'] = array('exp','freeze_predeposit-'.$data['amount']);
-                $data_pd['available_predeposit'] = array('exp','available_predeposit+'.$data['amount']);
+                if(isBonusExpiryDate()) {
+                    require_once (BASE_ROOT_PATH . '/helper/account_helper.php');
+                    account_helper::onPredeposit('order_cancel',$data['member_id'],$data['amount']);
+                } else {
+                    $data_pd['available_predeposit'] = array('exp','available_predeposit+'.$data['amount']);
+                }
 
                 $data_msg['av_amount'] = $data['amount'];
                 $data_msg['freeze_amount'] = -$data['amount'];

+ 28 - 6
data/model/user_bonus.model.php

@@ -27,10 +27,27 @@ class user_bonusModel extends Model
 
     public function get($condition,$fields='*')
     {
-        return $this->where($condition)->field($fields)->limit(false)->select();
+        return $this->field($fields)->where($condition)->limit(false)->select();
+    }
+
+    public function getBonusList($condition,$field='*',$group = '', $order = '', $limit = 0, $page = 0, $lock = false, $count = 0)
+    {
+        return $this->table('user_bonus')->field($field)->where($condition)->group($group)->order($order)->limit($limit)->page($page, $count)->lock($lock)->select();
+    }
+
+    public function getUsableBonus($member_id)
+    {
+        $cond = array('user_id' => $member_id,'bonus_status' => 3,'usable_time' => array('gt',time()),'remain_amount' => array('gt','0.00'));
+        return $this->getBonusList($cond,'*','','usable_time asc');
     }
 
-    public function lasted_binded($condition) {
+    public function getUsableSum($member_id)
+    {
+        $cond = array('user_id' => $member_id,'bonus_status' => 3,'usable_time' => array('gt',time()));
+        return $this->table('user_bonus')->where($cond)->sum('remain_amount');
+    }
+
+    public function lasted_binded_time($condition) {
         $items = $this->where($condition)->field('get_time')->order('get_time desc')->limit(1)->select();
         if(count($items) == 1) {
             return $items[0]['get_time'];
@@ -39,7 +56,7 @@ class user_bonusModel extends Model
         }
     }
 
-    public function lasted_grabed($condition) {
+    public function lasted_grabed_time($condition) {
         $items = $this->where($condition)->field('grab_time')->order('grab_time desc')->limit(1)->select();
         if(count($items) == 1) {
             return $items[0]['grab_time'];
@@ -48,7 +65,6 @@ class user_bonusModel extends Model
         }
     }
 
-    //public function luckey
     public function add($datas) {
         return $this->insert($datas);
     }
@@ -160,6 +176,7 @@ class user_bonusModel extends Model
             return false;
         }
     }
+
     public function bind($type_id,$bonus_id,$sess_id,$mobile,&$bonus)
     {
         try
@@ -194,6 +211,11 @@ class user_bonusModel extends Model
         }
     }
 
+    public function replaceAll($datas)
+    {
+        $this->insertAll($datas,array(),true);
+    }
+
     public function getNeedWarn($left_days, $interval_days)
     {
         if(!isset($left_days) || !isset($interval_days)) {
@@ -201,12 +223,12 @@ class user_bonusModel extends Model
         }
 
         $cur_time = time();
-        $field = "bonus_id,user_id,type_sn,(usable_time-{$cur_time}) as leftsecs";
+        $field = "bonus_id,user_id,type_sn,user_mobile,(usable_time-{$cur_time}) as leftsecs";
         $day_secs = 24 * 3600;
         $left_warn_secs = intval($left_days) * $day_secs;
         $period_secs = intval($interval_days) * $day_secs;
 
-        $condition = "bonus_status = 3 and usable_time > {$cur_time} and usable_time-{$cur_time} <= {$left_warn_secs} and (isnull(notify_time) or {$cur_time} - notify_time >= {$period_secs})";
+        $condition = "usable_time > {$cur_time} and usable_time-{$cur_time} <= {$left_warn_secs} and (isnull(notify_time) or {$cur_time} - notify_time >= {$period_secs})";
 
         $ret = $this->field($field)->where($condition)->limit(false)->select();
         if(empty($ret)) {

+ 46 - 0
helper/account_helper.php

@@ -0,0 +1,46 @@
+<?php
+
+/**
+ * Created by PhpStorm.
+ * User: stanley-king
+ * Date: 16/6/27
+ * Time: 下午2:46
+ */
+class account_helper
+{
+    private $member_id;
+    public function __construct($member_id)
+    {
+        $this->member_id = $member_id;
+    }
+
+    public function pay_refund()
+    {
+
+    }
+
+    public function bonus_refund()
+    {
+
+    }
+
+    public function send_bonus()
+    {
+
+    }
+
+    public function steal_bonus()
+    {
+
+    }
+
+    public static function onPredeposit($change_type,$member_id,$pd_amount)
+    {
+        if($change_type == 'order_pay' || $change_type == 'order_freeze') {
+            bonus_helper::withold($member_id,$pd_amount);
+        }
+        elseif($change_type == 'order_cancel') { // 发送给该用户一个同等额度的红包
+            
+        }
+    }
+}

+ 2 - 0
helper/bonus/generator.php

@@ -74,6 +74,7 @@ class GeneralGenerator extends IGenerator
             {
                 $datas[] = array('bonus_sn' => make_sn(),
                     'bonus_value' => $val,
+                    'remain_amount' => $val,
                     'type_id' => $type_id,
                     'bonus_status' => 0,
                     'type_sn' => $type_sn);
@@ -91,6 +92,7 @@ class GeneralGenerator extends IGenerator
             for($i = 0; $i < $total_num; $i++) {
                 $datas[] = array( 'bonus_sn' => make_sn(),
                     'bonus_value' => $val,
+                    'remain_amount' => $val,
                     'type_id' => $type_id,
                     'bonus_status' => 0,
                     'type_sn' => $type_sn);

+ 5 - 3
helper/bonus/manager.php

@@ -41,7 +41,7 @@ class manager
 
             if($type->binded_over())
             {
-                $lasted_time = Model('user_bonus')->lasted_binded(array('type_id' => $type->getType_id()));
+                $lasted_time = Model('user_bonus')->lasted_binded_time(array('type_id' => $type->getType_id()));
                 if($lasted_time > 0) {
                     $period = $lasted_time - $type->get_start_time();
                     $type_info['binded_period'] = $period == 0 ? 1 : $period;
@@ -54,7 +54,7 @@ class manager
                 $type_info['binded_period'] = 0;
                 $type_info['binded_over'] = 0;
                 if($type->grabed_over()) {
-                    $lasted_time = Model('user_bonus')->lasted_grabed(array('type_id' => $type->getType_id(),'bonus_status' => 1));
+                    $lasted_time = Model('user_bonus')->lasted_grabed_time(array('type_id' => $type->getType_id(),'bonus_status' => 1));
                     $type_info['grab_lastime'] = $lasted_time;
                 } else {
                     $type_info['grab_lastime'] = 0;
@@ -178,10 +178,12 @@ class manager
     public function topup($mod_user_bonus,&$bonus)
     {
         $day_secs = 24 * 3600;
+        $expried_secs = 30 * $day_secs;
+
         $datas = array('bonus_status' => 3,
             'user_id' => $_SESSION['member_id'],
             'user_name' => user_helper::nickname(),
-            'usable_time' => time() + $day_secs);
+            'usable_time' => time() + $expried_secs);
 
         $ret = $mod_user_bonus->where(array('bonus_id' => $bonus['bonus_id']))->update($datas);
         $affect_rows = $mod_user_bonus->affected_rows();

+ 102 - 0
helper/bonus/sender.php

@@ -0,0 +1,102 @@
+<?php
+/**
+ * Created by PhpStorm.
+ * User: stanley-king
+ * Date: 16/6/27
+ * Time: 下午12:08
+ */
+
+namespace bonus;
+
+class sender
+{
+    //检查个人发送红包参数
+    static public function check_personal($input,&$ret)
+    {
+        $param = array();
+        $send_type = intval($input['send_type']);
+        if(!in_array($send_type,array(1,2))) {
+            $ret = array('code' => errcode::ErrParamter,'msg' => "请输入正确的红包类型.");
+            return false;
+        }
+        $param['send_type'] = $send_type; // '红包类型,1为随机红包,2为固定额度红包'
+        $type_bless = isset($input['type_bless']) && !empty($input['type_bless']) ? $input['type_bless'] : self::def_bless;
+        $type_bless = urldecode($type_bless);
+        $type_bless = text_filter::filter_input($type_bless);
+
+        $param['type_bless'] = $type_bless;
+
+        $param['total_num'] = intval($input['total_num']);
+        if($param['total_num'] <= 0) {
+            $ret = array('code' => errcode::ErrParamter,'msg' => "红包个数不能小于1.");
+            return false;
+        }
+
+        if(bonus_helper::isFixed($send_type))
+        {
+            $fixed_mondey = floatval($input['fixed_money']);
+            if ($fixed_mondey * 100 < 1) {
+                $ret = array('code' => errcode::ErrParamter,'msg' => "红包额度不能小于一分钱.");
+                return false;
+            }
+            $param['total_amount'] = $fixed_mondey * $param['total_num'];
+            $param['fixed_money'] = $fixed_mondey;
+        }
+        else if (bonus_helper::isRandom($send_type))
+        {
+            $total_amount = floatval($input['total_amount']);
+            if($total_amount * 100 < $param['total_num']) {
+                $ret = array('code' => errcode::ErrParamter,'msg' => "金额不够.");
+                return false;
+            }
+            $param['total_amount'] = $total_amount;
+        }
+
+        if($total_amount > self::max_total_amount || $param['total_num'] > self::max_total_num) {
+            $ret = array('code' => errcode::ErrParamter,'msg' => sprintf("红包个数不能大于%d,总金额不能大于%.2f元.",self::max_total_num,self::max_total_amount));
+            return false;
+        }
+        $param['use_type'] = 1;
+        $param['user_type'] = 2;
+
+        return $param;
+    }
+
+    //检查活动红包参数
+    static public function check_activity($input,&$ret)
+    {
+        if(!isset($input['start_time']) || !isset($input['end_time'])) {
+            $ret = array('code' => errcode::ErrParamter,'msg' => "请输入活动开始和结束时间.");
+            return false;
+        }
+
+        $start_tm = strtotime($input['start_time']);
+        if($start_tm == false) {
+            $ret = array('code' => errcode::ErrParamter,'msg' => "错误的活动开始时间格式,请参考,2016-06-04 10:00:00.");
+            return false;
+        }
+
+        if($start_tm <  time()) {
+            $cur_time = date("Y-m-d H:i:s");
+            $ret = array('code' => errcode::ErrParamter,'msg' => "活动时间不能小于服务器当前时间:{$cur_time}");
+            return false;
+        }
+
+        $end_tm = strtotime($input['end_time']);
+        if($end_tm == false) {
+            $ret = array('code' => errcode::ErrParamter,'msg' => "错误的活动结束时间格式,请参考,2016-06-04 10:00:00.");
+            return false;
+        }
+
+        if($end_tm <= $start_tm) {
+            $ret = array('code' => errcode::ErrParamter,'msg' => "活动结束时间必须大于开始时间");
+            return false;
+        }
+
+        $param = array();
+        $param['send_start_date'] = $start_tm;
+        $param['send_end_date'] = $end_tm;
+
+        return $param;
+    }
+}

+ 2 - 1
helper/bonus/shaker.php

@@ -70,6 +70,7 @@ class shaker
                     $max_value = 0.00;
                     foreach ($selitems as &$item) {
                         $item['bonus_value'] = $moneys[$index];
+                        $item['remain_amount'] = $moneys[$index];
                         $max_value = $this->max($max_val,$item['bonus_value']);
                         ++$index;
                     }
@@ -77,7 +78,7 @@ class shaker
                     $remain_change = $bonus_val - $bonus_valin;
 
                     if($bonus_status === 2) {
-                        $data[] = array('max_amount' => $max_value,'remain_amount' => array('exp', "remain_amount-" . "{$remain_change}"));
+                        $data[] = array('max_amount' => $max_value,'remain_amount' => array('exp', "remain_amount-{$remain_change}"));
                         Model('bonus_type')->edit(array('type_id' => $type_id),$data);
                     }
                     else

+ 5 - 0
helper/bonus/type.php

@@ -14,6 +14,11 @@ use \Validate;
 
 class type
 {
+    const MakeSendType = 0;
+    const MakeBonusRefundType = 1;
+    const MakeShakeType = 2;
+    const MakePayRefundType = 3;
+    
     const create_type = 0;
     const load_type = 1;
 

+ 8 - 3
helper/bonus/user_bonus.php

@@ -27,7 +27,6 @@ class user_bonus
     const GrabStatus = 1;
     const BindStatus = 2;
     const TopupStatus = 3;
-    const ExpiredStatus = 4;
 
     private $mParamer;
 
@@ -67,14 +66,20 @@ class user_bonus
         return ($status == self::GrabStatus || $status == self::BindStatus);
     }
     public function expired() {
-        $status = intval($this->mParamer['bonus_status']);
-        return ($status == self::ExpiredStatus);
+        $status = intval($this->mParamer['expried']);
+        return ($status == 1);
     }
 
     public function remain_amount() {
         $val = intval(floatval($this->mParamer['remain_amount']) * 100 + 0.5);
         return floatval($val) / 100;
     }
+
+    public function spend_over() {
+        $remain = intval(floatval($this->mParamer['remain_amount']) * 100 + 0.5);
+        return ($remain == 0);
+    }
+
     public function type_sn() {
         return $this->mParamer['type_sn'];
     }

+ 78 - 0
helper/bonus/witholder.php

@@ -0,0 +1,78 @@
+<?php
+/**
+ * Created by PhpStorm.
+ * User: stanley-king
+ * Date: 16/6/27
+ * Time: 上午12:34
+ * 扣款者,用来做红包扣款
+ */
+
+namespace bonus;
+
+class witholder
+{
+    private $member_id;
+    private $usable_bonus;
+    private $usable_amount; //可用红包总金额
+    private $mod_bonus;
+
+    public function __construct($member_id)
+    {
+        $this->mod_bonus = Model('user_bonus');
+
+        $this->member_id = $member_id;
+        $this->usable_bonus = array();
+        $this->usable_amount = 0.00;
+
+        $this->init();
+    }
+
+    private function init()
+    {
+        $this->usable_amount = $this->mod_bonus->getUsableSum($this->member_id);
+        $items = $this->mod_bonus->getUsableBonus($this->member_id);
+        foreach ($items as $bonus) {
+            $obj = user_bonus::create_by_param($bonus);
+            array_push($this->usable_bonus,$obj);
+        }
+    }
+
+    public function usable_amount() {
+        return $this->usable_amount;
+    }
+
+    public function withhold($money)
+    {
+        $left = intval($money * 100 + 0.5);
+        if($left <= 0) {
+            return false;
+        }
+
+        $datas = array();
+        foreach ($this->usable_bonus 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 ($left / 100);
+    }
+}

+ 11 - 85
helper/bonus_helper.php

@@ -15,8 +15,8 @@ require_once (BASE_ROOT_PATH . '/helper/bonus/bind.php');
 require_once (BASE_ROOT_PATH . '/helper/bonus/factory.php');
 require_once (BASE_ROOT_PATH . '/helper/bonus/manager.php');
 require_once (BASE_ROOT_PATH . '/helper/bonus/shaker.php');
-require_once (BASE_ROOT_PATH . '/helper/bonus/shaker.php');
 require_once (BASE_ROOT_PATH . '/helper/bonus/allocator.php');
+require_once (BASE_ROOT_PATH . '/helper/bonus/sender.php');
 
 require_once (BASE_ROOT_PATH . '/helper/field_helper.php');
 require_once (BASE_ROOT_PATH . '/helper/predeposit_helper.php');
@@ -167,93 +167,13 @@ class bonus_helper
     }
 
     //检查个人发送红包参数
-    static public function check_personal($input,&$ret)
-    {
-        $param = array();
-        $send_type = intval($input['send_type']);
-        if(!in_array($send_type,array(1,2))) {
-            $ret = array('code' => errcode::ErrParamter,'msg' => "请输入正确的红包类型.");
-            return false;
-        }
-        $param['send_type'] = $send_type; // '红包类型,1为随机红包,2为固定额度红包'
-        $type_bless = isset($input['type_bless']) && !empty($input['type_bless']) ? $input['type_bless'] : self::def_bless;
-        $type_bless = urldecode($type_bless);
-        $type_bless = text_filter::filter_input($type_bless);
-
-        $param['type_bless'] = $type_bless;
-
-        $param['total_num'] = intval($input['total_num']);
-        if($param['total_num'] <= 0) {
-            $ret = array('code' => errcode::ErrParamter,'msg' => "红包个数不能小于1.");
-            return false;
-        }
-
-        if(bonus_helper::isFixed($send_type))
-        {
-            $fixed_mondey = floatval($input['fixed_money']);
-            if ($fixed_mondey * 100 < 1) {
-                $ret = array('code' => errcode::ErrParamter,'msg' => "红包额度不能小于一分钱.");
-                return false;
-            }
-            $param['total_amount'] = $fixed_mondey * $param['total_num'];
-            $param['fixed_money'] = $fixed_mondey;
-        }
-        else if (bonus_helper::isRandom($send_type))
-        {
-            $total_amount = floatval($input['total_amount']);
-            if($total_amount * 100 < $param['total_num']) {
-                $ret = array('code' => errcode::ErrParamter,'msg' => "金额不够.");
-                return false;
-            }
-            $param['total_amount'] = $total_amount;
-        }
-
-        if($total_amount > self::max_total_amount || $param['total_num'] > self::max_total_num) {
-            $ret = array('code' => errcode::ErrParamter,'msg' => sprintf("红包个数不能大于%d,总金额不能大于%.2f元.",self::max_total_num,self::max_total_amount));
-            return false;
-        }
-        $param['use_type'] = 1;
-        $param['user_type'] = 2;
-
-        return $param;
+    static public function check_personal($input,&$ret) {
+        return \bonus\sender::check_personal($input,$ret);
     }
 
     //检查活动红包参数
-    static public function check_activity($input,&$ret)
-    {
-        if(!isset($input['start_time']) || !isset($input['end_time'])) {
-            $ret = array('code' => errcode::ErrParamter,'msg' => "请输入活动开始和结束时间.");
-            return false;
-        }
-
-        $start_tm = strtotime($input['start_time']);
-        if($start_tm == false) {
-            $ret = array('code' => errcode::ErrParamter,'msg' => "错误的活动开始时间格式,请参考,2016-06-04 10:00:00.");
-            return false;
-        }
-
-        if($start_tm <  time()) {
-            $cur_time = date("Y-m-d H:i:s");
-            $ret = array('code' => errcode::ErrParamter,'msg' => "活动时间不能小于服务器当前时间:{$cur_time}");
-            return false;
-        }
-
-        $end_tm = strtotime($input['end_time']);
-        if($end_tm == false) {
-            $ret = array('code' => errcode::ErrParamter,'msg' => "错误的活动结束时间格式,请参考,2016-06-04 10:00:00.");
-            return false;
-        }
-
-        if($end_tm <= $start_tm) {
-            $ret = array('code' => errcode::ErrParamter,'msg' => "活动结束时间必须大于开始时间");
-            return false;
-        }
-
-        $param = array();
-        $param['send_start_date'] = $start_tm;
-        $param['send_end_date'] = $end_tm;
-
-        return $param;
+    static public function check_activity($input,&$ret) {
+        return \bonus\sender::check_activity($input,$ret);
     }
 
     static public function direct_asc() {
@@ -311,4 +231,10 @@ class bonus_helper
             return true;
         }
     }
+
+    static public function withold($member_id,$money)
+    {
+        $holder = new \bonus\witholder($member_id);
+        return $holder->withhold($money);
+    }
 }

+ 35 - 0
helper/notify_helper.php

@@ -0,0 +1,35 @@
+<?php
+
+/**
+ * Created by PhpStorm.
+ * User: stanley-king
+ * Date: 16/6/26
+ * Time: 下午9:30
+ */
+class notify_helper
+{
+    static public function bonus_expire($warn_remain_days, $warn_interval_days)
+    {
+        $mod_bonus = Model("user_bonus");
+        $expired_list = $mod_bonus->getNeedWarn($warn_remain_days, $warn_interval_days);
+
+        $bonus_ids = array();
+        foreach ($expired_list as $key => $val) {
+            $user_id = $val["user_id"];
+            $remain_days = intval($val["seconds"]) < 86400 ? 1 : (intval($val["seconds"]) / 86400) + 1;
+
+            $param = array();
+            $param['member_id'] = $user_id;
+            $param['text'] = "红包过期通知:您领取的红包将在{$remain_days}天内过期.";
+            $param['go_type'] = 'bonus';
+            QueueClient::push('upushSendMsg', $param);
+            $bonus_ids[] = $val["bonus_id"];
+        }
+
+        if (!empty($bonus_ids))
+        {
+            $user_bonus_model->where(array('bonus_id' => array('in', $bonus_ids)))->update(array("notify_time" => 'unix_timestamp(now())'));
+        }
+    }
+
+}

+ 4 - 1
helper/predeposit_helper.php

@@ -84,13 +84,16 @@ class predeposit_helper
         $data['pdr_sn'] = $bonus_sn;
         $data['lg_desc'] = $info;
         $this->model_pd->changePd("hand_out_bonus", $data);
+
+        bonus_helper::withold($_SESSION['member_id'],$amount);
+
     }
 
     public function hand_out_store_bonus($amount,$member_id,$sender_name,$type_sn,$relayer_id,$info)
     {
         $data = array();
         $data['member_id'] = $member_id;
-        $data['member_name'] = $relayer_id; //转发id,当作姓名
+        $data['member_name'] = $relayer_id; //转发id,当作姓名
         $data['amount'] = $amount;
         $data['order_sn'] = $type_sn;
         $data['admin_name'] = $sender_name;

+ 4 - 25
helper/user_helper.php

@@ -7,6 +7,7 @@
  */
 
 require_once (BASE_ROOT_PATH . '/helper/algorithm_helper.php');
+require_once (BASE_ROOT_PATH . '/helper/relation_helper.php');
 
 class user_helper
 {
@@ -54,8 +55,7 @@ class user_helper
         return '';
     }
 
-    static public function isLogin()
-    {
+    static public function isLogin() {
         return ($_SESSION['is_login'] == 1);
     }
 
@@ -126,29 +126,7 @@ class user_helper
         return $member_info;
     }
 
-    static public function notify_soon_expired_bonus($warn_remain_days, $warn_interval_days)
-    {
-        $user_bonus_model = Model("user_bonus");
-        $expired_list = $user_bonus_model->getNeedWarn($warn_remain_days, $warn_interval_days);
-        $bonus_ids = array();
-
-        foreach ($expired_list as $key => $val) {
-            $user_id = $val["user_id"];
-            $remain_days = intval($val["seconds"]) < 86400 ? 1 : (intval($val["seconds"]) / 86400) + 1;
-
-            $param = array();
-            $param['member_id'] = $user_id;
-            $param['text'] = "红包过期通知:您领取的红包将在{$remain_days}天内过期.";
-            $param['go_type'] = 'bonus';
-            QueueClient::push('upushSendMsg', $param);
-            $bonus_ids[] = $val["bonus_id"];
-        }
 
-        if (!empty($bonus_ids))
-        {
-            $user_bonus_model->where(array('bonus_id' => array('in', $bonus_ids)))->update(array("notify_time" => 'unix_timestamp(now())'));
-        }
-    }
 
     static public function notify_already_expired_bonus()
     {
@@ -203,7 +181,7 @@ class user_helper
             if ($member_id != false) {
                 sms_helper::send_nostore_message($mobile, Sms::bindbonus_register_code, $password);
                 $info = $mod_member->getMemberInfo(array('member_mobile' => $mobile));
-                relation_helper::onRegister($member_id);
+                relation_helper::onRegister($member_id,$mobile,$info['member_nickname']);
             } else {
                 return false;
             }
@@ -214,6 +192,7 @@ class user_helper
 
         Model('cart')->mergecart($member_info, $_SESSION['store_id']);
         Model('goods_browse')->mergebrowse($_SESSION['member_id'], $_SESSION['store_id']);
+        relation_helper::onLogin($_SESSION['member_id']);
 
         return self::outsuccess(array('HPHPSESSID' => $_SESSION['MPHPSESSID']));
     }

+ 5 - 2
mobile/control/login.php

@@ -13,6 +13,7 @@ require_once(BASE_CORE_PATH . '/framework/function/core.php');
 require_once(BASE_ROOT_PATH . '/helper/sms_helper.php');
 require_once(BASE_ROOT_PATH . '/helper/field_helper.php');
 require_once(BASE_ROOT_PATH . '/helper/user_helper.php');
+require_once(BASE_ROOT_PATH . '/helper/relation_helper.php');
 
 //登录,获取验证码,注册
 
@@ -95,6 +96,7 @@ class loginControl extends mobileHomeControl
         // cookie中的浏览记录存入数据库
         Model('goods_browse')->mergebrowse($_SESSION['member_id'], $_SESSION['store_id']);
         $this->addMbUseToken($_SESSION['MPHPSESSID']);
+        relation_helper::onLogin($_SESSION['member_id']);
 
         return self::outsuccess(array('member_id' => $_SESSION['member_id'],'HPHPSESSID' => $_SESSION['MPHPSESSID']));
     }
@@ -206,10 +208,11 @@ class loginControl extends mobileHomeControl
                 'member_nickname' => substr_replace($mobile, '****', 3, 4),
                 'member_mobile_bind' => 1);
 
-            $success = $model->addMember($member_info);
-            if ($success == false) {
+            $insert_id = $model->addMember($member_info);
+            if ($insert_id == false) {
                 return self::outerr(errcode::ErrRegister);
             } else {
+                relation_helper::onRegister($insert_id,$mobile,$member_info['member_nickname']);
                 return self::outsuccess(NULL);
             }
         }

+ 6 - 0
mobile/control/member_bonus.php

@@ -156,6 +156,12 @@ class member_bonusControl extends mbMemberControl
         return self::outsuccess(array('type_infos' => $type_infos, 'mobile_page' => mobile_page($pages)));
     }
 
+    //我已经发送的红包
+    public function bind_listOp()
+    {
+        $mod_bonus = Model('user_bonus');
+    }
+
     //预存款收支记录
     public function pdlogOp()
     {

+ 1 - 3
mobile/control/member_order.php

@@ -222,12 +222,10 @@ class member_orderControl extends mbMemberControl
             if ($deliver_info === false || empty($deliver_info)) {
                 return self::outsuccess(NULL,'express/error','wap');
             }
+            $deliver_info = json_decode(urldecode($deliver_info), true);
             wkcache($key, $deliver_info, 3600);
         }
 
-        Log::record($deliver_info,Log::DEBUG);
-        $deliver_info = json_decode($deliver_info, true);
-
         $routes = $deliver_info['Traces'];
         krsort($routes);
         switch ($deliver_info['State'])

+ 9 - 1
test/bonus_helperTest.php

@@ -11,6 +11,8 @@ define('BASE_ROOT_PATH',str_replace('/test','',dirname(__FILE__)));
 
 require_once(BASE_ROOT_PATH . '/fooder.php');
 require_once(BASE_ROOT_PATH . '/helper/bonus_helper.php');
+require_once(BASE_ROOT_PATH . '/helper/bonus/witholder.php');
+
 
 
 class bonus_helperTest extends PHPUnit_Framework_TestCase
@@ -24,8 +26,14 @@ class bonus_helperTest extends PHPUnit_Framework_TestCase
     {
         $item = Model('user_bonus')->field('*')->where(array('type_id' => 105,'bonus_id' => 2491))->select();
         bonus_helper::shake($item[0]['type_id'],$item[0]['bonus_id'],$item[0]['bonus_value'],3,bonus_helper::direct_dec());
-
     }
+    
+    public function testMemBonus()
+    {
+        $mem_bonus = new \bonus\witholder(36490);
+        $mem_bonus->withhold(7.30);
+    }
+
     public static function tearDownAfterClass()
     {