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.api.domain.poji.sys.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;
|
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 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;
|
import java.util.List;
|
|
/**
|
* @ClassName WxCpServiceImpl
|
* @Description TODO
|
* @Author jqs
|
* @Date 2023/8/17 15:25
|
* @Version 1.0
|
*/
|
@Service
|
@Log4j2
|
public class SysWxCpServiceImpl implements SysWxCpService {
|
|
@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
|
* @date 2023/8/17 15:26
|
* @param
|
* @return String
|
*/
|
@Override
|
public String getToken(){
|
String accessToken = null;
|
try {
|
accessToken = wxCpService.getAccessToken();
|
} catch (WxErrorException e) {
|
throw new RuntimeException(e);
|
}
|
return accessToken;
|
}
|
|
/**
|
* @description 同步部门
|
* @author jqs
|
* @date 2023/8/17 15:42
|
* @param
|
* @return void
|
*/
|
@Override
|
public void syncDepartment(){
|
WxCpDepartmentService wxCpDepartmentService = wxCpService.getDepartmentService();
|
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());
|
}
|
}
|
}
|
}
|
} catch (WxErrorException e) {
|
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);
|
}
|
}
|
}
|