123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739 |
- <?php
- namespace app\common\model;
- use app\hander\HelpHander;
- use think\Db;
- use think\Exception;
- use think\Model;
- class User extends Model
- {
- public function login($account,$password){
- // 登录是根据账号、工号和手机号组成,先查账号再查工号,最后手机号
- $user = $this->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;
- }
- }
|