Commit 82873826 by 徐高华

删除代码

parent e1fd9114
package com.gic.haoban.manage.api.service.mq;
/**
* desc:微信会员消费服务
*
* @author: YongEn
* @date: 2022/2/16
**/
public interface MemberUnionRelateConsumer {
/**
* desc: 添加好友关系-存量会员新增
* "routerName": "addMemberUnionRelateMq"
*
* @param messageParam 消息参数
* @author : YongEn
* @date : 2022/2/16
*/
void addMemberUnionRelate(String messageParam);
}
package com.gic.haoban.manage.service.mq;
import com.gic.haoban.manage.api.service.mq.MemberUnionRelateConsumer;
import com.gic.haoban.manage.service.mq.processor.AddMemberUnionRelateConsumerProcessor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
/**
* desc:微信会员消费服务实现
*
* @author: YongEn
* @date: 2022/2/16
**/
@Service
public class MemberUnionRelateConsumerImpl implements MemberUnionRelateConsumer {
@Autowired
private AddMemberUnionRelateConsumerProcessor addMemberUnionRelateConsumerProcessor;
@Override
public void addMemberUnionRelate(String messageParam) {
addMemberUnionRelateConsumerProcessor.process(messageParam);
}
}
package com.gic.haoban.manage.service.mq.processor;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* desc:处理器
*
* @author: YongEn
* @date: 2022/2/16
**/
public abstract class AbstractConsumerProcessor<S, R> {
private static final Logger logger = LoggerFactory.getLogger(AbstractConsumerProcessor.class);
public void process(S messageParam) {
logger.info("接收到消费处理, 参数{}", messageParam);
// 参数解析
R r = paramParse(messageParam);
// 执行处理
doProcess(r);
}
/**
* desc: 参数解析
*
* @param s 原数据
* @return : {@link R}
* @author : YongEn
* @date : 2022/2/16
*/
abstract R paramParse(S s);
/**
* desc: 执行处理
*
* @param r 解析参数
* @return :
* @author : YongEn
* @date : 2022/2/16
*/
abstract void doProcess(R r);
}
package com.gic.haoban.manage.service.mq.processor;
import cn.hutool.crypto.SecureUtil;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.gic.commons.util.EntityUtil;
import com.gic.haoban.manage.api.dto.ExternalUserDTO;
import com.gic.haoban.manage.api.dto.MemberUnionidRelatedDTO;
import com.gic.haoban.manage.api.dto.StaffClerkRelationDTO;
import com.gic.haoban.manage.api.service.MemberUnionidRelatedApiService;
import com.gic.haoban.manage.service.entity.TabHaobanClerkMainStoreRelated;
import com.gic.haoban.manage.service.entity.TabHaobanExternalClerkRelated;
import com.gic.haoban.manage.service.entity.TabHaobanStaff;
import com.gic.haoban.manage.service.entity.TabHaobanWxEnterpriseRelated;
import com.gic.haoban.manage.service.exception.WxApiLimitException;
import com.gic.haoban.manage.service.pojo.ExternalUserPojo;
import com.gic.haoban.manage.service.pojo.bo.MemberUnionRelatedBO;
import com.gic.haoban.manage.service.service.*;
import com.gic.haoban.manage.service.util.EmojiFilterUtil;
import com.gic.member.api.dto.MemberDTO;
import com.gic.member.api.service.MemberService;
import com.gic.redis.data.util.RedisUtil;
import com.gic.wechat.api.service.qywx.QywxUserApiService;
import org.apache.commons.lang3.StringUtils;
import org.redisson.api.RRateLimiter;
import org.redisson.api.RateIntervalUnit;
import org.redisson.api.RateType;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.util.Objects;
/**
* desc:添加微信好友关系消息消费处理器
* 逻辑来源:
*
* @author: YongEn
* @date: 2022/2/16
* @see MemberUnionidRelatedApiService#addMemberUnionidRelatedNew(com.gic.haoban.manage.api.dto.MemberUnionidRelatedDTO)
**/
@Component
public class AddMemberUnionRelateConsumerProcessor extends AbstractConsumerProcessor<String, MemberUnionRelatedBO> {
private static final Logger logger = LoggerFactory.getLogger(AddMemberUnionRelateConsumerProcessor.class);
@Autowired
private QywxUserApiService qywxUserApiService;
@Autowired
private MemberUnionRelatedService memberUnionRelatedService;
@Autowired
private StaffClerkRelationService staffClerkRelationService;
@Autowired
private ClerkMainStoreRelatedService clerkMainStoreRelatedService;
@Autowired
private WxEnterpriseRelatedService wxEnterpriseRelatedService;
@Autowired
private ExternalClerkRelatedService externalClerkRelatedService;
@Autowired
private MemberService memberService;
@Autowired
private StaffService staffService;
@Override
MemberUnionRelatedBO paramParse(String s) {
return JSON.parseObject(s, MemberUnionRelatedBO.class);
}
@Override
void doProcess(MemberUnionRelatedBO bo) {
logger.info("企业刷新历史好友start:{}",JSON.toJSONString(bo));
RRateLimiter rateLimiter = RedisUtil.getRedisClient().getRateLimiter("add:mbr:rel:list:limit");
rateLimiter.trySetRate(RateType.OVERALL, 5, 1, RateIntervalUnit.SECONDS);
rateLimiter.acquire();
String staffId = bo.getStaffId();
String wxEnterpriseId = bo.getWxEnterpriseId();
String selfExternalUserid = bo.getExternalUserid();
MemberUnionidRelatedDTO dto = getAndMergeMemberUnion(bo);
if (Objects.isNull(dto)) {
logger.info("新增外部联系人, 自建与第三方均为空");
return;
}
String unionid = dto.getUnionid();
String addCreateTime = dto.getAddCreateTime();
if (StringUtils.isEmpty(unionid)) {
logger.info("unionId为空, 会员无法查询");
return;
}
// 设置主门店
TabHaobanClerkMainStoreRelated mainStoreRelated = clerkMainStoreRelatedService.getMainStoreByStaffId(staffId, wxEnterpriseId);
if (mainStoreRelated == null) {
logger.info("【新增外部联系人】主门店为空:{}", staffId);
return;
}
StaffClerkRelationDTO staffClerkRelationDTO = staffClerkRelationService.getOneBindByStoreId(staffId, mainStoreRelated.getStoreId());
if (staffClerkRelationDTO == null) {
logger.info("【新增外部联系人】导购和clerk关联为空");
return;
}
TabHaobanStaff staff = staffService.selectById(staffId);
if (staff == null) {
logger.info("【新增外部联系人】导购为空,staffId:{}", staffId);
return;
}
String wxUserId = staff.getWxUserId();
String enterpriseId = staffClerkRelationDTO.getEnterpriseId();
TabHaobanWxEnterpriseRelated wxEnterpriseRelated = wxEnterpriseRelatedService.getByEnterpriseId(wxEnterpriseId, enterpriseId);
if (wxEnterpriseRelated == null) {
logger.info("没有存在企业关联:{},{}", staffClerkRelationDTO.getWxEnterpriseId(), enterpriseId);
return;
}
MemberDTO member = memberService.getMemberByUnionid(unionid, enterpriseId);
if (member == null) {
logger.info("会员信息不存在unionId:{}", unionid);
return;
}
String memberId = member.getMemberId();
// 转换外部联系人id
String externalUserid = qywxUserApiService.toServiceExternalUserid(bo.getCorpid(), bo.getSecret(), selfExternalUserid);
logger.info("自建转换第三方返回:{}", externalUserid);
// 幂等
MemberUnionidRelatedDTO exsitDTO = memberUnionRelatedService.getByWxUserIdAndUnionId(wxEnterpriseId, staffId, dto.getUnionid());
String memberUnionIdRelatedId;
if (Objects.isNull(exsitDTO)) {
dto.setMemberId(memberId);
dto.setEnterpriseId(enterpriseId);
dto.setExternalUserid(externalUserid);
dto.setStaffId(staffId);
// 创建memberUnion 临时表关联
memberUnionIdRelatedId = memberUnionRelatedService.addMemberUnionidRelated(dto);
} else {
exsitDTO.setAvatar(dto.getAvatar());
exsitDTO.setMemberId(memberId);
exsitDTO.setUnionid(unionid);
exsitDTO.setAddCreateTime(addCreateTime);
exsitDTO.setEnterpriseId(enterpriseId);
exsitDTO.setExternalUserid(externalUserid);
exsitDTO.setSelfExternalUserid(selfExternalUserid);
exsitDTO.setStaffId(staffId);
memberUnionRelatedService.update(exsitDTO);
memberUnionIdRelatedId = exsitDTO.getMemberUnionidRelatedId();
}
if (StringUtils.isEmpty(memberUnionIdRelatedId)) {
logger.info("添加临时关联表memberUnionIdRelate失败");
return;
}
// 幂等
TabHaobanExternalClerkRelated external = externalClerkRelatedService.getByParams(staffId, wxEnterpriseId, dto.getExternalName(), addCreateTime);
String relationKey = SecureUtil.md5(staffId + selfExternalUserid);
if (external != null) {
logger.info("已经存在好友关系");
external.setMemberId(memberId);
external.setMemberUnionidRelatedId(memberUnionIdRelatedId);
external.setExternalUserId(externalUserid);
external.setExternalName(dto.getExternalName());
external.setRelationKey(relationKey);
external.setUnionid(unionid);
external.setStoreId(staffClerkRelationDTO.getStoreId());
external.setEnterpriseId(enterpriseId);
external.setClerkId(staffClerkRelationDTO.getClerkId());
external.setStaffId(staffId);
external.setMemberId(memberId);
external.setHeadUrl(dto.getAvatar());
external.setStatusFlag(1);
externalClerkRelatedService.update(external);
} else {
logger.info("新增TabHaobanExternalClerkRelated");
TabHaobanExternalClerkRelated related = new TabHaobanExternalClerkRelated();
related.setAddCreateTime(addCreateTime);
related.setClerkId(staffClerkRelationDTO.getClerkId());
related.setEnterpriseId(enterpriseId);
related.setExternalName(dto.getExternalName());
related.setExternalUserId(externalUserid);
related.setStaffId(staffId);
related.setHeadUrl(dto.getAvatar());
related.setMemberUnionidRelatedId(memberUnionIdRelatedId);
related.setStoreId(staffClerkRelationDTO.getStoreId());
related.setRelationKey(relationKey);
related.setUnionid(unionid);
related.setWxEnterpriseId(wxEnterpriseId);
related.setMemberId(memberId);
related.setStatusFlag(1);
externalClerkRelatedService.insert(related);
}
logger.info("企业刷新历史好友end");
}
private MemberUnionidRelatedDTO getAndMergeMemberUnion(MemberUnionRelatedBO bo) {
// 查询自建
ExternalUserDTO selfExternalUserDTO = getCorpSelfExternalUseridInfo(
bo.getWxEnterpriseId(),
bo.getWxUserId(),
bo.getExternalUserid(),
bo.getSecret(),
bo.getCorpid()
);
if (Objects.isNull(selfExternalUserDTO)) {
logger.info("新增外部联系人, 自建为空");
return null;
}
MemberUnionidRelatedDTO dto = EntityUtil.changeEntityNew(MemberUnionidRelatedDTO.class, bo);
// 合并数据
dto.setExternalName(EmojiFilterUtil.removeAllEmoji(
selfExternalUserDTO.getName()
));
dto.setAddCreateTime(
selfExternalUserDTO.getAddCreateTime()
);
dto.setAvatar(
selfExternalUserDTO.getAvatar()
);
dto.setUnionid(
selfExternalUserDTO.getUnionId()
);
dto.setSelfExternalUserid(
selfExternalUserDTO.getExternalUserId()
);
return dto;
}
public ExternalUserDTO getCorpSelfExternalUseridInfo(String wxEnterpriseId, String wxUserId, String externalUserId, String secret, String corpId) {
String unionIdJson = qywxUserApiService.getCorpSelfExternalUseridInfo(corpId, secret, externalUserId);
if (StringUtils.isBlank(unionIdJson)) {
logger.info("好友不存在");
return null;
} else if ("1".equals(unionIdJson)) {
logger.info("接口调用被限制");
throw new WxApiLimitException("getCorpSelfExternalUseridInfo接口调用被限制");
}
ExternalUserPojo pojo = getExternalUserPojo(unionIdJson, wxUserId, wxEnterpriseId);
return EntityUtil.changeEntityByJSON(ExternalUserDTO.class, pojo);
}
private ExternalUserPojo getExternalUserPojo(String unionIdJson, String userId1, String wxEnterpriseId) {
ExternalUserPojo pojo = new ExternalUserPojo();
String unionId = "";
String follow_user = "";
String createTime = "";
String userId = "";
String avatar = "";
String relaName = "";
String externalUserId = "";
if (StringUtils.isNotBlank(unionIdJson)) {
JSONObject jo = JSON.parseObject(unionIdJson);
String external_contact = jo.getString("external_contact");
if (StringUtils.isNotBlank(external_contact)) {
JSONObject jt = JSON.parseObject(external_contact);
unionId = jt.getString("unionid");
relaName = EmojiFilterUtil.filterEmojiLast(jt.getString("name"), true);
if (StringUtils.isBlank(relaName)) {
relaName = "--";
}
avatar = jt.getString("avatar");
externalUserId = jt.getString("external_userid");
}
follow_user = jo.getString("follow_user");
if (StringUtils.isNotBlank(follow_user)) {
JSONArray j = JSON.parseArray(follow_user);
for (Object object : j) {
String followJson = JSON.toJSONString(object);
JSONObject follow = JSON.parseObject(followJson);
userId = follow.getString("userid");
if (userId.equals(userId1)) {
createTime = follow.getString("createtime");
}
}
}
}
pojo.setAddCreateTime(createTime);
pojo.setAvatar(avatar);
pojo.setName(relaName);
pojo.setUnionId(unionId);
pojo.setExternalUserId(externalUserId);
pojo.setWxEnterpriseId(wxEnterpriseId);
return pojo;
}
}
......@@ -55,11 +55,6 @@ public class MessageApiServiceImpl implements MessageApiService {
* 自建
*/
private static final String SELF_APP = "selfSuiteId";
/**
* 客户联系
*/
private static final String CONTACT_APP = "contactSuiteId";
@Autowired
private DepartmentService departmentService;
@Autowired
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment