JobsController.php 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465
  1. <?php
  2. /**
  3. * Created by PhpStorm.
  4. * User: michaelwu
  5. * Date: 2018/10/30
  6. * Time: 11:22
  7. */
  8. namespace App\Http\Controllers\Mobile\Company;
  9. use App\Http\Controllers\Mobile\MobileBaseController;
  10. use App\Models\Category;
  11. use App\Repositories\CategoryRepository;
  12. use App\Repositories\JobsRepository;
  13. use App\Repositories\MemberPointRepository;
  14. use App\Repositories\MemberSetmealRepository;
  15. use App\Repositories\QueueAutoRefreshRepository;
  16. use App\Repositories\RefreshLogRepository;
  17. use App\Repositories\SetmealRepository;
  18. use App\Services\Common\CategoryService;
  19. use App\Services\Common\SetmealIncrementsService;
  20. use App\Services\Company\CompanyService;
  21. use App\Services\Company\JobsService;
  22. use App\Services\Company\ServiceService;
  23. use App\Services\SubsiteService;
  24. use App\Validators\JobsValidatorRequest;
  25. use Illuminate\Http\Request;
  26. use Illuminate\Support\Facades\Cache;
  27. class JobsController extends MobileBaseController
  28. {
  29. /**
  30. * @var JobsService
  31. */
  32. protected $jobsService;
  33. protected $categoryService;
  34. protected $companyService;
  35. protected $memberSetmealRepository;
  36. protected $setmealIncrementsService;
  37. protected $refreshLogRepository;
  38. protected $memberPointRepository;
  39. protected $setmealRepository;
  40. protected $queueAutoRefreshRepository;
  41. protected $serviceService;
  42. protected $subsiteService;
  43. protected $jobsRepository;
  44. /**
  45. * JobsController constructor.
  46. * @param JobsService $jobsService
  47. * @param CategoryService $categoryService
  48. * @param CompanyService $companyService
  49. * @param $memberSetmealRepository
  50. * @param $setmealIncrementsService
  51. * @param $refreshLogRepository
  52. * @param $memberPointRepository
  53. * @param $setmealRepository
  54. * @param $queueAutoRefreshRepository
  55. * @param $serviceService
  56. * @param $subsiteService
  57. * @param $jobsRepository
  58. */
  59. public function __construct(JobsService $jobsService, JobsRepository $jobsRepository, SubsiteService $subsiteService, ServiceService $serviceService, QueueAutoRefreshRepository $queueAutoRefreshRepository, SetmealRepository $setmealRepository, MemberPointRepository $memberPointRepository, RefreshLogRepository $refreshLogRepository, CategoryService $categoryService, CompanyService $companyService, MemberSetmealRepository $memberSetmealRepository, SetmealIncrementsService $setmealIncrementsService)
  60. {
  61. $this->jobsService = $jobsService;
  62. $this->categoryService = $categoryService;
  63. $this->companyService = $companyService;
  64. $this->memberSetmealRepository = $memberSetmealRepository;
  65. $this->setmealIncrementsService = $setmealIncrementsService;
  66. $this->refreshLogRepository = $refreshLogRepository;
  67. $this->memberPointRepository = $memberPointRepository;
  68. $this->setmealRepository = $setmealRepository;
  69. $this->queueAutoRefreshRepository = $queueAutoRefreshRepository;
  70. $this->serviceService = $serviceService;
  71. $this->subsiteService = $subsiteService;
  72. $this->jobsRepository = $jobsRepository;
  73. }
  74. /**管理职位
  75. * @param Request $request
  76. * @param null $type
  77. * @return \Illuminate\Contracts\View\Factory|\Illuminate\Http\JsonResponse|\Illuminate\View\View
  78. * @throws \Throwable
  79. */
  80. public function jobsList(Request $request, $type = null)
  81. {
  82. $user = auth('web-company')->user();
  83. $hasget = false;
  84. if ($type) {
  85. $hasget = true;
  86. }
  87. $jobs_list = $this->jobsService->list($type, $user);
  88. $jobs_total = $this->jobsService->jobsTotal($user->id);
  89. $company_setmeal = $this->memberSetmealRepository->getSetmealByUid($user->id, $user->utype);//会员套餐
  90. $stick = $this->setmealIncrementsService->getCat('stick');
  91. $emergency = $this->setmealIncrementsService->getCat('emergency');
  92. if ($request->ajax()) {
  93. if ($jobs_list->currentPage() > $jobs_list->lastPage()) {
  94. return response()->json(['status' => 0]);
  95. }
  96. return response()->json(['status' => 1, 'data' => view('mobile.app.company.jobs.ajax.ajax_jobs_list', ['jobsList' => $jobs_list])->render()]);
  97. }
  98. return view('mobile.app.company.jobs.jobs_list', ['jobsList' => $jobs_list, 'type' => $type, 'hasget' => $hasget, 'jobsCount' => $jobs_total, 'companySetmeal' => $company_setmeal, 'stick' => $stick, 'emergency' => $emergency, 'wap_title' => "管理职位"]);
  99. }
  100. public function checkJobsNum()
  101. {
  102. $user = auth('web-company')->user();
  103. //套餐可发布最大职位数
  104. $mySetmeal = $this->memberSetmealRepository->getSetmealByUid($user->id, 1);
  105. //已发布职位数
  106. $jobsCount = $this->jobsRepository->getJobCount(['company_id' => $user->id]);
  107. if ($mySetmeal->jobs_meanwhile <= 0) {
  108. return response()->json(['status' => 1]);
  109. }
  110. return response()->json(['status' => 0]);
  111. }
  112. /**
  113. * 职位添加
  114. * @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View
  115. * @throws \App\Exceptions\ResponseException
  116. */
  117. public function jobsAdd($id = null)
  118. {
  119. $user = auth('web-company')->user();
  120. $jobsExist = $this->jobsRepository->jobsTotal(['company_id' => $user->id, 'id' => $id]);
  121. if (empty($jobsExist) && !empty($id)) {
  122. return $this->showMessage('没有这个职位!', route('jobs.list'), true);
  123. }
  124. //查询该套餐可发布多少职位数及已发布多少职位
  125. $jobs_total = $this->jobsService->jobsTotal($user->id);
  126. $company_setmeal = $this->memberSetmealRepository->getSetmealByUid($user->id, $user->utype);//会员套餐
  127. $condition['company_id'] = $user->id;
  128. $condition['display'] = 1;
  129. $condition['valid'] = 1;
  130. $jobsCount = $this->jobsRepository->jobAuditTotal($condition, getJobsStatus());//开启的职位数量
  131. $surplus_jobs = $company_setmeal->jobs_meanwhile - $jobsCount;
  132. $company_setmeal->jobs_meanwhile = $surplus_jobs > 0 ? $surplus_jobs : 0;
  133. //查询企业信息
  134. $companyInfo = $this->companyService->getInfoById($user);
  135. //分站信息
  136. $subsite = $this->subsiteService->getSubsite($user);
  137. $suArr = [];
  138. foreach ($subsite as $key => $val) {
  139. $suArr[] = $val['id'] . ',' . $val['sitename'];
  140. }
  141. $result = [
  142. 'info' => $companyInfo,
  143. 'jobsCount' => $jobs_total,
  144. 'company_setmeal' => $company_setmeal,
  145. 'subsite' => $subsite,
  146. 'suArr' => $suArr,
  147. ];
  148. if (isset($id) && $id) {
  149. if (!$result['jobsInfo'] = $this->jobsService->jobsInfo($id)) {
  150. return $this->showMessage('请确认职位是否存在!', route('mobile.firm.jobs.list'), true);
  151. }
  152. if ($result['jobsInfo']->subsites->isNotEmpty()) {
  153. $subsiteArr = $result['jobsInfo']->subsites->toArray();
  154. if ($subsiteArr) {
  155. foreach ($subsiteArr as $key => $val) {
  156. $result['subarr'][] = $val['subsite_id'];
  157. }
  158. } else {
  159. $result['subarr'][] = [];
  160. }
  161. if ($result['subarr']) {
  162. foreach ($result['subarr'] as $key => $val) {
  163. if ($result['jobsInfo']->subsite_id == $val) {
  164. unset($result['subarr'][$key]);
  165. }
  166. }
  167. }
  168. }
  169. }
  170. $result['category'] = $this->categoryService->getCategory();
  171. return view('mobile.app.company.jobs.jobs_add', $result);
  172. }
  173. /**
  174. * 职位保存
  175. * @param JobsValidatorRequest $request
  176. * @return \Illuminate\Http\JsonResponse
  177. * @throws \Prettus\Validator\Exceptions\ValidatorException
  178. */
  179. public function jobsSave(JobsValidatorRequest $request)
  180. {
  181. $data = $request->except('_token', '_method');
  182. $user = auth('web-company')->user();
  183. $data['is_deformity'] = empty($data['is_deformity']) ? 2 : $data['is_deformity'];
  184. return $this->jobsService->jobsSaveMobile($data, $user);
  185. }
  186. /**
  187. * @param Request $request
  188. * @return \Illuminate\Http\JsonResponse
  189. * @throws \Throwable
  190. */
  191. public function jobsAddToJobfair(Request $request)
  192. {
  193. if ($request->method() == 'POST') {
  194. $user = $this->getLoginUser();
  195. return $this->jobsService->jobsAddToJobfair($request, $user);
  196. }
  197. $tip = '您确定要将该职位加入招聘会职位库吗?';
  198. return response()->json(['status' => 1, 'msg' => '', 'data' => ['html' => view('app.company.ajax.ajax_warning', ['tip' => $tip])->render()]]);
  199. }
  200. /**职位刷新
  201. * @param Request $request
  202. * @return \Illuminate\Http\JsonResponse
  203. * @throws \App\Exceptions\ResponseException
  204. * @throws \Throwable
  205. */
  206. public function jobsRefresh(Request $request)
  207. {
  208. $user = auth('web-company')->user();
  209. $id = $request->id;
  210. if (!$id) {
  211. return response()->json(['status' => 0, 'msg' => "请选择刷新职位!"]);
  212. }
  213. $jobsInfo = $this->jobsRepository->find($id);
  214. if ($jobsInfo->audit == 3) {
  215. return response()->json(['status' => 0, 'msg' => "审核未通过职位不可刷新!"]);
  216. } elseif ($jobsInfo->audit == 2 && config('aix.companyset.comset.show_set.jobs_display') == 1) {
  217. return response()->json(['status' => 0, 'msg' => "审核中职位不可刷新!"]);
  218. } elseif ($jobsInfo->display == 2 || $jobsInfo->valid == 0) {
  219. return response()->json(['status' => 0, 'msg' => "已关闭职位不可刷新!"]);
  220. }
  221. $where = [
  222. 'uid' => $user->id,
  223. 'utype' => 1,
  224. 'type' => 1006,
  225. 'mode' => 2,
  226. ];
  227. // //刷新间隔时间
  228. // $refrestime = $this->refreshLogRepository->getLastRefreshDate($where);
  229. // $duringtime = time() - strtotime($refrestime?$refrestime->created_at:0);
  230. $space = config('aix.companyset.comset.other_set.refresh_jobs_space') * 60;
  231. // if ($space > 0 && $duringtime <= $space) {
  232. // return response()->json(['status' => 0, 'msg' => $space . "秒内不能重复刷新职位",]);
  233. // }
  234. //有无开通刷新服务
  235. $mySetmeal = $this->memberSetmealRepository->getSetmealByUid($user->id, $user->utype);
  236. $myPoints = $this->memberPointRepository->getPointsOne(auth('web-company')->user()->id, 1);
  237. if (!$mySetmeal) {
  238. return response()->json(['status' => 0, 'msg' => '您还没有开通服务,请<a></a>>',]);
  239. }
  240. //服务是否到期
  241. if ($mySetmeal->expire == 1 && $mySetmeal->setmeal_id > 1) {
  242. return response()->json(['status' => 0, 'msg' => '您的服务已经到期,请<a></a>',]);
  243. }
  244. $discount = $this->setmealRepository->getMaxDiscount('auto_refresh_jobs');
  245. //计算免费刷新次数
  246. $todayCount = $this->refreshLogRepository->getTodayRefreshTimes($where);
  247. if ($todayCount >= ($mySetmeal->refresh_jobs_free + config('aix.companyset.comsume.comsume_set.refresh_jobs_more'))) {//免费刷新次数已到
  248. if ($myPoints->points >= (config('aix.companyset.comsume.comsume_set.refresh_jobs_price') * config('aix.companyset.points.points_set.payment_rate'))) {
  249. $tip = '<div class="dialog_notice">今天免费刷新次数已用完,本次刷新需要扣除 <span class="font_yellow">' . intval((config('aix.companyset.comsume.comsume_set.refresh_jobs_price') * config('aix.companyset.points.points_set.payment_rate'))) . '</span> 积分,是否确定刷新?<br /><div class="dialog_tip font10 font_gray9">您当前拥有 <span class="font_yellow">' . $myPoints->points . '</span> 积分</div></div>';
  250. $mode = 'points';
  251. } else {
  252. $tip = view('mobile.app.company.ajax.pay_refresh_jobs', ['discount' => $discount, 'jobs_id' => $id])->render();
  253. $mode = 'mix';
  254. }
  255. } else {
  256. $tip = '<div class="dialog_notice">你今天还可免费刷新 <span>' . ($mySetmeal->refresh_jobs_free + config('aix.companyset.comsume.comsume_set.refresh_jobs_more') - $todayCount) . '</span> 次,本次刷新免费,是否立即刷新?</div>';
  257. $mode = 'setmeal';
  258. }
  259. if (Cache::has('refresh_jobid_' . $id)) {
  260. // $jobs_intersect = array_intersect(Cache::get('refresh_jobid_'.$id), [$id]);
  261. // if ($jobs_intersect) {
  262. $refreshJobName = $this->jobsRepository->findWhereIn('id', [$id], ['jobs_name'])->toArray();
  263. return response()->json(['status' => 0, 'msg' => "【" . implode(',', array_column($refreshJobName, 'jobs_name')) . "】" . $space . "秒内不能重复刷新,请重新选择", 'data' => ['show_footer' => 0]]);
  264. // }
  265. }
  266. if ($request->method() == 'POST') {
  267. $payment_name = $request->payment_name ? $request->payment_name : '';
  268. $id = (array)$id;
  269. if ($payment_name) {
  270. $is_deductible = $request->input('is_deductible', 0);
  271. if ($is_deductible == 0) {
  272. $deductible = 0;
  273. } else {
  274. $deductible = $request->input('deductible', '');
  275. }
  276. $myPoints = $this->memberPointRepository->getComPointsById($user->id, $user->utype);
  277. $increment_info['name'] = '职位刷新';
  278. $params['jobs_id'] = $id;
  279. $params['type'] = 'jobs_refresh';
  280. $params = serialize($params);
  281. return $this->jobsService->callCashPay($user, $increment_info, $myPoints, 13, $payment_name, config('aix.companyset.comsume.comsume_set.refresh_jobs_price') * count($id), $is_deductible, $deductible, '', $params);
  282. } else {
  283. //如果是积分兑换刷新或者直接免费刷新
  284. $r = $this->jobsService->jobsRefreshSave($id, $user, $mySetmeal);
  285. if (!$r['status']) {
  286. return response()->json(['status' => 0, 'msg' => $r['msg']]);
  287. } else {
  288. return response()->json(['status' => 1, 'msg' => '刷新成功!']);
  289. }
  290. }
  291. }
  292. return response()->json(['status' => 1, 'msg' => $tip, 'data' => $mode]);
  293. }
  294. public function jobsRefreshAll()
  295. {
  296. $user = auth('web-company')->user();
  297. return $this->jobsService->jobsRefreshAll($user);
  298. }
  299. /**
  300. * 职位关闭
  301. * @param Request $request
  302. * @return \Illuminate\Contracts\View\Factory|\Illuminate\Http\JsonResponse|\Illuminate\View\View
  303. */
  304. public function jobsClose(Request $request)
  305. {
  306. return $this->jobsService->jobsClose($request->id);
  307. }
  308. // public function closeAll(Request $request)
  309. // {
  310. // if ($request->type && $request->type==1) {
  311. // return $this->jobsService->jobsClose($request->id);
  312. // }
  313. // $tip = "职位关闭后将会暂停招聘,您确定要关闭选中的职位吗?";
  314. // return view('app.company.ajax.ajax_warning', ['tip'=>$tip]);
  315. // }
  316. /**
  317. * 恢复职位
  318. * @param Request $request
  319. * @return \Illuminate\Contracts\View\Factory|\Illuminate\Http\JsonResponse|\Illuminate\View\View
  320. */
  321. public function jobsShow(Request $request)
  322. {
  323. $user = auth('web-company')->user();
  324. return $this->jobsService->jobsShow($request->id, $user);
  325. }
  326. /**
  327. * 转入招聘会职位库
  328. * @param Request $request
  329. */
  330. public function jobsToJobfair(Request $request)
  331. {
  332. $user = $this->getLoginUser();
  333. return $this->jobsService->jobsAddToJobfair($request, $user);
  334. }
  335. /**职位删除
  336. * @param Request $request
  337. * @return \Illuminate\Contracts\View\Factory|\Illuminate\Http\JsonResponse|\Illuminate\View\View
  338. */
  339. public function jobsDel(Request $request)
  340. {
  341. $id = $request->id;
  342. $user = auth('web-company')->user();
  343. return $this->jobsService->jobsDel($id, $user);
  344. }
  345. /**
  346. * 删除所有职位
  347. * @param Request $request
  348. * @return \Illuminate\Contracts\View\Factory|\Illuminate\Http\JsonResponse|\Illuminate\View\View
  349. */
  350. public function delAll(Request $request)
  351. {
  352. if ($request->type && $request->type == 1) {
  353. $id = $request->id;
  354. $user = auth('web-company')->user();
  355. return $this->jobsService->jobsDel($id, $user);
  356. }
  357. $tip = "被删除后将无法恢复,您确定要删除选中的职位吗?";
  358. return view('app.company.ajax.ajax_warning', ['tip' => $tip]);
  359. }
  360. /**紧急招聘
  361. *
  362. */
  363. public function jobsEmergency(Request $request)
  364. {
  365. if (!$request->jobs_id) {
  366. return response()->json(['status' => 0, 'msg' => '参数错误!']);
  367. }
  368. $res = $this->serviceService->incrementAdd('emergency', $request);
  369. $res['jobs_id'] = $request->jobs_id;
  370. $html = view('app.jobs.ajax.ajax_jobs_stick_emergency', $res)->render();
  371. return response()->json(['status' => 1, 'msg' => $html]);
  372. }
  373. /**职位置顶
  374. * @param Request $request
  375. * @return \Illuminate\Http\JsonResponse
  376. * @throws \Throwable
  377. */
  378. public function jobsStick(Request $request)
  379. {
  380. if (!$request->jobs_id) {
  381. return response()->json(['status' => 0, 'msg' => '参数错误!']);
  382. }
  383. $res = $this->serviceService->incrementAdd('stick', $request);
  384. $res['jobs_id'] = $request->jobs_id;
  385. $html = view('app.jobs.ajax.ajax_jobs_stick_emergency', $res)->render();
  386. return response()->json(['status' => 1, 'msg' => $html]);
  387. }
  388. /**招聘效果统计===访客统计
  389. * @param Request $request
  390. * @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View|mixed
  391. * @throws \Throwable
  392. */
  393. public function statisticsVisitor(Request $request)
  394. {
  395. $user = auth('web-company')->user();
  396. if ($request->ajax()) {
  397. return $this->jobsService->statisticsVisitor($request, $user);
  398. }
  399. $res = $this->jobsService->statisticsVisitor($request, $user);
  400. return view('app.jobs.jobs_statistics_visitor', $res);
  401. }
  402. /**招聘效果统计===职位浏览
  403. * @param Request $request
  404. * @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View|mixed
  405. * @throws \Throwable
  406. */
  407. public function statisticsViewjobs(Request $request)
  408. {
  409. $user = auth('web-company')->user();
  410. if ($request->ajax()) {
  411. return $this->jobsService->statisticsViewjobs($request, $user);
  412. }
  413. $res = $this->jobsService->statisticsViewjobs($request, $user);
  414. return view('app.jobs.jobs_statistics_viewjobs', $res);
  415. }
  416. /**招聘效果统计===应聘统计
  417. * @param Request $request
  418. * @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View|mixed
  419. * @throws \Throwable
  420. */
  421. public function statisticsApply(Request $request)
  422. {
  423. $user = auth('web-company')->user();
  424. if ($request->ajax()) {
  425. return $this->jobsService->statisticsApply($request, $user);
  426. }
  427. $res = $this->jobsService->statisticsApply($request, $user);
  428. return view('app.jobs.jobs_statistics_apply', $res);
  429. }
  430. }