<?php
namespace app\mobile\controller;

use think\Validate;
use think\Db;
use think\Exception;
use think\exception\PDOException;
use app\common\controller\Api;
use app\mobile\model\CompanyUser;
use app\mobile\model\CompanyUserLog;
use app\mobile\model\CourseOrder;
use app\mobile\model\CourseAppraise;
use app\mobile\model\SecretOrder;
use app\mobile\model\Package;
use app\mobile\model\PackageOrder;
use app\mobile\model\PackageSpec;
use app\mobile\model\PackageCart;
use app\mobile\model\CompanyJob;
use app\mobile\model\UserJob;
use app\mobile\model\CompanyJobResume;
use app\mobile\model\UserJobDownload;
use app\mobile\model\Message;
use addons\epay\library\Service;
use Endroid\QrCode\QrCode;

/**
 * 我的(企业)接口
 * @ApiWeigh (65)
 */
class Company extends Api
{
	protected $noNeedLogin = [''];
    protected $noNeedRight = ['*'];
    protected $company_id = 0;

    public function _initialize()
    {
        parent::_initialize();
        $this->model = model('app\mobile\model\Company');
        if(!$this->company_id){
            $user = $this->auth->getUser();
            if($user['group_id'] == 0){
                $this->error('您还不是企业管理员');
            }
            $this->company_id = $this->model->where('user_id',$user['id'])->value('id');
        }
    }

    /**
     * @ApiWeigh (99)
     * @ApiTitle    (我的密卷)
     * @ApiSummary  (我的密卷)
     * @ApiMethod   (POST)
     *
     * @ApiHeaders  (name=token, type=string, required=true, description="请求的Token")
     *
     * @ApiReturn({
        "code": 1, 
        "msg": "成功", 
        "time": "1600499807", 
        "data": [
            {
                "id": 10, //密卷订单ID
                "pay_price": "500.00", //实际支付金额
                "people_num": 20, //密卷规格人数(斜杠后数字)
                "is_top": "1", //是否顶配:0=否,1=是
                "secret": {
                    "id": 1, //密卷ID
                    "title": "测试密卷", 
                    "do_num": 20
                }, 
                "user_count": 3 //当前企业下员工含管理员数量(斜杠前数字)
            }
        ]
    })
     */
    public function mySecret(){
        // 查找所有密卷
        $list = SecretOrder::with(['secret'])
            ->where('company_id',$this->company_id)
            ->where('user_id',$this->auth->id)
            ->where('pay_status','1')
            ->select();
        $user_count = CompanyUser::where('company_id',$this->company_id)
                ->where('status','1')
                ->count();
        foreach ($list as $v) {
            // 当前企业下员工含管理员人数
            $v['user_count'] = $user_count + 1;
            $v->visible(['id','pay_price','people_num','is_top','secret'])->append(['user_count']);
            $v->getRelation('secret')->visible(['id','title']);
        }
        $this->success('成功',$list);
    }

    /**
     * @ApiWeigh (97)
     * @ApiTitle    (我的课程)
     * @ApiSummary  (我的课程)
     * @ApiMethod   (POST)
     *
     * @ApiHeaders  (name=token, type=string, required=true, description="请求的Token")
     *
     * @ApiReturn({
        "code": 1,
        "msg": "成功",
        "time": "1600081718",
        "data": [{
            "id": 9, //课程订单ID
            "pay_price": "50.00", //实际支付金额
            "people_num": 20, //限制人数(斜杠后数字)
            "is_top": "0", //是否顶配:0=否,1=是
            "course": { //课程信息
                "id": 1, //课程ID
                "title": "测试课程", //课程标题
                "cover": "" //课程封面图
            },
            "user_count": 0 //当前企业下员工含管理员数量(斜杠前数字)
            "is_have_appraise": 0 //是否已评价:0=否,1=是
        }]
    })
     */
    public function myCourse(){
        // 查找所有密卷
        $list = CourseOrder::with(['course'])
            ->where('company_id',$this->company_id)
            ->where('user_id',$this->auth->id)
            ->where('pay_status','1')
            ->select();
        $user_count = CompanyUser::where('company_id',$this->company_id)
                ->where('status','1')
                ->count();
        foreach ($list as $v) {
            // 当前企业下员工含管理员人数
            $v['user_count'] = $user_count + 1;
            // 是否已评价
            $have_appraise = CourseAppraise::where('user_id',$this->auth->id)
                ->where('course_id',$v['course_id'])
                ->where('course_order_id',$v['id'])
                ->field('id')
                ->find();
            $v['is_have_appraise'] = !empty($have_appraise) ? 1 : 0;
            $v->visible(['id','pay_price','people_num','is_top','course'])->append(['user_count','is_have_appraise']);
            $v->getRelation('course')->visible(['id','cover','title']);
        }
        $this->success('成功',$list);
    }

    /**
     * @ApiWeigh (95)
     * @ApiTitle    (企业成员管理)
     * @ApiSummary  (企业成员管理)
     * @ApiMethod   (POST)
     *
     * @ApiHeaders  (name=token, type=string, required=true, description="请求的Token")
     * @ApiParams   (name="page", type="inter", required=false, description="当前页(默认1)")
     * @ApiParams   (name="page_num", type="inter", required=false, description="每页显示数据个数(默认10)")
     * @ApiParams   (name="status", type="string", required=false, description="0=未审核,1=已通过")
     * @ApiParams   (name="keyword", type="string", required=false, description="关键字")
     *
     * @ApiReturn({
        "code": 1, 
        "msg": "成功", 
        "time": "1600511589", 
        "data": {
            "total": 2, //数据总数
            "list": [
                {
                    "id": 1, //申请ID
                    "name": "何先生", //申请人名称
                    "mobile": "15133120361", //申请人电话
                    "createtime": "2020.09.12" //申请时间
                }
            ]
        }
    })
     */
    public function companyUser()
    {
        $page = $this->request->param('page', 1, 'intval');
        $page_num = $this->request->param('page_num', 10, 'intval');
        $status = $this->request->param('status','0');
        $keyword = $this->request->param('keyword');
        $where['status'] = $status;
        if(!empty($keyword)){
            $where['name'] = ['like','%'.$keyword.'%'];
        }
        $data = CompanyUser::where('company_id',$this->company_id)
            ->where($where)
            ->paginate($page_num,false,['page'=>$page])
            ->each(function($v){
                $v['createtime'] = date('Y.m.d',$v['createtime']);
                $v->visible(['id','name','mobile','createtime']);
            })->toArray();
        $this->success('成功',['total'=>$data['total'],'list'=>$data['data']]);
    }

    /**
     * @ApiWeigh (93)
     * @ApiTitle    (企业成员管理-同意加入)
     * @ApiSummary  (企业成员管理-同意加入)
     * @ApiMethod   (POST)
     *
     * @ApiHeaders  (name=token, type=string, required=true, description="请求的Token")
     * @ApiParams   (name="company_user_id", type="string", required=false, description="申请ID")
     *
     * @ApiReturn({
        "code": 1,
        "msg": "成功",
        "time": "1600167441",
        "data": null
    })
     */
    public function companyUserAgree()
    {
        $company_user_id = $this->request->param('company_user_id');
        empty($company_user_id) && $this->error('缺少必需参数');
        $info = CompanyUser::get($company_user_id);
        empty($info) && $this->error('申请信息不存在');
        Db::startTrans();
        try {
            $info->save(['status'=>'1']);
            // 发送消息
            $company_name = $this->model->where('id',$info['company_id'])->value('name');
            Message::create([
                'user_id' => $info['user_id'],
                'title' => '加入企业-成功',
                'content' => '您的加入'.$company_name.'企业的申请已通过,该企业的学习自老您都可以免费共享了哦,快去试试吧。'
            ]);
            // 新增员工记录
            CompanyUserLog::create([
                'company_id' => $info['company_id'],
                'user_id' => $info['user_id'],
                'name' => $info['name'],
                'mobile' => $info['mobile'],
                'type' => '1'
            ]);
            Db::commit();
        } catch (PDOException $e) {
            Db::rollback();
            $this->error($e->getMessage());
        } catch (Exception $e) {
            Db::rollback();
            $this->error($e->getMessage());
        }
        $this->success('同意加入成功');
    }

    /**
     * @ApiWeigh (91)
     * @ApiTitle    (企业成员管理-拒绝加入)
     * @ApiSummary  (企业成员管理-拒绝加入)
     * @ApiMethod   (POST)
     *
     * @ApiHeaders  (name=token, type=string, required=true, description="请求的Token")
     * @ApiParams   (name="company_user_id", type="string", required=false, description="申请ID")
     *
     * @ApiReturn({
        "code": 1,
        "msg": "成功",
        "time": "1600167441",
        "data": null
    })
     */
    public function companyUserRefuse()
    {
        $company_user_id = $this->request->param('company_user_id');
        empty($company_user_id) && $this->error('缺少必需参数');
        $info = CompanyUser::get($company_user_id);
        empty($info) && $this->error('申请信息不存在');
        Db::startTrans();
        try {
            $info->save(['status'=>'2']);
            // 发送消息
            $company_name = $this->model->where('id',$info['company_id'])->value('name');
            Message::create([
                'user_id' => $info['user_id'],
                'title' => '加入企业-失败',
                'content' => '您的加入'.$company_name.'企业的申请失败了,联系企业管理员后重新申请下吧。'
            ]);
            Db::commit();
        } catch (PDOException $e) {
            Db::rollback();
            $this->error($e->getMessage());
        } catch (Exception $e) {
            Db::rollback();
            $this->error($e->getMessage());
        }
        $this->success('拒绝成功');
    }

    /**
     * @ApiWeigh (89)
     * @ApiTitle    (企业成员管理-移出团队)
     * @ApiSummary  (企业成员管理-移出团队)
     * @ApiMethod   (POST)
     *
     * @ApiHeaders  (name=token, type=string, required=true, description="请求的Token")
     * @ApiParams   (name="company_user_id", type="string", required=false, description="申请ID")
     *
     * @ApiReturn({
        "code": 1,
        "msg": "成功",
        "time": "1600167441",
        "data": null
    })
     */
    public function companyUserRemove()
    {
        $company_user_id = $this->request->param('company_user_id');
        empty($company_user_id) && $this->error('缺少必需参数');
        $info = CompanyUser::get($company_user_id);
        empty($info) && $this->error('申请信息不存在');
        // 删除员工记录
        CompanyUserLog::create([
            'company_id' => $info['company_id'],
            'user_id' => $info['user_id'],
            'name' => $info['name'],
            'mobile' => $info['mobile'],
            'type' => '2'
        ]);
        $info->delete();
        $this->success('移出成功');
    }

    /**
     * @ApiWeigh (87)
     * @ApiTitle    (企业成员管理-企业邀请码)
     * @ApiSummary  (企业成员管理-企业邀请码)
     * @ApiMethod   (POST)
     *
     * @ApiHeaders  (name=token, type=string, required=true, description="请求的Token")
     *
     * @ApiReturn({
        "code": 1,
        "msg": "成功",
        "time": "1600167441",
        "data": {
            "invite_code": 376581, //企业邀请码
        }
    })
     */
    public function inviteCode()
    {
        $invite_code = $this->model->where('id',$this->company_id)->value('invite_code');
        $this->success('成功',compact('invite_code'));
    }

    /**
     * @ApiWeigh (85)
     * @ApiTitle    (企业成员管理-更新企业邀请码)
     * @ApiSummary  (企业成员管理-更新企业邀请码)
     * @ApiMethod   (POST)
     *
     * @ApiHeaders  (name=token, type=string, required=true, description="请求的Token")
     *
     * @ApiReturn({
        "code": 1,
        "msg": "成功",
        "time": "1600167441",
        "data": {
            "invite_code": 376581, //企业邀请码
        }
    })
     */
    public function setInviteCode()
    {
        $invite_code = (new User)->setInviteCode($this->company_id);
        $this->success('更新邀请码成功',compact('invite_code'));
    }

    /**
     * @ApiWeigh (85)
     * @ApiTitle    (企业成员管理-二维码邀请)
     * @ApiSummary  (企业成员管理-二维码邀请)
     * @ApiMethod   (POST)
     *
     * @ApiHeaders  (name=token, type=string, required=true, description="请求的Token")
     *
     * @ApiReturn({
        "code": 1,
        "msg": "成功",
        "time": "1600167441",
        "data": {
            "invite_qrcode": "http://www.enterprise.top/qrcode/20201017/52b77af2efe121e124c1b26d4d0d7f43.png", //二维码地址
        }
    })
     */
    public function inviteQrcode()
    {
        $company = $this->model->get($this->company_id);
        if(empty($company['invite_qrcode'])){
            $qrCode = new QrCode();
            $qrCode
                ->setText($this->company_id)
                ->setSize(300)
                ->setPadding(10)
                ->setErrorCorrection('high')
                ->setForegroundColor(['r' => 0, 'g' => 0, 'b' => 0, 'a' => 0])
                ->setBackgroundColor(['r' => 255, 'g' => 255, 'b' => 255, 'a' => 0])
                ->setLabelFontSize(16)
                ->setImageType(QrCode::IMAGE_TYPE_PNG);
            $dir = 'uploads/company';
            if (!file_exists($dir)){
                mkdir($dir,0777,true);
            }
            $url = $dir.'/qrcode_'.$this->company_id.'.png';
            // save it to a file
            $qrCode->save($url);
            $company->save([
                'invite_qrcode' => '/'.$url
            ]);
        }
        $this->success('成功',[
            'invite_qrcode' => $company->invite_qrcode
        ]);
    }

    /**
     * @ApiWeigh (83)
     * @ApiTitle    (企业套餐)
     * @ApiSummary  (企业套餐)
     * @ApiMethod   (POST)
     *
     * @ApiHeaders  (name=token, type=string, required=true, description="请求的Token")
     * @ApiParams   (name="keyword", type="inter", required=false, description="搜索关键字")
     * @ApiParams   (name="is_buy", type="inter", required=false, description="0=未购买,1=已购买")
     * @ApiParams   (name="order", type="inter", required=false, description="排序方式:0=最新,1=购买最多,2=价格最低,3=优惠最大")
     *
     * @ApiReturn({
        "code": 1, 
        "msg": "成功", 
        "time": "1600773758", 
        "data": [
            {
                "id": 8, //套餐ID
                "title": "1", //套餐名称
                "current_price": "123.00", //现价
                "is_buy": 1, //是否已购买:0=否,1=是
                "is_add_cart": 0, //是否已加入购物:0=否,1=是
                "original_price": "60.00", //原价
                "buy_num": 60, //购买数量
                "preferential_price": "-63.00", //优惠金额
                "people_num": 10, //套餐限制人数
                "secret_list": [
                    {
                        "id": 1, //密卷ID
                        "title": "测试密卷", //密卷标题
                        "current_price": "10.00", 
                        "original_price": "10000.00", 
                        "do_num_virtual": 10, 
                        "do_num_real": 10, 
                        "description": "测试密卷", 
                        "createtime": null, 
                        "updatetime": null, 
                        "do_num": 20
                    }
                ], 
                "course_list": [
                    {
                        "id": 1, //课程ID
                        "title": "测试课程", //课程标题
                        "cover": "", 
                        "current_price": "50.00", 
                        "original_price": "100.00", 
                        "content": null, 
                        "is_top": "0", 
                        "top_time": null, 
                        "study_num_virtual": 1, 
                        "study_num_real": 2, 
                        "createtime": null, 
                        "updatetime": null
                    }
                ]
            }
        ]
    })
     */
    public function package()
    {
        $user_id = $this->auth->id;
        $keyword = $this->request->param('keyword');
        $is_buy = $this->request->param('is_buy',0);
        $order = $this->request->param('order',0);
        if(empty($is_buy)){
            $is_buy = '0';
        }
        $where = [];
        if(!empty($keyword)){
            $where['p.title'] = ['like','%'.$keyword.'%'];
        }
        switch ($order) {
            case 0:
                $order = ['p.createtime' => 'desc'];
                break;
            case 1:
                $order = ['buy_num' => 'desc'];
                break;
            case 2:
                $order = ['p.current_price' => 'asc'];
                break;
            case 3:
                $order = ['preferential_price' => 'asc'];
                break;
        }
        $package_order = Db::name('mobile_package_order_info')
            ->alias('poi')
            ->join('mobile_package_order po','po.id = poi.package_order_id')
            ->where('poi.company_id',$this->company_id)
            ->where('poi.user_id',$user_id)
            ->where('po.pay_status','1')
            ->field('poi.id,poi.package_id,poi.people_num')
            ->order(['poi.is_top'=>'desc','poi.people_num'=>'desc'])
            ->limit(1)
            ->buildSql();
        $list = Package::alias('p')
            ->join([$package_order=>'poi'],'p.id = poi.package_id','left')
            ->join('mobile_package_cart pc','pc.package_id = p.id and pc.user_id='.$user_id,'left')
            ->where($where)
            ->field("
                p.*,
                if(poi.id > 0,1,0) is_buy,
                if(pc.id > 0,1,0) is_add_cart,
                IFNULL((select SUM(current_price) from fa_mobile_secret where id in (p.secret_ids)),0) +
                IFNULL((select SUM(current_price) from fa_mobile_course where id in (p.course_ids)),0) original_price,
                p.buy_num_virtual + p.buy_num_real buy_num,
                IFNULL((select SUM(current_price) from fa_mobile_secret where id in (p.secret_ids)),0) +
                IFNULL((select SUM(current_price) from fa_mobile_course where id in (p.course_ids)),0) - p.current_price preferential_price,
                poi.people_num
            ")
            ->order($order)
            ->having("is_buy = {$is_buy}")
            ->select();
        foreach ($list as $v) {
            $v->visible([
                'id',
                'title',
                'current_price',
            ])->append([
                'is_buy',
                'is_add_cart',
                'original_price',
                'buy_num',
                'preferential_price',
                'people_num',
                'secret_list',
                'course_list',
            ]);
        }
        $this->success('成功',$list);
    }

    /**
     * @ApiWeigh (82)
     * @ApiTitle    (企业套餐-购物车数量)
     * @ApiSummary  (企业套餐-购物车数量)
     * @ApiMethod   (POST)
     *
     * @ApiHeaders  (name=token, type=string, required=true, description="请求的Token")
     *
     * @ApiReturn({
        "code": 1,
        "msg": "成功",
        "time": "1603273475",
        "data": {
            "cart_num": 1, //数量
            "pay_price_total": 500, //现价总数
            "original_price_total": 500 //原价总数
        }
    })
     */
    public function packageCartNum()
    {
        $list = PackageCart::where('company_id',$this->company_id)->field('id,pay_price,original_price')->select();
        $cart_num = count($list);
        $pay_price_total = array_sum(array_column($list, 'pay_price'));
        $original_price_total = array_sum(array_column($list, 'original_price'));
        $this->success('成功',compact('cart_num','pay_price_total','original_price_total'));
    }

    /**
     * @ApiWeigh (81)
     * @ApiTitle    (选择套餐规格)
     * @ApiSummary  (选择套餐规格)
     * @ApiMethod   (POST)
     *
     * @ApiHeaders  (name=token, type=string, required=true, description="请求的Token")
     * @ApiParams   (name="package_id", type="inter", required=true, description="套餐ID")
     *
     * @ApiReturn({
        "code": 1, 
        "msg": "成功", 
        "time": "1600774924", 
        "data": [{
            "id": 1, //套餐规格ID
            "package_id": 8, //套餐ID
            "name": "基础版", //规格ID
            "current_price": 500, //现价
            "original_price": "1000.00", //原价
            "people_num": 20, //限制人数
            "is_top": "0", //是否顶配:0=否,1=是
            "createtime": null, 
            "updatetime": null, 
            "is_pay": 1 //是否可以购买:0=否,1=是
        }]
    })
     */
    public function packageSpec()
    {
        $user_id = $this->auth->id;
        $package_id = $this->request->param('package_id');
        empty($package_id) && $this->error('缺少必需参数');
        $info = Package::get($package_id);
        empty($info) && $this->error('套餐信息不存在');
        $list = PackageSpec::where('package_id',$package_id)->select();
        foreach ($list as &$v) {
            // 是否可购买
            $order = Db::name('mobile_package_order_info')
                ->alias('poi')
                ->join('mobile_package_order po','po.id = poi.package_order_id')
                ->where('poi.company_id',$this->company_id)
                ->where('poi.user_id',$user_id)
                ->where('poi.package_id',$package_id)
                ->where('po.pay_status','1')
                ->field('poi.id,poi.current_price,poi.people_num,poi.is_top')
                ->order(['poi.is_top'=>'desc','poi.people_num'=>'desc'])
                ->find();
            $people_num = CompanyUser::where('company_id',$this->company_id)
                ->where('status','1')
                ->count();
            if(!empty($order)){
                // 已购买顶配套餐,直接跳出本次循环
                if($order['is_top'] == '1'){
                    $v['is_pay'] = 0;
                    continue;
                }
                if($order['people_num'] > $people_num){
                    $people_num = $order['people_num'];
                }
                $v['current_price'] = $v['current_price']-$order['current_price'];
            }
            if($v['is_top'] == '1'){
                $v['is_pay'] = 1;
            }else{
                $v['is_pay'] = $v['people_num'] <= $people_num ? 0 : 1;
            }
        }
        $this->success('成功',$list);
    }

    /**
     * @ApiTitle    (套餐说明)
     * @ApiSummary  (套餐说明)
     * @ApiMethod   (POST)
     *
     * @ApiReturn({
        "code": 1,
        "msg": "成功",
        "time": "1599017563",
        "data": "套餐说明" //套餐说明内容
    })
     */
    public function spec_intro()
    {
        $content = Db::name('mobile_config')->where('id',1)->value('package_spec_intro');
        $this->success('成功', $content);
    }

    /**
     * @ApiWeigh (79)
     * @ApiTitle    (加入购物车)
     * @ApiSummary  (加入购物车)
     * @ApiMethod   (POST)
     *
     * @ApiHeaders  (name=token, type=string, required=true, description="请求的Token")
     * @ApiParams   (name="package_id", type="inter", required=true, description="套餐ID")
     * @ApiParams   (name="package_spec_id", type="inter", required=true, description="套餐规格ID")
     *
     * @ApiReturn({
        "code": 1, 
        "msg": "加入购物车成功", 
        "time": "1600774924", 
        "data": null
    })
     */
    public function packageAddCart()
    {
    	$user_id = $this->auth->id;
        $package_id = $this->request->param('package_id');
        $package_spec_id = $this->request->param('package_spec_id');
        empty($package_id) && $this->error('缺少必需参数');
        empty($package_spec_id) && $this->error('请选择套餐规格');
        $info = PackageSpec::get(['package_id'=>$package_id,'id'=>$package_spec_id]);
        empty($info) && $this->error('套餐规格信息不存在');
        // 是否可购买
        $order = Db::name('mobile_package_order_info')
            ->alias('poi')
            ->join('mobile_package_order po','po.id = poi.package_order_id')
            ->where('poi.company_id',$this->company_id)
            ->where('poi.user_id',$user_id)
            ->where('poi.package_id',$package_id)
            ->where('po.pay_status','1')
            ->field('poi.id,poi.current_price,poi.people_num,poi.is_top')
            ->order(['poi.is_top'=>'desc','poi.people_num'=>'desc'])
            ->find();
        if(!empty($order)){
            // 已购买顶配套餐,直接跳出本次循环
            if($order['is_top'] == '1'){
                $this->error('您已购买顶级套餐规格,无需再购买其他套餐规格');
            }
            $pay_price = $info['current_price']-$order['current_price'];
        }else{
            $pay_price = $info['current_price'];
        }
        PackageCart::create([
            'company_id' => $this->company_id,
            'user_id' => $user_id,
            'package_id' => $package_id,
            'package_spec_id' => $package_spec_id,
            'pay_price' => $pay_price,
            'current_price' => $info['current_price'],
            'original_price' => $info['original_price'],
            'people_num' => $info['people_num'],
            'is_top' => $info['is_top']
        ]);
        $this->success('加入购物车成功');
    }

    /**
     * @ApiWeigh (79)
     * @ApiTitle    (套餐购物车)
     * @ApiSummary  (套餐购物车)
     * @ApiMethod   (POST)
     *
     * @ApiHeaders  (name=token, type=string, required=true, description="请求的Token")
     *
     * @ApiReturn({
        "code": 1,
        "msg": "成功",
        "time": "1603275248",
        "data": {
            "list": [{ //购物车信息
                "id": 1, //购物车ID
                "pay_price": "500.00", //现价
                "original_price": "500.00", //原价
                "package": { //套餐信息
                    "id": 8, //套餐ID
                    "title": "1" //套餐标题
                }
            }],
            "pay_price_total": 500 //应付金额
        }
    })
     */
    public function packageCartList()
    {
        $list = PackageCart::with(['package'])
            ->where('company_id',$this->company_id)
            ->select();
        foreach ($list as $v) {
            $v->visible(['id','pay_price','original_price','package']);
            $v->getRelation('package')->visible(['id','title']);
        }
        $pay_price_total = array_sum(array_column($list, 'pay_price'));
        $this->success('成功',compact('list','pay_price_total'));
    }

    /**
     * @ApiWeigh (79)
     * @ApiTitle    (套餐下单)
     * @ApiSummary  (套餐下单)
     * @ApiMethod   (POST)
     *
     * @ApiHeaders (name=token, type=string, required=true, description="请求的Token")
     * @ApiParams (name="pay_type", type="string", required=true, description="支付方式:wechat=微信,alipay=支付宝")
     *
     * @ApiReturn({
        "code": 1,
        "msg": "成功",
        "time": "1599046220",
        "data": {
            "id": 1, //试卷ID
            "title": "测试试卷", //试卷标题
            "year": 2015, //年费(单位:年)
            "time": 100, //答题时间(单位:分)
            "pass_score": 80, //合格分数
            "description": "这个还行", //试卷描述
            "do_num": 10, //回答人数
            "full_score": 100 //试卷分数(单位:分)
        }
    })
     */
    public function pay()
    {
        $param = $this->request->param();
        if (!$param['pay_type'] || !in_array($param['pay_type'], ['alipay', 'wechat'])) {
            $this->error("请选择支付方式");
        }
        // 创建订单
        $model = new PackageOrder;
        $model->add($this->auth->getUser(), $param['pay_type']);
        //回调链接
        $notifyurl = $this->request->root(true) . '/mobile/notify/notifyPackage/paytype/' . $param['pay_type'];
        $model['pay_price'] = 0.01; //测试金额
        $payment = Service::submitOrder($model['pay_price'], $model['order_sn'], $param['pay_type'], '企业套餐', $notifyurl, null, 'app');
        $this->success('成功',$payment);
    }

    /**
     * @ApiWeigh (79)
     * @ApiTitle    (我的招聘-我发布的)
     * @ApiSummary  (我的招聘-我发布的)
     * @ApiMethod   (POST)
     *
     * @ApiHeaders  (name=token, type=string, required=true, description="请求的Token")
     * @ApiParams (name="page", type="inter", required=false, description="当前页(默认1)")
     * @ApiParams (name="page_num", type="inter", required=false, description="每页显示数据个数(默认10)")
     * @ApiParams   (name="type", type="inter", required=false, description="岗位类型:1=全职,2=兼职,3=其他")
     *
     * @ApiReturn({
        "code": 1,
        "msg": "成功",
        "time": "1602406820",
        "data": {
            "total": 1, //总条数
            "per_page": 15,
            "current_page": 1,
            "last_page": 1,
            "data": [{
                "id": 1, //职位ID
                "name": "123", //职位名称
                "type": "1", //职位类型
                "salary": "9753.20", //工资
                "start_time": "2020.10.11", //开始工作时间
                "end_time": "2020.10.11", //结束工作时间
                "address": "测试地址", //地址
                "is_has_red": "0", //是否有小红点:0=否,1=是
                "type_text": "全职" //职位类型说明
            }]
        }
    })
     */
    public function companyJob()
    {
        $page = $this->request->param('page', 1, 'intval');
        $page_num = $this->request->param('page_num', 10, 'intval');
        $type = $this->request->param('type');
        $where['cj.status'] = '1';
        // 求职类型
        if(!empty($type)){
            $where['cj.type'] = $type;
        }
        $data = CompanyJob::alias('cj')
            ->join('mobile_company_job_resume cjr',"cjr.company_job_id = cj.id and cjr.is_view = '0'",'left')
            ->where($where)
            ->field('
                cj.id,
                cj.name,
                cj.type,
                cj.salary,
                cj.start_time,
                cj.end_time,
                cj.address,
                if(cjr.id > 0,1,0) is_has_red
            ')
            ->order(['is_has_red' => 'desc','cj.createtime' => 'desc'])
            ->paginate($page_num,false,['page'=>$page])
            ->toArray();
        $this->success('成功', $data);
    }

    /**
     * @ApiWeigh (77)
     * @ApiTitle    (我的招聘-我发布的-删除)
     * @ApiSummary  (我的招聘-我发布的-删除)
     * @ApiMethod   (POST)
     *
     * @ApiHeaders  (name=token, type=string, required=true, description="请求的Token")
     * @ApiParams (name="company_job_id", type="inter", required=false, description="招聘ID")
     *
     * @ApiReturn({
        "code": 1,
        "msg": "成功",
        "time": "1602234925",
        "data": null
    })
     */
    public function companyJobDel()
    {
        $company_job_id = $this->request->param('company_job_id');
        empty($company_job_id) && $this->error('缺少必需参数');
        $info = CompanyJob::get(['user_id'=>$this->auth->id,'id'=>$company_job_id]);
        empty($info) && $this->error('招聘信息不存在');
        Db::startTrans();
        try {
            // 删除投递的简历
            $info->resume()->delete();
            // 删除招聘职位
            $info->delete();
            Db::commit();
        } catch (PDOException $e) {
            Db::rollback();
            $this->error($e->getMessage());
        } catch (Exception $e) {
            Db::rollback();
            $this->error($e->getMessage());
        }
        $this->success('删除成功');
    }

    /**
     * @ApiWeigh (75)
     * @ApiTitle    (我的招聘-我发布的-查看简历-详情)
     * @ApiSummary  (我的招聘-我发布的-查看简历-详情)
     * @ApiMethod   (POST)
     *
     * @ApiParams   (name="company_job_id", type="inter", required=false, description="招聘职位ID")
     *
     * @ApiReturn({
        "code": 1,
        "msg": "成功",
        "time": "1602416171",
        "data": {
            "id": 2, //招聘ID
            "user_id": 15,
            "company_id": 7,
            "name": "101640",
            "type": "3", //职位类型
            "start_time": "2020.10.11", //开始工作时间
            "end_time": "2020.10.11", //结束工作时间
            "salary": "9753.20", //工资
            "lng": "123",
            "lat": "456",
            "address": "测试地址", //地址
            "house_number": "测试门牌号", //门牌号
            "mobile": "15133120361", //电话
            "description": "sdfkl",
            "other_desc": "dsf",
            "status": "1",
            "createtime": 1602415172,
            "updatetime": 1602415172,
            "weigh": 0,
            "type_text": "其他" //职位类型描述
        }
    })
     */
    public function companyJobInfo()
    {
        $company_job_id = $this->request->param('company_job_id');
        empty($company_job_id) && $this->error('缺少必需参数');
        $info = CompanyJob::get($company_job_id);
        empty($info) && $this->error('招聘信息不存在');
        $this->success('成功', $info);
    }

    /**
     * @ApiWeigh (73)
     * @ApiTitle    (我的招聘-我发布的-查看简历-列表)
     * @ApiSummary  (我的招聘-我发布的-查看简历-列表)
     * @ApiMethod   (POST)
     *
     * @ApiHeaders  (name=token, type=string, required=true, description="请求的Token")
     * @ApiParams (name="page", type="inter", required=false, description="当前页(默认1)")
     * @ApiParams (name="page_num", type="inter", required=false, description="每页显示数据个数(默认10)")
     * @ApiParams   (name="company_job_id", type="inter", required=false, description="招聘职位ID")
     *
     * @ApiReturn({
        "code": 1,
        "msg": "成功",
        "time": "1602417085",
        "data": {
            "total": 1, //数据总数
            "per_page": 15,
            "current_page": 1,
            "last_page": 1,
            "data": [{
                "id": 4, //投递ID
                "is_view": "0", //是否已被查看:0=否,1=是
                "createtime": "2020.10.11 20:31", //投递时间
                "user": { //投递者信息
                    "id": 15, //用户ID
                    "nickname": "", //真实姓名
                    "image": "" //头像
                }
            }]
        }
    })
     */
    public function companyJobResume()
    {
        $page = $this->request->param('page', 1, 'intval');
        $page_num = $this->request->param('page_num', 10, 'intval');
        $company_job_id = $this->request->param('company_job_id');
        empty($company_job_id) && $this->error('缺少必需参数');
        $data = CompanyJobResume::with(['user'])
            ->where('status','0')
            ->where('company_job_id',$company_job_id)
            ->order('createtime desc')
            ->paginate($page_num,false,['page'=>$page])
            ->each(function($v){
                // 投递时间
                $v->createtime = date('Y.m.d H:i',$v->createtime);
                $v->visible(['id','is_view','createtime','user']);
                $v->getRelation('user')->visible(['id','image','nickname']);
            })->toArray();
        $this->success('成功', $data);
    }

    /**
     * @ApiWeigh (71)
     * @ApiTitle    (我的招聘-我发布的-查看简历-查看)
     * @ApiSummary  (我的招聘-我发布的-查看简历-查看)
     * @ApiMethod   (POST)
     *
     * @ApiHeaders  (name=token, type=string, required=true, description="请求的Token")
     * @ApiParams   (name="company_job_resume_id", type="inter", required=false, description="投递简历ID")
     *
     * @ApiReturn({
        "code": 1,
        "msg": "成功",
        "time": "1602417085",
        "data": {
            "total": 1, //数据总数
            "per_page": 15,
            "current_page": 1,
            "last_page": 1,
            "data": 简历链接
        }
    })
     */
    public function resumeView()
    {
        $company_job_resume_id = $this->request->param('company_job_resume_id');
        empty($company_job_resume_id) && $this->error('缺少必需参数');
        $info = CompanyJobResume::get($company_job_resume_id);
        empty($info) && $this->error('投递信息不存在');
        $info->is_view = '1';
        $info->save();
        $this->success('成功', $info['resume']);
    }

    /**
     * @ApiWeigh (71)
     * @ApiTitle    (我的招聘-我发布的-查看简历-不合适)
     * @ApiSummary  (我的招聘-我发布的-查看简历-不合适)
     * @ApiMethod   (POST)
     *
     * @ApiHeaders  (name=token, type=string, required=true, description="请求的Token")
     * @ApiParams   (name="company_job_resume_id", type="inter", required=false, description="投递简历ID")
     *
     * @ApiReturn({
        "code": 1,
        "msg": "成功",
        "time": "1602417085",
        "data": {
            "total": 1, //数据总数
            "per_page": 15,
            "current_page": 1,
            "last_page": 1,
            "data": null
        }
    })
     */
    public function resumeReject()
    {
        $company_job_resume_id = $this->request->param('company_job_resume_id');
        empty($company_job_resume_id) && $this->error('缺少必需参数');
        $info = CompanyJobResume::get($company_job_resume_id);
        empty($info) && $this->error('投递信息不存在');
        $info->status = '1';
        $info->save();
        $this->success('操作成功');
    }

    /**
     * @ApiWeigh (69)
     * @ApiTitle    (我的招聘-我下载的)
     * @ApiSummary  (我的招聘-我下载的)
     * @ApiMethod   (POST)
     *
     * @ApiHeaders  (name=token, type=string, required=true, description="请求的Token")
     * @ApiParams (name="page", type="inter", required=false, description="当前页(默认1)")
     * @ApiParams (name="page_num", type="inter", required=false, description="每页显示数据个数(默认10)")
     * @ApiParams (name="type", type="inter", required=false, description="岗位类型:1=全职,2=兼职,3=其他")
     *
     * @ApiReturn({
        "code": 1,
        "msg": "成功",
        "time": "1602420197",
        "data": {
            "total": 1,
            "per_page": 15,
            "current_page": 1,
            "last_page": 1,
            "data": [{
                "id": 1, //下载ID
                "createtime": "2020.10.11 20:31", //下载时间
                "user_job": { //求职信息
                    "id": 2, //求职ID
                    "name": "怎么说", //职位名称
                    "start_time": "2020.10.11", //开始工作时间
                    "end_time": "2020.10.11", //结束工作时间
                    "salary": "9753.20", //工资
                    "address": "测试地址", //地址
                    "user": { //求职者信息
                        "id": 15, //用户ID
                        "nickname": "", //真实姓名
                        "image": "" //头像
                    },
                    "type_text": "全职", //职位类型说明
                    "qualification_arr": [] //资质证明
                }
            }]
        }
    })
     */
    public function userJob()
    {
        $page = $this->request->param('page', 1, 'intval');
        $page_num = $this->request->param('page_num', 10, 'intval');
        $type = $this->request->param('type');
        $where = [
            'ujd.status' => '0',
            'ujd.company_id' => $this->company_id,
        ];
        // 求职类型
        if(!empty($type)){
            $where['uj.type'] = $type;
        }
        $data = UserJobDownload::alias('ujd')
            ->join('mobile_user_job uj','uj.id = ujd.user_job_id')
            ->with(['user_job'=>['user']])
            ->where($where)
            ->order('ujd.createtime desc')
            ->paginate($page_num,false,['page'=>$page])
            ->each(function($v){
                $v->createtime = date('Y.m.d H:i',$v->createtime);
                $v->visible(['id','createtime','user_job']);
                $v->getRelation('user_job')->visible(['id','name','salary','start_time','end_time','address','user']);
                $v->getRelation('user_job')->getRelation('user')->visible(['id','image','nickname']);
            })->toArray();
        $this->success('成功', $data);
    }

    /**
     * @ApiWeigh (67)
     * @ApiTitle    (我的招聘-我下载的-查看简历)
     * @ApiSummary  (我的招聘-我下载的-查看简历)
     * @ApiMethod   (POST)
     *
     * @ApiHeaders  (name=token, type=string, required=true, description="请求的Token")
     * @ApiParams   (name="user_job_id", type="inter", required=false, description="求职ID")
     *
     * @ApiReturn({
        "code": 1,
        "msg": "成功",
        "time": "1602417085",
        "data": {
            "total": 1, //数据总数
            "per_page": 15,
            "current_page": 1,
            "last_page": 1,
            "data": 简历链接
        }
    })
     */
    public function userJobResumeView()
    {
        $user_job_id = $this->request->param('user_job_id');
        empty($user_job_id) && $this->error('缺少必需参数');
        $info = UserJob::get($user_job_id);
        empty($info) && $this->error('求职信息不存在');
        $this->success('成功', $info['resume']);
    }

    /**
     * @ApiWeigh (65)
     * @ApiTitle    (我的招聘-我下载的-不合适)
     * @ApiSummary  (我的招聘-我下载的-不合适)
     * @ApiMethod   (POST)
     *
     * @ApiHeaders  (name=token, type=string, required=true, description="请求的Token")
     * @ApiParams   (name="user_job_download_id", type="inter", required=false, description="下载ID")
     *
     * @ApiReturn({
        "code": 1,
        "msg": "成功",
        "time": "1602417085",
        "data": {
            "total": 1, //数据总数
            "per_page": 15,
            "current_page": 1,
            "last_page": 1,
            "data": null
        }
    })
     */
    public function userJobResumeViewReject()
    {
        $user_job_download_id = $this->request->param('user_job_download_id');
        empty($user_job_download_id) && $this->error('缺少必需参数');
        $info = UserJobDownload::get($user_job_download_id);
        empty($info) && $this->error('下载记录不存在');
        $info->status = '1';
        $info->save();
        $this->success('操作成功');
    }
}