DemandLabor.php 21 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466
  1. <?php
  2. namespace app\data\controller\api\auth;
  3. use app\data\controller\api\Auth;
  4. use app\data\controller\api\Data;
  5. use app\data\model\DataCollectionLog;
  6. use app\data\model\DataRecruitment;
  7. use app\data\model\DataTeachingKnowledge;
  8. use app\data\model\DataUserApplyJobInfo;
  9. use app\data\model\DataUserApplyJobInfoChild;
  10. use app\data\service\MessageService;
  11. use think\admin\Storage;
  12. use think\db\Query;
  13. use think\exception\HttpResponseException;
  14. use think\admin\Controller;
  15. use hg\apidoc\annotation\Title;
  16. use hg\apidoc\annotation\Method;
  17. use hg\apidoc\annotation\Param;
  18. use hg\apidoc\annotation\Header;
  19. use hg\apidoc\annotation\Returned;
  20. use think\facade\Validate;
  21. /**
  22. * @Title("劳务需求")
  23. */
  24. class DemandLabor extends Auth
  25. {
  26. protected $noNeedLogin=[];
  27. /**
  28. * @Title("招聘信息,应聘信息列表")
  29. * @Method("post")
  30. * @Header("api-name",type="string",require=1,default="",desc="访问类型")
  31. * @Header("api-token",type="string",require=1,default="",desc="token")
  32. * @Param("type",type="string",require=1,default="1",desc="1:招聘信息2:应聘信息")
  33. * @Param("keyword",type="string",require=0,default="",desc="关键词搜索")
  34. * @Param("salary",type="string",require=0,default="",desc="薪资待遇1:不限 2:4K以下 3:4K-6K 4:6K-8K 5:8K-12K 6:12K以上")
  35. * @Param("type",type="string",require=1,default="",desc="1:招聘信息2:应聘信息")
  36. * @Returned("json",desc="")
  37. */
  38. public function demandlist()
  39. {
  40. $data = $this->_vali([
  41. 'type.require|in:1,2'=>'type有误',
  42. 'keyword.default'=>'',
  43. 'salary.default'=>'',
  44. 'schooling.default'=>''
  45. ],'post');
  46. switch ($data['type']){
  47. case 1:
  48. $keyword = $data['keyword'];
  49. $salary = $data['salary'];
  50. $schooling = $data['schooling'];
  51. $list = DataRecruitment::mk()
  52. ->where('is_del',1)
  53. ->where('state',1)
  54. ->hasWhere('shipyard',function ($query) use ($keyword){
  55. $query->whereLike('data_recruitment.title|name','%'.$keyword.'%');
  56. },'data_recruitment.id,shipyard_id,title,data_recruitment.province,data_recruitment.city,schooling,salary_start,salary_end,contact_person,contact_headimg,contact_position,experience')
  57. ->when($salary,function ($query) use ($salary){
  58. switch ($salary){
  59. case 1:
  60. break;
  61. case 2:
  62. $query->where('salary_start','<','4000');
  63. break;
  64. case 3:
  65. $query->whereRaw('(salary_start>=4000 and salary_start<6000) or (salary_end>=4000 and salary_end<6000)');
  66. break;
  67. case 4:
  68. $query->whereRaw('(salary_start>=6000 and salary_start<8000) or (salary_end>=6000 and salary_end<8000)');
  69. break;
  70. case 5:
  71. $query->whereRaw('(salary_start>=8000 and salary_start<12000) or (salary_end>=8000 and salary_end<12000)');
  72. break;
  73. case 6:
  74. $query->whereRaw('(salary_start>=12000) or (salary_end>=12000)');
  75. break;
  76. }
  77. })
  78. ->when($schooling,function ($query) use ($schooling){
  79. $query->where('schooling',$schooling);
  80. })
  81. ->with(['shipyard'=>function($query){
  82. $query->field('id,name');
  83. }])
  84. ->paginate();
  85. break;
  86. case 2:
  87. $list = DataUserApplyJobInfo::mk()
  88. ->where('audit',2)
  89. ->where('hidden',1)
  90. ->field('id,head_img,real_name,sex,age,work_year,schooling,job_application,scope_work_area,province,city,area')
  91. ->paginate();
  92. break;
  93. }
  94. $this->success('成功',$list);
  95. }
  96. /**
  97. * @Title("招聘信息详情、应聘信息详情")
  98. * @Method("post")
  99. * @Header("api-name",type="string",require=1,default="",desc="访问类型")
  100. * @Header("api-token",type="string",require=1,default="",desc="token")
  101. * @Param("type",type="string",require=1,default="",desc="1:招聘信息2:应聘信息")
  102. * @Param("id",type="string",require=1,default="",desc="主键ID")
  103. * @Returned("is_collection",desc="1:已收藏0:未收藏")
  104. * @Returned("is_like",desc="1:已感兴趣0:未感兴趣")
  105. */
  106. public function demanddetail(){
  107. $data = $this->_vali([
  108. 'type.require|in:1,2'=>'type有误',
  109. 'id.require'=>'id必须'
  110. ]);
  111. switch ($data['type']){
  112. case 1:
  113. $info = DataRecruitment::mk()
  114. ->where('id',$data['id'])
  115. ->where('is_del',1)
  116. ->where('state',1)
  117. ->findOrEmpty();
  118. $info['is_collection'] = DataCollectionLog::Show(3,$this->uuid,$data['id'])->count() ? 1 : 0;
  119. $info['is_like'] = DataCollectionLog::Show(4,$this->uuid,$data['id'],2)->count() ? 1 : 0;
  120. break;
  121. case 2:
  122. $info = DataUserApplyJobInfo::mk()
  123. ->where('id',$data['id'])
  124. ->where('audit',2)
  125. ->where('hidden',1)
  126. ->with(['workexperience','professionalskills','certificate'])
  127. ->findOrEmpty();
  128. $info['is_collection'] = DataCollectionLog::Show(4,$this->uuid,$data['id'])->count() ? 1 : 0;
  129. $info['is_like'] = DataCollectionLog::Show(4,$this->uuid,$data['id'],2)->count() ? 1 : 0;
  130. break;
  131. }
  132. $this->success('成功',$info);
  133. }
  134. /**
  135. * @Title("招聘信息、应聘信息收藏/取消收藏")
  136. * @Method("post")
  137. * @Header("api-name",type="string",require=1,default="",desc="访问类型")
  138. * @Header("api-token",type="string",require=1,default="",desc="token")
  139. * @Param("type",type="string",require=1,default="",desc="1:招聘信息2:应聘信息")
  140. * @Param("id",type="string",require=1,default="",desc="主键ID")
  141. * @Param("category",type="string",require=1,default="",desc="1:收藏2:取消收藏")
  142. */
  143. public function cocanclecollection(){
  144. $data = $this->_vali([
  145. 'type.require|in:1,2'=>'type有误',
  146. 'id.require'=>'id必须',
  147. 'category.require|in:1,2'=>'category有误'
  148. ]);
  149. switch ($data['category']){
  150. case 1:
  151. switch ($data['type']){
  152. case 1:
  153. DataCollectionLog::Show(3,$this->uuid,$data['id'])->count() ? $this->error('已收藏过') : '';
  154. $type = 3;
  155. break;
  156. case 2:
  157. $type = 4;
  158. DataCollectionLog::Show(4,$this->uuid,$data['id'])->count() ? $this->error('已收藏过') : '';
  159. break;
  160. }
  161. if (DataCollectionLog::mk()->insert(['uuid'=>$this->uuid,'type'=>$type,'link_id'=>$data['id']])){
  162. $this->success('收藏成功');
  163. }
  164. $this->error('收藏失败');
  165. break;
  166. case 2:
  167. switch ($data['type']){
  168. case 1:
  169. DataCollectionLog::Show(3,$this->uuid,$data['id'])->count() ? : $this->error('未收藏');
  170. $type = 3;
  171. break;
  172. case 2:
  173. $type = 4;
  174. DataCollectionLog::Show(4,$this->uuid,$data['id'])->count() ? : $this->error('未收藏');
  175. break;
  176. }
  177. if (DataCollectionLog::mk()->where('uuid',$this->uuid)->where('type',$type)->where('link_id',$data['id'])->delete()){
  178. $this->success('收藏成功');
  179. }
  180. $this->error('收藏失败');
  181. break;
  182. }
  183. }
  184. /**
  185. * @Title("招聘信息、应聘信息感兴趣/取消感兴趣")
  186. * @Method("post")
  187. * @Header("api-name",type="string",require=1,default="",desc="访问类型")
  188. * @Header("api-token",type="string",require=1,default="",desc="token")
  189. * @Param("type",type="string",require=1,default="",desc="1:招聘信息2:应聘信息")
  190. * @Param("id",type="string",require=1,default="",desc="主键ID")
  191. * @Param("category",type="string",require=1,default="",desc="1:感兴趣2:取消感兴趣")
  192. */
  193. public function cocanclelike(){
  194. $data = $this->_vali([
  195. 'type.require|in:1,2'=>'type有误',
  196. 'id.require'=>'id必须',
  197. 'category.require|in:1,2'=>'category有误'
  198. ]);
  199. switch ($data['category']){
  200. case 1:
  201. switch ($data['type']){
  202. case 1:
  203. DataCollectionLog::Show(3,$this->uuid,$data['id'],2)->count() ? $this->error('已感兴趣') : '';
  204. $type = 3;
  205. break;
  206. case 2:
  207. $type = 4;
  208. DataCollectionLog::Show(4,$this->uuid,$data['id'],2)->count() ? $this->error('已感兴趣') : '';
  209. break;
  210. }
  211. if (DataCollectionLog::mk()->insert(['uuid'=>$this->uuid,'cate'=>2,'type'=>$type,'link_id'=>$data['id']])){
  212. $this->success('收藏成功');
  213. }
  214. $this->error('收藏失败');
  215. break;
  216. case 2:
  217. switch ($data['type']){
  218. case 1:
  219. DataCollectionLog::Show(3,$this->uuid,$data['id'],2)->count() ? : $this->error('未感兴趣');
  220. $type = 3;
  221. break;
  222. case 2:
  223. $type = 4;
  224. DataCollectionLog::Show(4,$this->uuid,$data['id'],2)->count() ? : $this->error('未已感兴趣');
  225. break;
  226. }
  227. if (DataCollectionLog::Show($type,$this->uuid,$data['id'],2)->delete()){
  228. $this->success('收藏成功');
  229. }
  230. $this->error('收藏失败');
  231. break;
  232. }
  233. }
  234. /**
  235. * @Title("发布应聘、修改")
  236. * @Method("post")
  237. * @Header("api-name",type="string",require=1,default="",desc="访问类型")
  238. * @Header("api-token",type="string",require=1,default="",desc="token")
  239. * @Param("type",type="string",require=1,default="",desc="1:基本信息2:求职意向3:工作经历4:专业技能5:资质证书6:其他(福利待遇、备注,定位省市区)")
  240. * @Param("head_img",type="string",require=0,default="",desc="头像")
  241. * @Param("real_name",type="string",require=0,default="",desc="真实姓名")
  242. * @Param("sex",type="string",require=0,default="",desc="性别")
  243. * @Param("date_birth",type="string",require=0,default="",desc="出生年月")
  244. * @Param("schooling",type="string",require=0,default="",desc="学历")
  245. * @Param("start_working_time",type="string",require=0,default="",desc="参加工作时间")
  246. * @Param("phone",type="string",require=0,default="",desc="手机号")
  247. * @Param("email",type="string",require=0,default="",desc="邮箱")
  248. * @Param("job_application",type="string",require=0,default="",desc="应聘岗位")
  249. * @Param("scope_work_area",type="string",require=0,default="",desc="工作地区")
  250. * @Param("monthly_salary",type="string",require=0,default="",desc="期望月薪")
  251. * @Param("working_time",type="string",require=0,default="",desc="可工作时间")
  252. * @Param("work_nature",type="string",require=0,default="",desc="工作性质")
  253. * @Param("work_experience",type="json",require=0,default="",desc="工作经历json,(company_name:公司名称,position_name:职位名称,on_job_start:在职时间开始,on_job_end:在职时间结束,job_description:工作内容)")
  254. * @Param("professional_skills",type="json",require=0,default="",desc="专业技能json,(skill_name:技能名称,degree:掌握程度)")
  255. * @Param("certificate",type="json",require=0,default="",desc="资质证书json,(certificate_name:证书名称,gain_time:获得时间,img:图片)")
  256. * @Param("child_id",type="string",require=0,default="",desc="id,type为3,4,5时,修改时传入此值")
  257. * @Param("welfare_benefits",type="string",require=0,default="",desc="福利待遇")
  258. * @Param("remark",type="string",require=0,default="",desc="备注")
  259. * @Param("province",type="string",require=0,default="",desc="定位-省")
  260. * @Param("city",type="string",require=0,default="",desc="定位-市")
  261. * @Param("area",type="string",require=0,default="",desc="定位-区")
  262. */
  263. public function applyjob(){
  264. $data = $this->_vali([
  265. 'type.require|in:1,2,3,4,5,6'=>'type有误',
  266. ]);
  267. $type = $data['type'];
  268. switch ($type){
  269. case 1:
  270. $data = $this->_vali([
  271. 'uuid.default'=>$this->uuid,
  272. 'head_img.requireIf:type,1'=>'头像必须',
  273. 'real_name.requireIf:type,1'=>'真实姓名必须',
  274. 'sex.requireIf:type,1'=>'性别必须',
  275. 'date_birth.requireIf:type,1'=>'出生年月必须',
  276. 'schooling.requireIf:type,1'=>'学历必须',
  277. 'start_working_time.requireIf:type,1'=>'参加工作时间必须',
  278. 'phone.requireIf:type,1'=>'手机号必须',
  279. 'email.requireIf:type,1'=>'邮箱必须',
  280. ]);
  281. $data['age'] = getAge($data['date_birth']);
  282. $data['work_year'] = getAge($data['start_working_time']);
  283. break;
  284. case 2:
  285. $data = $this->_vali([
  286. 'uuid.default'=>$this->uuid,
  287. 'job_application.requireIf:type,2'=>'应聘岗位必须',
  288. 'scope_work_area.requireIf:type,2'=>'工作地区必须',
  289. 'monthly_salary.requireIf:type,2'=>'期望月薪必须',
  290. 'working_time.requireIf:type,2'=>'可工作时间必须',
  291. 'work_nature.requireIf:type,2'=>'工作性质必须',
  292. ]);
  293. break;
  294. case 3:
  295. $data = $this->_vali([
  296. 'uuid.default'=>$this->uuid,
  297. 'work_experience.requireIf:type,3'=>'工作经历必须',
  298. 'child_id.default'=>'',
  299. ]);
  300. break;
  301. case 4:
  302. $data = $this->_vali([
  303. 'uuid.default'=>$this->uuid,
  304. 'professional_skills.requireIf:type,4'=>'专业技能必须',
  305. 'child_id.default'=>'',
  306. ]);
  307. break;
  308. case 5:
  309. $data = $this->_vali([
  310. 'uuid.default'=>$this->uuid,
  311. 'certificate.requireIf:type,5'=>'资质证书必须',
  312. 'child_id.default'=>'',
  313. ]);
  314. break;
  315. case 6:
  316. $data = $this->_vali([
  317. 'welfare_benefits.requireIf:type,6'=>'福利待遇必须',
  318. 'remark.requireIf:type,6'=>'备注必须',
  319. 'province.requireIf:type,6'=>'定位省必须',
  320. 'city.requireIf:type,6'=>'定位市必须',
  321. 'area.requireIf:type,6'=>'定位区必须',
  322. ]);
  323. break;
  324. }
  325. if (in_array($type,[3,4,5])){
  326. $info_id = DataUserApplyJobInfo::mk()->where('uuid',$this->uuid)->value('id') ? : DataUserApplyJobInfo::mk()->insertGetId(['uuid'=>$this->uuid]);
  327. $child_id = $data['child_id'];
  328. switch ($type){
  329. case 3:
  330. $child_type = 1;
  331. $content = $data['work_experience'];
  332. break;
  333. case 4:
  334. $child_type = 2;
  335. $content = $data['professional_skills'];
  336. break;
  337. case 5:
  338. $child_type = 3;
  339. $content = $data['certificate'];
  340. break;
  341. }
  342. $child_array = [
  343. 'info_id'=>$info_id,
  344. 'type'=>$child_type,
  345. 'content'=>$content
  346. ];
  347. !empty($child_id) ? $child_array['update_at'] = date('Y-m-d H:i:s') : '';
  348. if (!empty($child_id) ? DataUserApplyJobInfoChild::mk()->where('id',$child_id)->update($child_array) : DataUserApplyJobInfoChild::mk()->insert($child_array)){
  349. $this->success('成功');
  350. }
  351. $this->error('失败');
  352. }
  353. $id = DataUserApplyJobInfo::mk()->where('uuid',$this->uuid)->value('id');
  354. !empty($id) ? $data['update_at'] = date('Y-m-d H:i:s') : '';
  355. if (!empty($id) ? DataUserApplyJobInfo::mk()->where('id',$id)->update($data) : DataUserApplyJobInfo::mk()->insert($data)){
  356. $this->success('成功');
  357. }
  358. $this->error('失败');
  359. }
  360. /**
  361. * @Title("应聘信息,工作经历、专业技能、资质证书删除")
  362. * @Method("post")
  363. * @Header("api-name",type="string",require=1,default="",desc="访问类型")
  364. * @Header("api-token",type="string",require=1,default="",desc="token")
  365. * @Param("id",type="string",require=1,default="",desc="ID")
  366. */
  367. public function delapplyjobchild(){
  368. $data = $this->_vali([
  369. 'id.require'=>'id必须',
  370. ]);
  371. if (DataUserApplyJobInfoChild::mk()->where('id',$data['id'])->delete()){
  372. $this->success('成功');
  373. }
  374. $this->error('失败');
  375. }
  376. /**
  377. * @Title("确认发布")
  378. * @Method("post")
  379. * @Header("api-name",type="string",require=1,default="",desc="访问类型")
  380. * @Header("api-token",type="string",require=1,default="",desc="token")
  381. * @Param("id_card",type="string",require=1,default="",desc="身份证号")
  382. * @Param("phone2",type="string",require=1,default="",desc="手机号")
  383. * @Param("code",type="string",require=1,default="",desc="验证码")
  384. */
  385. public function subapplyjob(){
  386. $data = $this->_vali([
  387. 'id_card.require'=>'身份证必须',
  388. 'phone2.require'=>'手机号必须',
  389. 'code.require'=>'验证码必须',
  390. 'sub_at.default'=>date('Y-m-d H:i:s'),
  391. 'audit.default'=>1,
  392. ]);
  393. if (!isCreditNo($data['id_card'])) $this->error('身份证号格式错误');
  394. $info = DataUserApplyJobInfo::mk()
  395. ->withoutField('id_card,phone2,audit,audit_at,why,sub_at,update_at,work_year')
  396. ->where('uuid',$this->uuid)
  397. ->find()->toArray();
  398. // if (!MessageService::instance()->checkCode($data['code'], $data['phone2'],4)) {
  399. // $this->error('手机短信验证失败!');
  400. // }
  401. $count = count($info);
  402. $array1 = array_filter($info);
  403. if ($count!=count($array1)) $this->error('有未填写项,无法提交1');
  404. DataUserApplyJobInfoChild::mk()->where('info_id',$info['id'])->count() ? : $this->error('有未填写项,无法提交2');
  405. unset($data['code']);
  406. if (DataUserApplyJobInfo::mk()->where('id',$info['id'])->update($data)){
  407. $this->success('成功');
  408. }
  409. $this->error('失败');
  410. }
  411. /**
  412. * @Title("我的收藏")
  413. * @Method("post")
  414. * @Header("api-name",type="string",require=1,default="",desc="访问类型")
  415. * @Header("api-token",type="string",require=1,default="",desc="token")
  416. * @Param("type",type="string",require=1,default="",desc="1:招聘信息2:应聘信息")
  417. */
  418. public function mycollection(){
  419. $data = $this->_vali([
  420. 'type.require|in:1,2'=>'type有误',
  421. ]);
  422. switch ($data['type']){
  423. case 1:
  424. $list = DataCollectionLog::Show(3,$this->uuid)
  425. ->with(['recruitment'=>function($query){
  426. $query->field('data_recruitment.id,shipyard_id,title,data_recruitment.province,data_recruitment.city,schooling,salary_start,salary_end,contact_person,contact_headimg,contact_position,experience')->with(['shipyard'=>function($query){
  427. $query->field('id,name');
  428. }]);
  429. }])
  430. ->paginate();
  431. break;
  432. case 2:
  433. $list = DataCollectionLog::Show(4,$this->uuid)
  434. ->with(['joblist'=>function($query){
  435. $query->where('audit',2)
  436. ->where('hidden',1)
  437. ->field('id,head_img,real_name,sex,age,work_year,schooling,job_application');
  438. }])
  439. ->paginate();
  440. break;
  441. }
  442. $this->success('成功',$list);
  443. }
  444. }