Selaa lähdekoodia

add predeposit pay policy

stanley-king 9 vuotta sitten
vanhempi
commit
b2cfe5d189

+ 4 - 0
core/framework/libraries/validate.php

@@ -61,6 +61,10 @@ Class Validate{
 	{
 		return array('input' => $val,'validator' => "number", 'require' => true,'message' => $error);
 	}
+	static public function verify_serialnum($sn)
+	{
+		return array('input' => $sn,'validator'=>'length','min'=>16,'max'=>20,'message' =>"SN序列号只能是16位到20位.");
+	}
 
 	/**
 	 * 验证数组中的值

+ 86 - 51
data/logic/payment.logic.php

@@ -5,6 +5,7 @@
  */
 
 defined('InShopNC') or exit('Access Invalid!');
+require_once (BASE_ROOT_PATH . '/helper/predeposit_helper.php');
 
 class paymentLogic
 {
@@ -93,87 +94,121 @@ class paymentLogic
         }
     }
 
+    //add by stanley
+    public function calcPredeposit($pay_sn,$member_info,&$avail_pred)
+    {
+        //验证订单信息
+        $model_order = Model('order');
+        $order_pay_info = $model_order->getOrderPayInfo(array('pay_sn' => $pay_sn, 'buyer_id' => $member_info['member_id']));
+        if (empty($order_pay_info)) {
+            return false;
+        }
+        $member_id = intval($member_info['member_id']);
+
+        $mod_member = Model('member');
+        $pd_amount = $mod_member->getPdAmount($member_id);
+        $avail_pred = $pd_amount;
+
+
+        $order_list = $model_order->getNormalOrderList(array('pay_sn' => $pay_sn));
+        $pred_helper = new predeposit_helper();
+        $pd_amount = intval($pd_amount * 100);
+
+        $can_used = 0;
+        foreach ($order_list as $order_info) {
+            // 计算运费+订单总额
+            $cur_order_amount = intval(floatval($order_info['order_amount']) * 100);
+            $cur_pd_amount = intval(floatval($order_info['pd_amount']) * 100);
+
+            $order_pd_amount = $pred_helper->calc_pred($cur_order_amount, $pd_amount, $cur_pd_amount, $no_cash);
+            $pd_amount -= $order_pd_amount;
+            $can_used += $order_pd_amount;
+        }
+
+        return ($can_used / 100);
+    }
+
+
     /**
      * 尝试使用预存款, 可以扣除运费
      * @param int $pay_sn
      * @param int $member_id
      * @return int
      */
+    //add by stanley
     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);
+        $order_pay_info = $model_order->getOrderPayInfo(array('pay_sn' => $pay_sn, 'buyer_id' => $member_info['member_id']));
         if (empty($order_pay_info)) {
-            return -1;
+            return false;
         }
+        $member_id = intval($member_info['member_id']);
 
-        $condition = array();
-        $condition['pay_sn'] = $pay_sn;
-        $order_list = $model_order->getNormalOrderList($condition);
+        $mod_member = Model('member');
+        $pd_amount = $mod_member->getPdAmount($member_id);
 
-        // 获取余额数据
-        $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');
+        $order_list = $model_order->getNormalOrderList(array('pay_sn' => $pay_sn));
         $model_pd = Model('predeposit');
-        $member_id = intval($member_info['member_id']);
+        $pred_helper = new predeposit_helper();
 
         try
         {
+
             DB::beginTransaction();
+            $pd_amount = intval($pd_amount * 100);
             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);
+                $cur_order_amount = intval(floatval($order_info['order_amount']) * 100);
+                $cur_pd_amount = intval(floatval($order_info['pd_amount']) * 100);
+                $order_pd_amount = $pred_helper->calc_pred($cur_order_amount,$pd_amount,$cur_pd_amount,$no_cash);
+                $pd_amount -= $order_pd_amount;
+
+                $fEdit = true;
+                if($no_cash) {
+                    $order_info['pd_amount'] += floatval($order_pd_amount / 100); // 余额大于订单金额的情况
                     $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("订单更新失败");
+                else
+                {
+                    if($order_pd_amount > 0) {
+                        $order_info['pd_amount'] += floatval($order_pd_amount / 100);
+                        $change_type = 'order_freeze';
+                    } else {
+                        $fEdit = false;
+                    }
                 }
 
-                // 修改订单
-                $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("订单更新失败");
+                if($fEdit)
+                {
+                    $data_pd = array();
+                    $data_pd['member_id'] = $member_id;
+                    $data_pd['member_name'] = $member_info['member_name'];
+                    $data_pd['amount'] = floatval($order_pd_amount / 100);
+                    $data_pd['order_sn'] = $order_info['order_sn'];
+                    //预存款立即支付,订单支付完成
+                    $ret = $model_pd->changePd($change_type, $data_pd);
+                    if (0 == $ret) {
+                        throw new Exception("订单更新失败");
+                    }
+
+                    // 修改订单
+                    $data_order = array('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;
+
+                return true;
             }
-        } catch (Exception $e) {
+        }
+        catch (Exception $e) {
             DB::rollback();
         }
     }

+ 1 - 1
helper/bonus/grab.php

@@ -42,7 +42,7 @@ class general_grab extends IGrab
         parent::__construct($paramer);
     }
 
-    public function get_bonus($paramer) //($type_sn,$time_out,$sess_id)
+    public function get_bonus($paramer)
     {
         $time_out = $paramer['time_out'];
         $session_id = $paramer['session_id'];

+ 33 - 8
helper/predeposit_helper.php

@@ -114,16 +114,41 @@ class predeposit_helper
         return $pdlogs;
     }
 
-    public function calc_pred($pred_data,$avail_pred)
+    //订单总额,可用的余额,当前订单已经使用的余额
+    //返回分
+    public function calc_pred($order_amount,$avail_amound,$pd_amount,&$no_cash)
     {
-        $max_fee = 0.00;
-        foreach($pred_data as $val) {
-            $max_fee += $val['store_goods_total'];
+        $cur_used = intval($order_amount * 0.2);
+        $cur_used = $cur_used > $avail_amound  ? $avail_amound : $cur_used;
+
+        if($order_amount == $cur_used) {
+            $no_cash = true;
+        } else {
+            $no_cash = false;
         }
-        $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;
+        return ($cur_used - $pd_amount > 0 ? $cur_used - $pd_amount : 0);
     }
+
+//    public function calc_pred($pay_sn,&$avail_pred)
+//    {
+//        $logic_payment = Logic('payment');
+//        $result = $logic_payment->getRealOrderInfo($pay_sn, $_SESSION['member_id']);
+//
+//        if(empty($result)) {
+//            return false;
+//        }
+//        $data = $result['data'];
+//        $order_amount = $data['api_pay_amount'];
+//
+//        $member = Model('member');
+//        $relay_array = $member->getMemberPdInfo($_SESSION['member_id']);
+//        $avail_pred = floatval($relay_array['available_predeposit']);
+//        //$order_list = $data['order_list']; todo 需要更严格的扣费策略,从各个商品考虑
+//
+//        $use_pred = intval(($order_amount * 0.2) * 100);
+//        $use_pred = $use_pred > intval($avail_pred * 100) ? intval($avail_pred * 100) : $use_pred;
+//
+//        return $use_pred / 100;
+//    }
 }

Tiedoston diff-näkymää rajattu, sillä se on liian suuri
+ 28 - 4
mobile/control/app_pay.php


+ 1 - 1
mobile/control/member_bonus.php

@@ -100,7 +100,7 @@ class member_bonusControl extends mbMemberControl
                 }
             }
 
-            return self::outsuccess(array("bonusex" => $ret));
+            return self::outsuccess(array("$bonuses" => $ret));
         }
     }