<?php
/**
* Created by PhpStorm.
* User: wuzhenke
* Date: 2018/11/20
* Time: 9:53
*/
namespace App\Http\Controllers\Web\Company;
use App\Exceptions\ResponseException;
use App\Http\Controllers\Web\WebBaseController;
use App\Services\Common\EmailService;
use App\Services\Company\CompanyDownResumeService;
use App\Services\Company\PersonalJobsApplyService;
use App\Services\Person\ResumeService;
use Illuminate\Http\Request;
class ResumeController extends WebBaseController
{
protected $personalJobsApplyService;
protected $resumeService;
protected $companyDownResumeService;
protected $emailService;
/**
* ResumeController constructor.
* @param $personalJobsApplyService
* @param $resumeService
* @param $companyDownResumeService
* @param $emailService
*/
public function __construct(PersonalJobsApplyService $personalJobsApplyService, EmailService $emailService, ResumeService $resumeService, CompanyDownResumeService $companyDownResumeService)
{
$this->personalJobsApplyService = $personalJobsApplyService;
$this->resumeService = $resumeService;
$this->companyDownResumeService = $companyDownResumeService;
$this->emailService = $emailService;
}
/**
* 收到的简历
* @param Request $request
* @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View
*/
public function resumeApply(Request $request)
{
$user = auth('web-company')->user();
$result = $this->personalJobsApplyService->resumeApply($request->all(), $user);
return view('app.company.resume.resume_apply', $result);
}
/**
* 标记简历
* @param $id
* @param $state
* @return \Illuminate\Http\JsonResponse
*/
public function resumeLabelApply($id, $state)
{
$user = auth('web-company')->user();
return $this->personalJobsApplyService->labelApply($id, $state, $user);
}
/**
* 删除申请的简历(单个和批量)
* @param Request $request
* @return \Illuminate\Http\JsonResponse
* @throws \Throwable
*/
public function delJobsApply(Request $request)
{
if ($request->method()=='GET') {
$tip='被删除后将无法恢复,您确定要删除选中的简历吗?';
return response()->json(['status'=>1,'msg'=>'获取数据成功', 'data'=>['html'=>view('app.company.ajax.ajax_warning', ['tip'=>$tip])->render()]]);
} else {
$user = auth('web-company')->user();
return $this->personalJobsApplyService->delJobsApply($request,$user);
}
}
/**
* 邀请面试
* @param Request $request
* @return \Illuminate\Http\JsonResponse
* @throws \Throwable
*/
public function jobsInterview(Request $request)
{
$user = auth('web-company')->user();
if ($request->method() == 'GET') {
if (!$request->resume_id) {
return response()->json(['status'=>0, 'msg'=>'请选择简历!']);
}
return $this->personalJobsApplyService->getApply($request->all(), $user);
} else {
return $this->personalJobsApplyService->saveApply($request,$user);
}
}
/**
* 保存到电脑 ====收到简历
* @param Request $request
* @return \Illuminate\Http\JsonResponse|\Symfony\Component\HttpFoundation\BinaryFileResponse
* @throws ResponseException
*/
public function resumeSaveToComputer(Request $request)
{
$yid = $request->y_id;
$model = $request->model;
if (!$yid) {
throw new ResponseException('请选择简历');
}
$user = auth('web-company')->user();
if($model == 'personaljobsapply') {
$this->personalJobsApplyService->isOwn($yid, $user,'id');
}
if($model == 'downresume') {
$this->companyDownResumeService->isOwn($yid, $user,'id');
}
$model_arr = ['personaljobsapply','downresume'];
if (!in_array($model, $model_arr)) {
throw new ResponseException('参数错误');
}
if (false === $res = $this->personalJobsApplyService->saveAsDoc($yid, $model)) {
throw new ResponseException('查找不到相关简历!');
} else {
return response()->download($res['path'], "简历压缩包".date("Ymd").".zip");
}
return response()->json(['status'=>0, 'msg'=>"保存失败"]);
}
/**发送到Email
* @param Request $request
* @return \Illuminate\Http\JsonResponse
* @throws \Throwable
*/
public function sendToEmail(Request $request)
{
$resume_id = $request->resume_id;
if (!$resume_id) {
return response()->json(['status'=>0,'msg'=>'请选择简历!']);
}
if ($request->method()=='POST') {
$user = auth('web-company')->user();
$model = $request->model;
if($model == 'personaljobsapply') {
$this->personalJobsApplyService->isOwn($resume_id, $user,'resume_id');
}
if($model == 'downresume') {
$this->companyDownResumeService->isOwn($resume_id, $user,'resume_id');
}
$email = $request->email;
$pattern = "/^[_\.0-9a-zA-Z-]+[_0-9a-zA-Z-]@([0-9a-zA-Z][0-9a-zA-Z-]+\.)+[a-zA-Z]{2,3}$/";
if (!$email || !preg_match($pattern, $email)) {
return response()->json(['status'=>0,'msg'=>'email不正确']);
}
return $this->sendEmail($email, $resume_id);
}
return response()->json(['status'=>1,'msg'=>'返回成功','html'=>view('app.company.ajax.ajax_send_to_email')->render()]);
}
/**发送到Email
* @param $email
* @param $resume_id
* @return \Illuminate\Http\JsonResponse
* @throws \Throwable
*/
public function sendEmail($email, $resume_id)
{
if (!is_array($resume_id)) {
$resume_id = explode(',', $resume_id);
}
foreach ($resume_id as $key => $val) {
$this->sendEmailDone($email, $val);
}
return response()->json(['status'=>1,'msg'=>"发送成功!" ]);
}
/**发送到Email
* @param $email
* @param $resume_id
* @return ResumeController
* @throws \Throwable
*/
public function sendEmailDone($email, $resume_id)
{
$res = $this->resumeService->resumeDoc($resume_id);
if (!$res) {
return $this->sendErrorResponse('参数错误!', 404);
}
$resume = view('app.tpl.word_resume', ['content'=>$res])->render();
$this->emailService->sendMail($email, EmailService::TEMPLATE_SEND_RESUME, ['personalfullname'=>$res['resume']['fullname']], ['resume'=>$resume]);
}
/**
* @param Request $request
* @param 企业的邀请面试记录
* @return 集合
*/
public function interviewJobs(Request $request)
{
$user = auth('web-company')->user();
$res = $this->resumeService->interviewJobs($request->all(), $user);
return view('app.company.resume.jobs_interview', $res);
}
/**
* 面试邀请详情
* @param Request $request
* @return \Illuminate\Http\JsonResponse
* @throws \Throwable
*/
public function interviewDetail(Request $request)
{
return $this->resumeService->interviewDetail($request);
}
/**
* 删除下载面试邀请
* @param Request $request
* @return \Illuminate\Http\JsonResponse
* @throws \Throwable
*/
public function interviewDel(Request $request)
{
if ($request->method()=='GET') {
$tip='被删除后将无法恢复,您确定要删除选中的面试邀请记录吗?';
return response()->json(['status'=>1,'msg'=>'获取数据成功', 'data'=>['html'=>view('app.company.ajax.ajax_warning', ['tip'=>$tip])->render()]]);
} else {
$user = auth('web-company')->user();
$res = $this->resumeService->interviewDel($request->all(),$user);
return response()->json(['status'=>$res['status'], 'msg'=>$res['msg']]);
}
}
/**
* 已下载简历
* @param Request $request
* @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View
*/
public function resumeDown(Request $request)
{
$user = auth('web-company')->user();
$result = $this->resumeService->resumeDown($request->all(), $user);
return view('app.company.resume.resume_down', $result);
}
public function resumeDownDel(Request $request)
{
if ($request->method() =='POST') {
return $this->resumeService->resumeDownDel($request);
}
$tip='被删除后将无法恢复,您确定要删除选中的下载的简历吗?';
return response()->json(['status'=>1,'msg'=>'获取数据成功', 'data'=>view('app.company.ajax.ajax_warning', ['tip'=>$tip])->render()]);
}
/**
* 标注下载简历
* @param $id
* @param $state
* @return \Illuminate\Http\JsonResponse
*/
public function labelResume($id, $state)
{
return $this->companyDownResumeService->labelApply($id, $state);
}
/**企业收藏的简历
* @param Request $request
* @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View
*/
public function favoritesResume(Request $request)
{
$user = auth('web-company')->user();
$res = $this->resumeService->favoritesResume($request, $user, 0);
return view('app.company.resume.favorites_resume', $res);
}
/**收藏简历
* @param Request $request
* @return \Illuminate\Http\JsonResponse
* @throws \Prettus\Validator\Exceptions\ValidatorException
* @throws \Throwable
*/
public function favoritesResumeSave(Request $request)
{
if ($request->method() == 'GET') {
$tip = "您确定要收藏选中的简历吗?";
return response()->json(['status'=>1, 'data'=>view('app.company.ajax.ajax_warning', ['tip'=>$tip])->render()]);
}
return $this->resumeService->favoritesResumeSave($request);
}
/**删除收藏的简历
* @param Request $request
* @return \Illuminate\Http\JsonResponse
* @throws \Throwable
*/
public function favoritesResumeDel(Request $request)
{
if ($request->method() == 'GET') {
$tip = "被删除后将无法恢复,您确定要删除选中的简历吗?";
return response()->json(['status'=>1, 'data'=>view('app.company.ajax.ajax_warning', ['tip'=>$tip])->render()]);
}
$user = auth('web-company')->user();
return $this->resumeService->favoritesResumeDel($request->y_id,$user);
}
/**
* 浏览过的简历
* @param Request $request
* @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View
*/
public function browseResume(Request $request)
{
$res = $this->resumeService->browseResume($request);
return view('app.company.resume.browse_resume', $res);
}
/**删除浏览过的简历
* @param Request $request
* @return \Illuminate\Http\JsonResponse
* @throws \Throwable
*/
public function browseResumeDel(Request $request)
{
if ($request->method() == 'GET') {
$tip = "被删除后将无法恢复,您确定要删除选中的简历吗?";
return response()->json(['status'=>1, 'data'=>view('app.company.ajax.ajax_warning', ['tip'=>$tip])->render()]);
}
$user = auth('web-company')->user();
return $this->resumeService->browseResumeDel($request,$user);
}
/**谁看过我
* @param Request $request
* @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View
*/
public function browseJobs(Request $request)
{
$res = $this->resumeService->browseJobs($request);
return view('app.company.resume.browse_jobs', $res);
}
/**删除谁看过我
* @param Request $request
* @return \Illuminate\Http\JsonResponse
* @throws \Throwable
*/
public function browseJobsDel(Request $request)
{
if ($request->method() == 'GET') {
$tip = "被删除后将无法恢复,您确定要删除选中的简历吗?";
return response()->json(['status'=>1, 'data'=>view('app.company.ajax.ajax_warning', ['tip'=>$tip])->render()]);
}
$user = auth('web-company')->user();
return $this->resumeService->browseJobsDel($request,$user);
}
/**面试邀请
* @param Request $request
* @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View
*/
public function feedback(Request $request)
{
$res = $this->resumeService->feedback($request);
return view('app.company.resume.feedback', $res);
}
/**面试邀请反馈操作
* @param Request $request
* @return ResumeController|\Illuminate\Http\JsonResponse
* @throws \Throwable
*/
public function feedbackModify(Request $request)
{
$id = $request->id?$request->id:0;
if (!$id) {
return response()->json(['status'=>0,'msg'=>'参数错误!']);
}
if ($request->method() == "POST") {
$explan = $request->notes?$request->notes:'';
$status = $request->status?$request->status:0;
if (!$status) {
return $this->sendErrorResponse('请选择反馈结果!');
}
$user = auth('web-company')->user();
return $this->resumeService->feedbackModify($id, $explan, $status,$user->id);
}
return response()->json(['status'=>1,'html'=>view('app.company.ajax.ajax_feedback', ['id'=>$id])->render()]);
}
/**回收站
* @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View
*/
public function recycle()
{
$res = $this->resumeService->recycle();
return view('app.company.resume.resume_recycle', $res);
}
/**回收站删除
* @param Request $request
* @return \Illuminate\Http\JsonResponse
* @throws \Throwable
*/
public function destroyJobsApply(Request $request)
{
$ids = $request->id;
if ($request->method()=='POST') {
return $this->resumeService->destroyJobsApply($ids);
}
$tip = "此处删除为物理删除,您确定要删除选中的简历吗?";
return response()->json(['status'=>1,'data'=>view('app.company.ajax.ajax_warning', ['tip'=>$tip])->render()]);
}
/**清空回收站
* @param Request $request
* @return \Illuminate\Http\JsonResponse
* @throws \Throwable
*/
public function clearRecycle(Request $request)
{
if ($request->method()=='POST') {
return $this->resumeService->clearRecycle();
}
$tip = "清空回收站将物理删除所有简历,您确定要清空回收站吗?";
return response()->json(['status'=>1,'data'=>view('app.company.ajax.ajax_warning', ['tip'=>$tip])->render()]);
}
public function concern(Request $request)
{
$res = $this->resumeService->concern($request);
return view('app.company.resume.concern', $res);
}
public function concernDel(Request $request)
{
if ($request->method()=='POST') {
$user = auth('web-company')->user();
return $this->resumeService->concernDel($request,$user);
}
$tip = "被删除后将无法恢复,您确定要删除选中的记录吗?";
return response()->json(['status'=>1,'data'=>view('app.company.ajax.ajax_warning', ['tip'=>$tip])->render()]);
}
}