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