| | |
| | | import com.ycl.service.user.UmsRoleService; |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.beans.factory.annotation.Value; |
| | | import org.springframework.boot.ApplicationArguments; |
| | | import org.springframework.boot.ApplicationRunner; |
| | | import org.springframework.context.ApplicationListener; |
| | |
| | | import org.springframework.transaction.annotation.Transactional; |
| | | |
| | | import java.time.LocalDateTime; |
| | | import java.util.ArrayList; |
| | | import java.util.Iterator; |
| | | import java.util.List; |
| | | import java.util.Set; |
| | | import java.util.*; |
| | | |
| | | |
| | | @Slf4j |
| | |
| | | |
| | | @Override |
| | | public void onApplicationEvent(ContextRefreshedEvent contextRefreshedEvent) { |
| | | // if (contextRefreshedEvent.getApplicationContext().getParent() == null) { |
| | | // Thread thread = new Thread(this::run); |
| | | // thread.setUncaughtExceptionHandler(handler); |
| | | // thread.start(); |
| | | // } |
| | | // if (contextRefreshedEvent.getApplicationContext().getParent() == null) { |
| | | // Thread thread = new Thread(this::run); |
| | | // thread.setUncaughtExceptionHandler(handler); |
| | | // thread.start(); |
| | | // } |
| | | } |
| | | |
| | | @Autowired |
| | |
| | | @Autowired |
| | | private UmsAdminRoleRelationService umsAdminRoleRelationService; |
| | | |
| | | // @Scheduled(cron = "0 0 00 * * ?") |
| | | @Value("${spring.profiles.active}") |
| | | private String env; |
| | | |
| | | @Scheduled(cron = "0 00 00 * * ?") // 每天零点执行 |
| | | @Transactional(rollbackFor = Exception.class) |
| | | public void run() { |
| | | //获取全部部门code |
| | | JSONObject topObj = dingCommon.getBookAuthority(); |
| | | //顶级部门id |
| | | JSONArray deptTopArr = topObj.getJSONArray("deptVisibleScopes"); |
| | | List<UmsDepart> dingOrgList = dingCommon.getOrgInfo(deptTopArr); |
| | | //查询数据库中的部门 |
| | | List<UmsDepart> dataOrgList = umsDepartService.list(); |
| | | 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); |
| | | }); |
| | | if ("online".equals(env)) { |
| | | log.info("开始同步任务"); |
| | | //获取全部部门code |
| | | JSONObject topObj = dingCommon.getBookAuthority(); |
| | | //顶级部门id |
| | | log.info("部门code------------>{}", topObj.toJSONString()); |
| | | JSONArray deptTopArr = topObj.getJSONArray("deptVisibleScopes"); |
| | | List<UmsDepart> dingOrgList = dingCommon.getOrgInfo(deptTopArr); |
| | | |
| | | log.info(TAG + "update organization size " + dingOrgList.size()); |
| | | TimeInterval timer = DateUtil.timer(); |
| | | /** |
| | | // * 根据组织code 查询 通讯录人员信息 |
| | | // */ |
| | | Set<DingUserInfo> dingList = dingCommon.getPersonInfoByOrgCode(); |
| | | //查询所有用户 |
| | | List<UmsAdmin> userList = umsAdminService.list(); |
| | | //查询用户组织关联表 |
| | | List<UmsDepartManage> empOrgList = departManageService.list(); |
| | | Iterator<DingUserInfo> iterator = dingList.iterator(); |
| | | while (iterator.hasNext()) { |
| | | DingUserInfo dingUserInfo = iterator.next(); |
| | | //判断用户是否存在,输出新用户 |
| | | for (UmsAdmin user : userList) { |
| | | //判断姓名 |
| | | if (ObjectUtil.equals(user.getId(), dingUserInfo.getUserId()) ) { |
| | | iterator.remove(); |
| | | //判断组织 |
| | | //查询数据库中的部门 |
| | | 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 查询 通讯录人员信息 |
| | | // */ |
| | | //查询所有用户 |
| | | Set<DingUserInfo> dingList = dingCommon.getPersonInfoByOrgCode(); |
| | | Set<DingUserInfo> dingUsers = new HashSet<>(dingList); |
| | | |
| | | log.info("查询所有用户------->{}", dingUsers); |
| | | List<UmsAdmin> userList = umsAdminService.list(); |
| | | //查询用户组织关联表 |
| | | List<UmsDepartManage> empOrgList = departManageService.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; |
| | | // } |
| | | // } |
| | | } |
| | | } |
| | | } |
| | | } |
| | | ArrayList<UmsAdminRoleRelation> relations = new ArrayList<>(); |
| | | log.info(TAG + " elapsed time:" + timer.interval()); |
| | | for (DingUserInfo dingUserInfo : dingList) { |
| | | //1.添加用户 |
| | | UmsAdmin user = new UmsAdmin(); |
| | | //账号 |
| | | user.setUsername(dingUserInfo.getEmployeeName()); |
| | | //昵称 |
| | | if (StringUtils.isNotBlank(dingUserInfo.getNickNameCn())) { |
| | | user.setNickName(dingUserInfo.getNickNameCn()); |
| | | } else { |
| | | user.setNickName(dingUserInfo.getEmployeeName()); |
| | | |
| | | |
| | | 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 |
| | | 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); |
| | | }); |
| | | } |
| | | } |
| | | //code |
| | | //头像 |
| | | 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(); |
| | | } |
| | | if (CollUtil.isNotEmpty(relations)) { |
| | | umsAdminRoleRelationService.saveBatch(relations, IService.DEFAULT_BATCH_SIZE); |
| | | } |
| | | log.info(TAG + "update user size " + dingList.size()); |
| | | // getEmployeeAvatar(); |
| | | } |
| | | |
| | | /** |
| | |
| | | |
| | | @Override |
| | | public void run(ApplicationArguments args) throws Exception { |
| | | // run(); |
| | | // run(); |
| | | } |
| | | } |