'fail','code'=>'1001','msg'=>'您已登陆,请勿重复登录')); }*/ } /** * 医生登录 * * @ApiTitle (医生登录) * @ApiSummary (医生登录) * @ApiSector (医生接口) * @ApiMethod (POST) * @ApiRoute (/inter/login/index) * @ApiHeaders (name="sign", type="string", required=true, description="请求头-校验key") * @ApiHeaders (name="nonce", type="string", required=true, description="请求头-随机数") * @ApiHeaders (name="timestamp", type=string, required=true, description="请求头-时间戳s") * @ApiParams (name="param", type="string", required=true, description="参数json字符串") * @ApiParams (name="param[userName]", type="string", sample="", description="用户账号<必填>") * @ApiParams (name="param[pwd]", type="string", sample="", description="用户密码<必填>") * @ApiParams (name="param[capture]", type="string", sample="", description="验证码<选填>") * @ApiReturnParams (name="status", type="integer", required=true, sample="0", description="返回码 fail 失败 ok成功")) * @ApiReturnParams (name="code", type="integer", required=true, sample="0", description="返回状态码") * @ApiReturnParams (name="info", type="string", required=true, sample="返回成功", description="返回信息") * @ApiReturnParams (name="sessionid", type="object", sample="{}", description="缓存的数据key") * @ApiReturn (data=" { 'status': ok, 'code': '0000', 'sessionid': 'a17z7a7a8f9g9rh9d89jio', 'info' : '' } *") **/ //登录功能 public function index(){ try{ $param = $_REQUEST['param']; Verify::loginCheck($param); $sessionid = UUIDs::uuid16(); log::record($sessionid); log::record($_REQUEST); if(!empty($param["captcha"])){ //1. 获取到用户提交的验证码 $captcha = $param["captcha"]; //2. 将session中的验证码和用户提交的验证码进行核对,当成功时提示验证码正确,并销毁之前的session值,不成功则重新提交 if(strtolower($_SESSION["captcha"]) == strtolower($captcha)){ $_SESSION["captcha"] = ""; }else{ return json_encode(['status'=>'fail','code'=>'1002','msg'=>'验证码输入错误']); } } if(empty($param['userName'])){ return json_encode(['status'=>'fail','code'=>'1100','msg'=>'用户名不能为空']); } if(empty($param['pwd'])){ return json_encode(['status'=>'fail','code'=>'1101','msg'=>'密码不能为空']); } $pwd_preg = $this->pregPassword($param['pwd']); //医生信息 $info = DB::table('doctors')->where('username',$param['userName'])->field('is_send_message,is_admin,message_push,id,exam_class,attachment,username,password,login_time,login_failure,realname,email,phone,doctor_title,institution_id,department_id,doctor_role,is_report,fail_time')->find(); log::record($info); if(!$info){ return json_encode(['status'=>'fail','code'=>'1004','msg'=>'用户名'.$param['userName'].'或密码错误']); } if($info['login_failure'] >5) { $fail = strtotime($info['fail_time']); $diff = time()-$fail; if($diff < 300) { return json_encode(['status'=>'fail','code'=>'1009','msg'=>'系统繁忙,请'.(300-$diff).'秒后再试']); }else{ DB::table('doctors')->where('username',$param['userName'])->update(['login_failure'=>0]); } } if(md5($param['pwd']) != $info['password']) { //登录失败 $time = date('Y-m-d', time()); $datetime = strtotime($time); //上次登录时间-今日0点时间 $t = $info['login_time'] - $datetime; if( $t < 0){ //时间小于0 代表今日未进行登录 登录失败次数归0 DB::table('doctors')->where('username',$param['userName'])->update(['login_failure'=>0]); } DB::table('doctors')->where('username',$param['userName'])->setInc('login_failure'); DB::table('doctors')->where('username',$param['userName'])->update(['fail_time'=>date('Y-m-d H:i:s')]); return json_encode(['status'=>'fail','code'=>'1004','msg'=>'用户名'.$param['userName'].'或者密码错误','info'=>$info['login_failure']]); } $check = ''; if($info['is_send_message'] == "1") { $check = $this->check_phone($info['phone']); if(!$check){ return json_encode(['status'=>'fail','code'=>'0912','msg'=>'手机号为空或手机号格式错误']); } $phone = $info['phone']; $code = rand('1000','9999'); $handle_id = $phone.rand('10000000','99999999'); Cache::set('sendcode_'.$phone,$code,600); Cache::set('sendcode_preg',$pwd_preg,600); Cache::set('sendcode_handle_id'.$handle_id, $phone, 600); $info = CMCC::sms($phone,$code); // $info = send_message::sendSms2UpDate($phone,$code); log::record("login() set code => {handle_id: $handle_id \t code: $code \t phone: $phone \t}"); return json_encode(['status'=>'ok','code'=>'0000','need_code'=> true, 'phone' => $check, 'handle_id' => $handle_id]); } //医生类 $class_info = DB::table('doctor_class')->where('doctor_id',$info['id'])->cache(300)->find(); $institution = DB::table('institution')->where('id',$info['institution_id'])->cache(300)->field('name')->find(); $info['institution_name'] = $institution['name']; $info['doctor_class_info'] = $class_info; //医生权限菜单 $sql = "SELECT m.id,m.name,m.url,m.parent_id,m.icon_name from menu as m,dr_cla_permission as d where d.type=1 and d.doctor_id='".$info['id']."' and d.pass=m.id order by m.ordernum "; $permission = DB::query($sql); $info['permission'] = $permission; //登录成功则失败次数清0 DB::table('doctors')->where('username',$param['userName'])->update(['login_failure'=>0,'login_time'=>date('Y-m-d H:i:s')]); Cache::set($sessionid,$info,43200); log::record('----登录信息----'); log::record(Cache::get($sessionid)); log::record('----登录信息----'); unset($info['password']); $info['phone'] = $check; return json_encode(['status'=>'ok','code'=>'0000','info'=>$info,'sessionid'=>$sessionid,'phone'=>$check,'pregPwd'=>$pwd_preg]); }catch(\Exception $e){ return json_encode(['status'=>'fail','code'=>'2000','msg'=>$e->getMessage()]); } } public function loginByLicense(){ try{ $param = $_REQUEST['param']; $license = $param['license'] ?? false; if(!$license || $license != '116c7413be204bf3') { //依据授权码 73090026 return json_encode(['status'=>'fail','code'=>'2001','msg'=>'授权码校验失败']); } $sessionid = '116c73e78496739b'; log::record($sessionid); log::record($_REQUEST); //医生信息 $info = DB::table('doctors')->where('username', '73090026')->field('is_send_message,is_admin,message_push,id,exam_class,attachment,username,password,login_time,login_failure,realname,email,phone,doctor_title,institution_id,department_id,doctor_role,is_report')->find(); log::record($info); if(!$info){ return json_encode(['status'=>'fail','code'=>'1004','msg'=>'用户名信息不存在']); } //医生类 $class_info = DB::table('doctor_class')->where('doctor_id',$info['id'])->cache(300)->find(); $institution = DB::table('institution')->where('id',$info['institution_id'])->cache(300)->field('name')->find(); $info['institution_name'] = $institution['name']; $info['doctor_class_info'] = $class_info; //医生权限菜单 $sql = "SELECT m.id,m.name,m.url,m.parent_id,m.icon_name from menu as m,dr_cla_permission as d where d.type=1 and d.doctor_id='".$info['id']."' and d.pass=m.id order by m.ordernum "; $permission = DB::query($sql); $info['permission'] = $permission; Cache::set($sessionid, $info,900); log::record('----登录信息----'); log::record(Cache::get($sessionid)); log::record('----登录信息----'); unset($info['password']); return json_encode(['status'=>'ok','code'=>'0000','info'=>$info,'sessionid'=>$sessionid]); }catch(\Exception $e){ return json_encode(['status'=>'fail','code'=>'2000','msg'=>$e->getMessage()]); } } //手机号检验 public function check_phone($mobile) { if(empty($mobile)){ return false; } if(strlen($mobile) != 11){ return false; } $preg = preg_match('/^1[34578]\d{9}$/', $mobile); if(!$preg){ return false; } $start = substr($mobile,0,3); $end = substr($mobile,7,4); $phone = $start.'****'.$end; return $phone; } //再次发送短信 public function send_message_again() { try{ $param = $_REQUEST['param']; // 获取 handle_id if(!isset($param['handle_id']) || empty($param['handle_id'])) { return json_encode(['status'=>'fail','code'=>'2001','msg'=>'系统错误 not find handle id']); } $handle_id = $param['handle_id']; // 获取 phone if(!Cache::has('sendcode_handle_id'.$handle_id)) { return json_encode(['status'=>'fail','code'=>'2002','msg'=>'操作过时,请重新登录']); } // 发送验证码并记录 $phone = Cache::get('sendcode_handle_id'.$handle_id); Cache::rm('sendcode_handle_id'.$handle_id); $code = rand('1000','9999'); $info = send_message::sendSms2UpDate($phone,$code); $handle_id = $phone.rand('10000000','99999999'); log::record('目前的手机号是'.$phone.'存储的缓存为sendcode_handle_id'.$handle_id); log::record('目前的验证码是'.$code.'存储的手机号为sendcode_'.$phone); Cache::set('sendcode_'.$phone, $code, 600); Cache::set('sendcode_handle_id'.$handle_id, $phone, 600); log::record("send_message_again() set code => {handle_id: $handle_id \t code: $code \t phone: $phone \t}"); return json_encode(['status'=>'ok','code'=>'0000','info'=>$info,'handle_id'=>$handle_id]); }catch(\Exception $e){ return json_encode(['status'=>'fail','code'=>'2000','msg'=>$e->getMessage()]); } } public function check_code() { try{ log::record($_REQUEST); $param = $_REQUEST['param']; if(!isset($param['handle_id']) || !isset($param['code'])) { return json_encode(['status'=>'fail','code'=>'2003','msg'=>'系统错误 not find handle id or code']); } $handle_id = $param['handle_id']; $code = $param['code']; if(empty($handle_id) || empty($code)) { return json_encode(['status'=>'fail','code'=>'2004','msg'=>'handle id or code is null or empty']); } // 获取 phone if(!Cache::has('sendcode_handle_id'.$handle_id)) { return json_encode(['status'=>'fail','code'=>'2002','msg'=>'操作过时,请重新登录']); } $phone = Cache::get('sendcode_handle_id'.$handle_id); if(!Cache::has('sendcode_'.$phone)) { return json_encode(['status'=>'fail','code'=>'2002','msg'=>'操作过时,请重新登录']); } $check_code = Cache::get('sendcode_'.$phone); if(!empty($check_code) && $code != $check_code) { log::record('当前的手机号是'.$phone.'存储的为sendcode_handle_id'.$handle_id); log::record('当前的验证码是'.$code); log::record('缓存的验证码是'.$check_code.'存储的为sendcode_'.$phone); return json_encode(['status'=>'fail','code'=>'0090','msg'=>' 错误的验证码']); } log::record("check_code() params => {handle_id: $handle_id \t code: $code \t phone: $phone \t check_code: $check_code }"); $sessionid = UUIDs::uuid16(); log::record($sessionid); //医生信息 $info = DB::table('doctors')->where('phone',$phone)->field('is_send_message,is_admin,message_push,id,exam_class,attachment,username,password,login_time,login_failure,realname,email,phone,doctor_title,institution_id,department_id,doctor_role,is_report')->find(); log::record($info); if(!$info){ return json_encode(['status'=>'fail','code'=>'1004','msg'=>'用户不存在']); } //医生类 $class_info = DB::table('doctor_class')->where('doctor_id',$info['id'])->cache(300)->find(); $institution = DB::table('institution')->where('id',$info['institution_id'])->cache(300)->field('name')->find(); $info['institution_name'] = $institution['name']; $info['doctor_class_info'] = $class_info; //医生权限菜单 $sql = "SELECT m.id,m.name,m.url,m.parent_id,m.icon_name from menu as m,dr_cla_permission as d where d.type=1 and d.doctor_id='".$info['id']."' and d.pass=m.id order by m.ordernum "; $permission = DB::query($sql); $info['permission'] = $permission; //登录成功则失败次数清0 DB::table('doctors')->where('phone',$phone)->update(['login_failure'=>0,'login_time'=>date('Y-m-d H:i:s')]); Cache::set($sessionid,$info,43200); $pwd_preg = Cache::get('sendcode_preg'); log::record('----登录信息----'); log::record(Cache::get($sessionid)); log::record('----登录信息----'); unset($info['password']); return json_encode(['status'=>'ok','code'=>'0000','info'=>$info,'sessionid'=>$sessionid,'pregPwd'=>$pwd_preg]); }catch(\Exception $e){ return json_encode(['status'=>'fail','code'=>'2000','msg'=>$e->getMessage()]); } } //发送短信 public function send_message() { try{ $sessionid = $_REQUEST['sessionid']; $doctor = Cache::get($sessionid); $phone = $doctor['phone']; $code = rand('1000','9999'); Cache::set($phone,$code,600); $info = send_message::sendSms2UpDate($phone,$code); return json_encode(['status'=>'ok','code'=>'0000','info'=>$info,'sessionid'=>$sessionid]); }catch(\Exception $e){ return json_encode(['status'=>'fail','code'=>'2000','msg'=>$e->getMessage()]); } } //注册功能 public function register(){ $param = $_REQUEST['param']; $info = DB::table('doctors')->where('username',$param['userName'])->find(); if($info){ return json_encode(['status'=>'fail','code'=>'1006']); } $dat = array(); $dat['password'] = md5($param['pwd']); $dat['username'] = $param['userName']; $id = DB::table('doctors')->insertGetId($dat); $doctor_class = array(); $doctor_class['doctor_class'] = $param['doctor_class']; $doctor_class['doctor_id'] = $id; $doctor_class['department_id'] = $param['second_department_id']; //医生类别表 DB::table('doctor_class')->insert($doctor_class); if($id){ return json_encode(['status'=>'ok','code'=>'0000']); }else{ return json_encode(['status'=>'fail','code'=>'1005','msg'=>'注册失败']); } } //退出登录 清空session值 public function signOut(){ // Cache::rm('doctor'); Cache::clear(); return json_encode(['status'=>'ok','code'=>'0000']); } public function change(){ $id = $_REQUEST['id']; $a = DB::table('exams')->where('id',$id)->update(['exam_status'=>'3']); if($a){ echo '已更改'; }else{ echo '更改失败'; } } }