|
@@ -9,7 +9,7 @@ defined('InShopNC') or exit('Access Invalid!');
|
|
|
class paymentLogic
|
|
|
{
|
|
|
/**
|
|
|
- * 尝试使用红包
|
|
|
+ * 尝试使用预存款
|
|
|
* @param int $pay_sn
|
|
|
* @param int $member_id
|
|
|
* @return array
|
|
@@ -25,7 +25,7 @@ class paymentLogic
|
|
|
}
|
|
|
$order_pay_info = $model_order->getOrderPayInfo($condition);
|
|
|
if (empty($order_pay_info)) {
|
|
|
- return callback(false, '该支付单不存在');
|
|
|
+ return false;
|
|
|
}
|
|
|
|
|
|
$condition = array();
|
|
@@ -35,41 +35,54 @@ class paymentLogic
|
|
|
// 获取余额数据
|
|
|
$obj_member = Model('member');
|
|
|
$pd_amount = $obj_member->getPdAmount($member_info['member_id']);
|
|
|
- if (empty($order_list)) return;
|
|
|
+ if (empty($order_list)) return false;
|
|
|
|
|
|
$model_order = Model('order');
|
|
|
$model_pd = Model('predeposit');
|
|
|
$member_id = intval($member_info['member_id']);
|
|
|
|
|
|
- foreach ($order_list as $order_info)
|
|
|
- {
|
|
|
- // 使用全部预存款(红包逻辑)
|
|
|
- $data_order = array();
|
|
|
- $change_type = '';
|
|
|
- if (floatval($pd_amount) > floatval($order_info['order_amount'])) {
|
|
|
- // 余额大于订单金额的情况
|
|
|
- $order_info['pd_amount'] = floatval($order_info['order_amount']);
|
|
|
- $pd_amount = floatval($pd_amount) - floatval($order_info['pd_amount']);
|
|
|
- $data_order["order_state"] = ORDER_STATE_PAY;
|
|
|
- //$data_order["order_amount"] = 0;
|
|
|
- $change_type = 'order_pay';
|
|
|
- } else if (floatval($pd_amount) > 0) { // 余额小于等于订单金额的情况, $pd_amount不能等于0
|
|
|
- $order_info['pd_amount'] = floatval($pd_amount);
|
|
|
- $data_order["order_amount"] = floatval($order_info['order_amount']) - floatval($order_info['pd_amount']);
|
|
|
- $pd_amount = 0;
|
|
|
- $change_type = 'order_freeze';
|
|
|
+ try {
|
|
|
+ DB::beginTransaction();
|
|
|
+ foreach ($order_list as $order_info) {
|
|
|
+ // 使用全部预存款(红包逻辑)
|
|
|
+ $data_order = array();
|
|
|
+ $change_type = '';
|
|
|
+ if (floatval($pd_amount) > floatval($order_info['order_amount'])) {
|
|
|
+ // 余额大于订单金额的情况
|
|
|
+ $order_info['pd_amount'] = floatval($order_info['order_amount']);
|
|
|
+ $pd_amount = floatval($pd_amount) - floatval($order_info['pd_amount']);
|
|
|
+ //$data_order["order_state"] = ORDER_STATE_PAY;
|
|
|
+ //$data_order["order_amount"] = 0;
|
|
|
+ $change_type = 'order_pay';
|
|
|
+ } else if (floatval($pd_amount) > 0) { // 余额小于等于订单金额的情况, $pd_amount不能等于0
|
|
|
+ $order_info['pd_amount'] = floatval($pd_amount);
|
|
|
+ $data_order["order_amount"] = floatval($order_info['order_amount']) - floatval($order_info['pd_amount']);
|
|
|
+ $pd_amount = 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'] = $order_info['pd_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();
|
|
|
+
|
|
|
+ if (ORDER_STATE_PAY == $data_order["order_state"]) {
|
|
|
+ // 推送到oms
|
|
|
+ }
|
|
|
}
|
|
|
- $data_pd = array();
|
|
|
- $data_pd['member_id'] = $member_id;
|
|
|
- $data_pd['member_name'] = $member_info['member_name'];
|
|
|
- $data_pd['amount'] = $order_info['pd_amount'];
|
|
|
- $data_pd['order_sn'] = $order_info['order_sn'];
|
|
|
- //预存款立即支付,订单支付完成
|
|
|
- $model_pd->changePd($change_type,$data_pd);
|
|
|
- // 修改订单
|
|
|
- $data_order["pd_amount"] = $order_info['pd_amount'];
|
|
|
- $model_order->editOrder($data_order,array('order_id'=>$order_info['order_id']));
|
|
|
+ }catch (Exception $e) {
|
|
|
+ DB::rollback();
|
|
|
}
|
|
|
+
|
|
|
}
|
|
|
|
|
|
/**
|