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