|
@@ -5,6 +5,7 @@
|
|
*/
|
|
*/
|
|
|
|
|
|
defined('InShopNC') or exit('Access Invalid!');
|
|
defined('InShopNC') or exit('Access Invalid!');
|
|
|
|
+require_once (BASE_ROOT_PATH . '/helper/predeposit_helper.php');
|
|
|
|
|
|
class paymentLogic
|
|
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 $pay_sn
|
|
* @param int $member_id
|
|
* @param int $member_id
|
|
* @return int
|
|
* @return int
|
|
*/
|
|
*/
|
|
|
|
+ //add by stanley
|
|
public function payPredepositEx($pay_sn,$member_info)
|
|
public function payPredepositEx($pay_sn,$member_info)
|
|
{
|
|
{
|
|
//验证订单信息
|
|
//验证订单信息
|
|
$model_order = Model('order');
|
|
$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)) {
|
|
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');
|
|
$model_pd = Model('predeposit');
|
|
- $member_id = intval($member_info['member_id']);
|
|
|
|
|
|
+ $pred_helper = new predeposit_helper();
|
|
|
|
|
|
try
|
|
try
|
|
{
|
|
{
|
|
|
|
+
|
|
DB::beginTransaction();
|
|
DB::beginTransaction();
|
|
|
|
+ $pd_amount = intval($pd_amount * 100);
|
|
foreach ($order_list as $order_info)
|
|
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';
|
|
$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();
|
|
DB::commit();
|
|
- return 0;
|
|
|
|
|
|
+
|
|
|
|
+ return true;
|
|
}
|
|
}
|
|
- } catch (Exception $e) {
|
|
|
|
|
|
+ }
|
|
|
|
+ catch (Exception $e) {
|
|
DB::rollback();
|
|
DB::rollback();
|
|
}
|
|
}
|
|
}
|
|
}
|