Pu Zhibing
2025-04-01 8444084e6aa11efa23287e7f82474ac22378a5c4
ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/staff/SysWxCpServiceImpl.java
@@ -1,24 +1,17 @@
package com.ruoyi.system.service.impl.staff;
import com.ruoyi.common.core.utils.StringUtils;
import com.ruoyi.system.api.domain.poji.sys.SysDept;
import com.ruoyi.system.api.domain.vo.MgtUserTaskMsgVo;
import com.ruoyi.system.api.service.RemoteShopService;
import com.ruoyi.system.domain.pojo.staff.SysStaff;
import com.ruoyi.system.service.staff.SysStaffService;
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.message.WxCpMessage;
import me.chanjar.weixin.cp.bean.message.WxCpMessageSendResult;
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
@@ -32,16 +25,14 @@
public class SysWxCpServiceImpl implements SysWxCpService {
    @Resource
    @Qualifier("wxService")
    private WxCpService wxCpService;
    @Resource
    private RemoteShopService remoteShopService;
    @Qualifier("adWxService")
    private WxCpService adWxCpService;
    @Resource
    private ISysDeptService  sysDeptService;
    @Resource
    private SysStaffService sysStaffService;
    /**
     * @description
     * @author  jqs
@@ -60,84 +51,199 @@
        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  企业微信消息推送
     * @description  创建企业微信部门
     * @author  jqs
     * @date    2023/8/29 11:05
     * @date    2023/9/4 15:19
     * @param parentId
     * @param deptName
     * @return  void
     */
    @Override
    public void sendTaskMessage(){
        //获取员工任务列表
        List<MgtUserTaskMsgVo> userTaskMsgVoList = remoteShopService.getTaskMsgList().getData();
        WxCpMessage message;
        SysStaff sysStaff;
        if(userTaskMsgVoList!=null&&!userTaskMsgVoList.isEmpty()){
            //循环发送消息
            for(MgtUserTaskMsgVo mgtUserTaskMsgVo : userTaskMsgVoList){
                sysStaff = sysStaffService.getByUserId(mgtUserTaskMsgVo.getUserId());
                if(sysStaff!=null&& StringUtils.isNotBlank(sysStaff.getWxUserId())){
                    message = new WxCpMessage();
                    message.setAgentId(1000024);
                    message.setToUser(sysStaff.getWxUserId());
                    message.setMsgType("text");
                    message.setContent(mgtUserTaskMsgVo.getTaskTitle()+"今日需要任务跟进,请注意!");
                    try {
                        WxCpMessageSendResult result = wxCpService.getMessageService().send(message);
                        System.out.println(result);
                    } catch (WxErrorException e) {
                        throw new RuntimeException(e);
                    }
                }
    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);
        }
    }
}