【企业微信对接开发】获取部门负责人及其子部门信息

前言

在企微对接开发中,再做企业组织架构管理的时候,需要根据某个成员 id 查询他所负责的所有部门、子部门以及相对应的成员信息。

一、使用场景

根据成员权限,给于对应的部门、成员。

二、获取步骤

1.查询所有部门

值得注意的是:员工负责的部门可能是多个

// 查找该用户在企微中,设置为部门负责人的部门
        $dept = Department::where($where)->select();
        // 这里注意员工负责的部门可能是多个
        if(count($dept) === 1){
            // 只负责一个部门
            // 本部门
            $dept1 = collection($dept)->toarray();    // 对象转数组
            // 子部门
            $dept2 = [];    // 递归查询子部门
            $departments = Department::select();
            $deptid = $dept1[0]['id'];
            $dept2 = self::getSubdepartments($deptid,$departments);
            $alldeptlist = array_merge($dept1,$dept2);
        }else{
            // 负责多个部门
            // 本部门
            $dept1 = collection($dept)->toarray();   // 对象转数组
            // 子部门
            $dept2 = [];  // 递归查询子部门
            $departments = Department::select();    // 所有部门信息,传参用
            foreach ($dept as $val){
                // 遍历每个负责部门的id
                $deptid = $val->id;
                // 递归查询子部门
                $getSubdepartments = self::getSubdepartments($deptid,$departments);
                if($getSubdepartments){
                    // 如果找到了子部门,加进去子部门的数组里面去
                    $dept2[] = $getSubdepartments;
                }
            }
            // 本部门、子部门合并
            $alldeptlist = array_merge($dept1,$dept2);

2.查询成员

代码如下(示例):

//划个重点//
        // 根据所有部门信息查询成员(如果上面所有部门查不准,所有员工信息自然也不全了)
        $allstafflist = [];
        foreach ($alldeptlist as $val){
            $depts = array_map(function($item){
                return $item['id'];
            },$alldeptlist);
            foreach ($depts as $deptid){
                $ygarr = Staff::field('id,name,department,userid as staffid')
                        ->where("FIND_IN_SET({$deptid},department)")
                        ->select();
                if($ygarr){
                    // 这个部门是有员工的
                    $allstafflist[$deptid] = $ygarr;
                }else{
                    // 这个部门也可能是没有员工的
                    $allstafflist[$deptid] = [];
                }
            }
        }

返回的数据格式:

3.递归查询

代码如下(示例):

   public static function getSubdepartments($departmentId, $departments) {
        $output = array();
        foreach ($departments as $department) {
            if ($department['parent_id'] == $departmentId) {
                $output[] = $department;
                $subdepartments = self::getSubdepartments($department['id'], $departments);
                if (!empty($subdepartments)) {
                    $output = array_merge($output, $subdepartments);
                }
            }
        }
        return $output;
    }

参数:1、部门 id;2、所有部门信息;


总结

整体思路还是部门层级关系的数据获取,说简单也不简单,涉及一定逻辑在里面。记录一下。

  • 7
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值