JobfairController.php 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324
  1. <?php
  2. /**
  3. * Created by PhpStorm.
  4. * User: ZhangHao
  5. * Date: 2019/5/22
  6. * Time: 11:39
  7. */
  8. namespace App\Http\Controllers\Api\Jobfair;
  9. use App\Http\Controllers\Api\ApiBaseController;
  10. use Illuminate\Http\Request;
  11. use App\Services\Person\MemberInfoService;
  12. use App\Services\Person\MemberService;
  13. use App\Services\Auth\RegisterService;
  14. use App\Repositories\MemberInfoRepository;
  15. use App\Repositories\Jobfair\JobfairPersonSignedRepository;
  16. use App\Repositories\Jobfair\JobfairRepository;
  17. use App\Repositories\Jobfair\JobfairCompanyRepository;
  18. use App\Repositories\TaskRepository;
  19. use App\Repositories\MemberHandselRepository;
  20. use App\Repositories\MemberPointRepository;
  21. use App\Repositories\CompanyRepository;
  22. use Illuminate\Support\Facades\Cache;
  23. class JobfairController extends ApiBaseController
  24. {
  25. private $memberInfoService;
  26. protected $memberService;
  27. protected $registerService;
  28. protected $memberInfoRepository;
  29. protected $jobfairPersonSignedRepository;
  30. protected $jobfairRepository;
  31. protected $jobfairCompanyRepository;
  32. protected $taskRepository;
  33. protected $memberHandselRepository;
  34. protected $memberPointRepository;
  35. protected $companyRepository;
  36. public function __construct(
  37. MemberInfoService $memberInfoService,
  38. MemberService $memberService,
  39. RegisterService $registerService,
  40. MemberInfoRepository $memberInfoRepository,
  41. JobfairPersonSignedRepository $jobfairPersonSignedRepository,
  42. JobfairRepository $jobfairRepository,
  43. JobfairCompanyRepository $jobfairCompanyRepository,
  44. TaskRepository $taskRepository,
  45. MemberHandselRepository $memberHandselRepository,
  46. MemberPointRepository $memberPointRepository,
  47. CompanyRepository $companyRepository
  48. )
  49. {
  50. $this->memberInfoService = $memberInfoService;
  51. $this->memberService = $memberService;
  52. $this->registerService = $registerService;
  53. $this->memberInfoRepository = $memberInfoRepository;
  54. $this->jobfairPersonSignedRepository = $jobfairPersonSignedRepository;
  55. $this->jobfairRepository = $jobfairRepository;
  56. $this->jobfairCompanyRepository = $jobfairCompanyRepository;
  57. $this->taskRepository = $taskRepository;
  58. $this->memberHandselRepository = $memberHandselRepository;
  59. $this->memberPointRepository = $memberPointRepository;
  60. $this->companyRepository = $companyRepository;
  61. }
  62. public function idcard(Request $request)
  63. {
  64. $error = $this->idcardValidator($request);
  65. if($error){
  66. $data = [
  67. 'code'=>0,
  68. 'message'=> $error,
  69. ];
  70. return response()->json($data);
  71. }
  72. $idcard = $request->idcard;
  73. $info = [];
  74. $where = [
  75. ['holddate_start', '<', strtotime("+60 minute")],
  76. ['holddate_end', '>', strtotime("-60 minute")],
  77. ['display', '=', 1],
  78. ['subsite_id', '=', get_subsite_id()],
  79. ];
  80. $jobfair = $this->jobfairRepository->getOneOpenJobfair($where);
  81. if($jobfair) {
  82. $info['jobfairid'] = $jobfair->id;
  83. }else {
  84. $data = [
  85. 'code'=>0,
  86. 'message'=> '暂无举办中的招聘会',
  87. ];
  88. return response()->json($data);
  89. }
  90. $type = $request->input('type','in');
  91. $info['type'] = $type == 'in' ? 1 : 2;
  92. $info['name'] = $request->input('name','');
  93. $info['en_name'] = $request->input('en_name','');
  94. $info['nation'] = $request->input('nation','');
  95. $info['address'] = $request->input('address','');
  96. $info['effect_start_time'] = $request->input('effect_start_time','');
  97. $info['effect_end_time'] = $request->input('effect_end_time','');
  98. if(!$info['effect_start_time']){
  99. unset( $info['effect_start_time']);
  100. }
  101. if(!$info['effect_end_time']){
  102. unset( $info['effect_end_time']);
  103. }
  104. $info['government'] = $request->input('government','');
  105. $info['idcard'] = $idcard;
  106. $member_info = $this->memberInfoService->getInfo(['id_card' => $idcard]);
  107. if($member_info){
  108. $info['uid'] = $member_info->uid;
  109. $info['utype'] = $member_info->members->utype;
  110. //判断该身份之前是否有进入场,有则修改uid
  111. $updateDate = ['uid'=> $info['uid']];
  112. $this->jobfairPersonSignedRepository->updateDate(['idcard'=>$info['idcard']],$updateDate);
  113. }
  114. $info1 = $this->subIdcard($idcard);
  115. $info = array_merge($info,$info1);
  116. $info['sign_type'] = 1;
  117. $this->jobfairPersonSignedRepository->createInfo($info);
  118. $data = [
  119. 'code'=>1,
  120. 'message'=>[
  121. 'type'=>1,
  122. 'name'=>$info['name'],
  123. 'id'=>$idcard,
  124. ],
  125. ];
  126. return response()->json($data);
  127. }
  128. public function qrcode(Request $request)
  129. {
  130. $error = $this->qrcodeValidator($request);
  131. if($error){
  132. $data = [
  133. 'code'=>0,
  134. 'message'=> $error,
  135. ];
  136. return response()->json($data);
  137. }
  138. $where = [
  139. ['holddate_start', '<', strtotime("+60 minute")],
  140. ['holddate_end', '>', strtotime("-60 minute")],
  141. ['display', '=', 1],
  142. ['subsite_id', '=', get_subsite_id()],
  143. ];
  144. $jobfair = $this->jobfairRepository->getOneOpenJobfair($where);
  145. if($jobfair) {
  146. $info['jobfairid'] = $jobfair->id;
  147. }else {
  148. $data = [
  149. 'code'=>0,
  150. 'message'=> '暂无举办中的招聘会',
  151. ];
  152. return response()->json($data);
  153. }
  154. $type = $request->input('type','in');
  155. $info['type'] = $type == 'in' ? 1 : 2;
  156. $qrcode = $request->qrcode;
  157. $hash_id = substr($qrcode,strrpos($qrcode,'/')+1);
  158. $res = hashid_decode($hash_id);
  159. if(!$res){
  160. $data = [
  161. 'code'=>0,
  162. 'message'=> '二维码错误',
  163. ];
  164. return response()->json($data);
  165. }
  166. $info['uid'] = $res['id'];
  167. $info['utype'] = $res['utype'];
  168. if($res['utype'] == 1) {
  169. $company = $this->companyRepository->getCompanyInfo(['id'=>$res['id']]);
  170. $info['name'] = $company->companyname;
  171. $list = $this->jobfairCompanyRepository->findWhere(['jobfair_id'=>$info['jobfairid'],'company_id'=>$res['id']]);
  172. if($info['type'] ==1&&$list->isNotEmpty()){
  173. foreach ($list as $value) {
  174. $time = date('H:i:s',$jobfair->holddate_start);
  175. $date = date('Y-m-d',time());
  176. $timestamp = strtotime($date.' '.$time);
  177. if($timestamp >= strtotime("-30 minute")){
  178. $info['status'] = 0;
  179. $this->jobfairCompanyRepository->update(['type'=>4,'signed_time'=>time()],$value->id);
  180. }elseif($timestamp < strtotime("-30 minute")){
  181. $info['status'] = 1;
  182. if($value->type != 4) {
  183. $this->jobfairCompanyRepository->update(['type'=>1,'signed_time'=>time()],$value->id);
  184. }
  185. $this->jobfairCompanyRepository->update($date,$value->id);
  186. }
  187. }
  188. }
  189. $info['address'] = $company->address;
  190. $message = [
  191. 'type'=>'2',
  192. 'name'=>$company->companyname,
  193. 'id'=>$company->organization_code,
  194. ];
  195. Cache::put($hash_id, time(),120);
  196. }else {
  197. $memberInfo = $this->memberInfoService->getInfo(['uid' => $info['uid']]);
  198. if($memberInfo){
  199. $info['name'] = $memberInfo->realname;
  200. $info['idcard'] = $memberInfo->id_card;
  201. $info['sex'] = $memberInfo->sex;
  202. $info['address'] = $memberInfo->householdaddress_cn;
  203. $info1 = $this->subIdcard($info['idcard'] );
  204. $info = array_merge($info,$info1);
  205. $message= [
  206. 'type'=>'1',
  207. 'name'=>$memberInfo->realname,
  208. 'id'=>$memberInfo->id_card,
  209. ];
  210. //判断该身份之前是否有进入场,有则修改uid
  211. $updateDate = ['uid'=> $info['uid']];
  212. $this->jobfairPersonSignedRepository->updateDate(['idcard'=>$info['idcard']],$updateDate);
  213. Cache::put($hash_id, time(),120);
  214. }else{
  215. $data = [
  216. 'code'=>0,
  217. 'message'=> '请先完善个人信息',
  218. ];
  219. return response()->json($data);
  220. }
  221. }
  222. $info['sign_type'] = 2;
  223. $this->jobfairPersonSignedRepository->createInfo($info);
  224. $data = [
  225. 'code'=>1,
  226. 'message'=> $message,
  227. ];
  228. return response()->json($data);
  229. }
  230. public function idcardValidator($request)
  231. {
  232. $error = '';
  233. // if(!$request->type){
  234. // $error = 'type不能为空';
  235. // return $error;
  236. // }
  237. // if(!in_array($request->type,['in','out'])){
  238. // $error = 'type值错误';
  239. // return $error;
  240. // }
  241. if(!$request->idcard){
  242. $error = '身份证不能为空';
  243. return $error;
  244. }
  245. if(!isCreditNo($request->idcard)){
  246. $error = '身份证格式不正确';
  247. return $error;
  248. }
  249. }
  250. public function qrcodeValidator($request)
  251. {
  252. $error = '';
  253. // if(!$request->type){
  254. // $error = 'type不能为空';
  255. // return $error;
  256. // }
  257. // if(!in_array($request->type,['in','out'])){
  258. // $error = 'type值错误';
  259. // return $error;
  260. // }
  261. if(!$request->qrcode){
  262. $error = 'qrcode不能为空';
  263. return $error;
  264. }
  265. }
  266. //根据身份证截取信息
  267. protected function subIdcard($idcard)
  268. {
  269. $data = [];
  270. $sexInt = (int)substr($idcard, 16, 1);
  271. $data['sex'] = $sexInt % 2 == 0 ? '2' : '1';
  272. $data['birthday'] = substr($idcard,6,4);
  273. return $data;
  274. }
  275. /**
  276. * Unicode字符转换成utf8字符
  277. * @param [type] $unicode_str Unicode字符
  278. * @return [type] Utf-8字符
  279. */
  280. protected function unicode_to_utf8($unicode_str) {
  281. $utf8_str = '';
  282. $code = intval(hexdec($unicode_str));
  283. //这里注意转换出来的code一定得是整形,这样才会正确的按位操作
  284. $ord_1 = decbin(0xe0 | ($code >> 12));
  285. $ord_2 = decbin(0x80 | (($code >> 6) & 0x3f));
  286. $ord_3 = decbin(0x80 | ($code & 0x3f));
  287. $utf8_str = chr(bindec($ord_1)) . chr(bindec($ord_2)) . chr(bindec($ord_3));
  288. return $utf8_str;
  289. }
  290. public function findJobfair()
  291. {
  292. $where = [
  293. ['holddate_start', '<', strtotime("+60 minute")],
  294. ['holddate_end', '>', strtotime("-60 minute")],
  295. ['display', '=', 1],
  296. ['subsite_id', '=', get_subsite_id()],
  297. ];
  298. $jobfair = $this->jobfairRepository->getOneOpenJobfair($where);
  299. if($jobfair) {
  300. $data = [
  301. 'code'=>1,
  302. 'message'=> $jobfair,
  303. ];
  304. return response()->json($data);
  305. }else {
  306. $data = [
  307. 'code'=>0,
  308. 'message'=> '暂无举办中的招聘会',
  309. ];
  310. return response()->json($data);
  311. }
  312. }
  313. }