提交 4229e8dc 编写于 作者: 孙喜旺

回调通知修改

上级 3598a674
package com.linkwechat.web.controller.wecom;
import com.alibaba.fastjson.JSONObject;
import com.linkwechat.common.utils.Threads;
import com.linkwechat.common.utils.wecom.WxCryptUtil;
import com.linkwechat.web.controller.common.CommonController;
import com.linkwechat.wecom.domain.vo.WxCpXmlMessageVO;
......@@ -47,7 +48,7 @@ public class WeCallBackController extends CommonController {
try {
WeCallBackEventFactory factory = weEventHandle.factory(wxCpXmlMessage.getEvent());
if (factory !=null){
factory.eventHandle(wxCpXmlMessage);
Threads.SINGLE_THREAD_POOL.submit(() -> factory.eventHandle(wxCpXmlMessage));
}
} catch (Exception e) {
e.printStackTrace();
......
......@@ -12,7 +12,7 @@ import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* @author sxw
* @author danmo
* @description 会话存档controller
* @date 2020/12/19 13:51
**/
......
......@@ -58,10 +58,10 @@ public class WeUserController extends BaseController {
* 获取通讯录相关客户详细信息
*/
@PreAuthorize("@ss.hasPermi('contacts:organization:view')")
@GetMapping(value = "/{id}")
public AjaxResult getInfo(@PathVariable("id") Long id)
@GetMapping(value = "/{userId}")
public AjaxResult getInfo(@PathVariable("userId") String userId)
{
return AjaxResult.success(weUserService.selectWeUserById(id));
return AjaxResult.success(weUserService.selectWeUserById(userId));
}
/**
......
......@@ -200,8 +200,10 @@ wecome:
- /msgaudit/check_single_agree
- /msgaudit/check_room_agree
- /msgaudit/groupchat/get
needAgentTokenUrl:
- /message/send
#企微回调通知配置
callBack:
appIdOrCorpId:
token:
encodingAesKey:
\ No newline at end of file
appIdOrCorpId: ww38152475d1bca752
token: uEyhhuTKfpS
encodingAesKey: diTFQ6B4IW14UN2JplADuhMZsBZHjvuBG24kHFrr4Px
\ No newline at end of file
......@@ -11,7 +11,7 @@ import java.util.ArrayList;
import java.util.List;
/**
* @author sxw
* @author danmo
* @description ElasticSearch 配置
* @date 2020/12/4 9:59
**/
......
......@@ -33,4 +33,6 @@ public class WeComeConfig {
/** 会话存档所需token 的url */
private String[] needChatTokenUrl;
/** 应用所需token 的url **/
private String[] needAgentTokenUrl;
}
......@@ -33,6 +33,10 @@ public class WeConstans {
*/
public static final String WE_CHAT_ACCESS_TOKEN = "we_chat_access_token";
/**
* 应用相关token
*/
public static final String WE_AGENT_ACCESS_TOKEN = "we_agent_access_token";
/**
* 企业微信接口返回成功code
......@@ -240,6 +244,10 @@ public class WeConstans {
put("batch_job_result", "weEventBatchJobResultImpl");
//外部联系人事件
put("change_external_contact", "weEventChangeExternalContactImpl");
//客户群事件
put("change_external_chat", "weEventChangeExternalChatImpl");
//客户标签事件
put("change_external_tag", "weEventChangeExternalTagImpl");
}
};
......
......@@ -3,7 +3,7 @@ package com.linkwechat.common.core.domain;
import lombok.Data;
/**
* @author sxw
* @author danmo
* @description 会话存档接口入参实体
* @date 2020/12/29 14:23
**/
......
......@@ -6,7 +6,7 @@ import lombok.Data;
import lombok.NoArgsConstructor;
/**
* @author sxw
* @author danmo
* @description http交互Vo对象
* @date 2020/12/9 14:14
**/
......
......@@ -7,7 +7,7 @@ import lombok.NoArgsConstructor;
import java.util.Map;
/**
* @author sxw
* @author danmo
* @description
* @date 2020/12/9 14:11
**/
......
......@@ -7,7 +7,7 @@ import lombok.NoArgsConstructor;
import java.util.Map;
/**
* @author sxw
* @author danmo
* @description
* @date 2020/12/9 14:18
**/
......
......@@ -40,7 +40,7 @@ import java.util.Map;
import java.util.function.Consumer;
/**
* @author sxw
* @author danmo
* @description es工具类
* @date 2020/12/9 14:02
**/
......
package com.linkwechat.common.enums;
import lombok.Getter;
/**
* @author danmo
* @description 接替失败的原因
* @date 2021/1/20 0:14
**/
@Getter
public enum TransferFailReason {
/**
* 客户拒绝
*/
CUSTOMER_REFUSED(3,"customer_refused", "客户拒绝"),
/**
* 接替成员的客户数达到上限
*/
CUSTOMER_LIMIT_EXCEED(4,"customer_limit_exceed", "接替成员的客户数达到上限");
private int num;
private String name;
private String reason;
TransferFailReason(int num, String name, String reason) {
this.num = num;
this.name = name;
this.reason = reason;
}
public static String getReason(String name){
TransferFailReason[] values = TransferFailReason.values();
for(TransferFailReason transferFailReason:values){
if(transferFailReason.getName().equals(name)){
return transferFailReason.getReason();
}
}
throw new RuntimeException("无对应原因");
}
public static int getNum(String name){
TransferFailReason[] values = TransferFailReason.values();
for(TransferFailReason transferFailReason:values){
if(transferFailReason.getName().equals(name)){
return transferFailReason.getNum();
}
}
throw new RuntimeException("无对应类型");
}
}
......@@ -18,7 +18,7 @@ import java.security.spec.RSAPrivateCrtKeySpec;
import java.util.Base64;
/**
* @author sxw
* @author danmo
* @description
* @date 2020/12/7 23:37
**/
......
......@@ -21,7 +21,7 @@ import java.util.Optional;
import java.util.concurrent.atomic.AtomicLong;
/**
* @author sxw
* @author danmo
* @description
* @date 2020/12/2 16:01
**/
......
......@@ -98,4 +98,14 @@ public class RyTask {
});
redisCache.setCacheObject(WeConstans.CONTACT_SEQ_KEY,index);
}
/**
*
* @param corpId 企业id
* @param secret 会话密钥
*/
public void getPermitUserList(String corpId, String secret){
log.info("执行有参方法: params:{},{}", corpId, secret);
}
}
package com.linkwechat.wecom.client;
import com.dtflys.forest.annotation.Body;
import com.dtflys.forest.annotation.DataObject;
import com.dtflys.forest.annotation.Request;
import com.linkwechat.wecom.domain.dto.WeResultDto;
......@@ -40,7 +41,7 @@ public interface WeCropTagClient {
@Request(url = "/externalcontact/get_corp_tag_list",
type = "POST"
)
WeCropGroupTagListDto getCorpTagListByTagIds(@DataObject WeFindCropTagParam weFindCropTagParam);
WeCropGroupTagListDto getCorpTagListByTagIds(@Body WeFindCropTagParam weFindCropTagParam);
/**
......
......@@ -7,7 +7,7 @@ import com.linkwechat.wecom.domain.dto.msgaudit.WeMsgAuditDto;
import com.linkwechat.wecom.domain.vo.WeMsgAuditVo;
/**
* @author sxw
* @author danmo
* @description 会话存档接口
* @date 2020/12/2 16:45
**/
......
......@@ -61,6 +61,8 @@ public class WeCorpAccount extends BaseEntity
@ApiModelProperty("应用id")
private String agentId;
@ApiModelProperty("应用密钥")
private String agentSecret;
@ApiModelProperty("服务商密钥")
private String providerSecret;
......
......@@ -111,6 +111,7 @@ public class WeUser
private Date dimissionTime;
private String remark;
......
......@@ -13,22 +13,22 @@ import java.util.List;
public class WeMessagePushDto {
/**
* 指定接收消息的成员,成员ID列表(多个接收者用‘,’分隔,最多支持1000个)。
* 指定接收消息的成员,成员ID列表(多个接收者用‘|’分隔,最多支持1000个)。
* 特殊情况:指定为”@all”,则向该企业应用的全部成员发送
*/
private List<String> touser;
private String touser;
/**
* 指定接收消息的部门,部门ID列表,多个接收者用‘,’分隔,最多支持100个。
* 指定接收消息的部门,部门ID列表,多个接收者用‘|’分隔,最多支持100个。
* 当touser为”@all”时忽略本参数
*/
private List<String> toparty;
private String toparty;
/**
* 指定接收消息的标签,标签ID列表,多个接收者用‘,’分隔,最多支持100个。
* 指定接收消息的标签,标签ID列表,多个接收者用‘|’分隔,最多支持100个。
* 当touser为”@all”时忽略本参数
*/
private List<String> totag;
private String totag;
/**
* 消息类型,此时固定为:text
......
......@@ -29,7 +29,7 @@ public class ExternalUserDetail extends WeResultDto {
@Data
public static class ExternalContact{
/** 外部联系人userId */
private String external_userid;
private String externalUserid;
/** 外部联系人名称 */
private String name;
/** 外部联系人职位 */
......@@ -37,9 +37,9 @@ public class ExternalUserDetail extends WeResultDto {
/** 外部联系人头像 */
private String avatar;
/** 外部联系人所在企业简称 */
private String corp_name;
private String corpName;
/** 外部联系人所在企业全称 */
private String corp_full_name;
private String corpFullName;
/** 外部联系人的类型,1表示该外部联系人是微信用户,2表示该外部联系人是企业微信用户 */
private Integer type;
/** 外部联系人性别 0-未知 1-男性 2-女性 */
......@@ -60,13 +60,13 @@ public class ExternalUserDetail extends WeResultDto {
/**该成员添加此外部联系人的时间*/
private long createtime;
/**该成员对此客户备注的企业名称*/
private String remark_company;
private String remarkCorpName;
/**该成员对此客户备注的手机号码*/
private String[] remark_mobiles;
private String[] remarkMobiles;
/**该成员添加此客户的来源*/
private Integer add_way;
private Integer addWay;
/**发起添加的userid,如果成员主动添加,为成员的userid;如果是客户主动添加,则为客户的外部联系人userid;如果是内部成员共享/管理员分配,则为对应的成员/管理员userid*/
private String oper_userid;
private String operUserid;
/** 企业自定义的state参数,用于区分客户具体是通过哪个「联系我」添加,由企业通过创建「联系我」方式指定 */
private String state;
/**标签**/
......
......@@ -9,7 +9,7 @@ import java.util.Date;
import java.util.List;
/**
* @author sxw
* @author danmo
* @description 会话存档
* @date 2020/12/2 16:47
**/
......
......@@ -27,6 +27,7 @@ public class WeCropGroupTagDto {
private String group_id;
private String group_name;
private Integer order;
private Boolean deleted;
private Long create_time;
private List<WeCropTagDto> tag;
......
......@@ -23,6 +23,7 @@ public class WeCropTagDto {
private String id;
private String name;
private String order;
private Boolean deleted;
private Long create_time;
public static List<WeCropTagDto> transFormto(List<WeTag> weTags){
......
......@@ -3,6 +3,8 @@ package com.linkwechat.wecom.domain.dto.tag;
import lombok.Builder;
import lombok.Data;
import java.util.List;
/**
* @description: 获取标签接口参数实体
* @author: HaoN
......@@ -12,4 +14,5 @@ import lombok.Data;
@Builder
public class WeFindCropTagParam {
private String[] tag_id;
private List<String> group_id;
}
......@@ -5,7 +5,7 @@ import lombok.Data;
import java.util.List;
/**
* @author sxw
* @author danmo
* @description 会话存档入参实体
* @date 2020/12/19 12:38
**/
......
......@@ -29,6 +29,17 @@ public class WxCpXmlMessageVO extends WxCpXmlMessage {
@XStreamAlias("BatchJob")
private BatchJob batchJob = new BatchJob();
@XStreamAlias("FailReason")
@XStreamConverter(value = XStreamCDataConverter.class)
private String failReason;
@XStreamAlias("TagType")
@XStreamConverter(value = XStreamCDataConverter.class)
private String tagType;
@XStreamAlias("Id")
@XStreamConverter(value = XStreamCDataConverter.class)
private String id;
@Data
public static class BatchJob implements Serializable {
......
package com.linkwechat.wecom.factory;
import com.linkwechat.wecom.domain.WeDepartment;
import com.linkwechat.wecom.domain.WeUser;
import com.linkwechat.wecom.domain.vo.WxCpXmlMessageVO;
import java.util.Arrays;
/**
* @author danmo
* @description 事件类型策略接口
* @date 2021/1/20 22:00
**/
public abstract class WeEventStrategy {
protected final String tag = "tag";
protected final String tagGroup = "tag_group";
public abstract void eventHandle(WxCpXmlMessageVO message);
//生成成员数据
public WeUser setWeUserData(WxCpXmlMessageVO message) {
WeUser weUser = WeUser.builder().userId(message.getUserId())
.email(message.getEmail())
.name(message.getName())
.alias(message.getAlias())
.gender(message.getGender())
.address(message.getAddress())
.telephone(message.getTelephone())
.mobile(message.getMobile())
.avatarMediaid(message.getAvatar())
.position(message.getPosition())
.build();
if (message.getStatus() != null) {
weUser.setIsActivate(Integer.valueOf(message.getStatus()));
}
if (message.getIsLeaderInDept() != null) {
String[] isLeaderInDeptArr = Arrays.stream(message.getIsLeaderInDept())
.map(String::valueOf).toArray(String[]::new);
weUser.setIsLeaderInDept(isLeaderInDeptArr);
}
if (message.getDepartments() != null) {
String[] departmentsArr = Arrays.stream(message.getDepartments())
.map(String::valueOf).toArray(String[]::new);
weUser.setDepartment(departmentsArr);
}
return weUser;
}
//部门信息
public WeDepartment setWeDepartMent(WxCpXmlMessageVO message){
WeDepartment weDepartment = new WeDepartment();
if (message.getId() != null) {
weDepartment.setId(Long.valueOf(message.getId()));
}
if (message.getName() != null) {
weDepartment.setName(message.getName());
}
if (message.getParentId() != null) {
weDepartment.setParentId(Long.valueOf(message.getParentId()));
}
return weDepartment;
}
}
package com.linkwechat.wecom.factory;
import com.linkwechat.wecom.domain.vo.WxCpXmlMessageVO;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
/**
* @author danmo
* @description 策略工厂
* @date 2021/1/20 22:02
**/
@Service
public class WeStrategyBeanFactory {
@Autowired
private final Map<String, WeEventStrategy> eventStrategyMap = new ConcurrentHashMap<>();
public WeStrategyBeanFactory(Map<String, WeEventStrategy> strategyMap) {
this.eventStrategyMap.clear();
strategyMap.forEach((k, v) -> this.eventStrategyMap.put(k, v));
}
public void getResource(String type, WxCpXmlMessageVO message) {
eventStrategyMap.get(type).eventHandle(message);
}
}
package com.linkwechat.wecom.factory.impl;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.linkwechat.common.utils.bean.BeanUtils;
import com.linkwechat.wecom.domain.WeDepartment;
import com.linkwechat.wecom.domain.WeFlowerCustomerRel;
import com.linkwechat.wecom.domain.WeFlowerCustomerTagRel;
import com.linkwechat.wecom.domain.WeUser;
import com.linkwechat.wecom.domain.vo.WxCpXmlMessageVO;
import com.linkwechat.wecom.factory.WeCallBackEventFactory;
import com.linkwechat.wecom.service.IWeDepartmentService;
import com.linkwechat.wecom.service.IWeFlowerCustomerRelService;
import com.linkwechat.wecom.service.IWeFlowerCustomerTagRelService;
import com.linkwechat.wecom.service.IWeUserService;
import com.linkwechat.wecom.factory.WeStrategyBeanFactory;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.*;
import java.util.stream.Collectors;
/**
* @author danmo
......@@ -30,240 +16,12 @@ import java.util.stream.Collectors;
@Slf4j
public class WeEventChangeContactImpl implements WeCallBackEventFactory {
@Autowired
private IWeUserService weUserService;
@Autowired
private IWeDepartmentService weDepartmentService;
@Autowired
private IWeFlowerCustomerRelService weFlowerCustomerRelService;
@Autowired
private IWeFlowerCustomerTagRelService weFlowerCustomerTagRelService;
private WeStrategyBeanFactory weStrategyBeanFactory;
@Override
public void eventHandle(WxCpXmlMessageVO message) {
//新增: create_user 更新: update_user 删除:delete_user
String changeType = message.getChangeType();
switch (changeType) {
case "create_user":
this.addUser(message);
break;
case "update_user":
this.updateUser(message);
break;
case "delete_user":
this.delUser(message);
break;
case "create_party":
this.createParty(message);
break;
case "update_party":
this.updateParty(message);
break;
case "delete_party":
this.deleteParty(message);
break;
case "update_tag":
this.updateTag(message);
break;
default:
break;
}
}
@Transactional(rollbackFor = Exception.class)
protected void createParty(WxCpXmlMessageVO message) {
try {
WeDepartment weDepartment = new WeDepartment();
if (message.getId() != null) {
weDepartment.setId(message.getId());
}
if (message.getName() != null) {
weDepartment.setName(message.getName());
}
if (message.getParentId() != null) {
weDepartment.setParentId(Long.valueOf(message.getParentId()));
}
weDepartmentService.save(weDepartment);
} catch (Exception e) {
e.printStackTrace();
log.error(e.getMessage());
}
}
@Transactional(rollbackFor = Exception.class)
protected void deleteParty(WxCpXmlMessageVO message) {
try {
if (message.getId() != null) {
weDepartmentService.removeById(message.getId());
}
} catch (Exception e) {
e.printStackTrace();
log.error(e.getMessage());
}
}
@Transactional(rollbackFor = Exception.class)
protected void updateParty(WxCpXmlMessageVO message) {
try {
WeDepartment weDepartment = new WeDepartment();
if (message.getId() != null) {
weDepartment.setId(message.getId());
}
if (message.getName() != null) {
weDepartment.setName(message.getName());
}
if (message.getParentId() != null) {
weDepartment.setParentId(Long.valueOf(message.getParentId()));
}
weDepartmentService.saveOrUpdate(weDepartment);
} catch (Exception e) {
e.printStackTrace();
log.error(e.getMessage());
}
}
@Transactional(rollbackFor = Exception.class)
protected void updateTag(WxCpXmlMessageVO message) {
try {
String tagId = message.getTagId();
//标签中新增的成员userid列表,用逗号分隔
List<String> addUserItemsList = Arrays.stream(Optional.ofNullable(message.getAddUserItems())
.orElse("").split(",")).collect(Collectors.toList());
//标签中删除的成员userid列表,用逗号分隔
List<String> delUserItemsList = Arrays.stream(Optional.ofNullable(message.getDelUserItems())
.orElse("").split(",")).collect(Collectors.toList());
//标签中新增的成员userid列表,建立关联
List<WeFlowerCustomerTagRel> weFlowerCustomerTagRels = new ArrayList<>();
LambdaQueryWrapper<WeFlowerCustomerRel> relLambdaQueryWrapper = new LambdaQueryWrapper<>();
relLambdaQueryWrapper.in(WeFlowerCustomerRel::getUserId, addUserItemsList);
List<WeFlowerCustomerRel> flowerCustomerRelList = weFlowerCustomerRelService.list(relLambdaQueryWrapper);
List<Long> idList = Optional.ofNullable(flowerCustomerRelList).orElseGet(ArrayList::new)
.stream().map(WeFlowerCustomerRel::getId).collect(Collectors.toList());
idList.forEach(id -> {
weFlowerCustomerTagRels.add(WeFlowerCustomerTagRel.builder().flowerCustomerRelId(id)
.tagId(tagId)
.build());
});
weFlowerCustomerTagRelService.batchInsetWeFlowerCustomerTagRel(weFlowerCustomerTagRels);
//当前标签对应成员列表
LambdaQueryWrapper<WeFlowerCustomerTagRel> tagRelLambdaQueryWrapper = new LambdaQueryWrapper<>();
tagRelLambdaQueryWrapper.eq(WeFlowerCustomerTagRel::getTagId, tagId);
List<WeFlowerCustomerTagRel> tagRelList = weFlowerCustomerTagRelService.list(tagRelLambdaQueryWrapper);
List<Long> flowerCustomerRelIdList = Optional.ofNullable(tagRelList).orElseGet(ArrayList::new)
.stream().map(WeFlowerCustomerTagRel::getFlowerCustomerRelId).collect(Collectors.toList());
if (!flowerCustomerRelIdList.isEmpty()) {
LambdaQueryWrapper<WeFlowerCustomerRel> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.in(WeFlowerCustomerRel::getId, flowerCustomerRelIdList)
.in(WeFlowerCustomerRel::getUserId, delUserItemsList);
List<WeFlowerCustomerRel> relList = weFlowerCustomerRelService.list(queryWrapper);
List<Long> relIdList = Optional.ofNullable(relList).orElseGet(ArrayList::new)
.stream().map(WeFlowerCustomerRel::getId).collect(Collectors.toList());
//标签中删除的成员userid列表
LambdaQueryWrapper<WeFlowerCustomerTagRel> tagRelQueryWrapper = new LambdaQueryWrapper<>();
tagRelQueryWrapper.in(WeFlowerCustomerTagRel::getFlowerCustomerRelId, relIdList);
weFlowerCustomerTagRelService.remove(tagRelQueryWrapper);
}
} catch (Exception e) {
e.printStackTrace();
log.error(e.getMessage());
}
}
/**
* 新增企业成员
*
* @param message
*/
@Transactional(rollbackFor = Exception.class)
protected void addUser(WxCpXmlMessageVO message) {
try {
WeUser weUser = WeUser.builder().userId(message.getUserId())
.email(message.getEmail())
.name(message.getName())
.alias(message.getAlias())
.gender(message.getGender())
.address(message.getAddress())
.telephone(message.getTelephone())
.mobile(message.getMobile())
.avatarMediaid(message.getAvatar())
.position(message.getPosition())
.joinTime(new Date())
.build();
setWeUserData(message, weUser);
weUserService.insertWeUser(weUser);
} catch (Exception e) {
e.printStackTrace();
log.error(e.getMessage());
}
}
/**
* 删除企业成员
*
* @param message
*/
@Transactional(rollbackFor = Exception.class)
protected void delUser(WxCpXmlMessageVO message) {
try {
if (message.getUserId() != null) {
String[] userIdArr = message.getUserId().split("");
weUserService.deleteUser(userIdArr);
}
} catch (Exception e) {
e.printStackTrace();
log.error(e.getMessage());
}
}
/**
* 修改成员信息
*
* @param message
*/
@Transactional(rollbackFor = Exception.class)
protected void updateUser(WxCpXmlMessageVO message) {
try {
WeUser weUser = WeUser.builder().userId(message.getUserId())
.email(message.getEmail())
.name(message.getName())
.alias(message.getAlias())
.gender(message.getGender())
.address(message.getAddress())
.telephone(message.getTelephone())
.mobile(message.getMobile())
.avatarMediaid(message.getAvatar())
.position(message.getPosition())
.build();
setWeUserData(message, weUser);
weUserService.updateWeUser(weUser);
} catch (Exception e) {
e.printStackTrace();
log.error(e.getMessage());
}
}
private void setWeUserData(WxCpXmlMessageVO message, WeUser weUser) {
if (message.getStatus() != null) {
weUser.setIsActivate(Integer.valueOf(message.getStatus()));
}
if (message.getIsLeaderInDept() != null) {
String[] isLeaderInDeptArr = Arrays.stream(message.getIsLeaderInDept())
.map(String::valueOf).toArray(String[]::new);
weUser.setIsLeaderInDept(isLeaderInDeptArr);
}
if (message.getDepartments() != null) {
String[] departmentsArr = Arrays.stream(message.getDepartments())
.map(String::valueOf).toArray(String[]::new);
weUser.setDepartment(departmentsArr);
}
weStrategyBeanFactory.getResource(changeType, message);
}
}
package com.linkwechat.wecom.factory.impl;
import com.linkwechat.wecom.domain.vo.WxCpXmlMessageVO;
import com.linkwechat.wecom.factory.WeCallBackEventFactory;
import com.linkwechat.wecom.factory.WeStrategyBeanFactory;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
/**
* @author danmo
* @description 客户群事件
* @date 2021/1/20 1:15
**/
@Service
@Slf4j
public class WeEventChangeExternalChatImpl implements WeCallBackEventFactory {
@Autowired
private WeStrategyBeanFactory weStrategyBeanFactory;
@Override
public void eventHandle(WxCpXmlMessageVO message) {
String changeType = message.getChangeType();
weStrategyBeanFactory.getResource(changeType,message);
}
}
......@@ -16,6 +16,7 @@ import com.linkwechat.wecom.domain.dto.WeWelcomeMsg;
import com.linkwechat.wecom.domain.dto.message.TextMessageDto;
import com.linkwechat.wecom.domain.vo.WxCpXmlMessageVO;
import com.linkwechat.wecom.factory.WeCallBackEventFactory;
import com.linkwechat.wecom.factory.WeStrategyBeanFactory;
import com.linkwechat.wecom.service.*;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
......@@ -33,191 +34,11 @@ import java.util.stream.Collectors;
@Slf4j
public class WeEventChangeExternalContactImpl implements WeCallBackEventFactory {
@Autowired
private IWeEmpleCodeService weEmpleCodeService;
@Autowired
private IWeEmpleCodeTagService weEmpleCodeTagService;
@Autowired
private IWeCustomerService weCustomerService;
@Autowired
private IWeFlowerCustomerRelService weFlowerCustomerRelService;
@Autowired
private IWeFlowerCustomerTagRelService weFlowerCustomerTagRelService;
@Autowired
private IWeMaterialService weMaterialService;
@Autowired
private WeMessagePushClient weMessagePushClient;
@Autowired
private IWeCorpAccountService weCorpAccountService;
@Autowired
private IWeChatContactMappingService weChatContactMappingService;
private WeStrategyBeanFactory weStrategyBeanFactory;
@Override
public void eventHandle(WxCpXmlMessageVO message) {
String changeType = message.getChangeType();
switch (changeType) {
case "add_external_contact"://添加企业客户事件
addExternalContact(message);
break;
case "edit_external_contact"://编辑企业客户事件
editExternalContact(message);
break;
case "add_half_external_contact"://外部联系人免验证添加成员事件
addHalfExternalContact(message);
break;
case "del_external_contact"://删除企业客户事件
delExternalContact(message);
break;
case "del_follow_user"://删除跟进成员事件
delFollowUser(message);
break;
case "transfer_fail"://客户接替失败事件
transferFail(message);
break;
case "msg_audit_approved"://客户同意进行聊天内容存档事件
msgAuditApproved(message);
break;
default:
break;
}
String chatId = message.getChatId();
if (StringUtils.isNotEmpty(chatId)) {
//客户群变更事件
weChatChangeEvent(message);
}
}
private void msgAuditApproved(WxCpXmlMessageVO message) {
String userId = message.getUserId();
String externalUserId = message.getExternalUserId();
WeChatContactMapping fromMapping = new WeChatContactMapping();
fromMapping.setFromId(userId);
fromMapping.setReceiveId(externalUserId);
fromMapping.setIsCustom(WeConstans.ID_TYPE_EX);
weChatContactMappingService.insertWeChatContactMapping(fromMapping);
WeChatContactMapping receiveMapping = new WeChatContactMapping();
receiveMapping.setFromId(externalUserId);
receiveMapping.setReceiveId(userId);
receiveMapping.setIsCustom(WeConstans.ID_TYPE_USER);
weChatContactMappingService.insertWeChatContactMapping(receiveMapping);
weCustomerService.updateCustomerChatStatus(externalUserId);
}
private void weChatChangeEvent(WxCpXmlMessageVO message) {
}
private void transferFail(WxCpXmlMessageVO message) {
}
private void delFollowUser(WxCpXmlMessageVO message) {
Threads.SINGLE_THREAD_POOL.execute(new Runnable() {
@Override
public void run() {
if (message.getUserId() != null && message.getExternalUserId() != null) {
weFlowerCustomerRelService.deleteFollowUser(message.getUserId(), message.getExternalUserId());
WeCorpAccount validWeCorpAccount = weCorpAccountService.findValidWeCorpAccount();
Optional.ofNullable(validWeCorpAccount).ifPresent(weCorpAccount -> {
String customerChurnNoticeSwitch = weCorpAccount.getCustomerChurnNoticeSwitch();
if (WeConstans.DEL_FOLLOW_USER_SWITCH_OPEN.equals(customerChurnNoticeSwitch)){
WeCustomer weCustomer = weCustomerService.getById(message.getExternalUserId());
String content = "您已经被客户@"+weCustomer.getName()+"删除!" ;
TextMessageDto textMessageDto = new TextMessageDto();
textMessageDto.setContent(content);
List<String> userIdList = Arrays.stream(message.getUserId().split(",")).collect(Collectors.toList());
WeMessagePushDto weMessagePushDto = new WeMessagePushDto();
weMessagePushDto.setMsgtype(MessageType.TEXT.getMessageType());
weMessagePushDto.setTouser(userIdList);
weMessagePushDto.setText(textMessageDto);
Optional.ofNullable(validWeCorpAccount).map(WeCorpAccount::getAgentId).ifPresent(agentId -> {
weMessagePushDto.setAgentid(Integer.valueOf(agentId));
});
weMessagePushClient.sendMessageToUser(weMessagePushDto);
}
});
}
}
});
}
private void delExternalContact(WxCpXmlMessageVO message) {
if (message.getExternalUserId() != null) {
weCustomerService.deleteCustomersByEid(message.getExternalUserId());
}
}
private void addHalfExternalContact(WxCpXmlMessageVO message) {
if (message.getExternalUserId() != null) {
weCustomerService.getCustomersInfoAndSynchWeCustomer(message.getExternalUserId());
}
}
private void editExternalContact(WxCpXmlMessageVO message) {
if (message.getExternalUserId() != null) {
weCustomerService.getCustomersInfoAndSynchWeCustomer(message.getExternalUserId());
}
}
private void addExternalContact(WxCpXmlMessageVO message) {
try {
Threads.SINGLE_THREAD_POOL.submit(new Runnable() {
@Override
public void run() {
if (message.getExternalUserId() != null) {
weCustomerService.getCustomersInfoAndSynchWeCustomer(message.getExternalUserId());
}
//向扫码客户发送欢迎语
if (message.getState() != null && message.getWelcomeCode() != null) {
log.info("执行发送欢迎语>>>>>>>>>>>>>>>");
WeWelcomeMsg.WeWelcomeMsgBuilder weWelcomeMsgBuilder = WeWelcomeMsg.builder().welcome_code(message.getWelcomeCode());
WeEmpleCodeDto messageMap = weEmpleCodeService.selectWelcomeMsgByActivityScene(message.getState(),message.getUserId());
String empleCodeId = messageMap.getEmpleCodeId();
//查询活码对应标签
List<WeEmpleCodeTag> tagList = weEmpleCodeTagService.list(new LambdaQueryWrapper<WeEmpleCodeTag>()
.eq(WeEmpleCodeTag::getEmpleCodeId, empleCodeId));
//查询外部联系人与通讯录关系数据
WeFlowerCustomerRel weFlowerCustomerRel = weFlowerCustomerRelService.getOne(new LambdaQueryWrapper<WeFlowerCustomerRel>()
.eq(WeFlowerCustomerRel::getUserId, message.getUserId())
.eq(WeFlowerCustomerRel::getExternalUserid, message.getExternalUserId()));
//为外部联系人添加员工活码标签
List<WeFlowerCustomerTagRel> weFlowerCustomerTagRels = new ArrayList<>();
Optional.ofNullable(weFlowerCustomerRel).ifPresent(weFlowerCustomerRel1 -> {
Optional.ofNullable(tagList).orElseGet(ArrayList::new).forEach(tag ->{
weFlowerCustomerTagRels.add(
WeFlowerCustomerTagRel.builder()
.flowerCustomerRelId(weFlowerCustomerRel.getId())
.tagId(tag.getTagId())
.createTime(new Date())
.build()
);
});
weFlowerCustomerTagRelService.saveOrUpdateBatch(weFlowerCustomerTagRels);
});
log.debug(">>>>>>>>>欢迎语查询结果:{}", JSONObject.toJSONString(messageMap));
if (messageMap != null) {
if (StringUtils.isNotEmpty(messageMap.getWelcomeMsg())){
weWelcomeMsgBuilder.text(WeWelcomeMsg.Text.builder()
.content(messageMap.getWelcomeMsg()).build());
}
if(StringUtils.isNotEmpty(messageMap.getCategoryId())){
WeMediaDto weMediaDto = weMaterialService
.uploadTemporaryMaterial(messageMap.getMaterialUrl(),messageMap.getMaterialName(), MediaType.IMAGE.getMediaType());
Optional.ofNullable(weMediaDto).ifPresent(media ->{
weWelcomeMsgBuilder.image(WeWelcomeMsg.Image.builder().media_id(media.getMedia_id())
.pic_url(media.getUrl()).build());
});
}
weCustomerService.sendWelcomeMsg(weWelcomeMsgBuilder.build());
}
}
}
});
} catch (Exception e) {
e.printStackTrace();
log.error("执行发送欢迎语失败!",e);
}
weStrategyBeanFactory.getResource(changeType,message);
}
}
package com.linkwechat.wecom.factory.impl;
import com.linkwechat.wecom.domain.vo.WxCpXmlMessageVO;
import com.linkwechat.wecom.factory.WeCallBackEventFactory;
import com.linkwechat.wecom.factory.WeStrategyBeanFactory;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
/**
* @author danmo
* @description 客户标签事件
* @date 2021/1/20 1:13
**/
@Service
@Slf4j
public class WeEventChangeExternalTagImpl implements WeCallBackEventFactory {
@Autowired
private WeStrategyBeanFactory weStrategyBeanFactory;
@Override
public void eventHandle(WxCpXmlMessageVO message) {
String changeType = message.getChangeType()+"CustomerTag";
weStrategyBeanFactory.getResource(changeType,message);
}
}
package com.linkwechat.wecom.factory.impl.customer;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.linkwechat.common.enums.MediaType;
import com.linkwechat.common.utils.StringUtils;
import com.linkwechat.common.utils.Threads;
import com.linkwechat.wecom.domain.WeEmpleCodeTag;
import com.linkwechat.wecom.domain.WeFlowerCustomerRel;
import com.linkwechat.wecom.domain.WeFlowerCustomerTagRel;
import com.linkwechat.wecom.domain.dto.WeEmpleCodeDto;
import com.linkwechat.wecom.domain.dto.WeMediaDto;
import com.linkwechat.wecom.domain.dto.WeWelcomeMsg;
import com.linkwechat.wecom.domain.vo.WxCpXmlMessageVO;
import com.linkwechat.wecom.factory.WeEventStrategy;
import com.linkwechat.wecom.service.*;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Optional;
/**
* @author danmo
* @description 新增客户事件
* @date 2021/1/20 23:18
**/
@Slf4j
@Component("add_external_contact")
public class WeCallBackAddExternalContactImpl extends WeEventStrategy {
@Autowired
private IWeCustomerService weCustomerService;
@Autowired
private IWeEmpleCodeTagService weEmpleCodeTagService;
@Autowired
private IWeEmpleCodeService weEmpleCodeService;
@Autowired
private IWeFlowerCustomerRelService weFlowerCustomerRelService;
@Autowired
private IWeFlowerCustomerTagRelService weFlowerCustomerTagRelService;
@Autowired
private IWeMaterialService weMaterialService;
@Override
public void eventHandle(WxCpXmlMessageVO message) {
try {
if (message.getExternalUserId() != null) {
weCustomerService.getCustomersInfoAndSynchWeCustomer(message.getExternalUserId());
}
//向扫码客户发送欢迎语
if (message.getState() != null && message.getWelcomeCode() != null) {
log.info("执行发送欢迎语>>>>>>>>>>>>>>>");
WeWelcomeMsg.WeWelcomeMsgBuilder weWelcomeMsgBuilder = WeWelcomeMsg.builder().welcome_code(message.getWelcomeCode());
WeEmpleCodeDto messageMap = weEmpleCodeService.selectWelcomeMsgByActivityScene(message.getState(),message.getUserId());
String empleCodeId = messageMap.getEmpleCodeId();
//查询活码对应标签
List<WeEmpleCodeTag> tagList = weEmpleCodeTagService.list(new LambdaQueryWrapper<WeEmpleCodeTag>()
.eq(WeEmpleCodeTag::getEmpleCodeId, empleCodeId));
//查询外部联系人与通讯录关系数据
WeFlowerCustomerRel weFlowerCustomerRel = weFlowerCustomerRelService.getOne(new LambdaQueryWrapper<WeFlowerCustomerRel>()
.eq(WeFlowerCustomerRel::getUserId, message.getUserId())
.eq(WeFlowerCustomerRel::getExternalUserid, message.getExternalUserId()));
//为外部联系人添加员工活码标签
List<WeFlowerCustomerTagRel> weFlowerCustomerTagRels = new ArrayList<>();
Optional.ofNullable(weFlowerCustomerRel).ifPresent(weFlowerCustomerRel1 -> {
Optional.ofNullable(tagList).orElseGet(ArrayList::new).forEach(tag ->{
weFlowerCustomerTagRels.add(
WeFlowerCustomerTagRel.builder()
.flowerCustomerRelId(weFlowerCustomerRel.getId())
.tagId(tag.getTagId())
.createTime(new Date())
.build()
);
});
weFlowerCustomerTagRelService.saveOrUpdateBatch(weFlowerCustomerTagRels);
});
log.debug(">>>>>>>>>欢迎语查询结果:{}", JSONObject.toJSONString(messageMap));
if (messageMap != null) {
if (StringUtils.isNotEmpty(messageMap.getWelcomeMsg())){
weWelcomeMsgBuilder.text(WeWelcomeMsg.Text.builder()
.content(messageMap.getWelcomeMsg()).build());
}
if(StringUtils.isNotEmpty(messageMap.getCategoryId())){
WeMediaDto weMediaDto = weMaterialService
.uploadTemporaryMaterial(messageMap.getMaterialUrl(),messageMap.getMaterialName(), MediaType.IMAGE.getMediaType());
Optional.ofNullable(weMediaDto).ifPresent(media ->{
weWelcomeMsgBuilder.image(WeWelcomeMsg.Image.builder().media_id(media.getMedia_id())
.pic_url(media.getUrl()).build());
});
}
weCustomerService.sendWelcomeMsg(weWelcomeMsgBuilder.build());
}
}
} catch (Exception e) {
e.printStackTrace();
log.error("执行发送欢迎语失败!",e);
}
}
}
package com.linkwechat.wecom.factory.impl.customer;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.linkwechat.common.enums.MediaType;
import com.linkwechat.common.utils.StringUtils;
import com.linkwechat.wecom.domain.WeEmpleCodeTag;
import com.linkwechat.wecom.domain.WeFlowerCustomerRel;
import com.linkwechat.wecom.domain.WeFlowerCustomerTagRel;
import com.linkwechat.wecom.domain.dto.WeEmpleCodeDto;
import com.linkwechat.wecom.domain.dto.WeMediaDto;
import com.linkwechat.wecom.domain.dto.WeWelcomeMsg;
import com.linkwechat.wecom.domain.vo.WxCpXmlMessageVO;
import com.linkwechat.wecom.factory.WeEventStrategy;
import com.linkwechat.wecom.service.*;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Optional;
/**
* @author danmo
* @description 外部联系人免验证添加成员事件
* @date 2021/1/20 23:28
**/
@Slf4j
@Component("add_half_external_contact")
public class WeCallBackAddHalfExternalContactImpl extends WeEventStrategy {
@Autowired
private IWeCustomerService weCustomerService;
@Autowired
private IWeEmpleCodeTagService weEmpleCodeTagService;
@Autowired
private IWeEmpleCodeService weEmpleCodeService;
@Autowired
private IWeFlowerCustomerRelService weFlowerCustomerRelService;
@Autowired
private IWeFlowerCustomerTagRelService weFlowerCustomerTagRelService;
@Autowired
private IWeMaterialService weMaterialService;
@Override
public void eventHandle(WxCpXmlMessageVO message) {
try {
if (message.getExternalUserId() != null) {
weCustomerService.getCustomersInfoAndSynchWeCustomer(message.getExternalUserId());
}
//向扫码客户发送欢迎语
if (message.getState() != null && message.getWelcomeCode() != null) {
log.info("执行发送欢迎语>>>>>>>>>>>>>>>");
WeWelcomeMsg.WeWelcomeMsgBuilder weWelcomeMsgBuilder = WeWelcomeMsg.builder().welcome_code(message.getWelcomeCode());
WeEmpleCodeDto messageMap = weEmpleCodeService.selectWelcomeMsgByActivityScene(message.getState(),message.getUserId());
String empleCodeId = messageMap.getEmpleCodeId();
//查询活码对应标签
List<WeEmpleCodeTag> tagList = weEmpleCodeTagService.list(new LambdaQueryWrapper<WeEmpleCodeTag>()
.eq(WeEmpleCodeTag::getEmpleCodeId, empleCodeId));
//查询外部联系人与通讯录关系数据
WeFlowerCustomerRel weFlowerCustomerRel = weFlowerCustomerRelService.getOne(new LambdaQueryWrapper<WeFlowerCustomerRel>()
.eq(WeFlowerCustomerRel::getUserId, message.getUserId())
.eq(WeFlowerCustomerRel::getExternalUserid, message.getExternalUserId()));
//为外部联系人添加员工活码标签
List<WeFlowerCustomerTagRel> weFlowerCustomerTagRels = new ArrayList<>();
Optional.ofNullable(weFlowerCustomerRel).ifPresent(weFlowerCustomerRel1 -> {
Optional.ofNullable(tagList).orElseGet(ArrayList::new).forEach(tag ->{
weFlowerCustomerTagRels.add(
WeFlowerCustomerTagRel.builder()
.flowerCustomerRelId(weFlowerCustomerRel.getId())
.tagId(tag.getTagId())
.createTime(new Date())
.build()
);
});
weFlowerCustomerTagRelService.saveOrUpdateBatch(weFlowerCustomerTagRels);
});
log.debug(">>>>>>>>>欢迎语查询结果:{}", JSONObject.toJSONString(messageMap));
if (messageMap != null) {
if (StringUtils.isNotEmpty(messageMap.getWelcomeMsg())){
weWelcomeMsgBuilder.text(WeWelcomeMsg.Text.builder()
.content(messageMap.getWelcomeMsg()).build());
}
if(StringUtils.isNotEmpty(messageMap.getCategoryId())){
WeMediaDto weMediaDto = weMaterialService
.uploadTemporaryMaterial(messageMap.getMaterialUrl(),messageMap.getMaterialName(), MediaType.IMAGE.getMediaType());
Optional.ofNullable(weMediaDto).ifPresent(media ->{
weWelcomeMsgBuilder.image(WeWelcomeMsg.Image.builder().media_id(media.getMedia_id())
.pic_url(media.getUrl()).build());
});
}
weCustomerService.sendWelcomeMsg(weWelcomeMsgBuilder.build());
}
}
} catch (Exception e) {
e.printStackTrace();
log.error("执行发送欢迎语失败!",e);
}
}
}
package com.linkwechat.wecom.factory.impl.customer;
import com.linkwechat.wecom.domain.vo.WxCpXmlMessageVO;
import com.linkwechat.wecom.factory.WeEventStrategy;
import com.linkwechat.wecom.service.IWeCustomerService;
import com.linkwechat.wecom.service.IWeFlowerCustomerRelService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
/**
* @author danmo
* @description 删除企业客户事件
* @date 2021/1/20 23:33
**/
@Slf4j
@Component("del_external_contact")
public class WeCallBackDelExternalContactImpl extends WeEventStrategy {
@Autowired
private IWeCustomerService weCustomerService;
@Autowired
private IWeFlowerCustomerRelService weFlowerCustomerRelService;
@Override
public void eventHandle(WxCpXmlMessageVO message) {
if (message.getExternalUserId() != null) {
weCustomerService.deleteCustomersByEid(message.getExternalUserId());
weFlowerCustomerRelService.deleteFollowUser(message.getUserId(),message.getExternalUserId());
}
}
}
package com.linkwechat.wecom.factory.impl.customer;
import com.alibaba.fastjson.JSONObject;
import com.linkwechat.common.constant.WeConstans;
import com.linkwechat.common.enums.MessageType;
import com.linkwechat.wecom.client.WeMessagePushClient;
import com.linkwechat.wecom.domain.WeCorpAccount;
import com.linkwechat.wecom.domain.WeCustomer;
import com.linkwechat.wecom.domain.dto.WeMessagePushDto;
import com.linkwechat.wecom.domain.dto.message.TextMessageDto;
import com.linkwechat.wecom.domain.vo.WxCpXmlMessageVO;
import com.linkwechat.wecom.factory.WeEventStrategy;
import com.linkwechat.wecom.service.IWeCorpAccountService;
import com.linkwechat.wecom.service.IWeCustomerService;
import com.linkwechat.wecom.service.IWeFlowerCustomerRelService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.util.Arrays;
import java.util.List;
import java.util.Optional;
import java.util.stream.Collectors;
/**
* @author danmo
* @description 删除跟进成员事件
* @date 2021/1/20 23:36
**/
@Slf4j
@Component("del_follow_user")
public class WeCallBackDelFollowUserImpl extends WeEventStrategy {
@Autowired
private IWeCustomerService weCustomerService;
@Autowired
private IWeFlowerCustomerRelService weFlowerCustomerRelService;
@Autowired
private IWeCorpAccountService weCorpAccountService;
@Autowired
private WeMessagePushClient weMessagePushClient;
@Override
public void eventHandle(WxCpXmlMessageVO message) {
try {
if (message.getUserId() != null && message.getExternalUserId() != null) {
weFlowerCustomerRelService.deleteFollowUser(message.getUserId(), message.getExternalUserId());
WeCorpAccount validWeCorpAccount = weCorpAccountService.findValidWeCorpAccount();
Optional.ofNullable(validWeCorpAccount).ifPresent(weCorpAccount -> {
String customerChurnNoticeSwitch = weCorpAccount.getCustomerChurnNoticeSwitch();
if (WeConstans.DEL_FOLLOW_USER_SWITCH_OPEN.equals(customerChurnNoticeSwitch)){
WeCustomer weCustomer = weCustomerService.selectWeCustomerById(message.getExternalUserId());
String content = "您已经被客户@"+weCustomer.getName()+"删除!" ;
TextMessageDto textMessageDto = new TextMessageDto();
textMessageDto.setContent(content);
WeMessagePushDto weMessagePushDto = new WeMessagePushDto();
weMessagePushDto.setMsgtype(MessageType.TEXT.getMessageType());
weMessagePushDto.setTouser(message.getUserId());
weMessagePushDto.setText(textMessageDto);
Optional.ofNullable(validWeCorpAccount).map(WeCorpAccount::getAgentId).ifPresent(agentId -> {
weMessagePushDto.setAgentid(Integer.valueOf(agentId));
});
weMessagePushClient.sendMessageToUser(weMessagePushDto);
}
});
}
} catch (Exception e) {
e.printStackTrace();
log.error("del_follow_user>>>>>>>>>>>>>param:{},ex:{}", JSONObject.toJSONString(message),e);
}
}
}
package com.linkwechat.wecom.factory.impl.customer;
import com.linkwechat.wecom.domain.vo.WxCpXmlMessageVO;
import com.linkwechat.wecom.factory.WeEventStrategy;
import com.linkwechat.wecom.service.IWeCustomerService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
/**
* @author danmo
* @description 编辑客户事件
* @date 2021/1/20 23:25
**/
@Slf4j
@Component("edit_external_contact")
public class WeCallBackEditExternalContactImpl extends WeEventStrategy {
@Autowired
private IWeCustomerService weCustomerService;
@Override
public void eventHandle(WxCpXmlMessageVO message) {
if (message.getExternalUserId() != null) {
weCustomerService.getCustomersInfoAndSynchWeCustomer(message.getExternalUserId());
}
}
}
package com.linkwechat.wecom.factory.impl.customer;
import com.linkwechat.common.constant.WeConstans;
import com.linkwechat.wecom.client.WeMessagePushClient;
import com.linkwechat.wecom.domain.WeChatContactMapping;
import com.linkwechat.wecom.domain.vo.WxCpXmlMessageVO;
import com.linkwechat.wecom.factory.WeEventStrategy;
import com.linkwechat.wecom.service.*;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
/**
* @author danmo
* @description 客户同意进行聊天内容存档事件回调
* @date 2021/1/21 1:24
**/
@Slf4j
@Component("msg_audit_approved")
public class WeCallBackMsgAuditApprovedImpl extends WeEventStrategy {
@Autowired
private IWeCustomerService weCustomerService;
@Autowired
private IWeChatContactMappingService weChatContactMappingService;
@Override
public void eventHandle(WxCpXmlMessageVO message) {
String userId = message.getUserId();
String externalUserId = message.getExternalUserId();
WeChatContactMapping fromMapping = new WeChatContactMapping();
fromMapping.setFromId(userId);
fromMapping.setReceiveId(externalUserId);
fromMapping.setIsCustom(WeConstans.ID_TYPE_EX);
weChatContactMappingService.insertWeChatContactMapping(fromMapping);
WeChatContactMapping receiveMapping = new WeChatContactMapping();
receiveMapping.setFromId(externalUserId);
receiveMapping.setReceiveId(userId);
receiveMapping.setIsCustom(WeConstans.ID_TYPE_USER);
weChatContactMappingService.insertWeChatContactMapping(receiveMapping);
weCustomerService.updateCustomerChatStatus(externalUserId);
}
}
\ No newline at end of file
package com.linkwechat.wecom.factory.impl.customer;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.linkwechat.common.enums.TransferFailReason;
import com.linkwechat.wecom.domain.WeAllocateCustomer;
import com.linkwechat.wecom.domain.vo.WxCpXmlMessageVO;
import com.linkwechat.wecom.factory.WeEventStrategy;
import com.linkwechat.wecom.service.IWeAllocateCustomerService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
/**
* @author danmo
* @description 客户接替失败事件
* @date 2021/1/20 23:41
**/
@Slf4j
@Component("transfer_fail")
public class WeCallbackTransferFailImpl extends WeEventStrategy {
@Autowired
private IWeAllocateCustomerService iWeAllocateCustomerService;
@Override
public void eventHandle(WxCpXmlMessageVO message) {
String userId = message.getUserId();
String externalUserId = message.getExternalUserId();
String failReason = message.getFailReason();
WeAllocateCustomer weAllocateCustomer = WeAllocateCustomer.builder().failReason(TransferFailReason.getReason(failReason))
.status(TransferFailReason.getNum(failReason)).build();
iWeAllocateCustomerService.update(weAllocateCustomer,new LambdaQueryWrapper<WeAllocateCustomer>().eq(WeAllocateCustomer::getTakeoverUserid,userId)
.eq(WeAllocateCustomer::getExternalUserid,externalUserId));
}
}
package com.linkwechat.wecom.factory.impl.customergroup;
import com.linkwechat.wecom.domain.vo.WxCpXmlMessageVO;
import com.linkwechat.wecom.factory.WeEventStrategy;
import com.linkwechat.wecom.service.IWeGroupService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
/**
* @author danmo
* @description 客户群创建事件
* @date 2021/1/20 0:28
**/
@Slf4j
@Component("create")
public class WeCallBackCreateGroupImpl extends WeEventStrategy {
@Autowired
private IWeGroupService weGroupService;
@Override
public void eventHandle(WxCpXmlMessageVO message) {
try {
weGroupService.createWeGroup(message.getChatId());
} catch (Exception e) {
e.printStackTrace();
log.error("create>>>>>>>>>param:{},ex:{}",message.getChatId(),e);
}
}
}
package com.linkwechat.wecom.factory.impl.customergroup;
import com.linkwechat.wecom.domain.vo.WxCpXmlMessageVO;
import com.linkwechat.wecom.factory.WeEventStrategy;
import com.linkwechat.wecom.service.IWeGroupService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
/**
* @author danmo
* @description 客户群解散事件
* @date 2021/1/20 1:07
**/
@Slf4j
@Component("dismiss")
public class WeCallBackDismissImpl extends WeEventStrategy {
@Autowired
private IWeGroupService weGroupService;
@Override
public void eventHandle(WxCpXmlMessageVO message) {
try {
weGroupService.deleteWeGroup(message.getChatId());
} catch (Exception e) {
e.printStackTrace();
log.error("dismiss>>>>>>>>>param:{},ex:{}",message.getChatId(),e);
}
}
}
package com.linkwechat.wecom.factory.impl.customergroup;
import com.linkwechat.wecom.domain.vo.WxCpXmlMessageVO;
import com.linkwechat.wecom.factory.WeEventStrategy;
import com.linkwechat.wecom.service.IWeGroupService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
/**
* @author danmo
* @description 客户群变更事件
* @date 2021/1/20 0:39
**/
@Slf4j
@Component("update")
public class WeCallBackUpdateGroupImpl extends WeEventStrategy {
@Autowired
private IWeGroupService weGroupService;
@Override
public void eventHandle(WxCpXmlMessageVO message) {
try {
weGroupService.updateWeGroup(message.getChatId());
} catch (Exception e) {
e.printStackTrace();
log.error("update>>>>>>>>>param:{},ex:{}",message.getChatId(),e);
}
}
}
package com.linkwechat.wecom.factory.impl.party;
import com.linkwechat.wecom.domain.WeDepartment;
import com.linkwechat.wecom.domain.vo.WxCpXmlMessageVO;
import com.linkwechat.wecom.factory.WeEventStrategy;
import com.linkwechat.wecom.service.IWeDepartmentService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
/**
* @author danmo
* @description 创建部门事件
* @date 2021/1/20 22:54
**/
@Slf4j
@Component("create_party")
public class WeCallBackCreatePartyImpl extends WeEventStrategy {
@Autowired
private IWeDepartmentService weDepartmentService;
@Override
public void eventHandle(WxCpXmlMessageVO message) {
try {
weDepartmentService.insertWeDepartmentNoToWeCom(setWeDepartMent(message));
} catch (Exception e) {
e.printStackTrace();
log.error(e.getMessage());
}
}
}
package com.linkwechat.wecom.factory.impl.party;
import com.linkwechat.wecom.domain.vo.WxCpXmlMessageVO;
import com.linkwechat.wecom.factory.WeEventStrategy;
import com.linkwechat.wecom.service.IWeDepartmentService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
/**
* @author danmo
* @description 删除部门事件
* @date 2021/1/20 23:04
**/
@Slf4j
@Component("delete_party")
public class WeCallBackDeletePartyImpl extends WeEventStrategy {
@Autowired
private IWeDepartmentService weDepartmentService;
@Override
public void eventHandle(WxCpXmlMessageVO message) {
try {
weDepartmentService.removeById(message.getId());
} catch (Exception e) {
e.printStackTrace();
log.error(e.getMessage());
}
}
}
package com.linkwechat.wecom.factory.impl.party;
import com.linkwechat.wecom.domain.WeDepartment;
import com.linkwechat.wecom.domain.vo.WxCpXmlMessageVO;
import com.linkwechat.wecom.factory.WeEventStrategy;
import com.linkwechat.wecom.service.IWeDepartmentService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
/**
* @author danmo
* @description 修改部门事件
* @date 2021/1/20 23:00
**/
@Slf4j
@Component("update_party")
public class WeCallBackUpdatePartyImpl extends WeEventStrategy {
@Autowired
private IWeDepartmentService weDepartmentService;
@Override
public void eventHandle(WxCpXmlMessageVO message) {
try {
weDepartmentService.updateById(setWeDepartMent(message));
} catch (Exception e) {
e.printStackTrace();
log.error(e.getMessage());
}
}
}
package com.linkwechat.wecom.factory.impl.tag;
import com.linkwechat.wecom.domain.vo.WxCpXmlMessageVO;
import com.linkwechat.wecom.factory.WeEventStrategy;
import com.linkwechat.wecom.service.IWeTagGroupService;
import com.linkwechat.wecom.service.IWeTagService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
/**
* @author danmo
* @description 创建标签事件
* @date 2021/1/21 1:18
**/
@Slf4j
@Component("createCustomerTag")
public class WeCallBackCreateCustomerTagImpl extends WeEventStrategy {
@Autowired
private IWeTagGroupService weTagGroupService;
@Autowired
private IWeTagService weTagService;
@Override
public void eventHandle(WxCpXmlMessageVO message) {
try {
switch (message.getTagType()){
case tagGroup:
weTagGroupService.createTagGroup(message.getId());
break;
case tag:
weTagService.creatTag(message.getTagId());
break;
default:
break;
}
} catch (Exception e) {
e.printStackTrace();
log.error("createCustomerTag>>>>>>>>>param:{},ex:{}",message.getId(),e);
}
}
}
package com.linkwechat.wecom.factory.impl.tag;
import com.linkwechat.wecom.domain.vo.WxCpXmlMessageVO;
import com.linkwechat.wecom.factory.WeEventStrategy;
import com.linkwechat.wecom.service.IWeTagGroupService;
import com.linkwechat.wecom.service.IWeTagService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
/**
* @author danmo
* @description 企业客户标签删除事件
* @date 2021/1/21 1:18
**/
@Slf4j
@Component("deleteCustomerTag")
public class WeCallBackDeleteCustomerTagImpl extends WeEventStrategy {
@Autowired
private IWeTagGroupService weTagGroupService;
@Autowired
private IWeTagService weTagService;
@Override
public void eventHandle(WxCpXmlMessageVO message) {
try {
switch (message.getTagType()){
case tagGroup:
weTagGroupService.deleteTagGroup(message.getId());
break;
case tag:
weTagService.deleteTag(message.getTagId());
break;
default:
break;
}
} catch (Exception e) {
e.printStackTrace();
log.error("deleteCustomerTag>>>>>>>>>param:{},ex:{}",message.getId(),e);
}
}
}
package com.linkwechat.wecom.factory.impl.tag;
import com.linkwechat.wecom.domain.vo.WxCpXmlMessageVO;
import com.linkwechat.wecom.factory.WeEventStrategy;
import com.linkwechat.wecom.service.IWeTagGroupService;
import com.linkwechat.wecom.service.IWeTagService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
/**
* @author danmo
* @description 企业客户标签变更事件
* @date 2021/1/21 1:21
**/
@Slf4j
@Component("updateCustomerTag")
public class WeCallBackUpdateCustomerTagImpl extends WeEventStrategy {
@Autowired
private IWeTagGroupService weTagGroupService;
@Autowired
private IWeTagService weTagService;
@Override
public void eventHandle(WxCpXmlMessageVO message) {
try {
switch (message.getTagType()){
case tagGroup:
weTagGroupService.updateTagGroup(message.getId());
break;
case tag:
weTagService.updateTag(message.getTagId());
break;
default:
break;
}
} catch (Exception e) {
e.printStackTrace();
log.error("updateCustomerTag>>>>>>>>>param:{},ex:{}",message.getId(),e);
}
}
}
package com.linkwechat.wecom.factory.impl.tag;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.linkwechat.wecom.domain.WeFlowerCustomerRel;
import com.linkwechat.wecom.domain.WeFlowerCustomerTagRel;
import com.linkwechat.wecom.domain.vo.WxCpXmlMessageVO;
import com.linkwechat.wecom.factory.WeEventStrategy;
import com.linkwechat.wecom.service.IWeFlowerCustomerRelService;
import com.linkwechat.wecom.service.IWeFlowerCustomerTagRelService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Optional;
import java.util.stream.Collectors;
/**
* @author danmo
* @description 标签变更事件
* @date 2021/1/20 23:10
**/
@Slf4j
@Component("update_tag")
public class WeCallBackUpdateUserTagImpl extends WeEventStrategy {
@Autowired
private IWeFlowerCustomerTagRelService weFlowerCustomerTagRelService;
@Autowired
private IWeFlowerCustomerRelService weFlowerCustomerRelService;
@Override
public void eventHandle(WxCpXmlMessageVO message) {
try {
String tagId = message.getTagId();
//标签中新增的成员userid列表,用逗号分隔
List<String> addUserItemsList = Arrays.stream(Optional.ofNullable(message.getAddUserItems())
.orElse("").split(",")).collect(Collectors.toList());
//标签中删除的成员userid列表,用逗号分隔
List<String> delUserItemsList = Arrays.stream(Optional.ofNullable(message.getDelUserItems())
.orElse("").split(",")).collect(Collectors.toList());
//标签中新增的成员userid列表,建立关联
List<WeFlowerCustomerTagRel> weFlowerCustomerTagRels = new ArrayList<>();
LambdaQueryWrapper<WeFlowerCustomerRel> relLambdaQueryWrapper = new LambdaQueryWrapper<>();
relLambdaQueryWrapper.in(WeFlowerCustomerRel::getUserId, addUserItemsList);
List<WeFlowerCustomerRel> flowerCustomerRelList = weFlowerCustomerRelService.list(relLambdaQueryWrapper);
List<Long> idList = Optional.ofNullable(flowerCustomerRelList).orElseGet(ArrayList::new)
.stream().map(WeFlowerCustomerRel::getId).collect(Collectors.toList());
idList.forEach(id -> {
weFlowerCustomerTagRels.add(WeFlowerCustomerTagRel.builder().flowerCustomerRelId(id)
.tagId(tagId)
.build());
});
weFlowerCustomerTagRelService.batchInsetWeFlowerCustomerTagRel(weFlowerCustomerTagRels);
//当前标签对应成员列表
LambdaQueryWrapper<WeFlowerCustomerTagRel> tagRelLambdaQueryWrapper = new LambdaQueryWrapper<>();
tagRelLambdaQueryWrapper.eq(WeFlowerCustomerTagRel::getTagId, tagId);
List<WeFlowerCustomerTagRel> tagRelList = weFlowerCustomerTagRelService.list(tagRelLambdaQueryWrapper);
List<Long> flowerCustomerRelIdList = Optional.ofNullable(tagRelList).orElseGet(ArrayList::new)
.stream().map(WeFlowerCustomerTagRel::getFlowerCustomerRelId).collect(Collectors.toList());
if (!flowerCustomerRelIdList.isEmpty()) {
LambdaQueryWrapper<WeFlowerCustomerRel> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.in(WeFlowerCustomerRel::getId, flowerCustomerRelIdList)
.in(WeFlowerCustomerRel::getUserId, delUserItemsList);
List<WeFlowerCustomerRel> relList = weFlowerCustomerRelService.list(queryWrapper);
List<Long> relIdList = Optional.ofNullable(relList).orElseGet(ArrayList::new)
.stream().map(WeFlowerCustomerRel::getId).collect(Collectors.toList());
//标签中删除的成员userid列表
LambdaQueryWrapper<WeFlowerCustomerTagRel> tagRelQueryWrapper = new LambdaQueryWrapper<>();
tagRelQueryWrapper.in(WeFlowerCustomerTagRel::getFlowerCustomerRelId, relIdList);
weFlowerCustomerTagRelService.remove(tagRelQueryWrapper);
}
} catch (Exception e) {
e.printStackTrace();
log.error(e.getMessage());
}
}
}
package com.linkwechat.wecom.factory.impl.user;
import com.linkwechat.wecom.domain.vo.WxCpXmlMessageVO;
import com.linkwechat.wecom.factory.WeEventStrategy;
import com.linkwechat.wecom.service.IWeUserService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
/**
* @author danmo
* @description 新建外部联系人事件
* @date 2021/1/20 22:19
**/
@Slf4j
@Component("create_user")
public class WeCallBackCreateUserImpl extends WeEventStrategy {
@Autowired
private IWeUserService weUserService;
@Override
public void eventHandle(WxCpXmlMessageVO message) {
try {
weUserService.insertWeUserNoToWeCom(setWeUserData(message));
} catch (Exception e) {
e.printStackTrace();
log.error(e.getMessage());
}
}
}
package com.linkwechat.wecom.factory.impl.user;
import com.linkwechat.common.utils.StringUtils;
import com.linkwechat.wecom.domain.vo.WxCpXmlMessageVO;
import com.linkwechat.wecom.factory.WeEventStrategy;
import com.linkwechat.wecom.service.IWeUserService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
/**
* @author danmo
* @description 删除成员事件
* @date 2021/1/20 22:44
**/
@Slf4j
@Component("delete_user")
public class WeCallBackDeleteUserImpl extends WeEventStrategy {
@Autowired
private IWeUserService weUserService;
@Override
public void eventHandle(WxCpXmlMessageVO message) {
try {
weUserService.deleteUserNoToWeCom(message.getUserId());
} catch (Exception e) {
e.printStackTrace();
log.error(e.getMessage());
}
}
}
package com.linkwechat.wecom.factory.impl.user;
import com.linkwechat.wecom.domain.WeUser;
import com.linkwechat.wecom.domain.vo.WxCpXmlMessageVO;
import com.linkwechat.wecom.factory.WeEventStrategy;
import com.linkwechat.wecom.service.IWeUserService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
/**
* @author danmo
* @description 成员更新事件
* @date 2021/1/20 22:28
**/
@Slf4j
@Component("update_user")
public class WeCallBackUpdateUserImpl extends WeEventStrategy {
@Autowired
private IWeUserService weUserService;
@Override
public void eventHandle(WxCpXmlMessageVO message) {
try {
weUserService.updateWeUserNoToWeCom(setWeUserData(message));
} catch (Exception e) {
e.printStackTrace();
log.error(e.getMessage());
}
}
}
......@@ -62,6 +62,8 @@ public class WeAccessTokenInterceptor implements Interceptor{
token=iWeAccessTokenService.findProviderAccessToken();
}else if(Arrays.asList(weComeConfig.getNeedChatTokenUrl()).contains(uri)){ //需要会话存档token
token=iWeAccessTokenService.findChatAccessToken();
}else if(Arrays.asList(weComeConfig.getNeedAgentTokenUrl()).contains(uri)){ //需要应用token
token=iWeAccessTokenService.findAgentAccessToken();
}else{
token=iWeAccessTokenService.findCommonAccessToken();
}
......
......@@ -51,7 +51,7 @@ public interface WeTagMapper extends BaseMapper<WeTag>
* @param id 企业微信标签ID
* @return 结果
*/
public int deleteWeTagById(Long id);
public int deleteWeTagById(String id);
/**
* 批量删除企业微信标签
......@@ -59,7 +59,7 @@ public interface WeTagMapper extends BaseMapper<WeTag>
* @param ids 需要删除的数据ID
* @return 结果
*/
public int deleteWeTagByIds(Long[] ids);
public int deleteWeTagByIds(String[] ids);
/**
......
......@@ -20,10 +20,10 @@ public interface WeUserMapper extends BaseMapper<WeUser>
/**
* 查询通讯录相关客户
*
* @param id 通讯录相关客户ID
* @param userId 通讯录相关客户ID
* @return 通讯录相关客户
*/
public WeUser selectWeUserById(Long id);
public WeUser selectWeUserById(String userId);
/**
* 查询通讯录相关客户列表
......
......@@ -18,4 +18,6 @@ public interface IWeAccessTokenService {
public String findChatAccessToken();
public void removeToken();
String findAgentAccessToken();
}
\ No newline at end of file
......@@ -7,7 +7,7 @@ import com.linkwechat.common.core.domain.ConversationArchiveQuery;
import java.util.List;
/**
* @author sxw
* @author danmo
* @description 会话存档业务接口
* @date 2020/12/19 13:59
**/
......
......@@ -30,6 +30,8 @@ public interface IWeDepartmentService extends IService<WeDepartment>
*/
public void insertWeDepartment(WeDepartment weDepartment);
public int insertWeDepartmentNoToWeCom(WeDepartment weDepartment);
/**
* 修改企业微信组织架构相关
*
......
......@@ -20,4 +20,10 @@ public interface IWeGroupService extends IService<WeGroup> {
void synchWeGroup();
void createWeGroup(String chatId);
void updateWeGroup(String chatId);
void deleteWeGroup(String chatId);
}
......@@ -63,4 +63,10 @@ public interface IWeTagGroupService extends IService<WeTagGroup>
* @param isSync
*/
public void batchSaveOrUpdateTagGroupAndTag(List<WeCropGroupTagDto> tagGroup,Boolean isSync);
void createTagGroup(String id);
void deleteTagGroup(String id);
void updateTagGroup(String id);
}
......@@ -52,7 +52,7 @@ public interface IWeTagService extends IService<WeTag>
* @param ids 需要删除的企业微信标签ID
* @return 结果
*/
public int deleteWeTagByIds(Long[] ids);
public int deleteWeTagByIds(String[] ids);
/**
* 删除企业微信标签信息
......@@ -60,7 +60,7 @@ public interface IWeTagService extends IService<WeTag>
* @param id 企业微信标签ID
* @return 结果
*/
public int deleteWeTagById(Long id);
public int deleteWeTagById(String id);
/**
......@@ -70,4 +70,9 @@ public interface IWeTagService extends IService<WeTag>
*/
public int insertWeTagFromWeTagDto(WeTagDto weTagDto);
void creatTag(String tagId);
void deleteTag(String tagId);
void updateTag(String tagId);
}
......@@ -20,10 +20,10 @@ public interface IWeUserService extends IService<WeUser>
/**
* 查询通讯录相关客户
*
* @param id 通讯录相关客户ID
* @param userId 通讯录相关客户ID
* @return 通讯录相关客户
*/
public WeUser selectWeUserById(Long id);
public WeUser selectWeUserById(String userId);
/**
* 查询通讯录相关客户列表
......@@ -41,6 +41,13 @@ public interface IWeUserService extends IService<WeUser>
*/
public void insertWeUser(WeUser weUser);
/**
* 新增通讯录相关客户(不同步企微)
* @param weUser 通讯录相关客户
* @return
*/
public int insertWeUserNoToWeCom(WeUser weUser);
/**
* 修改通讯录相关客户
*
......@@ -49,6 +56,13 @@ public interface IWeUserService extends IService<WeUser>
*/
public void updateWeUser(WeUser weUser);
/**
* 修改通讯录相关客户(不同步企微)
* @param weUser 通讯录相关客户
* @return
*/
public int updateWeUserNoToWeCom(WeUser weUser);
/**
* 启用或禁用用户
......@@ -92,6 +106,13 @@ public interface IWeUserService extends IService<WeUser>
*/
void deleteUser(String[] ids);
/**
* 删除成员
* @param userId 成员id
* @return
*/
int deleteUserNoToWeCom(String userId);
/**
* 获取历史分配记录的成员
......
......@@ -106,6 +106,10 @@ public class WeAccessTokenServiceImpl implements IWeAccessTokenService {
WeAccessTokenDtoDto weAccessTokenDtoDto = accessTokenClient.getToken(wxCorpAccount.getCorpId(),wxCorpAccount.getChatSecret());
token=weAccessTokenDtoDto.getAccess_token();
expires_in=weAccessTokenDtoDto.getExpires_in();
}else if (WeConstans.WE_AGENT_ACCESS_TOKEN.equals(accessTokenKey)){
WeAccessTokenDtoDto weAccessTokenDtoDto = accessTokenClient.getToken(wxCorpAccount.getCorpId(),wxCorpAccount.getAgentSecret());
token=weAccessTokenDtoDto.getAccess_token();
expires_in=weAccessTokenDtoDto.getExpires_in();
}
if(StringUtils.isNotEmpty(token)){
......@@ -129,5 +133,10 @@ public class WeAccessTokenServiceImpl implements IWeAccessTokenService {
redisCache.deleteObject(WeConstans.WE_PROVIDER_ACCESS_TOKEN);
}
@Override
public String findAgentAccessToken() {
return findAccessToken(WeConstans.WE_AGENT_ACCESS_TOKEN);
}
}
......@@ -24,7 +24,7 @@ import java.util.Date;
import java.util.List;
/**
* @author sxw
* @author danmo
* @description 会话存档业务实现类
* @date 2020/12/19 14:00
**/
......
......@@ -476,7 +476,7 @@ public class WeCustomerServiceImpl extends ServiceImpl<WeCustomerMapper, WeCusto
if (WeConstans.WE_SUCCESS_CODE.equals(externalUserDetail.getErrcode())) {
//客户入库
WeCustomer weCustomer = new WeCustomer();
BeanUtils.copyPropertiesignoreOther(externalUserDetail.getExternal_contact(), weCustomer);
BeanUtils.copyPropertiesASM(externalUserDetail.getExternal_contact(), weCustomer);
this.saveOrUpdate(weCustomer);
//客户与通讯录客户关系
......@@ -491,10 +491,10 @@ public class WeCustomerServiceImpl extends ServiceImpl<WeCustomerMapper, WeCusto
.id(weFlowerCustomerRelId)
.userId(kk.getUserid())
.description(kk.getDescription())
.remarkCorpName(kk.getRemark_company())
.remarkMobiles(kk.getRemark_mobiles())
.operUserid(kk.getOper_userid())
.addWay(kk.getAdd_way())
.remarkCorpName(kk.getRemarkCorpName())
.remarkMobiles(kk.getRemarkMobiles())
.operUserid(kk.getUserid())
.addWay(kk.getAddWay())
.state(kk.getState())
.status("0")
.externalUserid(weCustomer.getExternalUserid())
......
......@@ -103,6 +103,15 @@ public class WeDepartmentServiceImpl extends ServiceImpl<WeDepartmentMapper,WeDe
}
@Override
public int insertWeDepartmentNoToWeCom(WeDepartment weDepartment) {
WeDepartment department = this.baseMapper.selectWeDepartmentById(weDepartment.getId());
if (department !=null){
return 0;
}
return this.baseMapper.insertWeDepartment(weDepartment);
}
/**
* 修改企业微信组织架构相关
*
......
......@@ -20,8 +20,6 @@ import com.linkwechat.wecom.mapper.WeGroupMapper;
import com.linkwechat.wecom.service.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Async;
import org.springframework.security.core.context.SecurityContext;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
......@@ -65,6 +63,7 @@ public class WeGroupServiceImpl extends ServiceImpl<WeGroupMapper, WeGroup> impl
private WeCustomerClient weCustomerClient;
@Override
public List<WeGroup> selectWeGroupList(WeGroup weGroup) {
return this.baseMapper.selectWeGroupList(weGroup);
}
......@@ -208,7 +207,7 @@ public class WeGroupServiceImpl extends ServiceImpl<WeGroupMapper, WeGroup> impl
List<WeGroupMember> weGroupMemberList = iWeGroupMemberService.list(new LambdaQueryWrapper<WeGroupMember>().in(WeGroupMember::getChatId,
weGroups.stream().map(WeGroup::getChatId).collect(Collectors.toList())));
//存量去重
if (CollectionUtil.isNotEmpty(weGroupMemberList)){
if (CollectionUtil.isNotEmpty(weGroupMemberList)) {
List<WeGroupMember> groupMemberList = weGroupMembers.stream().filter(e -> {
for (WeGroupMember weGroupMember : weGroupMemberList) {
if (e.getUserId().equals(weGroupMember.getUserId())) {
......@@ -218,7 +217,7 @@ public class WeGroupServiceImpl extends ServiceImpl<WeGroupMapper, WeGroup> impl
return true;
}).collect(Collectors.toList());
iWeGroupMemberService.saveBatch(groupMemberList);
}else {
} else {
iWeGroupMemberService.saveBatch(weGroupMembers);
}
}
......@@ -226,4 +225,111 @@ public class WeGroupServiceImpl extends ServiceImpl<WeGroupMapper, WeGroup> impl
}
@Override
@Transactional(rollbackFor = Exception.class)
public void createWeGroup(String chatId) {
List<WeGroup> weGroups = new ArrayList<>();
List<WeGroupMember> weGroupMembers = new ArrayList<>();
CustomerGroupDetail customerGroupDetail = weCustomerGroupClient.groupChatDetail(
new CustomerGroupDetail().new Params(chatId)
);
if (CollectionUtil.isNotEmpty(customerGroupDetail.getGroup_chat())) {
customerGroupDetail.getGroup_chat().stream().forEach(kk -> {
weGroups.add(
WeGroup.builder()
.chatId(kk.getChat_id())
.groupName(kk.getName())
.notice(kk.getNotice())
.owner(kk.getOwner())
.createTime(new Date(kk.getCreate_time() * 1000L))
.build()
);
List<CustomerGroupMember> memberLists = kk.getMember_list();
if (CollectionUtil.isNotEmpty(memberLists)) {
memberLists.stream().forEach(member -> {
weGroupMembers.add(
WeGroupMember.builder()
.chatId(kk.getChat_id())
.userId(member.getUserid())
.joinTime(new Date(member.getJoin_time() * 1000L))
.joinScene(member.getJoin_scene())
.joinType(member.getType())
.unionId(member.getUnionid())
.build()
);
});
}
});
this.saveOrUpdateBatch(weGroups);
iWeGroupMemberService.saveBatch(weGroupMembers);
}
}
@Override
@Transactional(rollbackFor = Exception.class)
public void updateWeGroup(String chatId) {
List<WeGroup> weGroups = new ArrayList<>();
List<WeGroupMember> weGroupMembers = new ArrayList<>();
CustomerGroupDetail customerGroupDetail = weCustomerGroupClient.groupChatDetail(
new CustomerGroupDetail().new Params(chatId)
);
if (CollectionUtil.isNotEmpty(customerGroupDetail.getGroup_chat())) {
customerGroupDetail.getGroup_chat().stream().forEach(kk -> {
weGroups.add(
WeGroup.builder()
.chatId(kk.getChat_id())
.groupName(kk.getName())
.notice(kk.getNotice())
.owner(kk.getOwner())
.createTime(new Date(kk.getCreate_time() * 1000L))
.build()
);
List<CustomerGroupMember> memberLists = kk.getMember_list();
if (CollectionUtil.isNotEmpty(memberLists)) {
memberLists.stream().forEach(member -> {
weGroupMembers.add(
WeGroupMember.builder()
.chatId(kk.getChat_id())
.userId(member.getUserid())
.joinTime(new Date(member.getJoin_time() * 1000L))
.joinScene(member.getJoin_scene())
.joinType(member.getType())
.unionId(member.getUnionid())
.build()
);
});
}
});
this.saveOrUpdateBatch(weGroups);
//获取表中成员信息
List<WeGroupMember> weGroupMemberList = iWeGroupMemberService.list(new LambdaQueryWrapper<WeGroupMember>()
.eq(WeGroupMember::getChatId, chatId));
if (weGroupMembers.size() > weGroupMemberList.size()) {
//成员信息取差集
List<WeGroupMember> list = weGroupMembers.stream().filter(m -> !weGroupMemberList.stream()
.map(d -> d.getUserId()).collect(Collectors.toList()).contains(m.getUserId()))
.collect(Collectors.toList());
iWeGroupMemberService.saveBatch(list);
} else if (weGroupMembers.size() < weGroupMemberList.size()) {
//成员信息取差集
List<WeGroupMember> list = weGroupMemberList.stream().filter(m -> !weGroupMembers.stream()
.map(d -> d.getUserId()).collect(Collectors.toList()).contains(m.getUserId()))
.collect(Collectors.toList());
iWeGroupMemberService.remove(new LambdaQueryWrapper<WeGroupMember>()
.eq(WeGroupMember::getChatId, chatId)
.in(WeGroupMember::getUserId, list.stream().map(WeGroupMember::getUserId)
.collect(Collectors.toList())));
}
}
}
@Override
@Transactional(rollbackFor = Exception.class)
public void deleteWeGroup(String chatId) {
this.baseMapper.delete(new LambdaQueryWrapper<WeGroup>().eq(WeGroup::getChatId,chatId));
iWeGroupMemberService.remove(new LambdaQueryWrapper<WeGroupMember>().eq(WeGroupMember::getChatId,chatId));
}
}
......@@ -28,13 +28,12 @@ import java.util.stream.Collectors;
/**
* 标签组Service业务层处理
*
*
* @author ruoyi
* @date 2020-09-07
*/
@Service
public class WeTagGroupServiceImpl extends ServiceImpl<WeTagGroupMapper,WeTagGroup> implements IWeTagGroupService
{
public class WeTagGroupServiceImpl extends ServiceImpl<WeTagGroupMapper, WeTagGroup> implements IWeTagGroupService {
@Autowired
private WeTagGroupMapper weTagGroupMapper;
......@@ -46,132 +45,122 @@ public class WeTagGroupServiceImpl extends ServiceImpl<WeTagGroupMapper,WeTagGr
private IWeTagService iWeTagService;
/**
* 查询标签组列表
*
*
* @param weTagGroup 标签组
* @return 标签组
*/
@Override
public List<WeTagGroup> selectWeTagGroupList(WeTagGroup weTagGroup)
{
public List<WeTagGroup> selectWeTagGroupList(WeTagGroup weTagGroup) {
return weTagGroupMapper.selectWeTagGroupList(weTagGroup);
}
/**
* 新增标签组
*
*
* @param weTagGroup 标签组
* @return 结果
*/
@Override
@Transactional(rollbackFor = Exception.class)
public void insertWeTagGroup(WeTagGroup weTagGroup)
{
public void insertWeTagGroup(WeTagGroup weTagGroup) {
List<WeTag> weTags = weTagGroup.getWeTags();
if(CollectionUtil.isEmpty(weTags)){
if (CollectionUtil.isEmpty(weTags)) {
this.save(weTagGroup);
}else{
} else {
WeCropGropTagDtlDto weCropGropTagDtlDto = weCropTagClient.addCorpTag(WeCropGroupTagDto.transformAddTag(weTagGroup));
if(weCropGropTagDtlDto.getErrcode().equals(WeConstans.WE_SUCCESS_CODE)){
this.batchSaveOrUpdateTagGroupAndTag(ListUtil.toList(weCropGropTagDtlDto.getTag_group()),false);
if (weCropGropTagDtlDto.getErrcode().equals(WeConstans.WE_SUCCESS_CODE)) {
this.batchSaveOrUpdateTagGroupAndTag(ListUtil.toList(weCropGropTagDtlDto.getTag_group()), false);
}
}
}
/**
* 修改标签组
*
*
* @param weTagGroup 标签组
* @return 结果
*/
@Override
@Transactional(rollbackFor = Exception.class)
public void updateWeTagGroup(WeTagGroup weTagGroup)
{
List<WeTag> weTags = weTagGroup.getWeTags();
//获取新增的集合
if(CollectionUtil.isNotEmpty(weTags)) {
List<WeTag> filterWeTags = weTags.stream().filter(v -> StringUtils.isEmpty(v.getTagId())).collect(Collectors.toList());
//同步新增标签到微信端
if(CollectionUtil.isNotEmpty(WeCropGroupTagDto.transformAddTag(weTagGroup).getTag())){
WeCropGropTagDtlDto
weCropGropTagDtlDto = weCropTagClient.addCorpTag( WeCropGroupTagDto.transformAddTag(weTagGroup));
if(weCropGropTagDtlDto.getErrcode().equals(WeConstans.WE_SUCCESS_CODE)){
//微信端返回的标签主键,设置到weTags中
Map<String, String> weCropTagMap = weCropGropTagDtlDto.getTag_group().getTag().stream()
.collect(Collectors.toMap(weCropTagDto -> weCropTagDto.getName(), weCropTagDto -> weCropTagDto.getId()));
filterWeTags.stream().forEach(tag->{
tag.setTagId(weCropTagMap.get(tag.getName()));
tag.setCreateTime(new Date());
});
}
}
public void updateWeTagGroup(WeTagGroup weTagGroup) {
List<WeTag> weTags = weTagGroup.getWeTags();
//获取新增的集合
if (CollectionUtil.isNotEmpty(weTags)) {
List<WeTag> filterWeTags = weTags.stream().filter(v -> StringUtils.isEmpty(v.getTagId())).collect(Collectors.toList());
//同步新增标签到微信端
if (CollectionUtil.isNotEmpty(WeCropGroupTagDto.transformAddTag(weTagGroup).getTag())) {
WeCropGropTagDtlDto
weCropGropTagDtlDto = weCropTagClient.addCorpTag(WeCropGroupTagDto.transformAddTag(weTagGroup));
if (weCropGropTagDtlDto.getErrcode().equals(WeConstans.WE_SUCCESS_CODE)) {
//微信端返回的标签主键,设置到weTags中
Map<String, String> weCropTagMap = weCropGropTagDtlDto.getTag_group().getTag().stream()
.collect(Collectors.toMap(weCropTagDto -> weCropTagDto.getName(), weCropTagDto -> weCropTagDto.getId()));
filterWeTags.stream().forEach(tag -> {
tag.setTagId(weCropTagMap.get(tag.getName()));
tag.setCreateTime(new Date());
});
}
}
//获取需要删除的数据
List<WeTag> removeWeTags = iWeTagService.list(new LambdaQueryWrapper<WeTag>().notIn(WeTag::getTagId,
weTags.stream().map(WeTag::getTagId).collect(Collectors.toList())).eq(WeTag::getGroupId,weTagGroup.getGroupId())
.eq(WeTag::getStatus,Constants.NORMAL_CODE));
//获取需要删除的数据
List<WeTag> removeWeTags = iWeTagService.list(new LambdaQueryWrapper<WeTag>().notIn(WeTag::getTagId,
weTags.stream().map(WeTag::getTagId).collect(Collectors.toList())).eq(WeTag::getGroupId, weTagGroup.getGroupId())
.eq(WeTag::getStatus, Constants.NORMAL_CODE));
if (CollectionUtil.isNotEmpty(removeWeTags)) {
//同步删除微信端的标签
weCropTagClient.delCorpTag(
WeCropDelDto.builder()
.group_id(ArrayUtil.toArray(ListUtil.toList(weTagGroup.getGroupId()), String.class))
.tag_id(ArrayUtil.toArray(removeWeTags.stream().map(WeTag::getTagId).collect(Collectors.toList()), String.class))
.build());
if (CollectionUtil.isNotEmpty(removeWeTags)) {
//同步删除微信端的标签
weCropTagClient.delCorpTag(
WeCropDelDto.builder()
.group_id(ArrayUtil.toArray(ListUtil.toList(weTagGroup.getGroupId()), String.class))
.tag_id(ArrayUtil.toArray(removeWeTags.stream().map(WeTag::getTagId).collect(Collectors.toList()), String.class))
.build());
//移除本地
removeWeTags.stream().forEach(v -> v.setStatus(Constants.DELETE_CODE));
iWeTagService.updateBatchById(removeWeTags);
}
//移除本地
removeWeTags.stream().forEach(v -> v.setStatus(Constants.DELETE_CODE));
iWeTagService.updateBatchById(removeWeTags);
}
//保存或更新wetag
filterWeTags.stream().forEach(v->v.setGroupId(weTagGroup.getGroupId()));
iWeTagService.saveOrUpdateBatch(filterWeTags);
//保存或更新wetag
filterWeTags.stream().forEach(v -> v.setGroupId(weTagGroup.getGroupId()));
iWeTagService.saveOrUpdateBatch(filterWeTags);
}
}
}
/**
* 批量删除标签组
*
*
* @param ids 需要删除的标签组ID
* @return 结果
*/
@Override
@Transactional
public int deleteWeTagGroupByIds(String[] ids)
{
public int deleteWeTagGroupByIds(String[] ids) {
int returnCode = weTagGroupMapper.deleteWeTagGroupByIds(ids);
if(returnCode> Constants.SERVICE_RETURN_SUCCESS_CODE){
if (returnCode > Constants.SERVICE_RETURN_SUCCESS_CODE) {
List<WeTag> weTags
= iWeTagService.list(new LambdaQueryWrapper<WeTag>().in(WeTag::getGroupId, ids));
if(CollectionUtil.isNotEmpty(weTags)){
if (CollectionUtil.isNotEmpty(weTags)) {
weCropTagClient.delCorpTag(
WeCropDelDto.builder()
.group_id(ids)
......@@ -186,8 +175,6 @@ public class WeTagGroupServiceImpl extends ServiceImpl<WeTagGroupMapper,WeTagGr
}
/**
* 同步标签
*/
......@@ -197,8 +184,8 @@ public class WeTagGroupServiceImpl extends ServiceImpl<WeTagGroupMapper,WeTagGr
WeCropGroupTagListDto weCropGroupTagListDto = weCropTagClient.getAllCorpTagList();
if(weCropGroupTagListDto.getErrcode().equals(WeConstans.WE_SUCCESS_CODE)){
this.batchSaveOrUpdateTagGroupAndTag(weCropGroupTagListDto.getTag_group(),true);
if (weCropGroupTagListDto.getErrcode().equals(WeConstans.WE_SUCCESS_CODE)) {
this.batchSaveOrUpdateTagGroupAndTag(weCropGroupTagListDto.getTag_group(), true);
}
}
......@@ -206,27 +193,28 @@ public class WeTagGroupServiceImpl extends ServiceImpl<WeTagGroupMapper,WeTagGr
/**
* 来自微信端批量保存或者更新标签组和标签
*
* @param tagGroup
* @param isSync 是否同步
* @param isSync 是否同步
*/
@Override
@Transactional(rollbackFor = Exception.class)
public void batchSaveOrUpdateTagGroupAndTag(List<WeCropGroupTagDto> tagGroup,Boolean isSync) {
public void batchSaveOrUpdateTagGroupAndTag(List<WeCropGroupTagDto> tagGroup, Boolean isSync) {
List<WeTagGroup> weTagGroups=new ArrayList<>();
List<WeTagGroup> weTagGroups = new ArrayList<>();
if(CollectionUtil.isNotEmpty(tagGroup)){
tagGroup.stream().forEach(k->{
WeTagGroup weTagGroup=new WeTagGroup();
if (CollectionUtil.isNotEmpty(tagGroup)) {
tagGroup.stream().forEach(k -> {
WeTagGroup weTagGroup = new WeTagGroup();
weTagGroup.setCreateBy(SecurityUtils.getUsername());
weTagGroup.setGourpName(k.getGroup_name());
weTagGroup.setGroupId(k.getGroup_id());
List<WeCropTagDto> tag = k.getTag();
if(CollectionUtil.isNotEmpty(tag)){
List<WeTag> weTags=new ArrayList<>();
tag.stream().forEach(v->{
WeTag weTag=new WeTag();
if (CollectionUtil.isNotEmpty(tag)) {
List<WeTag> weTags = new ArrayList<>();
tag.stream().forEach(v -> {
WeTag weTag = new WeTag();
weTag.setTagId(v.getId());
weTag.setGroupId(weTagGroup.getGroupId());
weTag.setName(v.getName());
......@@ -242,14 +230,14 @@ public class WeTagGroupServiceImpl extends ServiceImpl<WeTagGroupMapper,WeTagGr
//先逻辑删除不存在得组
if(CollectionUtil.isNotEmpty(weTagGroups)){
if (CollectionUtil.isNotEmpty(weTagGroups)) {
if(isSync){
if (isSync) {
List<WeTagGroup> noExist
= this.list(new LambdaQueryWrapper<WeTagGroup>().notIn(WeTagGroup::getGroupId, weTagGroups.stream().map(WeTagGroup::getGroupId).collect(Collectors.toList())));
//企业微信端删除得标签
if(CollectionUtil.isNotEmpty(noExist)){
noExist.stream().forEach(k->k.setStatus(Constants.DELETE_CODE));
if (CollectionUtil.isNotEmpty(noExist)) {
noExist.stream().forEach(k -> k.setStatus(Constants.DELETE_CODE));
this.updateBatchById(noExist);
}
}
......@@ -260,14 +248,14 @@ public class WeTagGroupServiceImpl extends ServiceImpl<WeTagGroupMapper,WeTagGr
List<WeTag> weTags =
weTagGroups.stream().map(WeTagGroup::getWeTags).collect(ArrayList::new, ArrayList::addAll, ArrayList::addAll);
if(CollectionUtil.isNotEmpty(weTags)){
if (CollectionUtil.isNotEmpty(weTags)) {
if(isSync){
if (isSync) {
List<WeTag> noExistWeTags
= iWeTagService.list(new LambdaQueryWrapper<WeTag>().notIn(WeTag::getTagId, weTags.stream().map(WeTag::getTagId).collect(Collectors.toList())));
if(CollectionUtil.isNotEmpty(noExistWeTags)){
noExistWeTags.stream().forEach(k->k.setStatus(Constants.DELETE_CODE));
if (CollectionUtil.isNotEmpty(noExistWeTags)) {
noExistWeTags.stream().forEach(k -> k.setStatus(Constants.DELETE_CODE));
iWeTagService.updateBatchById(noExistWeTags);
}
......@@ -279,34 +267,108 @@ public class WeTagGroupServiceImpl extends ServiceImpl<WeTagGroupMapper,WeTagGr
}
}else{//不存在删除所有标签组,以标签
} else {//不存在删除所有标签组,以标签
if(isSync){
if (isSync) {
List<WeTagGroup> weTagGroupList
= this.list(new LambdaQueryWrapper<WeTagGroup>().eq(WeTagGroup::getStatus, Constants.NORMAL_CODE));
if(CollectionUtil.isNotEmpty(weTagGroupList)){
weTagGroupList.stream().forEach(k->k.setStatus(Constants.DELETE_CODE));
if (CollectionUtil.isNotEmpty(weTagGroupList)) {
weTagGroupList.stream().forEach(k -> k.setStatus(Constants.DELETE_CODE));
this.updateBatchById(weTagGroupList);
}
List<WeTag> weTags
= iWeTagService.list(new LambdaQueryWrapper<WeTag>().eq(WeTag::getStatus, Constants.NORMAL_CODE));
if(CollectionUtil.isNotEmpty(weTags)){
weTags.stream().forEach(k->k.setStatus(Constants.DELETE_CODE));
if (CollectionUtil.isNotEmpty(weTags)) {
weTags.stream().forEach(k -> k.setStatus(Constants.DELETE_CODE));
iWeTagService.updateBatchById(weTags);
}
}
}
}
@Override
public void createTagGroup(String id) {
List<String> list = new ArrayList<>();
list.add(id);
WeFindCropTagParam build = WeFindCropTagParam.builder().group_id(list).build();
WeCropGroupTagListDto weCropGroupTagListDto = weCropTagClient.getCorpTagListByTagIds(build);
List<WeCropGroupTagDto> tag_group = weCropGroupTagListDto.getTag_group();
if (CollectionUtil.isNotEmpty(tag_group)) {
List<WeTagGroup> tagGroupsList = new ArrayList<>();
tag_group.stream().forEach(k -> {
WeTagGroup tagGroupInfo = this.baseMapper.selectOne(new LambdaQueryWrapper<WeTagGroup>()
.eq(WeTagGroup::getGroupId, k.getGroup_id()));
if (tagGroupInfo != null) {
WeTagGroup weTagGroup = new WeTagGroup();
weTagGroup.setCreateBy(SecurityUtils.getUsername());
weTagGroup.setGourpName(k.getGroup_name());
weTagGroup.setGroupId(k.getGroup_id());
weTagGroup.setStatus(k.getDeleted()==true?"0":"2");
tagGroupsList.add(weTagGroup);
}
List<WeCropTagDto> tag = k.getTag();
if (CollectionUtil.isNotEmpty(tag)) {
List<WeTag> weTags = new ArrayList<>();
tag.stream().forEach(v -> {
WeTag tagInfo = iWeTagService.getOne(new LambdaQueryWrapper<WeTag>()
.eq(WeTag::getGroupId, k.getGroup_id())
.eq(WeTag::getTagId, v.getId()));
if (tagInfo != null) {
WeTag weTag = new WeTag();
weTag.setTagId(v.getId());
weTag.setGroupId(k.getGroup_id());
weTag.setName(v.getName());
weTag.setStatus(v.getDeleted()==true?"0":"2");
weTags.add(weTag);
}
});
iWeTagService.saveBatch(weTags);
}
});
this.saveBatch(tagGroupsList);
}
}
@Override
public void deleteTagGroup(String id) {
this.deleteWeTagGroupByIds(id.split(","));
}
@Override
public void updateTagGroup(String id) {
List<String> list = new ArrayList<>();
list.add(id);
WeFindCropTagParam build = WeFindCropTagParam.builder().group_id(list).build();
WeCropGroupTagListDto weCropGroupTagListDto = weCropTagClient.getCorpTagListByTagIds(build);
List<WeCropGroupTagDto> tag_group = weCropGroupTagListDto.getTag_group();
if (CollectionUtil.isNotEmpty(tag_group)) {
List<WeTagGroup> tagGroupsList = new ArrayList<>();
WeTagGroup weTagGroup = new WeTagGroup();
tag_group.stream().forEach(k -> {
weTagGroup.setCreateBy(SecurityUtils.getUsername());
weTagGroup.setGourpName(k.getGroup_name());
weTagGroup.setGroupId(k.getGroup_id());
weTagGroup.setStatus(k.getDeleted()==true?"0":"2");
tagGroupsList.add(weTagGroup);
List<WeCropTagDto> tag = k.getTag();
if (CollectionUtil.isNotEmpty(tag)) {
List<WeTag> weTags = new ArrayList<>();
WeTag weTag = new WeTag();
tag.stream().forEach(v -> {
weTag.setTagId(v.getId());
weTag.setGroupId(k.getGroup_id());
weTag.setName(v.getName());
weTag.setStatus(v.getDeleted()==true?"0":"2");
weTags.add(weTag);
});
iWeTagService.saveOrUpdateBatch(weTags);
}
});
this.saveOrUpdateBatch(tagGroupsList);
}
}
}
package com.linkwechat.wecom.service.impl;
import java.util.ArrayList;
import java.util.List;
import cn.hutool.core.collection.CollectionUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.linkwechat.common.utils.DateUtils;
import com.linkwechat.common.utils.SecurityUtils;
import com.linkwechat.common.utils.StringUtils;
import com.linkwechat.wecom.client.WeCropTagClient;
import com.linkwechat.wecom.domain.WeTagGroup;
import com.linkwechat.wecom.domain.dto.WeTagDto;
import com.linkwechat.wecom.domain.dto.tag.WeCropGroupTagDto;
import com.linkwechat.wecom.domain.dto.tag.WeCropGroupTagListDto;
import com.linkwechat.wecom.domain.dto.tag.WeCropTagDto;
import com.linkwechat.wecom.domain.dto.tag.WeFindCropTagParam;
import com.linkwechat.wecom.service.IWeTagGroupService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.linkwechat.wecom.mapper.WeTagMapper;
......@@ -22,6 +34,10 @@ public class WeTagServiceImpl extends ServiceImpl<WeTagMapper,WeTag> implements
{
@Autowired
private WeTagMapper weTagMapper;
@Autowired
private WeCropTagClient weCropTagClient;
@Autowired
private IWeTagGroupService weTagGroupService;
/**
* 查询企业微信标签
......@@ -79,7 +95,7 @@ public class WeTagServiceImpl extends ServiceImpl<WeTagMapper,WeTag> implements
* @return 结果
*/
@Override
public int deleteWeTagByIds(Long[] ids)
public int deleteWeTagByIds(String[] ids)
{
return weTagMapper.deleteWeTagByIds(ids);
}
......@@ -91,7 +107,7 @@ public class WeTagServiceImpl extends ServiceImpl<WeTagMapper,WeTag> implements
* @return 结果
*/
@Override
public int deleteWeTagById(Long id)
public int deleteWeTagById(String id)
{
return weTagMapper.deleteWeTagById(id);
}
......@@ -115,4 +131,80 @@ public class WeTagServiceImpl extends ServiceImpl<WeTagMapper,WeTag> implements
return 0;
}
@Override
public void creatTag(String tagId) {
if (StringUtils.isNotEmpty(tagId)){
WeCropGroupTagListDto weCropGroupTagListDto = weCropTagClient.getCorpTagListByTagIds(WeFindCropTagParam.builder().tag_id(tagId.split(",")).build());
List<WeCropGroupTagDto> tag_group = weCropGroupTagListDto.getTag_group();
if (CollectionUtil.isNotEmpty(tag_group)) {
List<WeTagGroup> tagGroupsList = new ArrayList<>();
tag_group.stream().forEach(k -> {
WeTagGroup tagGroupInfo = this.weTagGroupService.getOne(new LambdaQueryWrapper<WeTagGroup>()
.eq(WeTagGroup::getGroupId, k.getGroup_id()));
if (tagGroupInfo != null) {
WeTagGroup weTagGroup = new WeTagGroup();
weTagGroup.setCreateBy(SecurityUtils.getUsername());
weTagGroup.setGourpName(k.getGroup_name());
weTagGroup.setGroupId(k.getGroup_id());
tagGroupsList.add(weTagGroup);
}
List<WeCropTagDto> tag = k.getTag();
if (CollectionUtil.isNotEmpty(tag)) {
List<WeTag> weTags = new ArrayList<>();
tag.stream().forEach(v -> {
WeTag tagInfo = this.getOne(new LambdaQueryWrapper<WeTag>()
.eq(WeTag::getGroupId, k.getGroup_id())
.eq(WeTag::getTagId, v.getId()));
if (tagInfo != null) {
WeTag weTag = new WeTag();
weTag.setTagId(v.getId());
weTag.setGroupId(k.getGroup_id());
weTag.setName(v.getName());
weTags.add(weTag);
}
});
this.saveBatch(weTags);
}
});
weTagGroupService.saveBatch(tagGroupsList);
}
}
}
@Override
public void deleteTag(String tagId) {
this.deleteWeTagById(tagId);
}
@Override
public void updateTag(String tagId) {
if (StringUtils.isNotEmpty(tagId)){
WeCropGroupTagListDto weCropGroupTagListDto = weCropTagClient.getCorpTagListByTagIds(WeFindCropTagParam.builder().tag_id(tagId.split(",")).build());
List<WeCropGroupTagDto> tag_group = weCropGroupTagListDto.getTag_group();
if (CollectionUtil.isNotEmpty(tag_group)) {
List<WeTagGroup> tagGroupsList = new ArrayList<>();
tag_group.stream().forEach(k -> {
WeTagGroup weTagGroup = new WeTagGroup();
weTagGroup.setCreateBy(SecurityUtils.getUsername());
weTagGroup.setGourpName(k.getGroup_name());
weTagGroup.setGroupId(k.getGroup_id());
tagGroupsList.add(weTagGroup);
List<WeCropTagDto> tag = k.getTag();
if (CollectionUtil.isNotEmpty(tag)) {
List<WeTag> weTags = new ArrayList<>();
tag.stream().forEach(v -> {
WeTag weTag = new WeTag();
weTag.setTagId(v.getId());
weTag.setGroupId(k.getGroup_id());
weTag.setName(v.getName());
weTags.add(weTag);
});
this.saveOrUpdateBatch(weTags);
}
});
weTagGroupService.saveOrUpdateBatch(tagGroupsList);
}
}
}
}
......@@ -62,13 +62,13 @@ public class WeUserServiceImpl extends ServiceImpl<WeUserMapper,WeUser> implemen
/**
* 查询通讯录相关客户
*
* @param id 通讯录相关客户ID
* @param userId 通讯录相关客户ID
* @return 通讯录相关客户
*/
@Override
public WeUser selectWeUserById(Long id)
public WeUser selectWeUserById(String userId)
{
return weUserMapper.selectWeUserById(id);
return weUserMapper.selectWeUserById(userId);
}
/**
......@@ -103,6 +103,18 @@ public class WeUserServiceImpl extends ServiceImpl<WeUserMapper,WeUser> implemen
}
@Override
@Transactional
public int insertWeUserNoToWeCom(WeUser weUser)
{
WeUser weUserInfo = weUserMapper.selectWeUserById(weUser.getUserId());
if (weUserInfo != null){
return weUserMapper.updateWeUser(weUser);
}
return weUserMapper.insertWeUser(weUser);
}
/**
* 修改通讯录相关客户
*
......@@ -121,6 +133,13 @@ public class WeUserServiceImpl extends ServiceImpl<WeUserMapper,WeUser> implemen
}
}
@Override
@Transactional
public int updateWeUserNoToWeCom(WeUser weUser)
{
return weUserMapper.updateWeUser(weUser);
}
......@@ -231,6 +250,17 @@ public class WeUserServiceImpl extends ServiceImpl<WeUserMapper,WeUser> implemen
}
@Override
@Transactional
public int deleteUserNoToWeCom(String userId) {
WeUser weUser = WeUser.builder()
.userId(userId)
.isActivate(WeConstans.WE_USER_IS_LEAVE)
.dimissionTime(new Date())
.build();
return weUserMapper.updateById(weUser);
}
/**
* 获取历史分配记录的成员
......
......@@ -20,6 +20,8 @@ import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Optional;
import java.util.stream.Collector;
import java.util.stream.Collectors;
/**
* 发送应用消息
......@@ -42,9 +44,18 @@ public class SendMessageToUserStrategy implements Strategy {
of.ifPresent(messageType -> map.put(messageType.getMessageType(), jsonObject));
//发送消息
WeMessagePushDto weMessagePushDto = new WeMessagePushDto();
weMessagePushDto.setTouser(StringUtils.isNotBlank(weMessagePush.getToUser()) ? Arrays.asList(weMessagePush.getToUser().split(",")) : new ArrayList<>());
weMessagePushDto.setToparty(StringUtils.isNotBlank(weMessagePush.getToUser()) ? Arrays.asList(weMessagePush.getToParty().split(",")) : new ArrayList<>());
weMessagePushDto.setTotag(StringUtils.isNotBlank(weMessagePush.getToUser()) ? Arrays.asList(weMessagePush.getToTag().split(",")) : new ArrayList<>());
Optional.ofNullable(weMessagePush.getToUser()).ifPresent(userId ->{
String tousers = Arrays.stream(userId.split(",")).collect(Collectors.joining("|"));
weMessagePushDto.setTouser(tousers);
});
Optional.ofNullable(weMessagePush.getToParty()).ifPresent(partyId ->{
String toPartys = Arrays.stream(partyId.split(",")).collect(Collectors.joining("|"));
weMessagePushDto.setToparty(toPartys);
});
Optional.ofNullable(weMessagePush.getToTag()).ifPresent(tagId ->{
String tagIds = Arrays.stream(tagId.split(",")).collect(Collectors.joining("|"));
weMessagePushDto.setTotag(tagIds);
});
weMessagePushDto.setMsgtype(weMessagePush.getMessageType());
//这个先写在配置文件中
......
......@@ -17,6 +17,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<result property="updateTime" column="update_time" />
<result property="contactSecret" column="contact_secret" />
<result property="agentId" column="agent_id" />
<result property="agentSecret" column="agent_secret" />
<result property="chatSecret" column="chat_secret" />
<result property="providerSecret" column="provider_secret" />
<result property="customerChurnNoticeSwitch" column="customer_churn_notice_switch" />
......@@ -24,7 +25,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
</resultMap>
<sql id="selectWeCorpAccountVo">
select id,chat_secret,provider_secret,company_name, corp_id, corp_secret,agent_id ,status, del_flag, create_by, create_time, update_by, update_time,contact_secret, customer_churn_notice_switch,wx_qr_login_redirect_uri from we_corp_account
select id,chat_secret,provider_secret,company_name, corp_id, corp_secret,agent_id, agent_secret, status, del_flag, create_by, create_time, update_by, update_time,contact_secret, customer_churn_notice_switch,wx_qr_login_redirect_uri from we_corp_account
</sql>
<select id="selectWeCorpAccountList" parameterType="WeCorpAccount" resultMap="WeCorpAccountResult">
......@@ -56,6 +57,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="updateTime != null">update_time,</if>
<if test="contactSecret != null ">contact_secret,</if>
<if test="chatSecret != null ">chat_secret,</if>
<if test="agentId != null ">agent_id,</if>
<if test="agentSecret != null ">agent_secret,</if>
<if test="customerChurnNoticeSwitch != null ">customer_churn_notice_switch,</if>
<if test="providerSecret != null ">provider_secret,</if>
<if test="wxQrLoginRedirectUri != null ">wx_qr_login_redirect_uri,</if>
......@@ -72,6 +75,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="updateTime != null">#{updateTime},</if>
<if test="contactSecret != null ">#{contactSecret},</if>
<if test="chatSecret != null ">#{chatSecret},</if>
<if test="agentId != null ">#{agentId},</if>
<if test="agentSecret != null ">#{agentSecret},</if>
<if test="customerChurnNoticeSwitch != null ">#{customerChurnNoticeSwitch},</if>
<if test="providerSecret != null ">#{providerSecret},</if>
<if test="wxQrLoginRedirectUri != null ">#{wxQrLoginRedirectUri},</if>
......@@ -92,6 +97,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="updateTime != null">update_time = #{updateTime},</if>
<if test="contactSecret != null ">contact_secret = #{contactSecret},</if>
<if test="chatSecret != null ">chat_secret = #{chatSecret},</if>
<if test="agentId != null ">agent_id = #{agentId},</if>
<if test="agentSecret != null ">agent_secret =#{agentSecret},</if>
<if test="customerChurnNoticeSwitch != null ">customer_churn_notice_switch = #{customerChurnNoticeSwitch},</if>
<if test="providerSecret != null ">provider_secret = #{providerSecret},</if>
......
......@@ -54,12 +54,12 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
where id = #{id}
</update>
<delete id="deleteWeTagById" parameterType="Long">
delete from we_tag where id = #{id}
<delete id="deleteWeTagById" parameterType="String">
uddate we_tag set status=2 where tag_id = #{id}
</delete>
<delete id="deleteWeTagByIds" parameterType="String">
delete from we_tag where id in
<delete id="deleteWeTagByIds">
uddate we_tag set status=2 where tag_id in
<foreach item="id" collection="array" open="(" separator="," close=")">
#{id}
</foreach>
......
......@@ -54,19 +54,18 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="birthday != null "> and birthday = #{birthday}</if>
</select>
<select id="selectWeUserById" parameterType="Long" resultMap="WeUserResult">
<select id="selectWeUserById" parameterType="java.lang.String" resultMap="WeUserResult">
<include refid="selectWeUserVo"/>
where id = #{id}
where user_id = #{userId}
</select>
<insert id="insertWeUser" parameterType="WeUser">
insert into we_user
<trim prefix="(" suffix=")" suffixOverrides=",">
<if test="id != null">id,</if>
<if test="userId != null">user_id,</if>
<if test="avatarMediaid != null">head_image_url,</if>
<if test="name != null">user_name,</if>
<if test="alias != null">alias,</if>
<if test="userId != null">user_id,</if>
<if test="gender != null">gender,</if>
<if test="mobile != null and mobile != ''">mobile,</if>
<if test="email != null">email,</if>
......@@ -85,11 +84,10 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="isActivate != null">is_activate,</if>
</trim>
<trim prefix="values (" suffix=")" suffixOverrides=",">
<if test="id != null">#{id},</if>
<if test="userId != null">#{userId},</if>
<if test="avatarMediaid != null">#{avatarMediaid},</if>
<if test="name != null">#{name},</if>
<if test="alias != null">#{alias},</if>
<if test="userId != null">#{userId},</if>
<if test="gender != null">#{gender},</if>
<if test="mobile != null and mobile != ''">#{mobile},</if>
<if test="email != null">#{email},</if>
......@@ -133,7 +131,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="remark != null">remark = #{remark},</if>
<if test="isActivate != null">is_activate = #{isActivate},</if>
</trim>
where id = #{id}
<where>
user_id = #{userId}
</where>
</update>
......@@ -191,7 +191,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<insert id="batchInsertWeUser" >
insert into we_user (id, head_image_url, user_name, alias,
insert into we_user (head_image_url, user_name, alias,
user_id, gender, mobile, email, wx_account,
department, position, is_leader_in_dept,
join_time, enable, id_card,
......@@ -199,7 +199,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
birthday, remark, is_activate)
values
<foreach collection="weUsers" item="weUser" index="index" separator=",">
( #{weUser.id},#{weUser.avatarMediaid},#{weUser.name},#{weUser.alias},
( #{weUser.avatarMediaid},#{weUser.name},#{weUser.alias},
#{weUser.userId},#{weUser.gender},#{weUser.mobile},#{weUser.email},#{weUser.wxAccount},
#{weUser.department},#{weUser.position},#{weUser.isLeaderInDept},
#{weUser.joinTime},#{weUser.enable},#{weUser.idCard},
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册