123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744 |
- <?php
- namespace App\Http\Controllers\Mobile\Active;
- use Aix\Sms\Contracts\Smser;
- use App\Http\Controllers\Mobile\MobileBaseController;
- use App\Models\Resume;
- use App\Repositories\MemberRepository;
- use App\Services\Auth\AuthService;
- use App\Services\Auth\RegisterService;
- use App\Services\Common\CategoryService;
- use App\Services\Person\ResumeEducationService;
- use App\Services\Person\MemberInfoService;
- use App\Services\Person\ResumeService;
- use App\Validators\PersonValidatorRequest;
- use App\Validators\RegisterValidatorRequest;
- use Illuminate\Http\Request;
- use App\Services\Common\SmsService;
- use App\Services\Person\ResumeWorkService;
- use App\Services\Content\PolicyService;
- use Illuminate\Support\Facades\DB;
- use Illuminate\Support\Facades\Hash;
- use GuzzleHttp\Client;
- use Illuminate\Support\Facades\Cache;
- class RcgController extends MobileBaseController
- {
- protected $categoryService;
- private $smsService;
- private $registerService;
- private $authService;
- protected $memberRepository;
- protected $memberInfoService;
- protected $educationService;
- protected $resumeWorkService;
- protected $articleCategoryService;
- protected $httpClient;
- public function __construct(ResumeWorkService $resumeWorkService,ResumeEducationService $educationService,ResumeService $resumeService,AuthService $authService,CategoryService $categoryService,SmsService $smsService,RegisterService $registerService,MemberRepository $memberRepository,MemberInfoService $memberInfoService,PolicyService $articleCategoryService)
- {
- $this->categoryService = $categoryService;
- $this->smsService = $smsService;
- $this->registerService = $registerService;
- $this->authService = $authService;
- $this->memberRepository = $memberRepository;
- $this->memberInfoService = $memberInfoService;
- $this->resumeService = $resumeService;
- $this->educationService = $educationService;
- $this->resumeWorkService = $resumeWorkService;
- $this->articleCategoryService = $articleCategoryService;
- $this->httpClient=new Client([
- 'http_errors' => false
- ]);
- }
- /**
- * 人才港首页
- * @return array|\Illuminate\Contracts\View\Factory|\Illuminate\View\View
- */
- public function index()
- {
- return view('mobile.app.active.index');
- }
- public function addInfo()
- {
- $user = auth('web-member')->user();
- if(!$user){
- $is_login = 0;
- }else{
- $is_login = 1;
- }
- $district = $this->categoryService->getDefaultDistrict();
- return view('mobile.app.active.resume_add', [
- 'is_login'=>$is_login,
- 'user'=>$user,
- 'defaultCity'=>$district->defaultCity,
- 'disCity'=>$district->disCity,
- 'disHan'=>$district->disHan,
- 'wap_title'=>'信息登记'
- ]);
- }
- public function rcgCreate(PersonValidatorRequest $request)
- {
- //添加基础信息
- $resume_res = $this->resumeService->activeResumeCreate($request->except(['add_tag','_token']), auth('web-member')->user());
- if($resume_res['code'] == 1){
- $data = request()->all();
- $data['resume_id'] = $resume_res['info'];
- $data['id'] = $resume_res['info'];
- //添加教育信息
- $resume_edu = $this->educationService->activeResumeEducationAdd($data, auth('web-member')->user());
- //添加工作信息
- $resume_work = $this->resumeWorkService->activeResumeWorkAdd($data, auth('web-member')->user());
- //添加标签
- $resume_tag = $this->resumeService->tagSave($data);
- //添加自我描述
- $resume_specialty = $this->resumeService->updateSpecialty($data, auth('web-member')->user());
- if ($resume_res['code']==1) {
- $this->authService->logout();
- return $this->sendSuccessResponse(['id'=>$resume_res['info'],'tag'=>$request->add_tag]);
- } else {
- return $this->sendErrorResponse('更新简历失败', '', 400);
- }
- }else{
- return $this->sendErrorResponse($resume_res['info'], '', 400);
- }
- }
- public function upload()
- {
- $res = $this->memberInfoService->updateHead(request()->pic1, auth('web-member')->user());
- return response()->json($res);
- }
- public function quickReg(RegisterValidatorRequest $registerValidatorRequest)
- {
- if (!$this->smsService->checkAuthSms($registerValidatorRequest->mobile, Smser::TEMPLATE_AUTH_REGISTER, $registerValidatorRequest->mobile_vcode)) {
- return $this->sendErrorResponse("短信验证码不通过,请重新输入");
- }
- $data = $registerValidatorRequest->all();
- $member = $this->memberRepository->getMemberByAccount($data['mobile']);
- if(!$member){
- $member = $this->registerService->registerPerson($data);
- }else{
- $this->authService->login($member);
- }
- return $this->sendSuccessResponse(['msg'=>'注册/登录成功,请继续操作','reg_status'=>1]);
- }
- public function rcg()
- {
- return view('mobile.app.active.rcg');
- }
- public function serviceCode()
- {
- return view('mobile.app.active.service_code');
- }
- private function getPolicyCategory($pid){
- $list = DB::table('policy_category')->where(array('parent_id'=>$pid,'deleted_at'=>null))->orderBy('category_order','desc')->orderBy('id','asc')->select("*")->get()->toArray();
- if($list){
- foreach ($list as $k => $v){
- $subList = DB::table('policy_category')->where(array('parent_id'=>$v->id,'deleted_at'=>null))->orderBy('category_order','desc')->orderBy('id','asc')->select("*")->get()->toArray();
- if($subList){
- $list[$k]->children = $subList;
- $this->getPolicyCategory($v->id);
- }
- }
- }
- return $list;
- }
- public function chain(){
- $list = $this->getPolicyCategory(30);
- $res = [
- 'status' => 'ok',
- 'info' => '获取成功',
- 'data' => $list
- ];
- echo json_encode($res);
- }
- public function getChainList(Request $request){
- $id = $request->input('id');
- $keyword = $request->input('keyword');
- $page = $request->input('page');
- $where = [
- ['type_id', '=', intval($id)]
- ];
- if(!empty($keyword)){
- $map = ['title','like','%'.$keyword.'%'];
- array_push($where,$map);
- }
- $count = DB::table('policy')->where($where)->count();
- $list = DB::table('policy')->where($where)->offset(($page-1)*20)->limit($page*20)->select("*")->get()->toArray();
- $res['status'] = 'ok';
- $res['msg'] = '查询成功';
- $res['data'] = $list;
- $res['count'] = $count;
- echo json_encode($res);
- }
- public function getPolicyContent(Request $request){
- $id = $request->input('id');
- if(intval($id)){
- $info = DB::table('policy')->where(array('id'=>intval($id)))->select("*")->first();
- if($info){
- $res['status'] = 'ok';
- $res['msg'] = '查询成功';
- $res['data'] = [
- 'title' => $info->title,
- 'content' => $info->content,
- 'pid' => $info->type_id
- ];
- }else{
- $res['status'] = 'error';
- $res['msg'] = '找不到该文章';
- }
- }else{
- $res['status'] = 'error';
- $res['msg'] = '缺少参数';
- }
- echo json_encode($res);
- }
- public function putAppointment(Request $request)
- {
- $res['status'] = '';
- $res['msg'] = '';
- $data['card'] = $request->input('card');
- if(!$data['card']){
- $res['status'] = 'error';
- $res['msg'] = '身份证不能为空';
- echo json_encode($res);die;
- }
- if (strlen($data['card']) == 18 && !$this->isValid($data['card'])) {
- $res['status'] = 'error';
- $res['msg'] = '身份证格式不正确';
- echo json_encode($res);die;
- }
- $data['username'] = $request->input('username');
- if(!$data['username']){
- $res['status'] = 'error';
- $res['msg'] = '真实姓名不能为空';
- echo json_encode($res);die;
- }
- $data['phone'] = $request->input('phone');
- if(!$data['phone']){
- $res['status'] = 'error';
- $res['msg'] = '手机号码不能为空';
- echo json_encode($res);die;
- }
- $data['service'] = $request->input('picker');
- if(!$data['service']){
- $res['status'] = 'error';
- $res['msg'] = '服务事项不能为空';
- echo json_encode($res);die;
- }
- $data['value'] = $request->input('value');
- if(!$data['value']){
- $res['status'] = 'error';
- $res['msg'] = '服务事项不能为空';
- echo json_encode($res);die;
- }
- $info = DB::table('talent')->where('card',$data['card'])->first();
- if(!$info){
- $ch = curl_init ();
- curl_setopt( $ch, CURLOPT_URL, "http://rc.jucai.gov.cn/api/dataInterface/findTalentArrangeByIdCard?idCard={$data['card']}" );
- curl_setopt( $ch, CURLOPT_HTTPHEADER, array(
- 'Content-Type: application/json; charset=utf-8' //json版本需要填写 Content-Type: application/json;
- )
- );
- curl_setopt($ch, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V4); //若果报错 name lookup timed out 报错时添加这一行代码
- curl_setopt( $ch, CURLOPT_RETURNTRANSFER, 1 );
- curl_setopt( $ch, CURLOPT_TIMEOUT,60);
- curl_setopt( $ch, CURLOPT_SSL_VERIFYHOST, 0);
- curl_setopt( $ch, CURLOPT_SSL_VERIFYPEER, 0);
- $result = curl_exec ( $ch );
- curl_close ( $ch );
- $ret = json_decode($result,true);
- if($ret['state'] == 1){
- $data['is_talent'] = 1;
- $data['status'] = 1;
- }else{
- $data['is_talent'] = 0;
- }
- }else{
- $data['is_talent'] = 1;
- $data['status'] = 1;
- }
- //增加全民健身季礼包领取
- if($data['value'] == 44){
- $libao = DB::table('lt_apppointment')->where('card',$data['card'])->where('value',44)->first();
- if($libao){
- $res['status'] = 'error';
- $res['msg'] = '您已领取过礼包,谢谢您的关注';
- echo json_encode($res);die;
- }
- }
- $data['createtime'] = date("Y-m-d H:i:s",time());
- $data['number'] = $this->findAvailableNo();
- $data['content'] = $request->input('content');
- DB::table('lt_apppointment')->insert($data);
- if($data['is_talent']){
- if(empty($data['content'])){
- $content = '无';
- }else{
- $content = $data['content'];
- }
- switch ($data['value']){
- case 1:
- $phone = '13808510338';
- break;
- case 2:
- $phone = '13960958777';
- break;
- case 3:
- $phone = '15280619456';
- break;
- case 4:
- $phone = '15375751022';
- break;
- case 5:
- $phone = '15905901858';
- break;
- case 6:
- $phone = '15985930919';//行政审批
- break;
- case 7:
- $phone = '15159851117';
- break;
- case 8:
- $phone = '';
- break;
- case 9:
- $phone = '13850726589';
- break;
- case 10:
- $phone = '13655931116';
- break;
- case 11:
- $phone = '13805919791';
- break;
- case 12:
- $phone = '13305057271';
- break;
- case 13:
- $phone = '13599248586';
- break;
- case 14:
- $phone = '15859592524';
- break;
- case 15:
- $phone = '13459587022';
- break;
- case 16:
- $phone = '13799592878';
- break;
- case 17:
- $phone = '15159778791';
- break;
- case 18:
- $phone = '15905900577';
- break;
- case 19:
- $phone = '17850958856';
- break;
- case 20:
- //$phone = '13788807070';//丁琦娜 13788807070
- $phone = [
- '13788807070',
- '13313837788',
- ];
- break;
- case 21:
- $phone = '13505986964';
- break;
- case 22:
- $phone = '15060600938';
- break;
- case 23:
- $phone = '13305073366';
- break;
- case 24:
- $phone = '15880738158';
- break;
- case 25:
- $phone = '13860706099';
- break;
- case 26:
- $phone = '17379989114';
- break;
- case 27:
- $phone = [
- '13788807070',
- '13599716573'
- ];
- break;
- case 28:
- $phone = [
- '13788807070',
- '13505023260'
- ];
- break;
- case 29:
- $phone = '18850541454';
- break;
- case 30:
- $phone = '18900399886';
- break;
- case 31:
- $phone = '13489858833';
- break;
- case 32:
- $phone = '13960457968';
- break;
- case 33:
- $phone = '18759973633';
- break;
- case 34:
- $phone = '15396576970';
- break;
- case 35:
- $phone = '15959501620';
- break;
- case 36:
- $phone = '13799858905';
- break;
- case 37:
- $phone = '13559621092';
- break;
- case 38:
- $phone = '13799592878';
- break;
- case 39:
- $phone = '13600737303';
- break;
- case 40:
- $phone = '15060910357';//姜自元
- break;
- case 41:
- $phone = '13489719977';
- break;
- case 42:
- $phone = '17750597113';
- break;
- case 43:
- $phone = '15959953335';
- break;
- case 44:
- $phone = '';
- break;
- default:
- $phone = '18060002035';
- break;
- }
- if(is_array($phone)){
- foreach ($phone as $v){
- $this->smsService->sendSms($v,'sms_custom',array('username'=>$data['username'],'phone'=>$data['phone'],'content'=>$content));
- }
- }else{
- if(!empty($phone)){
- $this->smsService->sendSms($phone,'sms_custom',array('username'=>$data['username'],'phone'=>$data['phone'],'content'=>$content));
- }
- }
- $res['status'] = 'ok';
- $res['msg'] = '预约登记成功';
- $this->smsService->sendSms($data['phone'],'sms_order_number',array('number'=>$data['number'],'service'=>$data['service']));
- }else{
- $res['status'] = 'ok';
- $res['msg'] = '服务咨询登记成功';
- }
- echo json_encode($res);die;
- }
- public function getAppointment(Request $request){
- $page = $request->input('page');
- $name = $request->input('name');
- $type = $request->input('type',99);
- $status = $request->input('status',99);
- $number = $request->input('number');
- $where = [];
- if(!empty($name)){
- $where[] = ['username','like',"%{$name}%"];
- }
- if(!empty($number)){
- $where[] = ['number','like',"%{$number}%"];
- }
- if($type != 99 ){
- $where[] = ['is_talent','=',$type];
- }
- if($status != 99){
- $where[] = ['status','=',$status];
- }else{
- $where[] = ['status','<','2'];
- }
- $count = DB::table('lt_apppointment')->where($where)->count();
- $list = DB::table('lt_apppointment')->where($where)->orderBy('id','desc')->orderBy('createtime','desc')->offset(($page-1)*20)->limit($page*20)->select("number","username",'phone','service','content','is_talent','status','evaluate')->get()->toArray();
- $res['status'] = 'ok';
- $res['msg'] = '查询成功';
- $res['list'] = $list;
- $res['total'] = $count;
- echo json_encode($res);die;
- }
- public function putEvaluate(Request $request){
- $number = $request->input('number');
- $message = $request->input('message');
- if(!$number || $number == '' || strlen($number) != 14){
- $res['status'] = 'error';
- $res['msg'] = '预约号不正确SR10-1';
- echo json_encode($res);die;
- }
- $info = DB::table('lt_apppointment')->where('number',$number)->first();
- if(!$info){
- $res['status'] = 'error';
- $res['msg'] = '预约号不存在SR10-2';
- echo json_encode($res);die;
- }
- if($info->evaluate){
- $res['status'] = 'error';
- $res['msg'] = '此服务预约已评价HA10-1';
- echo json_encode($res);die;
- }
- if(!$message || $message == ''){
- $res['status'] = 'error';
- $res['msg'] = '评价内容不能为空';
- echo json_encode($res);die;
- }
- DB::table('lt_apppointment')->where('number',$number)->update(['evaluate'=>$message]);
- $res['status'] = 'ok';
- $res['msg'] = '评价成功';
- echo json_encode($res);die;
- }
- public function putEvaluateMobile(Request $request)
- {
- $mobile = $request->input('mobile');
- $msg = $request->input('msg');
- if($mobile != '' && $msg != ''){
- $info = DB::table('lt_apppointment')->where('phone',$mobile)->orderBy('id','desc')->first();
- if($info){
- switch ($msg){
- case '1':
- $evaluate = "非常满意";
- break;
- case '2':
- $evaluate = "基本满意";
- break;
- case '3':
- $evaluate = "不满意";
- break;
- default:
- $evaluate = '短信回复有误,需要回访';
- break;
- }
- DB::table('lt_apppointment')->where('id',$info->id)->update(['evaluate'=>$evaluate]);
- }
- }
- echo json_encode(['clcode'=>'000000']);
- }
- public function sendSms(){
- // $list = DB::table('lt_apppointment')->where('value',44)->where('is_talent',1)->get();
- // foreach ($list as $k => $v){
- // $this->smsService->sendSms($v->phone,'sms_order_number',array('number'=>$v->number,'service'=>$v->service));
- // }
- }
- protected function findAvailableNo()
- {
- $prefix = date('Ymd');
- // 随机生成 6 位的数字,并创建订单号
- $no = $prefix.random_int(10000, 99999).substr(microtime(true),-2);
- // 判断是否已经存在
- if (!DB::table('lt_apppointment')->where('number', $no)->exists()) {
- return $no;
- }else{
- $this->findAvailableNo();
- }
- }
- public function checkCard(Request $request){
- $card = $request->input('card');
- if(strlen($card) == 18 && !$this->isValid($card)){
- $res['status'] = 'error';
- $res['msg'] = '身份证格式不正确';
- exit(json_encode($res));
- }
- $info = DB::table('talent')->where('card',$card)->first();
- if(!$info){
- $ch = curl_init ();
- curl_setopt( $ch, CURLOPT_URL, "http://rc.jucai.gov.cn/api/dataInterface/findTalentArrangeByIdCard?idCard={$card}" );
- curl_setopt( $ch, CURLOPT_HTTPHEADER, array(
- 'Content-Type: application/json; charset=utf-8' //json版本需要填写 Content-Type: application/json;
- )
- );
- curl_setopt($ch, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V4); //若果报错 name lookup timed out 报错时添加这一行代码
- curl_setopt( $ch, CURLOPT_RETURNTRANSFER, 1 );
- curl_setopt( $ch, CURLOPT_TIMEOUT,60);
- curl_setopt( $ch, CURLOPT_SSL_VERIFYHOST, 0);
- curl_setopt( $ch, CURLOPT_SSL_VERIFYPEER, 0);
- $result = curl_exec ( $ch );
- curl_close ( $ch );
- $ret = json_decode($result,true);
- $res['status'] = 'ok';
- $res['msg'] = '获取成功';
- $res['data'] = $ret;
- }else{
- $res['status'] = 'ok';
- $res['msg'] = '获取成功';
- $res['data'] = [
- 'msg' => '已认定人才',
- 'state' => 1,
- 'level' => $info->level
- ];
- }
- echo json_encode($res);
- }
- /**
- * 校验身份证号是否合法
- * @param string $num 待校验的身份证号
- * @return bool
- */
- protected function isValid(string $num)
- {
- //老身份证长度15位,新身份证长度18位
- $length = strlen($num);
- if ($length == 15) { //如果是15位身份证
- //15位身份证没有字母
- if (!is_numeric($num)) {
- return false;
- }
- // 省市县(6位)
- $areaNum = substr($num, 0, 6);
- // 出生年月(6位)
- $dateNum = substr($num, 6, 6);
- } else if ($length == 18) { //如果是18位身份证
- //基本格式校验
- if (!preg_match('/^\d{17}[0-9xX]$/', $num)) {
- return false;
- }
- // 省市县(6位)
- $areaNum = substr($num, 0, 6);
- // 出生年月日(8位)
- $dateNum = substr($num, 6, 8);
- } else { //假身份证
- return false;
- }
- //验证地区
- if (!$this->isAreaCodeValid($areaNum)) {
- return false;
- }
- //验证日期
- if (!$this->isDateValid($dateNum)) {
- return false;
- }
- //验证最后一位
- if (!$this->isVerifyCodeValid($num)) {
- return false;
- }
- return true;
- }
- /**
- * 省市自治区校验
- * @param string $area 省、直辖市代码
- * @return bool
- */
- private function isAreaCodeValid(string $area) {
- $provinceCode = substr($area, 0, 2);
- // 根据GB/T2260—999,省市代码11到65
- if (11 <= $provinceCode && $provinceCode <= 65) {
- return true;
- } else {
- return false;
- }
- }
- /**
- * 验证出生日期合法性
- * @param string $date 日期
- * @return bool
- */
- private function isDateValid(string $date) {
- if (strlen($date) == 6) { //15位身份证号没有年份,这里拼上年份
- $date = '19'.$date;
- }
- $year = intval(substr($date, 0, 4));
- $month = intval(substr($date, 4, 2));
- $day = intval(substr($date, 6, 2));
- //日期格式正确,但是逻辑存在问题(如:年份大于当前年)
- $currYear = date('Y');
- if ($year > $currYear) {
- return false;
- }
- return true;
- }
- /**
- * 验证18位身份证最后一位
- * @param string $num 待校验的身份证号
- * @return bool
- */
- private static function isVerifyCodeValid(string $num)
- {
- if (strlen($num) == 18) {
- $factor = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2];
- $tokens = ['1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2'];
- $checkSum = 0;
- for ($i = 0; $i < 17; $i++) {
- $checkSum += intval($num{$i}) * $factor[$i];
- }
- $mod = $checkSum % 11;
- $token = $tokens[$mod];
- $lastChar = strtoupper($num{17});
- if ($lastChar != $token) {
- return false;
- }
- }
- return true;
- }
- }
|