jiangqs
2023-09-04 c97706c3cc213b7db3d381e8a0435ff0ef9a04d6
ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/staff/SysWxCpServiceImpl.java
@@ -1,6 +1,12 @@
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.dto.MgtWxCPStaffDto;
import com.ruoyi.system.domain.pojo.staff.SysStaff;
import com.ruoyi.system.service.staff.SysStaffService;
import com.ruoyi.system.service.staff.SysWxCpService;
import com.ruoyi.system.service.sys.ISysDeptService;
import lombok.extern.log4j.Log4j2;
@@ -8,6 +14,11 @@
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 me.chanjar.weixin.cp.bean.message.WxCpMessage;
import me.chanjar.weixin.cp.bean.message.WxCpMessageSendResult;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
@@ -24,11 +35,23 @@
@Log4j2
public class SysWxCpServiceImpl implements SysWxCpService {
    @Resource
    @Autowired
    @Qualifier("wxService")
    private WxCpService wxCpService;
    @Autowired
    @Qualifier("adWxService")
    private WxCpService adWxCpService;
    @Resource
    private RemoteShopService remoteShopService;
    @Resource
    private ISysDeptService  sysDeptService;
    @Resource
    private SysStaffService sysStaffService;
    /**
     * @description
     * @author  jqs
@@ -62,28 +85,31 @@
            List<WxCpDepart> wxCpDepartList = wxCpDepartmentService.list(null);
            if(wxCpDepartList!=null&&wxCpDepartList.size()>0){
                for(WxCpDepart wxCpDepart : wxCpDepartList){
                    //获取系统内对应部门
                    SysDept sysDept = sysDeptService.getByWxDeptId(wxCpDepart.getId());
                    //判断是否有该部门,没有则新建
                    if(sysDept!=null){
                        //判断是否有变化
                        if(!sysDept.getDeptName().equals(wxCpDepart.getName())||sysDept.getOrderNum()!=wxCpDepart.getOrder().intValue()){
                            sysDept.setDeptName(wxCpDepart.getName());
                    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.setUpdateBy("企业微信同步");
                            sysDeptService.updateDept(sysDept);
                            log.info("企业微信同步更新部门:"+wxCpDepart.getName());
                            sysDept.setCreateBy("企业微信同步");
                            sysDept.setDeptName(wxCpDepart.getName());
                            sysDept.setWxDeptId(wxCpDepart.getId());
                            sysDeptService.insertDept(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());
                        sysDeptService.insertDept(sysDept);
                        log.info("企业微信同步新增部门:"+wxCpDepart.getName());
                    }
                }
            }
@@ -91,4 +117,230 @@
            throw new RuntimeException(e);
        }
    }
    /**
     * @description  企业微信消息推送
     * @author  jqs
     * @date    2023/8/29 11:05
     * @return  void
     */
    @Override
    public void sendTaskMessage(){
        //获取员工任务列表
        List<MgtUserTaskMsgVo> userTaskMsgVoList = remoteShopService.getTaskMsgList().getData();
        log.info("定时发送通知任务任务列表---"+userTaskMsgVoList.size());
        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);
                    }
                }
            }
        }
    }
    /**
     * @description  更新企业微信部门
     * @author  jqs
     * @date    2023/9/4 15:19
     * @param wxDeptId
     * @param deptName
     * @return  void
     */
    @Override
    public void updateWxCpDept(Long wxDeptId,String deptName){
        WxCpDepart group = new WxCpDepart();
        group.setId(wxDeptId);
        group.setName(deptName);
        try {
            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 = adWxCpService.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);
        }
    }
}