fuliqi
2023-12-18 f11afb84d32ed6d2b582ed193db2f9805cd365ec
ycl-platform/src/main/java/com/ycl/timer/GetDingUserOrgTimer.java
@@ -23,6 +23,7 @@
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;
@@ -33,10 +34,7 @@
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
@@ -52,11 +50,11 @@
    @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
@@ -72,121 +70,138 @@
    @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();
    }
    /**
@@ -204,6 +219,6 @@
    @Override
    public void run(ApplicationArguments args) throws Exception {
        // run();
//         run();
    }
}