310 lines
16 KiB
PHP
310 lines
16 KiB
PHP
<?php
|
|
/**
|
|
* Created by vim
|
|
* User: lcc
|
|
* Date: 2021/3/25
|
|
* Time: 16:57
|
|
*/
|
|
class Payment_service extends HD_Service{
|
|
|
|
public function __construct($params){
|
|
parent::__construct();
|
|
if($params['app_id']){
|
|
$this->app_id = $params['app_id'];
|
|
}
|
|
$this->log_file = __CLASS__."_app_id_".$this->app_id.'.log';
|
|
$this->load->model('apporder/order_purchase_model', 'purchase_model');
|
|
$this->load->model('app/liche/app_liche_orders_model');
|
|
|
|
$this->load->model('receiver/receiver_clues_model','clues_model');
|
|
$this->load->model('receiver/receiver_customers_model','customers_model');
|
|
|
|
$this->load->model('receiver/order/receiver_orders_model','orders_model');
|
|
$this->load->model('receiver/order/receiver_order_signs_model','order_signs_model');
|
|
$this->load->model('receiver/order/receiver_order_bills_model','bills_model');
|
|
$this->load->model('receiver/order/receiver_order_ckcars_model','ckcars_model');
|
|
$this->load->model('receiver/order/receiver_order_agents_model', 'order_agents_model');
|
|
$this->load->model('receiver/order/receiver_orders_v2_model');
|
|
}
|
|
|
|
|
|
/**
|
|
* 支付后逻辑
|
|
* @param string $sid
|
|
* @param float $pay_price 订单真实支付金额
|
|
*/
|
|
public function after_pay($sid,$pay_price = ''){
|
|
if($sid){
|
|
debug_log("[start] ". __FUNCTION__ . ": sid:".$sid, $this->log_file);
|
|
$order = $this->purchase_model->get(array('sid'=>$sid,'app_id'=>$this->app_id));
|
|
if(!$order){
|
|
debug_log("[error] ". __FUNCTION__ . ":{$sid}_订单不存在", $this->log_file);
|
|
return array('code'=>0,'msg'=>'订单不存在');
|
|
}
|
|
if($order['status']>1){
|
|
debug_log("[error] ". __FUNCTION__ . ":{$sid}_订单已支付", $this->log_file);
|
|
return array('code'=>0,'msg'=>'订单已支付');
|
|
}
|
|
switch ($order['type']){
|
|
case 1: //实物商品
|
|
break;
|
|
case 2: //虚拟物品
|
|
break;
|
|
case 3: //活动订单
|
|
$upd = array('status'=>2,'status_detail'=>21,'pay_time'=>date('Y-m-d H:i:s'));
|
|
$pay_price && $upd['pay_price'] = $pay_price;
|
|
$res = $this->purchase_model->update($upd,array('id'=>$order['id']));
|
|
if($res){
|
|
//判断客户是否存在
|
|
$clues = $this->clues_model->get(['id'=>$order['cf_id']]);
|
|
if($clues){
|
|
$cus = $this->customers_model->get(['rid'=>$clues['id']]);
|
|
if($cus){
|
|
$this->customers_model->update(['status'=>2],['id'=>$cus['id']]);
|
|
}
|
|
}
|
|
return array('code'=>1,'msg'=>'操作成功');
|
|
}else{
|
|
return array('code'=>0,'msg'=>'更新失败');
|
|
}
|
|
break;
|
|
case 4: //定金
|
|
$upd = array('status'=>2,'status_detail'=>21,'pay_time'=>date('Y-m-d H:i:s'));
|
|
$pay_price && $upd['pay_price'] = $pay_price;
|
|
$res = $this->purchase_model->update($upd,array('id'=>$order['id']));
|
|
if($res){
|
|
//更新订单状态
|
|
$row = $this->orders_model->get(['id'=>$order['item_id']]);
|
|
if($row){
|
|
if($row['payway']){//全款
|
|
$status = 2;
|
|
$this->load->model('receiver/order/receiver_order_ckcars_model','next_model');
|
|
}else{
|
|
$status = 1;
|
|
$this->load->model('receiver/order/receiver_order_loans_model','next_model');
|
|
}
|
|
$res = $this->orders_model->update(['status'=>$status],['id'=>$row['id']]);
|
|
$this->order_signs_model->update(['status'=>2],['o_id'=>$row['id']]);
|
|
if($res){
|
|
$add_data = [
|
|
'o_id' => $row['id'],
|
|
'c_time' => time()
|
|
];
|
|
$this->next_model->add($add_data);
|
|
}
|
|
}
|
|
return array('code'=>1,'msg'=>'操作成功');
|
|
}else{
|
|
return array('code'=>0,'msg'=>'更新失败');
|
|
}
|
|
break;
|
|
case 5: //委托服务费
|
|
case 6: //首付或尾款
|
|
$upd = array('status'=>2,'status_detail'=>21,'pay_time'=>date('Y-m-d H:i:s'));
|
|
$pay_price && $upd['pay_price'] = $pay_price;
|
|
$res = $this->purchase_model->update($upd,array('id'=>$order['id']));
|
|
if($res){
|
|
$nopay = $this->purchase_model->count(['app_id'=>$this->app_id,'cf_id'=>$order['item_id'],'type in (5,6)'=>null,'status'=>1,'status_detail'=>11]); //未支付的尾款或者服务费
|
|
if(!$nopay){
|
|
//更新订单状态
|
|
$row = $this->orders_model->get(['id'=>$order['item_id']]);
|
|
if($row){
|
|
$this->ckcars_model->update(['status'=>3],['o_id'=>$row['id']]);
|
|
$this->orders_model->update(['status'=>3],['id'=>$row['id']]);
|
|
if(!$this->bills_model->count(['o_id'=>$row['id']])){
|
|
$this->bills_model->add(['o_id'=>$row['id'],'c_time'=>time()]);
|
|
}
|
|
}
|
|
}
|
|
return array('code'=>1,'msg'=>'操作成功');
|
|
}else{
|
|
return array('code'=>0,'msg'=>'更新失败');
|
|
}
|
|
break;
|
|
default:
|
|
debug_log("[error] ". __FUNCTION__ . ":{$order['type']}_未知商品类型", $this->log_file);
|
|
return array('code'=>0,'msg'=>'未知商品类型');
|
|
}
|
|
}
|
|
}
|
|
/**
|
|
* 支付后逻辑
|
|
* @param string $sid
|
|
* @param float $pay_price 订单真实支付金额
|
|
* @param string $descrip 订单描述
|
|
* @param date $pay_time 支付时间
|
|
*/
|
|
public function after_pay_liche($sid,$pay_price = '',$descrip='',$pay_time=''){
|
|
debug_log("[start] ". __FUNCTION__ . ": sid:".$sid, $this->log_file);
|
|
$order = $this->app_liche_orders_model->get(array('sid'=>$sid));
|
|
if(!$order){
|
|
debug_log("[error] ". __FUNCTION__ . ":{$sid}_订单不存在", $this->log_file);
|
|
return array('code'=>0,'msg'=>'订单不存在');
|
|
}
|
|
if($order['status']>0){
|
|
debug_log("[error] ". __FUNCTION__ . ":{$sid}_订单已支付", $this->log_file);
|
|
return array('code'=>0,'msg'=>'订单已支付');
|
|
}
|
|
switch ($order['type']){
|
|
case 1: //定金
|
|
$upd = array('status'=>1,'pay_time'=>date('Y-m-d H:i:s'));
|
|
$pay_price && $upd['pay_price'] = $pay_price;
|
|
$descrip && $upd['descrip'] = $descrip;
|
|
$pay_time && $upd['pay_time'] = $pay_time;
|
|
$res = $this->app_liche_orders_model->update($upd,array('id'=>$order['id']));
|
|
if($res) {
|
|
//更新订单状态
|
|
$row = $this->orders_model->get(['id' => $order['o_id']]);
|
|
if ($row) {
|
|
if(!$this->bills_model->count(['o_id'=>$row['id']])){
|
|
$this->bills_model->add(['o_id'=>$row['id'],'c_time'=>time]);
|
|
}
|
|
if(!$this->order_agents_model->count(['o_id'=>$row['id']])){
|
|
$this->order_agents_model->add(['o_id'=>$row['id'],'status'=>-1,'c_time'=>time]);
|
|
}
|
|
$this->order_signs_model->update(['status' => 2], ['o_id' => $row['id']]);
|
|
if ($row['payway']) {//全款
|
|
$status = 2;
|
|
$this->load->model('receiver/order/receiver_order_ckcars_model', 'next_model');
|
|
} else {
|
|
$status = 1;
|
|
$this->load->model('receiver/order/receiver_order_loans_model', 'next_model');
|
|
}
|
|
$next_row = $this->next_model->get(['o_id'=>$row['id']]);
|
|
$order_update = [
|
|
'status' => $status,
|
|
];
|
|
$row['order_time'] == '0000-00-00 00:00:00' && $order_update['order_time'] = date('Y-m-d H:i:s');
|
|
$this->orders_model->update($order_update, ['id' => $row['id']]);
|
|
if(!$next_row){
|
|
$add_data = [
|
|
'o_id' => $row['id'],
|
|
'c_time' => time()
|
|
];
|
|
$this->next_model->add($add_data);
|
|
}
|
|
}
|
|
return array('code'=>1,'msg'=>'操作成功');
|
|
}else{
|
|
return array('code'=>0,'msg'=>'更新失败');
|
|
}
|
|
break;
|
|
case 2: //服务费
|
|
case 3: //尾款
|
|
$upd = array('status'=>1,'pay_time'=>date('Y-m-d H:i:s'));
|
|
$pay_price && $upd['pay_price'] = $pay_price;
|
|
$descrip && $upd['descrip'] = $descrip;
|
|
$pay_time && $upd['pay_time'] = $pay_time;
|
|
$res = $this->app_liche_orders_model->update($upd,array('id'=>$order['id']));
|
|
if($res){
|
|
$p_row = $this->app_liche_orders_model->get(['o_id'=>$order['o_id'],'pid'=>0,'status>='=>0]);
|
|
$last_p_row = $this->app_liche_orders_model->get(['o_id'=>$order['o_id'],'type'=>3,'pid'=>$p_row['id'],'status>='=>0]); //尾款父订单
|
|
$where = [
|
|
'status'=>1,
|
|
'o_id'=>$order['o_id'],
|
|
'pid>'=>0
|
|
];
|
|
$last_p_row && $where['id <>'] = $last_p_row['id'];
|
|
$is_pay = $this->app_liche_orders_model->sum('total_price',$where); //已支付金额
|
|
$this->load->library('receiver/orders_entity');
|
|
$need_pay_money = $this->orders_entity->recevable_price($order['o_id']);
|
|
if($is_pay['total_price']>=$need_pay_money){ //完成支付
|
|
$ckcar_row = $this->ckcars_model->get(['o_id'=>$order['o_id']],'status');
|
|
$row = $this->orders_model->get(['id'=>$order['o_id']],'id,status');
|
|
if($row['status']==2 && $ckcar_row['status']==2){
|
|
$this->ckcars_model->update(['status'=>3],['o_id'=>$row['id']]);
|
|
$this->orders_model->update(['status'=>3],['id'=>$row['id']]);
|
|
if(!$this->bills_model->count(['o_id'=>$row['id']])){
|
|
$this->bills_model->add(['o_id'=>$row['id'],'status'=>1,'c_time'=>time()]);
|
|
}else{
|
|
$this->bills_model->update(['status'=>1],['o_id'=>$row['id']]);
|
|
}
|
|
}
|
|
}
|
|
$last_is_pay = $this->app_liche_orders_model->sum('total_price',['status'=>1,'pid'=>$last_p_row['id']]); //已支付尾款
|
|
if($last_is_pay['total_price']>=$last_p_row['total_price']){
|
|
$this->app_liche_orders_model->update(['status'=>1,'pay_time'=>date('Y-m-d H:i:s')],['id'=>$last_p_row['id']]);
|
|
}
|
|
return array('code'=>1,'msg'=>'操作成功');
|
|
}else{
|
|
return array('code'=>0,'msg'=>'更新失败');
|
|
}
|
|
break;
|
|
case 4: //意向金
|
|
$upd = array('status'=>1,'pay_time'=>date('Y-m-d H:i:s'));
|
|
$pay_price && $upd['pay_price'] = $pay_price;
|
|
$descrip && $upd['descrip'] = $descrip;
|
|
$pay_time && $upd['pay_time'] = $pay_time;
|
|
$res = $this->app_liche_orders_model->update($upd,array('id'=>$order['id']));
|
|
if($res) {
|
|
//更新订单下定时间
|
|
$this->orders_model->update(['order_time' => date('Y-m-d H:i:s')], ['id' => $order['o_id']]);
|
|
return array('code'=>1,'msg'=>'操作成功');
|
|
}else{
|
|
return array('code'=>0,'msg'=>'更新失败');
|
|
}
|
|
break;
|
|
default:
|
|
debug_log("[error] ". __FUNCTION__ . ":{$order['type']}_未知商品类型", $this->log_file);
|
|
return array('code'=>0,'msg'=>'未知商品类型');
|
|
}
|
|
}
|
|
|
|
public function after_pay_liche_v2($sid,$pay_price = '',$pay_uid=''){
|
|
debug_log("[start] ". __FUNCTION__ . ": sid:".$sid, $this->log_file);
|
|
$order = $this->app_liche_orders_model->get(array('sid'=>$sid));
|
|
if(!$order){
|
|
debug_log("[error] ". __FUNCTION__ . ":{$sid}_订单不存在", $this->log_file);
|
|
return array('code'=>0,'msg'=>'订单不存在');
|
|
}
|
|
if($order['status']>0){
|
|
debug_log("[error] ". __FUNCTION__ . ":{$sid}_订单已支付", $this->log_file);
|
|
return array('code'=>0,'msg'=>'订单已支付');
|
|
}
|
|
$upd = array('status'=>1,'pay_time'=>date('Y-m-d H:i:s'));
|
|
$pay_price && $upd['pay_price'] = $pay_price;
|
|
$pay_uid && $upd['pay_uid'] = $pay_uid;
|
|
$res = $this->app_liche_orders_model->update($upd,array('id'=>$order['id']));
|
|
if($res) {
|
|
$p_row = $this->app_liche_orders_model->get(['o_id'=>$order['o_id'],'pid'=>0,'status>='=>0]);
|
|
$last_p_row = $this->app_liche_orders_model->get(['o_id'=>$order['o_id'],'type'=>3,'pid'=>$p_row['id'],'status>='=>0]); //尾款父订单
|
|
switch ($order['type']){
|
|
case 1: //定金
|
|
$row = $this->receiver_orders_v2_model->get(['id' => $order['o_id']]);
|
|
if($row['order_time'] == '0000-00-00 00:00:00'){
|
|
$this->receiver_orders_v2_model->update(['order_time' => date('Y-m-d H:i:s')], ['id' => $row['id']]);
|
|
}
|
|
break;
|
|
case 3:
|
|
$last_is_pay = $this->app_liche_orders_model->sum('total_price',['status'=>1,'pid'=>$last_p_row['id']]); //已支付尾款
|
|
if($last_is_pay['total_price']>=$last_p_row['total_price']){
|
|
$this->app_liche_orders_model->update(['status'=>1,'pay_time'=>date('Y-m-d H:i:s')],['id'=>$last_p_row['id']]);
|
|
}
|
|
break;
|
|
case 4:
|
|
//更新订单下定时间
|
|
$this->receiver_orders_v2_model->update(['order_time' => date('Y-m-d H:i:s')], ['id' => $order['o_id']]);
|
|
break;
|
|
default:
|
|
}
|
|
$where = [
|
|
'status'=>1,
|
|
'o_id'=>$order['o_id'],
|
|
'pid>'=>0
|
|
];
|
|
$last_p_row && $where['id <>'] = $last_p_row['id'];
|
|
$is_pay = $this->app_liche_orders_model->sum('total_price',$where); //已支付金额
|
|
$this->load->library('receiver/orders_v2_entity');
|
|
$this->load->library('receiver/orders_status_entity');
|
|
$this->orders_status_entity->set_status($order['o_id'],0,1);
|
|
$need_pay_money = $this->orders_v2_entity->recevable_price($order['o_id']);
|
|
if($need_pay_money && $is_pay['total_price']>=$need_pay_money){ //完成支付
|
|
$this->orders_status_entity->set_status($order['o_id'],0,2);
|
|
}
|
|
return array('code'=>1,'msg'=>'操作成功');
|
|
}else{
|
|
return array('code'=>0,'msg'=>'更新失败');
|
|
}
|
|
}
|
|
}
|