Browse Source

飞书同步通讯录修改

Min 1 year ago
parent
commit
530f810c52

+ 104 - 66
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/FeishuInfoController.java

@@ -815,11 +815,13 @@ public class FeishuInfoController {
         HttpRespMsg msg=new HttpRespMsg();
         Integer companyId = userMapper.selectById(request.getHeader("token")).getCompanyId();
         FeishuInfo feishuInfo = feishuInfoMapper.selectOne(new LambdaQueryWrapper<FeishuInfo>().eq(FeishuInfo::getCompanyId, companyId));
+        List<User> allUserList = userMapper.selectList(new LambdaQueryWrapper<User>().eq(User::getCompanyId, companyId));
         String corpId = feishuInfo.getCorpid();
         if(feishuInfo==null){
             msg.setData("飞书配置暂未完成,请联系服务商");
             return msg;
         }
+        SysRole role = sysRoleMapper.selectOne(new QueryWrapper<SysRole>().eq("company_id",feishuInfo.getCompanyId()).eq("rolename","普通员工"));
         //获取应用可用范围内的部门
         Map<String, Object> availableRange = feishuInfoService.getAvailableRange(feishuInfo, null);
         JSONArray deptArray = (JSONArray) availableRange.get("department_ids");
@@ -835,35 +837,75 @@ public class FeishuInfoController {
                 departmentInfoArrays.addAll(subDepartmentList);
             }
         }
-        for (int j = 0; j < departmentInfoArrays.size(); j++) {
-            JSONObject ob = departmentInfoArrays.getJSONObject(j);
+        //todo:处理部门
+        JSONArray departmentArray = departmentInfoArrays;
+        JSONArray allNeedTodo=new JSONArray();
+        allNeedTodo.addAll(departmentArray);
+        for (int i = 0; i < departmentArray.size(); i++) {
+            JSONObject ob = departmentArray.getJSONObject(i);
+            JSONArray jsonArray = getSubDepartmentList(feishuInfo, ob.getString("open_department_id"));
+            if(jsonArray!=null&&jsonArray.size()>0){
+                allNeedTodo.addAll(jsonArray);
+            }
+        }
+        List<Department> departmentList=new ArrayList<>();
+        List<DepartmentFeishu> departmentFeishuList=new ArrayList<>();
+        for (int j = 0; j < allNeedTodo.size(); j++) {
+            JSONObject ob = allNeedTodo.getJSONObject(j);
             String departmentName = String.valueOf(ob.get("name"));
             System.out.println("synchronizationDP========="+departmentName);
             String departmentId = String.valueOf(ob.getString("department_id"));
             String openDepartmentId = String.valueOf(ob.getString("open_department_id"));
             String departmentParentId =String.valueOf(ob.getString("parent_department_id"));
-            Integer cut = departmentFeishuMapper.selectCount(new QueryWrapper<DepartmentFeishu>().eq("corpid",corpId).eq("feishu_deptid",departmentId));
+            JSONArray leaders = ob.getJSONArray("leaders");
+            Integer cut = departmentFeishuMapper.selectCount(new QueryWrapper<DepartmentFeishu>().eq("corpid",feishuInfo.getCorpid()).eq("feishu_deptid",departmentId));
             if(cut==0&&!departmentId.equals("0")){
                 System.out.println("join===========");
                 DepartmentFeishu departmentFeishu=new DepartmentFeishu();
-                departmentFeishu.setCorpid(corpId)
+                departmentFeishu.setCorpid(feishuInfo.getCorpid())
                         .setName(departmentName)
                         .setFeishuParentid(departmentParentId)
                         .setFeishuDeptid(departmentId)
                         .setFeishuOpenDeptid(openDepartmentId);
                 Department department = new Department();
-                department.setCompanyId(companyId);
+                department.setCompanyId(feishuInfo.getCompanyId());
                 department.setDepartmentName(departmentName);
                 department.setFeishuDeptid(openDepartmentId);
                 departmentMapper.insert(department);
+                List<DepartmentOtherManager> odList=new ArrayList<>();
+                if(leaders!=null&&leaders.size()>0){
+                    //todo:处理主要负责人
+                    Optional<Object> first = leaders.stream().filter(l -> ((JSONObject) l).getIntValue("leaderType") == 1).findFirst();
+                    if(first.isPresent()){
+                        JSONObject firstOb = (JSONObject) first.get();
+                        Optional<User> leaderID = allUserList.stream().filter(ul -> ul.getFeishuUserid().equals(firstOb.getString("leaderID"))).findFirst();
+                        if(leaderID.isPresent()){
+                            department.setManagerId(leaderID.get().getId());
+                        }
+                    }
+                    //todo:处理次要负责人
+                    List<Object> othObs = leaders.stream().filter(l -> ((JSONObject) l).getIntValue("leaderType") == 2).collect(Collectors.toList());
+                    for (Object othOb : othObs) {
+                        JSONObject oth = (JSONObject) othOb;
+                        Optional<User> leaderID = allUserList.stream().filter(ul -> ul.getFeishuUserid().equals(oth.getString("leaderID"))).findFirst();
+                        if(leaderID.isPresent()){
+                            DepartmentOtherManager departmentOtherManager=new DepartmentOtherManager();
+                            departmentOtherManager.setCompanyId(feishuInfo.getCompanyId());
+                            departmentOtherManager.setDepartmentId(department.getDepartmentId());
+                            departmentOtherManager.setOtherManagerId(leaderID.get().getId());
+                            odList.add(departmentOtherManager);
+                        }
+                    }
+                }
+                departmentMapper.updateById(department);
+                departmentList.add(department);
                 departmentFeishu.setSysDeptid(department.getDepartmentId());
                 departmentFeishuMapper.insert(departmentFeishu);
+                departmentFeishuList.add(departmentFeishu);
+                departmentOtherManagerService.saveBatch(odList);
             }
         }
-        SysRole role = sysRoleMapper.selectOne(new QueryWrapper<SysRole>().eq("company_id", companyId).eq("rolename","普通员工"));
-        List<Department> departmentList = departmentMapper.selectList(new QueryWrapper<Department>().eq("company_id", companyId));
-        List<DepartmentFeishu> departmentFeishuList = departmentFeishuMapper.selectList(new QueryWrapper<DepartmentFeishu>().eq("corpid", corpId));
-        List<User> userList=new ArrayList<>();
+        List<User> newUserList=new ArrayList<>();
         for (DepartmentFeishu departmentFeishu : departmentFeishuList) {
             Optional<Department> first = departmentList.stream().filter(dl -> dl.getDepartmentId().equals(departmentFeishu.getSysDeptid())).findFirst();
             //获取到当前部门的上级部门
@@ -888,70 +930,66 @@ public class FeishuInfoController {
                 }
                 List<String> departments = (List<String>) userJson.get("department_ids");
                 System.out.println("user info======:"+userJson.toString());
-                //不存在的人员, 进行插入
-                User user = new User();
-                //在当前部门下的员工
-                user.setId(SnowFlake.nextId()+"")
-                        .setRoleId(role.getId())//默认普通员工
-                        .setRoleName(role.getRolename())
-                        .setCompanyId(companyId)
-                        .setName(userJson.getString("name"))
-                        .setFeishuUserid(openUserid)
-                        .setColor(ColorUtil.randomColor())
-                        .setJobNumber(curUserid)
-                        .setPassword(MD5Util.getPassword("000000"))
-                        .setFeishuDeptid(departmentFeishu.getFeishuDeptid());
-                String max = departments.get(0);
-                Optional<DepartmentFeishu> dpFs = departmentFeishuList.stream().filter(dl -> dl.getFeishuOpenDeptid().equals(max)).findFirst();
-                if(dpFs.isPresent()){
-                    Optional<Department> dp = departmentList.stream().filter(dl -> dl.getDepartmentId().equals(dpFs.get().getSysDeptid())).findFirst();
-                    if(dp.isPresent()){
-                        user.setDepartmentName(dp.get().getDepartmentName());
-                        user.setDepartmentId(dp.get().getDepartmentId());
-                        user.setDepartmentCascade(convertDepartmentIdToCascade(dp.get().getDepartmentId(),departmentList));
-                    }
-                }
-                boolean b = userList.stream().anyMatch(ul ->ul.getFeishuUserid()!=null&&ul.getFeishuUserid().equals(user.getFeishuUserid()));
+                boolean b = allUserList.stream().anyMatch(al -> al.getFeishuUserid() != null && al.getFeishuUserid().equals(userJson.getString("open_id")));
                 if(!b){
-                    userList.add(user);
+                    //不存在的人员, 进行插入
+                    User user = new User();
+                    //在当前部门下的员工
+                    user.setId(SnowFlake.nextId()+"")
+                            .setRoleId(role.getId())//默认普通员工
+                            .setRoleName(role.getRolename())
+                            .setCompanyId(feishuInfo.getCompanyId())
+                            .setName(userJson.getString("name"))
+                            .setFeishuUserid(openUserid)
+                            .setColor(ColorUtil.randomColor())
+                            .setJobNumber(curUserid)
+                            .setPassword(MD5Util.getPassword("000000"))
+                            .setFeishuDeptid(departmentFeishu.getFeishuDeptid());
+                    String max = departments.get(0);
+                    Optional<DepartmentFeishu> dpFs = departmentFeishuList.stream().filter(dl -> dl.getFeishuOpenDeptid().equals(max)).findFirst();
+                    if(dpFs.isPresent()){
+                        Optional<Department> dp = departmentList.stream().filter(dl -> dl.getDepartmentId().equals(dpFs.get().getSysDeptid())).findFirst();
+                        if(dp.isPresent()){
+                            user.setDepartmentName(dp.get().getDepartmentName());
+                            user.setDepartmentId(dp.get().getDepartmentId());
+                            user.setDepartmentCascade(convertDepartmentIdToCascade(dp.get().getDepartmentId(),departmentList));
+                        }
+                    }
+                    boolean c = newUserList.stream().anyMatch(ul ->ul.getFeishuUserid()!=null&&ul.getFeishuUserid().equals(user.getFeishuUserid()));
+                    if(!c){
+                        newUserList.add(user);
+                    }
                 }
             }
         }
+        //todo:处理人员
         //获取应用可用范围内的人员
-        JSONArray userArray = (JSONArray) availableRange.get("user_ids");
-        for (int i = 0; i < userArray.size(); i++) {
-            String userId = userArray.getString(i);
-            JSONObject userInfo = feishuInfoService.getUserInfo(feishuInfo, userId);
-            List<String> departments = (List<String>) userInfo.get("department_ids");
-            //不存在的人员, 进行插入
-            User user = new User();
-            //在当前部门下的员工
-            String max = departments.get(0);
-            user.setId(SnowFlake.nextId()+"")
-                    .setRoleId(role.getId())//默认普通员工
-                    .setRoleName(role.getRolename())
-                    .setCompanyId(companyId)
-                    .setName(userInfo.getString("name"))
-                    .setFeishuUserid(userInfo.getString("open_id"))
-                    .setColor(ColorUtil.randomColor())
-                    .setJobNumber(userInfo.getString("user_id"))
-                    .setPassword(MD5Util.getPassword("000000"))
-                    .setFeishuDeptid(max);
-            Optional<DepartmentFeishu> dpFs = departmentFeishuList.stream().filter(dl -> dl.getFeishuDeptid().equals(max)).findFirst();
-            if(dpFs.isPresent()){
-                Optional<Department> dp = departmentList.stream().filter(dl -> dl.getDepartmentId().equals(dpFs.get().getSysDeptid())).findFirst();
-                user.setDepartmentName(dp.get().getDepartmentName());
-                user.setDepartmentId(dp.get().getDepartmentId());
-                user.setDepartmentCascade(convertDepartmentIdToCascade(dp.get().getDepartmentId(),departmentList));
-            }
-            boolean b = userList.stream().anyMatch(ul ->ul.getFeishuUserid()!=null&&ul.getFeishuUserid().equals(user.getFeishuUserid()));
-            if(!b){
-                userList.add(user);
+        JSONArray userArrays = (JSONArray) availableRange.get("user_ids");
+        if(userArrays!=null&&userArrays.size()>0){
+            for (int i = 0; i < userArrays.size(); i++) {
+                JSONObject userOb = userArrays.getJSONObject(i);
+                boolean b = allUserList.stream().anyMatch(al -> al.getFeishuUserid() != null && al.getFeishuUserid().equals(userOb.getString("open_id")));
+                if(!b){
+                    //不存在的人员, 进行插入
+                    User user = new User();
+                    user.setId(SnowFlake.nextId()+"")
+                            .setRoleId(role.getId())//默认普通员工
+                            .setRoleName(role.getRolename())
+                            .setCompanyId(feishuInfo.getCompanyId())
+                            .setName(userOb.getString("name"))
+                            .setFeishuUserid(userOb.getString("open_id"))
+                            .setColor(ColorUtil.randomColor())
+                            .setJobNumber(userOb.getString("user_id"))
+                            .setPassword(MD5Util.getPassword("000000"));
+                    boolean c = newUserList.stream().anyMatch(ul ->ul.getFeishuUserid()!=null&&ul.getFeishuUserid().equals(user.getFeishuUserid()));
+                    if(!c){
+                        newUserList.add(user);
+                    }
+                }
             }
         }
-        System.out.println("resutlList========="+userList);
-        if (userList.size()>0) {
-            userService.saveBatch(userList);
+        if(newUserList.size()>0){
+            userService.saveBatch(newUserList);
         }
         return msg;
     }

+ 1 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/FeishuInfoServiceImpl.java

@@ -184,6 +184,7 @@ public class FeishuInfoServiceImpl extends ServiceImpl<FeishuInfoMapper, FeishuI
                 MediaType type = MediaType.parseMediaType("application/json; charset=UTF-8");
                 headers.setContentType(type);
                 headers.add("Authorization","Bearer "+getTenantAccessToken(feishuInfo.getAppId()));
+                System.out.println("headers==================>"+headers);
                 HttpEntity<JSONObject> httpEntity = new HttpEntity<>(null, headers);
                 Map<String,Object> map=new HashMap<>();
                 map.put("page_size",50);