Login.php 7.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146
  1. <?php
  2. namespace app\inter\controller;
  3. use think\Controller;
  4. use think\Db;
  5. use think\Session;
  6. use think\Log;
  7. use think\Request;
  8. use think\Cache;
  9. use app\common\library\UUIDs;
  10. use app\common\library\Verify;
  11. use think\Validate;
  12. class Login extends Controller
  13. {
  14. public function _initialize(){
  15. /*$admin = Cache::get('doctor');
  16. if($admin){
  17. //已经登陆过
  18. return json_encode(array('status'=>'fail','code'=>'1001','msg'=>'您已登陆,请勿重复登录'));
  19. }*/
  20. }
  21. /**
  22. * 医生登录
  23. *
  24. * @ApiTitle (医生登录)
  25. * @ApiSummary (医生登录)
  26. * @ApiSector (医生接口)
  27. * @ApiMethod (POST)
  28. * @ApiRoute (http://work.api.pacsonline.cn/inter/login/index)
  29. * @ApiHeaders (name="sign", type="string", required=true, description="请求头-校验key")
  30. * @ApiHeaders (name="nonce", type="string", required=true, description="请求头-随机数")
  31. * @ApiHeaders (name="timestamp", type=string, required=true, description="请求头-时间戳s")
  32. * @ApiParams (name="param", type="string", required=true, description="参数json字符串")
  33. * @ApiParams (name="param.username", type="string", sample="", description="账号<必填>")
  34. * @ApiParams (name="param.password", type="string", required=false, description="密码<必填>")
  35. * @ApiReturnParams (name="code", type="integer", required=true, sample="0", description="返回码 0 失败 1成功"))
  36. * @ApiReturnParams (name="time", type="integer", required=true, sample="0", description="返回时间戳")
  37. * @ApiReturnParams (name="msg", type="string", required=true, sample="返回成功", description="返回信息")
  38. * @ApiReturnParams (name="data", type="object", sample="{}", description="null")
  39. * @ApiReturn (data="
  40. {
  41. 'code': 1,
  42. 'msg': '',
  43. 'time': '1527955080',
  44. 'data': null
  45. }
  46. *")
  47. **/
  48. //登录功能
  49. public function index(){
  50. try{
  51. $param = $_REQUEST['param'];
  52. Verify::loginCheck($param);
  53. $sessionid = UUIDs::uuid16();
  54. log::record($sessionid);
  55. log::record($_REQUEST);
  56. if(!empty($param["captcha"])){
  57. //1. 获取到用户提交的验证码
  58. $captcha = $param["captcha"];
  59. //2. 将session中的验证码和用户提交的验证码进行核对,当成功时提示验证码正确,并销毁之前的session值,不成功则重新提交
  60. if(strtolower($_SESSION["captcha"]) == strtolower($captcha)){
  61. $_SESSION["captcha"] = "";
  62. }else{
  63. return json_encode(['status'=>'fail','code'=>'1002','msg'=>'验证码输入错误']);
  64. }
  65. }
  66. if(empty($param['userName'])){
  67. return json_encode(['status'=>'fail','code'=>'1100','msg'=>'用户名不能为空']);
  68. }
  69. if(empty($param['pwd'])){
  70. return json_encode(['status'=>'fail','code'=>'1101','msg'=>'密码不能为空']);
  71. }
  72. //医生信息
  73. $info = DB::table('doctors')->where('username',$param['userName'])->field('id,attachment,username,password,login_time,login_failure,realname,email,phone,doctor_title,institution_id,department_id,doctor_role,is_report')->find();
  74. log::record($info);
  75. if(!$info){
  76. return json_encode(['status'=>'fail','code'=>'1004','msg'=>'用户名'.$param['userName'].'或密码错误']);
  77. }
  78. //医生类
  79. $class_info = DB::table('doctor_class')->where('doctor_id',$info['id'])->cache(300)->find();
  80. $institution = DB::table('institution')->where('id',$info['institution_id'])->cache(300)->field('name')->find();
  81. $info['institution_name'] = $institution['name'];
  82. $info['doctor_class_info'] = $class_info;
  83. //医生权限菜单
  84. $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 ";
  85. $permission = DB::query($sql);
  86. $info['permission'] = $permission;
  87. if(md5($param['pwd']) == $info['password']){
  88. //登录成功则失败次数清0
  89. DB::table('doctors')->where('username',$param['userName'])->update(['login_failure'=>0,'login_time'=>date('Y-m-d H:i:s')]);
  90. Cache::set($sessionid,$info,43200);
  91. log::record('----登录信息----');
  92. log::record(Cache::get($sessionid));
  93. log::record('----登录信息----');
  94. unset($info['password']);
  95. return json_encode(['status'=>'ok','code'=>'0000','info'=>$info,'sessionid'=>$sessionid]);
  96. }else{
  97. //登录失败则将 登录失败次数+1
  98. $time = date('Y-m-d', time());
  99. $datetime = strtotime($time);
  100. //上次登录时间-今日0点时间
  101. $t = $info['login_time'] - $datetime;
  102. if( $t < 0){
  103. //时间小于0 代表今日未进行登录 登录失败次数归0
  104. DB::table('doctors')->where('username',$param['userName'])->update(['login_failure'=>0]);
  105. }
  106. DB::table('doctors')->where('username',$param['userName'])->setInc('login_failure');
  107. return json_encode(['status'=>'fail','code'=>'1004','msg'=>'用户名'.$param['userName'].'或者密码错误','info'=>$info['login_failure']]);
  108. }
  109. }catch(\Exception $e){
  110. return json_encode(['status'=>'fail','code'=>'2000','msg'=>$e->getMessage()]);
  111. }
  112. }
  113. //注册功能
  114. public function register(){
  115. $param = $_REQUEST['param'];
  116. $info = DB::table('doctors')->where('username',$param['userName'])->find();
  117. if($info){
  118. return json_encode(['status'=>'fail','code'=>'1006']);
  119. }
  120. $dat = array();
  121. $dat['password'] = md5($param['pwd']);
  122. $dat['username'] = $param['userName'];
  123. $id = DB::table('doctors')->insertGetId($dat);
  124. $doctor_class = array();
  125. $doctor_class['doctor_class'] = $param['doctor_class'];
  126. $doctor_class['doctor_id'] = $id;
  127. $doctor_class['department_id'] = $param['second_department_id'];
  128. //医生类别表
  129. DB::table('doctor_class')->insert($doctor_class);
  130. if($id){
  131. return json_encode(['status'=>'ok','code'=>'0000']);
  132. }else{
  133. return json_encode(['status'=>'fail','code'=>'1005','msg'=>'注册失败']);
  134. }
  135. }
  136. //退出登录 清空session值
  137. public function signOut(){
  138. // Cache::rm('doctor');
  139. Cache::clear();
  140. return json_encode(['status'=>'ok','code'=>'0000']);
  141. }
  142. }