<?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\common\library\Sms as Smslib;
use app\mobile\controller\Sms;
use app\mobile\model\Company;
use app\mobile\model\CompanyUser;
use app\mobile\model\Exam;
use app\mobile\model\CourseOrder;
use app\mobile\model\CourseAppraise;
use app\mobile\model\SecretOrder;
use app\mobile\model\ScoreSpec;
use app\mobile\model\ScoreOrder;
use app\mobile\model\QuestionCollect;
use app\mobile\model\CourseCollect;
use app\mobile\model\QuestionNote;
use app\mobile\model\Message;
use app\mobile\model\Feedback;
use app\mobile\model\Problem;
use app\mobile\model\Topic;
use app\mobile\model\TopicAppraise;
use app\mobile\model\TopicAppraiseGood;
use app\mobile\model\UserJob;
use app\mobile\model\CompanyJob;
use app\mobile\model\Statistic;
use addons\epay\library\Service;
use Endroid\QrCode\QrCode;

/**
 * 我的接口
 * @ApiWeigh (66)
 */
class User extends Api
{
	protected $noNeedLogin = ['registerUser','agreementUser','registerCompany','agreementCompany','login','resetpwd','exam','noLogin','problemList','problemInfo'];
    protected $noNeedRight = ['*'];

    public function _initialize()
    {
        parent::_initialize();
    }

    /**
     * @ApiWeigh (99)
     * @ApiTitle    (注册-个人)
     * @ApiSummary  (注册-个人)
     * @param string $mobile   手机号
     * @param string $code   验证码
     * @param string $password 密码
     */
    public function registerUser()
    {
        $mobile = $this->request->param('mobile');
        $code = $this->request->param('code');
        $password = $this->request->param('password');

        empty($mobile) && $this->error('请输入手机号');
        empty($code) && $this->error('请输入验证码');
        empty($password) && $this->error('请输入密码');
        !Validate::regex($mobile, "^1\d{10}$") && $this->error('手机号格式不正确');
        $ret = Sms::check($mobile, $code, 'register');
        !$ret && $this->error('验证码不正确');

        Db::startTrans();
        try {
            $ret = $this->auth->register($username=get_order_sn(), $password, $email='', $mobile, []);
            // 记录每日注册数量
            $statistic = Statistic::where('today',date('Y-m-d'))->find();
            if($statistic){
                $statistic->save(['register_times' => $statistic->register_times+1]);
            }else{
                (new Statistic)->save([
                    'register_times' => 1,
                    'today' => date('Y-m-d')
                ]);
            }
            Db::commit();
        } catch (PDOException $e) {
            Db::rollback();
            $this->auth->logout();
            $this->error($e->getMessage());
        } catch (Exception $e) {
            Db::rollback();
            $this->auth->logout();
            $this->error($e->getMessage());
        }
        if ($ret) {
            $this->auth->setAllowFields(['id', 'mobile', 'group_id']);
            $data = ['userinfo' => $this->auth->getUserinfo()];
            $this->success('注册成功', $data);
        } else {
            Db::rollback();
            $this->error($this->auth->getError());
        }
    }

    /**
     * @ApiWeigh (97)
     * @ApiTitle    (注册协议-个人)
     * @ApiSummary  (注册协议-个人)
     * @ApiMethod   (POST)
     *
     * @ApiReturn({
		"code": 1,
		"msg": "成功",
		"time": "1599017563",
		"data": "用户协议内容" //协议内容
	})
     */
    public function agreementUser()
    {
        $content = Db::name('mobile_config')->where('id',1)->value('user_agreement');
        $this->success('成功', $content);
    }

    /**
     * @ApiWeigh (95)
     * @ApiTitle    (注册-公司)
     * @ApiSummary  (注册-公司)
     * @param string $name   公司名称
     * @param string $address   公司地址
     * @param string $license   公司执照
     * @param string $legal_person   法人名称
     * @param string $mobile   手机号
     * @param string $code   验证码
     * @param string $password 密码
     */
    public function registerCompany()
    {
    	$name = $this->request->param('name');
        $address = $this->request->param('address');
        $license = $this->request->param('license');
        $legal_person = $this->request->param('legal_person');
        $mobile = $this->request->param('mobile');
        $code = $this->request->param('code');
        $password = $this->request->param('password');

        empty($name) && $this->error('请输入公司名称');
        empty($address) && $this->error('请输入地址');
        empty($license) && $this->error('请上传执照');
        empty($legal_person) && $this->error('请输入法人名称');
        empty($mobile) && $this->error('请输入手机号');
        empty($code) && $this->error('请输入验证码');
        empty($password) && $this->error('请输入密码');
        !Validate::regex($mobile, "^1\d{10}$") && $this->error('手机号格式不正确');
        $ret = Sms::check($mobile, $code, 'register');
        !$ret && $this->error('验证码不正确');

        Db::startTrans();
        try {
            $ret = $this->auth->register($username=get_order_sn(), $password, $email='', $mobile, []);
            $company = Company::create([
                'user_id' => $this->auth->id,
                'name' => $name,
                'address' => $address,
                'license' => $license,
                'legal_person' => $legal_person
            ]);
            // 添加企业邀请码
            $this->setInviteCode($company['id']);
            // 记录每日注册数量
            $statistic = Statistic::where('today',date('Y-m-d'))->find();
            if($statistic){
                $statistic->save(['register_times' => $statistic->register_times+1]);
            }else{
                (new Statistic)->save([
                    'register_times' => 1,
                    'today' => date('Y-m-d')
                ]);
            }
            Db::commit();
        } catch (PDOException $e) {
            Db::rollback();
            $this->auth->logout();
            $this->error($e->getMessage());
        } catch (Exception $e) {
            Db::rollback();
            $this->auth->logout();
            $this->error($e->getMessage());
        }
        if($ret){
            $this->auth->setAllowFields(['id', 'mobile', 'group_id']);
            $data = ['userinfo' => $this->auth->getUserInfo()];
        }else{
            Db::rollback();
            $this->error($this->auth->getError());
        }
        $this->success('注册成功', $data);
    }

    /**
     * @ApiWeigh (93)
     * @ApiTitle    (注册协议-公司)
     * @ApiSummary  (注册协议-公司)
     * @ApiMethod   (POST)
     *
     * @ApiReturn({
		"code": 1,
		"msg": "成功",
		"time": "1599017563",
		"data": "用户协议内容" //协议内容
	})
     */
    public function agreementCompany()
    {
        $content = Db::name('mobile_config')->where('id',1)->value('company_agreement');
        $this->success('成功', $content);
    }

    /**
     * @ApiWeigh (91)
     * @ApiTitle    (登录)
     * @ApiSummary  (登录)
     * @ApiMethod   (POST)
     *
     * @ApiParams (name="mobile", type="string", required=true, description="手机号")
     * @ApiParams (name="password", type="string", required=true, description="密码")
     *
     * @ApiReturn({
        "code": 1, 
        "msg": "登录成功", 
        "time": "1600498819", 
        "data": {
            "userinfo": {
                "id": 15, //用户ID
                "group_id": 1, //角色:0=普通用户,1=企业管理员
                "mobile": "15133120361", //用户登录手机号
                "token": "339d3a6c-c611-4961-a8e6-56a432b02a49", //token
                "user_id": 15, //用户ID
                "createtime": 1600498819, 
                "expiretime": 1603090819, 
                "expires_in": 2592000
            }
        }
    })
     */
    public function login()
    {
        $mobile = $this->request->param('mobile');
        $password = $this->request->param('password');

        empty($mobile) && $this->error('请输入手机号');
        empty($password) && $this->error('请输入密码');
        !Validate::regex($mobile, "^1\d{10}$") && $this->error('手机号格式不正确');

        Db::startTrans();
        try {
            $ret = $this->auth->login($mobile, $password);
            // 记录日活
            $statistic = Statistic::where('today',date('Y-m-d'))->find();
            if($statistic){
                $statistic->save(['active_times' => $statistic->active_times+1]);
            }else{
                (new Statistic)->save([
                    'active_times' => 1,
                    'today' => date('Y-m-d')
                ]);
            }
            Db::commit();
        } catch (PDOException $e) {
            Db::rollback();
            $this->auth->logout();
            $this->error($e->getMessage());
        } catch (Exception $e) {
            Db::rollback();
            $this->auth->logout();
            $this->error($e->getMessage());
        }
        if ($ret) {
            $this->auth->setAllowFields(['id', 'mobile', 'group_id']);
            $data = ['userinfo' => $this->auth->getUserInfo()];
            $this->success('登录成功', $data);
        } else {
            Db::rollback();
            $this->error($this->auth->getError());
        }
    }

    /**
     * @ApiWeigh (89)
     * @ApiTitle    (忘记密码)
     * @ApiSummary  (忘记密码)
     *
     * @param string $mobile      手机号
     * @param string $newpassword 新密码
     * @param string $code     验证码
     */
    public function resetpwd()
    {
        $mobile = $this->request->request("mobile");
        $code = $this->request->request("code");
        $newpassword = $this->request->request("newpassword");

        empty($mobile) && $this->error('请输入手机号');
        empty($newpassword) && $this->error('请输入密码');
        !Validate::regex($mobile, "^1\d{10}$") && $this->error('手机号格式不正确');
        $user = \app\common\model\User::getByMobile($mobile);
        !$user && $this->error('用户不存在');
        $ret = Sms::check($mobile, $code, 'resetpwd');
        !$ret && $this->error('验证码不正确');

        Smslib::flush($mobile, 'resetpwd');
        //模拟一次登录
        $this->auth->direct($user->id);
        $ret = $this->auth->changepwd($newpassword, '', true);
        if ($ret) {
            $this->success('重置密码成功');
        } else {
            $this->error($this->auth->getError());
        }
    }

    /**
     * @ApiWeigh (85)
     * @ApiTitle    (暂不登录提示)
     * @ApiSummary  (暂不登录提示)
     * @ApiMethod   (POST)
     *
     * @ApiReturn({
		"code": 1,
		"msg": "成功",
		"time": "1599017563",
		"data": "暂不登录提示内容" //暂不登录提示内容
	})
     */
    public function noLogin()
    {
        $content = Db::name('mobile_config')->where('id',1)->value('no_login');
        $this->success('成功', $content);
    }

    /**
     * @ApiWeigh (83)
     * @ApiTitle    (我的-首页)
     * @ApiSummary  (我的-首页)
     * @ApiMethod   (POST)
     *
     * @ApiReturn({
        "code": 1,
        "msg": "成功",
        "time": "1602813642",
        "data": {
            "id": 15,
            "group_id": 1, //身份:0=个人用户,1=企业用户
            "username": "",
            "nickname": "", //真实姓名
            "password": "743fee718194570689974bad08666a56",
            "salt": "UDnPtj",
            "email": "",
            "mobile": "15133120361",
            "avatar": "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZlcnNpb249IjEuMSIgaGVpZ2h0PSIxMDAiIHdpZHRoPSIxMDAiPjxyZWN0IGZpbGw9InJnYigxNjAsMjI5LDE3OSkiIHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAiIGhlaWdodD0iMTAwIj48L3JlY3Q+PHRleHQgeD0iNTAiIHk9IjUwIiBmb250LXNpemU9IjUwIiB0ZXh0LWNvcHk9ImZhc3QiIGZpbGw9IiNmZmZmZmYiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHRleHQtcmlnaHRzPSJhZG1pbiIgYWxpZ25tZW50LWJhc2VsaW5lPSJjZW50cmFsIj48L3RleHQ+PC9zdmc+",
            "level": 1,
            "gender": 0,
            "birthday": null,
            "bio": "",
            "money": "0.00",
            "score": 0,
            "successions": 1,
            "maxsuccessions": 3,
            "prevtime": 1601340700,
            "logintime": 1602242130,
            "loginip": "127.0.0.1",
            "loginfailure": 0,
            "joinip": "127.0.0.1",
            "jointime": 1599914736,
            "createtime": 1599914736,
            "updatetime": 1602242130,
            "token": "",
            "status": "normal",
            "verification": {
                "email": 0,
                "mobile": 0
            },
            "pwd": null,
            "card": null,
            "sex": null,
            "phone": null,
            "work_address": null,
            "image": "", //头像
            "expirationtime": null,
            "studynum": null,
            "message_count": 1, //未读消息数量
            "url": "/u/15"
        }
    })
     */
    public function index()
    {
        $user = $this->auth->getUser();
        $user->image = !empty($user->image) ? cdnurl($user->image,true) : '';
        $user->message_count = Message::where('user_id',$user->id)->where('is_read','0')->count();
        $this->success('成功', $user);
    }

    /**
     * @ApiWeigh (81)
     * @ApiTitle    (我的-修改会员个人信息)
     * @ApiSummary  (我的-修改会员个人信息)
     *
     * @param string $image   头像地址
     * @param string $username 用户名
     * @param string $nickname 真实姓名
     * @param int $sex 性别1男0女
     */
    public function profile()
    {
        $user = $this->auth->getUser();
        $username = $this->request->param('username');
        $nickname = $this->request->param('nickname');
        $image = $this->request->param('image', '', 'trim,strip_tags,htmlspecialchars');
        $sex = $this->request->param('sex');
        if($username || $nickname || $image || in_array($sex,[0,1])) {
            if ($username) {
                $user->username = $username;
            }
            if ($nickname) {
                $user->nickname = $nickname;
            }
            if ($image) {
                $user->image = $image;
            }
            if (in_array($sex,[0,1])) {
                $user->sex = $sex;
            }
            $user->save();
        }
        $this->success();
    }

    /**
     * @ApiWeigh (79)
     * @ApiTitle    (修改手机号-第一步)
     * @ApiSummary  (修改手机号-第一步)
     * @param string $code 验证码
     */
    public function changemobile1()
    {
        $user = $this->auth->getUser();
        $code = $this->request->param('code');
        !$code && $this->error(__('请输入验证码'));
        $ret = Sms::check($user['mobile'], $code, 'changemobile1');
        !$ret && $this->error('验证码不正确');
        Smslib::flush($user['mobile'], 'changemobile1');
        $this->success();
    }

    /**
     * @ApiWeigh (77)
     * @ApiTitle    (修改手机号-第二步)
     * @ApiSummary  (修改手机号-第二步)
     *
     * @param string $mobile 新手机号
     * @param string $code 验证码
     */
    public function changemobile2()
    {
        $user = $this->auth->getUser();
        $mobile = $this->request->param('mobile');
        $code = $this->request->param('code');
        if (!$mobile || !$code) {
            $this->error(__('Invalid parameters'));
        }
        if (!Validate::regex($mobile, "^1\d{10}$")) {
            $this->error(__('Mobile is incorrect'));
        }
        if (\app\common\model\User::where('mobile', $mobile)->where('id', '<>', $user->id)->find()) {
            $this->error(__('Mobile already exists'));
        }
        $result = Sms::check($mobile, $code, 'changemobile2');
        if (!$result) {
            $this->error(__('Captcha is incorrect'));
        }
        $verification = $user->verification;
        $verification->mobile = 1;
        $user->verification = $verification;
        $user->mobile = $mobile;
        $user->save();

        Smslib::flush($mobile, 'changemobile2');
        $this->success();
    }

    /**
     * @ApiWeigh (76)
     * @ApiTitle    (加入企业-查询企业)
     * @ApiSummary  (加入企业-查询企业)
     * @ApiMethod   (POST)
     *
     * @ApiParams (name="keyword", type="string", required=true, description="关键字")
     *
     * @ApiReturn({
        "code": 1,
        "msg": "成功",
        "time": "1602310974",
        "data": [{
            "id": 7, //企业ID
            "name": "测试公司" //企业名称
        }]
    })
     */
    public function companyList()
    {
        $keyword = $this->request->param('keyword');
        empty($keyword) && $this->error('请输入关键字');
        $list = Company::where('status','1')
            ->where('name','like','%'.$keyword.'%')
            ->field('id,name')
            ->select();
        count($list) <= 0 && $this->error('未查找到该企业');
        $this->success('成功',$list);
    }

    /**
     * @ApiWeigh (75)
     * @ApiTitle    (加入企业)
     * @ApiSummary  (加入企业)
     *
     * @param string $company_id 企业ID
     * @param string $name 姓名
     * @param string $mobile 手机号
     * @param string $invite_code 验证码
     */
    public function joinCompany()
    {
        $company_id = $this->request->param('company_id');
        $name = $this->request->param('name');
        $mobile = $this->request->param('mobile');
        $invite_code = $this->request->param('invite_code');
        // 验证传参
        empty($company_id) && $this->error('缺少必需参数');
        empty($name) && $this->error('请填写姓名');
        empty($mobile) && $this->error('请填写联系方式');
        empty($invite_code) && $this->error('请填写邀请码');
        !Validate::regex($mobile, "^1\d{10}$") && $this->error(__('Mobile is incorrect'));
        // 验证邀请码
        $company = Company::where('invite_code',$invite_code)
            ->where('id',$company_id)
            ->field('id')
            ->find();
        empty($company) && $this->error('邀请码错误,请输入正确的邀请码');
        // 验证申请状态
        $company_user = CompanyUser::where('company_id',$company['id'])
            ->where('user_id',$this->auth->id)
            ->field('status')
            ->find();
        if($company_user){
            if($company_user['status'] == '0'){
                $this->error('正在申请中,请勿重复提交申请');
            }
            if($company_user['status'] == '1'){
                $this->error('加入企业成功,请勿重复提交申请');
            }
        }
        CompanyUser::create([
            'user_id' => $this->auth->id,
            'company_id' => $company_id,
            'name' => $name,
            'mobile' => $mobile
        ]);
        $this->success('已成功提交,请提醒企业管理员及时审核');
    }

    /**
     * 更新企业邀请码
     * @ApiInternal
     * @param string $company_id 企业ID
     */
    public function setInviteCode($company_id){
        $code = mt_rand(100000,999999);
        $find = Company::where('invite_code',$code)->field('id')->find();
        if(!$find){
            Company::where('id',$company_id)->setField('invite_code',$code);
            return $code;
        }else{
            $this->setInviteCode($company_id);
        }
    }

    /**
     * @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)")
     *
     * @ApiReturn({
        "code": 1,
        "msg": "成功",
        "time": "1600081718",
        "data": {
			"total": 1, // 数据总数
			"list": [{
	            "id": 9, //课程订单ID
	            "pay_price": "50.00", //实际支付金额
	            "course": { //课程信息
	                "id": 1, //课程ID
	                "title": "测试课程", //课程标题
	                "cover": "" //课程封面图
	            },
	            "is_have_qi": 0 //是否有企字:0=否,1=是
	            "is_have_appraise": 0 //是否已评价:0=否,1=是
	        }]
        }
    })
     */
    public function myCourse(){
    	$page = $this->request->param('page', 1, 'intval');
        $page_num = $this->request->param('page_num', 10, 'intval');
        // 我加入的企业购买的课程
        $company_course_list = CourseOrder::alias('co')
            ->join('mobile_company_user cu','cu.company_id = co.company_id')
            ->where('cu.user_id',$this->auth->id)
            ->where('cu.status','1')
            ->field('co.id,co.company_id,co.people_num,co.is_top')
            ->select();
        // 查询我是否可以享受企业课程(按企业审核时间排队,没在队伍里就无法享受企业课程)
        $course_id_arr = [];
        foreach ($company_course_list as $v) {
            if($v['is_top'] == '1'){
                $course_id_arr[] = $v['id'];
                continue;
            }
            $user_id_arr = CompanyUser::where('company_id',$v['company_id'])
                ->where('status','1')
                ->order('updatetime asc')
                ->limit($v['people_num'])
                ->column('user_id');
            if(in_array($this->auth->id,$user_id_arr)){
                $course_id_arr[] = $v['id'];
            }
        }
        // 查找所有课程
        $data = CourseOrder::with(['course'])
            ->where(function($query)use($course_id_arr){
                $query->where('user_id', $this->auth->id)->whereor('id', 'in', $course_id_arr);
            })
            ->where('pay_status','1')
            ->order('createtime desc')
            ->paginate($page_num,false,['page'=>$page])
            ->each(function($v)use($course_id_arr){
                // 是否有企字
	            $v['is_have_qi'] = in_array($v['id'], $course_id_arr) ? 1 : 0;
	            // 是否已评价
	            $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','course'])->append(['is_have_qi','is_have_appraise']);
	            $v->getRelation('course')->visible(['id','cover','title']);
            })->toArray();
        $this->success('成功',['total'=>$data['total'],'list'=>$data['data']]);
    }

    /**
     * @ApiWeigh (71)
     * @ApiTitle    (我的课程-评价页面)
     * @ApiSummary  (我的课程-评价页面)
     * @ApiMethod   (POST)
     *
     * @ApiHeaders  (name=token, type=string, required=true, description="请求的Token")
     * @ApiParams (name="course_order_id", type="int", required=true, description="课程订单ID")
     *
     * @ApiReturn({
        "code": 1,
        "msg": "成功",
        "time": "1600084253",
        "data": {
            "id": 10, //课程订单ID
            "pay_price": "50.00", //实际支付金额
            "course": { //课程信息
                "title": "测试课程", //课程标题
                "cover": "" //课程封面图
            },
            "is_have_qi": 0 //是否有企字:0=否,1=是
        }
    })
     */
    public function appraiseView(){
        $course_order_id = $this->request->param('course_order_id');
        empty($course_order_id) && $this->error('缺少必需参数');
        $info = CourseOrder::get($course_order_id,['course']);
        empty($info) && $this->error('课程订单不存在');
        $user_id_arr = CompanyUser::where('company_id',$info['company_id'])
            ->where('status','1')
            ->order('updatetime asc')
            ->limit($info['people_num'])
            ->column('user_id');
        $info['is_have_qi'] = in_array($this->auth->id,$user_id_arr) ? 1 : 0;
        $info->visible(['id','pay_price','course'])->append(['is_have_qi']);
        $info->getRelation('course')->visible(['cover','title']);
        $this->success('成功',$info);
    }

    /**
     * @ApiWeigh (69)
     * @ApiTitle    (我的课程-评价)
     * @ApiSummary  (我的课程-评价)
     * @ApiMethod   (POST)
     *
     * @ApiHeaders  (name=token, type=string, required=true, description="请求的Token")
     * @ApiParams (name="course_order_id", type="int", required=true, description="课程订单ID")
     * @ApiParams (name="star", type="int", required=true, description="评价星数")
     * @ApiParams (name="content", type="int", required=true, description="评价内容")
     *
     * @ApiReturn({
        "code": 1,
        "msg": "成功",
        "time": "1600084253",
        "data": null
    })
     */
    public function appraise(){
        $course_order_id = $this->request->param('course_order_id');
        $star = $this->request->param('star');
        $content = $this->request->param('content');
        empty($course_order_id) && $this->error('缺少必需参数');
        empty($star) && $this->error('请选择星数');
        empty($content) && $this->error('请填写评价内容');
        $info = CourseOrder::get($course_order_id,['course']);
        empty($info) && $this->error('课程订单不存在');
        CourseAppraise::create([
            'user_id' => $this->auth->id,
            'course_id' => $info['course_id'],
            'course_order_id' => $info['id'],
            'star' => $star,
            'content' => $content
        ]);
        $this->success('评价成功');
    }

    /**
     * @ApiWeigh (67)
     * @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)")
     *
     * @ApiReturn({
        "code": 1,
        "msg": "成功",
        "time": "1600081718",
        "data": {
			"total": 1, // 数据总数
			"list": [{
	            "id": 9, //密卷订单ID
	            "pay_price": "50.00", //实际支付金额
	            "secret": { //密卷信息
	                "id": 1, //密卷ID
	                "title": "测试密卷", //密卷标题
	                "do_num": "" //做过人数
	            },
	            "is_have_qi": 0 //是否有企字:0=否,1=是
	        }]
        }
    })
     */
    public function mySecret(){
    	$page = $this->request->param('page', 1, 'intval');
        $page_num = $this->request->param('page_num', 10, 'intval');
        // 我加入的企业购买的密卷
        $company_secret_list = SecretOrder::alias('a')
            ->join('mobile_company_user b','b.company_id = a.company_id')
            ->where('b.user_id',$this->auth->id)
            ->where('b.status','1')
            ->field('a.id,a.company_id,a.people_num,a.is_top')
            ->select();
        // 查询我是否可以享受企业密卷(按企业审核时间排队,没在队伍里就无法享受企业密卷)
        $secret_id_arr = [];
        foreach ($company_secret_list as $v) {
            if($v['is_top'] == '1'){
                $secret_id_arr[] = $v['id'];
                continue;
            }
            $user_id_arr = CompanyUser::where('company_id',$v['company_id'])
                ->where('status','1')
                ->order('updatetime asc')
                ->limit($v['people_num'])
                ->column('user_id');
            if(in_array($this->auth->id,$user_id_arr)){
                $secret_id_arr[] = $v['id'];
            }
        }
        // 查找所有密卷
        $data = SecretOrder::with(['secret'])
            ->where(function($query)use($secret_id_arr){
                $query->where('user_id', $this->auth->id)->whereor('id', 'in', $secret_id_arr);
            })
            ->where('pay_status','1')
            ->order('createtime desc')
            ->paginate($page_num,false,['page'=>$page])
            ->each(function($v)use($secret_id_arr){
                // 是否有企字
	            $v['is_have_qi'] = in_array($v['id'], $secret_id_arr) ? 1 : 0;
	            $v->visible(['id','pay_price','secret'])->append(['is_have_qi']);
	            $v->getRelation('secret')->visible(['id','title']);
            })->toArray();
        $this->success('成功',['total'=>$data['total'],'list'=>$data['data']]);
    }

    /**
     * @ApiWeigh (65)
     * @ApiTitle    (我的积分)
     * @ApiSummary  (我的积分)
     * @ApiMethod   (POST)
     *
     * @ApiHeaders  (name=token, type=string, required=true, description="请求的Token")
     *
     * @ApiReturn({
		"code": 1,
		"msg": "成功",
		"time": "1600135095",
		"data": {
			"id": 16, //用户ID
			"score": 0, //当前积分
			"url": "/u/16",
			"max_score": 0 //累计积分
		}
	})
     */
    public function myScore(){
        $user = $this->auth->getUser();
        $user['max_score'] = db('user_score_log')->where('user_id',$user['id'])->max('after');
        $user = $user->visible(['id','score'])->append(['max_score'])->toArray();
        $this->success('成功',$user);
    }

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

    /**
     * @ApiWeigh (61)
     * @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)")
     *
     * @ApiReturn({
        "code": 1,
        "msg": "成功",
        "time": "1599017563",
        "data": "积分说明" //积分说明内容
    })
     */
    public function scoreLog()
    {
    	$page = $this->request->param('page', 1, 'intval');
        $page_num = $this->request->param('page_num', 10, 'intval');
        $data = \app\common\model\ScoreLog::where('user_id',$this->auth->id)
        	->order('createtime desc')
        	->paginate($page_num,false,['page'=>$page])
            ->each(function($v){
                $v['createtime'] = date('Y.m.d H:i',$v['createtime']);
            })->toArray();
        $this->success('成功', ['total'=>$data['total'],'list'=>$data['data']]);
    }

    /**
     * @ApiWeigh (59)
     * @ApiTitle    (海报分享)
     * @ApiSummary  (海报分享)
     * @ApiMethod   (POST)
     *
     * @ApiHeaders (name=token, type=string, required=true, description="请求的Token")
     *
     * @ApiReturn({
        "code": 1,
        "msg": "成功",
        "time": "1599017563",
        "data": {
            "url": "http://www.enterprise.top/qrcode/20201017/52b77af2efe121e124c1b26d4d0d7f43.png", //海报地址
        }
    })
     */
    public function share()
    {
        $user = \app\mobile\model\User::get($this->auth->id);
        empty($user['image']) && $this->error('请先上传用户头像');
        //将用户的头像保存到本地
        $user_dir = 'uploads/user';
        if (!file_exists($user_dir)){
           mkdir($user_dir,0777,true);
        }
        $user_image = $user_dir.'/'.$user['id'].'.png';
        file_put_contents($user_image,file_get_contents($user['image']));
        createRoundImg($user_image);
        \think\Image::open($user_image)->thumb(73,73,\think\Image::THUMB_CENTER)->save($user_image);

        $image = \think\Image::open(ROOT_PATH.'public/assets/img/poster_qr_bg1.png');
        $path_ttf = ROOT_PATH.'public/assets/fonts/PingFang.ttf';
        // 我的二维码
        $qrCode = new QrCode();
        $qrCode
           ->setText($user['id'])
           ->setSize(210)
           ->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);
        $user_code = $user_dir.'/qrcode_'.$user['id'].'.png';
        // save it to a file
        $qrCode->save($user_code);
        $user_poster = $user_dir.'/poster_'.$user['id'].'.png';
        $desc = "我正在“精工筑匠”\n学习“一级建造师资格证考试”\n来和我一起学习吧!";
        $image->text('我的海报',$path_ttf,14,'#ffffff',[150,54])
           ->water(ROOT_PATH.'public/assets/img/poster_qr_bg2.png',[11,158])
           ->water(ROOT_PATH.'public/'.$user_code,[73,242])
           ->text('扫描二维码下载APP',$path_ttf,12,'#06121F',[120,486])
           ->text($desc,$path_ttf,12,'#ffffff',[45,594])
           ->water($user_image,[260,590])
           ->save($user_poster);
        // 删除头像
        is_file($user_image) && @unlink($user_image);
        // 删除二维码
        is_file($user_code) && @unlink($user_code);
        $url = request()->domain().'/'.$user_poster;
        $this->success('成功',compact('url'));
    }

    /**
     * @ApiWeigh (57)
     * @ApiTitle    (充值积分-套餐)
     * @ApiSummary  (充值积分-套餐)
     * @ApiMethod   (POST)
     *
     * @ApiReturn({
        "code": 1,
        "msg": "成功",
        "time": "1599017563",
        "data": "积分说明" //积分说明内容
    })
     */
    public function scoreSpec()
    {
        $list = ScoreSpec::select();
        $score_recharge_price = Db::name('mobile_config')->where('id',1)->value('score_recharge_price');
        $this->success('成功', compact('list','score_recharge_price'));
    }

    /**
     * @ApiWeigh (55)
     * @ApiTitle    (积分充值预览)
     * @ApiSummary  (积分充值预览)
     * @ApiMethod   (POST)
     *
     * @ApiHeaders (name=token, type=string, required=true, description="请求的Token")
     * @ApiParams (name="score_spec_id", type="int", required=false, description="套餐ID")
     * @ApiParams (name="score", type="int", required=false, description="自定义积分")
     *
     * @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 scoreRechargeView()
    {
        $param = $this->request->param();
        $model = new ScoreOrder;
        if(!$order = $model->payView($this->auth->getUser(),$param)){
            $this->error($model->getError(),null,$this->model->getCode());
        }
        $this->success(__('成功'),$order);
    }

    /**
     * @ApiWeigh (53)
     * @ApiTitle    (充值积分)
     * @ApiSummary  (充值积分)
     * @ApiMethod   (POST)
     *
     * @ApiHeaders  (name=token, type=string, required=true, description="请求的Token")
     * @ApiParams (name="score_spec_id", type="int", required=false, description="积分套餐ID")
     * @ApiParams (name="score", type="int", required=false, description="自定义积分")
     * @ApiParams (name="pay_type", type="string", required=true, description="支付方式:wechat=微信,alipay=支付宝")
     *
     * @ApiReturn({
        "code": 1,
        "msg": "成功",
        "time": "1599017563",
        "data": "积分说明" //积分说明内容
    })
     */
    public function scoreRecharge()
    {
    	$param = $this->request->param();
    	$model = new ScoreOrder;
        if(!$order = $model->payView($this->auth->getUser(),$param)){
            $this->error($model->getError(),null,$this->model->getCode());
        }
        if (!$param['pay_type'] || !in_array($param['pay_type'], ['alipay', 'wechat'])) {
            $this->error("请选择支付方式");
        }
        // 创建订单
        $model->add($this->auth->getUser(), $order, $param['pay_type']);
        //回调链接
        $notifyurl = $this->request->root(true) . '/mobile/notify/notifyScore/paytype/' . $param['pay_type'];
        $payment = Service::submitOrder($model['pay_price'], $model['order_sn'], $param['pay_type'], '积分', $notifyurl, null, 'app');
        $this->success('成功',$payment);
    }

    /**
     * @ApiWeigh (51)
     * @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)")
     *
     * @ApiReturn({
		"code": 1,
		"msg": "成功",
		"time": "1600162242",
		"data": {
			"total": 1, // 题目总数
			"list": [{
				"id": 1, 
				"user_id": 16, //用户ID
				"question_id": 1, //题目ID
				"createtime": "2020.09.03 19:25", //收藏时间
				"question": { //题目信息
					"title": "测定混凝土立方体抗压强度时,标准试件的尺寸是(      )㎜。", //题目
					"type": "1" //题目类型:1=单选题,2=多选题,3=判断题,4=简答题
				}
			}]
		}
	})
     */
    public function collectQuestionList()
    {
        $page = $this->request->param('page', 1, 'intval');
        $page_num = $this->request->param('page_num', 10, 'intval');
        $data = QuestionCollect::with(['question'])
        	->where('user_id',$this->auth->id)
        	->order('createtime desc')
        	->paginate($page_num,false,['page'=>$page])
            ->each(function($v){
                $v['createtime'] = date('Y.m.d H:i',$v['createtime']);
                $v->getRelation('question')->visible(['title','type']);
            })->toArray();
        $this->success('成功', ['total'=>$data['total'],'list'=>$data['data']]);
    }

    /**
     * @ApiWeigh (49)
     * @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)")
     *
     * @ApiReturn({
		"code": 1,
		"msg": "成功",
		"time": "1600164731",
		"data": {
			"total": 1, //数据总数
			"list": [{
				"id": 1,
				"user_id": 16, //用户ID
				"course_id": 1, //课程ID
				"createtime": "2020.09.03 19:25", //收藏时间
				"course": { //课程信息
					"title": "测试课程", //课程标题
					"cover": "", //课程封面图
					"current_price": "50.00", //现价
					"original_price": "100.00" //原价
				}
			}]
		}
	})
     */
    public function collectCourseList()
    {
        $page = $this->request->param('page', 1, 'intval');
        $page_num = $this->request->param('page_num', 10, 'intval');
        $data = CourseCollect::with(['course'])
        	->where('user_id',$this->auth->id)
        	->order('createtime desc')
        	->paginate($page_num,false,['page'=>$page])
            ->each(function($v){
                $v['createtime'] = date('Y.m.d H:i',$v['createtime']);
                $v->getRelation('course')->visible(['cover','title','current_price','original_price','study_num']);
            })->toArray();
        $this->success('成功', ['total'=>$data['total'],'list'=>$data['data']]);
    }

    /**
     * @ApiWeigh (47)
     * @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)")
     *
     * @ApiReturn({
		"code": 1,
		"msg": "成功",
		"time": "1600165190",
		"data": {
			"total": 1, //数据总数
			"list": [{
				"id": 3, //笔记ID
				"user_id": 16, //用户ID
				"question_id": 5, //题目ID
				"content": "这就是街舞", //笔记内容
				"createtime": "2020.09.10 19:15", //收藏时间
				"updatetime": 1599736531,
				"question": { //题目信息
					"title": "测试多选", //题目标题
					"type": "2" //题目类型:1=单选题,2=多选题,3=判断题,4=简答题
				}
			}]
		}
	})
     */
    public function collectNoteList()
    {
        $page = $this->request->param('page', 1, 'intval');
        $page_num = $this->request->param('page_num', 10, 'intval');
        $data = QuestionNote::with(['question'])
        	->where('user_id',$this->auth->id)
        	->order('createtime desc')
        	->paginate($page_num,false,['page'=>$page])
            ->each(function($v){
                $v['createtime'] = date('Y.m.d H:i',$v['createtime']);
                $v->getRelation('question')->visible(['title','type']);
            })->toArray();
        $this->success('成功', ['total'=>$data['total'],'list'=>$data['data']]);
    }

    /**
     * @ApiWeigh (45)
     * @ApiTitle    (我的收藏-笔记-删除)
     * @ApiSummary  (我的收藏-笔记-删除)
     * @ApiMethod   (POST)
     *
     * @ApiHeaders  (name=token, type=string, required=true, description="请求的Token")
     * @ApiParams   (name="question_note_id", type="inter", required=false, description="当前页(默认1)")
     *
     * @ApiReturn({
		"code": 1,
		"msg": "删除成功",
		"time": "1600165190",
		"data": null
	})
     */
    public function noteDelete()
    {
        $question_note_id = $this->request->param('question_note_id');
        empty($question_note_id) && $this->error('缺少必需参数');
        $info = QuestionNote::get($question_note_id);
        empty($info) && $this->error('笔记信息不存在');
        $info->delete();
        $this->success('删除成功');
    }

    /**
     * @ApiWeigh (44)
     * @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)")
     *
     * @ApiReturn({
        "code": 1,
        "msg": "成功",
        "time": "1602813893",
        "data": {
            "total": 1, //数据总数
            "list": [{
                "id": 7, //消息ID
                "title": "这是个消息", //消息标题
                "is_read": "1", //是否已读:0=否,1=是
                "createtime": "2020.09.12 20:45" //发送时间
            }]
        }
    })
     */
    public function messageList()
    {
        $page = $this->request->param('page', 1, 'intval');
        $page_num = $this->request->param('page_num', 10, 'intval');
        $data = Message::where('user_id',$this->auth->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','title','is_read','createtime']);
            })->toArray();
        $this->success('成功', ['total'=>$data['total'],'list'=>$data['data']]);
    }

    /**
     * @ApiWeigh (43)
     * @ApiTitle    (消息-一键已读)
     * @ApiSummary  (消息-一键已读)
     * @ApiMethod   (POST)
     *
     * @ApiHeaders  (name=token, type=string, required=true, description="请求的Token")
     *
     * @ApiReturn({
        "code": 1,
        "msg": "成功",
        "time": "1600167138",
        "data": {
            "total": 1, //数据总数
            "list": [{
                "id": 7, //消息ID
                "title": "这是个消息", //消息标题
                "createtime": "2020.09.12 20:45" //发送时间
            }]
        }
    })
     */
    public function allRead()
    {
        Message::where('user_id',$this->auth->id)->update(['is_read'=>'1']);
        $this->success('成功');
    }

    /**
     * @ApiWeigh (43)
     * @ApiTitle    (消息-详情)
     * @ApiSummary  (消息-详情)
     * @ApiMethod   (POST)
     *
     * @ApiHeaders  (name=token, type=string, required=true, description="请求的Token")
     * @ApiParams   (name="message_id", type="inter", required=true, description="消息ID")
     *
     * @ApiReturn({
		"code": 1,
		"msg": "成功",
		"time": "1600167441",
		"data": {
			"id": 7, //消息ID
			"user_id": 16, //用户ID
			"title": "这是个消息", //消息标题
			"content": "这个消息还不错Q", //消息内容
			"is_read": "1", //是否已读:0=否,1=是
			"createtime": 1599914736,
			"updatetime": 1600167441
		}
	})
     */
    public function messageInfo()
    {
        $message_id = $this->request->param('message_id');
        empty($message_id) && $this->error('缺少必需参数');
        $info = Message::get($message_id);
        empty($info) && $this->error('消息不存在');
        $info->save(['is_read'=>'1']);
        $this->success('成功', $info);
    }

    /**
     * @ApiWeigh (41)
     * @ApiTitle    (意见反馈-错误类型)
     * @ApiSummary  (意见反馈-错误类型)
     * @ApiMethod   (POST)
     *
     * @ApiReturn({
		"code": 1,
		"msg": "成功",
		"time": "1600167441",
		"data": {
			"id": 7, //消息ID
			"user_id": 16, //用户ID
			"title": "这是个消息", //消息标题
			"content": "这个消息还不错Q", //消息内容
			"is_read": "1", //是否已读:0=否,1=是
			"createtime": 1599914736,
			"updatetime": 1600167441
		}
	})
     */
    public function feedbackWrong()
    {
        $list = Db::name('mobile_feedback_wrong')->field('id,name')->select();
        $this->success('成功', $list);
    }

    /**
     * @ApiWeigh (39)
     * @ApiTitle    (意见反馈)
     * @ApiSummary  (意见反馈)
     * @ApiMethod   (POST)
     *
     * @ApiHeaders  (name=token, type=string, required=true, description="请求的Token")
     * @ApiParams   (name="feedback_wrong_id", type="inter", required=true, description="错误类型ID")
     * @ApiParams   (name="content", type="string", required=true, description="反馈内容")
     *
     * @ApiReturn({
		"code": 1,
		"msg": "成功",
		"time": "1600167441",
		"data": {
			"id": 7, //消息ID
			"user_id": 16, //用户ID
			"title": "这是个消息", //消息标题
			"content": "这个消息还不错Q", //消息内容
			"is_read": "1", //是否已读:0=否,1=是
			"createtime": 1599914736,
			"updatetime": 1600167441
		}
	})
     */
    public function feedback()
    {
        $feedback_wrong_id = $this->request->param('feedback_wrong_id');
        $content = $this->request->param('content');
        empty($feedback_wrong_id) && $this->error('请选择错误类型');
        empty($content) && $this->error('请填写反馈内容');
        Feedback::create([
        	'user_id' => $this->auth->id,
        	'feedback_wrong_id' => $feedback_wrong_id,
        	'content' => $content
        ]);
        $this->success('反馈成功');
    }

    /**
     * @ApiWeigh (37)
     * @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)")
     *
     * @ApiReturn({
        "code": 1,
        "msg": "成功",
        "time": "1602300901",
        "data": {
            "total": 1, //数据总数
            "list": [{
                "id": 1, //话题ID
                "title": "公司即将上市", //话题标题
                "cover": "http://qizhibang.brotop.cn/uploads/20201009/9bc002db9517fe79f93478550a979768.jpg", //封面图
                "content": "他咯土佐玉木桶浴", //话题内容
                "good_num": 3, //点赞量
                "appraise_num": 3, //评价量
                "download_num": 0, //下载量
                "createtime": "2020.09.29 09:11", //发布时间
                "user": { //发布者信息
                    "id": 15, //用户ID
                    "nickname": "", //昵称
                    "image": "" //头像
                },
                "imgs": [ //发布内容图片
                    "http://qizhibang.brotop.cn/uploads/20201010/dd2b86d8186f0e89735798d6f9a8f56c.jpg"
                ]
            }]
        }
    })
     */
    public function topicList()
    {
        $page = $this->request->param('page', 1, 'intval');
        $page_num = $this->request->param('page_num', 10, 'intval');
        $data = Topic::with(['user'])
            ->withCount(['good'=>'good_num'])
            ->withCount(['appraise'=>'appraise_num'])
            ->where('status','1')
        	->where('user_id',$this->auth->id)
        	->order('createtime desc')
        	->paginate($page_num,false,['page'=>$page])
            ->each(function($v){
                // 发布时间格式化
                $v->createtime = date('Y.m.d H:i',$v->createtime);
                // 过滤标签
                $content1 = htmlspecialchars_decode($v->content);
                $content2 = str_replace(['&nbsp;','&emsp;'],['',''],$content1);
                $v->content = strip_tags($content2);
                // 拼装图片
                $imgs = str_replace('\\','',strip_tags($content2, '<img>'));
                //$matches[1] 为图片路径数组
                preg_match_all('/\<img\s+src\=\"([\w:\/\.]+)\"/', $imgs, $matches);
                // 不小于3张就显示3张,小于3张就显示1张图片
                $v->imgs = count($matches[1]) >=3 ? array_slice($matches[1],0,3) : (count($matches[1]) >=1 ? array_slice($matches[1],0,1) : []);
                // 显示数据
                $v->visible(['id','title','cover','content','createtime','download_num','user','good_num','appraise_num'])->append(['imgs']);
                $v->getRelation('user')->visible(['id','image','nickname']);
            })->toArray();
        $this->success('成功', ['total'=>$data['total'],'list'=>$data['data']]);
    }

    /**
     * @ApiWeigh (36)
     * @ApiTitle    (我的帖子-删除)
     * @ApiSummary  (我的帖子-删除)
     * @ApiMethod   (POST)
     *
     * @ApiHeaders (name=token, type=string, required=true, description="请求的Token")
     * @ApiParams (name="topic_id", type="inter", required=false, description="话题ID")
     *
     * @ApiReturn({
        "code": 1,
        "msg": "成功",
        "time": "1602300901",
        "data": null
    })
     */
    public function topicDel()
    {
        $topic_id = $this->request->param('topic_id');
        empty($topic_id) && $this->error('缺少必需参数');
        $info = Topic::get(['id'=>$topic_id,'user_id'=>$this->auth->id]);
        empty($info) && $this->error('话题信息不存在');
        Db::startTrans();
        try {
            // 删除点赞
            $info->good()->delete();
            // 删除评论点赞
            TopicAppraiseGood::where('topic_appraise_id','in',array_column($info->appraise,'id'))->delete();
            // 删除评论
            $info->appraise()->delete();
            // 删除附件
            $info->attachment()->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 (35)
     * @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)")
     *
     * @ApiReturn({
        "code": 1,
        "msg": "成功",
        "time": "1602334544",
        "data": {
            "total": 3, //数据总数
            "list": [{
                "id": 4, //评论ID
                "content": "这就是街舞,say hei", //评论内容
                "createtime": "2020.10.10 20:55", //评论时间
                "user": { //评论者信息
                    "id": 15, //用户ID
                    "nickname": "" //真实姓名
                },
                "topic": { //话题信息
                    "id": 1, //话题ID
                    "title": "公司即将上市" //话题标题
                }
            }]
        }
    })
     */
    public function topicCueMe()
    {
        $page = $this->request->param('page', 1, 'intval');
        $page_num = $this->request->param('page_num', 10, 'intval');
        // 评论我的文章的评论
        $id_arr1 = TopicAppraise::alias('ta')
            ->join('mobile_topic t','t.id = ta.topic_id')
            ->where('ta.pid',0)
            ->where('ta.is_replied','0')
            ->column('ta.id');
        // @我的评论
        $id_arr2 = TopicAppraise::alias('ta')
            ->join('mobile_topic_appraise ta1','ta1.id = ta.cue_appraise_id')
            ->where('ta1.user_id',$this->auth->id)
            ->where('ta.is_replied','0')
            ->column('ta.id');
        $id_arr = array_unique(array_merge($id_arr1, $id_arr2));
        $data = TopicAppraise::with(['user','topic'])
        	->where('id','in',$id_arr)
        	->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','content','createtime','user','topic']);
                $v->getRelation('user')->visible(['id','nickname']);
                $v->getRelation('topic')->visible(['id','title']);
            })->toArray();
        $this->success('成功', ['total'=>$data['total'],'list'=>$data['data']]);
    }

    /**
     * @ApiWeigh (33)
     * @ApiTitle    (我的帖子-@我的-回复)
     * @ApiSummary  (我的帖子-@我的-回复)
     * @ApiMethod   (POST)
     *
     * @ApiHeaders  (name=token, type=string, required=true, description="请求的Token")
     * @ApiParams (name="cue_appraise_id", type="int", required=true, description="被@评论ID")
     * @ApiParams (name="content", type="int", required=true, description="评论内容")
     *
     * @ApiReturn({
        "code": 1,
        "msg": "成功",
        "time": "1600084253",
        "data": null
    })
     */
    public function appraiseReply(){
        $cue_appraise_id = $this->request->param('cue_appraise_id');
        $content = $this->request->param('content');
        empty($cue_appraise_id) && $this->error('缺少必需参数');
        empty($content) && $this->error('请填写评论内容');
        $info = TopicAppraise::get($cue_appraise_id);
        empty($info) && $this->error('评论不存在');
        $pid = $info['pid'] > 0 ? $info['pid'] : $info['id'];
        Db::startTrans();
        try {
            // 添加回复
            TopicAppraise::create([
                'topic_id' => $info['topic_id'],
                'pid' => $pid,
                'user_id' => $this->auth->id,
                'cue_appraise_id' => $cue_appraise_id,
                'content' => $content
            ]);
            // 状态变为已被回复
            $info->is_replied = '1';
            $info->save();
            Db::commit();
        } catch (PDOException $e) {
            Db::rollback();
            $this->error($e->getMessage());
        } catch (Exception $e) {
            Db::rollback();
            $this->error($e->getMessage());
        }
        $this->success('回复成功');
    }

    /**
     * @ApiWeigh (31)
     * @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="flag", type="inter", required=true, description="0=全部,1=尚无意向,2=已被下载")
     *
     * @ApiReturn({
        "code": 1,
        "msg": "成功",
        "time": "1602412497",
        "data": {
            "total": 1, //总条数
            "per_page": 15,
            "current_page": 1,
            "last_page": 1,
            "data": [{
                "id": 2, //职位ID
                "name": "怎么说", //职位名称
                "type": "1", //职位类型
                "salary": "9753.20", //工资
                "start_time": "2020.10.11", //开始工作时间
                "end_time": "2020.10.11", //结束工作时间
                "address": "测试地址", //地址
                "mobile": "15133120361", //电话
                "resume": "", //简历文件路径
                "resume_name": "", //简历原始名称
                "type_text": "全职", //职位类型说明
                "qualification_arr": [] //资质证明
            }]
        }
    })
     */
    public function userJob()
    {
        $page = $this->request->param('page', 1, 'intval');
        $page_num = $this->request->param('page_num', 10, 'intval');
        $flag = $this->request->param('flag');
        $where['user_id'] = $this->auth->id;
        $where['status'] = '1';
        switch ($flag) {
            case '1':
                $where['is_download'] = '0';
                break;
            case '2':
                $where['is_download'] = '1';
                break;
            default:
                break;
        }
        $data = UserJob::where($where)
            ->field('id,name,type,salary,start_time,end_time,address,mobile,resume,resume_name,qualification')
            ->order('createtime desc')
            ->paginate($page_num,false,['page'=>$page])
            ->toArray();
        $this->success('成功', $data);
    }

    /**
     * @ApiWeigh (30)
     * @ApiTitle    (我的求职-我发布的-详情)
     * @ApiSummary  (我的求职-我发布的-详情)
     * @ApiMethod   (POST)
     *
     * @ApiParams   (name="user_job_id", type="inter", required=false, description="求职ID")
     *
     * @ApiReturn({
        "code": 1,
        "msg": "成功",
        "time": "1602835489",
        "data": {
            "id": 2, //求职ID
            "user_id": 15,
            "name": "怎么说", //职位
            "type": "1",
            "mobile": "15133120361",
            "start_time": "2020.10.11",
            "end_time": "2020.10.11",
            "salary": "9753.20",
            "address": "测试地址",
            "user_job_ability_ids": "3,4",
            "qualification": "",
            "resume": "http://qizhibang.brotop.cn456", //简历地址
            "resume_name": "", //简历名称
            "status": "1",
            "is_download": "0",
            "createtime": 1602408183,
            "updatetime": 1602480359,
            "weigh": 0,
            "type_text": "全职",
            "qualification_arr": []
        }
    })
     */
    public function userJobInfo()
    {
        $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);
    }

    /**
     * @ApiWeigh (29)
     * @ApiTitle    (我的求职-我发布的-编辑)
     * @ApiSummary  (我的求职-我发布的-编辑)
     * @ApiMethod   (POST)
     *
     * @ApiHeaders (name=token, type=string, required=true, description="请求的Token")
     * @ApiParams (name="user_job_id", type="string", required=true, description="求职ID")
     * @ApiParams (name="name", type="string", required=true, description="岗位名称")
     * @ApiParams (name="type", type="string", required=true, description="岗位类型:1=全职,2=兼职,3=其他")
     * @ApiParams (name="mobile", type="string", required=true, description="手机号")
     * @ApiParams (name="start_time", type="string", required=true, description="开始工作日期")
     * @ApiParams (name="end_time", type="string", required=true, description="结束工作日期")
     * @ApiParams (name="salary", type="string", required=true, description="薪资待遇")
     * @ApiParams (name="address", type="string", required=true, description="期望工作地点")
     * @ApiParams (name="user_job_ability_ids", type="string", required=true, description="资质能力")
     * @ApiParams (name="qualification", type="string", required=true, description="资质证明(多文件用英文逗号隔开)")
     * @ApiParams (name="resume", type="string", required=true, description="简历文件路径")
     *
     * @ApiReturn({
        "code": 1, 
        "msg": "登录成功", 
        "time": "1600498819", 
        "data": null
    })
     */
    public function userJobEdit()
    {
        $post = $this->request->param();
        empty($post['user_job_id']) && $this->error('缺少必需参数');
        empty($post['name']) && $this->error('请输入岗位名称');
        empty($post['type']) && $this->error('请选择岗位类型');
        empty($post['mobile']) && $this->error('请输入手机号');
        empty($post['start_time']) && $this->error('请选择开始工作日期');
        empty($post['end_time']) && $this->error('请选择结束工作日期');
        empty($post['salary']) && $this->error('请输入薪资待遇');
        empty($post['address']) && $this->error('请输入期望工作地点');
        empty($post['user_job_ability_ids']) && $this->error('请选择资质能力');
        empty($post['resume']) && $this->error('请选择简历');
        $info = UserJob::get($post['user_job_id']);
        empty($info) && $this->error('职位信息不存在');
        // 编辑后,需要重新审核
        $info->allowField(true)->save(array_merge([
            'status' => '0'
        ],$post));
        $this->success('编辑求职成功');
    }

    /**
     * @ApiWeigh (27)
     * @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": "1602234925",
        "data": null
    })
     */
    public function userJobDel()
    {
        $user_job_id = $this->request->param('user_job_id');
        empty($user_job_id) && $this->error('缺少必需参数');
        $info = UserJob::get(['user_id'=>$this->auth->id,'id'=>$user_job_id]);
        empty($info) && $this->error('求职信息不存在');
        Db::startTrans();
        try {
            // 删除简历下载记录
            $info->download()->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 (25)
     * @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="flag", type="inter", required=true, description="0=全部,1=尚无意向,2=已被下载")
     *
     * @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_view": "0", //是否已被下载:0=否,1=是
                "type_text": "全职" //职位类型说明
            }]
        }
    })
     */
    public function companyJob()
    {
        $page = $this->request->param('page', 1, 'intval');
        $page_num = $this->request->param('page_num', 10, 'intval');
        $flag = $this->request->param('flag');
        $where['cj.status'] = '1';
        switch ($flag) {
            case '1':
                $where['cjr.is_view'] = '0';
                break;
            case '2':
                $where['cjr.is_view'] = '1';
                break;
            default:
                break;
        }
        $data = CompanyJob::alias('cj')
            ->join('mobile_company_job_resume cjr','cjr.company_job_id = cj.id and cjr.user_id = '.$this->auth->id)
            ->where($where)
            ->field('cj.id,cj.name,cj.type,cj.salary,cj.start_time,cj.end_time,cj.address,cjr.is_view')
            ->order('cjr.createtime desc')
            ->paginate($page_num,false,['page'=>$page])
            ->toArray();
        $this->success('成功', $data);
    }

    /**
     * @ApiWeigh (10)
     * @ApiTitle    (常见问题)
     * @ApiSummary  (常见问题)
     * @ApiMethod   (POST)
     *
     * @ApiParams   (name="page", type="inter", required=false, description="当前页(默认1)")
     * @ApiParams   (name="page_num", type="inter", required=false, description="每页显示数据个数(默认10)")
     *
     * @ApiReturn({
        "code": 1,
        "msg": "成功",
        "time": "1602814874",
        "data": {
            "total": 1, //数据总数
            "list": [{
                "id": 7, //问题ID
                "title": "常见问题测试", //标题
                "createtime": "2020.09.12 20:45" //发布时间
            }]
        }
    })
     */
    public function problemList()
    {
        $page = $this->request->param('page', 1, 'intval');
        $page_num = $this->request->param('page_num', 10, 'intval');
        $data = Problem::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','title','createtime']);
            })->toArray();
        $this->success('成功', ['total'=>$data['total'],'list'=>$data['data']]);
    }

    /**
     * @ApiWeigh (9)
     * @ApiTitle    (常见问题-详情)
     * @ApiSummary  (常见问题-详情)
     * @ApiMethod   (POST)
     *
     * @ApiParams   (name="problem_id", type="inter", required=true, description="问题ID")
     *
     * @ApiReturn({
        "code": 1,
        "msg": "成功",
        "time": "1602815306",
        "data": {
            "id": 7, //问题ID
            "title": "常见问题测试", //问题标题
            "content": "<p>常见问题测试内容</p>", //问题内容
            "createtime": 1599914736,
            "updatetime": 1599914736
        }
    })
     */
    public function problemInfo()
    {
        $problem_id = $this->request->param('problem_id');
        empty($problem_id) && $this->error('缺少必需参数');
        $info = Problem::get($problem_id);
        empty($info) && $this->error('问题不存在');
        $this->success('成功', $info);
    }
}