<?php namespace app\admin\controller; use think\App; use think\Db; use think\Exception; class DinnerRefuseOrder extends Auth { public function __construct(App $app = null) { parent::__construct($app); $this->table='dinner_order_refuse'; } public function index(){ if(request()->isAjax()){ //分页参数 $length = input('rows',10,'intval'); //每页条数 $page = input('page',1,'intval'); //第几页 $start = ($page - 1) * $length; //分页开始位置 //排序 $sortRow = input('sidx','id','trim'); //排序列 $sort = input('sord','desc','trim'); //排序方式 $order = $sortRow.' '.$sort; $title = input('sn','','trim'); if($title){ $map[] = ['b.sn','like','%'.$title.'%']; } $map[] = ['a.org_id','=',$this->orgId]; $map[] = ['b.state','<>',0]; $map= empty($map) ? true: $map; //数据查询 $lists = db($this->table) ->alias('a') ->join('dinner_order b','a.dinner_order_id=b.id') ->field('b.id,b.sn,b.price,b.name,b.mobile,b.address,b.remark,b.pay_time,a.create_time,a.op_time,a.status,a.id as refuse_id') ->where($map)->limit($start,$length)->order( ['a.id'=>'desc'] )->select(); foreach ($lists as $k=>$v){ $all = Db::name('dinner_order_item') ->alias('a') ->join('dinner b','a.dinner_id=b.id') ->join('dinner_type c','a.dinner_type_id=c.id') ->field('a.*,b.name as dinner_name,c.color,c.name as dinner_type_name') ->where('a.order_id',$v['id']) ->select(); $item = ''; foreach ($all as $k2=>$v2){ $ss = $k2+1; if($ss<10){ $ss= '0'.$ss; } $ur = url('dinner/detail').'?id='.$v2['dinner_id']; $item.=''.$ss.',<span class="label" style="border-radius:0rem !important;background-color: '.$v2['color'].';color: white">'.$v2['dinner_type_name'].'</span><a data-title="详情" href="javascript:;" url="'.$ur.'">'.$v2['dinner_name'].'*'.$v2['num']; if(count($all)>1 && $k2<count($all)){ $item.='<br/>'; } } $lists[$k]['item'] = $item; $refuse = Db::name('dinner_order_refuse_item') ->alias('a') ->join('dinner b','a.dinner_id=b.id') ->join('dinner_type c','a.dinner_type_id=c.id') ->field('a.*,b.name as dinner_name,c.color,c.name as dinner_type_name') ->where('a.order_refuse_id',$v['refuse_id']) ->select(); $item_refuse = ''; foreach ($refuse as $k3=>$v3){ $ss1 = $k3+1; if($ss1<10){ $ss1= '0'.$ss1; } $ur = url('dinner/detail').'?id='.$v3['dinner_id']; $item_refuse.=''.$ss1.',<span class="label" style="border-radius:0rem !important;background-color: '.$v3['color'].';color: white">'.$v3['dinner_type_name'].'</span><a onclick="layer_open(this,0)" data-title="详情" href="javascript:;" url="'.$ur.'">'.$v3['dinner_name'].'*'.$v3['num']; if(count($refuse)>1 && $k3<count($refuse)){ $item_refuse.='<br/>'; } } $lists[$k]['item_refuse'] = $item_refuse; $status_txt = ''; if($v['status']==4){ $status_txt ='<span class="label" style="border-radius:0rem !important;background-color: #d15b47;color: white">正在退款中</span><br/>'.$v['sn'].''; }elseif ($v['status']==5){ $status_txt ='<span class="label" style="border-radius:0rem !important;background-color: #82af6f;color: white">已退款</span><br/>'.$v['sn'].''; }elseif ($v['status']==6){ $status_txt ='<span class="label" style="border-radius:0rem !important;background-color: #3a87ad;color: white">申请退款被拒</span><br/>'.$v['sn'].''; } $lists[$k]['status_txt'] = $status_txt; $lists[$k]['op_time'] = $v['op_time']?$v['op_time']:''; } //数据返回 $totalCount = db($this->table) ->alias('a') ->join('dinner_order b','a.dinner_order_id=b.id') ->where($map)->count(); $totalPage = ceil($totalCount/$length); $result['page'] = $page; $result['total'] = $totalPage; $result['records'] = $totalCount; $result['rows'] = $lists; return json($result); }else{ return $this->fetch(); } } public function option($id=0){ if(request()->isPost()){ $res = Db::name($this->table) ->where('org_id',$this->orgId) ->where('id',$id) ->find(); if($res['status']!==4){ $this->error('当前订单已操作'); } $order = Db::name('dinner_order')->where('id',$res['dinner_order_id'])->find(); if(!$order){ $this->error('订单不存在'); } $status = input('status',''); $remark = input('refuse_remark',''); if(!in_array($status,[5,6])){ $this->error('参数错误'); } Db::startTrans(); try{ if($order['cate'] == 0){ $r = Db::name('dinner_order') ->where('id',$res['dinner_order_id']) ->update([ 'state'=>$status, 'update_time'=>getTime() ]); if(!$r){ \exception('操作失败'); } }else{ if($status==5){ $checkAll = Db::name('dinner_order_item') ->where('order_id',$res['dinner_order_id']) ->where('is_refuse',0) ->find(); if(!$checkAll){//已退款 Db::name('dinner_order') ->where('id',$res['dinner_order_id']) ->update([ 'state'=>5, 'update_time'=>getTime() ]); } } } $r = Db::name($this->table) ->where('id',$id) ->update([ 'status'=>$status, 'op_user_id'=>$this->userId, 'op_time'=>getTime(), 'refuse_remark'=>$remark ]); if(!$r){ \exception('操作失败'); } if($status==5&&$res['order_type']==1&&$res['is_replace']==0) { $checkAll = Db::name('dinner_order_item') ->where('order_id',$res['dinner_order_id']) ->where('is_refuse',0) ->find(); if($checkAll){//部分退款 Db::name('dinner_order') ->where('id',$res['dinner_order_id']) ->update([ 'state'=>7, 'update_time'=>getTime() ]); } if($res['refuse_price'] > 0){ $orderInfo = Db::name('dinner_order') ->where('id',$res['dinner_order_id']) ->find(); $config =get_pay_wechat($orderInfo['org_id']); if(empty($config['mch_id']) || empty($config['key'])){ \exception('微信商户信息未配置,请联系管理员'); } $app = \EasyWeChat\Factory::payment($config); $totalFee = intval(round($orderInfo['price']*100)); $refundFee = intval(round($res['refuse_price']*100)); $ret = $app->refund->byOutTradeNumber($orderInfo['sn'], 'T'.$orderInfo['sn'], $totalFee, $refundFee); if($ret['return_code'] != 'SUCCESS' || $ret['result_code'] != 'SUCCESS'){ trace(json_encode($ret),'error'); \exception('退款申请提交失败'); } } } if($status==6){ // 拒绝,返还 $all = Db::name('dinner_order_refuse_item')->where('order_refuse_id',$id)->select(); if($order['cate'] == 0){ foreach ($all as $k=>$v){ Db::name('dinner_order_item') ->where('dinner_id',$v['dinner_id']) ->where('dinner_type_id',$v['dinner_type_id']) ->where('is_refuse',1) ->setField('is_refuse',0); } }else{ foreach ($all as $k=>$v){ Db::name('dinner_order_item') ->where('dinner_id',$v['dinner_id']) ->where('dinner_type_id',$v['dinner_type_id']) ->where('order_id',$res['dinner_order_id']) ->where('day',$v['day']) ->where('is_refuse',1) ->update(['is_refuse'=>0]); } } } Db::commit(); $this->success('操作成功'); }catch (Exception $e){ Db::rollback(); $this->error($e->getMessage()); } }else{ $this->assign('id',$id); return $this->fetch(); } } }