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.','.$v2['dinner_type_name'].''.$v2['dinner_name'].'*'.$v2['num'];
                    if(count($all)>1 && $k2';
                    }
                }
                $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.','.$v3['dinner_type_name'].''.$v3['dinner_name'].'*'.$v3['num'];
                    if(count($refuse)>1 && $k3';
                    }
                }
                $lists[$k]['item_refuse'] = $item_refuse;
                $status_txt = '';
                if($v['status']==4){
                    $status_txt ='正在退款中
'.$v['sn'].'';
                }elseif ($v['status']==5){
                    $status_txt ='已退款
'.$v['sn'].'';
                }elseif ($v['status']==6){
                    $status_txt ='申请退款被拒
'.$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();
        }
    }
}