ResumeController.php 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454
  1. <?php
  2. /**
  3. * Created by PhpStorm.
  4. * User: wuzhenke
  5. * Date: 2018/11/20
  6. * Time: 9:53
  7. */
  8. namespace App\Http\Controllers\Web\Company;
  9. use App\Exceptions\ResponseException;
  10. use App\Http\Controllers\Web\WebBaseController;
  11. use App\Services\Common\EmailService;
  12. use App\Services\Company\CompanyDownResumeService;
  13. use App\Services\Company\PersonalJobsApplyService;
  14. use App\Services\Person\ResumeService;
  15. use Illuminate\Http\Request;
  16. class ResumeController extends WebBaseController
  17. {
  18. protected $personalJobsApplyService;
  19. protected $resumeService;
  20. protected $companyDownResumeService;
  21. protected $emailService;
  22. /**
  23. * ResumeController constructor.
  24. * @param $personalJobsApplyService
  25. * @param $resumeService
  26. * @param $companyDownResumeService
  27. * @param $emailService
  28. */
  29. public function __construct(PersonalJobsApplyService $personalJobsApplyService, EmailService $emailService, ResumeService $resumeService, CompanyDownResumeService $companyDownResumeService)
  30. {
  31. $this->personalJobsApplyService = $personalJobsApplyService;
  32. $this->resumeService = $resumeService;
  33. $this->companyDownResumeService = $companyDownResumeService;
  34. $this->emailService = $emailService;
  35. }
  36. /**
  37. * 收到的简历
  38. * @param Request $request
  39. * @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View
  40. */
  41. public function resumeApply(Request $request)
  42. {
  43. $user = auth('web-company')->user();
  44. $result = $this->personalJobsApplyService->resumeApply($request->all(), $user);
  45. $result['user'] = $user;
  46. return view('app.company.resume.resume_apply', $result);
  47. }
  48. /**
  49. * 标记简历
  50. * @param $id
  51. * @param $state
  52. * @return \Illuminate\Http\JsonResponse
  53. */
  54. public function resumeLabelApply($id, $state)
  55. {
  56. $user = auth('web-company')->user();
  57. return $this->personalJobsApplyService->labelApply($id, $state, $user);
  58. }
  59. /**
  60. * 删除申请的简历(单个和批量)
  61. * @param Request $request
  62. * @return \Illuminate\Http\JsonResponse
  63. * @throws \Throwable
  64. */
  65. public function delJobsApply(Request $request)
  66. {
  67. if ($request->method()=='GET') {
  68. $tip='被删除后将无法恢复,您确定要删除选中的简历吗?';
  69. return response()->json(['status'=>1,'msg'=>'获取数据成功', 'data'=>['html'=>view('app.company.ajax.ajax_warning', ['tip'=>$tip])->render()]]);
  70. } else {
  71. $user = auth('web-company')->user();
  72. return $this->personalJobsApplyService->delJobsApply($request,$user);
  73. }
  74. }
  75. /**
  76. * 邀请面试
  77. * @param Request $request
  78. * @return \Illuminate\Http\JsonResponse
  79. * @throws \Throwable
  80. */
  81. public function jobsInterview(Request $request)
  82. {
  83. $user = auth('web-company')->user();
  84. if ($request->method() == 'GET') {
  85. if (!$request->resume_id) {
  86. return response()->json(['status'=>0, 'msg'=>'请选择简历!']);
  87. }
  88. return $this->personalJobsApplyService->getApply($request->all(), $user);
  89. } else {
  90. return $this->personalJobsApplyService->saveApply($request,$user);
  91. }
  92. }
  93. /**
  94. * 保存到电脑 ====收到简历
  95. * @param Request $request
  96. * @return \Illuminate\Http\JsonResponse|\Symfony\Component\HttpFoundation\BinaryFileResponse
  97. * @throws ResponseException
  98. */
  99. public function resumeSaveToComputer(Request $request)
  100. {
  101. $yid = $request->y_id;
  102. $model = $request->model;
  103. if (!$yid) {
  104. throw new ResponseException('请选择简历');
  105. }
  106. $user = auth('web-company')->user();
  107. if($model == 'personaljobsapply') {
  108. $this->personalJobsApplyService->isOwn($yid, $user,'id');
  109. }
  110. if($model == 'downresume') {
  111. $this->companyDownResumeService->isOwn($yid, $user,'id');
  112. }
  113. $model_arr = ['personaljobsapply','downresume'];
  114. if (!in_array($model, $model_arr)) {
  115. throw new ResponseException('参数错误');
  116. }
  117. if (false === $res = $this->personalJobsApplyService->saveAsDoc($yid, $model)) {
  118. throw new ResponseException('查找不到相关简历!');
  119. } else {
  120. return response()->download($res['path'], "简历压缩包".date("Ymd").".zip");
  121. }
  122. return response()->json(['status'=>0, 'msg'=>"保存失败"]);
  123. }
  124. /**发送到Email
  125. * @param Request $request
  126. * @return \Illuminate\Http\JsonResponse
  127. * @throws \Throwable
  128. */
  129. public function sendToEmail(Request $request)
  130. {
  131. $resume_id = $request->resume_id;
  132. if (!$resume_id) {
  133. return response()->json(['status'=>0,'msg'=>'请选择简历!']);
  134. }
  135. if ($request->method()=='POST') {
  136. $user = auth('web-company')->user();
  137. $model = $request->model;
  138. if($model == 'personaljobsapply') {
  139. $this->personalJobsApplyService->isOwn($resume_id, $user,'resume_id');
  140. }
  141. if($model == 'downresume') {
  142. $this->companyDownResumeService->isOwn($resume_id, $user,'resume_id');
  143. }
  144. $email = $request->email;
  145. $pattern = "/^[_\.0-9a-zA-Z-]+[_0-9a-zA-Z-]@([0-9a-zA-Z][0-9a-zA-Z-]+\.)+[a-zA-Z]{2,3}$/";
  146. if (!$email || !preg_match($pattern, $email)) {
  147. return response()->json(['status'=>0,'msg'=>'email不正确']);
  148. }
  149. return $this->sendEmail($email, $resume_id);
  150. }
  151. return response()->json(['status'=>1,'msg'=>'返回成功','html'=>view('app.company.ajax.ajax_send_to_email')->render()]);
  152. }
  153. /**发送到Email
  154. * @param $email
  155. * @param $resume_id
  156. * @return \Illuminate\Http\JsonResponse
  157. * @throws \Throwable
  158. */
  159. public function sendEmail($email, $resume_id)
  160. {
  161. if (!is_array($resume_id)) {
  162. $resume_id = explode(',', $resume_id);
  163. }
  164. foreach ($resume_id as $key => $val) {
  165. $this->sendEmailDone($email, $val);
  166. }
  167. return response()->json(['status'=>1,'msg'=>"发送成功!" ]);
  168. }
  169. /**发送到Email
  170. * @param $email
  171. * @param $resume_id
  172. * @return ResumeController
  173. * @throws \Throwable
  174. */
  175. public function sendEmailDone($email, $resume_id)
  176. {
  177. $res = $this->resumeService->resumeDoc($resume_id);
  178. if (!$res) {
  179. return $this->sendErrorResponse('参数错误!', 404);
  180. }
  181. $resume = view('app.tpl.word_resume', ['content'=>$res])->render();
  182. $this->emailService->sendMail($email, EmailService::TEMPLATE_SEND_RESUME, ['personalfullname'=>$res['resume']['fullname']], ['resume'=>$resume]);
  183. }
  184. /**
  185. * @param Request $request
  186. * @param 企业的邀请面试记录
  187. * @return 集合
  188. */
  189. public function interviewJobs(Request $request)
  190. {
  191. $user = auth('web-company')->user();
  192. $res = $this->resumeService->interviewJobs($request->all(), $user);
  193. return view('app.company.resume.jobs_interview', $res);
  194. }
  195. /**
  196. * 面试邀请详情
  197. * @param Request $request
  198. * @return \Illuminate\Http\JsonResponse
  199. * @throws \Throwable
  200. */
  201. public function interviewDetail(Request $request)
  202. {
  203. return $this->resumeService->interviewDetail($request);
  204. }
  205. /**
  206. * 删除下载面试邀请
  207. * @param Request $request
  208. * @return \Illuminate\Http\JsonResponse
  209. * @throws \Throwable
  210. */
  211. public function interviewDel(Request $request)
  212. {
  213. if ($request->method()=='GET') {
  214. $tip='被删除后将无法恢复,您确定要删除选中的面试邀请记录吗?';
  215. return response()->json(['status'=>1,'msg'=>'获取数据成功', 'data'=>['html'=>view('app.company.ajax.ajax_warning', ['tip'=>$tip])->render()]]);
  216. } else {
  217. $user = auth('web-company')->user();
  218. $res = $this->resumeService->interviewDel($request->all(),$user);
  219. return response()->json(['status'=>$res['status'], 'msg'=>$res['msg']]);
  220. }
  221. }
  222. /**
  223. * 已下载简历
  224. * @param Request $request
  225. * @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View
  226. */
  227. public function resumeDown(Request $request)
  228. {
  229. $user = auth('web-company')->user();
  230. $result = $this->resumeService->resumeDown($request->all(), $user);
  231. return view('app.company.resume.resume_down', $result);
  232. }
  233. public function resumeDownDel(Request $request)
  234. {
  235. if ($request->method() =='POST') {
  236. return $this->resumeService->resumeDownDel($request);
  237. }
  238. $tip='被删除后将无法恢复,您确定要删除选中的下载的简历吗?';
  239. return response()->json(['status'=>1,'msg'=>'获取数据成功', 'data'=>view('app.company.ajax.ajax_warning', ['tip'=>$tip])->render()]);
  240. }
  241. /**
  242. * 标注下载简历
  243. * @param $id
  244. * @param $state
  245. * @return \Illuminate\Http\JsonResponse
  246. */
  247. public function labelResume($id, $state)
  248. {
  249. return $this->companyDownResumeService->labelApply($id, $state);
  250. }
  251. /**企业收藏的简历
  252. * @param Request $request
  253. * @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View
  254. */
  255. public function favoritesResume(Request $request)
  256. {
  257. $user = auth('web-company')->user();
  258. $res = $this->resumeService->favoritesResume($request, $user, 0);
  259. return view('app.company.resume.favorites_resume', $res);
  260. }
  261. /**收藏简历
  262. * @param Request $request
  263. * @return \Illuminate\Http\JsonResponse
  264. * @throws \Prettus\Validator\Exceptions\ValidatorException
  265. * @throws \Throwable
  266. */
  267. public function favoritesResumeSave(Request $request)
  268. {
  269. if ($request->method() == 'GET') {
  270. $tip = "您确定要收藏选中的简历吗?";
  271. return response()->json(['status'=>1, 'data'=>view('app.company.ajax.ajax_warning', ['tip'=>$tip])->render()]);
  272. }
  273. return $this->resumeService->favoritesResumeSave($request);
  274. }
  275. /**删除收藏的简历
  276. * @param Request $request
  277. * @return \Illuminate\Http\JsonResponse
  278. * @throws \Throwable
  279. */
  280. public function favoritesResumeDel(Request $request)
  281. {
  282. if ($request->method() == 'GET') {
  283. $tip = "被删除后将无法恢复,您确定要删除选中的简历吗?";
  284. return response()->json(['status'=>1, 'data'=>view('app.company.ajax.ajax_warning', ['tip'=>$tip])->render()]);
  285. }
  286. $user = auth('web-company')->user();
  287. return $this->resumeService->favoritesResumeDel($request->y_id,$user);
  288. }
  289. /**
  290. * 浏览过的简历
  291. * @param Request $request
  292. * @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View
  293. */
  294. public function browseResume(Request $request)
  295. {
  296. $res = $this->resumeService->browseResume($request);
  297. return view('app.company.resume.browse_resume', $res);
  298. }
  299. /**删除浏览过的简历
  300. * @param Request $request
  301. * @return \Illuminate\Http\JsonResponse
  302. * @throws \Throwable
  303. */
  304. public function browseResumeDel(Request $request)
  305. {
  306. if ($request->method() == 'GET') {
  307. $tip = "被删除后将无法恢复,您确定要删除选中的简历吗?";
  308. return response()->json(['status'=>1, 'data'=>view('app.company.ajax.ajax_warning', ['tip'=>$tip])->render()]);
  309. }
  310. $user = auth('web-company')->user();
  311. return $this->resumeService->browseResumeDel($request,$user);
  312. }
  313. /**谁看过我
  314. * @param Request $request
  315. * @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View
  316. */
  317. public function browseJobs(Request $request)
  318. {
  319. $res = $this->resumeService->browseJobs($request);
  320. return view('app.company.resume.browse_jobs', $res);
  321. }
  322. /**删除谁看过我
  323. * @param Request $request
  324. * @return \Illuminate\Http\JsonResponse
  325. * @throws \Throwable
  326. */
  327. public function browseJobsDel(Request $request)
  328. {
  329. if ($request->method() == 'GET') {
  330. $tip = "被删除后将无法恢复,您确定要删除选中的简历吗?";
  331. return response()->json(['status'=>1, 'data'=>view('app.company.ajax.ajax_warning', ['tip'=>$tip])->render()]);
  332. }
  333. $user = auth('web-company')->user();
  334. return $this->resumeService->browseJobsDel($request,$user);
  335. }
  336. /**面试邀请
  337. * @param Request $request
  338. * @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View
  339. */
  340. public function feedback(Request $request)
  341. {
  342. $res = $this->resumeService->feedback($request);
  343. return view('app.company.resume.feedback', $res);
  344. }
  345. /**面试邀请反馈操作
  346. * @param Request $request
  347. * @return ResumeController|\Illuminate\Http\JsonResponse
  348. * @throws \Throwable
  349. */
  350. public function feedbackModify(Request $request)
  351. {
  352. $id = $request->id?$request->id:0;
  353. if (!$id) {
  354. return response()->json(['status'=>0,'msg'=>'参数错误!']);
  355. }
  356. if ($request->method() == "POST") {
  357. $explan = $request->notes?$request->notes:'';
  358. $status = $request->status?$request->status:0;
  359. if (!$status) {
  360. return $this->sendErrorResponse('请选择反馈结果!');
  361. }
  362. $user = auth('web-company')->user();
  363. return $this->resumeService->feedbackModify($id, $explan, $status,$user->id);
  364. }
  365. return response()->json(['status'=>1,'html'=>view('app.company.ajax.ajax_feedback', ['id'=>$id])->render()]);
  366. }
  367. /**回收站
  368. * @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View
  369. */
  370. public function recycle()
  371. {
  372. $res = $this->resumeService->recycle();
  373. return view('app.company.resume.resume_recycle', $res);
  374. }
  375. /**回收站删除
  376. * @param Request $request
  377. * @return \Illuminate\Http\JsonResponse
  378. * @throws \Throwable
  379. */
  380. public function destroyJobsApply(Request $request)
  381. {
  382. $ids = $request->id;
  383. if ($request->method()=='POST') {
  384. return $this->resumeService->destroyJobsApply($ids);
  385. }
  386. $tip = "此处删除为物理删除,您确定要删除选中的简历吗?";
  387. return response()->json(['status'=>1,'data'=>view('app.company.ajax.ajax_warning', ['tip'=>$tip])->render()]);
  388. }
  389. /**清空回收站
  390. * @param Request $request
  391. * @return \Illuminate\Http\JsonResponse
  392. * @throws \Throwable
  393. */
  394. public function clearRecycle(Request $request)
  395. {
  396. if ($request->method()=='POST') {
  397. return $this->resumeService->clearRecycle();
  398. }
  399. $tip = "清空回收站将物理删除所有简历,您确定要清空回收站吗?";
  400. return response()->json(['status'=>1,'data'=>view('app.company.ajax.ajax_warning', ['tip'=>$tip])->render()]);
  401. }
  402. public function concern(Request $request)
  403. {
  404. $res = $this->resumeService->concern($request);
  405. return view('app.company.resume.concern', $res);
  406. }
  407. public function concernDel(Request $request)
  408. {
  409. if ($request->method()=='POST') {
  410. $user = auth('web-company')->user();
  411. return $this->resumeService->concernDel($request,$user);
  412. }
  413. $tip = "被删除后将无法恢复,您确定要删除选中的记录吗?";
  414. return response()->json(['status'=>1,'data'=>view('app.company.ajax.ajax_warning', ['tip'=>$tip])->render()]);
  415. }
  416. }