where('account',$account)->where('del',0)->find(); if(empty($user)){ $user = $this->where('code',$account)->where('del',0)->find(); } if(empty($user)){ $user = $this->where('phone',$account)->where('del',0)->find(); } if(empty($user)){ HelpHander::error('账号或密码错误'); } if($user['enable'] != 1){ HelpHander::error('账号被禁用'); } $pass = aes_decrypt($password); if(!password_verify($pass, $user['password'])){ HelpHander::error('账号或密码错误'); } $token = model('Token')->updateToken($user['id']); if(!$token){ HelpHander::error('登录失败'); } model('ActionLog')->add(1,'用户登录',$user['id']); $orgs = $this->getUserOrgs($user['id']); return ['org_info' => $orgs, 'token_info' => $token]; } /** * 获取用户组织 * @param $userId * @return array|\PDOStatement|string|\think\Collection|\think\model\Collection */ public function getUserOrgs($userId){ $lists = Db::name('user_roles') ->alias('ur') ->join('roles r','ur.roles_id = r.id') ->join('org o','r.org_id = o.id') ->where('r.type',3) ->where('ur.user_id',$userId) ->field('o.id,o.name') ->select(); return $lists ? $lists : []; } /** * 获取登录后信息 * @param $userId 用户id * @param int $type 0=pc 1=app * @return array */ public function userinfo($userId, $type = 0){ $user = Db::name('user') ->alias('u') ->join('user_info ui','ui.user_id = u.id','left') ->where('u.id',$userId) ->field('u.id,u.account,u.phone,u.code,ui.name,u.login_time,u.login,ui.device_sn') ->find(); $deviceSn = $user['device_sn'] ? $user['device_sn'] : ''; unset($user['device_sn']); // 获取角色 $rolesList = Db::name('user_roles') ->alias('ur') ->join('roles r','r.id = ur.roles_id') ->where('ur.user_id',$userId) ->where('r.del',0) ->where('r.enable',1) ->field('r.*') ->select(); // 获取岗位 $jobList = Db::name('user_job') ->alias('uj') ->join('job j','j.id = uj.job_id') ->where('uj.user_id',$userId) ->where('j.del',0) ->where('j.enable',1) ->field('j.*') ->select(); // 获取部门 $depids = Db::name('user_job') ->alias('uj') ->join('job j','j.id = uj.job_id') ->where('uj.user_id',$userId) ->where('j.del',0) ->where('j.enable',1) ->column('j.dep_id'); if(empty($depids)){ $depList = []; }else{ $depids = array_unique($depids); $depList = Db::name('dep') ->where('enable',1) ->where('del',0) ->where('id','in',$depids) ->select(); } if($type == 0){ // 处理点餐人员,不显示首页内容,只显示欢迎 $dinnerRolesId = 129; $rids = []; $rolesList = $rolesList?$rolesList:[]; foreach ($rolesList as $k=>$v){ if($v['type'] == 0){ $rids[] = $v['id']; } } if(count($rids) == 1 && in_array($dinnerRolesId,$rids)){ foreach ($rolesList as $k=>$v){ if($v['type'] == 0 && $v['id'] == $dinnerRolesId){ $rolesList[$k]['type'] = 4; // 修改订餐审核员 } } } } $data = [ 'user' => $user, 'deviceSn' => $deviceSn, 'rolesList' => $rolesList?$rolesList:[], 'jobList' => $jobList?$jobList:[], 'depList' => $depList?$depList:[], ]; if($type == 0){ $allRulesList = Db::name('rules')->where('enable', 1)->select(); $data['allRulesList'] = $allRulesList; $rulesList = []; if($rolesList){ $rulesids = ''; $isadmin = 0; foreach ($rolesList as $k=>$v){ if($v['id'] == 1){ $isadmin = 1; } if($v['rules']){ $rulesids .= ','.$v['rules']; } } if($rulesids){ $rules = array_unique(explode(',',$rulesids)); if(!$isadmin){ $orgrule = Db::name('roles')->where('type',2)->value('rules'); $orgrules = $orgrule?explode(',',$orgrule):[]; $rules = array_intersect($rules,$orgrules); } if($rules){ $rulesList = Db::name('rules') ->where('id','in',$rules) ->where('enable', 1) ->order('sort asc,id ase') ->select(); } } } $data['rulesList'] = $rulesList?$rulesList:[]; } return $data; } // 修改密码 public function updatePassword($userId,$data){ $d = [ 'password' => aes_decrypt($data['password']), 'newPassword' => aes_decrypt($data['newPassword']) ]; $result = validate('User')->check($d,[],'modifypass'); if(true !== $result){ HelpHander::error(validate('User')->getError()); } $user = $this->checkUser($userId); if(!password_verify($d['password'], $user['password'])){ HelpHander::error('原密码不正确'); } $npass = password_hash($d['newPassword'],PASSWORD_DEFAULT); Db::startTrans(); try{ $ret = $this->save(['password'=>$npass,'update_time'=>date('Y-m-d H:i:s'),'login'=>1],['id'=>$userId]); if(!$ret){ \exception('密码修改失败'); } $res = model('Token')->updateToken($userId); if(!$res){ \exception('密码修改失败'); } Db::commit(); }catch (Exception $e){ Db::rollback(); HelpHander::error($e->getMessage()); } return true; } // 忘记密码 public function forgetPassword($phone,$password,$code){ $d = [ 'newPassword' => aes_decrypt($password), 'phone' => $phone, 'code' => $code ]; if(!check_mobile($phone)){ HelpHander::error('手机号格式不正确'); } if(mb_strlen($d['newPassword']) < 6 || mb_strlen($d['newPassword']) > 16){ HelpHander::error('新密码长度必须在6-16之间'); } if(!$code){ HelpHander::error('请输入验证码'); } $user = Db::name('user')->where('phone',$phone)->where('del',0)->find(); if(!$user){ HelpHander::error('手机号未注册'); } $resms = model('SmsRecord')->checkCode($phone,$code); if(!$resms){ HelpHander::error('验证码不正确或已失效'); } $npass = password_hash($d['newPassword'],PASSWORD_DEFAULT); Db::startTrans(); try{ $ret = $this->save(['password'=>$npass,'update_time'=>date('Y-m-d H:i:s'),'login'=>1],['id'=>$user['id']]); if(!$ret){ \exception('修改失败'); } $res = model('Token')->updateToken($user['id']); if(!$res){ \exception('密码修改失败'); } Db::commit(); }catch (Exception $e){ Db::rollback(); HelpHander::error($e->getMessage()); } return true; } // 重置密码 public function resetPassword($id){ $user = $this->checkUser($id); $data = [ 'password' => password_hash('123456',PASSWORD_DEFAULT), 'update_time' => date('Y-m-d H:i:s'), 'login' => 0 ]; $ret = $this->save($data,['id'=>$id]); if(!$ret){ HelpHander::error('密码重置失败'); } Db::name('token')->where('user_id',$id)->setField('code',''); return true; } // 修改用户名 public function updateAccount($id,$account){ $data = [ 'id' => $id, 'account' => $account, 'update_time' => date('Y-m-d H:i:s') ]; $result = validate('User')->check($data,[],'account'); if(true !== $result){ HelpHander::error(validate('User')->getError()); } $user = $this->checkUser($id); $ret = $this->save($data,['id'=>$id]); if(!$ret){ HelpHander::error('修改用户名失败'); } return true; } private function checkUser($id){ $user = $this->where('id',$id)->where('del',0)->find(); if(empty($user)){ HelpHander::error('用户不存在'); } return $user; } public function getUserByAuths($orgId,$auths){ $auths = json_decode($auths,true); if(!$auths){ // 所有人 if($orgId > 0){ $userids = Db::name('user_roles') ->alias('ur') ->join('roles r','r.id = ur.roles_id') ->join('user u','u.id = ur.user_id') ->where('r.type',3) ->where('r.org_id',$orgId) ->where('u.enable',1) ->where('u.del',0) ->column('ur.user_id'); }else{ $userids = Db::name('user') ->where('enable',1) ->where('del',0) ->column('id'); } } else { $uids = []; $depids = []; $jobids = []; foreach ($auths as $k=>$v){ if($v['type'] == 0){ $depids[] = $v['id']; }else{ $uids[] = $v['id']; } } if($depids){ $depchildren = model('Dep')->getDepChildren($depids); $depids = array_unique(array_merge($depids,$depchildren)); $jobids = model('Job')->getJobByDeps($depids); } if(empty($uids) && empty($jobids)){ $userids = []; } else { $userids1 = []; $userids2 = []; if($uids){ $userids1 = Db::name('user_job') ->alias('uj') ->join('user u','u.id = uj.user_id') ->where('uj.user_id','in',$uids) ->where('u.enable',1) ->where('u.del',0) ->column('uj.user_id'); $userids1 = $userids1?$userids1:[]; } if($jobids){ $userids2 = Db::name('user_job') ->alias('uj') ->join('user u','u.id = uj.user_id') ->where('uj.job_id','in',$jobids) ->where('u.enable',1) ->where('u.del',0) ->column('uj.user_id'); $userids2 = $userids2?$userids2:[]; } $userids = array_unique(array_merge($userids1,$userids2)); } } return $userids; } // 创建机构管理员 public function addUserOrg($account,$roles){ $data = [ 'account' => $account, 'password' => password_hash('123456',PASSWORD_DEFAULT), 'create_time' => date('Y-m-d H:i:s'), 'update_time' => date('Y-m-d H:i:s'), 'enable' => 1, 'del' => 0, 'login' => 0 ]; $code = Db::name('user')->order('id desc')->value('code'); $data['code'] = $code + 1; $ret = $this->allowField(true)->save($data); if(!$ret){ return false; } $d = [ 'user_id' => $this->id, 'name' => '机构管理员' ]; $res = Db::name('user_info')->insert($d); if(!$res){ return false; } $res2 = Db::name('user_roles')->insert([ 'user_id' => $this->id, 'roles_id' => $roles ]); if(!$res2){ return false; } // 机构管理员角色 $jgroles = Db::name('roles')->where('type',2)->value('id'); $res3 = Db::name('user_roles')->insert([ 'user_id' => $this->id, 'roles_id' => $jgroles ]); if(!$res3){ return false; } return true; } // 获取机构管理员和超级管理员id集合 public function getAdminUsers(){ $ids = Db::name('user_roles') ->alias('ur') ->join('roles r','r.id = ur.roles_id') ->where('r.type','in','1,2') ->column('ur.user_id'); return $ids?array_unique($ids):[]; } public function add(){ $data = [ 'id' => input('uId/d',0), 'name' => input('name','','trim'), 'phone' => input('phone','','trim'), 'company_id' => input('companyId/d',0), // 'email' => input('email','','trim'), // 'id_card' => input('idCard','','trim'), // 'join_time' => input('joinTime','','trim'), // 'is_working' => input('isWorking/d',0), ]; $orgId = input('orgId/d',0); $result = validate('User')->check($data,[],'add'); if(true !== $result){ HelpHander::error(validate('User')->getError()); } $id = $data['id']; unset($data['id']); $uinfo = Db::name('user_info')->where('user_id',$id)->find(); if($uinfo&&$uinfo['company_id']&&$uinfo['psid'] > 0){ HelpHander::error('该用户已定级不可修改公司'); } $this->startTrans(); try{ if($id > 0){ $sdata = [ 'phone' => $data['phone'], 'update_time' => date('Y-m-d H:i:s') ]; $ret = $this->allowField(true)->save($sdata,['id'=>$id]); if(!$ret){ \exception('操作失败'); } $res = Db::name('user_info')->where('user_id',$id)->update([ 'name' => $data['name'], 'company_id' => $data['company_id'], // 'email' => $data['email'], // 'id_card' => $data['id_card'], // 'join_time' => $data['join_time']?$data['join_time']:null, // 'is_working' => $data['is_workimg'], 'update_time' => date('Y-m-d H:i:s') ]); if(!$res){ \exception('用户信息添加失败'); } }else{ $sdata = [ 'phone' => $data['phone'], 'password' => password_hash('123456',PASSWORD_DEFAULT), 'create_time' => date('Y-m-d H:i:s'), 'update_time' => date('Y-m-d H:i:s'), 'enable' => 1, 'del' => 0, 'login' => 0 ]; $code = Db::name('user')->order('id desc')->value('code'); $sdata['code'] = $code + 1; $ret = $this->allowField(true)->save($sdata); if(!$ret){ \exception('操作失败'); } $res = Db::name('user_info')->insert([ 'user_id' => $this->id, 'name' => $data['name'], 'company_id' => $data['company_id'], // 'email' => $data['email'], // 'id_card' => $data['id_card'], // 'join_time' => $data['join_time']?$data['join_time']:null, // 'is_working' => $data['is_workimg'] ]); if(!$res){ \exception('用户信息添加失败'); } // 添加默认角色 $rolesId = Db::name('roles')->where('type',3)->where('org_id',$orgId)->value('id'); $res2 = Db::name('user_roles')->insert([ 'user_id' => $this->id, 'roles_id' => $rolesId ]); if(!$res2){ \exception('默认角色添加失败'); } } $this->commit(); }catch (Exception $e){ trace($e->getMessage()); $this->rollback(); HelpHander::error('操作失败'.$e->getMessage()); } return true; } public function info($id){ $info = Db::name('user') ->alias('u') ->join('user_info ui','ui.user_id = u.id') ->where('u.id', $id) ->where('u.del', 0) ->field('u.id,u.code,u.phone,ui.email,ui.id_card,ui.device_sn,ui.name,ui.is_working,ui.join_time,ui.out_time,ui.company_id') ->find(); if(!$info){ HelpHander::error('数据不存在'); } return $info; } // 获取普通用户列表 public function lists($page,$size,$orgId,$name='',$code='',$phone=''){ $uids = $this->getAdminUsers(); if($uids){ $map[] = ['u.id','not in',$uids]; } if($name){ $map[] = ['ui.name','like','%'.$name.'%']; } if($code){ $map[] = ['u.code','like','%'.$code.'%']; } if($phone){ $map[] = ['u.phone','like','%'.$phone.'%']; } $map[] = ['u.del','=',0]; $map[] = ['r.type','=',3]; $map[] = ['r.org_id','=',$orgId]; $lists = Db::name('user') ->alias('u') ->join('user_info ui','ui.user_id = u.id') ->join('user_roles ur','ur.user_id = u.id') ->join('roles r','ur.roles_id = r.id') ->where($map) ->field('u.id,u.code,u.phone,u.del,u.enable,ui.name as user_name,ui.device_sn,ui.join_time,u.create_time,ui.company_id') ->page($page,$size) ->order('u.id desc') ->select(); $lists = $lists?$lists:[]; foreach ($lists as $k=>$v){ // 获取用户岗位 $jobs = Db::name('user_job') ->alias('uj') ->join('job j','j.id = uj.job_id') ->join('dep d','d.id = j.dep_id') ->where('uj.user_id',$v['id']) ->column("concat(d.name,'/',j.name)"); $lists[$k]['position'] = $jobs?implode(',',$jobs):''; $lists[$k]['company'] = ''; if($v['company_id']){ $lists[$k]['company'] = Db::name('company')->where('id',$v['company_id'])->value('title'); } } $total = Db::name('user') ->alias('u') ->join('user_info ui','ui.user_id = u.id') ->join('user_roles ur','ur.user_id = u.id') ->join('roles r','ur.roles_id = r.id') ->where($map) ->count(); $data = [ 'total' => $total, 'list' => $lists?$lists:[] ]; return $data; } public function changeStatus($id,$enable){ $ret = $this->where('id',$id)->setField('enable',$enable); if(!$ret){ HelpHander::error('操作失败'); } return true; } // 获取组织下的所有人员 public function queryUserListByOrg($orgId){ $jobids = Db::name('job')->where('org_id',$orgId)->where('del',0)->where('enable',1)->column('id'); $lists = []; if($jobids){ $lists = Db::name('user') ->alias('u') ->join('user_job uj','u.id = uj.user_id') ->join('user_info ui','u.id = ui.user_id') ->where('uj.job_id','in',$jobids) ->where('u.del',0) ->where('u.enable',1) ->distinct(true) ->field('u.id as userId,ui.name') ->select(); } return $lists?$lists:[]; } public function appAddressBook($orgId){ // 获取所有部门 $deps = Db::name('dep') ->where('del',0) ->where('enable',1) ->where('org_id',$orgId) ->order('sorts asc,id asc') ->field('id,name,parent_id') ->select(); // 添加唯一值 foreach ($deps as $k=>$v){ $deps[$k]['type'] = 0; $deps[$k]['phone'] = ''; $deps[$k]['jobList'] = []; $deps[$k]['depAndUserDtoList'] = model('UserJob')->getListByDep($v['id']); } $ndeps = list_to_tree($deps, 'parent_id', $child = 'depAndUserDtoList', 0); $ndeps = array_delete_char($ndeps,'parent_id','depAndUserDtoList'); return $ndeps; } // 通讯录搜索 public function selectUserTelList($orgId,$keyword){ $user = Db::name('user') ->alias('u') ->join('user_info ui',' ui.user_id = u.id') ->join('user_job uj','uj.user_id = u.id') ->join('job j','j.id = uj.job_id') ->where('u.del', 0) ->where('u.enable', 1) ->where('j.org_id',$orgId) ->where('j.del', 0) ->where('j.enable', 1) ->where('ui.name|j.name','like','%'.$keyword.'%') ->distinct(true) ->order('u.sorts asc,u.id asc') ->field('u.id,ui.name,u.phone') ->select(); foreach ($user as $k=>$v){ $user[$k]['type'] = 1; $user[$k]['depAndUserDtoList'] = []; $ujobs = Db::name('user_job') ->alias('uj') ->join('job j','j.id = uj.job_id') ->where('j.org_id',$orgId) ->where('uj.user_id',$v['id']) ->column('j.name'); $user[$k]['jobList'] = $ujobs?$ujobs:[]; } return $user?$user:[]; } // 日志接收人 public function receiveUserList($page,$size,$info,$orgId){ $map[] = ['j.org_id','=',$orgId]; $map[] = ['u.del','=',0]; $map[] = ['u.enable','=',1]; $map[] = ['j.del','=',0]; $map[] = ['j.enable','=',1]; if($info){ $map[] = ['ui.name','like','%'.$info.'%']; } $user = Db::name('user') ->alias('u') ->join('user_info ui','ui.user_id = u.id') ->join('user_job uj','uj.user_id = u.id') ->join('job j','j.id = uj.job_id') ->where($map) ->distinct(true) ->page($page,$size) ->order('u.sorts asc,u.id asc') ->field('u.id,ui.name') ->select(); foreach ($user as $k=>$v){ $ujobs = Db::name('user_job') ->alias('uj') ->join('job j','j.id = uj.job_id') ->where('uj.user_id',$v['id']) ->field('j.*') ->select(); $user[$k]['listJob'] = $ujobs?$ujobs:[]; } return $user; } }