public void dingTalkUser(String key) { // 获取access_token,注意正式代码要有异常流处理 ExternalAccessConfig config = getSystemConfig();//获取钉钉配置的方法,需要自行实现 if (null == config) { if(redisTemplate.hasKey(key)){ redisTemplate.delete(key); } //return ResponseVo.fail("登录失败,获取系统配置参数失败!"); } else { redisTemplate.opsForValue().set(key, key, 10, TimeUnit.MINUTES); String comName = config.getExtFileName(); // 查询得到当前用户的userId // 获得到userId之后应用应该处理应用自身的登录会话管理(session),避免后续的业务交互(前端到应用服务端)每次都要重新获取用户身份,提升用户体验 String access_token = null; try { access_token = DingTalkAccessUtil.getToken(config.getExtAppId(), config.getExtSecret()); LOGGER.info("access_token={}, appKey={}, appSecret={}", access_token, config.getExtAppId(), config.getExtSecret()); DeptDto departmentSubIdDto = DingTalkAccessUtil.getDepartmentListSubId(config.getExtAppId(), config.getExtSecret()); if (null != departmentSubIdDto.getResult()) { List<Long> list = departmentSubIdDto.getResult().getDept_id_list(); LOGGER.info("========================> " + list.toString()); List<UserTesultDto> userlist = new ArrayList<>(); for (Long deptId : list) { DeptUserDto userList = DingTalkAccessUtil.getUserListIdByDeptId(config.getExtAppId(), config.getExtSecret(), deptId.toString()); DeptUserDto deptInfo = DingTalkAccessUtil.getDeptInfoByDeptId(access_token, deptId); String deptName = null; if (null != deptInfo.getResult() && deptInfo.getErrcode() == 0) { deptName = deptInfo.getResult().getName(); } else { LOGGER.error("========================> " + deptInfo.getErrmsg()); } for (String userId : userList.getResult().getUserid_list()) { DeptUserDto userDto = DingTalkAccessUtil.getUerDetailByUserId(access_token, userId); if (null != userDto.getResult()) { userDto.getResult().setWork_place(deptName); //LOGGER.info(deptName + "========================> " + userDto.getResult().toString()); userlist.add(userDto.getResult()); } } } //钉钉用户数据入库 for (UserTesultDto userTesultDto : userlist) { String name = userTesultDto.getName(); UserInfo userInfo = new UserInfo(); if ("admin".equalsIgnoreCase(userInfo.getUserName()) || "admin".equalsIgnoreCase(userInfo.getUserShortName())) { continue; } if (StringUtils.isNotEmpty(name)) { UserInfoVO vo = findById(userTesultDto.getUserid()); UserInfoVO v1 = findOne(name, null); if (null != v1 && vo == null) { Random random = new Random(); int ends = random.nextInt(99); String prefix = String.format("%02d", ends); name = name + prefix; } if (vo != null) { name = vo.getUserNotesName(); } userInfo.setUserName(userTesultDto.getMobile());//登录用户名--用手机号 userInfo.setUserShortName(userTesultDto.getMobile());//登录用户名--用手机号 userInfo.setUserNotesName(name);// 真实姓名 userInfo.setUserEmpId(userTesultDto.getJob_number()); // if (!StringUtil.isEmpty(userTesultDto.getEmail())) { // userInfo.setUserInMail(userTesultDto.getEmail()); // } if (!StringUtil.isEmpty(userTesultDto.getOrg_email())) {//企业邮箱 userInfo.setUserInMail(userTesultDto.getOrg_email()); } userInfo.setId(userTesultDto.getUserid()); userInfo.setUserDeptPath(comName+ "\\" +userTesultDto.getWork_place());//部门名称 userInfo.setCompanyName(comName); //userInfo.setDeptCodePath(userDto.getOrgPath()); userInfo.setUserMobile(userTesultDto.getMobile()); try { this.save(userInfo); } catch (Exception e) { e.printStackTrace(); } } } } } catch (Exception e) { e.printStackTrace(); } } if(redisTemplate.hasKey(key)){ redisTemplate.delete(key); } }
public class UserTesultDto { /** * 部门用户id列表 */ private List<String> userid_list; //爱好 private String extension; //员工在当前开发者企业账号范围内的唯一标识 private String unionid; //是否为企业的老板 private boolean boss; //职位 private String title; //办公地点 private String work_place; //所属部门ID列表 private Object dept_id_list; //员工在对应的部门中的排序 private Object dept_order_list; //角色列表 private Object role_list; //员工工号 private String job_number; //邮箱 private String email; //企业邮箱,如果员工的企业邮箱没有开通,返回信息中不包含该数据。 private String org_email; //手机号码 private String mobile; //员工名称 private String name; //用户id private String userid; //是否激活了钉钉 private boolean active; //是否完成了钉钉实名认证 private boolean real_authed; }
public class DeptDto extends BaseDto{ /** * 部门id结果信息 */ private DeptTesultDto result; }
public class DeptTesultDto { /** * 部门id列表 */ private List<Long> dept_id_list; }
public class BaseDto { /** * 错误码 */ private int errcode; /** * 错误信息 */ private String errmsg; /** * 请求id */ private String request_id; }