PadSearchResumeController.php 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318
  1. <?php
  2. /**
  3. * Created by PhpStorm.
  4. * User: Administrator
  5. * Date: 2019/3/26
  6. * Time: 11:34
  7. */
  8. namespace App\Http\Controllers\Web\Hardware\Pad;
  9. use App\Http\Controllers\Web\WebBaseController;
  10. use Illuminate\Http\Request;
  11. use App\Services\Common\SearchService;
  12. use App\Services\Person\ResumeService;
  13. use App\Services\Common\MembersSetmealService;
  14. use App\Services\Company\JobsService;
  15. use App\Services\Company\CompanyDownResumeService;
  16. use App\Services\Common\SetmealIncrementsService;
  17. use App\Services\Content\FeedbackService;
  18. use App\Services\Company\PersonalJobsApplyService;
  19. use App\Services\Jobfair\JobfairPutJobService;
  20. use App\Services\Company\CompanyService;
  21. class PadSearchResumeController extends WebBaseController
  22. {
  23. protected $searchService;
  24. protected $resumeService;
  25. protected $membersSetmealService;
  26. protected $jobsService;
  27. protected $companyDownResumeService;
  28. protected $setmealIncrementsService;
  29. protected $feedbackService;
  30. protected $personalJobsApplyService;
  31. protected $jobsfairPutJobService;
  32. protected $companyService;
  33. public function __construct(SearchService $searchService,JobfairPutJobService $jobsfairPutJobService,PersonalJobsApplyService $personalJobsApplyService,ResumeService $resumeService, MembersSetmealService $membersSetmealService, JobsService $jobsService,CompanyDownResumeService $companyDownResumeService,SetmealIncrementsService $setmealIncrementsService,FeedbackService $feedbackService, CompanyService $companyService)
  34. {
  35. $this->searchService = $searchService;
  36. $this->resumeService = $resumeService;
  37. $this->membersSetmealService = $membersSetmealService;
  38. $this->jobsService = $jobsService;
  39. $this->companyDownResumeService = $companyDownResumeService;
  40. $this->setmealIncrementsService = $setmealIncrementsService;
  41. $this->feedbackService = $feedbackService;
  42. $this->personalJobsApplyService = $personalJobsApplyService;
  43. $this->jobsfairPutJobService = $jobsfairPutJobService;
  44. $this->companyService = $companyService;
  45. }
  46. public function index(Request $request){
  47. $order_by = array('stime'=>'desc', 'updated_at'=>'desc');
  48. if (config('aix.personal_set.per_set.show_set.resume_display')=='1') {
  49. $where[] = array('audit','=','2');
  50. } else {
  51. $where[] = array('audit','<>','0');
  52. }
  53. $where[] = array('display','=',1);
  54. $where[] = array('subsite_ids','=',get_subsite_id());
  55. $list = $this->searchService->search('Resume',$where,$order_by);
  56. if ($list->total()>0) {
  57. $list_items = $this->resumeService->dealResumeFields($list->items());
  58. } else {
  59. $list_items = array();
  60. }
  61. return view('app.hardware.pad.search_resume_index',['list_items'=>$list_items,'list'=>$list]);
  62. }
  63. /**
  64. * @param $id
  65. * @param Request $request
  66. * @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View
  67. * @throws \App\Exceptions\ResponseException
  68. */
  69. public function show($id,Request $request){
  70. /**
  71. * type:
  72. * 1:正常流程,判断是否可以下载、邀请面试
  73. * 2:直接邀请,不判断是否下载(已收到简历跳转)
  74. * 3:直接邀请,不判断是否下载(面试邀请跳转)
  75. * 4:只显示详情,不给任何操作
  76. * 5:直接邀请,不判断是否下载(已收到简历跳转)
  77. */
  78. $type = $request->input('type');
  79. $apply_id = $request->input('apply_id','');
  80. $res = $this->resumeService->padResumeShow($id,$type, '', $this->getUser());
  81. $this->putSeoData('resume', $res['resume']);
  82. //获取企业在招职位
  83. $user = auth('web-company')->user();
  84. $job_where = array(
  85. array('display','=',1),
  86. array('company_id','=',$user->id),
  87. );
  88. if (config('aix.companyset.comset.show_set.jobs_display') == 1) {
  89. $job_where[] = array('audit','=',1);
  90. } else {
  91. $job_where[] = array('audit','<>',3);
  92. }
  93. $job_where[] = array('jobfair_id','=',session('floorplan_stands.jobfair_id'));
  94. $where1 = ['position_id'=>session('floorplan_stands.id')];
  95. $jobs = $this->jobsfairPutJobService->jobfairCompany($job_where,$user,$where1);
  96. $html = '';
  97. if($type == 3 || $type == 5){
  98. foreach ($jobs as $val){
  99. $html .= "<label><input class='job' type='radio' name='job' value='".$val->id."' />&nbsp;".$val->jobs->jobs_name."</label>";
  100. }
  101. }
  102. return view('app.hardware.pad.search_resume_show', ['content'=>$res,'resume'=>$res['resume'],'type'=>$type,'html'=>$html,'apply_id'=>$apply_id]);
  103. }
  104. public function search(Request $request){
  105. $order_by = array('stime'=>'desc', 'updated_at'=>'desc');
  106. if (config('aix.personal_set.per_set.show_set.resume_display')=='1') {
  107. $where[] = array('audit','=','2');
  108. } else {
  109. $where[] = array('audit','<>','0');
  110. }
  111. $where[] = array('display','=',1);
  112. $where[] = array('subsite_ids','=',get_subsite_id());
  113. $list = $this->searchService->search('Resume', $where, $order_by, $request->input('key'));
  114. if ($list->total()>0) {
  115. $list_items = $this->resumeService->dealResumeFields($list->items());
  116. } else {
  117. $list_items = array();
  118. }
  119. return view('app.hardware.pad.search_resume_index',['list_items'=>$list_items,'list'=>$list]);
  120. }
  121. /**
  122. * @param Request $request
  123. * @return \Illuminate\Http\JsonResponse
  124. * @throws \Throwable
  125. * 下载简历
  126. */
  127. public function resumeDown(Request $request){
  128. $resume_id = $request->input('rid');
  129. if (!$resume_id) {
  130. return response()->json(['status'=>0, 'msg'=>'请选择简历!']);
  131. }
  132. $rid = is_array($resume_id)?$resume_id:explode(",", $resume_id);
  133. $resume_num =count($rid);
  134. $user = auth('web-company')->user();
  135. $member_setmeal = $this->membersSetmealService->getUserSetmeal($user, '1');
  136. if ($request->method() == 'POST') {
  137. $addarr['rid'] = $rid;
  138. $rst = $this->companyDownResumeService->addDownResume($addarr, $user, $member_setmeal);
  139. if (array_get($rst, 'status')==1) {
  140. if ($resume_num == 1) {
  141. if ($member_setmeal->download_resume > 0) {
  142. $this->membersSetmealService->actionUserSetmeal($user->id, 'download_resume', 2); //修改会员套餐信息中的下载简历数量
  143. $log_value = '下载简历【'.array_get($rst, 'msg')->resume_name.'】(简历id:'.$addarr['rid'][0].'),消耗简历下载数:1,套餐剩余:'.($member_setmeal->download_resume-1);
  144. }
  145. //添加会员日志
  146. $member_log = array(
  147. 'uid' =>$user->id,
  148. 'utype' =>1,
  149. 'username' => $user->username,
  150. 'ip' => ip2long($request->getClientIp()),
  151. 'log_address'=>'本机地址'
  152. );
  153. $this->feedbackService->addMembersLog($member_log, '1012', $log_value);
  154. }
  155. }
  156. return response()->json($rst);
  157. } else {
  158. //判断是否开通会员服务
  159. if (!$member_setmeal) {
  160. return response()->json(['status'=>0, 'msg'=>'您还没有开通服务,请<a target="_blank" href="'.route('mobile.firm.service.setmeal.add').'">开通</a>!']);
  161. }
  162. //判断服务是否到期
  163. if ($member_setmeal->expire == 1) {
  164. return response()->json(['status'=>0, 'msg'=>'您的服务已经到期,请<a target="_blank" href="'.route('mobile.firm.service.setmeal.add').'">重新开通</a>!']);
  165. }
  166. //后台简历下载设置判断
  167. if (config('aix.personal_set.per_set.resume_download_set.down_resume_limit') == 1) {
  168. //判断企业是否有通过审核的职位(已登录且有发布职位的企业)
  169. $jobs_num = $this->jobsService->getAuditJobsNum($user->id);
  170. if ($jobs_num==0) {
  171. return response()->json(['status'=>0, 'msg'=>'你没有发布职位或职位审核未通过导致无法下载简历!']);
  172. }
  173. } elseif (config('aix.personal_set.per_set.resume_download_set.down_resume_limit') == 3) {
  174. //判断是否是认证企业(已认证企业)
  175. $company_info = $this->companyService->getInfoById($user);
  176. if ($company_info && $company_info->audit != 1) {
  177. return response()->json(['status'=>0, 'msg'=>'你的营业执照未通过认证导致无法下载简历!']);
  178. }
  179. }
  180. if ($member_setmeal->download_resume_max > 0) { //判断当天简历下载数量是否已达上限
  181. $downwhere = array(
  182. array('down_addtime','>=',strtotime('today')),
  183. array('down_addtime','<',strtotime('tomorrow')),
  184. array('company_uid','=',$user->id)
  185. );
  186. $downnum = $this->companyDownResumeService->getCompanyDownResumeNum($downwhere); //获取当天企业已下载简历数
  187. if ($resume_num>1 && $resume_num+$downnum > $member_setmeal->download_resume_max && $downnum < $member_setmeal->download_resume_max) {
  188. return response()->json(['status'=>0, 'msg'=>'您今天剩余的下载简历数量不足,请选择单个简历下载!']);
  189. } elseif ($downnum>= $member_setmeal->download_resume_max) {
  190. return response()->json(['status'=>0, 'msg'=>'您今天已下载 <span class="txt_highlight">'.$downnum.'</span> 份简历,已达到每天下载上限,请先收藏该简历,明天继续下载。']);
  191. }
  192. }
  193. $mode = 'setmeal';
  194. if ($member_setmeal->download_resume == 0) { //套餐中简历下载数已用完
  195. return response()->json(['status'=>0, 'msg'=>'您套餐中剩余的下载简历数量不足,请升级套餐后继续下载!']);
  196. }
  197. $view_data = array();
  198. $free_time = $member_setmeal->download_resume;
  199. $view_data['free_time'] = $free_time;
  200. $view_data['resume_num'] = $resume_num;
  201. $view_data['resume_id'] = implode(",", $rid);
  202. $view_data['uid'] = $user->id;
  203. $view_data['is_free'] = $member_setmeal->is_free;
  204. $view_data['my_setmeal'] = $member_setmeal;
  205. $view_data['to_detail'] = $request->input('to_detail', '');
  206. $max_discount = $this->setmealIncrementsService->getMaxDiscount('download_resume');
  207. $view_data['max_discount'] = $max_discount?$max_discount:0;
  208. $view_data['mode'] = $mode;
  209. $html = view('mobile.app.content.resume.ajax_resume_download', $view_data)->render();
  210. $return_data = array( 'status'=>1, 'html' => $html,'params'=>$view_data);
  211. return response()->json($return_data);
  212. }
  213. }
  214. //面试邀请页面
  215. public function interview(Request $request)
  216. {
  217. $resume_id = $request->input('id', '');
  218. $type= $request->input('type');
  219. $back_url = \Illuminate\Support\Facades\URL::previous();
  220. if (!$resume_id) {
  221. return $this->showMessage('请选择简历!', $back_url, true, '上一页', '3');
  222. }
  223. $user = $this->getUser();
  224. if (!$user) {
  225. return redirect()->route('mobile.login.company');
  226. }
  227. //判断是否需要下载简历(已下载或者简历公开)
  228. if (config('aix.personal_set.per_set.contact_set.show_resume_contact_wap') ==1) {
  229. if (!$user) {
  230. return redirect()->route('hardware.pad.login');
  231. }
  232. } elseif (config('aix.personal_set.per_set.contact_set.show_resume_contact_wap') ==2) {
  233. if($type == 1){
  234. //判断是否有下载记录
  235. $down_where = array(
  236. 'resume_id' => $resume_id,
  237. 'company_uid' => $user->id
  238. );
  239. $down_info = $this->companyDownResumeService->getDownResume($down_where);
  240. if (!$down_info) {
  241. return $this->notFount('请先下载简历!');
  242. }
  243. }
  244. }
  245. //获取企业在招职位
  246. $job_where = array(
  247. array('display','=',1),
  248. array('company_id','=',$user->id),
  249. );
  250. if (config('aix.companyset.comset.show_set.jobs_display') == 1) {
  251. $job_where[] = array('audit','=',1);
  252. } else {
  253. $job_where[] = array('audit','<>',3);
  254. }
  255. $where[] = array('jobfair_id','=',session('floorplan_stands.jobfair_id'));
  256. $where[] = array('position_id','=',session('floorplan_stands.id'));
  257. $jobs = $this->jobsService->getAuditJobs($user->id);
  258. if ($jobs->isEmpty()) {
  259. return $this->notFount('您还没有发布招职位或者职位未通过审核!');
  260. }
  261. //获取简历信息
  262. $resume_info = $this->resumeService->getResumeAllInfo($resume_id);
  263. //获取申请记录
  264. $apply = $this->resumeService->getPersonApply(['resume_id'=>$resume_id,'company_id'=>$user->id]);
  265. $is_apply = 0;
  266. $default_jobs = array();
  267. if ($apply->isNotEmpty()) {
  268. $is_apply = 1;
  269. $apply_info = $apply[0];
  270. $default_jobs = array(
  271. 'jobs_id' => $apply_info->jobs_id,
  272. 'jobs_name' => $apply_info->jobs_name
  273. );
  274. }
  275. $return_data = array(
  276. 'resume' => $resume_info,
  277. 'jobs' => $jobs,
  278. 'company' => $user,
  279. 'is_apply' => $is_apply,
  280. 'default_jobs' => $default_jobs,
  281. 'wap_title' => '发送面试邀请',
  282. 'type' => $type
  283. );
  284. return view('app.hardware.pad.resume_interview', $return_data);
  285. }
  286. //保存邀请
  287. public function jobsInterview(Request $request)
  288. {
  289. $user = auth('web-company')->user();
  290. return $this->personalJobsApplyService->padSaveApply($request,$user);
  291. }
  292. public function getUser()
  293. {
  294. $user = array();
  295. if (auth('web-member')->check()) {
  296. $user = auth('web-member')->user();
  297. } elseif (auth('web-company')->check()) {
  298. $user = auth('web-company')->user();
  299. }
  300. return $user;
  301. }
  302. }