JobsService.php 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384
  1. <?php
  2. /**
  3. * Created by PhpStorm.
  4. * User: michaelwu
  5. * Date: 2018/10/30
  6. * Time: 11:22
  7. */
  8. namespace App\Services\Crm;
  9. use App\Exceptions\ResponseException;
  10. use App\Models\Company;
  11. use App\Models\Jobs;
  12. use App\Models\Payment;
  13. use App\Models\SubsiteJob;
  14. use App\Repositories\AuditReasonsRepository;
  15. use App\Repositories\CompanyRepository;
  16. use App\Repositories\CompanyStatisticsRepository;
  17. use App\Repositories\Jobfair\JobfairJobRepository;
  18. use App\Repositories\Jobfair\JobfairJobsContactRepository;
  19. use App\Repositories\JobsContactRepository;
  20. use App\Repositories\JobsRepository;
  21. use App\Repositories\MemberHandselRepository;
  22. use App\Repositories\MemberLogRepository;
  23. use App\Repositories\MemberPointRepository;
  24. use App\Repositories\MemberSetmealRepository;
  25. use App\Repositories\MembersSetmealLogRepository;
  26. use App\Repositories\OrderRepository;
  27. use App\Repositories\PersonalJobsApplyRepository;
  28. use App\Repositories\QueueAutoRefreshRepository;
  29. use App\Repositories\RefreshLogRepository;
  30. use App\Repositories\SetmealRepository;
  31. use App\Repositories\SubsiteJobRepository;
  32. use Exception;
  33. use Illuminate\Support\Facades\DB;
  34. use Illuminate\Support\Facades\Cache;
  35. use App\Repositories\CategoryRepository;
  36. use App\Repositories\CategoryJobsRepository;
  37. use App\Repositories\CategoryDistrictRepository;
  38. use App\Repositories\ResumeRepository;
  39. use App\Repositories\ViewJobRepository;
  40. use App\Repositories\PersonFavoriteRepository;
  41. use App\Services\Common\PaymentService;
  42. use App\Services\Common\OrderService;
  43. use App\Services\Common\PayService;
  44. use App\Services\Company\ServiceService;
  45. use App\Services\Common\SmsService;
  46. use App\Services\Common\PmsService;
  47. use App\Models\AuditReason;
  48. use Aix\Sms\Contracts\Smser;
  49. use Aix\Pay\Data\PayOrder;
  50. use App\Repositories\ResumePrivacyRepository;
  51. class JobsService
  52. {
  53. protected $jobsRepository;
  54. protected $jobsContactRepository;
  55. protected $companyRepository;
  56. protected $membersSetmealRepository;
  57. protected $personalJobsApplyRepository;
  58. protected $auditReasonsRepository;
  59. protected $refreshLogRepository;
  60. protected $memberPointRepository;
  61. protected $setmealRepository;
  62. protected $jobsSearchRepository;
  63. protected $memberHandselRepository;
  64. protected $membersSetmealLogRepository;
  65. protected $app_spell = true;
  66. protected $categoryRepository;
  67. protected $categoryJobsRepository;
  68. protected $categoryDistrictRepository;
  69. protected $resumeRepository;
  70. protected $viewJobRepository;
  71. protected $personFavoriteRepository;
  72. protected $queueAutoRefreshRepository;
  73. protected $orderRepository;
  74. protected $companyStatisticsRepository;
  75. protected $jobfairJobRepository;
  76. protected $jobfairJobsContactRepository;
  77. protected $subsiteJobRepository;
  78. protected $paymentService;
  79. protected $orderService;
  80. protected $payService;
  81. protected $serviceService;
  82. protected $ResumePrivacyRepository;
  83. protected $memberLogRepository;
  84. protected $smsService;
  85. protected $pmsService;
  86. /**
  87. * JobsService constructor.
  88. */
  89. public function __construct
  90. ( JobsRepository $jobsRepository,
  91. ServiceService $serviceService,
  92. PayService $payService,
  93. SubsiteJobRepository $subsiteJobRepository,
  94. JobfairJobsContactRepository $jobfairJobsContactRepository,
  95. JobfairJobRepository $jobfairJobRepository,
  96. CompanyStatisticsRepository $companyStatisticsRepository,
  97. OrderRepository $orderRepository,
  98. QueueAutoRefreshRepository $queueAutoRefreshRepository,
  99. SetmealRepository $setmealRepository,
  100. MemberPointRepository $memberPointRepository,
  101. JobsContactRepository $jobsContactRepository,
  102. CompanyRepository $companyRepository,
  103. MemberSetmealRepository $memberSetmealRepository,
  104. PersonalJobsApplyRepository $personalJobsApplyRepository,
  105. AuditReasonsRepository $auditReasonsRepository,
  106. RefreshLogRepository $refreshLogRepository,
  107. CategoryRepository $categoryRepository,
  108. CategoryJobsRepository $categoryJobsRepository,
  109. CategoryDistrictRepository $categoryDistrictRepository,
  110. ResumeRepository $resumeRepository,
  111. ViewJobRepository $viewJobRepository,
  112. PersonFavoriteRepository $personFavoriteRepository,
  113. MembersSetmealLogRepository $membersSetmealLogRepository,
  114. MemberHandselRepository $memberHandselRepository,
  115. PaymentService $paymentService,
  116. OrderService $orderService,
  117. ResumePrivacyRepository $ResumePrivacyRepository,
  118. MemberLogRepository $memberLogRepository,
  119. SmsService $smsService,
  120. PmsService $pmsService
  121. )
  122. {
  123. $this->jobsRepository = $jobsRepository;
  124. $this->jobsContactRepository = $jobsContactRepository;
  125. $this->companyRepository = $companyRepository;
  126. $this->membersSetmealRepository = $memberSetmealRepository;
  127. $this->personalJobsApplyRepository = $personalJobsApplyRepository;
  128. $this->auditReasonsRepository = $auditReasonsRepository;
  129. $this->refreshLogRepository = $refreshLogRepository;
  130. $this->memberPointRepository = $memberPointRepository;
  131. $this->setmealRepository = $setmealRepository;
  132. $this->memberHandselRepository = $memberHandselRepository;
  133. $this->membersSetmealLogRepository = $membersSetmealLogRepository;
  134. $this->categoryRepository = $categoryRepository;
  135. $this->categoryJobsRepository = $categoryJobsRepository;
  136. $this->categoryDistrictRepository = $categoryDistrictRepository;
  137. $this->resumeRepository = $resumeRepository;
  138. $this->viewJobRepository = $viewJobRepository;
  139. $this->personFavoriteRepository = $personFavoriteRepository;
  140. $this->queueAutoRefreshRepository = $queueAutoRefreshRepository;
  141. $this->orderRepository = $orderRepository;
  142. $this->companyStatisticsRepository = $companyStatisticsRepository;
  143. $this->jobfairJobRepository = $jobfairJobRepository;
  144. $this->jobfairJobsContactRepository = $jobfairJobsContactRepository;
  145. $this->subsiteJobRepository = $subsiteJobRepository;
  146. $this->paymentService = $paymentService;
  147. $this->orderService = $orderService;
  148. $this->payService = $payService;
  149. $this->serviceService = $serviceService;
  150. $this->ResumePrivacyRepository = $ResumePrivacyRepository;
  151. $this->memberLogRepository=$memberLogRepository;
  152. $this->smsService = $smsService;
  153. $this->pmsService = $pmsService;
  154. }
  155. public function getJobs($where, $where_in, $order_by = '', $fileds = '', $offset = '', $limit = '')
  156. {
  157. $rst = $this->jobsRepository->getCrmJobs($where, $where_in, $order_by, $fileds, $offset, $limit);
  158. return $rst;
  159. }
  160. public function getJobNums($where, $where_in)
  161. {
  162. $rst = $this->jobsRepository->getCrmJobCount($where, $where_in);
  163. return $rst;
  164. }
  165. public function dealjobFilelds($list, $map_data = array(), $limit = '')
  166. {
  167. $return_list = array();
  168. foreach ($list as $key => $val) {
  169. if ($limit && ($key >= $limit)) {
  170. break;
  171. }
  172. $arr = $val->toArray();
  173. $arr['jobs_name']=cut_str($val->jobs_name, 12, 0, "...");
  174. $arr['companyname']=cut_str($val->company_name, 18, 0, "...");
  175. $arr['company_url'] = route(url_rewrite('AIX_companyshow'), ['id'=> $val->company_id]);
  176. $arr['jobs_url'] = route(url_rewrite('AIX_jobslist'), ['id'=> $val->id]);
  177. $arr['minwage'] = $val->wage_min;
  178. $return_list[$key] = $arr;
  179. }
  180. return $return_list;
  181. }
  182. public function getAutoRefreshJobs($where, $group_by)
  183. {
  184. $rst = $this->queueAutoRefreshRepository->getCrmRefreshs($where, $group_by);
  185. return $rst;
  186. }
  187. public function auditJobs($data){
  188. $ids = '';
  189. if (array_has($data, 'id')) {
  190. $ids = $data['id'];
  191. }
  192. if (!$ids) {
  193. return ['status'=>0,'msg'=>'请选择要审核的职位'];
  194. }
  195. $id = explode(',', $ids);
  196. $job_com_ids =$this->jobsRepository->findWhereIn('id', $id, ['company_id','id','jobs_name'])->toArray();
  197. $reason = '';
  198. if (array_has($data, 'reason')) {
  199. $reason = $data['reason'];
  200. }
  201. $audit = 0;
  202. if (array_has($data, 'audit')) {
  203. $audit = $data['audit'];
  204. }
  205. $data = ['audit'=>$audit];
  206. $auditusername = 'CRM业务员';
  207. if (array_has($data, 'auditusername')) {
  208. $auditusername = $data['auditusername'];
  209. }
  210. if (Jobs::jobsUpdate($id, $data)) {
  211. event_search_update(Jobs::class, implode(',', $id), 'update');
  212. if ($job_com_ids) {
  213. $company_ids = [];
  214. foreach ($company_ids as $k => $c) {
  215. $company_ids[] = $c['company_id'];
  216. }
  217. $company_condition = [['whereIn','id', $company_ids]];
  218. event_search_update(Company::class, $company_condition, 'update');
  219. }
  220. switch ($audit) {
  221. case 1:
  222. $html = "通过审核";
  223. $alias=Smser::TEMPLATE_SMS_JOBSALLOW;
  224. break;
  225. case 3:
  226. $html = "未通过审核";
  227. $alias=Smser::TEMPLATE_SMS_JOBSNOTALLOW;
  228. break;
  229. }
  230. $mobile = [];
  231. foreach ($id as $key => $val) {
  232. $jobsInfo = Jobs::with('jobsContact')->find($val);
  233. if ($jobsInfo->jobsContact && $jobsInfo->jobsContact->telephone) {
  234. if(!in_array($jobsInfo->jobsContact->telephone, $mobile)){
  235. $mobile[] = $jobsInfo->jobsContact->telephone;
  236. $this->smsService->sendSms($jobsInfo->jobsContact->telephone, $alias, ['sitename'=>config('aix.system.site.site.site_name'),'jobsname'=>$jobsInfo->jobs_name,'sitedomain'=>config('aix.system.site.site.site_domain')]);
  237. }
  238. }
  239. }
  240. //审核日志
  241. $auditData= [];
  242. $auditData['ids'] = $id;
  243. $auditData['status'] = $audit;
  244. $auditData['type'] = 3;
  245. $auditData['reason'] = $reason;
  246. if ($auditusername) {
  247. $auditData['audit_man'] = $auditusername;
  248. }
  249. AuditReason::addData($auditData);
  250. // 站内信
  251. $insertData = [];
  252. foreach ($job_com_ids as $key => $val) {
  253. $insertData[$key] = array(
  254. 'utype' => 1,
  255. 'msgtype' => 1,
  256. 'msgfromuid' => 0,
  257. 'msgfrom' => $auditusername,
  258. 'msgtoname' =>getComUserName($val['company_id']),
  259. 'msgtouid' => $val['company_id'],
  260. 'message' => '职位ID:'.$val['id'].',职位名称:'.$val['jobs_name'].','.$html.',【备注】'.$reason,
  261. 'new' => 1,
  262. 'created_at' =>date('Y-m-d H:i:s', time()),
  263. 'updated_at' =>date('Y-m-d H:i:s', time()),
  264. );
  265. }
  266. $this->pmsService->addBatchPms($insertData);
  267. return ['status'=>1,'msg'=>'职位审核成功'];
  268. } else {
  269. return ['status'=>0,'msg'=>'职位审核失'];
  270. }
  271. }
  272. public function getJobInfo($id)
  273. {
  274. $info = $this->jobsRepository->getCrmInfo(['id'=>$id]);
  275. if (!$info) {
  276. return ['status'=>0, 'msg'=>'没有找到对应的职位!'];
  277. }
  278. $info->companyname = $info->company_name;
  279. $info->user = $info->company;
  280. $info->contact = $info->jobsContact;
  281. $info->contents = $info->jobs_content;
  282. $info->addtime = strtotime($info->created_at);
  283. $info->refreshtime = $info->refresh_time;
  284. if ($info->wage == -1) {
  285. $info->negotiable = 1;
  286. }
  287. $info->minwage = $info->wage_min;
  288. $info->maxwage = $info->wage_max;
  289. //职位亮点
  290. $tag_cn = [];
  291. if ($info->tag) {
  292. foreach ($info->tag as $k => $v) {
  293. if ($tag = get_category($v)) {
  294. $tag_cn[] = $tag;
  295. }
  296. }
  297. }
  298. $info->tag_cn = implode(',', $tag_cn);
  299. //职位性质
  300. $info->nature_cn = get_category($info->nature);
  301. //工作地区
  302. $district_cn = [];
  303. $district = string_to_array('.', $info->district);
  304. foreach ($district as $key => $val) {
  305. $district_cn[] = get_district_cn($val);
  306. }
  307. $info->district_cn = implode(',', $district_cn);
  308. //职位类别
  309. $category_cn = '';
  310. if ($info->subclass) {
  311. $category_cn = get_job_category($info->subclass);
  312. } elseif ($info->category) {
  313. $category_cn = get_job_category($info->category);
  314. }
  315. $info->category_cn = $category_cn;
  316. $info->education_cn = $info->education?get_category($info->education):'不限'; //学历要求
  317. $info->experience_cn = $info->experience?get_category($info->experience):'不限'; //工作经验
  318. //性别
  319. $sex_cn = '不限';
  320. if ($info->sex == 1) {
  321. $sex_cn = '男';
  322. } elseif ($info->sex == 2) {
  323. $sex_cn = '女';
  324. } else {
  325. $sex_cn = '不限';
  326. }
  327. $info->sex_cn = $sex_cn;
  328. //年龄要求
  329. $info->minage = 0;
  330. $info->maxage = 0;
  331. $age = $info->age;
  332. if ($info->age[0]) {
  333. $info->minage = $info->age[0];
  334. }
  335. if ($info->age[1]) {
  336. $info->maxage = $info->age[1];
  337. }
  338. //处理固定电话
  339. $tels =[];
  340. if ($info->jobsContact) {
  341. $tel_arr = $info->jobsContact->landline_tel;
  342. if ($tel_arr) {
  343. if (implode('', $tel_arr)) {
  344. foreach ($tel_arr as $k => $v) {
  345. if ($v == '') {
  346. unset($tel_arr[$k]);
  347. }
  348. }
  349. }
  350. $tels = $tel_arr;
  351. }
  352. }
  353. $info->telarray = $tels;
  354. return ['status'=>1, 'msg'=>$info];
  355. }
  356. //获取智能刷新职位
  357. public function getAutoRefresh($where)
  358. {
  359. return $this->queueAutoRefreshRepository->findData($where);
  360. }
  361. }