Files
littleTiger/application/admin/logic/RefundLogic.php
2019-02-28 19:48:21 +08:00

184 lines
9.3 KiB
PHP
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?php
/**
* tpshop
* ============================================================================
* 版权所有 2015-2027 深圳搜豹网络科技有限公司,并保留所有权利。
* 网站地址: http://www.tp-shop.cn
* ----------------------------------------------------------------------------
* 商业用途务必到官方购买正版授权, 使用盗版将严厉追究您的法律责任。
* 采用最新Thinkphp5助手函数特性实现单字母函数M D U等简写方式
* ============================================================================
* Author: IT宇宙人
* Date: 2015-09-09
*/
namespace app\admin\logic;
use think\Model;
use think\Db;
use app\common\logic\OrderLogic as adminOrderLogic;
/**
* 分类逻辑定义
* Class CatsLogic
* @package Home\Logic
*/
class RefundLogic extends Model
{
protected $refund_deposit=0; //要退的余额
protected $refund_money=0; //要退的金额(三方支付的)
protected $refund_integral=0; //要退的积分
public function setRefundDeposit($refund_deposit)
{
$this->refund_deposit = $refund_deposit;
}
public function setRrefundMoney($refund_money)
{
$this->refund_money = $refund_money;
}
public function setRrefundIntegral($refund_integral)
{
$this->refund_integral = $refund_integral;
}
//订单商品售后退款
function updateRefundGoods($rec_id,$refund_type=0){
$order_goods = Db::name('order_goods')->where(array('rec_id'=>$rec_id))->find();
$return_goods = Db::name('return_goods')->where(array('rec_id'=>$rec_id))->find();
$up_data = [
'refund_deposit'=>$this->refund_deposit,
'refund_integral'=>$this->refund_integral,
'refund_type'=>$refund_type,
'refund_time'=>time(),
'status'=>5
];
//使用积分或者余额抵扣部分原路退还
if(($this->refund_deposit >0 || $this->refund_integral>0)){
accountLog($return_goods['user_id'],$this->refund_deposit,$this->refund_integral,'用户申请商品退款',0,$return_goods['order_id'],$return_goods['order_sn']);
}
//在线支付金额退到余额去
if($refund_type==1 && $this->refund_money>0){
accountLog($return_goods['user_id'],$this->refund_money,0,'用户申请商品退款',0,$return_goods['order_id'],$return_goods['order_sn']);
}
Db::name('return_goods')->where(['rec_id'=>$rec_id])->save($up_data);//更新退款申请状态
Db::name('order_goods')->where(['rec_id'=>$rec_id])->save(['is_send'=>3]);//修改订单商品状态
$return_goods_count = Db::name('order_goods')->where(['order_id'=>$return_goods['order_id'],'is_send'=>3])->count();//获取该订单商品退款个数
$order_goods_count = Db::name('order_goods')->where(['order_id'=>$return_goods['order_id']])->count();//查询该订单所有商品个数
//该订单全部商品退款完才能订单作废
if($return_goods_count == $order_goods_count){
Db::name('order')->where(['order_id'=>$return_goods['order_id']])->save(['order_status'=>5]);//修改订单状态为作废以后给6也行不然统计销售额的时候会统计进去
}
if($return_goods['is_receive'] == 1){
//赠送积分追回
if($order_goods['give_integral']>0){
$user = get_user_info($return_goods['user_id']);
if($order_goods['give_integral']<$user['pay_points']){
accountLog($return_goods['user_id'],0,-$order_goods['give_integral'],'退货积分追回',0,$return_goods['order_id'],$return_goods['order_sn']);
}
}
//追回订单商品赠送的优惠券
$coupon_info = Db::name('coupon_list')->where(array('uid'=>$return_goods['user_id'],'get_order_id'=>$return_goods['order_id']))->find();
if(!empty($coupon_info)){
if($coupon_info['status'] == 1) { //如果优惠券被使用,那么从退款里扣
$coupon = Db::name('coupon')->where(array('id' => $coupon_info['cid']))->find();
if ($this->refund_money > $coupon['money']) {
//退款金额大于优惠券金额直接扣
$this->refund_money = $this->refund_money - $coupon['money'];//更新实际退款金额
Db::name('return_goods')->where(['id' => $return_goods['id']])->save(['refund_money' => $this->refund_money]);
}else{
//否则从退还余额里扣
$this->refund_deposit = $this->refund_deposit - $coupon['money'];//更新实际退还余额
Db::name('return_goods')->where(['id' => $return_goods['id']])->save(['refund_deposit' => $this->refund_deposit]);
}
}else {
Db::name('coupon_list')->where(array('id' => $coupon_info['id']))->delete();
Db::name('coupon')->where(array('id' => $coupon_info['cid']))->setDec('send_num');//优惠券追回
}
}
}
//退还使用的优惠券
$order_goods_count = Db::name('order_goods')->where(array('order_id'=>$return_goods['order_id']))->sum('goods_num');
$return_goods_count = Db::name('return_goods')->where(array('order_id'=>$return_goods['order_id']))->sum('goods_num');
if($order_goods_count == $return_goods_count){
$coupon_list = Db::name('coupon_list')->where(['uid'=>$return_goods['user_id'],'order_id'=>$return_goods['order_id']])->find();
if(!empty($coupon_list)){
$update_coupon_data = ['status'=>0,'use_time'=>0,'order_id'=>0];
Db::name('coupon_list')->where(['id'=>$coupon_list['id'],'status'=>1])->save($update_coupon_data);//符合条件的,优惠券就退给他
}
}
$expense_data = array(
'money'=>$this->refund_money+$this->refund_deposit,
'integral'=>$this->refund_integral,
'log_type_id'=>$rec_id,
'type'=>3,
'user_id'=>$return_goods['user_id']
);
expenseLog($expense_data);//退款记录日志
//如果是分销商品, 从佣金记录表中扣除此商品产生的佣金: 该笔订单有三条记录(分别对应一二三级佣金)
$rebateLogs = M('rebate_log')->where(['order_id'=>$order_goods['order_id']])->select();
if(!$rebateLogs)return ;
foreach ($rebateLogs as $k => $v){
if(!$v['detail'])continue;
$rebate_detail_arr = unserialize($v['detail']);
$money = 0;
//找出此商品的佣金
foreach ($rebate_detail_arr as $m => $item){
if($item['rec_id'] ==$rec_id && $item['isReturn'] == 0 ){
$money += $item['money'];
$rebate_detail_arr[$m]['isReturn'] = 1;
}
}
//扣除退款商品的佣金, 将明细中的此商品佣金标记为已退回
$v['detail'] = serialize($rebate_detail_arr);
$real_money = $v['money'] - $money;
$v['money'] = ($real_money > 0) ? $real_money : 0 ;
M('rebate_log')->where(['id'=>$v['id']])->update($v);
}
}
/**
* 取消订单退还余额,优惠券等
* @param $order
* @param int $type
* @return bool
*/
function updateRefundOrder($order,$type=0){
//使用积分或者余额抵扣部分一一退还
if ($order['user_money'] > 0 || $order['integral'] > 0) {
$update_money_res = accountLog($order['user_id'], $order['user_money'], $order['integral'], '用户申请订单退款', 0, $order['order_id'], $order['order_sn']);
if(!$update_money_res){
return false;
}
}
//在线支付金额退到余额
if($order['order_amount']>0 && $type == 1){
//改方法已经是退回余额, 不需要判断原路退回还是退还到余额
accountLog($order['user_id'],$order['order_amount'],0,'用户取消订单退款',0,$order['order_id'],$order['order_sn']);
}
//符合条件的,该笔订单使用的优惠券就退还
$coupon_list = Db::name('coupon_list')->where(['uid'=>$order['user_id'],'order_id'=>$order['order_id']])->find();
if(!empty($coupon_list)){
$update_coupon_data = ['status'=>0,'use_time'=>0,'order_id'=>0];
Db::name('coupon_list')->where(['id'=>$coupon_list['id'],'status'=>1])->save($update_coupon_data);
}
Db::name('order')->where(array('order_id'=>$order['order_id']))->save(array('pay_status'=>3)); //更改订单状态
$orderLogic = new adminOrderLogic();
$orderLogic->alterReturnGoodsInventory($order);//取消订单后改变库存
$User =new \app\common\logic\User();
$User->setUserById($order['user_id']);
$User->updateUserLevel();
$expense_data = [
'money' => $order['user_money'],
'integral' => $order['integral'],
'log_type_id' => $order['order_id'],
'type' => 2,
'user_id' => $order['user_id'],
];
expenseLog($expense_data);//平台支出记录
return true;
}
}