package com.ycl.timer;
|
|
import cn.hutool.core.collection.CollUtil;
|
import cn.hutool.core.date.DateUtil;
|
import cn.hutool.core.date.TimeInterval;
|
import cn.hutool.core.util.ObjectUtil;
|
import com.alibaba.excel.util.StringUtils;
|
import com.alibaba.fastjson.JSONArray;
|
import com.alibaba.fastjson.JSONObject;
|
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
|
import com.baomidou.mybatisplus.extension.service.IService;
|
import com.ycl.common.dingding.DingCommon;
|
import com.ycl.entity.depart.UmsDepart;
|
import com.ycl.entity.dingding.DingUserInfo;
|
import com.ycl.entity.user.UmsAdmin;
|
import com.ycl.entity.user.UmsAdminRoleRelation;
|
import com.ycl.entity.user.UmsDepartManage;
|
import com.ycl.entity.user.UmsRole;
|
import com.ycl.service.depart.UmsDepartService;
|
import com.ycl.service.user.UmsAdminRoleRelationService;
|
import com.ycl.service.user.UmsAdminService;
|
import com.ycl.service.user.UmsDepartManageService;
|
import com.ycl.service.user.UmsRoleService;
|
import lombok.extern.slf4j.Slf4j;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.boot.ApplicationArguments;
|
import org.springframework.boot.ApplicationRunner;
|
import org.springframework.context.ApplicationListener;
|
import org.springframework.context.event.ContextRefreshedEvent;
|
import org.springframework.scheduling.annotation.Scheduled;
|
import org.springframework.security.crypto.password.PasswordEncoder;
|
import org.springframework.stereotype.Component;
|
import org.springframework.transaction.annotation.Transactional;
|
|
import java.time.LocalDateTime;
|
import java.util.*;
|
|
|
@Slf4j
|
@Component
|
public class GetDingUserOrgTimer implements ApplicationRunner, ApplicationListener<ContextRefreshedEvent> {
|
|
@Autowired
|
private DingCommon dingCommon;
|
|
private static final String TAG = "【浙政钉】用户体系:";
|
protected Thread.UncaughtExceptionHandler handler = (t, e) -> log.error("ding token parse events has an error", e);
|
|
|
@Override
|
public void onApplicationEvent(ContextRefreshedEvent contextRefreshedEvent) {
|
// if (contextRefreshedEvent.getApplicationContext().getParent() == null) {
|
// Thread thread = new Thread(this::run);
|
// thread.setUncaughtExceptionHandler(handler);
|
// thread.start();
|
// }
|
}
|
|
@Autowired
|
private UmsDepartService umsDepartService;
|
@Autowired
|
private UmsAdminService umsAdminService;
|
@Autowired
|
private UmsDepartManageService departManageService;
|
@Autowired
|
private UmsRoleService roleService;
|
@Autowired
|
private PasswordEncoder passwordEncoder;
|
@Autowired
|
private UmsAdminRoleRelationService umsAdminRoleRelationService;
|
|
@Scheduled(cron = "40 50 16 * * ?")
|
@Transactional(rollbackFor = Exception.class)
|
public void run() {
|
log.info("开始同步任务");
|
//获取全部部门code
|
JSONObject topObj = dingCommon.getBookAuthority();
|
//顶级部门id
|
log.info("部门code------------>{}",topObj.toJSONString());
|
JSONArray deptTopArr = topObj.getJSONArray("deptVisibleScopes");
|
List<UmsDepart> dingOrgList = dingCommon.getOrgInfo(deptTopArr);
|
|
//查询数据库中的部门
|
List<UmsDepart> dataOrgList = umsDepartService.list();
|
if(CollectionUtils.isNotEmpty(dingOrgList)) {
|
Iterator<UmsDepart> removeIterOrg = dingOrgList.iterator();
|
while (removeIterOrg.hasNext()) {
|
UmsDepart dingOrg = removeIterOrg.next();
|
if (dingOrg.getCode().equals(deptTopArr.getString(0))) {
|
dingOrg.setParentId(0L);
|
}
|
//判断
|
for (UmsDepart org : dataOrgList) {
|
if (ObjectUtil.equals(org.getId(), dingOrg.getId()) && ObjectUtil.equals(org.getDepartName(), dingOrg.getDepartName()) && ObjectUtil.equals(org.getParentId(), dingOrg.getParentId())) {
|
removeIterOrg.remove();
|
}
|
}
|
}
|
//此时 dingOrgList 中剩下的就是新的组织机构了。
|
dingOrgList.forEach(dingOrg -> {
|
if (dingOrg.getCode().equals(deptTopArr.getString(0))) {
|
dingOrg.setParentId(0L);
|
}
|
//umsDepartService.fillPids(dingOrg);
|
dingOrg.setStatus((short) 1);
|
umsDepartService.saveOrUpdate(dingOrg);
|
});
|
}
|
// log.info(TAG + "update organization size " + dingOrgList.size());
|
TimeInterval timer = DateUtil.timer();
|
/**
|
// * 根据组织code 查询 通讯录人员信息
|
// */
|
//查询用户组织关联表
|
List<UmsDepartManage> empOrgList = departManageService.list();
|
//查询所有用户
|
Set<DingUserInfo> dingList = dingCommon.getPersonInfoByOrgCode();
|
Set<DingUserInfo> dingUsers = new HashSet<>(dingList);
|
log.info("dinglistStart----->{}",dingList);
|
List<UmsAdmin> userList = umsAdminService.list();
|
Iterator<DingUserInfo> iterator = dingUsers.iterator();
|
while (iterator.hasNext()) {
|
DingUserInfo dingUserInfo = iterator.next();
|
//判断用户是否存在,输出新用户
|
for (UmsAdmin user : userList) {
|
//判断姓名
|
if (ObjectUtil.equals(user.getId(), dingUserInfo.getUserId()) ) {
|
iterator.remove();
|
//判断组织
|
// for (UmsDepartManage emp : empOrgList) {
|
// if (ObjectUtil.equals(user.getId(), emp.getUserId()) && ObjectUtil.equals(dingUserInfo.getOrgId(), emp.getDepartId())) {
|
// iterator.remove();
|
// break;
|
// }
|
// }
|
}
|
}
|
}
|
|
|
log.info("dinglistEnd----->{}",dingUsers);
|
ArrayList<UmsAdminRoleRelation> relations = new ArrayList<>();
|
// log.info(TAG + " elapsed time:" + timer.interval());
|
for (DingUserInfo dingUserInfo : dingUsers) {
|
//1.添加用户
|
UmsAdmin user = new UmsAdmin();
|
//账号
|
user.setUsername(dingUserInfo.getEmployeeName());
|
//昵称
|
if (StringUtils.isNotBlank(dingUserInfo.getNickNameCn())) {
|
user.setNickName(dingUserInfo.getNickNameCn());
|
} else {
|
user.setNickName(dingUserInfo.getEmployeeName());
|
}
|
//code
|
//accountId
|
log.info("员工账户id{}",dingUserInfo.getAccountId());
|
user.setAccountId(dingUserInfo.getAccountId());
|
//头像
|
user.setIcon(dingUserInfo.getGovEmpAvatar());
|
//姓名
|
//性别
|
user.setSex(dingUserInfo.getEmpGender().byteValue());
|
//密码 获取初始密码
|
//将密码进行加密操作
|
String encodePassword = passwordEncoder.encode("123456");
|
user.setPassword(encodePassword);
|
user.setIsDy(Byte.parseByte("0"));
|
user.setMobile("");
|
user.setOpenid(dingUserInfo.getOpenid());
|
//id
|
user.setId(dingUserInfo.getUserId());
|
//状态为停用(不可用状态)点击登录后才能使用
|
user.setStatus(1);
|
umsAdminService.save(user);
|
// //员工信息,关联组织
|
// UmsDepartManage departManage = new UmsDepartManage();
|
// departManage.setDepartId(dingUserInfo.getOrgId());
|
// departManage.setIsLeader(0);
|
// departManage.setUserId(dingUserInfo.getUserId());
|
// departManageService.saveOrUpdate(departManage);
|
// //角色信息
|
// List<String> roleCode = dingUserInfo.getRoleCodeList();
|
// if (CollectionUtils.isNotEmpty(roleCode)) {
|
// List<UmsRole> roleList = roleService.getRoleListByCodes(roleCode);
|
// roleList.forEach(item -> {
|
// UmsAdminRoleRelation relation = new UmsAdminRoleRelation();
|
// relation.setAdminId(dingUserInfo.getUserId());
|
// relation.setRoleId(item.getId());
|
// relations.add(relation);
|
// });
|
// }
|
// }
|
// if (CollUtil.isNotEmpty(relations)) {
|
// umsAdminRoleRelationService.saveBatch(relations, IService.DEFAULT_BATCH_SIZE);
|
}
|
log.info("同步任务结束");
|
// log.info(TAG + "update user size " + dingList.size());
|
// getEmployeeAvatar();
|
}
|
|
/**
|
* 获取用户头像
|
*/
|
private void getEmployeeAvatar() {
|
// List<SysUser> users = sysUserService.list();
|
// for (SysUser user : users) {
|
// String mediaId = user.getDingAvatar();
|
// if (StrUtil.isNotBlank(mediaId)) {
|
// dingCommon.downloadEmployeeAvatar(mediaId);
|
// }
|
// }
|
}
|
|
@Override
|
public void run(ApplicationArguments args) throws Exception {
|
// run();
|
}
|
}
|