Search in sources :

Example 1 with User

use of com.jeecg.qywx.api.user.vo.User in project jeecg-boot by jeecgboot.

the class ThirdAppWechatEnterpriseServiceImpl method deleteDepartRecursion.

// 递归删除部门以及子部门,由于企业微信不允许删除带有成员和子部门的部门,所以需要递归删除下子部门,然后把部门成员移动端根部门下
private void deleteDepartRecursion(List<JwDepartmentTreeVo> children, String accessToken, boolean ifLocal) {
    for (JwDepartmentTreeVo departmentTree : children) {
        String depId = departmentTree.getId();
        // 过滤根部门
        if (!"1".equals(depId)) {
            // 判断本地是否有该部门
            if (ifLocal) {
                LambdaQueryWrapper<SysDepart> queryWrapper = new LambdaQueryWrapper<>();
                queryWrapper.eq(SysDepart::getQywxIdentifier, depId);
                SysDepart sysDepart = sysDepartService.getOne(queryWrapper);
                // 本地有该部门,不删除
                if (sysDepart != null) {
                    if (departmentTree.hasChildren()) {
                        this.deleteDepartRecursion(departmentTree.getChildren(), accessToken, true);
                    }
                    continue;
                }
            }
            // 判断是否有成员,有就移动到根部门
            List<User> departUserList = JwUserAPI.getUsersByDepartid(depId, "1", null, accessToken);
            if (departUserList != null && departUserList.size() > 0) {
                for (User user : departUserList) {
                    User updateUser = new User();
                    updateUser.setUserid(user.getUserid());
                    updateUser.setDepartment(new Integer[] { 1 });
                    JwUserAPI.updateUser(updateUser, accessToken);
                }
            }
            // 有子部门优先删除子部门
            if (departmentTree.hasChildren()) {
                this.deleteDepartRecursion(departmentTree.getChildren(), accessToken, false);
            }
            // 执行删除操作
            JwDepartmentAPI.deleteDepart(depId, accessToken);
        }
    }
}
Also used : User(com.jeecg.qywx.api.user.vo.User) JwDepartmentTreeVo(org.jeecg.modules.system.vo.thirdapp.JwDepartmentTreeVo) LambdaQueryWrapper(com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper)

Example 2 with User

use of com.jeecg.qywx.api.user.vo.User in project jeecg-boot by jeecgboot.

the class ThirdAppWechatEnterpriseServiceImpl method syncLocalUserToThirdApp.

@Override
public SyncInfoVo syncLocalUserToThirdApp(String ids) {
    SyncInfoVo syncInfo = new SyncInfoVo();
    String accessToken = this.getAccessToken();
    if (accessToken == null) {
        syncInfo.addFailInfo("accessToken获取失败!");
        return syncInfo;
    }
    // 获取企业微信所有的用户
    List<User> qwUsers = JwUserAPI.getDetailUsersByDepartid("1", null, null, accessToken);
    if (qwUsers == null) {
        syncInfo.addFailInfo("企业微信用户列表查询失败!");
        return syncInfo;
    }
    List<SysUser> sysUsers;
    if (StringUtils.isNotBlank(ids)) {
        String[] idList = ids.split(",");
        LambdaQueryWrapper<SysUser> queryWrapper = new LambdaQueryWrapper<>();
        queryWrapper.in(SysUser::getId, (Object[]) idList);
        // 获取本地指定用户
        sysUsers = sysUserService.list(queryWrapper);
    } else {
        // 获取本地所有用户
        sysUsers = sysUserService.list();
    }
    // 循环判断新用户和需要更新的用户
    for1: for (SysUser sysUser : sysUsers) {
        // 外部模拟登陆临时账号,不同步
        if ("_reserve_user_external".equals(sysUser.getUsername())) {
            continue;
        }
        /*
             * 判断是否同步过的逻辑:
             * 1. 查询 sys_third_account(第三方账号表)是否有数据,如果有代表已同步
             * 2. 本地表里没有,就先用手机号判断,不通过再用username判断。
             */
        User qwUser;
        SysThirdAccount sysThirdAccount = sysThirdAccountService.getOneBySysUserId(sysUser.getId(), THIRD_TYPE);
        for (User qwUserTemp : qwUsers) {
            if (sysThirdAccount == null || oConvertUtils.isEmpty(sysThirdAccount.getThirdUserId()) || !sysThirdAccount.getThirdUserId().equals(qwUserTemp.getUserid())) {
                // sys_third_account 表匹配失败,尝试用手机号匹配
                String phone = sysUser.getPhone();
                if (!(oConvertUtils.isEmpty(phone) || phone.equals(qwUserTemp.getMobile()))) {
                    // 手机号匹配失败,再尝试用username匹配
                    String username = sysUser.getUsername();
                    if (!(oConvertUtils.isEmpty(username) || username.equals(qwUserTemp.getUserid()))) {
                        // username 匹配失败,直接跳到下一次循环继续
                        continue;
                    }
                }
            }
            // 循环到此说明用户匹配成功,进行更新操作
            qwUser = this.sysUserToQwUser(sysUser, qwUserTemp);
            int errCode = JwUserAPI.updateUser(qwUser, accessToken);
            // 收集错误信息
            this.syncUserCollectErrInfo(errCode, sysUser, syncInfo);
            this.thirdAccountSaveOrUpdate(sysThirdAccount, sysUser.getId(), qwUser.getUserid());
            // 更新完成,直接跳到下一次外部循环继续
            continue for1;
        }
        // 循环到此说明是新用户,直接调接口创建
        qwUser = this.sysUserToQwUser(sysUser);
        int errCode = JwUserAPI.createUser(qwUser, accessToken);
        // 收集错误信息
        boolean apiSuccess = this.syncUserCollectErrInfo(errCode, sysUser, syncInfo);
        if (apiSuccess) {
            this.thirdAccountSaveOrUpdate(sysThirdAccount, sysUser.getId(), qwUser.getUserid());
        }
    }
    return syncInfo;
}
Also used : SyncInfoVo(org.jeecg.modules.system.vo.thirdapp.SyncInfoVo) User(com.jeecg.qywx.api.user.vo.User) JSONObject(com.alibaba.fastjson.JSONObject) LambdaQueryWrapper(com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper)

Example 3 with User

use of com.jeecg.qywx.api.user.vo.User in project jeecg-boot by jeecgboot.

the class ThirdAppWechatEnterpriseServiceImpl method syncThirdAppUserToLocal.

@Override
public SyncInfoVo syncThirdAppUserToLocal() {
    SyncInfoVo syncInfo = new SyncInfoVo();
    String accessToken = this.getAccessToken();
    if (accessToken == null) {
        syncInfo.addFailInfo("accessToken获取失败!");
        return syncInfo;
    }
    // 获取企业微信所有的用户
    List<User> qwUsersList = JwUserAPI.getDetailUsersByDepartid("1", null, null, accessToken);
    if (qwUsersList == null) {
        syncInfo.addFailInfo("企业微信用户列表查询失败!");
        return syncInfo;
    }
    // 查询本地用户
    List<SysUser> sysUsersList = sysUserService.list();
    // 循环判断新用户和需要更新的用户
    for (User qwUser : qwUsersList) {
        /*
             * 判断是否同步过的逻辑:
             * 1. 查询 sys_third_account(第三方账号表)是否有数据,如果有代表已同步
             * 2. 本地表里没有,就先用手机号判断,不通过再用username判断。
             */
        SysThirdAccount sysThirdAccount = sysThirdAccountService.getOneByThirdUserId(qwUser.getUserid(), THIRD_TYPE);
        List<SysUser> collect = sysUsersList.stream().filter(user -> (qwUser.getMobile().equals(user.getPhone()) || qwUser.getUserid().equals(user.getUsername()))).collect(Collectors.toList());
        if (collect != null && collect.size() > 0) {
            SysUser sysUserTemp = collect.get(0);
            // 循环到此说明用户匹配成功,进行更新操作
            SysUser updateSysUser = this.qwUserToSysUser(qwUser, sysUserTemp);
            try {
                sysUserService.updateById(updateSysUser);
                String str = String.format("用户 %s(%s) 更新成功!", updateSysUser.getRealname(), updateSysUser.getUsername());
                syncInfo.addSuccessInfo(str);
            } catch (Exception e) {
                this.syncUserCollectErrInfo(e, qwUser, syncInfo);
            }
            this.thirdAccountSaveOrUpdate(sysThirdAccount, updateSysUser.getId(), qwUser.getUserid());
        // 更新完成,直接跳到下一次外部循环继续
        } else {
            // 没匹配到用户则走新增逻辑
            SysUser newSysUser = this.qwUserToSysUser(qwUser);
            try {
                sysUserService.save(newSysUser);
                String str = String.format("用户 %s(%s) 创建成功!", newSysUser.getRealname(), newSysUser.getUsername());
                syncInfo.addSuccessInfo(str);
            } catch (Exception e) {
                this.syncUserCollectErrInfo(e, qwUser, syncInfo);
            }
            this.thirdAccountSaveOrUpdate(sysThirdAccount, newSysUser.getId(), qwUser.getUserid());
        }
    }
    return syncInfo;
}
Also used : SyncInfoVo(org.jeecg.modules.system.vo.thirdapp.SyncInfoVo) ThirdLoginModel(org.jeecg.modules.system.model.ThirdLoginModel) StringUtils(org.apache.commons.lang.StringUtils) Arrays(java.util.Arrays) org.jeecg.modules.system.entity(org.jeecg.modules.system.entity) Autowired(org.springframework.beans.factory.annotation.Autowired) LambdaQueryWrapper(com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper) ArrayList(java.util.ArrayList) ThirdAppConfig(org.jeecg.config.thirdapp.ThirdAppConfig) JwDepartmentTreeVo(org.jeecg.modules.system.vo.thirdapp.JwDepartmentTreeVo) User(com.jeecg.qywx.api.user.vo.User) Service(org.springframework.stereotype.Service) org.jeecg.common.util.oConvertUtils(org.jeecg.common.util.oConvertUtils) TextEntity(com.jeecg.qywx.api.message.vo.TextEntity) org.jeecg.modules.system.service(org.jeecg.modules.system.service) AccessToken(com.jeecg.qywx.api.core.common.AccessToken) JwAccessTokenAPI(com.jeecg.qywx.api.base.JwAccessTokenAPI) JwMessageAPI(com.jeecg.qywx.api.message.JwMessageAPI) TextCard(com.jeecg.qywx.api.message.vo.TextCard) JwUserAPI(com.jeecg.qywx.api.user.JwUserAPI) JwDepartmentAPI(com.jeecg.qywx.api.department.JwDepartmentAPI) DepartMsgResponse(com.jeecg.qywx.api.department.vo.DepartMsgResponse) Department(com.jeecg.qywx.api.department.vo.Department) TextCardEntity(com.jeecg.qywx.api.message.vo.TextCardEntity) JwtUtil(org.jeecg.common.system.util.JwtUtil) PasswordUtil(org.jeecg.common.util.PasswordUtil) SysAnnouncementSendMapper(org.jeecg.modules.system.mapper.SysAnnouncementSendMapper) Collectors(java.util.stream.Collectors) RestUtil(org.jeecg.common.util.RestUtil) Slf4j(lombok.extern.slf4j.Slf4j) SpringContextUtils(org.jeecg.common.util.SpringContextUtils) DuplicateKeyException(org.springframework.dao.DuplicateKeyException) List(java.util.List) Text(com.jeecg.qywx.api.message.vo.Text) JSONObject(com.alibaba.fastjson.JSONObject) SyncInfoVo(org.jeecg.modules.system.vo.thirdapp.SyncInfoVo) CommonConstant(org.jeecg.common.constant.CommonConstant) MessageDTO(org.jeecg.common.api.dto.message.MessageDTO) SysDepartTreeModel(org.jeecg.modules.system.model.SysDepartTreeModel) BeanUtils(org.springframework.beans.BeanUtils) User(com.jeecg.qywx.api.user.vo.User) DuplicateKeyException(org.springframework.dao.DuplicateKeyException)

Example 4 with User

use of com.jeecg.qywx.api.user.vo.User in project kykms by mahonelau.

the class ThirdAppWechatEnterpriseServiceImpl method sysUserToQwUser.

/**
 * 【同步用户】将SysUser转为企业微信的User对象(创建新用户)
 */
private User sysUserToQwUser(SysUser sysUser) {
    User user = new User();
    // 通过 username 来关联
    user.setUserid(sysUser.getUsername());
    return this.sysUserToQwUser(sysUser, user);
}
Also used : User(com.jeecg.qywx.api.user.vo.User)

Example 5 with User

use of com.jeecg.qywx.api.user.vo.User in project kykms by mahonelau.

the class ThirdAppWechatEnterpriseServiceImpl method syncThirdAppUserToLocal.

@Override
public SyncInfoVo syncThirdAppUserToLocal() {
    SyncInfoVo syncInfo = new SyncInfoVo();
    String accessToken = this.getAccessToken();
    if (accessToken == null) {
        syncInfo.addFailInfo("accessToken获取失败!");
        return syncInfo;
    }
    // 获取企业微信所有的用户
    List<User> qwUsersList = JwUserAPI.getDetailUsersByDepartid("1", null, null, accessToken);
    if (qwUsersList == null) {
        syncInfo.addFailInfo("企业微信用户列表查询失败!");
        return syncInfo;
    }
    // 查询本地用户
    List<SysUser> sysUsersList = sysUserService.list();
    // 循环判断新用户和需要更新的用户
    for (User qwUser : qwUsersList) {
        /*
             * 判断是否同步过的逻辑:
             * 1. 查询 sys_third_account(第三方账号表)是否有数据,如果有代表已同步
             * 2. 本地表里没有,就先用手机号判断,不通过再用username判断。
             */
        SysThirdAccount sysThirdAccount = sysThirdAccountService.getOneByThirdUserId(qwUser.getUserid(), ThirdAppConfig.WECHAT_ENTERPRISE.toLowerCase());
        List<SysUser> collect = sysUsersList.stream().filter(user -> (qwUser.getMobile().equals(user.getPhone()) || qwUser.getUserid().equals(user.getUsername()))).collect(Collectors.toList());
        if (collect != null && collect.size() > 0) {
            SysUser sysUserTemp = collect.get(0);
            // 循环到此说明用户匹配成功,进行更新操作
            SysUser updateSysUser = this.qwUserToSysUser(qwUser, sysUserTemp);
            try {
                sysUserService.updateById(updateSysUser);
                String str = String.format("用户 %s(%s) 更新成功!", updateSysUser.getRealname(), updateSysUser.getUsername());
                syncInfo.addSuccessInfo(str);
            } catch (Exception e) {
                this.syncUserCollectErrInfo(e, qwUser, syncInfo);
            }
            this.thirdAccountSaveOrUpdate(sysThirdAccount, updateSysUser.getId(), qwUser.getUserid());
        // 更新完成,直接跳到下一次外部循环继续
        } else {
            // 没匹配到用户则走新增逻辑
            SysUser newSysUser = this.qwUserToSysUser(qwUser);
            try {
                sysUserService.save(newSysUser);
                String str = String.format("用户 %s(%s) 创建成功!", newSysUser.getRealname(), newSysUser.getUsername());
                syncInfo.addSuccessInfo(str);
            } catch (Exception e) {
                this.syncUserCollectErrInfo(e, qwUser, syncInfo);
            }
            this.thirdAccountSaveOrUpdate(sysThirdAccount, newSysUser.getId(), qwUser.getUserid());
        }
    }
    return syncInfo;
}
Also used : SyncInfoVo(org.jeecg.modules.system.vo.thirdapp.SyncInfoVo) StringUtils(org.apache.commons.lang.StringUtils) Arrays(java.util.Arrays) org.jeecg.modules.system.entity(org.jeecg.modules.system.entity) Autowired(org.springframework.beans.factory.annotation.Autowired) LambdaQueryWrapper(com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper) ArrayList(java.util.ArrayList) ThirdAppConfig(org.jeecg.config.thirdapp.ThirdAppConfig) JwDepartmentTreeVo(org.jeecg.modules.system.vo.thirdapp.JwDepartmentTreeVo) User(com.jeecg.qywx.api.user.vo.User) Service(org.springframework.stereotype.Service) org.jeecg.common.util.oConvertUtils(org.jeecg.common.util.oConvertUtils) TextEntity(com.jeecg.qywx.api.message.vo.TextEntity) org.jeecg.modules.system.service(org.jeecg.modules.system.service) AccessToken(com.jeecg.qywx.api.core.common.AccessToken) JwAccessTokenAPI(com.jeecg.qywx.api.base.JwAccessTokenAPI) JwMessageAPI(com.jeecg.qywx.api.message.JwMessageAPI) TextCard(com.jeecg.qywx.api.message.vo.TextCard) JwUserAPI(com.jeecg.qywx.api.user.JwUserAPI) JwDepartmentAPI(com.jeecg.qywx.api.department.JwDepartmentAPI) DepartMsgResponse(com.jeecg.qywx.api.department.vo.DepartMsgResponse) Department(com.jeecg.qywx.api.department.vo.Department) TextCardEntity(com.jeecg.qywx.api.message.vo.TextCardEntity) JwtUtil(org.jeecg.common.system.util.JwtUtil) PasswordUtil(org.jeecg.common.util.PasswordUtil) SysAnnouncementSendMapper(org.jeecg.modules.system.mapper.SysAnnouncementSendMapper) Collectors(java.util.stream.Collectors) RestUtil(org.jeecg.common.util.RestUtil) Slf4j(lombok.extern.slf4j.Slf4j) SpringContextUtils(org.jeecg.common.util.SpringContextUtils) DuplicateKeyException(org.springframework.dao.DuplicateKeyException) List(java.util.List) Text(com.jeecg.qywx.api.message.vo.Text) JSONObject(com.alibaba.fastjson.JSONObject) SyncInfoVo(org.jeecg.modules.system.vo.thirdapp.SyncInfoVo) CommonConstant(org.jeecg.common.constant.CommonConstant) MessageDTO(org.jeecg.common.api.dto.message.MessageDTO) SysDepartTreeModel(org.jeecg.modules.system.model.SysDepartTreeModel) BeanUtils(org.springframework.beans.BeanUtils) User(com.jeecg.qywx.api.user.vo.User) DuplicateKeyException(org.springframework.dao.DuplicateKeyException)

Aggregations

User (com.jeecg.qywx.api.user.vo.User)13 LambdaQueryWrapper (com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper)10 JSONObject (com.alibaba.fastjson.JSONObject)6 JwDepartmentTreeVo (org.jeecg.modules.system.vo.thirdapp.JwDepartmentTreeVo)6 SyncInfoVo (org.jeecg.modules.system.vo.thirdapp.SyncInfoVo)6 JwAccessTokenAPI (com.jeecg.qywx.api.base.JwAccessTokenAPI)3 AccessToken (com.jeecg.qywx.api.core.common.AccessToken)3 JwDepartmentAPI (com.jeecg.qywx.api.department.JwDepartmentAPI)3 DepartMsgResponse (com.jeecg.qywx.api.department.vo.DepartMsgResponse)3 Department (com.jeecg.qywx.api.department.vo.Department)3 JwMessageAPI (com.jeecg.qywx.api.message.JwMessageAPI)3 Text (com.jeecg.qywx.api.message.vo.Text)3 TextCard (com.jeecg.qywx.api.message.vo.TextCard)3 TextCardEntity (com.jeecg.qywx.api.message.vo.TextCardEntity)3 TextEntity (com.jeecg.qywx.api.message.vo.TextEntity)3 JwUserAPI (com.jeecg.qywx.api.user.JwUserAPI)3 ArrayList (java.util.ArrayList)3 Arrays (java.util.Arrays)3 List (java.util.List)3 Collectors (java.util.stream.Collectors)3