// +---------------------------------------------------------------------- declare (strict_types = 1); namespace app\store\controller\order; use app\common\service\order\Refund as RefundService; use app\store\controller\Controller; use app\store\model\OrderRefund as OrderRefundModel; use app\common\model\order\RefundHis; use app\common\model\OrderGoods as OrderGoodsModel; /** * 售后管理 * Class Refund * @package app\store\controller\order */ class Refund extends Controller { /** * 售后单列表 * @return array */ public function list() { $model = new OrderRefundModel; $list = $model->getList($this->request->param()); return $this->renderSuccess(compact('list')); } /** * 售后单详情 * @param int $orderRefundId * @return array */ public function detail(int $orderRefundId) { // 售后单详情 $model = new OrderRefundModel; if (!$detail = $model->getDetail($orderRefundId)) { return $this->renderError('未找到该售后单记录'); } $detail->can_refund = false; if ($detail->type == 10 && $detail->finance_refund == 0 && $detail->is_user_send == 1 && $detail->status == 0 && $detail->is_receipt == 1) { // 退款类型为退货退款、财务退款状态为未退款、用户已发货 售后状态为进行中 商家已收货 $detail->can_refund = true; } // is_receipt 数据库存的是 0 代表 未确认收货 1 代表确认收货 2 代表仓库拒绝收货 //但是王珍珍说前端 is_receipt=2 要改前端以前的专员审核的逻辑,不能用这个字段,所以要加一个新 //的字段给她标识仓库拒绝收货,王珍珍强迫我要这样改的 联系电话 110 $detail['is_receipt_reject'] = $detail['is_receipt']==2?1:0; //1仓库拒绝收货 0 否 $detail['is_receipt'] = $detail['is_receipt']==2?0:$detail['is_receipt']; return $this->renderSuccess(compact('detail')); } /** * 专员审核前判断 * @param int $orderRefundId * @return array * @author: zjwhust * @Time: 2022/2/23 15:29 */ public function checkRefund(int $orderRefundId=0){ // 售后单详情 $model = OrderRefundModel::detail($orderRefundId); $orderGoodsDetail = OrderGoodsModel::get(['order_goods_id'=>$model['order_goods_id']]); if($orderGoodsDetail['full_send_activity_id']>0){//如果参与了满减送活动 $checkRefund = RefundService::checkRefund($model['order_id'],$model['order_goods_id'],$model['refund_money']); if($checkRefund){ return $this->renderSuccess(['code'=>1]); } } if($orderGoodsDetail['mj_send_activity_id']>0){//如果参与了满件送活动 $checkRefund = RefundService::checkMjRefund($model['order_id'],$model['order_goods_id'],$model['goods_num']); if($checkRefund){ return $this->renderSuccess(['code'=>2,'count'=>$checkRefund]); } } if($orderGoodsDetail['qc_send_activity_id']>0){//如果参与了全场满件送活动 $checkRefund = RefundService::checkQcMjRefund($model['order_id'],$model['order_goods_id'],$model['goods_num']); if($checkRefund){ return $this->renderSuccess(['code'=>3,'count'=>$checkRefund]); } } return $this->renderSuccess(['code'=>0]); } /** * 专员审核 * @param int $orderRefundId * @return array|bool */ public function audit(int $orderRefundId=0){ // 售后单详情 $model = OrderRefundModel::detail($orderRefundId); if(empty($model)){ return $this->renderError('找不到售后单'); } if($model['status'] == 20||$model['status'] == 30) { return $this->renderError("订单已完成或撤消,请不要操作"); } if($model['finance_refund'] == 10) { return $this->renderError("订单已经退款了,请不要操作"); } $res ='操作成功'; $postData = $this->postForm(''); $audit_status =$postData['audit_status']; if($model['type']==10){ if($audit_status==10){ $res = '已审核通过,请等待主管审核'; } if($audit_status==20){ $res = '已拒绝买家退货'; } } if($model['type']==30){ if($audit_status==10){ $res = '退款成功'; } if($audit_status==20){ $res = '已拒绝买家退款'; } } unset($postData['orderRefundId']); if ($model->audit($postData)) { return $this->renderSuccess($postData,$res); } return $this->renderError($model->getError() ?: '操作失败'); } /** * 主管审核 * @param int $orderRefundId * @return array|bool */ public function auditzg(int $orderRefundId) { // 售后单详情 $model = OrderRefundModel::detail($orderRefundId); if($model['status'] == 20||$model['status'] == 30) { return $this->renderError("订单已完成或撤消,请不要操作"); } if($model['finance_refund'] == 10) { return $this->renderError("订单已经退款了,请不要操作"); } // if($model['express_no']!=''){ // return $this->renderError("买家都已经发货了,请不要操作"); // } // 确认审核 $postData = $this->postForm(''); unset($postData['orderRefundId']); $res ='操作成功'; $audit_status =$postData['audit_status_zg']; if($audit_status==10){ $res = '已审核通过,等待买家退货'; } if($audit_status==20){ $res = '已拒绝买家退货'; } if ($model->auditzg($postData)) { return $this->renderSuccess($postData,$res); } return $this->renderError($model->getError() ?: '操作失败'); } //关闭售后单 public function close(int $orderRefundId){ // 售后单详情 $model = OrderRefundModel::detail($orderRefundId); if(empty($model)){ return $this->renderError('找不到售后单'); } $postData = $this->postForm(''); unset($postData['orderRefundId']); OrderGoodsModel::where('order_goods_id',$model['order_goods_id'])->update(['frozen_status'=>0]); // 关闭售后单 if ($model->close()) { return $this->renderSuccess(['status'=>40],'售后单已关闭'); } return $this->renderError($model->getError() ?: '操作失败'); } /** * 确认收货 * @param int $orderRefundId * @return array|bool */ public function receipt(int $orderRefundId) { // 售后单详情 $model = OrderRefundModel::detail($orderRefundId); if ($model['type'] != 10) { return $this->renderError("仅支持退货退款方式"); } if ($model['is_user_send'] != 1) { return $this->renderError("等待买家退货"); } if ($model['express_no'] == '') { return $this->renderError("等待买家填好快递单号"); } if ($model['audit_status_zg'] != 10||$model['audit_status']!=10) { return $this->renderError("审核都没通过就可以确认收货吗"); } if ($model['is_receipt'] == 1) { return $this->renderError("仓库已经收货了,请不要操作"); } if ($model['finance_refund'] == 10) { return $this->renderError("财务已完成退款,请不要操作"); } if($model['status'] == 20) { return $this->renderError("订单已完成,请不要操作"); } $postData = $this->postForm(''); // 确认收货并退款 unset($postData['orderRefundId']); if ($model->receipt($postData)) { return $this->renderSuccess('操作成功'); } return $this->renderError($model->getError() ?: '操作失败'); } /** * 财务退款 * @param int $orderRefundId * @return array|bool */ public function refund(int $orderRefundId) { // 售后单详情 $model = OrderRefundModel::detail($orderRefundId); if($model['delivery_type']==10){//门店退款不判断 if ($model['audit_status_zg'] != 10||$model['audit_status']!=10) { return $this->renderError("审核通过才能退款"); } if ($model['is_user_send'] != 1) { return $this->renderError("等待买家退货"); } if ($model['is_receipt'] != 1) { return $this->renderError("等待仓库收货"); } } if ($model['type'] != 10) { return $this->renderError("仅支持退货退款方式"); } if ($model['finance_refund'] == 10 || $model['status'] == 20) { return $this->renderError("已完成退款,请勿重复操作"); } // 退款 if ($model->refund()) { return $this->renderSuccess('操作成功'); } return $this->renderError($model->getError() ?: '操作失败'); } //协商历史 public function hisList(int $orderRefundId){ $list = RefundHis::where(['order_refund_id'=>$orderRefundId])->where('pf_operator',"<>","")->order(['id'=>'desc'])->select(); if($list){ foreach ($list as &$arr){ $arr['json'] = json_decode($arr['json'],true); } } return $this->renderSuccess(compact('list')); } }