Kaynağa Gözat

红包相关

stanley-king 8 yıl önce
ebeveyn
işleme
bd4cc61cda

+ 1 - 6
data/logic/payment.logic.php

@@ -198,12 +198,7 @@ class paymentLogic
                     if (0 == $ret) {
                         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']));

+ 1 - 1
data/model/buy.model.php

@@ -614,7 +614,7 @@ class buyModel {
         if (empty($goods_buy_quantity) || !is_array($goods_buy_quantity)) return;
         $model_goods = Model('goods');
         foreach ($goods_buy_quantity as $goods_id => $quantity) {
-            $goods_info = $cart_info;
+            //$goods_info = $cart_info;
             $data = array();
             $data['goods_storage'] = array('exp','goods_storage-'.$quantity);
             $data['goods_salenum'] = array('exp','goods_salenum+'.$quantity);

+ 52 - 19
data/model/predeposit.model.php

@@ -270,6 +270,12 @@ class predepositModel extends Model {
                 $data_msg['av_amount'] = -$data['amount'];
                 $data_msg['freeze_amount'] = 0;
                 $data_msg['desc'] = $data_log['lg_desc'];
+
+                if(isBonusExpiryDate()) {
+                    require_once (BASE_ROOT_PATH . '/helper/account_helper.php');
+                    account_helper::onPredeposit('order_pay',$data['member_id'],$data['amount']);
+                }
+
                 break;
             case 'order_freeze':
                 $data_log['lg_av_amount'] = -$data['amount'];
@@ -281,22 +287,30 @@ class predepositModel extends Model {
                 $data_msg['av_amount'] = -$data['amount'];
                 $data_msg['freeze_amount'] = $data['amount'];
                 $data_msg['desc'] = $data_log['lg_desc'];
+
+                if(isBonusExpiryDate()) {
+                    require_once (BASE_ROOT_PATH . '/helper/account_helper.php');
+                    account_helper::onPredeposit('order_pay',$data['member_id'],$data['amount']);
+                }
+
                 break;
             case 'order_cancel':
-                $data_log['lg_av_amount'] = $data['amount'];
-                $data_log['lg_freeze_amount'] = -$data['amount'];
-                $data_log['lg_desc'] = '取消订单,解冻预存款,订单号: '.$data['order_sn'];
-                $data_pd['freeze_predeposit'] = array('exp','freeze_predeposit-'.$data['amount']);
                 if(isBonusExpiryDate()) {
                     require_once (BASE_ROOT_PATH . '/helper/account_helper.php');
                     account_helper::onPredeposit('order_cancel',$data['member_id'],$data['amount']);
+                    return;
                 } else {
+                    $data_log['lg_av_amount'] = $data['amount'];
+                    $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']);
+
+                    $data_msg['av_amount'] = $data['amount'];
+                    $data_msg['freeze_amount'] = -$data['amount'];
+                    $data_msg['desc'] = $data_log['lg_desc'];
                 }
 
-                $data_msg['av_amount'] = $data['amount'];
-                $data_msg['freeze_amount'] = -$data['amount'];
-                $data_msg['desc'] = $data_log['lg_desc'];
                 break;
             case 'order_comb_pay':
                 $data_log['lg_freeze_amount'] = -$data['amount'];
@@ -318,13 +332,20 @@ class predepositModel extends Model {
                 $data_msg['desc'] = $data_log['lg_desc'];
                 break;
             case 'refund':
-                $data_log['lg_av_amount'] = $data['amount'];
-                $data_log['lg_desc'] = '确认退款,订单号: '.$data['order_sn'];
-                $data_pd['available_predeposit'] = array('exp','available_predeposit+'.$data['amount']);
+                if(isBonusExpiryDate()) {
+                    require_once (BASE_ROOT_PATH . '/helper/account_helper.php');
+                    account_helper::onPredeposit('refund',$data['member_id'],$data['amount']);
+                    return;
+                } else {
+                    $data_log['lg_av_amount'] = $data['amount'];
+                    $data_log['lg_desc'] = '确认退款,订单号: '.$data['order_sn'];
+                    $data_pd['available_predeposit'] = array('exp','available_predeposit+'.$data['amount']);
+
+                    $data_msg['av_amount'] = $data['amount'];
+                    $data_msg['freeze_amount'] = 0;
+                    $data_msg['desc'] = $data_log['lg_desc'];
+                }
 
-                $data_msg['av_amount'] = $data['amount'];
-                $data_msg['freeze_amount'] = 0;
-                $data_msg['desc'] = $data_log['lg_desc'];
                 break;
             case 'vr_refund':
                 $data_log['lg_av_amount'] = $data['amount'];
@@ -369,14 +390,20 @@ class predepositModel extends Model {
                 $data_msg['desc'] = $data_log['lg_desc'];
                 break;
             case 'bonus_refund':
-                $data_log['lg_av_amount'] = $data['amount'];
-                $data_log['lg_desc'] = '退还没抢的红包金额,红包单号: '.$data['type_sn'];
+                if(isBonusExpiryDate()) {
+                    require_once (BASE_ROOT_PATH . '/helper/account_helper.php');
+                    account_helper::onPredeposit('bonus_refund',$data['member_id'],$data['amount']);
+                    return;
+                } else {
+                    $data_log['lg_av_amount'] = $data['amount'];
+                    $data_log['lg_desc'] = '退还没抢的红包金额,红包单号: '.$data['type_sn'];
+                    $data_pd['available_predeposit'] = array('exp','available_predeposit+'.$data['amount']);
 
-                $data_pd['available_predeposit'] = array('exp','available_predeposit+'.$data['amount']);
+                    $data_msg['av_amount'] = $data['amount'];
+                    $data_msg['freeze_amount'] = 0;
+                    $data_msg['desc'] = $data_log['lg_desc'];
+                }
 
-                $data_msg['av_amount'] = $data['amount'];
-                $data_msg['freeze_amount'] = 0;
-                $data_msg['desc'] = $data_log['lg_desc'];
                 break;
             case 'bonus_add_money':
                 $data_log['lg_av_amount'] = $data['amount'];
@@ -397,6 +424,12 @@ class predepositModel extends Model {
                 $data_msg['av_amount'] = -$data['amount'];
                 $data_msg['freeze_amount'] = 0;
                 $data_msg['desc'] = $data_log['lg_desc'];
+
+                if(isBonusExpiryDate()) {
+                    require_once (BASE_ROOT_PATH . '/helper/account_helper.php');
+                    account_helper::onPredeposit('hand_out_bonus',$data['member_id'],$data['amount']);
+                }
+
                 break;
 				////////////////////zmr>v20////////////////////////////////////
             case 'sys_add_money':

+ 65 - 8
helper/account_helper.php

@@ -6,30 +6,78 @@
  * Date: 16/6/27
  * Time: 下午2:46
  */
+require_once (BASE_ROOT_PATH . '/helper/bonus/type.php');
+require_once (BASE_ROOT_PATH . '/helper/bonus_helper.php');
+
 class account_helper
 {
-    private $member_id;
-    public function __construct($member_id)
+    const admin_member_id = 36429;
+    const admin_mobile = '13911129867';
+    const admin_name = '熊猫美妆';
+
+    private static 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;
+    }
+    private static function admin_param(&$param)
     {
-        $this->member_id = $member_id;
+        $param['sender_id'] = self::admin_member_id;
+        $param['sender_mobile'] = self::admin_mobile;
+        $param['sender_name'] = self::admin_name;
     }
 
-    public function pay_refund()
+    public 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));
+            // todo 做push通知
+        } else {
+            Log::record("给用户 {$member_id} 退款{$amount}失败.");
+        }
     }
 
-    public function bonus_refund()
+    public static function bonus_refund($member_id,$amount,$bonus_name)
     {
+        $param = self::base_param($amount,1);
+        self::admin_param($param);
+        $param['make_type'] = \bonus\type::MakeBonusRefundType;
+        $param['type_name'] = $bonus_name;
 
+        $ret = bonus_helper::make_bonus($param);
+        if($ret != false)
+        {
+            bonus_helper::send($ret['type_sn'],array($member_id));
+            // todo 做push通知
+        } else {
+            Log::record("给用户 {$member_id} 退款{$amount}失败.");
+        }
     }
 
-    public function send_bonus()
+    public static function send_bonus($member_id,$amount)
     {
 
     }
 
-    public function steal_bonus()
+    public static function steal_bonus()
+    {
+
+    }
+
+    public static function fly_bonus()
     {
 
     }
@@ -40,7 +88,16 @@ class account_helper
             bonus_helper::withold($member_id,$pd_amount);
         }
         elseif($change_type == 'order_cancel') { // 发送给该用户一个同等额度的红包
-            
+            self::pay_refund($member_id,$pd_amount,"退款红包");
+        }
+        elseif($change_type == 'refund') { // 发送给该用户一个同等额度的红包
+            self::pay_refund($member_id,$pd_amount,"退款红包");
+        }
+        elseif($change_type == 'bonus_refund') { // 发送给该用户一个同等额度的红包
+            self::bonus_refund($member_id,$pd_amount,"红包过期未领退款");
+        }
+        elseif($change_type == 'hand_out_bonus') {
+            bonus_helper::withold($member_id,$pd_amount);
         }
     }
 }

+ 63 - 0
helper/bonus/manager.php

@@ -194,6 +194,69 @@ class manager
         return $ret;
     }
 
+    public function send($type_sn,$member_ids)
+    {
+        $mod_bonus = Model('user_bonus');
+
+        $cond['user_id'] = array('in',$member_ids);
+        $cond['type_sn'] = $type_sn;
+        $items = $mod_bonus->getBonusList($cond);
+        unset($cond);
+
+        $ret = array();
+        foreach ($items as $item)
+        {
+            $user_id = $item['user_id'];
+            if(($pos = array_search($user_id,$member_ids)) != false) {
+                unset($member_ids[$pos]);
+                $ret[] = $item;
+            }
+        }
+
+        $cond['bonus_status'] = 0;
+        $cond['type_sn'] = $type_sn;
+
+        if(!empty($member_ids))
+        {
+            $count = count($member_ids);
+            $items = $mod_bonus->getBonusList($cond,'*','','',count($member_ids));
+            if($count != count($items)) {
+                return false;
+            }
+
+            $mod_member = Model('member');
+            $index = 0;
+
+            $bonus_values = 0.00;
+            foreach ($items as &$bonus) {
+                $user_id = $member_ids[$index];
+
+                $minfo = $mod_member->getMemberInfoByID($user_id);
+                $bonus['user_id'] = $user_id;
+                $bonus['user_mobile'] = $minfo['member_mobile'];
+                $bonus['user_name'] = $minfo['member_nickname'];;
+
+                $bonus['grab_time'] = time();
+                $bonus['get_time'] = time();
+
+                $bonus['bonus_status'] = 2;
+                ++$index;
+
+                $ret[] = $bonus;
+                $bonus_values += $bonus['bonus_value'];
+            }
+
+            $mod_bonus->replaceAll($items);
+            Model('bonus_type')->edit(array('type_sn' => $type_sn),
+                array('binded_num' => array('exp', "binded_num+{$count}"),
+                    'grabed_num' => array('exp', "grabed_num+{$count}"),
+                    'remain_amount' => array('exp', "remain_amount-" . "{$bonus_values}")));
+            dcache($type_sn,self::type_prefix);
+        }
+
+        return $ret;
+    }
+
     public function bind_bonus($bonus_sn,$session_id,$mobile,&$new_bonus_sn)
     {
         $new_bonus_sn = $bonus_sn;

+ 3 - 1
helper/bonus/type.php

@@ -64,7 +64,9 @@ class type
         if($crete_type == self::load_type) {
             return;
         }
-        $this->mParam['type_name'] = sprintf("%s发的红包.",$this->mParam['sender_name']);
+        if(empty($this->mParam['type_name'])) {
+            $this->mParam['type_name'] = sprintf("%s发的红包.",$this->mParam['sender_name']);
+        }
 
         if(!isset($param['send_start_date'])) {
             $this->mParam['send_start_date'] = time();

+ 11 - 0
helper/bonus_helper.php

@@ -237,4 +237,15 @@ class bonus_helper
         $holder = new \bonus\witholder($member_id);
         return $holder->withhold($money);
     }
+
+    static public function send($type_sn,$member_ids)
+    {
+        try
+        {
+            $manager = new \bonus\manager();
+            return $manager->send($type_sn,$member_ids);
+        } catch (Exception $ex) {
+            return false;
+        }
+    }
 }

+ 0 - 3
helper/predeposit_helper.php

@@ -84,9 +84,6 @@ 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)

+ 33 - 0
test/account_helperTest.php

@@ -0,0 +1,33 @@
+<?php
+
+/**
+ * Created by PhpStorm.
+ * User: stanley-king
+ * Date: 16/6/27
+ * Time: 下午10:27
+ */
+
+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/account_helper.php');
+
+class account_helperTest extends PHPUnit_Framework_TestCase
+{
+    public static function setUpBeforeClass()
+    {
+        Base::run_util();
+    }
+
+    public function testPayRefund()
+    {
+        account_helper::pay_refund(36490,500,'退款红包');
+    }
+
+    public static function tearDownAfterClass()
+    {
+
+    }
+
+}