From 8444084e6aa11efa23287e7f82474ac22378a5c4 Mon Sep 17 00:00:00 2001 From: Pu Zhibing <393733352@qq.com> Date: 星期二, 01 四月 2025 16:03:19 +0800 Subject: [PATCH] Merge remote-tracking branch 'origin/master' --- ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/staff/SysWxCpServiceImpl.java | 234 ++++++++++++++++++++++++++++++++++++++++++++++++---------- 1 files changed, 193 insertions(+), 41 deletions(-) diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/staff/SysWxCpServiceImpl.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/staff/SysWxCpServiceImpl.java index 2b94fce..ca76233 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/staff/SysWxCpServiceImpl.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/staff/SysWxCpServiceImpl.java @@ -1,17 +1,17 @@ package com.ruoyi.system.service.impl.staff; -import com.ruoyi.system.api.domain.poji.sys.SysDept; +import com.ruoyi.common.core.utils.StringUtils; +import com.ruoyi.system.domain.dto.MgtWxCPStaffDto; import com.ruoyi.system.service.staff.SysWxCpService; -import com.ruoyi.system.service.sys.ISysDeptService; import lombok.extern.log4j.Log4j2; import me.chanjar.weixin.common.error.WxErrorException; -import me.chanjar.weixin.cp.api.WxCpDepartmentService; import me.chanjar.weixin.cp.api.WxCpService; import me.chanjar.weixin.cp.bean.WxCpDepart; +import me.chanjar.weixin.cp.bean.WxCpUser; +import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.stereotype.Service; import javax.annotation.Resource; -import java.util.List; /** * @ClassName WxCpServiceImpl @@ -25,10 +25,14 @@ public class SysWxCpServiceImpl implements SysWxCpService { @Resource + @Qualifier("wxService") private WxCpService wxCpService; @Resource - private ISysDeptService sysDeptService; + @Qualifier("adWxService") + private WxCpService adWxCpService; + + /** * @description * @author jqs @@ -47,49 +51,197 @@ return accessToken; } + + + + /** - * @description 同步部门 + * @description 更新企业微信部门 * @author jqs - * @date 2023/8/17 15:42 - * @param + * @date 2023/9/4 15:19 + * @param wxDeptId + * @param deptName * @return void */ @Override - public void syncDepartment(){ - WxCpDepartmentService wxCpDepartmentService = wxCpService.getDepartmentService(); + public void updateWxCpDept(Long wxDeptId,String deptName){ + WxCpDepart group = new WxCpDepart(); + group.setId(wxDeptId); + group.setName(deptName); try { - //从企业微信拉去部门名单 - List<WxCpDepart> wxCpDepartList = wxCpDepartmentService.list(null); - if(wxCpDepartList!=null&&wxCpDepartList.size()>0){ - for(WxCpDepart wxCpDepart : wxCpDepartList){ - if(wxCpDepart.getParentId().compareTo(24L)<0){ - //获取系统内对应部门 - SysDept sysDept = sysDeptService.getByWxDeptId(wxCpDepart.getId()); - //判断是否有该部门,没有则新建 - if(sysDept!=null){ - //判断是否有变化 - if(!sysDept.getDeptName().equals(wxCpDepart.getName())||sysDept.getOrderNum()!=wxCpDepart.getOrder().intValue()){ - sysDept.setDeptName(wxCpDepart.getName()); - sysDept.setOrderNum(wxCpDepart.getOrder().intValue()); - sysDept.setUpdateBy("企业微信同步"); - sysDeptService.updateDept(sysDept); - log.info("企业微信同步更新部门:"+wxCpDepart.getName()); - } - }else{ - sysDept = new SysDept(); - sysDept.setDelFlag("0"); - sysDept.setStatus("0"); - sysDept.setParentId(100L); - sysDept.setOrderNum(wxCpDepart.getOrder().intValue()); - sysDept.setCreateBy("企业微信同步"); - sysDept.setDeptName(wxCpDepart.getName()); - sysDept.setWxDeptId(wxCpDepart.getId()); - sysDeptService.insertDept(sysDept); - log.info("企业微信同步新增部门:"+wxCpDepart.getName()); - } - } - } + adWxCpService.getDepartmentService().update(group); + } catch (WxErrorException e) { + throw new RuntimeException(e); + } + } + + /** + * @description 创建企业微信部门 + * @author jqs + * @date 2023/9/4 15:19 + * @param parentId + * @param deptName + * @return void + */ + @Override + public Long addWxCpDept(Long parentId,String deptName){ + WxCpDepart depart = new WxCpDepart(); + depart.setParentId(parentId); + depart.setName(deptName); + Long departId = null; + try { + departId = adWxCpService.getDepartmentService().create(depart); + } catch (WxErrorException e) { + throw new RuntimeException(e); + } + return departId; + } + + /** + * @description 删除企业微信部门 + * @author jqs + * @date 2023/9/4 15:19 + * @param wxDeptId + * @return void + */ + @Override + public void deleteWxCpDept(Long wxDeptId){ + try { + adWxCpService.getDepartmentService().delete(wxDeptId); + } catch (WxErrorException e) { + throw new RuntimeException(e); + } + } + + /** + * @description 通过手机号获取wxUserId + * @author jqs + * @date 2023/9/4 15:44 + * @param mobile + * @return String + */ + private String getWxUserIdByMobile(String mobile){ + String wxUserId = null; + try { + wxUserId = adWxCpService.getUserService().getUserId(mobile); + } catch (WxErrorException e) { + throw new RuntimeException(e); + } + return wxUserId; + } + + + /** + * @description 通过wxUserId获取用户 + * @author jqs + * @date 2023/9/4 16:35 + * @param wxUserId + * @return WxCpUser + */ + private WxCpUser getWxCpUser(String wxUserId){ + WxCpUser wxCpUser = null; + try { + wxCpUser = wxCpService.getUserService().getById(wxUserId); + } catch (WxErrorException e) { + throw new RuntimeException(e); + } + return wxCpUser; + } + + /** + * @description 创建企业微信员工 + * @author jqs + * @date 2023/9/4 15:19 + * @param mgtWxCPStaffDto + * @return void + */ + @Override + public String addWxCpStaff(MgtWxCPStaffDto mgtWxCPStaffDto){ + String wxUserId = mgtWxCPStaffDto.getWxUserId(); + String mobile = mgtWxCPStaffDto.getStaffMobile(); + String oldUserId = this.getWxUserIdByMobile(mobile); + WxCpUser oldWxCpUser = null; + Boolean sameUserId = false; + //判断手机号是否有对应企业微信用户 有则更新 无则新建 + if(StringUtils.isNotBlank(oldUserId)){ + oldWxCpUser = this.getWxCpUser(oldUserId); + }else{ + //当手机号无对应用户时判断wxUserId是否被占用 + oldWxCpUser = this.getWxCpUser(wxUserId); + if(oldWxCpUser!=null){ + sameUserId = true; + oldWxCpUser = null; } + } + //获取企业微信用户是否存在 + if(oldWxCpUser!=null){ + oldWxCpUser.setUserId(mgtWxCPStaffDto.getWxUserId()); + oldWxCpUser.setName(mgtWxCPStaffDto.getStaffName()); + oldWxCpUser.setMobile(mgtWxCPStaffDto.getStaffMobile()); + if(StringUtils.isNotBlank(mgtWxCPStaffDto.getStaffEmail())){ + oldWxCpUser.setEmail(mgtWxCPStaffDto.getStaffEmail()); + } + if(StringUtils.isNotBlank(mgtWxCPStaffDto.getStaffPost())){ + oldWxCpUser.setPosition(mgtWxCPStaffDto.getStaffPost()); + } + oldWxCpUser.setPosition(mgtWxCPStaffDto.getStaffPost()); + Long[] departIds = new Long[1]; + departIds[0] = mgtWxCPStaffDto.getWxDeptId(); + oldWxCpUser.setDepartIds(departIds); + if(mgtWxCPStaffDto.getHeadFlag()!=null){ + Integer[] isLeaderInDept = new Integer[1]; + isLeaderInDept[0] = Integer.valueOf(mgtWxCPStaffDto.getHeadFlag()); + oldWxCpUser.setIsLeaderInDept(isLeaderInDept); + } + try { + adWxCpService.getUserService().update(oldWxCpUser); + } catch (WxErrorException e) { + throw new RuntimeException(e); + } + }else{ + WxCpUser wxCpUser = new WxCpUser(); + //wxUserId被占用重新生成 + if(sameUserId){ + wxUserId = wxUserId + "1"; + } + wxCpUser.setUserId(wxUserId); + wxCpUser.setName(mgtWxCPStaffDto.getStaffName()); + wxCpUser.setMobile(mgtWxCPStaffDto.getStaffMobile()); + if(StringUtils.isNotBlank(mgtWxCPStaffDto.getStaffEmail())){ + wxCpUser.setEmail(mgtWxCPStaffDto.getStaffEmail()); + } + if(StringUtils.isNotBlank(mgtWxCPStaffDto.getStaffPost())){ + wxCpUser.setPosition(mgtWxCPStaffDto.getStaffPost()); + } + wxCpUser.setPosition(mgtWxCPStaffDto.getStaffPost()); + Long[] departIds = new Long[1]; + departIds[0] = mgtWxCPStaffDto.getWxDeptId(); + wxCpUser.setDepartIds(departIds); + if(mgtWxCPStaffDto.getHeadFlag()!=null){ + Integer[] isLeaderInDept = new Integer[1]; + isLeaderInDept[0] = Integer.valueOf(mgtWxCPStaffDto.getHeadFlag()); + wxCpUser.setIsLeaderInDept(isLeaderInDept); + } + try { + adWxCpService.getUserService().create(wxCpUser); + } catch (WxErrorException e) { + throw new RuntimeException(e); + } + } + return wxUserId; + } + + /** + * @description 删除企业微信员工 + * @author jqs + * @date 2023/9/4 15:19 + * @param wxUserId + * @return void + */ + @Override + public void deleteWxCpStaff(String wxUserId){ + try { + adWxCpService.getUserService().delete(wxUserId); } catch (WxErrorException e) { throw new RuntimeException(e); } -- Gitblit v1.7.1