|
@@ -746,31 +746,6 @@ class EmployeeService extends Service
|
|
|
return $object;
|
|
|
}
|
|
|
|
|
|
- //获取登录账号的权限部门 暂时不用了
|
|
|
- public static function getPersonDepart($employee_id){
|
|
|
- if(empty($employee_id)) return [];
|
|
|
-
|
|
|
- //admin账号
|
|
|
- if($employee_id == Employee::SPECIAL_ADMIN) return [Depart::RULE_DEPART];
|
|
|
-
|
|
|
- //操作人员直接绑定部门
|
|
|
- $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($user['id'] != Employee::SPECIAL_ADMIN) return [false,'非ADMIN账号不能操作'];
|
|
@@ -816,32 +791,100 @@ class EmployeeService extends Service
|
|
|
|
|
|
//获取登录账号的部门
|
|
|
public static function getLoginDepart($employee_id){
|
|
|
- $is_main = 0;//是否总社
|
|
|
- if(empty($employee_id)) return ['', $is_main];
|
|
|
+ if(empty($employee_id)) return ['', '','',''];
|
|
|
|
|
|
//admin账号
|
|
|
- if($employee_id == Employee::SPECIAL_ADMIN) {
|
|
|
- $is_main = 1;
|
|
|
- return [Depart::RULE_DEPART, $is_main];
|
|
|
- }
|
|
|
+ if($employee_id == Employee::SPECIAL_ADMIN) return [Depart::RULE_DEPART, '','',''];
|
|
|
|
|
|
//自己绑定的部门 启用的部门
|
|
|
$depart = EmployeeDepartPermission::from('employee_depart_permission as a')
|
|
|
->join('depart as b','b.id','a.depart_id')
|
|
|
->where('a.employee_id',$employee_id)
|
|
|
->where('b.is_use',Depart::IS_UES)
|
|
|
- ->select('a.depart_id','b.is_main')
|
|
|
+ ->select('a.depart_id','b.is_main','b.parent_id')
|
|
|
->orderBy('a.depart_id','asc')
|
|
|
->get()->toArray();
|
|
|
+
|
|
|
+ $top = $map = $rule = [];
|
|
|
if(! empty($depart)){
|
|
|
+ $list = Depart::where('del_time',0)->get()->toArray();
|
|
|
+ $depart_map = array_column($list,null,'id');
|
|
|
+ foreach ($depart as $value){
|
|
|
+ if($value['parent_id'] == 0){//顶级
|
|
|
+ $tmp['depart_id'] = $value['depart_id'];
|
|
|
+ $tmp['is_main'] = $value['is_main'];
|
|
|
+ $top[] = $tmp;
|
|
|
+ $map[$value['depart_id']] = $value['depart_id'];
|
|
|
+ }else{
|
|
|
+ $t = self::getTopParentId($value['depart_id'],$list);
|
|
|
+ if($t && isset($depart_map[$t])) {
|
|
|
+ $tmp['depart_id'] = $depart_map[$t]['id'];
|
|
|
+ $tmp['is_main'] = $depart_map[$t]['is_main'];
|
|
|
+ $top[] = $tmp;
|
|
|
+ $map[$value['depart_id']] = $t;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
foreach ($depart as $value){
|
|
|
- if($value['is_main'] > 0) {
|
|
|
- $is_main = 1;
|
|
|
- continue;
|
|
|
+ if(in_array($value['depart_id'],$rule)) continue;
|
|
|
+ if(! $value['parent_id']){ //顶级
|
|
|
+ if($value['is_main']) {//是总公司
|
|
|
+ //所有部门都有
|
|
|
+ $rule = array_column($list,'id');
|
|
|
+ }else{//不是总公司
|
|
|
+ //自己以及子部门
|
|
|
+ $depart_id = array_merge(self::getAllIds($list,$map[$value['depart_id']]),[$map[$value['depart_id']]]);
|
|
|
+ $rule = array_merge_recursive($rule,$depart_id);
|
|
|
+ }
|
|
|
+ }else{//非顶级
|
|
|
+ if($value['is_main']) {//是总社
|
|
|
+ $top_tmp = $map[$value['depart_id']];
|
|
|
+ if(! empty($depart_map[$top_tmp]['is_main'])){
|
|
|
+ //顶级部门是总社
|
|
|
+ //所有部门都有
|
|
|
+ $rule = array_column($list,'id');
|
|
|
+ }else{
|
|
|
+ $depart_id = array_merge(self::getAllIds($list,$map[$value['depart_id']]),[$map[$value['depart_id']]]);
|
|
|
+ $rule = array_merge_recursive($rule,$depart_id);
|
|
|
+ }
|
|
|
+ }else{
|
|
|
+ $rule = array_merge($rule,[$value['depart_id']]);
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- return [$depart, $is_main];
|
|
|
+ return [$depart, $top, $map, array_unique($rule)];
|
|
|
+ }
|
|
|
+
|
|
|
+ public static function getTopParentId($id, $data) {
|
|
|
+ foreach ($data as $item) {
|
|
|
+ if ($item['id'] == $id) {
|
|
|
+ if ($item['parent_id'] == 0) {
|
|
|
+ // 找到最顶级的id
|
|
|
+ return $item['id'];
|
|
|
+ } else {
|
|
|
+ // 继续递归查找父级
|
|
|
+ return self::getTopParentId($item['parent_id'], $data);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ // 如果没有找到匹配的id,则返回null或者其他你希望的默认值
|
|
|
+ return 0;
|
|
|
+ }
|
|
|
+
|
|
|
+ public static function getAllIds($data, $id) {
|
|
|
+ $result = array(); // 存储结果的数组
|
|
|
+
|
|
|
+ foreach ($data as $node) {
|
|
|
+ if ($node['parent_id'] == $id) { // 如果当前节点的父 ID 等于指定 ID,则将该节点添加到结果中
|
|
|
+ $result[] = $node['id'];
|
|
|
+ // 递归查询该节点的所有子孙节点,并将结果合并到结果数组中
|
|
|
+ $result = array_merge($result, self::getAllIds($data, $node['id']));
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ return $result;
|
|
|
}
|
|
|
}
|