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;
}