ResumeController.php 17 KB

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