<?php

namespace app\api\controller;

use app\common\controller\Api;
use app\common\library\Ems;
use app\common\library\Sms;
use fast\Random;
use think\Db;
use think\Validate;
use fast\Http;

/**
 * 个人中心
 */
class User extends Api
{
    protected $noNeedLogin = ['login','index','type','mine','car'];
    protected $noNeedRight = '*';
    protected $uid = '';

    public function _initialize()
    {
        parent::_initialize();
        $this->uid = $this->auth->getUserId();
    }

    /**
     * @ApiTitle    (小程序登录)
     * @ApiSummary  (小程序登录)
     * @ApiMethod   (POST)
     * @ApiRoute    (/api/user/login)
     * @ApiParams   (name="code", type="string", required=true, description="小程序code")
     * @ApiParams   (name="nickname", type="string", required=true, description="小程序昵称")
     * @ApiParams   (name="avatar", type="string", required=true, description="小程序头像")
     * @ApiReturn({
    "code": 1,
    "msg": "登录成功",
    "time": "1553839125",
    "data": {
    "token": "677afb39-1a4f-4492-84d3-0bcf32016b8a",//token
    "user_id": 27,//用户id
    "createtime": 1553839125,//登录时间
    "expiretime": 1556431125,//token失效时间
    "expires_in": 2592000//token失效剩余时间(单位s)
    "openid": 1485212522522//openid
    })
     */
    public function login(){
        if($this->request->isPost()){
            //小程序配置
            $config =  config('verify.raw');
            //小程序传递数据,包含昵称,头像,code
            $raw_data = $this->request->post();
            //验证表数据
            $rule = config('verify.user');
            $validate = new Validate($rule['rule'],$rule['msg']);
            if (!$validate->check($raw_data)) {
                $this->error($validate->getError());
            }
            $params = [
                'appid'      => $config['app_id'],
                'secret'     => $config['secret'],
                'js_code'    => $raw_data['code'],
                'grant_type' => 'authorization_code'
            ];
            $result = Http::sendRequest("https://api.weixin.qq.com/sns/jscode2session", $params, 'GET');
            if ($result['ret']) {
                $json = (array)json_decode($result['msg'], true);
                if (isset($json['openid'])) {
                    $result = [
                        'openid' => $json['openid'],
                        'nickname' => $raw_data['nickname'],
                        'avatar' => $raw_data['avatar']
                    ];
                    $ret = $this->auth->login($result);
                    if ($ret) {
                        $data = $this->auth->getUserinfo();
                        $this->success('登录成功', $data);
                    }else {
                        $this->error($this->auth->getError());
                    }
                } else {
                    $this->error("登录失败",$json);
                }
            }
        }else{
            $this->error('请求方式错误');
        }
    }

    /**
     * @ApiTitle    (首页视频、图片、精美大片入口)
     * @ApiSummary  (首页视频、图片、精美大片入口)
     * @ApiMethod   (POST)
     * @ApiRoute    (/api/user/index)
     * @ApiHeaders  (name=token, type=string, required=true, description="请求的Token")
     * @ApiReturn   ({
    'code':'1',
    'msg':'返回成功',
    "time": "1571492001",
        "data": {
        "video_thumbnail": http://mapwww.baidu.com 视频封面图地址
        "pic_thumbnail": http://mapwww.baidu.com 图片地址
        "wonderful_thumbnail": http://mapwww.baidu.com 精美大片地址
        }
    })
     */
    public function index()
    {
        $rule = config('verify.path');
        $data = Db::name('video')
            ->field('id,thumbnail')
            ->order('id desc')
            ->limit('1')
            ->find();
        $pic = Db::name('pic')
            ->field('id,thumbnail')
            ->order('id desc')
            ->limit('1')
            ->find();
        $wonderful = Db::name('wonderful')
            ->field('id,thumbnail')
            ->where('is_top',1)
            ->order('createtime desc,id desc')
            ->limit('1')
            ->select();
//        $res['wonderful_thumbnail'] = [];
//        foreach ($wonderful as &$v){
//            $v['thumbnail'] = $rule.$v['thumbnail'];
//            array_push($res['wonderful_thumbnail'],$v['thumbnail']);
//        }
        $this->auth;
        $res['video_thumbnail'] = $rule.$data['thumbnail'];
        $res['pic_thumbnail'] = $rule.$pic['thumbnail'];
        $res['wonderful_thumbnail'] = $rule.$wonderful['thumbnail'];
        $this->success('SUCCESS',$res);
    }

    /**
     * @ApiTitle    (地区分类)
     * @ApiSummary  (地区分类)
     * @ApiMethod   (POST)
     * @ApiRoute    (/api/user/type)
     * @ApiHeaders  (name=token, type=string, required=true, description="请求的Token")
     *
     * @ApiReturn({
    "code": 1,
    "msg": "成功",
    "time": "1571492001",
    "data": {
        "id": 4,//分类id
        "area_name": //分类名称
        "thumbnail": //图片
        }
    })
     */
    public function type()
    {
        $rule = config('verify.path');
        $data = Db::name('type')
            ->field('id,area_name,thumbnail')
            ->order('id desc')
            ->select();
        foreach ($data as &$v){
            $v['thumbnail'] = $rule.$v['thumbnail'];
        }
        $this->success('SUCCESS',$data);
    }

    /**
     * @ApiTitle    (搜索页)
     * @ApiSummary  (搜索页)
     * @ApiMethod   (POST)
     * @ApiRoute    (/api/user/search)
     * @ApiHeaders  (name=token, type=string, required=true, description="请求的Token")
     *
     * @ApiParams   (name="type_id", type="inter", required=false, description="视频/图片  (视频为1 图片为2 精美大片为3)")
     * @ApiParams   (name="keyword", type="string", required=true, description="关键字")
     * @ApiParams   (name="page", type="inter", required=false, description="当前页(默认1)")
     * @ApiParams   (name="pageNum", type="inter", required=false, description="每页显示数据个数(默认10)")
     * @ApiReturn({
        "code": 1,
        "msg": "成功",
        "time": "1571492001",
        "data": {
            "id": 4,//视频id/图片id,
            "thumbnail": //视频封面图地址/图片地址,
            "video": //视频路径/精美大片视频路径,
        }
    })
     */
    public function search()
    {
        $user_id = $this->uid;
        $page = $this->request->param('page',1,'intval');
        $pageNum = $this->request->param('pageNum',10,'intval');
        $rule = config('verify.path');
        $type_id = $this->request->post('type_id');
        if(empty($type_id)){
            $this->error(['code'=>2,'msg'=>'缺少必要参数']);
        }
        $keyword = $this->request->post('keyword');
        if(!empty($keyword)){
            $param['user_id'] = $user_id;
            $param['title'] = $keyword;
            Db::name('history')
                ->insert($param);
        }
        if(!empty($keyword)){
            if($type_id == 1){
                $data = Db::name('video')
                    ->where('keyword','like',"%$keyword%")
                    ->whereOr('title','like',"%$keyword%")
                    ->order('id desc')
                    ->page($page,$pageNum)
                    ->select();
                foreach ($data as &$v){
                    $v['thumbnail'] = $rule.$v['thumbnail'];
                    $v['video'] = $rule.$v['video'];
                }
                $this->success('SUCCESS',$data);
        }elseif($type_id == 2){
                $data = Db::name('pic')
                    ->where('keyword','like',"%$keyword%")
                    ->whereOr('title','like',"%$keyword%")
                    ->order('id desc')
                    ->page($page,$pageNum)
                    ->select();
                foreach ($data as &$v){
                    $v['thumbnail'] = $rule.$v['thumbnail'];
                }
                $this->success('SUCCESS',$data);
            }else{
                $data = Db::name('wonderful')
                    ->where('title','like',"%$keyword%")
                    ->order('id desc')
                    ->page($page,$pageNum)
                    ->select();
                foreach ($data as &$v){
                    $v['thumbnail'] = $rule.$v['thumbnail'];
                    $v['video'] = $rule.$v['video'];
                }
                $this->success('SUCCESS',$data);
            }
        }else{
            $this->error(['code'=>2,'msg'=>'请输入关键字']);
        }

    }

    /**
     * @ApiTitle    (图片列表)
     * @ApiSummary  (图片列表)
     * @ApiMethod   (POST)
     * @ApiRoute    (/api/user/pic)
     * @ApiHeaders  (name=token, type=string, required=true, description="请求的Token")
     *
     * @ApiParams   (name="type_id", type="inter", required=false, description="地区ID")
     * @ApiParams   (name="page", type="inter", required=false, description="当前页(默认1)")
     * @ApiParams   (name="pageNum", type="inter", required=false, description="每页显示数据个数(默认10)")
     * @ApiReturn({
    "code": 1,
    "msg": "成功",
    "time": "1571492001",
    "data": {
        "id": 4,//图片id,
        "thumbnail": //缩略图,
    }
    })
 */
    public function pic()
    {
        $rule = config('verify.path');
        $page = $this->request->param('page',1,'intval');
        $pageNum = $this->request->param('pageNum',10,'intval');
        $type_id = $this->request->post('type_id');
        if(empty($type_id)){
            $data = Db::name('pic')
                ->field('id,thumbnail,title')
                ->order('id desc')
                ->page($page,$pageNum)
                ->select();
            foreach ($data as &$v){
                $v['thumbnail'] = $rule.$v['thumbnail'];
            }
            $this->success('SUCCESS',$data);
        }else{
            $type = ','.$type_id.',';
            $where['type_ids'] = ['like',"%$type%"];
            $data = Db::name('pic')
                ->where($where)
                ->field('id,thumbnail,title')
                ->order('id desc')
                ->page($page,$pageNum)
                ->select();
            foreach ($data as &$v){
                $v['thumbnail'] = $rule.$v['thumbnail'];
            }
            $this->success('SUCCESS',$data);
        }
    }

    /**
     * @ApiTitle    (分类下的图片视频)
     * @ApiSummary  (分类下的图片视频)
     * @ApiMethod   (POST)
     * @ApiRoute    (/api/user/pic_video)
     * @ApiHeaders  (name=token, type=string, required=true, description="请求的Token")
     *
     * @ApiParams   (name="type_id", type="inter", required=true, description="地区ID")
     * @ApiParams   (name="type", type="inter", required=false, description="类型ID(图片为1 视频为2)")
     * @ApiParams   (name="page", type="inter", required=false, description="当前页(默认1)")
     * @ApiParams   (name="pageNum", type="inter", required=false, description="每页显示数据个数(默认10)")
     * @ApiReturn({
        "code": 1,
        "msg": "成功",
        "time": "1571492001",
        "data": {
            "id": 4,//图片id,
            "thumbnail": //缩略图,
        }
        })
     */
    public function pic_video()
    {
        $rule = config('verify.path');
        $page = $this->request->param('page',1,'intval');
        $pageNum = $this->request->param('pageNum',10,'intval');
        $type_id = $this->request->post('type_id');
        $type = $this->request->post('type');
        if($type == 1){
            $type = ','.$type_id.',';
            $where['type_ids'] = ['like',"%$type%"];
            $data = Db::name('pic')
                ->where($where)
                ->field('id,thumbnail,title')
                ->order('id desc')
                ->page($page,$pageNum)
                ->select();
            foreach ($data as &$v){
                $v['thumbnail'] = $rule.$v['thumbnail'];
            }
            $this->success('SUCCESS',$data);
        }else{
            $type = ','.$type_id.',';
            $where['type_ids'] = ['like',"%$type%"];
            $data = Db::name('video')
                ->where($where)
                ->field('id,thumbnail,video,title')
                ->order('id desc')
                ->page($page,$pageNum)
                ->select();
            foreach ($data as &$v){
                $v['thumbnail'] = $rule.$v['thumbnail'];
                $v['video'] = $rule.$v['video'];
            }
            $this->success('SUCCESS',$data);
        }

    }

    /**
     * @ApiTitle    (视频列表)
     * @ApiSummary  (视频列表)
     * @ApiMethod   (POST)
     * @ApiRoute    (/api/user/video)
     * @ApiHeaders  (name=token, type=string, required=true, description="请求的Token")
     * @ApiParams   (name="type_id", type="inter", required=false, description="地区ID")
     * @ApiParams   (name="page", type="inter", required=false, description="当前页(默认1)")
     * @ApiParams   (name="pageNum", type="inter", required=false, description="每页显示数据个数(默认10)")
     * @ApiReturn({
        "code": 1,
        "msg": "成功",
        "time": "1571492001",
        "data": {
            "id": //图片id,
            "thumbnail": //视频封面,
            "video"://视频地址
        }
        })
     */
    public function video()
    {
        $rule = config('verify.path');
        $page = $this->request->param('page',1,'intval');
        $pageNum = $this->request->param('pageNum',10,'intval');
        $type_id = $this->request->post('type_id');
        if(empty($type_id)){
            $data = Db::name('video')
                ->field('id,thumbnail,video')
                ->order('id desc')
                ->page($page,$pageNum)
                ->select();
            foreach ($data as &$v){
                $v['thumbnail'] = $rule.$v['thumbnail'];
                $v['video'] = $rule.$v['video'];
            }
            $this->success('SUCCESS',$data);
        }else{
            $type = ','.$type_id.',';
            $where['type_ids'] = ['like',"%$type%"];
            $data = Db::name('video')
                ->where($where)
                ->field('id,thumbnail,video')
                ->order('id desc')
                ->page($page,$pageNum)
                ->select();
            foreach ($data as &$v){
                $v['thumbnail'] = $rule.$v['thumbnail'];
                $v['video'] = $rule.$v['video'];
            }
            $this->success('SUCCESS',$data);
        }
    }

    /**
     * @ApiTitle    (精美大片列表)
     * @ApiSummary  (精美大片列表)
     * @ApiMethod   (POST)
     * @ApiRoute    (/api/user/won)
     * @ApiHeaders  (name=token, type=string, required=true, description="请求的Token")
     *
     * @ApiParams   (name="page", type="inter", required=false, description="当前页(默认1)")
     * @ApiParams   (name="pageNum", type="inter", required=false, description="每页显示数据个数(默认10)")
     * @ApiReturn({
    "code": 1,
    "msg": "成功",
    "time": "1571492001",
    "data": {
    "id": //图片id,
    "thumbnail": //视频封面,
    "video"://视频地址
    }
    })
     */
    public function won()
    {
        $rule = config('verify.path');
        $page = $this->request->param('page',1,'intval');
        $pageNum = $this->request->param('pageNum',10,'intval');
        $data = Db::name('wonderful')
            ->field('id,thumbnail,video')
            ->order('id desc')
            ->page($page,$pageNum)
            ->select();
        foreach ($data as &$v){
            $v['thumbnail'] = $rule.$v['thumbnail'];
            $v['video'] = $rule.$v['video'];
        }
        $this->success('SUCCESS',$data);

    }

    /**
     * @ApiTitle    (图片详情)
     * @ApiSummary  (图片详情)
     * @ApiMethod   (POST)
     * @ApiRoute    (/api/user/picdetail)
     * @ApiHeaders  (name=token, type=string, required=true, description="请求的Token")
     *
     * @ApiParams   (name="pic_id", type="inter", required=true, description="图片ID")
     * @ApiReturn({
        "code": 1,
        "msg": "成功",
        "time": "1571492001",
        "data": {
            "id": 4,//图片id,
            "title"://标题
            "thumbnail": //缩略图,
            "water_url": //小样带水印的图片地址,
           "price"://正常价格,
           "vip_price"://vip价格,
           "content"://图片介绍,
           "is_vip"://是否为会员(0否 1是)

        }
    })
     */
    public function picdetail()
    {
        $uid = $this->uid;
        $rule = config('verify.path');
        $res = Db::name('user')
            ->where('id',$uid)
            ->field('id,is_vip')
            ->find();
        if($res['is_vip'] == 0){
            $pic_id = $this->request->post('pic_id');
            if(empty($pic_id)){
                $this->error(['code'=>2,'msg'=>'缺少必要参数']);
            }
            $data = Db::name('pic')
                ->field('id,title,thumbnail,price,water_url,url,code,content,click_num')
                ->where('id',$pic_id)
                ->find();
            if(empty($data)){
                $this->error(['code'=>2,'msg'=>'参数错误']);
            }
            $click_num = $data['click_num'] + 1;
            Db::name('pic')->where('id',$pic_id)->update(['click_num'=>$click_num]);
            $data['water_url'] = $rule.$data['water_url'];
            $data['vip_price'] = $data['price'] * 0.75;
            $data['thumbnail'] = $rule.$data['thumbnail'];
            $data['content'] = strip_tags($data['content']);
            $data['is_vip'] = 0;
            $this->success('SUCCESS',$data);
        }elseif($res['is_vip'] == 1){
            $pic_id = $this->request->post('pic_id');
            if(empty($pic_id)){
                $this->error(['code'=>2,'msg'=>'缺少必要参数']);
            }
            $data = Db::name('pic')
                ->field('id,title,thumbnail,price,water_url,url,code,content,click_num')
                ->where('id',$pic_id)
                ->find();
            if(empty($data)){
                $this->error(['code'=>2,'msg'=>'参数错误']);
            }
            $click_num = $data['click_num'] + 1;
            Db::name('pic')->where('id',$pic_id)->update(['click_num'=>$click_num]);
            $data['is_vip'] = 1;
            $data['water_url'] = $rule.$data['water_url'];
            $data['vip_price'] = $data['price'] * 0.75;
            $data['thumbnail'] = $rule.$data['thumbnail'];
            $data['content'] = strip_tags($data['content']);
            $this->success('SUCCESS',$data);
        }
    }

    /**
     * @ApiTitle    (视频详情)
     * @ApiSummary  (视频详情)
     * @ApiMethod   (POST)
     * @ApiRoute    (/api/user/videodetail)
     * @ApiHeaders  (name=token, type=string, required=true, description="请求的Token")
     *
     * @ApiParams   (name="video_id", type="inter", required=true, description="视频ID")
     * @ApiReturn({
        "code": 1,
        "msg": "成功",
        "time": "1571492001",
        "data": {
            "id": 4,//视频id,
            "title"://标题
            "thumbnail": //视频封面图,
            "video": //2K视频地址,
            "water_url"://小样视频网址
            "price"://2K价格,
            "vip_price"://2Kvip价格,
            "four_price"://4K价格,
            "four_vipprice"://4Kvip价格,
            "eight_price"://8K价格,
            "eight_vipprice"://8Kvip价格,
            "content"://图片介绍,
            "is_vip"://是否为会员(0否 1是)
        }
        })
     */
    public function videodetail()
    {
        $uid = $this->uid;
        $rule = config('verify.path');
        $res = Db::name('user')
            ->where('id',$uid)
            ->field('id,is_vip')
            ->find();
        if($res['is_vip'] == 0){
            $pic_id = $this->request->post('video_id');
            if(empty($pic_id)){
                $this->error(['code'=>2,'msg'=>'缺少必要参数']);
            }
            $data = Db::name('video')
                ->field('id,click_num,title,thumbnail,video,price,four_price,eight_price,water_url,two_url,four_url,two_code,four_code,eight_code,eight_url,content')
                ->where('id',$pic_id)
                ->find();
            if(empty($data)){
                $this->error(['code'=>2,'msg'=>'参数错误']);
            }
            $click_num = $data['click_num']+1;
            Db::name('video')->where('id',$pic_id)->update(['click_num'=>$click_num]);
            $data['vip_price'] = $data['price']*0.75;
            $data['four_vipprice'] = $data['four_price']*0.75;
            $data['eight_vipprice'] = $data['eight_price']*0.75;
            $data['thumbnail'] = $rule.$data['thumbnail'];
            $data['video'] = $rule.$data['video'];
            $data['content'] = strip_tags($data['content']);
            $data['is_vip'] = 0;
            $this->success('SUCCESS',$data);
        }elseif($res['is_vip'] == 1){
            $pic_id = $this->request->post('video_id');
            if(empty($pic_id)){
                $this->error(['code'=>2,'msg'=>'缺少必要参数']);
            }
            $data = Db::name('video')
                ->field('id,click_num,title,thumbnail,video,price,four_price,eight_price,water_url,two_url,two_code,four_code,eight_code,four_url,eight_url,content')
                ->where('id',$pic_id)
                ->find();
            if(empty($data)){
                $this->error(['code'=>2,'msg'=>'参数错误']);
            }
            $click_num = $data['click_num']+1;
            Db::name('video')->where('id',$pic_id)->update(['click_num'=>$click_num]);
            $data['is_vip'] = 1;
            $data['vip_price'] = $data['price']*0.75;
            $data['four_vipprice'] = $data['four_price']*0.75;
            $data['eight_vipprice'] = $data['eight_price']*0.75;
            $data['thumbnail'] = $rule.$data['thumbnail'];
            $data['video'] = $rule.$data['video'];
            $data['content'] = strip_tags($data['content']);
            $this->success('SUCCESS',$data);
        }
    }

    /**
     * @ApiTitle    (历史记录)
     * @ApiSummary  (历史记录)
     * @ApiMethod   (POST)
     * @ApiRoute    (/api/user/history)
     * @ApiHeaders  (name=token, type=string, required=true, description="请求的Token")
     *
     * @ApiReturn({
    "code": 1,
    "msg": "成功",
    "time": "1571492001",
    "data": {
        "id": 4,//记录id,
        "title"://搜索的内容
    }
    })
     */
    public function history()
    {
        $user_id = $this->uid;
        $data = Db::name('history')
            ->where('user_id',$user_id)
            ->order('id desc')
            ->column('title');
        $res = array_unique($data);
        $res = array_slice($res,0,10);
        $this->success('SUCCESS',$res);
    }

    /**
     * @ApiTitle    (我的)
     * @ApiSummary  (我的)
     * @ApiMethod   (POST)
     * @ApiRoute    (/api/user/mine)
     * @ApiHeaders  (name=token, type=string, required=true, description="请求的Token")
     *
     * @ApiReturn({
        "code": 1,
        "msg": "成功",
        "time": "1571492001",
        "data": {
            "id":       //用户ID
            "nickname": //昵称,
            "avatar":   //头像,
            "money" :   //余额
            "is_vip":   //是否为会员(0否 1是)
        }
        })
     */
    public function mine()
    {
        $user_id = $this->uid;
        $data = Db::name('user')
            ->where('id',$user_id)
            ->field('id,nickname,avatar,money,is_vip')
            ->find();
        $this->success('SUCCESS',$data);
    }

    /**
     * @ApiTitle    (创建充值订单)
     * @ApiSummary  (创建充值订单)
     * @ApiMethod   (POST)
     * @ApiRoute    (/api/user/toporder)
     * @ApiHeaders  (name=token, type=string, required=true, description="请求的Token")
     *
     * @ApiParams   (name="money", type="float", required=true, description="充值金额")
     *
     * @ApiReturn({
        "code": 1,
        "msg": "成功",
        "time": "1571492001",
        "data": {
            "order_id"://订单ID
        }
        })
     */
    public function toporder()
    {
        $param['user_id'] = $this->uid;
        $param['money'] = $this->request->post('money');
        if(empty( $param['money'])){
            $this->error(['code'=>2,'msg'=>'缺少必要参数']);
        }elseif ( $param['money']<=0){
            $this->error(['code'=>3,'msg'=>'非法操作']);
        }else{
            $param['createtime'] = time();
            $param['num'] = date('Ymd').substr(implode(NULL, array_map('ord', str_split(substr(uniqid(), 7, 13), 1))), 0, 8);
            $data = Db::name('toporder')
                ->insertGetId($param);
            if(empty($data)){
                $this->error(['code'=>2,'msg'=>'sql执行失败']);
            }
            $this->success('SUCCESS',['order_id'=>$data]);
        }

    }

    /**
     * @ApiTitle    (创建开通会员订单)
     * @ApiSummary  (创建开通会员订单)
     * @ApiMethod   (POST)
     * @ApiRoute    (/api/user/viporder)
     * @ApiHeaders  (name=token, type=string, required=true, description="请求的Token")
     *
     * @ApiParams   (name="total", type="float", required=true, description="金额")
     *
     * @ApiReturn({
        "code": 1,
        "msg": "成功",
        "time": "1571492001",
        "data": {
            "order_id"://订单ID
        }
        })
     */
    public function viporder()
    {
        $param['user_id'] = $this->uid;
        $param['total'] = $this->request->post('total');
        if(empty( $param['total'])){
            $this->error(['code'=>2,'msg'=>'缺少必要参数']);
        }elseif ( $param['total']<=8000){
            $this->error(['code'=>3,'msg'=>'开通会员至少需要8000元哦']);
        }else{
            $param['createtime'] = time();
            $param['num'] = date('Ymd').substr(implode(NULL, array_map('ord', str_split(substr(uniqid(), 7, 13), 1))), 0, 8);
            $data = Db::name('viporder')
                ->insertGetId($param);
            if(empty($data)){
                $this->error(['code'=>2,'msg'=>'sql执行失败']);
            }
            $this->success('SUCCESS',['order_id'=>$data]);
        }

    }

    /**
     * @ApiTitle    (会员介绍)
     * @ApiSummary  (会员介绍)
     * @ApiMethod   (POST)
     * @ApiRoute    (/api/user/vipdesc)
     * @ApiHeaders  (name=token, type=string, required=true, description="请求的Token")
     *
     * @ApiReturn({
    "code": 1,
    "msg": "成功",
    "time": "1571492001",
    "data": {
        "content":       //会员介绍内容
    }
    })
     */
    public function vipdesc()
    {
        $data = Db::name('vip')
            ->field('content')
            ->where('id',2)
            ->find();
        $this->success('SUCCESS',$data);
    }

    /**
     * @ApiTitle    (会员须知)
     * @ApiSummary  (会员须知)
     * @ApiMethod   (POST)
     * @ApiRoute    (/api/user/vipdetail)
     * @ApiHeaders  (name=token, type=string, required=true, description="请求的Token")
     *
     * @ApiReturn({
    "code": 1,
    "msg": "成功",
    "time": "1571492001",
    "data": {
    "text":       //会员须知内容
    }
    })
     */
    public function vipdetail()
    {
        $data = Db::name('vip')
            ->field('desc')
            ->where('id',2)
            ->find();

        $this->success('SUCCESS',$data);
    }

    /**
     * @ApiTitle    (购物车列表)
     * @ApiSummary  (购物车列表)
     * @ApiMethod   (POST)
     * @ApiRoute    (/api/user/car)
     * @ApiHeaders  (name=token, type=string, required=true, description="请求的Token")
     *
     * @ApiReturn({
    "code": 1,
    "msg": "成功",
    "time": "1571492001",
    "data": {
        "id"://购物车ID
          "user_id"://用户ID
          "pic_id"://图片的ID
          "video_id"://视频的ID
          "pic":[
                "id"://图片ID
               "title"://图片标题
               "thumbnail"://缩略图
               "url"://高清百度云盘地址
               "price"://普通价格
               "vip_price"://vip价格
          ],
          "video":[
               "id"://视频ID
               "title"://视频标题
               "thumbnail"://视频封面图片
               "video"://视频地址
               "two_url"://2K视频云盘地址
               "four_url"://4k视频云盘地址
               "eight_url"://8k视频云盘地址
               "price"://2k视频原价格
               "four_price"://4k视频原价格
               "eight_price"://8k视频原价格
               "vip_price"://2k会员价格
               "four_vipprice"://4k会员价格
               "eight_vipprice"://8k会员价格
          ]
    }
    })
     */
    public function car()
    {
        $user_id = $this->uid;
        $rule = config('verify.path');
        //查询该用户是否为会员
        $res = Db::name('user')
            ->where('id',$user_id)
            ->field('id,is_vip')
            ->find();
        //判断
        if($res['is_vip'] == 0){
            //不是会员的情况
            $data = Db::name('car')
                ->where('user_id',$user_id)
                ->field('id,user_id,pic_id,video_id')
                ->order('createtime desc,id desc')
                ->select();
            foreach ($data as &$v) {
                if(!empty($v['pic_id'])){
                    $v['pic_id'] = Db::name('pic')->field('id,title,thumbnail,url,price')->where('id',$v['pic_id'])->find();
                    $v['pic_id']['thumbnail'] = $rule.$v['pic_id']['thumbnail'];
                }
                if(!empty($v['video_id'])){
                    $v['video_id'] = Db::name('video')->field('keyword,type_ids,content,is_recommend,buy_num,click_num,createtime,updatetime',true)->where('id',$v['video_id'])->find();
                    $v['video_id']['thumbnail'] = $rule.$v['video_id']['thumbnail'];
                    $v['video_id']['video'] = $rule.$v['video_id']['video'];
                }
            }
            $this->success('SUCCESS',$data);
        }else{
            //是的情况
            $data = Db::name('car')
                ->where('user_id',$user_id)
                ->field('id,user_id,pic_id,video_id')
                ->order('createtime desc,id desc')
                ->select();
            foreach ($data as &$v){
                if(!empty($v['pic_id'])){
                    $v['pic_id'] = Db::name('pic')->field('id,title,thumbnail,url,price')->where('id',$v['pic_id'])->find();
                    $v['pic_id']['thumbnail'] = $rule.$v['pic_id']['thumbnail'];
                    $v['pic_id']['vipprice'] = $v['pic_id']['price']*0.75;
                }
                if(!empty($v['video_id'])){
                    $v['video_id'] = Db::name('video')->field('keyword,type_ids,content,is_recommend,buy_num,click_num,createtime,updatetime',true)->where('id',$v['video_id'])->find();
                    $v['video_id']['thumbnail'] = $rule.$v['video_id']['thumbnail'];
                    $v['video_id']['video'] = $rule.$v['video_id']['video'];
                    $v['video_id']['vipprice'] = $v['video_id']['price'] * 0.75;
                    $v['video_id']['four_vipprice'] = $v['video_id']['four_price'] * 0.75;
                    $v['video_id']['eight_vipprice'] = $v['video_id']['eight_price'] * 0.75;
                }
            }
            $this->success('SUCCESS',$data);
        }
    }

    /**
     * @ApiTitle    (加入购物车)
     * @ApiSummary  (加入购物车)
     * @ApiMethod   (POST)
     * @ApiRoute    (/api/user/addcar)
     * @ApiHeaders  (name=token, type=string, required=true, description="请求的Token")
     *
     * @ApiParams   (name="pic_id", type="inter", required=false, description="图片ID")
     * @ApiParams   (name="video_id", type="inter", required=false, description="视频ID")
     *
     *
     * @ApiReturn({
    "code": 1,
    "msg": "成功",
    "time": "1571492001",
    })
     */
    public function addcar()
    {
        $user_id = $this->uid;
        $pic_id = $this->request->param('pic_id');
        $video_id = $this->request->param('video_id');
        if(empty($pic_id) && empty($video_id)){
            $this->error(['code'=>2,'msg'=>'缺少必要参数']);
        }
        if(empty($pic_id)){
            //接受视频ID并判断
            $data = Db::name('car')
                ->field('id')
                ->where('user_id',$user_id)
                ->where('video_id',$video_id)
                ->find();
            if(!empty($data)){
                $this->error(['code'=>2,'msg'=>'您已经添加过了']);
            }
            $param['video_id'] = $video_id;
            $param['createtime'] = time();
            $param['user_id'] = $user_id;
            $data = Db::name('car')
                ->insertGetId($param);
            if($data){
                $this->success('SUCCESS');
            }else{
                $this->error(['code'=>3,'msg'=>'加入购物车失败']);
            }
        }elseif (empty($video_id)){
            $data = Db::name('car')
                ->field('id')
                ->where('user_id',$user_id)
                ->where('pic_id',$pic_id)
                ->find();
            if(!empty($data)){
                $this->error(['code'=>2,'msg'=>'您已经添加过了']);
            }
            $param['pic_id'] = $pic_id;
            $param['createtime'] = time();
            $param['user_id'] = $user_id;
            $data = Db::name('car')
                ->insertGetId($param);
            if($data){
                $this->success('SUCCESS');
            }else{
                $this->error(['code'=>3,'msg'=>'加入购物车失败']);
            }
        }else{
            $this->error(['code'=>2,'msg'=>'缺少必要参数']);
        }
    }

    /**
     * @ApiTitle    (删除购物车商品)
     * @ApiSummary  (删除购物车商品)
     * @ApiMethod   (POST)
     * @ApiRoute    (/api/user/delcar)
     * @ApiHeaders  (name=token, type=string, required=true, description="请求的Token")
     *
     * @ApiParams   (name="ids[]", type="inter", required=true, description="购物车ID")
     *
     *
     * @ApiReturn({
    "code": 1,
    "msg": "成功",
    "time": "1571492001",
    })
     */
    public function delcar()
    {
        $user_id = $this->uid;
        $ids = $this->request->param('ids');
        if(empty($ids)){
            $this->error(['code'=>2,'msg'=>'缺少必要参数']);
        }
        $data = Db::name('car')
            ->where('user_id',$user_id)
            ->whereIn('id',$ids)
            ->delete();
        if($data){
            $this->success('SUCCESS','删除成功');
        }else{
            $this->error(['code'=>2,'msg'=>'sql运行失败']);
        }


    }

    /**
     * @ApiTitle    (创建图片订单)
     * @ApiSummary  (创建图片订单)
     * @ApiMethod   (POST)
     * @ApiRoute    (/api/user/picorder)
     * @ApiHeaders  (name=token, type=string, required=true, description="请求的Token")
     *
     * @ApiParams   (name="pic_id", type="inter", required=true, description="图片ID")
     * @ApiParams   (name="total", type="float", required=true, description="价格")
     *
     * @ApiReturn({
    "code": 1,
    "msg": "成功",
    "time": "1571492001",
    "data": {
        "order_id"://订单ID
    }
    })
     */
    public function picorder()
    {
        $param['user_id'] = $this->uid;
        $param['pic_id'] = $this->request->post('pic_id');
        if(empty($param['pic_id'])){
            $this->error(['code'=>2,'msg'=>'缺少必要参数']);
        }
        $param['total'] = $this->request->post('total');
        if(empty( $param['total'])){
            $this->error(['code'=>2,'msg'=>'缺少必要参数']);
        }elseif ( $param['total']<=0){
            $this->error(['code'=>3,'msg'=>'非法操作']);
        }else{
            $where['status'] = 2;
            $where['user_id'] = $param['user_id'];
            $arr = Db::name('order')
                ->field('id,pic_id')
                ->where($where)
                ->select();
            foreach ($arr as &$v){
                $v['pic_id'] = explode(',',$v['pic_id']);
                if(in_array($param['pic_id'],$v['pic_id'])){
                    $this->error(['code'=>2,'msg'=>'该图片已经购买过了']);
                }
            }
            $param['createtime'] = time();
            $param['num'] = date('Ymd').substr(implode(NULL, array_map('ord', str_split(substr(uniqid(), 7, 13), 1))), 0, 8);
            $data = Db::name('order')
                ->insertGetId($param);
            if(empty($data)){
                $this->error(['code'=>2,'msg'=>'sql执行失败']);
            }
            $this->success('SUCCESS',['order_id'=>$data]);
        }
    }

    /**
     * @ApiTitle    (创建视频订单)
     * @ApiSummary  (创建视频订单)
     * @ApiMethod   (POST)
     * @ApiRoute    (/api/user/v_order)
     * @ApiHeaders  (name=token, type=string, required=true, description="请求的Token")
     *
     * @ApiParams   (name="video_id", type="inter", required=true, description="视频ID")
     * @ApiParams   (name="video_attr", type="inter", required=true, description="视频品质属性")
     * @ApiParams   (name="total", type="float", required=true, description="价格")
     *
     * @ApiReturn({
        "code": 1,
        "msg": "成功",
        "time": "1571492001",
        "data": {
            "order_id"://订单ID
        }
        })
     */
    public function v_order()
    {
        $param['user_id'] = $this->uid;
        //接受视频ID并判断
        $video_id = $this->request->post('video_id');
        if(empty($video_id)){
            $this->error(['code'=>2,'msg'=>'缺少必要参数']);
        }
        //接受视频品质属性并判断
        $video_attr = $this->request->post('video_attr');
        if(empty($video_attr)){
            $this->error(['code'=>2,'msg'=>'缺少必要参数']);
        }
        //接受视频价格并判断
        $param['total'] = $this->request->post('total');
        if(empty( $param['total'])){
            $this->error(['code'=>2,'msg'=>'缺少必要参数']);
        }elseif ( $param['total']<=0){
            $this->error(['code'=>3,'msg'=>'非法操作']);
        }else{
            $a = [];
            $a[0]['id'] = $video_id;
            $a[0]['attr'] = $video_attr;
            $where['user_id'] = ['eq',$param['user_id']];
            $where['status'] = ['eq',2];

            $res = Db::name('order')
                ->field('video_id')
                ->where($where)
                ->select();
            foreach ($res as &$v){
                $v['video_id'] = unserialize($v['video_id']);
                if(!empty($v['video_id'])){
                    foreach ($v['video_id'] as $v1){
                        if($v1['id'] == $video_id && $v1['attr'] == $video_attr){
                            $this->error(['code'=>2,'msg'=>'该属性的视频已经购买过了','video_id'=>$v1['id'],'attr'=>$v1['attr']]);
                        }
                    }
                }
            }
            $param['video_id'] = serialize($a);
            $param['createtime'] = time();
            $param['num'] = date('Ymd').substr(implode(NULL, array_map('ord', str_split(substr(uniqid(), 7, 13), 1))), 0, 8);
            $data = Db::name('order')
                ->insertGetId($param);
            if(empty($data)){
                $this->error(['code'=>2,'msg'=>'sql执行失败']);
            }
            $this->success('SUCCESS',['order_id'=>$data,'video_id'=>$video_id,'attr'=>$video_attr]);
        }
    }

    /**
     * @ApiTitle    (创建组合订单)
     * @ApiSummary  (创建组合订单)
     * @ApiMethod   (POST)
     * @ApiRoute    (/api/user/orders)
     * @ApiHeaders  (name=token, type=string, required=true, description="请求的Token")
     *
     * @ApiParams   (name="video_id", type="string", required=true, description="视频ID(多个以逗号隔开)")
     * @ApiParams   (name="video_attr", type="string", required=true, description="视频品质属性(多个以逗号隔开)")
     * @ApiParams   (name="pic_id", type="string", required=true, description="图片ID")
     * @ApiParams   (name="total", type="float", required=true, description="总价格")
     *
     * @ApiReturn({
        "code": 1,
        "msg": "成功",
        "time": "1571492001",
        "data": {
            "order_id"://订单ID
        }
        })
     */
    public function orders()
    {
        $param['user_id'] = $this->uid;

        //接收视频ID加视频属性
        $video_ids = $this->request->post('video_id');
        $video_attrs = $this->request->post('video_attr');
        $video_id = explode(',',$video_ids);
        $video_attr = explode(',',$video_attrs);
        $key = ['id','attr'];

        //接收图片的ID
        $pic_id = explode(',',$this->request->post('pic_id'));

        $where['user_id'] = ['eq',$param['user_id']];
        $where['status'] = ['eq',2];

        if(!empty($video_ids) && !empty($video_attrs)){
            $a = $this->array_merge_more($key,$video_id,$video_attr);
            //查询视频ID
            $res = Db::name('order')
                ->field('video_id')
                ->where($where)
                ->select();
            foreach ($res as &$v){
                $v['video_id'] = unserialize($v['video_id']);
                if(!empty($v['video_id']) && !empty($a)){
                    foreach ($v['video_id'] as $v1){
                        foreach ($a as &$v2){
                            if($v1['id'] == $v2['id'] && $v1['attr'] == $v2['attr']){
                                $this->error(['code'=>2,'msg'=>'该属性的视频已经购买过了','video_id'=>$v2['id']]);
                            }
                        }
                    }
                }
            }
            $param['video_id'] = serialize($a);
        }else{
            //查询图片ID
            $arr = Db::name('order')
                ->field('pic_id')
                ->where($where)
                ->select();
            foreach ($arr as &$v){
                $v['pic_id'] = explode(',',$v['pic_id']);
                if(!empty($v['pic_id'])){
                    foreach ($pic_id as $v3){
                        if(in_array($v3,$v['pic_id'])){
                            $this->error(['code'=>2,'msg'=>'该图片已经购买过了','pic_id'=>$v3]);
                        }
                    }
                }
            }
        }
        $param['pic_id'] = $this->request->post('pic_id');
        $param['total'] = $this->request->post('total');
        if(empty( $param['total'])){
            $this->error(['code'=>2,'msg'=>'缺少必要参数']);
        }elseif ( $param['total']<=0){
            $this->error(['code'=>3,'msg'=>'非法操作']);
        }else{
            $param['createtime'] = time();
            $param['num'] = date('Ymd').substr(implode(NULL, array_map('ord', str_split(substr(uniqid(), 7, 13), 1))), 0, 8);
            $data = Db::name('order')
                ->insertGetId($param);
            if(empty($data)){
                $this->error(['code'=>2,'msg'=>'sql执行失败']);
            }
            $this->success('SUCCESS',['order_id'=>$data]);
        }
    }

    //将多个一维数组转为二维数组
    public function array_merge_more($keys, ...$arrs){
        // 检查参数是否正确
        if(!$keys || !is_array($keys) || !$arrs || !is_array($arrs) || count($keys)!=count($arrs)){
            return array();
        }
        // 一维数组中最大长度
        $max_len = 0;
        // 整理数据,把所有一维数组转重新索引
        for($i=0,$len=count($arrs); $i<$len; $i++){
            $arrs[$i] = array_values($arrs[$i]);

            if(count($arrs[$i])>$max_len){
                $max_len = count($arrs[$i]);
            }
        }
        // 合拼数据
        $result = array();
        for($i=0; $i<$max_len; $i++){
            $tmp = array();
            foreach($keys as $k=>$v){
                if(isset($arrs[$k][$i])){
                    $tmp[$v] = $arrs[$k][$i];
                }
            }
            $result[] = $tmp;
        }
        return $result;
    }

    /**
     * @ApiTitle    (删除订单)
     * @ApiSummary  (删除订单)
     * @ApiMethod   (POST)
     * @ApiRoute    (/api/user/delorder)
     * @ApiHeaders  (name=token, type=string, required=true, description="请求的Token")
     *
     * @ApiParams   (name="ids[]", type="inter", required=true, description="订单ID")
     *
     *
     * @ApiReturn({
        "code": 1,
        "msg": "成功",
        "time": "1571492001",
    })
     */
    public function delorder()
    {
        $user_id = $this->uid;
        $ids = $this->request->param('ids');
        if(empty($ids)){
            $this->error(['code'=>2,'msg'=>'缺少必要参数']);
        }
        $data = Db::name('order')
            ->where('user_id',$user_id)
            ->whereIn('id',$ids)
            ->delete();
        if($data){
            $this->success('SUCCESS','删除成功');
        }else{
            $this->error(['code'=>2,'msg'=>'sql运行失败']);
        }


    }

    /**
     * @ApiTitle    (我的订单)
     * @ApiSummary  (我的订单)
     * @ApiMethod   (POST)
     * @ApiRoute    (/api/user/myorder)
     * @ApiHeaders  (name=token, type=string, required=true, description="请求的Token")
     *
     * @ApiParams   (name="type", type="inter", required=false, description="状态(不传默认为全部 1为待支付 2为已完成)")
     * @ApiParams   (name="page", type="inter", required=false, description="当前页(默认1)")
     * @ApiParams   (name="pageNum", type="inter", required=false, description="每页显示数据个数(默认10)")
     *
     * @ApiReturn({
        "code": 1,
        "msg": "成功",
        "time": "1571492001",
        "data": {
            "id":       //用户ID
            "pic_id": //图片,
            "video_id":   //视频,
            "status" :   //状态(1待支付 2已完成)
            "total"://总价格
        }
        })
     */
    public function myorder()
    {
        $user_id = $this->uid;
        $page = $this->request->param('page',1,'intval');
        $pageNum = $this->request->param('pageNum',10,'intval');
        $type = $this->request->param('type');
        $res = Db::name('user')
            ->where('id',$user_id)
            ->field('id,is_vip')
            ->find();
        //确认为会员
        if($res['is_vip'] == 1){
            //判断状态
            if(empty($type)){
                //全部
                $res = Db::name('order')
                    ->where('user_id',$user_id)
                    ->field('id,pic_id,video_id,status,total')
                    ->order('createtime desc,id desc')
                    ->page($page,$pageNum)
                    ->select();
                $res = $this->fetch($res);
                $this->success('SUCCESS',$res);
            }elseif ($type == 1){
                //待支付
                $res = Db::name('order')
                    ->where('user_id',$user_id)
                    ->where('status',1)
                    ->field('id,pic_id,video_id,status,total')
                    ->order('createtime desc,id desc')
                    ->page($page,$pageNum)
                    ->select();
                $res = $this->fetch($res);
                $this->success('SUCCESS',$res);
            }else{
                //已完成
                $res = Db::name('order')
                    ->where('user_id',$user_id)
                    ->where('status',2)
                    ->field('id,pic_id,video_id,status,total')
                    ->order('createtime desc,id desc')
                    ->page($page,$pageNum)
                    ->select();
                $res = $this->fetch($res);
                $this->success('SUCCESS',$res);
            }
        }else{
            //不是会员的状态
            //判断状态
            if(empty($type)){
                $res = Db::name('order')
                    ->where('user_id',$user_id)
                    ->field('id,pic_id,video_id,status,total')
                    ->order('createtime desc,id desc')
                    ->page($page,$pageNum)
                    ->select();
                $res = $this->fetch1($res);
                $this->success('SUCCESS',$res);
            }elseif ($type == 1){
                $res = Db::name('order')
                    ->where('user_id',$user_id)
                    ->where('status',1)
                    ->field('id,pic_id,video_id,status,total')
                    ->order('createtime desc,id desc')
                    ->page($page,$pageNum)
                    ->select();
                $res = $this->fetch1($res);
                $this->success('SUCCESS',$res);
            }else{
                $res = Db::name('order')
                    ->where('user_id',$user_id)
                    ->where('status',2)
                    ->field('id,pic_id,video_id,status,total')
                    ->order('createtime desc,id desc')
                    ->page($page,$pageNum)
                    ->select();
                $res = $this->fetch1($res);
                $this->success('SUCCESS',$res);
            }
        }
    }

    //会员
    public function fetch($res)
    {
        $rule = config('verify.path');
        foreach ($res as &$v){
            if(!empty($v['pic_id'])){
                $v['pic_id'] = explode(',',$v['pic_id']);
                foreach ($v['pic_id'] as &$v1){
                    $v1 = Db::name('pic')->field('id,title,thumbnail,url,code,price')->where('id',$v1)->find();
                    $v1['thumbnail'] = $rule.$v1['thumbnail'];
                    $v1['vipprice'] = $v1['price']*0.75;
                }
            }
            if(!empty($v['video_id'])){
                $v['video_id'] = unserialize($v['video_id']);
                foreach ($v['video_id'] as &$v2){
                    $v2['info'] = Db::name('video')->field('keyword,type_ids,content,is_recommend,buy_num,click_num,createtime,updatetime',true)->where('id',$v2['id'])->find();
                    $v2['info']['attr'] = $v2['attr'];
                    unset($v2['attr']);
                    $v2['info']['thumbnail'] = $rule.$v2['info']['thumbnail'];
                    $v2['info']['vipprice'] = $v2['info']['price']*0.75;
                    $v2['info']['four_vipprice'] = $v2['info']['four_price'] * 0.75;
                    $v2['info']['eight_vipprice'] = $v2['info']['eight_price'] * 0.75;
                }
            }
        }
        return $res;
    }

    //非会员
    public function fetch1($res)
    {
        $rule = config('verify.path');
        foreach ($res as &$v){
            if(!empty($v['pic_id'])){
                $v['pic_id'] = explode(',',$v['pic_id']);
                foreach ($v['pic_id'] as &$v1){
                    $v1 = Db::name('pic')->field('id,title,thumbnail,url,code,price')->where('id',$v1)->find();
                    $v1['thumbnail'] = $rule.$v1['thumbnail'];
                }
            }
            if(!empty($v['video_id'])){
                $v['video_id'] = unserialize($v['video_id']);
                foreach ($v['video_id'] as &$v2){
                    $v2['info'] = Db::name('video')->field('keyword,type_ids,content,is_recommend,buy_num,click_num,createtime,updatetime',true)->where('id',$v2['id'])->find();
                    $v2['info']['attr'] = $v2['attr'];
                    unset($v2['attr']);
                    $v2['info']['thumbnail'] = $rule.$v2['info']['thumbnail'];
                }
            }
        }
        return $res;
    }

    /**
     * @ApiTitle    (消费记录)
     * @ApiSummary  (消费记录)
     * @ApiMethod   (POST)
     * @ApiRoute    (/api/user/payhistory)
     * @ApiHeaders  (name=token, type=string, required=true, description="请求的Token")
     *
     * @ApiParams   (name="page", type="inter", required=false, description="当前页(默认1)")
     * @ApiParams   (name="pageNum", type="inter", required=false, description="每页显示数据个数(默认10)")
     *
     * @ApiReturn({
        "code": 1,
        "msg": "成功",
        "time": "1571492001",
        "data": {
          "times"://时间分段,
          "info":[
                "id": 4,//id,
                "user_id"://用户ID
                "pic_id"://图片ID
                "video_id"://视频ID
          ],
          "total"://总价
        }
        })
     */
    public function payhistory()
    {
        $page = $this->request->param('page',1,'intval');
        $pageNum = $this->request->param('pageNum',10,'intval');
        $rule = config('verify.path');
        $user_id = $this->uid;
        $res = Db::name('user')
            ->where('id',$user_id)
            ->field('id,is_vip')
            ->find();
        $data = Db::name('order')
            ->field('id,user_id,pic_id,video_id,total,createtime')
            ->where('user_id',$user_id)
            ->where('status',2)
            ->order('createtime desc,id desc')
            ->page($page,$pageNum)
            ->select();
        //判断该用户是否为会员
        if($res['is_vip'] == 1){
            //是的情况
            foreach ($data as &$v){
                $v['createtime'] = date('Y-m-d',$v['createtime']);
                if(!empty($v['pic_id'])){
                    $v['pic_id'] = explode(',',$v['pic_id']);
                    foreach ($v['pic_id'] as &$v1){
                        $v1 = Db::name('pic')->field('id,title,thumbnail,url,code,price')->where('id',$v1)->find();
                        $v1['thumbnail'] = $rule.$v1['thumbnail'];
                        $v1['vipprice'] = $v1['price']*0.75;
                    }
                }
                if(!empty($v['video_id'])){
                    $v['video_id'] = unserialize($v['video_id']);
                    foreach ($v['video_id'] as &$v2){
                        $v2['info'] = Db::name('video')->field('keyword,type_ids,content,is_recommend,buy_num,click_num,createtime,updatetime',true)->where('id',$v2['id'])->find();
                        $v2['info']['attr'] = $v2['attr'];
                        unset($v2['attr']);
                        $v2['info']['thumbnail'] = $rule.$v2['info']['thumbnail'];
                        $v2['info']['vipprice'] = $v2['info']['price']*0.75;
                        $v2['info']['four_vipprice'] = $v2['info']['four_price'] * 0.75;
                        $v2['info']['eight_vipprice'] = $v2['info']['eight_price'] * 0.75;
                    }
                }
            }
        }else{
            //否的情况
            foreach ($data as &$v){
                $v['createtime'] = date('Y-m-d',$v['createtime']);
                if(!empty($v['pic_id'])){
                    $v['pic_id'] = explode(',',$v['pic_id']);
                    foreach ($v['pic_id'] as &$v1){
                        $v1 = Db::name('pic')->field('id,title,thumbnail,url,code,price')->where('id',$v1)->find();
                        $v1['thumbnail'] = $rule.$v1['thumbnail'];
                    }
                }
                if(!empty($v['video_id'])){
                    $v['video_id'] = unserialize($v['video_id']);
                    foreach ($v['video_id'] as &$v2){
                        $v2['info'] = Db::name('video')->field('keyword,type_ids,content,is_recommend,buy_num,click_num,createtime,updatetime',true)->where('id',$v2['id'])->find();
                        $v2['info']['attr'] = $v2['attr'];
                        unset($v2['attr']);
                        $v2['info']['thumbnail'] = $rule.$v2['info']['thumbnail'];
                    }
                }
            }
        }
        //将用户购买时间数据分段
        $times = array_values(array_unique(array_column($data,'createtime')));
        rsort($times);
        //将数据放到对应的时间分段
        $arr = [];
        foreach ($times as $t_k=> $t_v){
            $arr[$t_k]['times'] = $t_v;
            $k = 0;
            foreach ($data as $value){
                $k+=0;
                if($t_v == $value['createtime']){
                    $arr[$t_k]['info'][$k] = $value;
                    $k++;
                }
            }
        }
        $this->success('SUCCESS',$arr);
    }

    /**
     * @ApiTitle    (获取sessionkey)
     * @ApiSummary  (获取sessionkey)
     * @ApiMethod   (POST)
     * @ApiRoute    (/api/user/getSessionKey)
     *
     * @ApiParams   (name="code", type="string", required=true, description="code")
     *
     * @ApiReturn({
    "code": 1,
    "msg": "成功",
    "time": "1571492001",
    "data":[
        "session_key"://session_key
    ]
    })
     */
    public function getSessionKey(){
        $rule = config('verify.raw');
        $validate = new Validate([
            'code'           => 'require',
        ]);

        $validate->message([
            'code.require'           => '缺少参数code!',
        ]);

        $data = $this->request->param();
        if (!$validate->check($data)) {
            $this->error(['code'=>'40003','msg'=>$validate->getError()]);
        }

        $code      = $data['code'];
        $appId = $rule['app_id'];

        $appSecret = $rule['secret'];

        $response = "https://api.weixin.qq.com/sns/jscode2session?appid=$appId&secret=$appSecret&js_code=$code&grant_type=authorization_code";
        $response = $this->http_get($response);
        $response = json_decode($response, true);
        if (!empty($response['errcode'])) {
            $this->error(['code'=>'2','msg'=>'操作失败:'.$response['errcode']]);
        }
        $this->success('获取成功',$response);
    }

    //curl  get请求
    public function http_get($url){
        $curl = curl_init();//启动一个CURL会话
        curl_setopt($curl, CURLOPT_URL,$url);
        curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false); // 对认证证书来源的检查
        curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false); // 从证书中检查SSL加密算法是否存在
        curl_setopt($curl, CURLOPT_TIMEOUT, 30); // 设置超时限制防止死循环
        curl_setopt($curl, CURLOPT_HEADER, false);//不开启header
        curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); // 获取的信息以文件流的形式返回
        $result = curl_exec($curl); //执行操作
        curl_close($curl);
        return $result;
    }

    /**
     * @ApiTitle    (获取用户手机号)
     * @ApiSummary  (获取用户手机号)
     * @ApiMethod   (POST)
     * @ApiRoute    (/api/user/getMobile)
     *
     * @ApiParams   (name="sessionKey", type="string", required=true, description="sessionkey")
     * @ApiParams   (name="encryptedData", type="string", required=true, description="encryptedDate")
     * @ApiParams   (name="iv", type="string", required=true, description="iv")
     *
     * @ApiReturn({
        "code": 1,
        "msg": "成功",
        "time": "1571492001",
          "data":[
               "phoneNumber"://手机号
          ]
        })
     */
    public function getMobile()
    {
        $appid = 'wx4300d933e5abd5ba';
        $sessionKey = $this->request->param('sessionKey');
        $encryptedData = $this->request->param('encryptedData');
        $iv = $this->request->param('iv');
        $errCode = $this->decryptData($appid,$sessionKey,$encryptedData, $iv, $data );
        if ($errCode == 0) {
            $return['tel'] = $data->phoneNumber;
            $return['tel'] = json_encode($return['tel']);
            $return['tel'] = json_decode($return['tel'],true);
        } else {
            $return['code'] = 301;
            $return['data'] = $errCode;
            $return['code'] = json_encode($return['code']);
            $return['code'] = json_decode($return['code'],true);
            $return['data'] = json_encode($return['data']);
            $return['data'] = json_decode($return['data'],true);
        }

        $this->success('SUCCESS',$return);
    }

    private function decryptData( $appid,$sessionKey,$encryptedData, $iv, &$data )
    {
        if (strlen($sessionKey) != 24) {
            return -41001;
        }
        $aesKey=base64_decode($sessionKey);

        if (strlen($iv) != 24) {
            return -41002;
        }
        $aesIV=base64_decode($iv);

        $aesCipher=base64_decode($encryptedData);

        $result=openssl_decrypt( $aesCipher, "AES-128-CBC", $aesKey, 1, $aesIV);

        $dataObj=json_decode( $result );
        if( $dataObj  == NULL )
        {
            return -41003;
        }
        if( $dataObj->watermark->appid != $appid )
        {
            return -41004;
        }
        $data = $dataObj;
        return 0;
    }

    /**
     * @ApiTitle    (绑定用户手机号)
     * @ApiSummary  (绑定用户手机号)
     * @ApiMethod   (POST)
     * @ApiRoute    (/api/user/phone)
     *
     * @ApiHeaders  (name=token, type=string, required=true, description="请求的Token")
     *
     * @ApiParams   (name="phone", type="string", required=true, description="手机号")
     *
     * @ApiReturn({
        "code": 1,
        "msg": "成功",
        "time": "1571492001",
        })
     */
    public function phone()
    {
        $user_id = $this->uid;
        $phone = $this->request->post('phone');
        if(empty($phone)){
            $this->error(['code'=>2,'msg'=>'缺少必要参数']);
        }
        $data = Db::name('user')
            ->where('id',$user_id)
            ->update(['mobile'=>$phone]);
        if(!empty($data)){
            $this->success('SUCCESS',$data);
        }else{
            $this->error(['code'=>2,'msg'=>'sql运行失败']);
        }
    }
}