123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297 |
- <?php
- // +----------------------------------------------------------------------
- // | 萤火商城系统 [ 致力于通过产品和服务,帮助商家高效化开拓市场 ]
- // +----------------------------------------------------------------------
- // | Copyright (c) 2017~2021 https://www.yiovo.com All rights reserved.
- // +----------------------------------------------------------------------
- // | Licensed 这不是一个自由软件,不允许对程序代码以任何形式任何目的的再发行
- // +----------------------------------------------------------------------
- // | Author: 萤火科技 <admin@yiovo.com>
- // +----------------------------------------------------------------------
- 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'));
- }
- }
|