<?php
/**
 * Created by PhpStorm.
 * User: zhanghao
 * Date: 2019/6/17
 * Time: 11:05
 */

namespace App\Http\Controllers\Web\Jobfairout;

use App\Exceptions\ResponseException;
use App\Http\Controllers\Web\WebBaseController;
use App\Models\Subsite;
use App\Repositories\Jobfairout\JobfairoutCompanyRepository;
use App\Repositories\Jobfairout\JobfairoutPersonalJobsApplyRepository;
use App\Repositories\Jobfairout\JobfairoutPutJobRepository;
use App\Repositories\Jobfairout\JobfairoutInfoRepository;
use App\Repositories\Jobfairout\JobfairoutRepository;
use App\Repositories\Jobfair\JobfairJobRepository;
use App\Repositories\ResumeRepository;
use App\Services\Jobfairout\JobfairoutCompanyService;
use App\Services\Jobfairout\JobfairoutJobsService;
use App\Services\Jobfairout\JobfairoutPersonalJopApplyService;
use App\Services\Jobfairout\JobfairoutPutJobService;
use App\Services\Jobfairout\JobfairoutService;
use App\Services\Person\ResumeService;
use App\Services\Jobfairout\JobfairoutReserveService;
use Illuminate\Http\Request;
use App\Repositories\CompanyRepository;
use App\Repositories\Jobfairout\jobfairoutReserveRepository;
use App\Repositories\Jobfairout\jobfairoutReserveListRepository;
use App\Repositories\Jobfairout\jobfairoutFeedbackRepository;
use Illuminate\Support\Facades\DB;
use App\Services\Company\CompanyService;
use App\Services\Company\CompanyDownResumeService;
class JobfairoutController extends WebBaseController
{
    protected $jobfairoutJobsService;
    protected $jobfairoutCompanyRepository;
    protected $jobfairoutCompanyService;
    protected $jobfairoutService;
    protected $jobfairoutRepository;
    protected $jobfairoutPersonalJobsApplyRepository;
    protected $jobfairoutPersonalJopApplyService;
    protected $resumeService;
    protected $jobfairoutPutJobRepository;
    protected $resumeRepository;
    protected $jobfairoutPutJobService;
    protected $companyRepository;
    protected $jobfairoutInfoRepository;
    protected $jobfairJobRepository;
    protected $jobfairoutReserveRepository;
    protected $jobfairoutReserveListRepository;
    protected $jobfairoutFeedbackRepository;
    protected $companyService;
    protected $companyDownResumeService;
    protected $jobfairoutReserveService;

    /**
     * JobfairController constructor.
     * @param $jobfairoutJobsService
     * @param $jobfairoutCompanyRepository
     * @param $jobfairCompanyService
     * @param $jobfairoutService
     * @param $jobfairoutRepository
     * @param $jobfairoutPersonalJobsApplyRepository
     * @param $jobfairoutPersonalJopApplyService
     * @param $resumeService
     * @param $jobfairoutPutJobRepository
     * @param $resumeRepository
     * @param $jobfairoutPutJobService
     * @param $companyRepository
     * @param $jobfairoutInfoRepository
     * @param $jobfairJobRepository
     * @param $jobfairoutReserveRepository
     * @param jobfairoutReserveListRepository
     * @param $jobfairoutFeedbackRepository
     * @param $companyService
     * @param $companyDownResumeService
     * @param $jobfairoutReserveService
    */
    public function __construct(
        ResumeService $resumeService,
        JobfairoutPutJobService $jobfairoutPutJobService,
        ResumeRepository $resumeRepository,
        JobfairoutPutJobRepository $jobfairoutPutJobRepository,
        JobfairoutJobsService $jobfairoutJobsService,
        JobfairoutPersonalJopApplyService $jobfairoutPersonalJopApplyService,
        JobfairoutPersonalJobsApplyRepository $jobfairoutPersonalJobsApplyRepository,
        JobfairoutRepository $jobfairoutRepository,
        JobfairoutService $jobfairoutService,
        JobfairoutCompanyService $jobfairoutCompanyService,
        JobfairoutCompanyRepository $jobfairoutCompanyRepository,
        JobfairoutInfoRepository $jobfairoutInfoRepository,
        CompanyRepository $companyRepository,
        JobfairJobRepository $jobfairJobRepository,
        jobfairoutReserveRepository $jobfairoutReserveRepository,
        jobfairoutReserveListRepository $jobfairoutReserveListRepository,
        jobfairoutFeedbackRepository $jobfairoutFeedbackRepository,
        CompanyService $companyService,
        CompanyDownResumeService $companyDownResumeService,
        JobfairoutReserveService $jobfairoutReserveService
    )
    {
        $this->jobfairoutJobsService = $jobfairoutJobsService;
        $this->jobfairoutCompanyRepository = $jobfairoutCompanyRepository;
        $this->jobfairoutCompanyService = $jobfairoutCompanyService;
        $this->jobfairoutService = $jobfairoutService;
        $this->jobfairoutRepository = $jobfairoutRepository;
        $this->jobfairoutPersonalJobsApplyRepository = $jobfairoutPersonalJobsApplyRepository;
        $this->jobfairoutPersonalJopApplyService = $jobfairoutPersonalJopApplyService;
        $this->resumeService = $resumeService;
        $this->jobfairoutPutJobRepository = $jobfairoutPutJobRepository;
        $this->resumeRepository = $resumeRepository;
        $this->jobfairoutPutJobService = $jobfairoutPutJobService;
        $this->companyRepository = $companyRepository;
        $this->jobfairoutInfoRepository = $jobfairoutInfoRepository;
        $this->jobfairJobRepository = $jobfairJobRepository;
        $this->jobfairoutReserveRepository = $jobfairoutReserveRepository;
        $this->jobfairoutReserveListRepository = $jobfairoutReserveListRepository;
        $this->jobfairoutFeedbackRepository = $jobfairoutFeedbackRepository;
        $this->companyService = $companyService;
        $this->companyDownResumeService = $companyDownResumeService;
        $this->jobfairoutReserveService = $jobfairoutReserveService;
    }

    /**近期招聘会
     * @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View
     */
    public function jobfairoutIndex()
    {
        $user = auth('web-company')->user();
        $res = $this->jobfairoutService->jobfairIndex($user);
        return view('app.jobfairout.company.index', $res);
    }

    /**定展记录
     * @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View
     */
    public function jobfairEnact()
    {
        $user = auth('web-company')->user();
        $res = $this->jobfairoutCompanyService->jobfairEnact($user);
        return view('app.jobfairout.company.jobfair_enact', $res);
    }

    /**招聘会职位库管理
     * @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View
     */
    public function jobfairoutJobsList()
    {
        $res = $this->jobfairoutJobsService->jobfairoutJobsList();
        return view('app.jobfairout.company.jobfair_joblist', $res);
    }

    /**招聘会职位添加
     * @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View
     */
    public function jobfairoutJobsAdd()
    {
        $res = $this->jobfairoutJobsService->jobfairoutJobsAdd();
        return view('app.jobfairout.company.jobfair_job_add', $res);
    }

    /**招聘会职位修改
     * @param int $id
     * @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View
     */
    public function jobfairoutJobsEdit($id)
    {
        $user = auth('web-company')->user();
        $res = $this->jobfairoutJobsService->jobfairoutJobsEdit($id, $user);
        if (!$res) {
            return $this->showMessage('参数错误', route('jobfairout.quarterslist'), true, '上一页');
        }
        return view('app.jobfairout.company.jobfair_job_add', $res);
    }

    /**招聘会职位删除
     * @param Request $request
     * @return \Illuminate\Http\JsonResponse
     * @throws \Throwable
     */
    public function jobfairoutJobsDel(Request $request)
    {
        if ($request->method() == 'POST') {
            return  $this->jobfairoutJobsService->jobfairoutJobsDel($request);
        }
        $tip = "被删除后将无法恢复,您确定要删除选中的职位吗?";
        return response()->json(['status'=>1,'data'=>['html'=>view('app.company.ajax.ajax_warning', ['tip'=>$tip])->render()]]);
    }

    /**招聘会职位修改和添加
     * @param Request $request
     * @return \Illuminate\Http\JsonResponse
     */
    public function jobfairoutJobsSave(Request $request)
    {
        $user = auth('web-company')->user();
        $data = $request->except(['_method', '_token']);
        return $this->jobfairoutJobsService->jobsSave($data, $user);
    }

    /**职位添加到招聘会中
     * @param Request $request
     * @return \Illuminate\Contracts\View\Factory|\Illuminate\Http\JsonResponse|\Illuminate\View\View
     * @throws \Throwable
     */
    public function jobfairoutJobsToJobfair(Request $request)
    {
        $user = auth('web-company')->user();
        if ($request->method() == 'POST') {
            $jids = $request->y_id;
            if (!$jids || !$request->exid_list) {
                return $this->showMessage('请选择职位或加入的招聘会', route('jobfair.quarterslist'), true, '上一页');
            }
            $this->jobfairoutJobsService->isOwn($jids,$user);
            $exidArr = explode(',', $request->exid_list);
            $this->jobfairoutCompanyService->isOwnArr($exidArr,$user);
            $res = $this->jobfairoutJobsService->jobfairoutJobsToJobfair($request);
            if ($res['state']) {
                return $this->showMessage('添加成功!'.$res['error'], route('jobfairout.quarterslist'), false, '上一页');
            }
            return $this->showMessage($res['msg'], route('jobfairout.quarterslist'), true, '上一页');
        }
        //公司参加的招聘会
        $jobfairInfo = $this->jobfairoutCompanyRepository->getJobfair($user->id);
        if ($jobfairInfo->isEmpty()) {
            return response()->json(['status'=>0, 'msg'=>"您还没有参加招聘会或申请未通过审核,请点击右侧链接参加招聘会<a href='" .route('jobfairout.lists'). "' style='color: #FF0000'>【点击参加】</a>"]);
        }
        return response()->json(['status'=>1,'data'=>['html'=>view('app.jobfairout.ajax.ajax_jobfair_mod', ['jobfairInfo'=>$jobfairInfo])->render()]]);
    }

    /**参展职位
     * @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View
     */
    public function jobfairoutjob(Request $request)
    {
        $user = auth('web-company')->user();
        $jobfairid = $request->jobfairid?$request->jobfairid:'';
        $audit = $request->audit?$request->audit:'';
        $map = [];
        $map1['company_id'] = $user->id;
        if ($audit) {
            $map1['audit'] = $audit;
        }
        if ($jobfairid) {
            $map['jobfair_id'] = $jobfairid;
        }
        $param_array = array('jobfairid','audit');
        $params= array();
        if ($request->all()) {
            foreach ($request->all() as $k => $v) {
                if (in_array($k, $param_array)) {
                    $params[$k] = $v;
                }
            }
        }
        $res = $this->jobfairoutPutJobService->jobfairoutPutJobsList($map,$map1);
        $jobfairArr = $this->jobfairoutCompanyRepository->findWhere(['company_id'=>$user->id], ['jobfair_id']);

        $jobfairList = [];
        if ($jobfairArr) {
            $list = $jobfairArr->toArray();
            $jobfairList = $this->jobfairoutRepository->findWhereIn('id', $list, ['id','title'])->toArray();
        }
        $res['jobfairid'] = $jobfairid;
        $res['audit'] = $audit;
        $res['params'] = $params;
        $res['jobfairList'] = array_column($jobfairList, 'title', 'id');
        $res['audtiArr'] = [1=>'审核通过',2=>'待审核',3=>'审核未通过'];
        return view('app.jobfairout.company.jobfair_job', $res);
    }

    public function jobfairPutJobsSave(Request $request)
    {
        $data = $request->except(['_token', 'method']);
        $user = auth('web-company')->user();
        return $this->jobfairoutPutJobService->jobfairoutPutJobsSave($data, $user);
    }

    public function jobfairjobdel(Request $request)
    {
        $id = $request->y_id?$request->y_id:0;
        $ids = is_array($id)?$id:explode(',', $id);
        if ($request->method() == 'POST') {
            if (!$ids) {
                return response()->json(['status'=>0,'html'=>'参数错误']);
            }
            return $this->jobfairoutPutJobService->jobfairPutJobsDel($ids);
        }
        $tip = "被删除后将无法恢复,您确定要删除选中的职位吗?";
        return response()->json(['status'=>1,'data'=>['html'=>view('app.company.ajax.ajax_warning', ['tip'=>$tip])->render()]]);
    }

    /**收到的招聘会简历
     * @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View
     */
    public function downResume(Request $request)
    {
        $user = auth('web-company')->user();
        $jobs_id = $request->input('jobs_id','');
        $jobfair_id = $request->input('jobfair_id','');
        $where = [];
        $where1 = [];
        $result['jobfairList'] = $this->jobfairoutCompanyService->jobfairList($user);
        $result['jobs_name'] = '全部职位';
        if($jobs_id)
        {
            $where1['job_id'] = $jobs_id;
            $result['jobs_name'] = $this->jobfairJobRepository->find($jobs_id,['jobs_name'])->jobs_name;
        }
        $result['jobfair_name'] = '全部招聘会';
        if($jobfair_id)
        {
            $where['jobfair_id'] = $jobfair_id;
            $result['jobfair_name'] = $this->jobfairoutRepository->find($jobfair_id,['title'])->title;
        }
        $result['apply'] = $this->jobfairoutPersonalJobsApplyRepository->getResumeJobs($user->id,$where,$where1);
        $whereJob = [
            'company_id' => $user->id,
            'audit' => 1,
            'type' => 2,
        ];
        $result['jobs'] = $this->jobfairJobRepository->getJobs($whereJob);
        $params= array();
        $param_array = array('jobs_id','jobfair_id');
        if ($request->all()) {
            foreach ($request->all() as $k => $v) {
                if (in_array($k, $param_array)) {
                    $params[$k] = $v;
                }
            }
        }
        $result['params'] = $params;
        return  view('app.jobfairout.company.down_resume', $result);
    }

    public function downResumeDel(Request $request)
    {
        if ($request->method() == 'POST') {
            $user = $this->getLoginUser();
            return $this->jobfairoutPersonalJopApplyService->downResumeDel($request,$user);
        }
        $tip = "被删除后将无法恢复,您确定要删除选中的简历吗?";
        return response()->json(['status'=>1,'data'=>['html'=>view('app.company.ajax.ajax_warning', ['tip'=>$tip])->render()]]);
    }

    /**招聘会详情
     * @param int $id
     * @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View
     */
    public function jobfairoutShow($id = 0)
    {
        $back_url = \Illuminate\Support\Facades\URL::previous();
        if (!$id) {
            return $this->showMessage('参数错误!', $back_url, true, '上一页');
        }
        $user = auth('web-company')->user();
        $res = $this->jobfairoutService->jobfairShow($id,$user);
        if (!$res['status']) {
            return $this->showMessage($res['msg'], $back_url, true, '上一页');
        } else {
            $res['jobfair']->sitename = Subsite::where('id',$res['jobfair']->subsite_id)->value('sitename');
            if (array_has($res, 'jobfair')) {
                $this->putSeoData('jobfair', $res['jobfair']);
            }
            return view('app.jobfairout.jobfair_show', $res);
        }
    }

    /**招聘会企业
     * @param Request $request
     * @param int $id
     * @return \Illuminate\Contracts\View\Factory|\Illuminate\Http\JsonResponse|\Illuminate\View\View
     * @throws \Throwable
     */
    public function jobfairoutShowCom(Request $request, $id = 0)
    {
        $back_url = \Illuminate\Support\Facades\URL::previous();
        if (!$id) {
            return $this->showMessage('参数错误!', $back_url, true, '上一页');
        }
        $user = auth('web-company')->user();
        $res = $this->jobfairoutService->jobfairShowCom($request, $id,$user);
        if ($request->ajax()) {
            if ($res->isNotEmpty()) {
                return response()->json(['status'=>1,'data'=>view('app.jobfairout.ajax.ajax_jobfair_com', ['jobfairCompany'=>$res])->render()]);
            }
            return response()->json(['status'=>0]);
        }

        if (!$res['status']) {
            return $this->showMessage($res['msg'], $back_url, true, '上一页');
        } else {
            $res['jobfair']->sitename = Subsite::where('id',$res['jobfair']->subsite_id)->value('sitename');
            $this->putSeoData('jobfair', $res['jobfair']);

            return view('app.jobfairout.jobfair_com', $res);
        }
    }

    /**招聘会职位详情
     * @param $jobfair_id
     * @param $job_id
     * @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View
     */
    public function jobfairoutShowJob($id)
    {
        $job = $this->jobfairoutService->jobfairShowJob($id);
        if (!$job['status']) {
            return $this->showMessage($job['msg'], route('jobfair'), true, '上一页');
        } else {
            $this->putSeoData('jobfair_job', $job['jobInfo']);
            return view('app.jobfairout.jobfair_job', $job);
        }
    }

    /**异步查询职位(废弃)
     * @param Request $request
     * @return \Illuminate\Http\JsonResponse
     * @throws \Throwable
     */
//    public function jobfairoutAjaxJobs(Request $request)
//    {
//        $keyinput = $request->keyinput?$request->keyinput:'';
//        if (!$keyinput) {
//            return response()->json(['status'=>0,'msg'=>"请输入要搜索的职位名称"]);
//        }
//        $jobfair_id = $request->jobfair_id?$request->jobfair_id:0;
//        if (!$jobfair_id) {
//            return response()->json(['status'=>0,'msg'=>"招聘会ID不正确"]);
//        }
//        $where = [
//            'jobfair_id'=>$jobfair_id,
//            'audit'=>1
//        ];
//        $res = $this->jobfairoutCompanyRepository->findJob($where);
//
//        foreach ($res as $key => $val) {
//            $jobfairPutJob = $this->jobfairoutPutJobRepository->searchJob($jobfair_id, $keyinput, $val->company_id, $val->id);
//            if ($jobfairPutJob->isNotEmpty()) {
//                $val->jobfairPutJob = $jobfairPutJob;
//            } else {
//                unset($res[$key]);
//            }
//        }
//
//        if ($res->isEmpty()) {
//            return response()->json(['status'=>0,'msg'=>"未查找到与【{$keyinput}】相似的职位或企业"]);
//        }
//        return response()->json(['status'=>1,'data'=>view('app.jobfairout.ajax.ajax_jobfair_com_jobs', ['jobfairCompany'=>$res])->render()]);
//    }

    public function jobfairoutAppointmentJobs(Request $request)
    {
        $user = $this->getLoginUser();
        $jid = $request->jobsfair_job_id;
        $jobfair_id = $request->jobfairid;
        $company_id = $request->company_id;
        $resume_id = $request->resume_id?$request->resume_id:0;
        $jobfair = $this->jobfairoutRepository->find($jobfair_id);
        if ($jobfair->isEmpty ||  $jobfair->holddate_end < time()) {
            return response()->json(['status'=>0, 'html'=>"招聘会已停止"]);
        }
        if ($resume_id) {
            $this->resumeService->isOwn($resume_id,$user);
            $this->jobfairoutPutJobService->isOwn($jid,$company_id);
            $data['resume_id'] = $resume_id;
            $data['personal_uid'] = $user->id;
            $data['jobs_id'] = $jid;
            $data['company_id'] = $company_id;
            $data['jobfair_id'] = $jobfair_id;
            if (!$jid || !$company_id || !$jobfair_id ) {
                return response()->json(['status'=>2,'type'=>3,'msg'=>'参数错误!']);
            }
            //简历完整度
            $res_complete = $this->resumeRepository->find($resume_id, ['complete_percent']);
            if ($res_complete->complete_percent < config('aix.personal_set.per_set.per_set.apply_job_min_percent')) {
                return response()->json(['status'=>0,'html'=>'请完善简历后再预约职位','resume_id'=>$resume_id]);
            }
            if ($this->jobfairoutPersonalJobsApplyRepository->findWhere(['personal_uid'=>$user->id, 'jobs_id'=>$jid, 'company_id'=>$company_id, 'jobfair_id'=>$jobfair_id])->isNotEmpty()) {
                return response()->json(['status'=>0, 'html'=>"您已预约该职位,请勿重复预约!"]);
            }
            DB::beginTransaction();
            try {
                $this->jobfairoutPersonalJopApplyService->applyJob($data);
                $this->companyDownResumeService->addDownResumes($company_id,$resume_id);
                DB::commit();
                return response()->json(['status'=>1, 'html'=>"职位预约成功!"]);
            } catch (\Exception $e) {
                DB::rollback();
                return response()->json(['status'=>0,'type'=>0 , 'html'=>"职位预约失败!"]);
            }
        } else {
            if (!$jid || !$company_id || !$jobfair_id) {
                return response()->json(['status'=>2,'type'=>3,'msg'=>'参数错误!']);
            }
            $result = $this->jobfairoutPersonalJopApplyService->ifJobApply($user);
            if ($result['status'] == 2) {  //返回结果,让用户选择简历投递
                $page_data = array('status'=>array_get($result, 'status'),'resumes'=>array_get($result, 'resumes'),'def_resume'=>array_get($result, 'def_resume'),'jobs_id'=>$jid);
                $page_data['company_id'] = $company_id;
                $page_data['jobfair_id'] = $jobfair_id;
                $page_data['jobs_id'] = $jid;
                $html = view('app.jobfairout.ajax.ajax_apply', $page_data)->render();
                return response()->json(['status'=>2,'html'=>$html]);
            } elseif ($result['status'] == 3) { //直接投递
                $this->jobfairoutPutJobService->isOwn($jid,$company_id);
                $resume = $result['resumes'][0];
                $data['resume_id'] = $resume->id;
                $data['personal_uid'] = $user->id;
                $data['jobs_id'] = $jid;
                $data['company_id'] = $company_id;
                $data['jobfair_id'] = $jobfair_id;
                $res_complete = $this->resumeRepository->find($resume->id, ['complete_percent']);
                if ($res_complete->complete_percent < config('aix.personal_set.per_set.per_set.apply_job_min_percent')) {
                    return response()->json(['status'=>0,'html'=>'请完善简历后再预约职位','resume_id'=>$resume->id]);
                }
                if ($this->jobfairoutPersonalJobsApplyRepository->findWhere(['resume_id'=>$resume->id, 'jobs_id'=>$jid, 'company_id'=>$company_id, 'jobfair_id'=>$jobfair_id])->isNotEmpty()) {
                    return response()->json(['status'=>0, 'html'=>"您已预约该职位,请勿重复预约!"]);
                }
                DB::beginTransaction();
                try {
                    $this->jobfairoutPersonalJopApplyService->applyJob($data);
                    $this->companyDownResumeService->addDownResumes($company_id,$resume->id);
                    DB::commit();
                    return response()->json(['status'=>1, 'html'=>"职位预约成功!"]);
                } catch (\Exception $e) {
                    DB::rollback();
                    return response()->json(['status'=>0,'type'=>0 , 'html'=>"职位预约失败!"]);
                }
            }

        }
    }

    public function personJobfairout()
    {
        $resume = $this->resumeService->myResumeAjax(auth('web-member')->user());
        $jobApply = $this->jobfairoutPersonalJopApplyService->personJobfair();
        return view('app.jobfairout.person.job_apply', ['resume' => $resume, 'interview' => $jobApply['interview']]);
    }

    public function personDelectout()
    {
        if (request()->method()=='GET') {
            $html = view('app.person.ajax.resume_delete', ['tpis'=>'删除后将无法恢复,您确定要删除选择的预约职位吗?'])->render();
            return $this->sendSuccessResponse($html);
        } else {
            $user = auth('web-member')->user();
            $this->jobfairoutPersonalJopApplyService->isOwn(request()->id,$user);
            $res = $this->jobfairoutPersonalJopApplyService->personDelect(request()->id, auth('web-member')->user());
            if ($res) {
                return $this->sendSuccessResponse('删除成功!');
            } else {
                return $this->sendErrorResponse('删除失败!');
            }
        }
    }

    public function jobfairoutAppointmentSave(Request $request)
    {
        $user = $this->getLoginUser();
        if (!$user) {
            $jobfair_id = $request->jobfair_id?$request->jobfair_id:0;
            return response()->json(['status'=>0, 'type'=>1, 'html'=>view('app.common.ajax.com_login', ['redirect_url'=>route('jobfairout.show.com', ['id'=>$jobfair_id])])->render(),'msg'=>'您还没有登录,请先登录再预约招聘会']);
        }
        if ($user->utype == 2) {
            return response()->json(['status'=>0,'type'=>0,'msg'=>'个人会员不允许预定招聘会!']);
        }
        //企业是否通过认证
        if ($user->audit!=1) {
            return response()->json(['status'=>0,'type'=>0,'msg'=>'企业或营业执照未通过审核!']);
        }
        $jobfair_id = $request->jobfair_id?$request->jobfair_id:0;
        if (!$jobfair_id || !$jobfairInfo = $this->jobfairoutRepository->findOne(['id'=>$jobfair_id])) {
            return response()->json(['status'=>0,'msg'=>'查无此招聘会!']);
        }
        if ($this->jobfairoutCompanyRepository->findCom(['jobfair_id'=>$jobfair_id, 'company_id'=>$user->id,['audit','<>', 3]])) {
            return response()->json(['status'=>0,'msg'=>'很抱歉,本次招聘会已经预定了,快去发布职位吧!']);
        }
        if($this->jobfairoutCompanyRepository->getComCount(['jobfair_id'=>$jobfair_id,['audit','<>', 3]]) >= $jobfairInfo->number){
            return response()->json(['status'=>0,'msg'=>'很抱歉,已经没有本次招聘会空余展位了!']);
        }
        if ($request->method()=='POST') {
            return $this->jobfairoutService->jobfairAppointmentSave($jobfairInfo, $user);
        }
        $msg ="<br><span>在线预定审核成功后将无法退订,是否继续.</span><br>";

        return response()->json(['status'=>1,'msg'=>$msg]);
    }

    /**填写单位信息
     * return \Illuminate\Http\JsonResponse
     */
    public function ajaxCompanyinfo(Request $request)
    {
        if ($request->method() == 'POST') {
            $user = $this->getLoginUser();
            $exid = $request->input('exid', '');
            $jobfair_id = $request->input('jobfair_id', '');
            $this->jobfairoutCompanyService->isOwn($exid,$user);
            $this->jobfairoutCompanyService->isOwnJobfair($exid,$jobfair_id);
            $contact = $request->input('contact', '');
            $phone = $request->input('phone', '');
            $tel_first = $request->input('tel_first', '-');
            $tel_next = $request->input('tel_next', '-');
            $tel_last = $request->input('tel_last', '-');
            $email = $request->input('email', '');
            $qq = $request->input('qq', '');
            $address = $request->input('address', '');
            $intro = $request->input('intro', '');
            $url = $request->input('url', '');
            $fax = $request->input('fax', '');
            $id = $request->input('id', '');
            $is_speech = $request->input('is_speech', '');
            if (!$contact) {
                $return_data = array( 'status'=>0, 'msg' => '请输入联系人信息');
                return response()->json($return_data);
            }
            if (!$email) {
                $return_data = array( 'status'=>0, 'msg' => '请输入联系邮箱');
                return response()->json($return_data);
            }
            if (!$address) {
                $return_data = array( 'status'=>0, 'msg' => '请输入联系地址');
                return response()->json($return_data);
            }

            $landline_tel = implode('-', [$tel_first?$tel_first:'',$tel_next?$tel_next:'',$tel_last?$tel_last:'']);
            $set_data = array(
                'jobfair_id'   => $jobfair_id,
                'exid'         => $exid,
                'company_id'   => (int)auth('web-company')->user()->id,
                'contact'      => $contact,
                'phone'        => $phone,
                'landline_tel' => $landline_tel,
                'email'        => $email,
                'qq'           => $qq,
                'address'      => $address,
                'intro'        => $intro,
                'url'          => $url,
                'fax'          => $fax,
                'is_speech'          => $is_speech,
            );
            if($id){
                $rst = $this->jobfairoutInfoRepository->update($set_data,$id);
            }else{
                $rst = $this->jobfairoutInfoRepository->create($set_data);
            }

            if ($rst) {
                $return_data = array('status'=>1, 'msg'=>'编辑成功');
            } else {
                $return_data = array('status'=>0, 'msg'=>'编辑失败');
            }
            return response()->json($return_data);
        } else {
            $jobfair_id = $request->input('jobfairout_id', '');
            $exid = $request->input('exid', '');
            if(!$jobfair_id || !$exid){
                return response()->json([ 'status'=>0, 'msg' => '缺少参数!']);
            }
            $user = auth('web-company')->user();
            $where = [
                'jobfair_id'=>(int)$jobfair_id,
                'company_id'=>$user->id
            ];
            $companyInfo = $this->jobfairoutInfoRepository->getOneInfo($where);
            if(!$companyInfo){
                $companyInfo = $this->companyRepository->getCompanyInfoByID($user->id);
            }else{
                $companyInfo->edit = true;
            }
            $companyInfo->exid = $exid;
            $companyInfo->jobfair_id = $jobfair_id;
            $html = view('app.jobfairout.ajax.add_info', ['companyInfo'=>$companyInfo])->render();
            $return_data = array( 'status'=>1, 'data' => $html);
            return response()->json($return_data);
        }
    }

    /**发布职位
     * return \Illuminate\Http\JsonResponse
     */
    public function ajaxComJobs(Request $request)
    {
        if ($request->method() == 'POST') {
            $user = $this->getLoginUser();
            $jobs_arr= $request->input('check_jobs_id', '');
            $jobfair_id = $request->input('jobfair_id', '');
            $exid = $request->input('exid', '');
            $jobs = $this->jobfairJobRepository->getPluck(['company_id'=>$user->id,'type'=>2,'audit'=>1],'id')->toArray();
            if(array_diff($jobs_arr,$jobs)) {
                throw new ResponseException('参数错误!');
            }
            $this->jobfairoutCompanyService->isOwn($exid,$user);
            //获取列表
            $where = ['exid'=>$exid];
            $ids = $this->jobfairoutPutJobRepository->getJobIds($where);
            DB::beginTransaction();
            try {
                if($ids){
                    if($jobs_arr){
                        $add_array = array_diff($jobs_arr,$ids);
                        if($add_array)
                        {
                            $this->jobfairoutPutJobService->addData($add_array,$exid,$jobfair_id);
                        }
                        $del_array = array_diff($ids,$jobs_arr);
                        $this->jobfairoutPutJobRepository->destroyArr($del_array);
                    }else{
                        $where = [
                            'exid'=>$exid
                        ];
                        $this->jobfairoutPutJobRepository->delList($where,$ids);
                    }
                }else{
                    if($jobs_arr)
                    {
                        $this->jobfairoutPutJobService->addData($jobs_arr,$exid,$jobfair_id);
                    }else{
                        throw new \Exception('请选择职位添加');
                    }
                }
                DB::commit();
                $return_data = array('status'=>1, 'msg'=>'编辑成功');
                return response()->json($return_data);
            } catch (\Exception $e) {
                DB::rollback();
                $return_data = array('status'=>0, 'msg'=>$e->getMessage());
                return response()->json($return_data);
            }
        } else {
            $user = auth('web-company')->user();
            $jobfair_id = $request->input('jobfairout_id', '');
            $exid = $request->input('exid', '');
            $jobs = $this->jobfairJobRepository->getJobs(['company_id'=>$user->id,'type'=>2,'audit'=>1]);
            if($jobs->isEmpty())
            {
                $return_data = array( 'status'=>2, 'msg' => '没有赴外招聘会职位,请先添加职位');
                return response()->json($return_data);
            }else{
                $join_jobs = $this->jobfairoutPutJobRepository->getJobfairJob(['exid'=>$exid]);
                $html = view('app.jobfairout.ajax.add_jobs', ['jobs'=>$jobs,'jobfair_id'=>$jobfair_id,'exid'=>$exid,'join_jobs'=>$join_jobs])->render();
                $return_data = array( 'status'=>1, 'data' => $html);
                return response()->json($return_data);
            }
        }
    }

    /**参加人员
     * return \Illuminate\Http\JsonResponse
     */
    public function ajaxPerson(Request $request)
    {
        if ($request->method() == 'POST') {
            $user = auth('web-company')->user();
            $jobfair_id = $request->input('jobfair_id', '');
            $exid = $request->input('exid', '');
            $this->jobfairoutCompanyService->isOwn($exid,$user);
            $this->jobfairoutCompanyService->isOwnJobfair($exid,$jobfair_id);
            $name= $request->input('name');
            $sex= $request->input('sex');
            $telephone = $request->input('telephone');
            $post = $request->input('post');
            $idcard = $request->input('idcard');
            $gentuan = $request->input('gentuan');
            $star = $request->input('star');
            $intro = $request->input('intro');
            if(!$name)
            {
                $return_data = array('status'=>0, 'msg'=>'请填写姓名');
                return response()->json($return_data);
            }
            if(!$sex)
            {
                $return_data = array('status'=>0, 'msg'=>'请选择性别');
                return response()->json($return_data);
            }
            if(!$telephone)
            {
                $return_data = array('status'=>0, 'msg'=>'请填写手机号码');
                return response()->json($return_data);
            }
            if(!preg_match("/^1[3456789]\d{9}$/", $telephone)){
                $return_data = array('status'=>0, 'msg'=>'请填写正确的手机号码');
                return response()->json($return_data);
            }
            if(!$post)
            {
                $return_data = array('status'=>0, 'msg'=>'请填写职务');
                return response()->json($return_data);
            }
            if(!$idcard)
            {
                $return_data = array('status'=>0, 'msg'=>'请填写身份证号码');
                return response()->json($return_data);
            }
            if(!isCreditNo($idcard)){
                $return_data = array('status'=>0, 'msg'=>'请填写正确的身份证号码');
                return response()->json($return_data);
            }
            $reserve_list_data = [
                'name'=>$name,
                'telephone'=>$telephone,
                'post'=>$post,
                'idcard'=>$idcard,
                'sex'=>$sex,
                'company_id'=>$user->id
            ];
            $reserve_data = [
                'jobfair_id'=>$jobfair_id,
                'company_id'=>$user->id,
                'exid'=>$exid,
                'name1'=>$name,
                'id1'=>$idcard,
                'phone1'=>$telephone,
                'sex1'=>$sex,
                'departmental_position1'=>$post,
                'gentuan'=>$gentuan,
                'star'=>$star,
                'intro'=>$intro,
            ];
            DB::beginTransaction();
            try {
                if(!$this->jobfairoutReserveListRepository->getOne(['idcard'=>$idcard,'company_id'=>$user->id])){
                    $this->jobfairoutReserveListRepository->create($reserve_list_data);
                }
                $this->jobfairoutReserveRepository->create($reserve_data);
                DB::commit();
                $return_data = array('status'=>1, 'msg'=>'编辑成功');
                return response()->json($return_data);
            } catch (\Exception $e) {
                DB::rollback();
                $return_data = array('status'=>0, 'msg'=>$e->getMessage());
                return response()->json($return_data);
            }
        } else {
            $user = auth('web-company')->user();
            $jobfair_id = $request->input('jobfairout_id', '');
            $exid = $request->input('exid', '');
            $reserve_list = $this->jobfairoutReserveListRepository->getReserveList(['company_id'=>$user->id]);
            $reserve = $this->jobfairoutReserveRepository->getReserve(['exid'=>$exid]);
            $html = view('app.jobfairout.ajax.add_person', ['reserve'=>$reserve,'reserve_list'=>$reserve_list,'jobfair_id'=>$jobfair_id,'exid'=>$exid])->render();
            $return_data = array( 'status'=>1, 'data' => $html);
            return response()->json($return_data);
        }
    }

    public function ajaxPersonDel(Request $request)
    {
        $id = $request->id;
        $user = $this->getLoginUser();
        $this->jobfairoutReserveService->isOwn($id,$user);
        if($this->jobfairoutReserveRepository->delete($id)){
            $return_data = array( 'status'=>1, 'data' => '删除成功');
            return response()->json($return_data);
        }
        $return_data = array( 'status'=>0, 'data' => '删除失败');
        return response()->json($return_data);
    }

    public function ajaxPersonInfo(Request $request)
    {
        $id = $request->id;
        if($data = $this->jobfairoutReserveListRepository->find($id)){
            $return_data = array( 'status'=>1, 'data' => $data);
            return response()->json($return_data);
        }
        $return_data = array( 'status'=>0, 'data' => '获取信息失败');
        return response()->json($return_data);
    }

    /**反馈表
     * return \Illuminate\Http\JsonResponse
     */
    public function ajaxFeedback(Request $request)
    {
        if ($request->method() == 'POST') {
            $user = auth('web-company')->user();
            $jobfair_id = $request->input('jobfair_id', '');
            $exid = $request->input('exid', '');
            $this->jobfairoutCompanyService->isOwn($exid,$user);
            $companyname = $request->input('companyname');
            $phone = $request->input('phone');
            $schoolname = $request->input('schoolname');
            $resumeNum = $request->input('resumeNum');
            $agreeNum = $request->input('agreeNum');
            $signNum = $request->input('signNum');
            $advice = $request->input('advice');
            $id = $request->input('id');
            if(!$companyname)
            {
                $return_data = array('status'=>0, 'msg'=>'请填写公司名称');
                return response()->json($return_data);
            }
            if(!$phone)
            {
                $return_data = array('status'=>0, 'msg'=>'请填写联系电话');
                return response()->json($return_data);
            }
            if(!preg_match("/^1[3456789]\d{9}$/", $phone)){
                $return_data = array('status'=>0, 'msg'=>'请填写正确的联系电话');
                return response()->json($return_data);
            }
            if(!$schoolname)
            {
                $return_data = array('status'=>0, 'msg'=>'请填写学校姓名');
                return response()->json($return_data);
            }
            $feedback_data = [
                'jobfair_id'=>$jobfair_id,
                'exid'=>$exid,
                'companyname'=>$companyname,
                'phone'=>$phone,
                'schoolname'=>$schoolname,
                'advice'=>$advice,
                'resumeNum'=>implode(',',$resumeNum),
                'agreeNum'=>implode(',',$agreeNum),
                'signNum'=>implode(',',$signNum),
                'company_id'=>$user->id
            ];
            DB::beginTransaction();
            try {
                if($id){
                    $this->jobfairoutFeedbackRepository->update($feedback_data,$id);
                }else{
                    $this->jobfairoutFeedbackRepository->create($feedback_data);
                }

                DB::commit();
                $return_data = array('status'=>1, 'msg'=>'保存成功');
                return response()->json($return_data);
            } catch (\Exception $e) {
                DB::rollback();
                $return_data = array('status'=>0, 'msg'=>$e->getMessage());
                return response()->json($return_data);
            }
        } else {
            $user = auth('web-company')->user();
            $jobfair_id = $request->input('jobfairout_id', '');
            $exid = $request->input('exid', '');
            $feedback = $this->jobfairoutFeedbackRepository->getOne(['exid'=>$exid]);
            $html = view('app.jobfairout.ajax.feedback', ['companyname'=>$user->companyname,'jobfair_id'=>$jobfair_id,'exid'=>$exid,'feedback'=>$feedback])->render();
            $return_data = array( 'status'=>1, 'data' => $html);
            return response()->json($return_data);
        }
    }

    public function companyShow(Request $request)
    {
        //获取企业信息
        $jobfair_id = $request->input('jobfair_id');
        $company_id = $request->input('company_id');
        $is_job = $request->input('is_job','');
        $company_info = $this->companyService->getCompanyInfo(['id'=>$company_id]);
        $this->putSeoData('company', $company_info);
        //在招职位
        $put_jobs_where = array(
            array('company_id','=',$company_id),
            array('jobfair_id','=',$jobfair_id),
        );
            $jobs_where = array(
            array('audit','=',1),
            array('display','=',1)
        );
        $jobs = $this->jobfairoutPutJobRepository->getWhere($jobs_where,$put_jobs_where);
        $jobfair = $this->jobfairoutRepository->findOne(['id'=>$jobfair_id]);
        //看过该公司的人还看过(获取相同行业的企业)
        $company_where = array(
            'trade' => $company_info->trade,
            'except_id' =>$company_info->id
        );
        $other_companys = $this->companyService->getOtherCompanies($company_where, 5);
        $user = getUser();
        if ($user && $user->utype==2) {
            //获取当前时间段内申请过的职位
            $space_time = (integer)config('aix.personal_set.per_set.per_set.apply_job_space');
            if ($space_time>0) {
                $stime = date('Y-m-d H:i:s', strtotime(date("Y-m-d", strtotime("-".$space_time." day"))));
                $apply_where = array(array('personal_uid','=',auth('web-member')->user()->id),array('created_at','>=',$stime));
            } else {
                $apply_where = array(array('personal_uid','=',auth('web-member')->user()->id));
            }
            $applys = $this->jobfairoutPersonalJopApplyService->getApplyJobs($apply_where);
        } else {
            $applys = array();
        }

        $return_data = array(
            'info'=>$company_info,
            'jobs'=>$jobs,
            'jobfair' => $jobfair,
            'applys' => $applys,
            'other_companys'=>$other_companys,
            'company_img' => $company_info->img,
        );
        if($is_job){
            return view('app.jobfairout.company.company_jobs', $return_data);
        }else{
            return view('app.jobfairout.company.company_show', $return_data);
        }
    }
}