Forráskód Böngészése

增加只有下单后才能发红包的限制

stanley-king 7 éve
szülő
commit
4eb0213212

+ 25 - 19
helper/fcode/send_manager.php

@@ -11,7 +11,6 @@ namespace fcode;
 require_once (BASE_ROOT_PATH . '/helper/message/msgutil.php');
 require_once (BASE_ROOT_PATH . '/helper/special_helper.php');
 
-
 use StatesHelper;
 use Log;
 use special_manager;
@@ -41,13 +40,13 @@ class send_manager
     private function init()
     {
         $this->mNormalGoods = [];
-        $this->mGoodsBlock  = [];
 
         global $config;
         $fcodes_id = $config['autosend_fcodes']['fcodes_spid'];
         $blocks = special_manager::instance()->special($fcodes_id,$goods_ids);
 
         $cur_amount = 0;
+        $cur_block = false;
         foreach ($blocks as $block)
         {
             $item_type  = $block['item_type'];
@@ -60,6 +59,7 @@ class send_manager
                 $amount = intval($item['reserved']);
                 if($amount > 0) {
                     $cur_amount = $amount;
+                    $cur_block = $block;
                 }
             }
             elseif ($item_type == 'home_goods')
@@ -74,7 +74,7 @@ class send_manager
                         $goods_id = intval($item['data']);
                         $batch_code = $item['reserved'];
                         if($cur_amount > 0 && $goods_id > 0 && empty($batch_code) == false) {
-                            $this->add($cur_amount,$goods_id,$batch_code);
+                            $this->add($cur_amount,$goods_id,$batch_code,$cur_block);
                         }
                     }
                 }
@@ -84,16 +84,15 @@ class send_manager
         krsort($this->mNormalGoods);
     }
 
-    private function add($amount,$goods_id,$batch_code)
+    private function add($amount,$goods_id,$batch_code,$cur_block)
     {
         if(array_key_exists($amount,$this->mNormalGoods) == false) {
             $this->mNormalGoods[$amount] = [];
         }
 
-        $this->mNormalGoods[$amount][] = ['goods_id' => $goods_id,'batch_code' => $batch_code];
+        $this->mNormalGoods[$amount][] = ['goods_id' => $goods_id,'batch_code' => $batch_code,'block' => $cur_block];
     }
 
-
     public function fetch($amount,$pay_sn)
     {
         $normal = $this->fetch_normal($amount,$pay_sn);
@@ -112,28 +111,35 @@ class send_manager
         $amount = intval($amount);
         if($amount <= 0) return false;
 
-        $gids = [];
-        foreach ($this->mNormalGoods as $key => $goods_ids)
+        $fcode_goods = [];
+        foreach ($this->mNormalGoods as $key => $items)
         {
-            if(empty($goods_ids)) continue;
-
+            if(empty($items)) continue;
             if($key <= $amount)
             {
-                foreach ($goods_ids as $gid) {
-                    $gids[] = $gid;
+                foreach ($items as $item) {
+                    $fcode_goods[] = $item;
                 }
             }
         }
-        if(empty($gids)) {
+        if(empty($fcode_goods)) {
             return false;
         }
 
-        $result = $this->validate_one($gids,$pay_sn);
+        $result = $this->validate_one($fcode_goods,$pay_sn);
         return $result;
     }
 
-    private function validate_one($gids,$pay_sn)
+    private function validate_one($fcode_goods,$pay_sn)
     {
+        $gid_codes = [];
+        $gids = [];
+        foreach ($fcode_goods as $item) {
+            $gid = $item['goods_id'];
+            $gids[] = $gid;
+            $gid_codes[$gid] = $item;
+        }
+
         $mod_goods  = Model('goods');
         $goods_list = $mod_goods->getGoodsOnlineList(array('goods_id' => array('in', $gids),'goods_storage' => array('gt',0),'is_fcode' => 1));
         if(empty($goods_list)) return false;
@@ -149,12 +155,12 @@ class send_manager
             if(array_key_exists($gid,$all_goods))
             {
                 $goods = $all_goods[$gid];
-                $commonid = $goods['goods_commonid'];
 
-                $block = $this->mGoodsBlock[$gid];
-                $batch_code = $block['items'][0]['title'];
-                $oper = new operator($commonid,$batch_code);
+                $batch_code = $gid_codes[$gid]['batch_code'];
+                $block = $gid_codes[$gid]['block'];
 
+                $commonid = $goods['goods_commonid'];
+                $oper = new operator($commonid,$batch_code);
                 if($oper->grabed() == false)
                 {
                     $fcode = $oper->lock($pay_sn);

+ 31 - 0
helper/session_helper.php

@@ -357,4 +357,35 @@ class session_helper
             return false;
         }
     }
+
+    static public function can_send()
+    {
+        if (array_key_exists('order_num', $_SESSION)) {
+            $order_num = $_SESSION['order_num'];
+        }
+        else
+        {
+            $mod_member = Model('member');
+            $minfo = $mod_member->getMemberInfoByID(self::memberid());
+
+            if(empty($minfo)) return false;
+
+            $order_num = intval($minfo['order_num']);
+            if($order_num > 0) {
+                $_SESSION['order_num'] = $order_num;
+            }
+        }
+        return $order_num > 0;
+    }
+
+    static public function add_order()
+    {
+        if (!array_key_exists('order_num', $_SESSION)) {
+            $mod_member = Model('member');
+            $minfo = $mod_member->getMemberInfoByID(self::memberid());
+            $_SESSION['order_num'] = intval($minfo['order_num']);
+        }
+
+        $_SESSION['order_num'] += 1;
+    }
 }

+ 10 - 0
mobile/control/member_bonus.php

@@ -22,6 +22,7 @@ require_once (BASE_ROOT_PATH . '/helper/push_helper.php');
 class member_bonusControl extends mbMemberControl
 {
     const match_bonus_banner = 364;
+    const msg_malice_bonus = '为避免恶意欺诈,只有下单后的用户才能发送红包给好友.';
     private $mPred;
 
     public function __construct() {
@@ -108,6 +109,7 @@ class member_bonusControl extends mbMemberControl
         }
         return $share['title'];
     }
+
     private function reset_share()
     {
         $share = bonus_helper::get_share();
@@ -168,6 +170,10 @@ class member_bonusControl extends mbMemberControl
 
     public function makeOp()
     {
+        if(session_helper::can_send() == false) {
+            return self::outerr(errcode::ErrBonus,self::msg_malice_bonus);
+        }
+
         if (intval($_GET['bonus_rate']) > 0) {
             $bonus_rate = intval($_GET['bonus_rate']);
         } else {
@@ -410,6 +416,10 @@ class member_bonusControl extends mbMemberControl
 
     public function makeby_bonusOp()
     {
+        if(session_helper::can_send() == false) {
+            return self::outerr(errcode::ErrBonus,self::msg_malice_bonus);
+        }
+
         if(!isset($_GET['bonus_sn']) || empty($_GET['bonus_sn'])) {
             return self::outerr(errcode::ErrParamter,"需要红包序列号.");
         }

+ 52 - 6
mobile/control/member_buy.php

@@ -147,6 +147,7 @@ class member_buyControl extends mbMemberControl
         }
         else
         {
+            session_helper::add_order();
             if($fcode_state == 1)
             {
                 return self::outsuccess(array('special_list' => null,
@@ -159,7 +160,6 @@ class member_buyControl extends mbMemberControl
             else
             {
                 $result = fcode\send_manager::instance()->fetch($amount,$pay_sn);
-                Log::record("pay_confirm amount={$amount} result=" . json_encode($result),Log::DEBUG);
                 if($result != false)
                 {
                     $order_pay = Model('order_pay');
@@ -179,13 +179,36 @@ class member_buyControl extends mbMemberControl
                         $blocks[] = $block;
                     }
 
+                    $fcodes = [];
+                    $gids   = [];
+                    foreach ($result['fcode'] as $item)
+                    {
+                        $fcoder = new fcode\mfcode($item);
+                        $fcode = $fcoder->format();
+                        if($fcode != false) {
+                            $gids[] = intval($fcode['goods_id']);
+                            $fcodes[] = $fcode;
+                        }
+                    }
+
+                    $fcode_blocks = $this->fcode_blocks($fcodes);
+                    foreach ($fcode_blocks as $fblock) {
+                        $blocks[] = $fblock;
+                    }
+
+                    $helper = new goods_helper(false);
+                    $ret = $helper->cart_summary($gids,$related_goods);
+
                     return self::outsuccess(array('special_list' => $blocks,
-                        'summary'  => null,
-                        'groupbuy' => null,
-                        'limitime' => null,
-                        'bundling' => null,
+                        'fcodes'   => $fcodes,
+                        'summary'  => $ret['summary'],
+                        'groupbuy' => $ret['groupbuy'],
+                        'limitime' => $ret['limitime'],
+                        'bundling' => $ret['bundling'],
                         'mobile_page' => mobile_page(1)));
-                } else {
+                }
+                else
+                {
                     return self::outsuccess(array('special_list' => null,
                         'summary'  => null,
                         'groupbuy' => null,
@@ -196,6 +219,29 @@ class member_buyControl extends mbMemberControl
             }
         }
     }
+    private function fcode_blocks($fcodes)
+    {
+        $blocks = [];
+        foreach ($fcodes as $fcode)
+        {
+            $block = [];
+            $block['item_title'] = '';
+            $block['item_type'] = 'home1';
+            $block['scale'] = 3.224299;
+
+            $item['image'] = '';
+            $item['show_type'] = "fcode";
+            $item['show_data'] = strval($fcode['fcode_id']);
+            $item['type'] = "goods";
+            $item['data'] = strval($fcode['goods_id']);;
+            $item['title'] = '';
+
+            $block['items'][] = $item;
+            $blocks[] = $block;
+        }
+
+        return $blocks;
+    }
 
     public function change_addrexOp()
     {