PersonFavoriteService.php 22 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535
  1. <?php
  2. namespace App\Services\Person;
  3. use App\Exceptions\ResponseException;
  4. use App\Models\CategoryDistrict;
  5. use App\Models\Jobs;
  6. use App\Models\Member;
  7. use App\Models\PersonalJobsApply;
  8. use App\Models\PersonFavorite;
  9. use App\Models\PersonFocusCompany;
  10. use App\Models\Resume;
  11. use App\Repositories\CategoryDistrictRepository;
  12. use App\Repositories\CategoryJobsRepository;
  13. use App\Repositories\CategoryRepository;
  14. use App\Repositories\JobsRepository;
  15. use App\Repositories\MemberLogRepository;
  16. use App\Repositories\PersonFavoriteRepository;
  17. use App\Repositories\PersonFocusComRepository;
  18. use App\Repositories\PersonJobsApplyRepository;
  19. use App\Repositories\PersonJobsSubRepository;
  20. use App\Repositories\ResumeRepository;
  21. use App\Services\Common\TaskService;
  22. use Illuminate\Support\Facades\DB;
  23. use Illuminate\Support\Facades\Log;
  24. class PersonFavoriteService
  25. {
  26. /**
  27. * @var PersonFavoriteRepository
  28. */
  29. protected $PersonFavoriteRepository;
  30. protected $CategoryRepository;
  31. protected $CategoryDistrictRepository;
  32. protected $JobsRepository;
  33. protected $resumeRepository;
  34. protected $TaskService;
  35. protected $PersonJobsApplyRepository;
  36. protected $PersonFocusComRepository;
  37. protected $PersonJobsSubRepository;
  38. protected $CategoryJobsRepository;
  39. protected $memberLogRepository;
  40. /**
  41. * PersonFavoriteService constructor.
  42. * @param PersonFavoriteRepository $PersonFavoriteRepository
  43. * @param CategoryRepository $CategoryRepository
  44. * @param CategoryDistrictRepository $CategoryDistrictRepository
  45. * @param JobsRepository $JobsRepository
  46. * @param ResumeRepository $resumeRepository
  47. * @param TaskService $TaskService
  48. * @param PersonJobsApplyRepository $PersonJobsApplyRepository
  49. * @param PersonFocusComRepository $PersonFocusComRepository
  50. * @param PersonJobsSubRepository $PersonJobsSubRepository
  51. * @param CategoryJobsRepository $CategoryJobsRepository
  52. */
  53. public function __construct( MemberLogRepository $memberLogRepository,PersonFavoriteRepository $PersonFavoriteRepository, CategoryRepository $CategoryRepository, CategoryDistrictRepository $CategoryDistrictRepository, JobsRepository $JobsRepository, ResumeRepository $resumeRepository, TaskService $TaskService, PersonJobsApplyRepository $PersonJobsApplyRepository, PersonFocusComRepository $PersonFocusComRepository, PersonJobsSubRepository $PersonJobsSubRepository, CategoryJobsRepository $CategoryJobsRepository)
  54. {
  55. $this->PersonFavoriteRepository = $PersonFavoriteRepository;
  56. $this->CategoryRepository = $CategoryRepository;
  57. $this->CategoryDistrictRepository = $CategoryDistrictRepository;
  58. $this->JobsRepository = $JobsRepository;
  59. $this->resumeRepository = $resumeRepository;
  60. $this->TaskService = $TaskService;
  61. $this->PersonJobsApplyRepository = $PersonJobsApplyRepository;
  62. $this->PersonFocusComRepository = $PersonFocusComRepository;
  63. $this->PersonJobsSubRepository = $PersonJobsSubRepository;
  64. $this->CategoryJobsRepository = $CategoryJobsRepository;
  65. $this->memberLogRepository=$memberLogRepository;
  66. }
  67. public function jobsF($user)
  68. {
  69. $settr[] = ['uid','=',$user->id];
  70. if (request()->settr) {
  71. switch (request()->settr) {
  72. case '3':
  73. $settr[] = ['created_at' ,'>=' ,date('Y-m-d H:i:s', strtotime("-3 day"))];
  74. break;
  75. case '7':
  76. $settr[]= ['created_at' ,'>=' ,date('Y-m-d H:i:s', strtotime("-7 day"))];
  77. break;
  78. case '15':
  79. $settr[] = ['created_at' ,'>=' ,date('Y-m-d H:i:s', strtotime("-15 day"))];
  80. break;
  81. case '30':
  82. $settr[] = ['created_at' ,'>=' ,date('Y-m-d H:i:s', strtotime("-30 day"))];
  83. break;
  84. default:
  85. $settr[] = ['created_at' ,'>=' ,date('Y-m-d H:i:s', strtotime("-3 day"))];
  86. break;
  87. }
  88. }
  89. $res = $this->PersonFavoriteRepository->jobsF($settr, getJobsStatus(),$user->id);
  90. $getCategoriess = $this->CategoryRepository->getCategoriess();
  91. foreach ($res as $key => $val) {
  92. if (isset($val->jobs->wage_max)) {
  93. if($val->jobs->wage_max){
  94. $res[$key]['jobs']['wage_cn'] = $val->jobs->wage_min.'~'.$val->jobs->wage_max.'/月';
  95. }else{
  96. if ($val->jobs->wage==-1) {
  97. $res[$key]['jobs']['wage_cn'] = '面议';
  98. }else{
  99. $res[$key]['jobs']['wage_cn'] = $val->jobs->wage_min.'以上/月';
  100. }
  101. }
  102. }
  103. if (isset($val->jobs->experience)) {
  104. $res[$key]['jobs']['experience_cn'] = isset($getCategoriess['AIX_experience'][$val->jobs->experience]['demand']) ? $getCategoriess['AIX_experience'][$val->jobs->experience]['demand'] : '经验不限';
  105. }
  106. if (isset($val->jobs->trade)) {
  107. $res[$key]['jobs']['trade_cn'] = isset($getCategoriess['AIX_trade'][$val->jobs->trade]['demand']) ?
  108. $getCategoriess['AIX_trade'][$val->jobs->trade]['demand'] : '行业不限';
  109. }
  110. if (isset($val->jobs->education)) {
  111. $res[$key]['jobs']['education_cn'] = isset($getCategoriess['AIX_education'][$val->jobs->education]['demand']) ?
  112. $getCategoriess['AIX_education'][$val->jobs->education]['demand'] : '学历不限';
  113. }
  114. if (isset($val->jobs->age)) {
  115. if ($val->jobs->age) {
  116. $ageDe = $val->jobs->age;
  117. if ($ageDe[0] && $ageDe[1]) {
  118. $age_cn = $ageDe[0].'-'.$ageDe[1].'岁';
  119. } elseif ($ageDe[0] && !$ageDe[1]) {
  120. $age_cn = $ageDe[0].'岁以上';
  121. } elseif (!$ageDe[0] && $ageDe[1]) {
  122. $age_cn = $ageDe[1].'岁以下';
  123. } else {
  124. $age_cn = '年龄不限';
  125. }
  126. } else {
  127. $age_cn = '年龄不限';
  128. }
  129. $res[$key]['jobs']['age_cn'] = $age_cn;
  130. }
  131. if (isset($val->jobs->district)) {
  132. $districtArr = $this->CategoryDistrictRepository->getManydistrict(explode('.', $val->jobs->district));
  133. foreach ($districtArr as $key1 => $val1) {
  134. $res[$key]['jobs']['district_cn'].=$val1->name.'+';
  135. }
  136. $res[$key]['jobs']['district_cn'] = isset($res[$key]['jobs']['district_cn']) ? rtrim($res[$key]['jobs']['district_cn'], '+') : '未知';
  137. }
  138. }
  139. return $res;
  140. }
  141. public function delPersonFavorite($id,$user)
  142. {
  143. if (empty($id)) {
  144. throw new ResponseException('收藏职位不存在!', '', 400);
  145. }
  146. $res = PersonFavorite::where(['uid'=>$user->id])->get()->toArray();
  147. $array_id = array_column($res,'id');
  148. $res_k = string_to_array(',',$id);
  149. foreach ($res_k as $key=>$val){
  150. if(!in_array($val,$array_id)){
  151. throw new ResponseException('收藏职位不存在', '', 400);
  152. }
  153. }
  154. if(!$this->memberLogRepository->createLog($user,2035,$id)){
  155. throw new \Exception("日志记失败!");
  156. }
  157. return $this->PersonFavoriteRepository->delPersonFavorite(explode(',', $id));
  158. }
  159. public function resumeApply($input, $user)
  160. {
  161. $resume_id = array_get($input,'resume_id');
  162. $res = Resume::where(['uid'=>$user->id])->get()->toArray();
  163. $array_id = array_column($res,'id');
  164. if(!in_array($resume_id,$array_id)){
  165. throw new ResponseException('简历不存在!');
  166. }
  167. if (empty($input['jobs_id'])) {
  168. throw new ResponseException('职位不存在!', '', 400);
  169. }
  170. if (empty($resume_id)) {
  171. throw new ResponseException('简历不存在!', '', 400);
  172. }
  173. $resume = $this->resumeRepository->find($resume_id);
  174. $defaultPre = config('aix.personal_set.per_set.per_set.apply_job_min_percent');
  175. if ($defaultPre) {
  176. if ($resume->complete_percent<$defaultPre) {
  177. throw new ResponseException('您的简历完整度小于'.$defaultPre.'%', '', 400);
  178. }
  179. }
  180. $id = array_filter(explode(',', $input['jobs_id']));
  181. $num_id = count($id);
  182. if($num_id>config('aix.personal_set.per_set.per_set.apply_jobs_max')){
  183. throw new ResponseException("您每天可以投递".config('aix.personal_set.per_set.per_set.apply_jobs_max')."个职位");
  184. }
  185. $todayCount = $this->PersonJobsApplyRepository->getTodayCount($user->id);
  186. if(($num_id+$todayCount)>config('aix.personal_set.per_set.per_set.apply_jobs_max')){
  187. throw new ResponseException("您每天可以投递".config('aix.personal_set.per_set.per_set.apply_jobs_max')."个职位,今天已投递了{$todayCount}个", '', 400);
  188. }
  189. if ($todayCount>=config('aix.personal_set.per_set.per_set.apply_jobs_max')) {
  190. throw new ResponseException("您每天可以投递".config('aix.personal_set.per_set.per_set.apply_jobs_max')."个职位,今天已投递了{$todayCount}个", '', 400);
  191. }
  192. $displayJobs = $this->JobsRepository->getDisplayJobs($id, 2);
  193. if (!empty($displayJobs)) {
  194. $disJobs = array_diff($id, array_column($displayJobs, 'id'));
  195. if (empty($disJobs)) {
  196. throw new ResponseException('您投递的职位已关闭!', '', 400);
  197. }
  198. $id = $disJobs;
  199. }
  200. $jobsApply = $this->PersonJobsApplyRepository->personApplyByTime(
  201. $id,
  202. $user->id,
  203. config('aix.personal_set.per_set.per_set.apply_job_space')
  204. );
  205. if (!empty($jobsApply)) {
  206. $disApply = array_diff($id, array_column($jobsApply, 'jobs_id'));
  207. if (empty($disApply)) {
  208. throw new ResponseException('您已经申请过这个职位了!', '', 400);
  209. }
  210. $id = $disApply;
  211. }
  212. $jobs = $this->JobsRepository->getJobs($id);
  213. $arr = [];
  214. foreach ($jobs as $key => $val) {
  215. $arr[$key]['resume_id'] = $resume->id;
  216. $arr[$key]['resume_name'] = $resume->title;
  217. $arr[$key]['personal_uid'] = $user->id;
  218. $arr[$key]['jobs_id'] = $val->id;
  219. $arr[$key]['jobs_name'] = $val->jobs_name;
  220. $arr[$key]['company_id'] = $val->company_id;
  221. $arr[$key]['company_name'] = $val->company_name;
  222. $arr[$key]['created_at'] = date('Y-m-d H:i:s', time());
  223. $arr[$key]['updated_at'] = date('Y-m-d H:i:s', time());
  224. }
  225. $result = $this->PersonJobsApplyRepository->applyJons($arr);
  226. if ($result) {
  227. $this->TaskService->doTask(4);
  228. return ['code'=>1, 'info'=>'投递成功'];
  229. } else {
  230. return ['code'=>0, 'info'=>'投递失败'];
  231. }
  232. }
  233. public function attentionCom($user)
  234. {
  235. $settr[] = ['uid','=',$user->id];
  236. $res = $this->PersonFocusComRepository->getAttionCom($settr, getJobsStatus());
  237. return $res;
  238. }
  239. public function deleteCompany($id,$user)
  240. {
  241. if (!$id) {
  242. throw new ResponseException('数据异常!');
  243. }
  244. $res = PersonFocusCompany::where(['uid'=>$user->id])->get()->toArray();
  245. $array_id = array_column($res,'id');
  246. if(!in_array($id,$array_id)){
  247. throw new ResponseException('数据异常!');
  248. }
  249. if(!$this->memberLogRepository->createLog($user,2038,$id)){
  250. throw new \Exception("日志记失败!");
  251. }
  252. return $this->PersonFocusComRepository->delete($id);
  253. }
  254. public function getJobsSub()
  255. {
  256. $settr[] = ['uid','=',auth('web-member')->user()->id];
  257. return $this->PersonJobsSubRepository->getJobsSub($settr);
  258. }
  259. public function getJobsSubAdd($date, $user)
  260. {
  261. $jobsArr = explode(',', $date['intention_jobs_id']);
  262. $jobArrId = [];
  263. foreach ($jobsArr as $key => $val) {
  264. $jobArrId[] = explode('.', $val)[2] ? explode('.', $val)[2] : explode('.', $val)[1];
  265. }
  266. $jobsRes = $this->CategoryJobsRepository->getManyJobs($jobArrId);
  267. $date['intention_jobs'] = '';
  268. foreach ($jobsRes as $key => $val) {
  269. $date['intention_jobs'].=$val->name.'/';
  270. }
  271. $date['intention_jobs'] = rtrim($date['intention_jobs'], '/');
  272. $districtArr = explode(',', $date['district']);
  273. $resumrArrId = [];
  274. foreach ($districtArr as $key => $val) {
  275. $resumrArrId[] = explode('.', $val)[2] ? explode('.', $val)[2] : explode('.', $val)[1];
  276. }
  277. $resumeRes = $this->CategoryDistrictRepository->getManydistrict($resumrArrId);
  278. $date['district_cn'] = '';
  279. foreach ($resumeRes as $key => $val) {
  280. $date['district_cn'].=$val->name.'+';
  281. }
  282. $date['district_cn'] = rtrim($date['district_cn'], '+');
  283. if ($date['wage']) {
  284. $wageArr = $this->CategoryRepository->getCategory($date['wage']);
  285. $date['wage_cn'] = $wageArr['demand'];
  286. }
  287. if ($date['trade']) {
  288. $tradeArr = $this->CategoryRepository->getCategory($date['trade']);
  289. $date['trade_cn'] = $tradeArr['demand'];
  290. }
  291. if ($date['sendTime']) {
  292. $sendTimeArr = $this->CategoryRepository->getCategory($date['sendTime']);
  293. $date['sendTime_cn'] = $sendTimeArr['demand'];
  294. }
  295. if ($date['experience']) {
  296. $experienceArr = $this->CategoryRepository->getCategory($date['experience']);
  297. $date['experience_cn'] = $experienceArr['demand'];
  298. }
  299. if ($date['education']) {
  300. $educationArr = $this->CategoryRepository->getCategory($date['education']);
  301. $date['education_cn'] = $educationArr['demand'];
  302. }
  303. if ($date['rate']) {
  304. $rateArr = $this->CategoryRepository->getCategory($date['rate']);
  305. $date['rate_cn'] = $rateArr['demand'];
  306. if ($date['rate']==832) {
  307. $date['updated_at'] = date('Y-m-d H:i:s',time()+86400);
  308. } elseif ($date['rate']==833) {
  309. $date['updated_at'] = date('Y-m-d H:i:s',time()+259200);
  310. } elseif ($date['rate']==834) {
  311. $date['updated_at'] = date('Y-m-d H:i:s',time()+604800);
  312. } elseif ($date['rate']==835) {
  313. $date['updated_at'] = date('Y-m-d H:i:s',time()+1209600);
  314. }
  315. }
  316. if ($date['send_jobs']) {
  317. $send_jobsArr = $this->CategoryRepository->getCategory($date['send_jobs']);
  318. $date['send_jobs_cn'] = $send_jobsArr['demand'];
  319. }
  320. if ($date['nature']) {
  321. $natureArr = $this->CategoryRepository->getCategory($date['nature']);
  322. $date['nature_cn'] = $natureArr['demand'];
  323. }
  324. $date['uid'] = $user->id;
  325. if (empty($date['id'])) {
  326. $jobs=$this->PersonJobsSubRepository->getJobsSubAdd($date);
  327. if(!$this->memberLogRepository->createLog($user,2039,$jobs->id)){
  328. throw new \Exception("日志记失败!");
  329. }
  330. return $jobs;
  331. } else {
  332. if(!$this->memberLogRepository->createLog($user,2039,$date['id'])){
  333. throw new \Exception("日志记失败!");
  334. }
  335. return $this->PersonJobsSubRepository->getJobsSubUpdate($date, $date['id']);
  336. }
  337. }
  338. public function getJobsSubEdit($id)
  339. {
  340. if (empty($id)) {
  341. return ['sub'=>[]];
  342. } else {
  343. $res = $this->PersonJobsSubRepository->getJobsById($id);
  344. return ['sub'=>$res];
  345. }
  346. }
  347. public function getJobsSubout($data)
  348. {
  349. $id = $data['id'];
  350. $status = $data['status'];
  351. if (empty($id)) {
  352. throw new ResponseException('职位订阅不存在!', '', 400);
  353. }
  354. if ($status) {
  355. $arr['status'] = 0;
  356. } else {
  357. $arr['status'] = 1;
  358. }
  359. $user=auth('web-member')->user();
  360. //订阅是0 退定是1
  361. if ($status==0){
  362. $hJobs =$this->PersonJobsSubRepository->getJobsById($id);
  363. if(!$this->memberLogRepository->createLog($user,2041,$id)){
  364. throw new \Exception("日志记失败!");
  365. }
  366. }else{
  367. $hJobs =$this->PersonJobsSubRepository->getJobsById($id);
  368. if(!$this->memberLogRepository->createLog($user,2040,$id)){
  369. throw new \Exception("日志记失败!");
  370. }
  371. }
  372. $result = $this->PersonJobsSubRepository->getJobsSubUpdate($arr, $id);
  373. if ($result) {
  374. return ['code'=>1, 'info'=>'','data'=>['code'=>$arr['status'],'info'=>$hJobs->rate_cn]];
  375. } else {
  376. if(!$this->memberLogRepository->createLog($user,2040,$id)){
  377. throw new \Exception("日志记失败!");
  378. }
  379. return ['code'=>0, 'info'=>''];
  380. }
  381. }
  382. public function getJobsAddVar()
  383. {
  384. $data['uid'] = auth('web-member')->user()->id;
  385. $result = $this->PersonJobsSubRepository->getJobsAddVar($data);
  386. if ($result<5) {
  387. return true;
  388. } else {
  389. return false;
  390. }
  391. }
  392. public function getCount()
  393. {
  394. $data['uid'] = auth('web-member')->user()->id;
  395. return $this->PersonJobsSubRepository->getJobsAddVar($data);
  396. }
  397. public function getJobsSubDel($id)
  398. {
  399. if (empty($id)) {
  400. throw new ResponseException('职位订阅不存在!', '', 400);
  401. }
  402. return $this->PersonJobsSubRepository->getJobsSubDel($id);
  403. }
  404. public function subscribe()
  405. {
  406. $jobs = [];
  407. $res = $this->PersonJobsSubRepository->rateDate(['status'=>1]);
  408. if (!$res->isEmpty()) {
  409. foreach ($res as $key=>$val) {
  410. $parm = [];
  411. $array = string_to_array(['.',','], $val->intention_jobs_id);
  412. $nuk = 1;
  413. $inter_array = [];
  414. foreach ($array as $k1=>$v1) {
  415. if($k1==$nuk){
  416. $inter_array[] = $v1;
  417. $nuk = $nuk+3;
  418. }
  419. }
  420. $jobs_id = array_unique($inter_array);
  421. if ($val->trade) {
  422. $parm[] =['trade','=',$val->trade];
  423. }
  424. if ($val->experience) {
  425. $parm[] =['experience','=',$val->experience];
  426. }
  427. if ($val->wage) {
  428. $parm[] =['wage','=',$val->wage];
  429. }
  430. if ($val->education) {
  431. $parm[] =['education','=',$val->education];
  432. }
  433. if ($val->nature) {
  434. $parm[] =['nature','=',$val->nature];
  435. }
  436. $parm[] =['district','=',$val->district];
  437. $count = 0;
  438. if ($val->send_jobs==317) {
  439. $count = 5;
  440. } elseif ($val->send_jobs==318) {
  441. $count = 20;
  442. }elseif ($val->send_jobs==319) {
  443. $count = 30;
  444. }elseif ($val->send_jobs==320) {
  445. $count = 50;
  446. }
  447. if ($val->sendTime) {
  448. if ($val->sendTime==321) {
  449. $parm[] =['created_at','>=',date('Y-m-d H:i:s', strtotime("-1 day"))];
  450. } elseif ($val->sendTime==322) {
  451. $parm[] =['created_at','>=',date('Y-m-d H:i:s', strtotime("-3 day"))];
  452. }elseif ($val->sendTime==323) {
  453. $parm[] =['created_at','>=',date('Y-m-d H:i:s', strtotime("-7 day"))];
  454. }elseif ($val->sendTime==324) {
  455. $parm[] =['created_at','>=',date('Y-m-d H:i:s', strtotime("-30 day"))];
  456. }
  457. }
  458. if ($count) {
  459. if ($val->email) {
  460. $member = Member::find($val->uid);
  461. $username = isset($member->username) ? $member->username : 'XX';
  462. $result = Jobs::where($parm)->where(function ($query) use ($jobs_id) {
  463. if ($jobs_id) {
  464. $query->whereIn('category', $jobs_id);
  465. }
  466. $query->whereIn('audit', getJobsStatus())->where('display', 1)->where('valid', 1);
  467. })->select([
  468. 'id',
  469. 'company_id',
  470. 'jobs_name',
  471. 'company_name',
  472. 'district',
  473. 'wage',
  474. 'wage_min',
  475. 'wage_max',
  476. 'created_at'
  477. ])->orderBy('id', 'desc')->offset(0)->limit($count)->get()->toArray();
  478. if ($result) {
  479. $jobs[$key] = $result;
  480. $jobs[$key]['email'] = $val->email;
  481. $jobs[$key]['username'] = $username;
  482. $jobs[$key]['subscribe_id'] = $val->id;
  483. $jobs[$key]['subscribe_rate'] = $val->rate;
  484. }
  485. }
  486. }
  487. }
  488. }
  489. return $jobs;
  490. }
  491. public function isOwn($id,$user)
  492. {
  493. $jobsSub = $this->PersonJobsSubRepository->getPersonJobsSub(['id'=>$id]);
  494. if(!$jobsSub)
  495. {
  496. throw new ResponseException('该职位订阅不存在!');
  497. }
  498. if($jobsSub->uid != $user->id) {
  499. throw new ResponseException('对不起,您只能操作自己的职位订阅!');
  500. }
  501. }
  502. }