CompanyDownResumeService.php 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354
  1. <?php
  2. namespace App\Services\Company;
  3. use App\Exceptions\ResponseException;
  4. use App\Repositories\CompanyDownResumeRepository;
  5. use App\Repositories\ResumeRepository;
  6. use App\Repositories\JobsRepository;
  7. use App\Repositories\MemberPointRepository;
  8. use App\Repositories\PersonalJobsApplyRepository;
  9. use App\Repositories\MemberSetmealRepository;
  10. use App\Repositories\MemberLogRepository;
  11. use App\Repositories\MemberHandselRepository;
  12. use Illuminate\Support\Facades\DB;
  13. class CompanyDownResumeService
  14. {
  15. /**
  16. * @var CompanyDownResumeRepository
  17. */
  18. protected $CompanyDownResumeRepository;
  19. protected $ResumeRepository;
  20. protected $jobsRepository;
  21. protected $memberPointRepository;
  22. protected $personalJobsApplyRepository;
  23. protected $memberSetmealRepository;
  24. protected $memberLogRepository;
  25. protected $memberHandselRepository;
  26. /**
  27. * CompanyDownResumeService constructor.
  28. * @param CompanyDownResumeRepository $CompanyDownResumeRepository
  29. * @param ResumeRepository $ResumeRepository
  30. * @param JobsRepository $jobsRepository
  31. * @param MemberPointRepository $memberPointRepository
  32. * @param PersonalJobsApplyRepository $personalJobsApplyRepository
  33. * @param MemberSetmealRepository $memberSetmealRepository
  34. * @param MemberLogRepository $memberLogRepository
  35. * @param MemberHandselRepository $memberHandselRepository
  36. */
  37. public function __construct(CompanyDownResumeRepository $CompanyDownResumeRepository, ResumeRepository $ResumeRepository, JobsRepository $jobsRepository, MemberPointRepository $memberPointRepository, PersonalJobsApplyRepository $personalJobsApplyRepository, MemberSetmealRepository $memberSetmealRepository, MemberLogRepository $memberLogRepository, MemberHandselRepository $memberHandselRepository)
  38. {
  39. $this->CompanyDownResumeRepository = $CompanyDownResumeRepository;
  40. $this->ResumeRepository = $ResumeRepository;
  41. $this->jobsRepository = $jobsRepository;
  42. $this->memberPointRepository = $memberPointRepository;
  43. $this->personalJobsApplyRepository = $personalJobsApplyRepository;
  44. $this->memberSetmealRepository = $memberSetmealRepository;
  45. $this->memberLogRepository = $memberLogRepository;
  46. $this->memberHandselRepository = $memberHandselRepository;
  47. }
  48. public function getDownResume($data)
  49. {
  50. return $this->CompanyDownResumeRepository->getDownResume($data);
  51. }
  52. /**
  53. * 标注简历
  54. * @param $id
  55. * @param $state
  56. * @return \Illuminate\Http\JsonResponse
  57. */
  58. public function labelApply($id, $state)
  59. {
  60. if (!$id) {
  61. return response()->json(['status'=>0, 'msg'=>'请选择简历!']);
  62. }
  63. // $old_info = $this->CompanyDownResumeRepository->find($id);
  64. $r = false;
  65. DB::beginTransaction();
  66. try {
  67. $data = [
  68. 'is_reply'=>$state,
  69. ];
  70. if (!$this->CompanyDownResumeRepository->companyLabelResume($id, $data)) {
  71. throw new ResponseException('标记失败!');
  72. // return response()->json(['status'=>0, 'msg'=>'标记失败']);
  73. }
  74. //添加日志
  75. DB::commit();
  76. $user = auth('web-company')->user();
  77. $statArr=["1"=>"合适","2"=>"不合适","3"=>"待定","4"=>"未接通"];
  78. $this->memberLogRepository->createLog($user,1030,[$id,$statArr[$state]]);
  79. return response()->json(['status'=>1, 'msg'=>'标记成功','task'=>$r]);
  80. } catch (\Exception $e) {
  81. DB::rollback();
  82. return response()->json(['status'=>0, 'msg'=>$e->getMessage()]);
  83. }
  84. }
  85. public function getCompanyDownResumeNum($where)
  86. {
  87. return $this->CompanyDownResumeRepository->getDownResumeNums($where);
  88. }
  89. //简历下载
  90. public function addDownResume($addarr, $user, $member_setmeal)
  91. {
  92. if (!auth('web-company')->check()) { //检测是否是企业账号
  93. return array('status'=>0,'msg'=>'必须是企业会员才可以下载简历!');
  94. }
  95. if ($user->user_status != 1) { //检测企业账号是否正常
  96. return array('status'=>0,'msg'=>'您的账号处于暂停状态,请联系管理员设为正常后进行操作!');
  97. }
  98. if (!$addarr['rid']) { //检测是否选择了简历
  99. return array('status'=>0,'msg'=>'请选择简历!');
  100. }
  101. $resume_num = count($addarr['rid']);
  102. if (config('aix.personal_set.per_set.resume_download_set.down_resume_limit') == 1) { //检测是否有通过审核的职位
  103. //获取通过审核的职位数量
  104. $where = array(
  105. array('company_id','=',$user->id),
  106. array('valid','=','1'),
  107. array('display','=','1')
  108. );
  109. if (config('aix.companyset.comset.show_set.jobs_display') == 1) {
  110. $where[] = array('audit','=', '1');
  111. } else {
  112. $where[] = array('audit','<>', '3');
  113. }
  114. $jobs = $this->jobsRepository->getOtherJobsCount($where);
  115. if (count($jobs) == 0) {
  116. return array('status'=>0,'msg'=>'你没有发布职位或职位审核未通过导致无法下载简历!');
  117. }
  118. } elseif (config('aix.personal_set.per_set.resume_download_set.down_resume_limit') == 3) { //判断企业是否认证通过
  119. if ($user->audit != 1) {
  120. return array('status'=>0,'msg'=>'你的营业执照未通过认证导致无法下载简历!');
  121. }
  122. }
  123. //判断是否达到当天下载上限
  124. if ($member_setmeal->download_resume_max > 0) {
  125. //获取当天已下载简历数
  126. $downwhere = array(
  127. array('down_addtime','>=',strtotime('today')),
  128. array('down_addtime','<',strtotime('tomorrow')),
  129. array('company_uid','=',$user->id)
  130. );
  131. $downnum = $this->getCompanyDownResumeNum($downwhere);
  132. if ($downnum >= $member_setmeal->download_resume_max) {
  133. return array('status'=>0,'msg'=>'您今天已下载 <span class="font_yellow">'.$downnum.'</span> 份简历,已达到每天下载上限,请先收藏该简历,明天继续下载。');
  134. }
  135. }
  136. //积分下载时判断积分数量是否足够
  137. if ($member_setmeal->download_resume <=0) {
  138. $members_points = $this->memberPointRepository->getPointsById($user->id, '1');
  139. if ($members_points->points < config('aix.companyset.comsume.comsume_set.download_resume_price')*config('aix.companyset.points.points_set.payment_rate')*$resume_num) {
  140. return array('status'=>0,'msg'=>"你的积分不足,不能下载简历!");
  141. }
  142. }
  143. if ($resume_num > 1) {
  144. //多个简历批量下载
  145. return $this->addDownResumeBatch($addarr['rid'], $user, $member_setmeal);
  146. } else {
  147. //单个简历是单个现在
  148. return $this->addDownResumeOne($addarr, $user, $member_setmeal);
  149. }
  150. }
  151. //批量下载简历
  152. public function addDownResumeBatch($rid, $user, $setmeal)
  153. {
  154. $num = 0;
  155. $down_where = array(
  156. 'company_uid' => $user->id
  157. );
  158. $down_where_In = array('resume_id'=>$rid);
  159. $down_rst = $this->CompanyDownResumeRepository->getDowmResumes($down_where, $down_where_In);
  160. if ($down_rst) {
  161. foreach ($rid as $key => $value) {
  162. if (array_has($down_rst, $value)) {
  163. unset($rid[$key]); //过滤已下载的简历
  164. }
  165. }
  166. }
  167. if ($rid && $setmeal->show_apply_contact == 0 && $user->id) {
  168. $apply_where = array(
  169. 'company_uid' => $$user->id
  170. );
  171. $apply_where_In = array('resume_id'=>$rid);
  172. $rst = $this->personalJobsApplyRepository->getApplies($apply_where, $apply_where_In);
  173. if ($rst) {
  174. foreach ($rid as $key => $value) {
  175. if (array_has($rst, $value)) {
  176. unset($rid[$key]); //过滤已申请大当前企业职位的简历
  177. }
  178. }
  179. }
  180. }
  181. if ($rid) {
  182. //获取简历信息
  183. $resume_arr = $this->ResumeRepository->getResumesWithInfo($rid);
  184. $company = $this->companyRepository->getCompanyInfo(array('id'=>$user->id));
  185. $setmeal_download_resume = $setmeal->download_resume;
  186. if ($resume_arr->toArray()) {
  187. foreach ($resume_arr as $key => $value) {
  188. $memberInfo = $value->memberInfos;
  189. $addarr['resume_id'] = $value->id;
  190. //套餐信息
  191. //获取简历名称
  192. if ($memberInfo->display_name == "2") {
  193. $addarr['resume_name'] = "N" . str_pad($value->id, 7, "0", STR_PAD_LEFT);
  194. } elseif ($memberInfo->display_name == "3") {
  195. if ($memberInfo->sex == 1) {
  196. $addarr['resume_name'] = cut_str($memberInfo->realname, 1, 0, "先生");
  197. } elseif ($memberInfo->sex == 2) {
  198. $addarr['resume_name'] = cut_str($memberInfo->realname, 1, 0, "女士");
  199. }
  200. } else {
  201. $addarr['resume_name'] = $memberInfo->realname;
  202. }
  203. $addarr["resume_uid"]=$value->uid;
  204. $addarr["company_uid"]=$company->id;
  205. $addarr["company_name"]=$company->companyname;
  206. $addarr['down_addtime'] = time();
  207. $addarr['is_reply'] = 0;
  208. $info = $this->CompanyDownResumeRepository->create($addarr);
  209. if ($info) {
  210. //如果套餐简历下载数大于0,则修改
  211. if ($setmeal_download_resume > 0) {
  212. $this->memberSetmealRepository->decrementData(array('uid'=>$user->id), 'download_resume', 1);
  213. $this->memberLogRepository->createLog($user, '1012', array($value->id,'消耗简历下载数:1,套餐剩余:'.($setmeal_download_resume-1),''));
  214. $setmeal_download_resume = $setmeal_download_resume -1 ;
  215. } else {
  216. //修改会员积分
  217. $point = config('aix.companyset.comsume.comsume_set.download_resume_price')*config('aix.companyset.points.points_set.payment_rate');
  218. $p_rst = $this->memberPointRepository->reportDeal($user->id, $user->utype, 2, $point);
  219. if ($p_rst) {
  220. $this->memberLogRepository->createLog($user, '1012', array($value->id,'消耗积分:'.$point,''));
  221. $stime = date('Y-m-d H:i:s', time());
  222. $handsel['uid'] = $user->id;
  223. $handsel['utype'] = $user->utype;
  224. $handsel['htype'] = 'download_resume';
  225. $handsel['htype_cn'] = '下载简历';
  226. $handsel['operate'] = 2;
  227. $handsel['points'] = $point;
  228. $this->memberHandselRepository->create($handsel);
  229. }
  230. }
  231. $num++;
  232. }
  233. }
  234. }
  235. }
  236. if ($num>0) {
  237. return array('status'=>1,'msg'=>'成功下载'.$num.'份简历!');
  238. } else {
  239. return array('status'=>0,'msg'=>'下载失败!');
  240. }
  241. }
  242. //下载单个下载简历
  243. public function addDownResumeOne($addarr, $user, $setmeal)
  244. {
  245. $add_arr['resume_id'] = $addarr['rid'][0];
  246. //检测是否下载过简历
  247. $down_where = array(
  248. 'resume_id' => $add_arr['resume_id'],
  249. 'company_uid' => $user->id
  250. );
  251. $down_info = $this->CompanyDownResumeRepository->getDownResume($down_where);
  252. if ($down_info) {
  253. return array('status'=>0,'msg'=>"您已经下载过此简历了!");
  254. }
  255. //检测会员套餐中收到的简历是否可以免费查看,免费查看时不需要下载
  256. if ($setmeal->show_apply_contact == 1) {
  257. //检测是否申请过职位
  258. $has = $this->personalJobsApplyRepository->checkJobsApply($add_arr['resume_id'], $user->id);
  259. if ($has) {
  260. //return array('status'=>0,'msg'=>'简历联系方式可见,您无需下载此简历!');
  261. return array('status'=>0,'msg'=>'当前用户的其它简历已下载,您无需下载此简历!');
  262. }
  263. }
  264. //获取简历信息、简历用户信息,用于处理简历名称
  265. $resumeInfo = $this->ResumeRepository->getResumeById($add_arr['resume_id']);
  266. $user_info = $resumeInfo->memberInfos;
  267. if ($user_info->display_name == 2) {
  268. $add_arr['resume_name'] = "N".str_pad($resumeInfo->id, 7, "0", STR_PAD_LEFT);
  269. } elseif ($user_info->display_name == 3) {
  270. if ($user_info->sex==1) {
  271. $add_arr['resume_name'] = cut_str($user_info->realname, 1, 0, "先生");
  272. } elseif ($user_info->sex==2) {
  273. $add_arr['resume_name'] = cut_str($user_info->realname, 1, 0, "女士");
  274. }
  275. } else {
  276. $add_arr['resume_name'] = $user_info->realname;
  277. }
  278. $stime1 = time();
  279. $stime2 = date('Y-m-d H:i:s', $stime1);
  280. $add_arr["resume_uid"]=$resumeInfo->uid;
  281. $add_arr["company_uid"]=$user->id;
  282. $add_arr["company_name"]=$user->companyname;
  283. $add_arr['down_addtime'] = $stime1;
  284. $add_arr['is_reply'] = 0;
  285. $add_arr['created_at'] = $stime2;
  286. $add_arr['updated_at'] = $stime2;
  287. $info = $this->CompanyDownResumeRepository->create($add_arr);
  288. return array('status'=>1,'msg'=>$info);
  289. }
  290. public function getDownResumes($where)
  291. {
  292. return $this->CompanyDownResumeRepository->getDowmResumes($where);
  293. }
  294. public function getLimitDownResumes($limit)
  295. {
  296. $order_by = array(
  297. 'down_addtime' => 'desc'
  298. );
  299. $rst = $this->CompanyDownResumeRepository->getDownResumes(array(), $order_by, $limit);
  300. return $rst;
  301. }
  302. //当投递简历成功时,插入记录
  303. public function addDownResumes($company_id,$resume_id)
  304. {
  305. //判断企业套餐是否允许查看
  306. $setmeal = $this->memberSetmealRepository->getSetmealByUid($company_id,1);
  307. $downResume = $this->CompanyDownResumeRepository->getDownResume(['resume_id'=>$resume_id,'company_uid'=>$company_id]);
  308. if($setmeal && $setmeal->show_apply_contact == 1 && !$downResume){
  309. $resume_info = $this->ResumeRepository->getResumeById($resume_id);
  310. $down_data = array(
  311. 'resume_id' => $resume_id,
  312. 'resume_name' => $resume_info->title,
  313. 'resume_uid' => $resume_info->uid,
  314. 'company_uid' => $company_id,
  315. 'company_name' => getCompanyName($company_id)->companyname,
  316. 'down_addtime' => time(),
  317. 'is_reply' => 0
  318. );
  319. $this->CompanyDownResumeRepository->create($down_data);
  320. }
  321. }
  322. //判断下载的简历是否是已下载简历
  323. public function isOwn($y_id,$user,$column)
  324. {
  325. $idsArr = $this->CompanyDownResumeRepository->getPluck(['company_uid'=>$user->id],$column)->toArray();
  326. if(array_diff($y_id,$idsArr))
  327. {
  328. throw new ResponseException('参数错误!');
  329. }
  330. }
  331. }