Commit bb0a5042 by songyinghui

feat: 会员id变动事件MQ

parent 61fda740
......@@ -20,4 +20,11 @@ public interface InteractRecordApiService {
* @return
*/
ServiceResponse<Page<InteractRecordInfoDTO>> queryInteractRecordList(InteractRecordQDTO interactRecordQDTO);
/**
* 处理member信息变化的MQ
* @param params
* @return
*/
ServiceResponse<Void> memberChangeMQ(String params);
}
......@@ -105,5 +105,21 @@ public interface TabHaobanInteractRecordMapper {
*/
List<PotentialCustomerStaticsBO> staticsClerkInteractRecordNew(InteractRecordQO interactRecordQO);
/**
* 会员合并
* @param mergeMemberId
* @param memberId
* @return
*/
int mergeMember(@Param("mergeMemberId") String mergeMemberId, @Param("memberId") String memberId);
/**
* 会员授权事件
* @param memberId
* @param unionId
* @return
*/
int memberAuthorized(@Param("memberId") String memberId, @Param("unionId") String unionId);
}
......@@ -78,5 +78,12 @@ public interface TabHaobanPotentialCustomerMapper {
*/
List<TabHaobanPotentialCustomer> queryPotentialCustomerList(PotentialCustomerQO potentialCustomerQO);
/**
* 会员合并操作
* @param mergeMemberId
* @param memberId
*/
void mergeMember(@Param("mergeMemberId") String mergeMemberId, @Param("memberId") String memberId);
}
package com.gic.haoban.manage.service.pojo.bo.content;
import lombok.Data;
import lombok.Getter;
import java.io.Serializable;
/**
* @Author MUSI
* @Date 2023/4/2 9:12 AM
* @Description
* @Version
**/
@Data
public class MemberAttrChangeBO implements Serializable {
/**
* 会员id
*/
private String memberId;
/**
* 会员unionId
*/
private String unionId;
/**
* 被合并的会员id
*/
private String mergeMemberId;
/**
* 业务变动类型:1小程序授权 2会员合并
*/
private Integer opt;
@Getter
public enum MemberChangeOpt {
MINI_APP_AUTHORIZED(1, "会员授权"),
MEMBER_MERGE(2, "会员合并");
MemberChangeOpt(Integer code, String desc) {
this.code = code;
this.desc = desc;
}
private Integer code;
private String desc;
}
}
......@@ -51,4 +51,18 @@ public interface InteractRecordService {
*/
List<PotentialCustomerStaticsBO> staticsClerkNewInteractRecord(InteractRecordQO interactRecordQO);
/**
* 会员合并操作
* @param mergeMemberId
* @param memberId
*/
void mergeMember(String mergeMemberId, String memberId);
/**
* 会员授权事件
* @param memberId
* @param unionId
*/
void memberAuthorized(String memberId, String unionId);
}
......@@ -55,4 +55,11 @@ public interface PotentialCustomerService {
* @param context
*/
void sendPotentialCustomerNotice(PotentialCustomerNotifyContext context);
/**
* 会员合并操作
* @param mergeMemberId
* @param memberId
*/
void mergeMember(String mergeMemberId, String memberId);
}
......@@ -9,19 +9,23 @@ import com.gic.haoban.manage.api.enums.content.TriggerCustomerChannelType;
import com.gic.haoban.manage.service.entity.content.TabHaobanInteractRecord;
import com.gic.haoban.manage.service.pojo.bo.content.InteractRecordBO;
import com.gic.haoban.manage.service.pojo.bo.content.InteractRecordExtendInfoBO;
import com.gic.haoban.manage.service.pojo.bo.content.PotentialCustomerBO;
import com.gic.member.api.dto.MemberDTO;
import com.gic.member.api.service.MemberService;
import com.gic.store.goods.dto.goods.GoodsSpuInfoDTO;
import com.gic.store.goods.dto.qdto.GoodsListQDTO;
import com.gic.store.goods.enums.GoodsStatusEnum;
import com.gic.store.goods.service.GoodsCenterApiService;
import com.gic.store.goods.service.GoodsInfoOutApiService;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.util.Arrays;
import java.util.Collections;
import java.util.Date;
import java.util.List;
import java.util.stream.Collectors;
......@@ -34,11 +38,10 @@ import java.util.stream.Collectors;
@Slf4j
@Component
public class InteractRecordBuilder {
@Autowired
private GoodsInfoOutApiService goodsInfoOutApiService;
@Autowired
private GoodsCenterApiService goodsCenterApiService;
@Autowired
private MemberService memberService;
/**
* 互动记录描述
......@@ -174,4 +177,28 @@ public class InteractRecordBuilder {
interactRecordBO.setOrderGoodsNum(orderGoodsNum);
}
}
public PotentialCustomerBO build(TabHaobanInteractRecord interactRecord) {
PotentialCustomerBO temp = new PotentialCustomerBO();
BeanUtils.copyProperties(interactRecord, temp);
temp.setId(null);
// 获取会员信息
MemberDTO memberDTO = memberService.queryMember(interactRecord.getMemberId());
if (memberDTO != null) {
temp.setMemberName(memberDTO.getMemberName());
temp.setMemberNickName(memberDTO.getThirdNickname());
temp.setMemberImageUrl(memberDTO.getThirdImgUrl());
temp.setMemberPhone(memberDTO.getPhoneNumber());
}
temp.setStarFlag(0);
temp.setSeeFlag(0);
temp.setLastAccessTime(interactRecord.getCreateTime());
temp.setCreateTime(new Date());
temp.setUpdateTime(new Date());
temp.setDeleteFlag(0);
// 查询memberId是否成交过订单
temp.setDealRecordNum(0);
return temp;
}
}
......@@ -7,9 +7,11 @@ import com.gic.commons.util.UniqueIdUtils;
import com.gic.haoban.manage.service.dao.mapper.content.TabHaobanInteractRecordMapper;
import com.gic.haoban.manage.service.entity.content.TabHaobanInteractRecord;
import com.gic.haoban.manage.service.pojo.bo.content.InteractRecordBO;
import com.gic.haoban.manage.service.pojo.bo.content.PotentialCustomerBO;
import com.gic.haoban.manage.service.pojo.bo.content.PotentialCustomerStaticsBO;
import com.gic.haoban.manage.service.pojo.qo.content.InteractRecordQO;
import com.gic.haoban.manage.service.service.content.InteractRecordService;
import com.gic.haoban.manage.service.service.content.PotentialCustomerService;
import com.gic.haoban.manage.service.service.content.adaptor.InteractRecordBuilder;
import com.github.pagehelper.PageHelper;
import lombok.extern.slf4j.Slf4j;
......@@ -20,8 +22,11 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
import java.util.Comparator;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.stream.Collectors;
/**
......@@ -38,6 +43,8 @@ public class InteractRecordServiceImpl implements InteractRecordService {
private TabHaobanInteractRecordMapper tabHaobanInteractRecordMapper;
@Autowired
private InteractRecordBuilder interactRecordBuilder;
@Autowired
PotentialCustomerService potentialCustomerService;
/**
* 查询互动记录
......@@ -155,4 +162,65 @@ public class InteractRecordServiceImpl implements InteractRecordService {
public List<PotentialCustomerStaticsBO> staticsClerkNewInteractRecord(InteractRecordQO interactRecordQO) {
return this.tabHaobanInteractRecordMapper.staticsClerkInteractRecordNew(interactRecordQO);
}
/**
* 会员合并操作
*
* @param mergeMemberId
* @param memberId
*/
@Override
public void mergeMember(String mergeMemberId, String memberId) {
if (StringUtils.isAnyBlank(memberId, mergeMemberId)) {
log.info("合并会员参数缺失 mergeMemberId: {} memberId: {}", mergeMemberId, memberId);
return;
}
tabHaobanInteractRecordMapper.mergeMember(mergeMemberId, memberId);
}
/**
* 会员授权事件
*
* @param memberId
* @param unionId
*/
@Override
public void memberAuthorized(String memberId, String unionId) {
InteractRecordQO interactRecordQO = new InteractRecordQO();
interactRecordQO.setUnionId(unionId);
List<TabHaobanInteractRecord> interactRecords = this.tabHaobanInteractRecordMapper.queryInteractRecordList(interactRecordQO);
if (CollectionUtils.isEmpty(interactRecords)) {
log.info("会员授权事件, 该会员未产生过互动记录 {}", unionId);
return;
}
tabHaobanInteractRecordMapper.memberAuthorized(memberId, unionId);
Map<String, List<TabHaobanInteractRecord>> interactRecordMap = interactRecords
.stream()
.collect(Collectors.groupingBy(item -> item.getClerkId() + item.getMemberId()));
for (Map.Entry<String, List<TabHaobanInteractRecord>> entry : interactRecordMap.entrySet()) {
this.handlerRecord(memberId, entry.getValue());
}
}
private void handlerRecord(String memberId, List<TabHaobanInteractRecord> interactRecords) {
Integer durationTime = interactRecords
.stream()
.map(TabHaobanInteractRecord::getDurationTime)
.filter(Objects::nonNull)
.reduce(0, Integer::sum);
interactRecords.sort(Comparator.comparing(TabHaobanInteractRecord::getId).reversed());
TabHaobanInteractRecord interactRecord = interactRecords.get(0);
interactRecord.setMemberId(memberId);
PotentialCustomerBO potentialCustomerBO = potentialCustomerService.queryPotentialCustomerInfo(interactRecord.getClerkId(), memberId);
if (potentialCustomerBO == null) {
potentialCustomerBO = interactRecordBuilder.build(interactRecord);
}
potentialCustomerBO.setDurationTime(durationTime);
potentialCustomerService.saveOrUpdatePotentialCustomer(potentialCustomerBO);
}
}
......@@ -229,4 +229,18 @@ public class PotentialCustomerServiceImpl implements PotentialCustomerService {
// 如果该导购id是成员在主门店时的导购id 发送应用消息
potentialCustomerNotifyBuilder.sendApplicationMessage(context);
}
/**
* 会员合并操作
*
* @param mergeMemberId
* @param memberId
*/
@Override
public void mergeMember(String mergeMemberId, String memberId) {
if (StringUtils.isAnyBlank(mergeMemberId, memberId)) {
return;
}
potentialCustomerMapper.mergeMember(mergeMemberId, memberId);
}
}
......@@ -8,10 +8,13 @@ import com.gic.haoban.manage.api.enums.content.InteractRecordExtendInfoDTO;
import com.gic.haoban.manage.api.enums.content.InteractRecordInfoDTO;
import com.gic.haoban.manage.api.service.content.InteractRecordApiService;
import com.gic.haoban.manage.service.pojo.bo.content.InteractRecordBO;
import com.gic.haoban.manage.service.pojo.bo.content.MemberAttrChangeBO;
import com.gic.haoban.manage.service.pojo.qo.content.InteractRecordQO;
import com.gic.haoban.manage.service.service.content.InteractRecordService;
import com.gic.haoban.manage.service.service.content.PotentialCustomerService;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
......@@ -32,6 +35,8 @@ public class InteractRecordApiServiceImpl implements InteractRecordApiService {
@Autowired
private InteractRecordService interactRecordService;
@Autowired
PotentialCustomerService potentialCustomerService;
/**
* 查询互动记录
......@@ -72,4 +77,37 @@ public class InteractRecordApiServiceImpl implements InteractRecordApiService {
result.setResult(recordInfos);
return ServiceResponse.success(result);
}
/**
* 处理member信息变化的MQ
*
* @param params
* @return
*/
@Override
public ServiceResponse<Void> memberChangeMQ(String params) {
if (StringUtils.isBlank(params)) {
log.info("会员id发生变化 {}", params);
return ServiceResponse.success();
}
MemberAttrChangeBO memberAttrChangeBO = JSON.parseObject(params, MemberAttrChangeBO.class);
if (memberAttrChangeBO == null) {
return ServiceResponse.success();
}
if (MemberAttrChangeBO.MemberChangeOpt.MINI_APP_AUTHORIZED.getCode().equals(memberAttrChangeBO.getOpt())) {
// 会员授权事件
// 根据unionId 刷新 memberId 并写入销售线索
interactRecordService.memberAuthorized(memberAttrChangeBO.getMemberId(), memberAttrChangeBO.getUnionId());
}
if (MemberAttrChangeBO.MemberChangeOpt.MEMBER_MERGE.getCode().equals(memberAttrChangeBO.getOpt())) {
//会员合并
// 把合并的memberId 修改成 合并后的memberId
interactRecordService.mergeMember(memberAttrChangeBO.getMergeMemberId(), memberAttrChangeBO.getMemberId());
potentialCustomerService.mergeMember(memberAttrChangeBO.getMergeMemberId(), memberAttrChangeBO.getMemberId());
}
return ServiceResponse.success();
}
}
......@@ -261,7 +261,10 @@
select <include refid="baseSql"/>
from tab_haoban_interact_record
<where>
clerk_id = #{clerkId} and delete_flag = 0
delete_flag = 0
<if test="clerkId != null and clerkId != ''">
and clerk_id = #{clerkId}
</if>
<if test="memberId != null and memberId != ''">
and member_id = #{memberId}
</if>
......@@ -271,6 +274,9 @@
<if test="endTime != null">
and create_time <![CDATA[ <= ]]> #{endTime}
</if>
<if test="unionId != null and unionId != '' ">
and union_id = #{unionId}
</if>
</where>
order by id desc
</select>
......@@ -295,5 +301,17 @@
order by null
</select>
<update id="mergeMember">
update tab_haoban_interact_record
set member_id = #{memberId}
where member_id = #{mergeMemberId} and delete_flag = 0
</update>
<update id="memberAuthorized">
update tab_haoban_interact_record
set member_id = #{memberId}
where union_id = #{unionId} and delete_flag = 0
</update>
</mapper>
......@@ -276,5 +276,11 @@
where clerk_id = #{clerkId} and delete_flag = 0 and member_id = #{memberId}
</select>
<update id="mergeMember">
update tab_haoban_potential_customer
set member_id = #{memberId}
where member_id = #{memberId} and delete_flag = 0
</update>
</mapper>
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