Sfoglia il codice sorgente

modify user_bonus table field 'status' => 'bonus_status'

stanley-king 9 anni fa
parent
commit
4580ab154c

+ 3 - 0
data/logic/buy_1.logic.php

@@ -977,6 +977,9 @@ class buy_1Logic {
                 $cart_list[$key]['xianshi_info'] = $goods_online_info['xianshi_info'];
                 $goods_spec = unserialize($goods_online_info['goods_spec']);
                 $goods_spec_array = array();
+                if(empty($goods_spec)) {
+                    $goods_spec = array();
+                }
                 foreach ($goods_spec as $value) {
                     array_push($goods_spec_array, $value);
                 }

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

@@ -94,6 +94,91 @@ class paymentLogic
     }
 
     /**
+     * 尝试使用预存款, 可以扣除运费
+     * @param int $pay_sn
+     * @param int $member_id
+     * @return int
+     */
+    public function payPredepositEx($pay_sn,$member_info)
+    {
+        //验证订单信息
+        $model_order = Model('order');
+        $condition = array();
+        $condition['pay_sn'] = $pay_sn;
+        if (!empty($member_info['member_id'])) {
+            $condition['buyer_id'] = $member_info['member_id'];
+        }
+        $order_pay_info = $model_order->getOrderPayInfo($condition);
+        if (empty($order_pay_info)) {
+            return -1;
+        }
+
+        $condition = array();
+        $condition['pay_sn'] = $pay_sn;
+        $order_list = $model_order->getNormalOrderList($condition);
+
+        // 获取余额数据
+        $obj_member = Model('member');
+        $pd_amount = $obj_member->getPdAmount($member_info['member_id']);
+        if (empty($order_list)) return -1;
+        if (floatval($pd_amount) <= 0.0) return -1;
+
+        $model_order = Model('order');
+        $model_pd = Model('predeposit');
+        $member_id = intval($member_info['member_id']);
+
+        try
+        {
+            DB::beginTransaction();
+            foreach ($order_list as $order_info)
+            {
+                // 使用全部预存款(红包逻辑)
+                $data_order = array();
+                $change_type = '';
+                // 计算运费+订单总额
+                $total_amount = floatval($order_info['order_amount']);
+                $increment_amount = 0.0;    // 预存款使用
+                if ((floatval($pd_amount) + floatval($order_info['pd_amount'])) > floatval($total_amount))  {
+                    // 预存款增量, 当二次付款并使用红包的时候, 需要进行二次计算预存款
+                    $increment_amount = floatval($total_amount) - floatval($order_info['pd_amount']);
+                    $order_info['pd_amount'] += $increment_amount; // 余额大于订单金额的情况
+                    $pd_amount = floatval($pd_amount) - floatval($increment_amount);
+                    $change_type = 'order_pay';
+                } else {    // 余额小于等于订单金额的情况, $pd_amount不能等于0
+                    $increment_amount = floatval($pd_amount);
+                    $order_info['pd_amount'] += floatval($pd_amount);
+                    $pd_amount = 0.0;
+                    $change_type = 'order_freeze';
+                }
+
+                $data_pd = array();
+                $data_pd['member_id'] = $member_id;
+                $data_pd['member_name'] = $member_info['member_name'];
+                $data_pd['amount'] = $increment_amount;
+                $data_pd['order_sn'] = $order_info['order_sn'];
+                //预存款立即支付,订单支付完成
+                $ret = $model_pd->changePd($change_type, $data_pd);
+                if (0 == $ret) {
+                    throw new Exception("订单更新失败");
+                }
+
+                // 修改订单
+                $data_order["pd_amount"] = $order_info['pd_amount'];
+                $ret = $model_order->editOrder($data_order, array('order_id' => $order_info['order_id']));
+
+                if (0 == $ret) {
+                    throw new Exception("订单更新失败");
+                }
+
+                DB::commit();
+                return 0;
+            }
+        } catch (Exception $e) {
+            DB::rollback();
+        }
+    }
+
+    /**
      * 取得实物订单所需支付金额等信息, 移动支付时, 在使用红包时需要计算运费
      * @param int $pay_sn
      * @param int $member_id

+ 14 - 14
data/model/user_bonus.model.php

@@ -54,25 +54,25 @@ class user_bonusModel extends Model
 
     public function getTypeBinded($condition,$fields = '*')
     {
-        $condition['status'] = array('in',array(2,3));
+        $condition['bonus_status'] = array('in',array(2,3));
         return $this->where($condition)->field($fields)->limit(false)->select();
     }
 
     public function getAllBind($mobile,$fields = '*') {
-        return  $this->where(array('user_mobile' => $mobile, 'status' => 2))->field($fields)->order('type_id')->select();
+        return  $this->where(array('user_mobile' => $mobile, 'bonus_status' => 2))->field($fields)->order('type_id')->select();
     }
 
     public function getStatus($bonus_sn) {
-        $ret = $this->where(array('bonus_sn' => $bonus_sn))->field('status')->find();
+        $ret = $this->where(array('bonus_sn' => $bonus_sn))->field('bonus_status')->find();
         if(empty($ret)) {
             return 0;
         } else {
-            return intval($ret['status']);
+            return intval($ret['bonus_status']);
         }
     }
 
     private function getBind($mobile,$type_id,$fields = '*') {
-        return  $this->where(array('user_mobile' => $mobile, 'type_id' => $type_id,'status' => 2))->field($fields)->find();
+        return  $this->where(array('user_mobile' => $mobile, 'type_id' => $type_id,'bonus_status' => 2))->field($fields)->find();
     }
 
     public function edit($condition,$datas)
@@ -103,21 +103,21 @@ class user_bonusModel extends Model
             }
 
             $this->beginTransaction();
-            $bonus = $this->where(array('type_id' => $type_id,'session_id' => $sess_id))->field($fields)->order('status,bonus_id')->limit(1)->find();
+            $bonus = $this->where(array('type_id' => $type_id,'session_id' => $sess_id))->field($fields)->order('bonus_status,bonus_id')->limit(1)->find();
             if(empty($bonus))
             {
                 $condition = array( 'type_id' => $type_id,
-                                    'status' => array('in', array(0,1)),
+                                    'bonus_status' => array('in', array(0,1)),
                                     'grab_time' => array('lt',time() - $time_out));
-                $bonus = $this->where($condition)->field($fields)->order('status,bonus_id')->limit(1)->find();
+                $bonus = $this->where($condition)->field($fields)->order('bonus_status,bonus_id')->limit(1)->find();
                 if(!empty($bonus))
                 {
-                    if($bonus['status'] == 0) {
+                    if($bonus['bonus_status'] == 0) {
                         $is_new_grab = true;
                     }
 
                     if(user_helper::isLogin()) { // 如果是登录状态直接绑定
-                        $datas = array('status' => 2,
+                        $datas = array('bonus_status' => 2,
                             'grab_time' => time(),
                             'get_time'  => time(),
                             'session_id' => $sess_id,
@@ -127,7 +127,7 @@ class user_bonusModel extends Model
                         $is_new_bind = true;
                     }
                     else if(user_helper::isVerfiyMobile()) { //如果该会话手机号码曾经认证过,直接绑定
-                        $datas = array('status' => 2,
+                        $datas = array('bonus_status' => 2,
                             'grab_time' => time(),
                             'get_time'  => time(),
                             'session_id' => $sess_id,
@@ -135,7 +135,7 @@ class user_bonusModel extends Model
                         $is_new_bind = true;
                     }
                     else {
-                        $datas = array('status' => 1,
+                        $datas = array('bonus_status' => 1,
                             'grab_time' => time(),
                             'session_id' => $sess_id);
                     }
@@ -167,8 +167,8 @@ class user_bonusModel extends Model
             }
 
             $this->beginTransaction();
-            $condition = array('type_id' => $type_id,'bonus_id' => $bonus_id,'session_id' => $sess_id,'status' => 1);
-            $datas = array('status' => 2,
+            $condition = array('type_id' => $type_id,'bonus_id' => $bonus_id,'session_id' => $sess_id,'bonus_status' => 1);
+            $datas = array('bonus_status' => 2,
                 'user_mobile' => $mobile,
                 'get_time' => time());
 

+ 2 - 2
helper/bonus/generator.php

@@ -74,7 +74,7 @@ class GeneralGenerator extends IGenerator
                 $datas = array('bonus_sn' => make_sn(),
                     'bonus_value' => $val,
                     'type_id' => $type_id,
-                    'status' => 0,
+                    'bonus_status' => 0,
                     'type_sn' => $type_sn);
                 $ret = $mod_bonus->add($datas);
                 if($ret <= 0) {
@@ -90,7 +90,7 @@ class GeneralGenerator extends IGenerator
                 $datas = array( 'bonus_sn' => make_sn(),
                     'bonus_value' => $val,
                     'type_id' => $type_id,
-                    'status' => 0,
+                    'bonus_status' => 0,
                     'type_sn' => $type_sn);
 
                 $ret = $mod_bonus->add($datas);

+ 5 - 5
helper/bonus/manager.php

@@ -55,7 +55,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(),'status' => 1));
+                    $lasted_time = Model('user_bonus')->lasted_grabed(array('type_id' => $type->getType_id(),'bonus_status' => 1));
                     $type_info['grab_lastime'] = $lasted_time;
                 } else {
                     $type_info['grab_lastime'] = 0;
@@ -178,11 +178,11 @@ class manager
 
     public function topup($mod_user_bonus,&$bonus)
     {
-        $datas = array('status' => 3,
+        $datas = array('bonus_status' => 3,
             'user_id' => $_SESSION['member_id'],
             'user_name' => user_helper::nickname());
 
-        $ret = $mod_user_bonus->edit(array('bonus_id' => $bonus['bonus_id']))->update($datas);
+        $ret = $mod_user_bonus->where(array('bonus_id' => $bonus['bonus_id']))->update($datas);
         if($ret == true) {
             array_merge($bonus,$datas);
             $this->write_session($bonus);
@@ -253,7 +253,7 @@ class manager
 
         $condition = array('user_mobile' => $_SESSION['member_mobile'],
             'bonus_sn' => $bonus_sn,
-            'status' => array('in',array(2,3)));
+            'bonus_status' => array('in',array(2,3)));
         $ret = Model('user_bonus')->edit($condition,array('user_comment' => $content));
         if($ret == true) {
             $user_bonus = user_bonus::create_by_sn($bonus_sn);
@@ -272,7 +272,7 @@ class manager
             if($bonus_sn == $b_sn) return $val;
             if($val['type_sn'] == $type_sn)
             {
-                $status = $val['status'];
+                $status = $val['bonus_status'];
                 if ($status == self::bonus_state_binded) {
                     return $val;
                 }

+ 1 - 1
helper/bonus/user_bonus.php

@@ -29,7 +29,7 @@ class user_bonus
         $this->mParamer = $param;
     }
     public function isBinded() {
-        return (intval($this->mParamer['status']) >= 2);
+        return (intval($this->mParamer['bonus_status']) >= 2);
     }
     public function isGrabed() {
     }

+ 5 - 7
helper/bonus_helper.php

@@ -118,20 +118,18 @@ class bonus_helper
         foreach($bind_bonus as $val)
         {
             $type_id = $val['type_id'];
-            $type = \bonus\type::create_by_ids($type_id);
-            $bonus = array();
-            $bonus['type_info'] = $type->get_param();
-            $bonus['mine_bonus'] = $val;
+            $type = \bonus\type::create_by_id($type_id);
 
             try
             {
-                $info = sprintf("来自%s的红包.",$bonus['sender_name']);
+                $info = sprintf("来自%s的红包.",$val['sender_name']);
                 Db::beginTransaction();
-                $pd_helper->bonus_add_money($bonus['bonus_value'],$bonus['bonus_sn'],$type->sender_name(),$info);
+                $pd_helper->bonus_add_money($val['bonus_value'],$val['bonus_sn'],$type->sender_name(),$info);
                 if($manager->topup($mod_bonus,$val) === false) {
                     throw new Exception();
                 } else {
-                    array_push($bonusex,$bonus);
+                    $bonus['mine_bonus'] = $val;
+                    array_push($bonusex,$val);
                 }
                 Db::commit();
             } catch (Exception $ex) {

+ 20 - 0
helper/predeposit/pay_policy.php

@@ -0,0 +1,20 @@
+<?php
+/**
+ * Created by PhpStorm.
+ * User: stanley-king
+ * Date: 16/4/25
+ * Time: 下午3:07
+ */
+
+namespace predeposit;
+
+class pay_policy
+{
+    private function __construct() {
+
+    }
+
+    public static function create() {
+        return new pay_policy();
+    }
+}

+ 13 - 0
helper/predeposit_helper.php

@@ -113,4 +113,17 @@ class predeposit_helper
 
         return $pdlogs;
     }
+
+    public function calc_pred($pred_data,$avail_pred)
+    {
+        $max_fee = 0.00;
+        foreach($pred_data as $val) {
+            $max_fee += $val['store_goods_total'];
+        }
+        $max_fee = intval(($max_fee * 0.2) * 100);
+        $avail_pred = $avail_pred * 100;
+        $use_pred = $max_fee > $avail_pred ? $avail_pred : $max_fee;
+
+        return $use_pred / 100;
+    }
 }

+ 1 - 1
mobile/control/bonus.php

@@ -174,7 +174,7 @@ class bonusControl extends mobileHomeControl
                     // 更新为已领取
                     $data = array();
                     $data['user_id'] = $_SESSION['member_id'];
-                    $data['status'] = '1';
+                    $data['bonus_status'] = '1';
                     $ret = Model()->table('user_bonus')->where(array('user_mobile' => $member[0]['member_mobile']))->update($data);
                     if (0 == $ret) {
                         Model::rollback();

+ 9 - 9
mobile/control/member_bonus.php

@@ -81,26 +81,26 @@ class member_bonusControl extends mbMemberControl
 
     public function topupOp()
     {
-        $bonus = bonus_helper::topup_bonus($_SESSION['member_mobile']);
-        if($bonus === false) {
-            return self::outsuccess(array("bonusex" => array()));
+        $bonuses = bonus_helper::topup_bonus($_SESSION['member_mobile']);
+        if($bonuses === false) {
+            return self::outsuccess(array("$bonuses" => array()));
         }
         else
         {
-            $bonusex = array();
-            foreach($bonus as $val)
+            $ret = array();
+            foreach($bonuses as $bonus)
             {
-                $all_type_info = bonus_helper::get_typeinfo($val['type_sn']);
+                $all_type_info = bonus_helper::get_typeinfo($bonus['type_sn']);
                 if(!empty($all_type_info) && !empty($all_type_info['type_info']))
                 {
                     $type_info = bonus_helper::filter_type($all_type_info['type_info']);
-                    $bonus_info = bonus_helper::filter_bonus($val);
+                    $bonus_info = bonus_helper::filter_bonus($bonus);
 
-                    array_push($bonusex,array('type_info' => $type_info,'bonus_info' => $bonus_info));
+                    array_push($ret,array('type_info' => $type_info,'bonus_info' => $bonus_info));
                 }
             }
 
-            return self::outsuccess(array("bonusex" => $bonusex));
+            return self::outsuccess(array("bonusex" => $ret));
         }
     }
 

+ 3 - 1
mobile/control/member_buy.php

@@ -12,6 +12,8 @@
 
 defined('InShopNC') or exit('Access Invalid!');
 
+require_once (BASE_ROOT_PATH . '/helper/predeposit_helper.php');
+
 class member_buyControl extends mbMemberControl
 {
     public function __construct()
@@ -63,12 +65,12 @@ class member_buyControl extends mbMemberControl
         $buy_list['store_cart_list'] = $store_cart_list;
         $buy_list['freight_hash'] = $result['freight_list'];
         $buy_list['address_info'] = $result['address_info'];
-//        $buy_list['ifshow_offpay'] = $result['ifshow_offpay'];
         $buy_list['ifshow_offpay'] = null;
         $buy_list['vat_hash'] = $result['vat_hash'];
         $buy_list['inv_info'] = $result['inv_info'];
         $buy_list['available_predeposit'] = $result['available_predeposit'];
         $buy_list['available_rc_balance'] = $result['available_rc_balance'];
+
         return self::outsuccess($buy_list);
     }