| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744 | <?phpnamespace 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;    }}
 |