|
|
@@ -293,4 +293,250 @@ public class DDImplClient_Contacts implements DDClient_Contacts {
|
|
|
Map body = UtilMap.map("joinCorpId, grantDeptIdList", joinCorpId, grantDeptIdList);
|
|
|
DDR_New.doPost("https://api.dingtalk.com/v1.0/contact/orgAccounts/multiOrgPermissions/auth", DDConf.initTokenHeader(access_token), null, body).getResult();
|
|
|
}
|
|
|
+
|
|
|
+ // ================================================================================
|
|
|
+ // v2 对齐方法(capability: dingtalk-contacts-v2)
|
|
|
+ // 统一模板:param = {access_token}; body 按 §3.4.2 必填显式 + body_ext 透传
|
|
|
+ // ================================================================================
|
|
|
+
|
|
|
+ private static final String OAPI = "https://oapi.dingtalk.com";
|
|
|
+
|
|
|
+ /** 统一构造含 access_token 的 param map */
|
|
|
+ private Map qs(String access_token) {
|
|
|
+ return UtilMap.map("access_token", access_token);
|
|
|
+ }
|
|
|
+
|
|
|
+ /** 合并 body 与 body_ext(body_ext 不覆盖显式字段)*/
|
|
|
+ private Map merge(Map body, Map body_ext) {
|
|
|
+ if (body_ext == null || body_ext.isEmpty()) {
|
|
|
+ return body;
|
|
|
+ }
|
|
|
+ for (Object k : body_ext.keySet()) {
|
|
|
+ if (!body.containsKey(k)) {
|
|
|
+ body.put(k, body_ext.get(k));
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return body;
|
|
|
+ }
|
|
|
+
|
|
|
+ // ============================= 用户管理 User =============================
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public Map createUser_v2(String access_token, String name, String mobile, List<String> dept_id_list, Map body_ext) {
|
|
|
+ Map body = new java.util.HashMap();
|
|
|
+ body.put("name", name);
|
|
|
+ body.put("mobile", mobile);
|
|
|
+ body.put("dept_id_list", dept_id_list == null ? "" : String.join(",", dept_id_list));
|
|
|
+ merge(body, body_ext);
|
|
|
+ return (Map) DDR.doPost(OAPI + "/topapi/v2/user/create", null, qs(access_token), body).getResult();
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public Map updateUser(String access_token, String userid, Map body_ext) {
|
|
|
+ Map body = new java.util.HashMap();
|
|
|
+ body.put("userid", userid);
|
|
|
+ merge(body, body_ext);
|
|
|
+ return (Map) DDR.doPost(OAPI + "/topapi/v2/user/update", null, qs(access_token), body).getResult();
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public Map getUser_v2(String access_token, String userid, Map body_ext) {
|
|
|
+ Map body = new java.util.HashMap();
|
|
|
+ body.put("userid", userid);
|
|
|
+ merge(body, body_ext);
|
|
|
+ return (Map) DDR.doPost(OAPI + "/topapi/v2/user/get", null, qs(access_token), body).getResult();
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public Map getUserByMobile_v2(String access_token, String mobile, Map body_ext) {
|
|
|
+ Map body = new java.util.HashMap();
|
|
|
+ body.put("mobile", mobile);
|
|
|
+ merge(body, body_ext);
|
|
|
+ return (Map) DDR.doPost(OAPI + "/topapi/v2/user/getbymobile", null, qs(access_token), body).getResult();
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public Map listUsersSimple(String access_token, long dept_id, Map body_ext) {
|
|
|
+ Map body = new java.util.HashMap();
|
|
|
+ body.put("dept_id", dept_id);
|
|
|
+ merge(body, body_ext);
|
|
|
+ return (Map) DDR.doPost(OAPI + "/topapi/user/listsimple", null, qs(access_token), body).getResult();
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public Map listDeptUserDetail_v2(String access_token, long dept_id, Map body_ext) {
|
|
|
+ Map body = new java.util.HashMap();
|
|
|
+ body.put("dept_id", dept_id);
|
|
|
+ merge(body, body_ext);
|
|
|
+ return (Map) DDR.doPost(OAPI + "/topapi/v2/user/list", null, qs(access_token), body).getResult();
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public Map listInactiveUsers(String access_token, boolean is_active, long offset, long size, Map body_ext) {
|
|
|
+ Map body = new java.util.HashMap();
|
|
|
+ body.put("is_active", is_active);
|
|
|
+ body.put("offset", offset);
|
|
|
+ body.put("size", size);
|
|
|
+ merge(body, body_ext);
|
|
|
+ return (Map) DDR.doPost(OAPI + "/topapi/inactive/user/v2/get", null, qs(access_token), body).getResult();
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public Map getUserByUnionId(String access_token, String union_id, Map body_ext) {
|
|
|
+ Map body = new java.util.HashMap();
|
|
|
+ body.put("unionid", union_id);
|
|
|
+ merge(body, body_ext);
|
|
|
+ return (Map) DDR.doPost(OAPI + "/topapi/user/getbyunionid", null, qs(access_token), body).getResult();
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public Map listAdmins(String access_token) {
|
|
|
+ return (Map) DDR.doPost(OAPI + "/topapi/user/get_admin", null, qs(access_token), new java.util.HashMap()).getResult();
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public Map listDimissionEmployees_v2(String access_token, long offset, long size, Map body_ext) {
|
|
|
+ Map body = new java.util.HashMap();
|
|
|
+ body.put("offset", offset);
|
|
|
+ body.put("size", size);
|
|
|
+ merge(body, body_ext);
|
|
|
+ return (Map) DDR.doPost(OAPI + "/topapi/smartwork/hrm/employee/listdimission", null, qs(access_token), body).getResult();
|
|
|
+ }
|
|
|
+
|
|
|
+ // ============================= 部门管理 Department =============================
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public Map createDepartment_v2(String access_token, String name, long parent_id, Map body_ext) {
|
|
|
+ Map body = new java.util.HashMap();
|
|
|
+ body.put("name", name);
|
|
|
+ body.put("parent_id", parent_id);
|
|
|
+ merge(body, body_ext);
|
|
|
+ return (Map) DDR.doPost(OAPI + "/topapi/v2/department/create", null, qs(access_token), body).getResult();
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public Map updateDepartment(String access_token, long dept_id, Map body_ext) {
|
|
|
+ Map body = new java.util.HashMap();
|
|
|
+ body.put("dept_id", dept_id);
|
|
|
+ merge(body, body_ext);
|
|
|
+ return (Map) DDR.doPost(OAPI + "/topapi/v2/department/update", null, qs(access_token), body).getResult();
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public Boolean deleteDepartment(String access_token, long dept_id, Map body_ext) {
|
|
|
+ Map body = new java.util.HashMap();
|
|
|
+ body.put("dept_id", dept_id);
|
|
|
+ merge(body, body_ext);
|
|
|
+ DDR r = DDR.doPost(OAPI + "/topapi/v2/department/delete", null, qs(access_token), body);
|
|
|
+ return r != null && r.isSuccess();
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public Map getDepartment_v2(String access_token, long dept_id, Map body_ext) {
|
|
|
+ Map body = new java.util.HashMap();
|
|
|
+ body.put("dept_id", dept_id);
|
|
|
+ merge(body, body_ext);
|
|
|
+ return (Map) DDR.doPost(OAPI + "/topapi/v2/department/get", null, qs(access_token), body).getResult();
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public List<Map> listSubDepartments_v2(String access_token, long dept_id, Map body_ext) {
|
|
|
+ Map body = new java.util.HashMap();
|
|
|
+ body.put("dept_id", dept_id);
|
|
|
+ merge(body, body_ext);
|
|
|
+ Object result = DDR.doPost(OAPI + "/topapi/v2/department/listsub", null, qs(access_token), body).getResult();
|
|
|
+ return result instanceof List ? (List<Map>) result : new ArrayList<>();
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public Map listParentByDept(String access_token, long dept_id, Map body_ext) {
|
|
|
+ Map body = new java.util.HashMap();
|
|
|
+ body.put("dept_id", dept_id);
|
|
|
+ merge(body, body_ext);
|
|
|
+ return (Map) DDR.doPost(OAPI + "/topapi/v2/department/listparentbydept", null, qs(access_token), body).getResult();
|
|
|
+ }
|
|
|
+
|
|
|
+ // ============================= 角色管理 Role =============================
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public Map addRole(String access_token, String roleName, long groupId) {
|
|
|
+ Map body = UtilMap.map("roleName, groupId", roleName, groupId);
|
|
|
+ return (Map) DDR.doPost(OAPI + "/topapi/role/add_role", null, qs(access_token), body).getResult();
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public Boolean updateRole(String access_token, long roleId, String roleName) {
|
|
|
+ Map body = UtilMap.map("roleId, roleName", roleId, roleName);
|
|
|
+ DDR r = DDR.doPost(OAPI + "/topapi/role/update_role", null, qs(access_token), body);
|
|
|
+ return r != null && r.isSuccess();
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public Boolean deleteRole(String access_token, long role_id) {
|
|
|
+ Map body = UtilMap.map("role_id", role_id);
|
|
|
+ DDR r = DDR.doPost(OAPI + "/topapi/role/deleterole", null, qs(access_token), body);
|
|
|
+ return r != null && r.isSuccess();
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public Map listRoles(String access_token, Map body_ext) {
|
|
|
+ Map body = new java.util.HashMap();
|
|
|
+ merge(body, body_ext);
|
|
|
+ return (Map) DDR.doPost(OAPI + "/topapi/role/list", null, qs(access_token), body).getResult();
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public Map getRole(String access_token, long roleId) {
|
|
|
+ Map body = UtilMap.map("roleId", roleId);
|
|
|
+ return (Map) DDR.doPost(OAPI + "/topapi/role/getrole", null, qs(access_token), body).getResult();
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public Map listRoleEmployees(String access_token, long role_id, long size, long offset) {
|
|
|
+ Map body = UtilMap.map("role_id, size, offset", role_id, size, offset);
|
|
|
+ return (Map) DDR.doPost(OAPI + "/topapi/role/simplelist", null, qs(access_token), body).getResult();
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public Boolean addRolesForEmps(String access_token, String roleIds, String userIds) {
|
|
|
+ Map body = UtilMap.map("roleIds, userIds", roleIds, userIds);
|
|
|
+ DDR r = DDR.doPost(OAPI + "/topapi/role/addrolesforemps", null, qs(access_token), body);
|
|
|
+ return r != null && r.isSuccess();
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public Boolean removeRolesForEmps(String access_token, String roleIds, String userIds) {
|
|
|
+ Map body = UtilMap.map("roleIds, userIds", roleIds, userIds);
|
|
|
+ DDR r = DDR.doPost(OAPI + "/topapi/role/removerolesforemps", null, qs(access_token), body);
|
|
|
+ return r != null && r.isSuccess();
|
|
|
+ }
|
|
|
+
|
|
|
+ // ============================= 员工字段隐藏 EmployeeField =============================
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public Map upsertHideField(String access_token, String name, String field, String userIds, String deptIds, Map body_ext) {
|
|
|
+ Map body = new java.util.HashMap();
|
|
|
+ body.put("name", name);
|
|
|
+ body.put("field", field);
|
|
|
+ if (userIds != null) body.put("userids", userIds);
|
|
|
+ if (deptIds != null) body.put("dept_ids", deptIds);
|
|
|
+ merge(body, body_ext);
|
|
|
+ return (Map) DDR.doPost(OAPI + "/topapi/hide_field/add_or_update", null, qs(access_token), body).getResult();
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public Boolean removeHideField(String access_token, long id) {
|
|
|
+ Map body = UtilMap.map("id", id);
|
|
|
+ DDR r = DDR.doPost(OAPI + "/topapi/hide_field/remove", null, qs(access_token), body);
|
|
|
+ return r != null && r.isSuccess();
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public Map listHideFields(String access_token, long size, long offset, Map body_ext) {
|
|
|
+ Map body = new java.util.HashMap();
|
|
|
+ body.put("size", size);
|
|
|
+ body.put("offset", offset);
|
|
|
+ merge(body, body_ext);
|
|
|
+ return (Map) DDR.doPost(OAPI + "/topapi/hide_field/query", null, qs(access_token), body).getResult();
|
|
|
+ }
|
|
|
}
|