employeeRule($data,false); if(!$status) return [$status,$msg]; try{ DB::beginTransaction(); //人员 $model = new Employee(); $model = $model->where('id',$data['id'])->first(); $model->mark = $data['mark'] ?? ''; if($data['password'] !== '********') $model->password = Hash::make($data['password']); $model->save(); //角色 EmployeeRole::where('employee_id',$data['id'])->update([ 'del_time' => time() ]); if(isset($data['role'])){ $insert = []; foreach ($data['role'] as $value){ $insert[] = [ 'employee_id' => $model->id, 'role_id' => $value, 'crt_time' => time(), 'upd_time' => time(), ]; } EmployeeRole::insert($insert); } DB::commit(); }catch (Exception $e){ DB::rollBack(); return [false, $e->getMessage()]; } return [true,'保存成功!']; } public function employeeAdd($data,$user){ list($status,$msg) = $this->employeeRule($data); if(!$status) return [$status,$msg]; try { $model = new Employee(); $model->account = $data['account']; $model->password = Hash::make($data['password']); $model->mark = $data['mark'] ?? ''; $model->save(); if(isset($data['role'])){ $insert = []; foreach ($data['role'] as $value){ $insert[] = [ 'employee_id' => $model->id, 'role_id' => $value, 'crt_time' => time(), 'upd_time' => time(), ]; } EmployeeRole::insert($insert); } DB::commit(); }catch (Exception $e){ DB::rollBack(); return [false, $e->getMessage()]; } return [true,'保存成功!']; } public function employeeDel($data){ if($this->isEmpty($data,'id')) return [false,'请选择人员!']; if($data['id'] == Employee::SPECIAL_ACCOUNT_ID) return [false,'删除失败!']; Employee::where('id',$data['id'])->update([ 'del_time'=>time() ]); return [true,'删除成功']; } public function employeeList($data,$user){ $model = Employee::where('del_time',0) ->where('id','<>',Employee::SPECIAL_ACCOUNT_ID) ->select('account','upd_time','id','mark','crt_time') ->orderBy('id','desc'); if(! empty($data['account'])) $model->where('account', 'LIKE', '%'.$data['account'].'%'); if(! empty($data['mark'])) $model->where('mark', 'LIKE', '%'.$data['mark'].'%'); if(! empty($data['role'])) { $emp = EmployeeRole::where('role_id',$data['role']) ->where('del_time',0) ->select('employee_id')->get()->toArray(); $model->whereIn('id',array_column($emp,'employee_id')); } $list = $this->limit($model,'',$data); //组织数据 $list = $this->organizationEmployeeData($list); return [true, $list]; } public function organizationEmployeeData($data) { if (empty($data['data'])) return $data; $res = DB::table('employee_role as a') ->leftJoin('role as b','a.role_id','=','b.id') ->where('a.del_time',0) ->where('b.del_time',0) ->whereIn("a.employee_id",array_column($data['data'],'id')) ->select('a.employee_id','b.title','b.id') ->get()->toArray(); $role = $role2 = []; foreach ($res as $value){ if(isset($role[$value->employee_id])){ $role[$value->employee_id] .= ',' . $value->title; }else{ $role[$value->employee_id] = $value->title; } $role2[$value->employee_id][] = $value->id; } foreach ($data['data'] as $key => $value){ $data['data'][$key]['role'] = $role2[$value['id']] ?? []; $data['data'][$key]['role_name'] = $role[$value['id']] ?? ''; $data['data'][$key]['crt_time'] = $value['crt_time'] ? date('Y-m-d',$value['crt_time']) : ''; } return $data; } public function employeeRule($data,$is_add = true){ if(empty($data['account'])) return [false,'账户不能为空!']; if(! $is_add){ if($this->isEmpty($data,'id')) return [false,'ID不能为空!']; }else{ $bool = Employee::where('account',$data['account']) ->where('del_time',0)->exists(); if($bool) return [false,'账户已存在!']; } return [true,'']; } public function roleEdit($data){ list($status,$msg) = $this->roleRule($data,false); if(!$status) return [$status,$msg]; $model = new Role(); $model = $model->where('id',$data['id'])->first(); $model->code = $data['code']; $model->title = $data['title']; $model->save(); return [true,'保存成功!']; } public function roleAdd($data,$user){ list($status,$msg) = $this->roleRule($data); if(!$status) return [$status,$msg]; $model = new Role(); $model->code = $data['code']; $model->title = $data['title'] ; $model->save(); return [true,'保存成功!']; } public function roleDel($data){ if($this->isEmpty($data,'id')) return [false,'请选择角色!']; if(! is_array($data['id'])) $data['id'] = [$data['id']]; $bool = EmployeeRole::where('del_time',0) ->whereIn('role_id',$data['id']) ->exists(); if($bool) return [false,'角色已绑定人员!']; Role::whereIn('id',$data['id'])->update([ 'del_time'=>time() ]); return [true,'删除成功']; } public function roleList($data){ $list = Role::where('del_time',0) ->select('code','title','crt_time','id','upd_time') ->orderBy('id','desc'); if(! empty($data['title'])) $list->where('title','LIKE', '%'.$data['title'].'%'); if(! empty($data['code'])) $list->where('code','LIKE', '%'.$data['code'].'%'); $list = $this->limit($list,'',$data); return [200,$list]; } public function roleRule($data,$is_add = true){ if($this->isEmpty($data,'title')) return [false,'角色名称不能为空!']; if($this->isEmpty($data,'code')) return [false,'角色编码不能为空!']; if(! $is_add){ if($this->isEmpty($data,'id')) return [false,'ID不能为空!']; $bool = Role::whereRaw("(binary code = '{$data['code']}' OR title = '{$data['title']}')") ->where('id','<>',$data['id']) ->where('del_time',0)->exists(); }else{ $bool = Role::whereRaw("(binary code = '{$data['code']}' OR title = '{$data['title']}')") ->where('del_time',0)->exists(); } if($bool) return [false,'角色名称或编码已存在!']; return [true,'']; } public function roleMenu($data){ if(empty($data['role_id'])) return [false,'角色不能为空!']; if(empty($data['menu'])) return [false,'菜单数据不能为空!']; DB::beginTransaction(); try { RoleMenu::where('role_id',$data['role_id'])->update(['del_time' => time()]); $insert = []; foreach ($data['menu'] as $t){ $insert[] = [ 'role_id' => $data['role_id'], 'menu_id' => $t['menu_id'], 'type' => $t['type'], 'crt_time' => time() ]; } RoleMenu::insert($insert); DB::commit(); }catch (\Throwable $exception){ DB::rollBack(); return [false,$exception->getMessage()]; } return [true,'保存成功!']; } public function roleDetail($data){ if(empty($data['role_id'])) return [false,'请选择角色']; $role = Role::where('id',$data['role_id']) ->where('del_time',0) ->select('id','code','title') ->first(); if(empty($role)) return [false,'角色不存在或已被删除']; $role = $role->toArray(); $menu = RoleMenu::where('role_id',$data['role_id']) ->where('del_time',0) ->select('menu_id','type') ->get()->toArray(); $role['menu'] = $menu; return [true, $role]; } public function departEdit($data){ list($status,$msg) = $this->departRule($data,false); if(!$status) return [$status,$msg]; $update = $msg['data'][0]; $model = new Depart(); $model->where('id',$data['id'])->update($update); return [true,'保存成功!']; } public function departAdd($data){ list($status,$msg) = $this->departRule($data); if(!$status) return [$status,$msg]; Depart::insert($msg['data']); return [true,'保存成功!']; } public function departDel($data){ list($status,$msg) = $this->checkDepartDel($data); if(! $status) return [false, $msg]; Depart::whereIn('id',$data['id'])->update([ 'del_time'=>time() ]); return [true,'删除成功']; } public function departList($data){ $model = Depart::where('del_time',0) ->select('title','id','code','parent_id','is_use') ->orderby('code', 'asc'); if(! empty($data['title'])) $model->where('title', 'LIKE', '%'.$data['title'].'%'); if(! empty($data['code'])) $model->where('code', 'LIKE', '%'.$data['code'].'%'); $list = $model->get()->toArray(); if(! empty($list)) { $list = $this->makeTree(0,$list); $list = $this->set_sort_circle($list); } return [200,$list]; } public function departRule($data, $is_check = true){ if($this->isEmpty($data,'data')) return [false,'数据不能为空!']; $code = array_column($data['data'],'code'); $title = array_column($data['data'],'title'); $code = array_map(function($val) { return $val !== null ? $val : 0; }, $code); $title = array_map(function($val) { return $val !== null ? $val : 0; }, $title); $code_count = array_count_values($code); $title_count = array_count_values($title); foreach ($code as $value){ if(empty($value)) return [false,'编码不能为空!']; if($code_count[$value] > 1) return [false,'编码不能重复']; } foreach ($title as $value){ if(empty($value)) return [false,'名称不能为空!']; if($title_count[$value] > 1) return [false,'名称不能重复']; } $depart_id = array_filter(array_column($data['data'],'parent_id')); $res = $this->checkDepartHasPerson($depart_id); if($res) return [false,'部门下已有人员,不能新建子部门!']; foreach ($data['data'] as $key => $value){ if(empty($value['parent_id'])) $data['data'][$key]['parent_id'] = 0; $data['data'][$key]['upd_time'] = time(); if($is_check){ $data['data'][$key]['crt_time'] = time(); $bool = Depart::whereRaw("(binary code = '{$value['code']}' OR title = '{$value['title']}')") ->where('del_time',0) ->exists(); }else{ if($this->isEmpty($data,'id')) return [false,'id不能为空!']; if(! $value['is_use']) { $bool_is = $this->checkDepartHasPerson([$data['id']]); if($bool_is) return [false,'部门下已经有人员,停用失败!']; } $bool = Depart::whereRaw("(binary code = '{$value['code']}' OR title = '{$value['title']}')") ->where('id','<>',$data['id']) ->where('del_time',0) ->exists(); } if($bool) return [false,'编码或部门名称不能重复']; } return [true, $data]; } public function checkDepartDel($data){ if($this->isEmpty($data,'id')) return [false,'ID必须!']; $bool = Depart::whereIn('parent_id',$data['id'])->where('del_time',0)->exists(); if($bool) return [false,'部门下有子部门!']; if($this->checkDepartHasPerson($data['id'])) return [false,'部门下有人员档案!']; return [true, '']; } //检测部门下是否存在人员 public function checkDepartHasPerson($depart_id = []){ if(empty($depart_id)) return false; $bool = EmployeeDepartPermission::from('employee_depart_permission as a') ->leftJoin('employee as b','b.id','a.employee_id') ->where('b.del_time',0) ->whereIn('a.depart_id',$depart_id) ->exists(); return $bool; } public function teamEdit($data){ list($status,$msg) = $this->teamRule($data,false); if(!$status) return [$status,$msg]; $model = new Team(); $model = $model->where('id',$data['id'])->first(); $model->title = $data['title']; $model->code = $data['code']; $model->save(); return [true,'保存成功!']; } public function teamAdd($data,$user){ list($status,$msg) = $this->teamRule($data); if(!$status) return [$status,$msg]; $model = new Team(); $model->title = $data['title'] ; $model->code = $data['code']; $model->save(); return [true,'保存成功!']; } public function teamDel($data){ if($this->isEmpty($data,'id')) return [false,'ID必须!']; Team::where('id',$data['id'])->update([ 'del_time'=>time() ]); return [true,'删除成功']; } public function teamList($data){ $list = Team::where('del_time',0)->select('title','id','crt_time','upd_time','code')->orderBy('id','desc'); $list = $this->limit($list,'',$data); return [200,$list]; } public function teamRule($data,$is_add = true){ if($this->isEmpty($data,'title')) return [false,'名称不存在!']; if($this->isEmpty($data,'code')) return [false,'编码不存在']; $model = Team::where('title',$data['title']) ->where('code',$data['code']) ->where('del_time',0); if(! $is_add){ if($this->isEmpty($data,'id')) return [false,'ID不能为空']; $model->where('id','<>',$data['id']); } $bool = $model->exists(); if($bool) return [false,'名称和编码已存在!']; return [true,'']; } public function teamDetail($data){ if($this->isEmpty($data,'id')) return [false,'ID不能为空!']; $result = EmployeeTeamPermission::from('employee_team_permission as a') ->leftJoin('employee as b','b.id','a.employee_id') ->where('team_id',$data['id']) ->select('b.id','b.emp_name','b.number as code') ->get()->toArray(); return [true,$result]; } public function employeeRole($data){ $role_ids = []; $employee_ids = []; foreach ($data as $v){ if(isset($v['role_id'])){ if(!in_array($v['role_id'],$role_ids)){ $role_ids[] = $v['role_id']; } } if(isset($v['employee_id'])){ if(!in_array($v['employee_id'],$employee_ids)){ $employee_ids[] = $v['employee_id']; } } } EmployeeMenuPermission::wherein('role_id',$role_ids)->delete(); EmployeeMenuPermission::wherein('employee_id',$employee_ids)->delete(); EmployeeMenuPermission::insert($data); return [200,'保存成功!']; } public function employeeDepart($data){ if($this->isEmpty($data,'insert')) return [false,'数据不能为空!']; DB::beginTransaction(); try { if($data['type'] == 1){ EmployeeDepartPermission::whereIn('depart_id',$data['insert']['depart_id'])->delete(); }else{ EmployeeDepartPermission::whereIn('employee_id',$data['insert']['employee_id'])->delete(); } $insert = []; foreach ($data['insert']['depart_id'] as $t){ foreach ($data['insert']['employee_id'] as $e){ $insert[] = [ 'depart_id' => $t, 'employee_id' => $e ]; } } EmployeeDepartPermission::insert($insert); DB::commit(); }catch (\Throwable $exception){ DB::rollBack(); return [false,$exception->getMessage()]; } return [true,'保存成功!']; } public function employeeTeam($data){ if($this->isEmpty($data,'insert')) return [false,'数据不能为空!']; DB::beginTransaction(); try { if($data['type'] == 1){ EmployeeTeamPermission::whereIn('team_id',$data['insert']['team_id'])->delete(); }else{ EmployeeTeamPermission::whereIn('employee_id',$data['insert']['employee_id'])->delete(); } $insert = []; foreach ($data['insert']['team_id'] as $t){ foreach ($data['insert']['employee_id'] as $e){ $insert[] = [ 'team_id' => $t, 'employee_id' => $e ]; } } EmployeeTeamPermission::insert($insert); DB::commit(); }catch (\Throwable $exception){ DB::rollBack(); return [false,$exception->getMessage()]; } return [true,'保存成功!']; } public function loginRule($data){ if($this->isEmpty($data,'account')) return [false,'账号不能为空!']; if($this->isEmpty($data,'password')) return [false,'密码不存在!']; $account = $data['account']; $res = Employee::where('del_time',0) ->where('account', $account) ->get()->toArray(); if(empty($res)) return [false,'账号不存在或已被删除!']; $res = reset($res); if(! Hash::check($data['password'], $res['password'])) return [false,'密码错误!']; if($res['state'] == Employee::NOT_USE) return [false,'账号停用!']; //人员角色 $role = EmployeeService::getPersonRole($res['id']); //人员角色的菜单 $role_menu = EmployeeService::getMenuByRole($role,$res['id']); return [true, ['id'=>$res['id'], 'account' => $res['account'], 'role' => $role, 'role_menu' => $role_menu]]; } public static function checkUser($userId){ $res = Employee::where('id', $userId) ->where('del_time',0) ->where('state',Employee::USE)->get()->first(); if(empty($res)) return [false, '该账号无法登录,请联系管理员!']; return [true, $res]; } //获取登录账号的角色 public static function getPersonRole($employee_id){ if(empty($employee_id)) return []; $role = EmployeeRole::where('del_time',0) ->where('employee_id',$employee_id) ->select('role_id') ->get()->toArray(); //组织 $role_id = array_column($role,'role_id'); asort($role_id); $role_id = array_values($role_id); return $role_id; } //获取登录账号的角色的菜单 public static function getMenuByRole($role_id,$user_id){ $menu = SysMenu::where('del_time',0)->select('id')->get()->toArray(); $object = [];//返回的模型 if($user_id == Employee::SPECIAL_ACCOUNT_ID){ //超级管理员 foreach ($menu as $value){ $object[] = [ 'type' => 0,//所有权限 'menu_id' => $value['id'], ]; } return $object; } //没绑定角色 if(empty($role_id)) return []; $search = RoleMenu::whereIn('role_id',$role_id) ->where('del_time',0) ->select('menu_id','type') ->get()->toArray(); foreach ($search as $value){ $object[] = [ 'menu_id' => $value['menu_id'], 'type' => $value['type'], ]; } return $object; } //获取登录账号的权限部门 public static function getPersonDepart($employee_id){ if(empty($employee_id)) return []; //操作人员直接绑定部门 $employee_manager_depart = EmployeeManagerDepart::where('del_time',0) ->where('employee_id',$employee_id) ->select('depart_id') ->get()->toArray(); //操作人员绑定角色 $employee_role = EmployeeRole::from('employee_role as a') ->leftJoin('role_depart as b','b.role_id','a.role_id') ->select('b.depart_id','b.role_id') ->where('a.del_time',0) ->where('b.del_time',0) ->where('a.employee_id',$employee_id) ->get()->toArray(); return array_filter(array_merge_recursive(array_column($employee_manager_depart,'depart_id'),array_column($employee_role,'depart_id'))); } //人员直接绑定部门 public function employeeManagerDepart($data,$user){ if($this->isEmpty($data,'employee_id')) return [false,'请选择操作人员']; if($this->isEmpty($data,'depart_id')) return [false,'请选择部门']; EmployeeManagerDepart::where('employee_id',$data['employee_id'])->update([ 'del_time' => time() ]); $insert = []; foreach ($data['depart_id'] as $value){ $insert[] = [ 'employee_id' => $data['employee_id'], 'depart_id' => $value, 'crt_time' => time(), 'upd_time' => time(), ]; } EmployeeManagerDepart::insert($insert); return [true,'']; } }