<?php

namespace App\Http\Controllers\Web\Person;

use App\Exceptions\ResponseException;
use App\Http\Controllers\Web\WebBaseController;
use App\Models\Member;
use App\Models\PersonalCategory;
use App\Models\PersonalTalents;
use App\Models\Pms;
use App\Models\RecruitAppointInfo;
use App\Models\Resume;
use App\Models\ResumeAuthInfo;
use App\Services\Common\CategoryService;
use App\Services\Common\QueueAutoRefreshService;
use App\Services\HomeService;
use App\Services\Person\ResumeCredentService;
use App\Services\Person\ResumeEducationService;
use App\Services\Person\ResumeMaterialService;
use App\Services\Person\ResumeEntrustService;
use App\Services\Person\ResumeLanguageService;
use App\Services\Person\ResumeImageService;
use App\Services\Person\ResumeService;
use App\Services\Person\ResumeTrainService;
use App\Services\Person\ResumeWorkService;
use App\Services\Company\JobsService;
use App\Services\Common\SearchService;
use App\Services\Person\SubsiteResumeService;
use App\Services\SubsiteService;
use App\Validators\PersonValidatorRequest;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Cache;
use Illuminate\Support\Facades\Storage;
use App\Validators\RecruitValidatorRequest;
use App\Models\RecruitAppointBasic;
use App\Models\Recruit;

class ResumeController extends WebBaseController
{
    /**
     * @var ResumeService
     */
    protected $resumeService;
    protected $ResumeEducationService;
    protected $ResumeWorkService;
    protected $ResumeTrainService;
    protected $ResumeCredentService;
    protected $resumeMaterialService;
    protected $ResumeLanguageService;
    protected $homeService;
    protected $categoryService;
    protected $jobsService;
    protected $searchService;
    protected $subsiteService;
    protected $subsiteResumeService;
    protected $resumeEntrustService;
    protected $resumeImageService;
    protected $queueAutoRefreshService;

    /**
     * ResumeController constructor.
     * @param ResumeService $resumeService
     * @param ResumeEducationService $ResumeEducationService
     * @param ResumeWorkService $ResumeWorkService
     * @param ResumeTrainService $ResumeTrainService
     * @param ResumeCredentService $ResumeCredentService
     * @param ResumeLanguageService $ResumeLanguageService
     * @param HomeService $homeService
     * @param CategoryService $categoryService
     * @param JobsService $jobsService
     * @param SearchService $searchService
     * @param subsiteService $subsiteService
     * @param subsiteResumeService $subsiteResumeService
     */
    public function __construct(ResumeService $resumeService, ResumeEducationService $ResumeEducationService, ResumeWorkService $ResumeWorkService, ResumeTrainService $ResumeTrainService, ResumeCredentService $ResumeCredentService, ResumeLanguageService $ResumeLanguageService, HomeService $homeService, CategoryService $categoryService, JobsService $jobsService, SearchService $searchService, SubsiteService $subsiteService, SubsiteResumeService $subsiteResumeService, ResumeEntrustService $resumeEntrustService, QueueAutoRefreshService $queueAutoRefreshService,ResumeImageService $resumeImageService,ResumeMaterialService $resumeMaterialService)
    {
        $this->resumeService = $resumeService;
        $this->ResumeEducationService = $ResumeEducationService;
        $this->ResumeWorkService = $ResumeWorkService;
        $this->ResumeTrainService = $ResumeTrainService;
        $this->ResumeCredentService = $ResumeCredentService;
        $this->ResumeLanguageService = $ResumeLanguageService;
        $this->resumeMaterialService = $resumeMaterialService;
        $this->homeService = $homeService;
        $this->categoryService = $categoryService;
        $this->jobsService = $jobsService;
        $this->searchService = $searchService;
        $this->recommend_limit = 12;
        $this->recommend_need_limit = 100;
        $this->subsiteService = $subsiteService;
        $this->subsiteResumeService = $subsiteResumeService;
        $this->resumeEntrustService = $resumeEntrustService;
        $this->queueAutoRefreshService = $queueAutoRefreshService;
        $this->resumeImageService = $resumeImageService;
    }

    /**
     * @des 个人中心
     */
    public function index()
    {
        $res = $this->resumeService->loginValidate(auth('web-member')->user());

        //读取人才认证表信息
        $personaltalents = PersonalTalents::where('uid', $res['member']['uid'])->first();
        $rate_num = 0;
        if (!empty($personaltalents)) {
            $result = $personaltalents->toArray();
            //人才等级进度条
            if ($result['rc_level_id'] == 802) {
                //第一类人才
                $rate_num = 120;
            } elseif ($result['rc_level_id'] == 803) {
                //第二类人才
                $rate_num = 90;
            } elseif ($result['rc_level_id'] == 804) {
                //第三类人才
                $rate_num = 60;
            } elseif ($result['rc_level_id'] == 805) {
                //第四类人才
                $rate_num = 30;
            } elseif ($result['rc_level_id'] == 806) {
                //第五类人才
                $rate_num = 1;
            }

            //判断是否处于预判状态和提交的依据数量
            if ($result['rc_audit'] != 1 && $result['rc_num'] != 1 && $result['rc_level_id'] != 802) {
                //如果处于预判状态或不通过且不是第一类人才和提交的依据数量不是一条
                $rate_num += $result['rc_num'];
            }
        }

        if (Cache::has('recommend_click_jobs_'.get_subsite_id())) {
            Cache::forget('recommend_click_jobs_'.get_subsite_id());
        }
        //推荐职位
        $recommend_jobs = $this->getRecommendJobs($this->recommend_limit);

        $message = $this->resumeService->popPms(auth('web-member')->user());
        return view('app.person.index')->with(
            [
                'talents'=>$personaltalents,
                'rate_num'=>$rate_num,
                'resume'=>$res['resume'],
                'stick'=>$res['stick'],
                'recommend_jobs'=>$recommend_jobs['jobs'],
                'match_resume'  => $recommend_jobs['match_resume'],
                'has_resume' => $recommend_jobs['has_resume'],
                'message'=>$message,
                'member'=>$res['member']
            ]
        );
    }

    //切换会员工作状态
    public function changeneed(Request $request){
        $uid= $request->uid;
        $change = $request->change;
        if ($change == 2) {
            Member::where('id', $uid)->update(['member_status' => 2]);
            session('visitor.member_status', 2);
        } else {
            Member::where('id', $uid)->update(['member_status' => 1]);
            session('visitor.member_status', 1);
        }
        return redirect(route('person.index'));
    }

    //获取置顶、点击量高、刷新靠前的职位
    public function getClickJobs($limit)
    {
        $jobs = Cache::get('recommend_click_jobs_'.get_subsite_id());
        if ($jobs === null) {
            $where[] = array('valid','=',1);
            $where[] = array('display','=',1);
            if (config('aix.companyset.comset.show_set.jobs_display')==1) {
                $where[] = array('audit','=',1);
            } else {
                $where[] = array('audit','<>',3);
            }
            $where[] = array('subsite_ids','=',get_subsite_id());
            $order = array('click'=>'desc','stime'=>'desc','refresh_time'=> 'desc');
            $click_jobs = $this->searchService->search('Job', $where, $order, '', $limit);
            $jobs = $click_jobs->items();
            Cache::put('recommend_click_jobs_'.get_subsite_id(), $jobs, 600);
        }
        return $jobs;
    }
    //获取推荐职位
    public function getRecommendJobs($limit = 10)
    {
        $user = $this->getUser();
        $need_limit = $this->recommend_need_limit;
        $list = array();
        $click_jobs = $this->getClickJobs($need_limit);     //获取置顶、点击量高、刷新靠前的职位
        $recommend_order = $this->jobsService->getRecommendOrder($user);     //排序条件
        $resume = array();
        $has_resume = 1;

        if ($user && $user->utype == 2) {
            $recommend_where = $this->jobsService->getRecommendWhere($user);
            if ($recommend_where) {
                //添加30天的时间限制
                $recommend_where['and'][] = ['refresh_time','>=', strtotime(date("Y-m-d", strtotime("-30 day")))];
                $has_resume = 1;
                $recommend_job_lists = $this->searchService->getRecommends($user, 'Job', $recommend_where, $recommend_order, '', $limit);
                $jids = array();
                if ($recommend_job_lists) {
                    $jids = $recommend_job_lists->pluck('id')->toArray();
                }
                if ($recommend_job_lists && $recommend_job_lists->total()>=$limit) {
                    $list = array_slice($recommend_job_lists->items(), 0, $limit);
                } else {
                    if ($click_jobs && $jids) {
                        foreach ($click_jobs as $k => $v) {
                            if (in_array($v->id, $jids)) {
                                unset($click_jobs[$k]);
                            }
                        }
                    }
                    $recommend_jobs = $recommend_job_lists?$recommend_job_lists->items():array();
                    $recommend_total = $recommend_job_lists?$recommend_job_lists->total():0;
                    $need_jobs = array_slice($click_jobs, 0, $limit - $recommend_total);
                    $all_jobs = array_merge($recommend_jobs, $need_jobs);
                    $list = array_slice($all_jobs, 0, $limit);
                }
            } else {
                //没有可匹配的简历
                $list = null;
                $has_resume = 0;
            }
        } else {
            $list = array_slice($click_jobs, 0, $limit);
        }
        if ($list) {
            $list = $this->jobsService->dealjobFilelds($list);
        }
        return array(
            'jobs'         => $list,
            'match_resume' => $resume,
            'has_resume'   => $has_resume
        );
    }

    public function popPms()
    {
        $content = $this->resumeService->popPms(auth('web-member')->user());
        if ($content) {
            $html = view('app.person.ajax.pop_pms', ['content'=>$content])->render();
            return $this->sendSuccessResponse(['html'=>$html,'code'=>1]);
        } else {
            return $this->sendSuccessResponse(['html'=>'','code'=>0]);
        }
    }
    public function getUser()
    {
        $user = array();
        if (auth('web-member')->check()) {
            $user = auth('web-member')->user();
        } elseif (auth('web-company')->check()) {
            $user = auth('web-company')->user();
        }
        return $user;
    }
    public function ajaxGetInterestJobs()
    {
        $params = request()->all();
        $limit = $this->recommend_limit;
        $need_limit = $this->recommend_need_limit;
        $list = array();
        $page = array_has($params, 'p')?$params['p']:1;
        $has_resume = 1;
        //推荐职位
        if ($params['type'] == 'recommend_jobs') {
            $user = $this->getUser();
            $recommend_order = $this->jobsService->getRecommendOrder($user);
            $recommend_where = $this->jobsService->getRecommendWhere($user);

            if ($recommend_where) {
                $has_resume = 1;
                //添加30天的时间限制
                $recommend_where['and'][] = ['refresh_time','>=', strtotime(date("Y-m-d", strtotime("-30 day")))];
                $recommend_job_lists = $this->searchService->getRecommends($user, 'Job', $recommend_where, $recommend_order, '', $need_limit);
                $jids = $recommend_job_lists->pluck('id')->toArray();

                $next_page = (int)$page + 1;

                if (count($recommend_job_lists->items()) >= $next_page*$limit) {
                    $list = array_slice($recommend_job_lists->items(), $page*$limit, $limit);
                } else {
                    $click_jobs = $this->getClickJobs($need_limit);
                    if ($click_jobs && $jids) {
                        foreach ($click_jobs as $k => $v) {
                            if (in_array($v->id, $jids)) {
                                unset($click_jobs[$k]);
                            }
                        }
                    }

                    $recommend_jobs = $recommend_job_lists->items();
                    $recommend_total = count($recommend_job_lists->items());
                    $need_jobs = array_slice($click_jobs, 0, $need_limit - $recommend_total);
                    $all_jobs = array_merge($recommend_jobs, $need_jobs);
                    $list = array_slice($all_jobs, $page*$limit, $limit);
                    if (!$list) {
                        $list = array_slice($all_jobs, 0, $limit);
                        $next_page = 1;
                    }
                }
            } else {
                $list = [];
                $has_resume = 0;
                $next_page = 1;
            }
            $list = $this->jobsService->dealjobFilelds($list);
            $html = view('app.person.ajax.jobs_list', ['content'=>$list, 'has_resume'=>$has_resume])->render();
            return $this->sendSuccessResponse(['html'=>$html,'page'=>$next_page]);
        } else {
            $next_page = 1;
            if ($params['type'] == 'new_jobs') {
                $jobs = $this->getNewJobs($limit, $page);
            } else {
                $jobs = $this->getNearByJobs($params, $limit, $page);
            }
            if ($jobs->isNotEmpty()) {
                $list = $this->jobsService->dealjobFilelds($jobs->items());
                $next_page = (int)$page + 1;
            } else {
                if ($params['type'] == 'new_jobs') {
                    $first_jobs = $this->getNewJobs($limit, $next_page);
                } else {
                    $first_jobs = $this->getNearByJobs($params, $limit, $next_page);
                }
                if ($first_jobs->isNotEmpty()) {
                    $list = $this->jobsService->dealjobFilelds($first_jobs->items());
                    $next_page = 2;
                }
            }
            $html = view('app.person.ajax.jobs_list', ['content'=>$list, 'has_resume'=>$has_resume])->render();
            return $this->sendSuccessResponse(['html'=>$html,'page'=>$next_page]);
        }
    }
    public function getNearByJobs($params, $limit, $page)
    {
        $where[] = array('valid','=',1);
        $where[] = array('display','=',1);
        if (config('aix.companyset.comset.show_set.jobs_display')==1) {
            $where[] = array('audit','=',1);
        } else {
            $where[] = array('audit','<>',3);
        }
        $where[] = array('subsite_ids','=',get_subsite_id());
        //获取坐标
        $lng = array_has($params, 'lng') ? $params['lng']: '';
        $lat = array_has($params, 'lat') ? $params['lat']: '';
        if ($lng && $lat) {
            $where[] = array('lng', '=', $lng);
            $where[] = array('lat', '=', $lat);
            $where[] = array('range', '=',round(config('aix.system.map.map.map_range'), 2));
        }
        $order = array('click'=>'desc','stime'=>'desc','refresh_time'=> 'desc');
        return $recommend_job_lists = $this->searchService->search('Job', $where, $order, '', $limit, $page);
    }
    public function getNewJobs($limit, $page)
    {
        $where[] = array('valid','=',1);
        $where[] = array('display','=',1);
        if (config('aix.companyset.comset.show_set.jobs_display')==1) {
            $where[] = array('audit','=',1);
        } else {
            $where[] = array('audit','<>',3);
        }
        $where[] = array('subsite_ids','=',get_subsite_id());
        $order = array('refresh_time'=>'desc');
        return $recommend_job_lists = $this->searchService->search('Job', $where, $order, '', $limit, $page);
    }

    public function popPmsRead()
    {
        return $this->resumeService->popPmsRead(request()->id);
    }

    /**
     * @des 签到
     */
    public function signIn()
    {
        $res = $this->resumeService->signIn(auth('web-member')->user());
        if ($res['code']==1) {
            return $this->sendSuccessResponse($res['info']);
        } else {
            return $this->sendErrorResponse($res['info']);
        }
    }

    public function resume()
    {
        $content = $this->resumeService->myResume(auth('web-member')->user());
        return view('app.person.resume', ['content'=>$content]);
    }
    public function resumeAjax()
    {
        $content = $this->resumeService->myResumeAjax(auth('web-member')->user());
        return view('app.person.ajax.addResume', ['content'=>$content]);
    }

    public function resumeAdd()
    {
        $res = $this->resumeService->loginValidate(auth('web-member')->user());
        $district = $this->categoryService->getDefaultDistrict();
        $subsite = $this->subsiteService->getSubsite(auth('web-member')->user());

        return view('app.person.resume_add',
            [
                'member'=>$res['member'],
                'resume'=>$res['resume'],
                'defaultCity'=>$district->defaultCity,
                'disCity'=>$district->disCity,
                'disHan'=>$district->disHan,
                'resumeTitle'=>$res['resumeTitle'],
                'subsite'=>$subsite,
            ]
        );
    }

    public function resumeCreate(PersonValidatorRequest $request)
    {
        $res = $this->resumeService->resumeCreate($request->except(['add_tag','_token']), auth('web-member')->user());
        if ($res['code']==1) {
            return $this->sendSuccessResponse(['id'=>$res['info'],'tag'=>$request->add_tag]);
        } else {
            return $this->sendErrorResponse('更新简历失败', '', 400);
        }
    }

    public function resumeCheck()
    {
        return view('app.person.resume_check');
    }

    public function resumeUpdate()
    {
        $de_resume = Resume::find(request()->id);
        $back_url = \Illuminate\Support\Facades\URL::previous();
        if(!$de_resume){
            return $this->showMessage('对不起,您只能查看自己的简历!', $back_url, true, '上一页', '3');
        }
        if($de_resume->uid!=auth('web-member')->user()->id){
            return $this->showMessage('对不起,您只能查看自己的简历!', $back_url, true, '上一页', '3');
        }
        $res = $this->resumeService->getResumeById(request()->id, auth('web-member')->user());
        $district = $this->categoryService->getDefaultDistrict();
        $subsiteResume = $this->subsiteResumeService->getSubsiteResumeById(auth('web-member')->user(), request()->id);
        $subsiteAll = $this->subsiteService->getSubsite(auth('web-member')->user());
        $refresh = $this->queueAutoRefreshService->getQueuAutoRefresh(request()->id, auth('web-member')->user()->utype);
        $entrust = $this->resumeEntrustService->getEntrustByResumeId(request()->id);

        $where["uid"]=auth('web-member')->user()->id;
        $where["pid"]=request()->id;
        $resumeauth=ResumeAuthInfo::where($where)->select('duties','lager')->get();
        $resumeauths=array();
        foreach ($resumeauth as $value){
            $resumeauths[]=$value->duties;
        }

        $personal_category['positionpatentTag'] = PersonalCategory::select('id','name','rc_category_id','rc_category_group_id')->where('rc_category_group_id',808)->get();
        $personal_category['positionhonorTag'] = PersonalCategory::select('id','name','rc_category_id','rc_category_group_id')->where('rc_category_group_id',809)->get();
        $personal_category['positionjobTag'] = PersonalCategory::select('id','name','rc_category_id','rc_category_group_id')->where('rc_category_group_id',810)->get();

        $resumeauths_title = [];
        $resumeauths_title['positionpatentTag'] = [];
        $resumeauths_title['positionhonorTag'] = [];
        $resumeauths_title['positionjobTag'] = [];
        foreach ($personal_category['positionpatentTag'] as $value){
            if(in_array($value->id,$resumeauths)){
                $resumeauths_title['positionpatentTag'][] = $value->name;
            }
        }

        foreach ($personal_category['positionhonorTag'] as $value){
            if(in_array($value->id,$resumeauths)){
                $resumeauths_title['positionhonorTag'][] = $value->name;
            }
        }

        foreach ($personal_category['positionjobTag'] as $value){
            if(in_array($value->id,$resumeauths)){
                $resumeauths_title['positionjobTag'][] = $value->name;
            }
        }

        return view('app.person.resume_update', [
            'resume'=>$res['resume'],
            'member'=>$res['member'],
            'imgs'=>$res['imgs'],
            'defaultCity'=>$district->defaultCity,
            'subsiteResume'=>$subsiteResume['sub'],
            'personalCategory'=>$personal_category,
            'resumeauths'=>$resumeauths,
            'resumeauths_title'=>$resumeauths_title,
            'subsiteAll'=>$subsiteAll,
            'subId'=>$subsiteResume['subId'],
            'refresh'=>$refresh,
            'entrust'=>$entrust
        ]);
    }

    public function ajaxRongyuZhiwu(){
        $type=request()->type;
        $name = request()->name;
        $where["uid"]=auth('web-member')->user()->id;
        $where["pid"]=request()->id;
        $resumeauth=ResumeAuthInfo::where($where)->select('duties','lager')->get();
        $resumeauths=array();
        foreach ($resumeauth as $value){
            $resumeauths[]=$value->duties;
        }

        $honorTagWhere[] = array('name','like','%'.$name.'%');
        $honorTagWhere[] = array('rc_category_group_id','=',809);

        $jobTagWhere[] = array('name','like','%'.$name.'%');
        $jobTagWhere[] = array('rc_category_group_id','=',810);

        $personal_category['positionhonorTag'] = PersonalCategory::select('id','name','rc_category_id','rc_category_group_id')->where($honorTagWhere)->get();
        $personal_category['positionjobTag'] = PersonalCategory::select('id','name','rc_category_id','rc_category_group_id')->where($jobTagWhere)->get();
        if( $type == 1 ){  //荣誉
            $html = view('app.person.ajax.rongyu', ['personalCategory'=>$personal_category, 'resumeauths'=>$resumeauths])->render();
        }else{  // 职务。
            $html = view('app.person.ajax.zhiwu', ['personalCategory'=>$personal_category, 'resumeauths'=>$resumeauths])->render();
        }
        return $this->sendSuccessResponse(['html'=>$html]);
    }


    public function updateSubditeResume()
    {
        $resume_id = request()->get('id');
        $user = $this->getUser();
        $this->resumeService->isOwn($resume_id,$user);
        $res = $this->subsiteResumeService->updateSubditeResume($user, request()->all());
        if ($res['code']) {
            return $this->sendSuccessResponse($res['info']);
        } else {
            return $this->sendErrorResponse('更新失败', '', 400);
        }
    }


    public function updateTitle()
    {
        $res = $this->resumeService->updateTitle(request()->title, request()->id,auth('web-member')->user());
        if ($res) {
            return $this->sendSuccessResponse('更新成功');
        } else {
            return $this->sendErrorResponse('更新失败', '', 400);
        }
    }

    public function updateHunting()
    {
        $resume_id = request()->get('id');
        $user = $this->getUser();
        $this->resumeService->isOwn($resume_id,$user);
        $res = $this->resumeService->updateHunting(request()->except('_token'), auth('web-member')->user());
        if ($res) {
            return $this->sendSuccessResponse('更新成功');
        } else {
            return $this->sendErrorResponse('更新失败', '', 400);
        }
    }
    public function updateSpecialty()
    {
        $resume_id = request()->get('id');
        $user = $this->getUser();
        $this->resumeService->isOwn($resume_id,$user);
        $res = $this->resumeService->updateSpecialty(request()->except('_token'),auth('web-member')->user());
        if ($res['code']==1) {
            return $this->sendSuccessResponse('更新成功');
        } else {
            return $this->sendErrorResponse('更新失败', '', 400);
        }
    }

    public function resumeEducationAdd()
    {
        $res = $this->ResumeEducationService->resumeEducationAdd(request()->all(), auth('web-member')->user());
        if ($res['code']==1) {
            $html = view('app.person.ajax.resume_education', ['content'=>$res['info']])->render();
            return $this->sendSuccessResponse($html);
        } else {
            return $this->sendErrorResponse('更新失败', '', 400);
        }
    }

    public function resumeEducation()
    {
        $res = $this->ResumeEducationService->getResumeEducationByResumeId(request()->resume_id,auth('web-member')->user());
        return view('app.person.ajax.resume_education', ['content'=>$res]);
    }
    public function resumeEducationUpdate()
    {
        $res = $this->ResumeEducationService->resumeUpdate(request()->id,auth('web-member')->user());
        return $this->sendSuccessResponse($res);
    }

    public function resumeEduDelete()
    {
        if (request()->method()=='POST') {
            $res = $this->ResumeEducationService->resumeEduDelete(request()->id,auth('web-member')->user());
            if ($res['code']==1) {
                return $this->sendSuccessResponse('删除成功');
            } else {
                return $this->sendErrorResponse('删除失败', '', 400);
            }
        } else {
            return view('app.person.ajax.resume_delete', ['tpis'=>'删除后将无法恢复,您确定要删除该教育经历吗?']);
        }
    }

    public function resumeWork()
    {
        $res = $this->ResumeWorkService->getResumeWorkByResumeId(request()->resume_id,auth('web-member')->user());
        return view('app.person.ajax.resume_work', ['content'=>$res]);
    }

    public function resumeWorkAdd()
    {
        $resume_id = request()->get('resume_id');
        $user = $this->getUser();
        $this->resumeService->isOwn($resume_id,$user);
        $res = $this->ResumeWorkService->resumeWorkAdd(request()->all(), auth('web-member')->user());
        if ($res['code']==1) {
            $html = view('app.person.ajax.resume_work', ['content'=>$res['info']])->render();
            return $this->sendSuccessResponse($html);
        } else {
            return $this->sendErrorResponse('更新失败', '', 400);
        }
    }

    public function resumeWorkUpdate()
    {
        $work_id = request()->get('id');
        $user = $this->getUser();
        $this->ResumeWorkService->isOwn($work_id,$user);
        $res = $this->ResumeWorkService->resumeUpdate(request()->id);
        return $this->sendSuccessResponse($res);
    }

    public function resumeWorkDelete()
    {
        if (request()->method()=='POST') {
            $work_id = request()->get('id');
            $resume_id = request()->get('resume_id');
            $user = $this->getUser();
            $this->ResumeWorkService->isOwn($work_id,$user,$resume_id);
            $res = $this->ResumeWorkService->resumeWorkDelete(request()->id);
            if ($res['code']==1) {
                return $this->sendSuccessResponse('删除成功');
            } else {
                return $this->sendErrorResponse('删除失败', '', 400);
            }
        } else {
            return view('app.person.ajax.resume_delete', ['tpis'=>'删除后将无法恢复,您确定要删除该工作经历吗?']);
        }
    }

    public function resumeTrain()
    {
        $res = $this->ResumeTrainService->getResumeTrainByResumeId(request()->resume_id,auth('web-member')->user());
        return view('app.person.ajax.resume_train', ['content'=>$res]);
    }

    public function resumeTrainAdd()
    {
        $resume_id = request()->get('resume_id');
        $user = $this->getUser();
        $this->resumeService->isOwn($resume_id,$user);
        $res = $this->ResumeTrainService->resumeTrainAdd(request()->all(), auth('web-member')->user());
        if ($res['code']==1) {
            $html = view('app.person.ajax.resume_train', ['content'=>$res['info']])->render();
            return $this->sendSuccessResponse($html);
        } else {
            return $this->sendErrorResponse('更新失败', '', 400);
        }
    }

    public function resumeTrainUpdate()
    {
        $train_id = request()->get('id');
        $user = $this->getUser();
        $this->ResumeTrainService->isOwn($train_id,$user);
        $res = $this->ResumeTrainService->resumeUpdate(request()->id);
        return $this->sendSuccessResponse($res);
    }

    public function resumeTrainDelete()
    {
        if (request()->method()=='POST') {
            $train_id = request()->get('id');
            $resume_id = request()->get('resume_id');
            $user = $this->getUser();
            $this->ResumeTrainService->isOwn($train_id,$user,$resume_id);
            $res = $this->ResumeTrainService->resumeTrainDelete(request()->id);
            if ($res['code']==1) {
                return $this->sendSuccessResponse('删除成功');
            } else {
                return $this->sendErrorResponse('删除失败', '', 400);
            }
        } else {
            return view('app.person.ajax.resume_delete', ['tpis'=>'删除后将无法恢复,您确定要删除该培训经历吗?']);
        }
    }

    public function resumeMaterialUpdate()
    {
        $user = $this->getUser();
        $this->resumeMaterialService->isOwn(request()->all(),$user);
        $res = $this->resumeMaterialService->resumeUpdate(request()->all(),$user);
        if ($res['code']==1) {
            return $this->sendSuccessResponse($res);
        } else {
            return $this->sendErrorResponse($res['info'], '', 400);
        }
    }

    public function resumeCredent()
    {
        $res = $this->ResumeCredentService->getResumeCredentByResumeId(request()->resume_id,auth('web-member')->user());
        return view('app.person.ajax.resume_credent', ['content'=>$res]);
    }

    public function resumeCredentAdd()
    {
        $resume_id = request()->get('resume_id');
        $user = $this->getUser();
        $this->resumeService->isOwn($resume_id,$user);
        $res = $this->ResumeCredentService->resumeCredentAdd(request()->all(), auth('web-member')->user());
        if ($res['code']==1) {
            $html = view('app.person.ajax.resume_credent', ['content'=>$res['info']])->render();
            return $this->sendSuccessResponse($html);
        } else {
            return $this->sendErrorResponse('更新失败', '', 400);
        }
    }

    public function resumeCredentUpdate()
    {
        $train_id = request()->get('id');
        $user = $this->getUser();
        $this->ResumeCredentService->isOwn($train_id,$user);
        $res = $this->ResumeCredentService->resumeUpdate(request()->id);
        return $this->sendSuccessResponse($res);
    }

    public function resumeCredentDelete()
    {
        if (request()->method()=='POST') {
            $train_id = request()->get('id');
            $resume_id = request()->get('resume_id');
            $user = $this->getUser();
            $this->ResumeCredentService->isOwn($train_id,$user,$resume_id);
            $res = $this->ResumeCredentService->resumeCredentDelete(request()->id);
            if ($res['code']==1) {
                return $this->sendSuccessResponse('删除成功');
            } else {
                return $this->sendErrorResponse('删除失败', '', 400);
            }
        } else {
            return view('app.person.ajax.resume_delete', ['tpis'=>'删除后将无法恢复,您确定要删除该证书吗?']);
        }
    }

    public function resumeLanAdd()
    {
        $resume_id = request()->get('resume_id');
        $user = $this->getUser();
        $this->resumeService->isOwn($resume_id,$user);
        $res = $this->ResumeLanguageService->resumeLanAdd(request()->resume_id);
        return view('app.person.ajax.resume_edit_language', ['content'=>$res]);
    }


    public function getLanguageL()
    {
        $res = $this->ResumeLanguageService->getLanguageL(request()->resume_id,auth('web-member')->user());
        return view('app.person.ajax.get_language_list', ['content'=>$res]);
    }

    public function saveLanguage()
    {
        $resume_id = request()->get('resume_id');
        $user = $this->getUser();
        $this->resumeService->isOwn($resume_id,$user);
        $res = $this->ResumeLanguageService->saveLanguage(request()->all(), auth('web-member')->user());
        if ($res['code']==1) {
            $html = view('app.person.ajax.get_language_list', ['content'=>$res['info']])->render();
            return $this->sendSuccessResponse($html);
        } else {
            return $this->sendErrorResponse('添加失败', '', 400);
        }
    }

    public function delLanguage()
    {
        $language_id = request()->get('id');
        $resume_id = request()->get('resume_id');
        $user = $this->getUser();
        $this->ResumeLanguageService->isOwn($language_id,$user,$resume_id);
        $res = $this->ResumeLanguageService->delLanguage(request()->all());
        if ($res['code']==1) {
            return $this->sendSuccessResponse('删除成功');
        } else {
            return $this->sendErrorResponse('删除失败', '', 400);
        }
    }

    public function tagSave()
    {
        $resume_id = request()->get('resume_id');
        $user = $this->getUser();
        $this->resumeService->isOwn($resume_id,$user);
        $res = $this->resumeService->tagSave(request()->all());
        if ($res['code']==1) {
            return $this->sendSuccessResponse('更新成功');
        } else {
            return $this->sendErrorResponse('更新失败', '', 400);
        }
    }

    public function resumeCopy()
    {
        $res = $this->resumeService->resumeCopy(request()->id, auth('web-member')->user());
        if ($res['code']==1) {
            return $this->sendSuccessResponse($res['info']);
        } else {
            return $this->sendErrorResponse('创建简历失败', '', 400);
        }
    }

    public function saveBasicInfo()
    {
        $res = $this->resumeService->saveBasicInfo(request()->except('_token'),auth('web-member')->user());
        if ($res) {
            return $this->sendSuccessResponse('更新成功');
        } else {
            return $this->sendErrorResponse('更新失败', '', 400);
        }
    }

    public function refreshResume()
    {
        $res = $this->resumeService->refreshResume(request()->id, auth('web-member')->user());
        if ($res['code']==1) {
            return $this->sendSuccessResponse($res['info']);
        } else {
            return $this->sendErrorResponse($res['info']);
        }
    }

    public function resumeShow()
    {
        $user = $this->getUser();
        $res = $this->resumeService->resumeShow(request()->id,'',$user);
        return view('app.person.resume_show', ['content'=>$res,'resume'=>$res['resume'], 'redirect_url'=>url(\Illuminate\Support\Facades\Request::getRequestUri())]);
    }

    public function resumeDoc()
    {
        $res = $this->resumeService->resumeDoc(request()->id);
        if ($res) {
            $html = view('app.tpl.word_resume', ['content'=>$res])->render();
            return $this->resumeService->descript($res, $html);
        } else {
            return $this->sendErrorResponse('请选择简历!', '', 400);
        }
    }

    public function delResume()
    {
        $res = $this->resumeService->delResume(request()->id);
        $html = view('app.person.ajax.del_resume', ['content'=>$res['data']])->render();
        return json_encode(['code'=>$res['code'],'data'=>$html]);
    }

    public function setDelResume()
    {
        $res = $this->resumeService->setDelResume(request()->id, auth('web-member')->user());
        if ($res) {
            return $this->sendSuccessResponse('删除成功');
        } else {
            return $this->sendErrorResponse('删除失败', '', 400);
        }
    }

    public function setDef()
    {
        $res = $this->resumeService->setDef(request()->id, auth('web-member')->user());
        if ($res['code']==1) {
            return $this->sendSuccessResponse($res['info']);
        } else {
            return $this->sendErrorResponse($res['info'], '', 400);
        }
    }

    public function entrust()
    {
        $res = $this->resumeService->entrust(request()->id, auth('web-member')->user());
        if ($res['code']==0) {
            $html = view('app.person.ajax.entrust', ['content'=>$res['data']])->render();
            return json_encode(['code'=>0,'html'=>$html,'data'=>$res['data']['entrust']-time()]);
        } else {
            $html = view('app.person.ajax.entruct_cancle', ['content'=>$res['data']])->render();
            return json_encode(['code'=>0,'html'=>$html,'data'=>$res['data']['entrust_end']-time()]);
        }
    }

    public function setEntrust()
    {
        $res = $this->resumeService->setEntrust(request()->id, auth('web-member')->user());
        if ($res['code']==1) {
            return $this->sendSuccessResponse($res['info']);
        } else {
            return $this->sendErrorResponse($res['info'], '', 400);
        }
    }

    public function setEntrustDel()
    {
        $res = $this->resumeService->setEntrustDel(request()->id,auth('web-member')->user());
        if ($res['code']==1) {
            return $this->sendSuccessResponse($res['info']);
        } else {
            return $this->sendErrorResponse($res['info'], '', 400);
        }
    }

    public function tagCn()
    {
        if (request()->method()=='POST') {
            dd(11);
        } else {
            $result = $this->resumeService->tagCn(auth('web-member')->user());
            if ($result['code']==0) {
                return $result;
            } else {
                return view('app.person.ajax.resume_tag', $result);
            }
        }
    }


    public function resumeStick()
    {
        if (request()->method()=='POST') {
            dd(22);
        } else {
            $result = $this->resumeService->resumeStick(auth('web-member')->user());
            if ($result['code']==0) {
                return $result;
            } else {
                return view('app.person.ajax.resume_stick', $result);
            }
        }
    }

    public function incrementAddSave()
    {
        $result = $this->resumeService->incrementAddSave(request()->all(), auth('web-member')->user());
        if ($result['code']==1) {
            return $this->sendSuccessResponse($result['info']);
        } else {
            return $this->sendErrorResponse($result['info'], '', 400);
        }
    }

    public function incrementStickSave()
    {
        $result = $this->resumeService->incrementStickSave(request()->all(), auth('web-member')->user());
        if ($result['code']==1) {
            return $this->sendSuccessResponse($result['info']);
        } else {
            return $this->sendErrorResponse($result['info'], '', 400);
        }
    }

    public function uploadImages()
    {
        $resume_id = request()->get('resume_id');
        $user = $this->getUser();
        $this->resumeService->isOwn($resume_id,$user);
        $result = $this->resumeService->uploadImages(request()->all(), auth('web-member')->user());
        if ($result['code']==1) {
            return $this->sendSuccessResponse($result['info']);
        } else {
            return $this->sendErrorResponse($result['info']);
        }
    }

    public function uploadFiles()
    {
        $resume_id = request()->get('resume_id');
        $user = $this->getUser();
        $this->resumeService->isOwn($resume_id,$user);
        $result = $this->resumeService->uploadFiles(request()->all());
        if ($result) {
            return $this->sendSuccessResponse('上传成功!');
        } else {
            return $this->sendErrorResponse('上传失败,请重试!');
        }
    }


    public function delFile()
    {
        if (request()->method()=='POST') {
            $resume_id = request()->get('resume_id');
            $user = $this->getUser();
            $this->resumeService->isOwn($resume_id,$user);
            $result = $this->resumeService->delFile(request()->all());
            if ($result) {
                return $this->sendSuccessResponse('删除成功!');
            } else {
                return $this->sendErrorResponse('删除失败,请重试!');
            }
        } else {
            return view('app.person.ajax.resume_delete', ['tpis'=>'删除后将无法恢复,您确定要删除该附件简历吗?']);
        }
    }

    public function autoRefresh()
    {
        $resume_id = request()->get('resume_id');
        $user = $this->getUser();
        $this->resumeService->isOwn($resume_id,$user);
        $result = $this->resumeService->autoRefresh(request()->all(),auth('web-member')->user());
        if ($result['code']==1) {
            return $this->sendSuccessResponse($result['info']);
        } else {
            return $this->sendErrorResponse($result['info']);
        }
    }

    public function del_images()
    {
        if (request()->method()=='POST') {
            $img_id = request()->get('id');
            $resume_id = request()->get('resume_id');
            $user = $this->getUser();
            $this->resumeImageService->isOwn($img_id,$user,$resume_id);
            $result = $this->resumeService->del_images(request()->all());
            if ($result['code']==1) {
                return $this->sendSuccessResponse('ok');
            } else {
                return $this->sendErrorResponse('删除失败!');
            }
        } else {
            return view('app.person.ajax.resume_delete', ['tpis'=>'删除后将无法恢复,您确定要删除该条数据吗?']);
        }
    }

    //职位匹配
    public function matchJobs($id)
    {
        $resume = $this->resumeService->getResumeInfo($id);
        if(!$resume){
            return $this->showMessage('您的简历审核未通过/审核中,无法匹配职位', \Illuminate\Support\Facades\URL::previous(), true, '上一页', '3');
        }
        //匹配职位
        $jobs = $this->searchService->searchRecommendJobs(5, $this->getUser(), 'show_page');

        /*
         $where = $this->jobsService->setRecommendJobWhere($resume);
        $order = array('refresh_time'=>'desc');
        $jobs = $this->searchService->search('Job', $where, $order, '', 10);
        */
        $list_items = array();
        if($jobs){
            if ($jobs->total()>0) {
                $list_items = $this->jobsService->dealjobFilelds($jobs->items());
            }
        }
        $return_data = array(
            'list'=>$jobs,
            'jobs'=>$list_items
        );
        return view('app.person.jobs_match', $return_data);
    }
    
    public function resumeTpl(Request $request)
    {
        $res = $this->resumeService->resumeTpl(auth('web-member')->user(), $request->pid);
        $html = view('app.person.ajax.resume_tpl', ['tpl'=>$res['tpl'],'resume_tpl'=>$res['resume_tpl'],'resume_id'=>$request->pid])->render();
        return json_encode(['html'=>$html]);
    }
    
    public function resumeTplUpdate(Request $request)
    {
        $res = $this->resumeService->resumeTplUpdate($request->pid, $request->tpl,auth('web-member')->user());
        if ($res) {
            return $this->sendSuccessResponse('更新成功!');
        } else {
            return $this->sendErrorResponse('更新失败!');
        }
    }
    
    public function incrementTplPoints(Request $request)
    {
        $res = $this->resumeService->incrementTplPoints(auth('web-member')->user(), $request->all());
        if ($res['code']==1) {
            return $this->sendSuccessResponse($res['info']);
        } else {
            return $this->sendErrorResponse($res['info']);
        }
    }
    
    public function incrementTplPay(Request $request)
    {
        $res = $this->resumeService->incrementTplPay(auth('web-member')->user(), $request->all(), $request->route());
    
        if ($res['code']=='wechat') {
            if ($res['type']=='wap') {
                return $res['tradeCode'];
            } else {
                return json_encode(['tradeCode'=>$res['tradeCode'],'tradeNo'=>$res['tradeNo']]);
            }
        } else {
            return $res['tradeCode'];
        }
    }
    
    public function downFile(Request $request)
    {
        $id = $request->id;
        $user = $this->getUser();
        $this->resumeService->isOwn($id,$user);
        $back_url = \Illuminate\Support\Facades\URL::previous();
        if(!$id){
            return $this->showMessage('简历不存在!', $back_url, true, '上一页', '3');
        }
        $resume = Resume::find($id);
        if(Storage::disk('public')->exists($resume->word_resume)){
            return response()->download(Storage::disk('public')->path($resume->word_resume), $resume->word_resume_title);
        }else{
            return $this->showMessage('文件不存在!', $back_url, true, '上一页', '3');
        }
    }

    public function resumeDisplay(Request $request)
    {
        $user = $this->getUser();
        $res = $this->resumeService->resumeDisplay($request->display, $request->id,$user);
        if ($res) {
            return $this->sendSuccessResponse('更新成功!');
        } else {
            return $this->sendErrorResponse('更新失败!');
        }
    }

    public function delRefreshResume(Request $request)
    {
        $user = $this->getUser();
        $res = $this->queueAutoRefreshService->delRefreshResume($request->pid,$user);
        if ($res) {
            return $this->sendSuccessResponse('取消成功!');
        } else {
            return $this->sendErrorResponse('取消失败!');
        }
    }

    public function delEntrustResume(Request $request)
    {
        $res = $this->resumeEntrustService->delEntrustResume($request->pid, $request->resume_id,auth('web-member')->user());
        if ($res['code']==1) {
            return $this->sendSuccessResponse($res['info']);
        } else {
            return $this->sendErrorResponse('取消失败!');
        }
    }

    public function recruit()
    {
        $user = auth('web-member')->user();
        $list = RecruitAppointInfo::where('uid',$user->id)
                ->join('recruit', 'recruit.id', '=', 'recruit_appoint_info.recruit_id', 'left')
                ->join('recruit_post', 'recruit_post.id', '=', 'recruit_appoint_info.post_id', 'left')
                ->select('recruit.name as recruit_name','recruit_appoint_info.*','recruit_post.code','recruit_post.name')
                ->get();

        return view('app.person.recruit')->with(['list' => $list,'total' => count($list)]);
    }


    public function recruit_info(Request $request)
    {
        $user = auth('web-member')->user();
        $info = RecruitAppointBasic::where('uid',$user->id)->first();
        if(!$info){
            $info = [
                'realname' => '',
                'sex' => '0',
                'birthday' => '',
                'avatar' => '',
                'nation' => '',
                'native_place' => '',
                'political_affiliation' => '',
                'titles' => '',
                'work' => '',
                'house_register' => '',
                'join_time' => '',
                'edu_type' => '',
                'education' => '',
                'school' => '',
                'degree' => '',
                'pro' => '',
                'address' => '',
                'card' => '',
                'mobile' => '',
                'email' => '',
                'concat_name' => '',
                'concat_mobile' => '',
                'resume' => '',
                'family' => [
                    [
                        'relation' => '',
                        'realname' => '',
                        'birthday' => '',
                        'political_affiliation' => '',
                        'work' => ''
                    ]
                ],
                'is_push' => '1'
            ];
        }else{
            $info->sex = (string)$info->sex;
            $info->edu_type = (string)$info->edu_type;
            $info->is_push = (string)$info->is_push;
            $info->family = empty($info->family) ? [[
                'relation' => '',
                'realname' => '',
                'birthday' => '',
                'political_affiliation' => '',
                'work' => ''
            ]] : json_decode($info->family);
        }
        $recruit_id = $request->input('recruit_id',0);
        return view('app.person.recruit_info',[
            'info'      =>  json_encode($info),
            'recruit_id'=>  $recruit_id
        ]);
    }

    public function saveRecruitInfo(RecruitValidatorRequest $request)
    {
        $user = auth('web-member')->user();
        $basic = RecruitAppointBasic::where('uid',$user->id)->first();
        $data = $request->only('realname','sex','birthday','avatar','nation','native_place','political_affiliation','titles','work','house_register','join_time','education','school','degree','pro','address','card','mobile','email','concat_name','concat_mobile','resume','family','is_push');
        if(count($data['family']) > 0){
            $data['family'] = json_encode($data['family']);
        }
        if($basic){
            //更新基础信息
            $res = RecruitAppointBasic::where('uid',$user->id)->update($data);
            if (!$res) {
                return response()->json(['status'=>0,'msg'=>'保存失败,请联系客服']);
            }else{
                return response()->json(['status'=>1,'msg'=>'个人基础信息保存成功,快去报名吧!']);
            }
        }else{
            //新增基础信息
            $data['uid'] = $user->id;
            $res = RecruitAppointBasic::create($data);
            if (!$res) {
                return response()->json(['status'=>0,'msg'=>'保存失败,请联系客服']);
            }else{
                return response()->json(['status'=>1,'msg'=>'个人基础信息保存成功,快去报名吧!']);
            }
        }


    }

}