Commit 3ed6a8ab by songyinghui

feat: 销售线索

parent e3cd31d0
...@@ -9,9 +9,10 @@ package com.gic.haoban.manage.api.enums.content; ...@@ -9,9 +9,10 @@ package com.gic.haoban.manage.api.enums.content;
**/ **/
public enum MaterialInteractRecordEventType { public enum MaterialInteractRecordEventType {
VISIT_MATERIAL(1, "浏览了你分享的素材"), VISIT_MATERIAL(1, "浏览了你分享的%s"),
VISIT_PRODUCT(2, "浏览了你分享的素材,并查看了关联商品"), VISIT_PRODUCT(2, "浏览了你分享的%s,并查看了关联商品"),
ORDER(3, "浏览了你分享的素材,并购买了商品"); ORDER(3, "浏览了你分享的%s,并购买了商品"),
ADD_SHOPPING_CART(4, "浏览你分享的%s,并加入了购物车");
MaterialInteractRecordEventType(Integer code, String desc) { MaterialInteractRecordEventType(Integer code, String desc) {
this.code = code; this.code = code;
...@@ -48,4 +49,5 @@ public enum MaterialInteractRecordEventType { ...@@ -48,4 +49,5 @@ public enum MaterialInteractRecordEventType {
public void setDesc(String desc) { public void setDesc(String desc) {
this.desc = desc; this.desc = desc;
} }
} }
...@@ -9,7 +9,8 @@ package com.gic.haoban.manage.api.enums.content; ...@@ -9,7 +9,8 @@ package com.gic.haoban.manage.api.enums.content;
**/ **/
public enum ShareBizType { public enum ShareBizType {
MATERIAL(1, "素材"); MATERIAL(1, "素材"),
GOODS(2, "商品");
ShareBizType(Integer code, String desc) { ShareBizType(Integer code, String desc) {
this.code = code; this.code = code;
this.desc = desc; this.desc = desc;
...@@ -24,4 +25,13 @@ public enum ShareBizType { ...@@ -24,4 +25,13 @@ public enum ShareBizType {
public String getDesc() { public String getDesc() {
return desc; return desc;
} }
public static String getDescWithCode(Integer code) {
for (ShareBizType value : values()) {
if (value.code.equals(code)) {
return value.desc;
}
}
return "";
}
} }
...@@ -39,6 +39,28 @@ public class InteractRecordMessageContext { ...@@ -39,6 +39,28 @@ public class InteractRecordMessageContext {
*/ */
private Boolean hasDeal; private Boolean hasDeal;
/**
* 业务类型
* @return
*/
public Integer getBizType() {
if (StringUtils.isNotBlank(interactRecordMessageBO.getMaterialId())) {
return ShareBizType.MATERIAL.getCode();
}
return ShareBizType.GOODS.getCode();
}
public String getBizId() {
Integer bizType = this.getBizType();
if (ShareBizType.MATERIAL.getCode().equals(bizType)) {
return interactRecordMessageBO.getMaterialId();
}
if (ShareBizType.GOODS.getCode().equals(bizType)) {
return interactRecordMessageBO.getGoodsId();
}
return StringUtils.EMPTY;
}
public static InteractRecordMessageContext create(InteractRecordMessageBO interactRecordMessageBO) { public static InteractRecordMessageContext create(InteractRecordMessageBO interactRecordMessageBO) {
InteractRecordMessageContext context = new InteractRecordMessageContext(); InteractRecordMessageContext context = new InteractRecordMessageContext();
context.setInteractRecordMessageBO(interactRecordMessageBO); context.setInteractRecordMessageBO(interactRecordMessageBO);
...@@ -51,8 +73,8 @@ public class InteractRecordMessageContext { ...@@ -51,8 +73,8 @@ public class InteractRecordMessageContext {
* @return * @return
*/ */
public String buildRecordKey() { public String buildRecordKey() {
String customerId = StringUtils.isNotBlank(interactRecordMessageBO.getMemberId()) ? interactRecordMessageBO.getMemberId() : interactRecordMessageBO.getUnionId(); String key = interactRecordMessageBO.getBusinessUUId() + interactRecordMessageBO.getClerkId()
String key = interactRecordMessageBO.getBusinessUUId() + interactRecordMessageBO.getClerkId() + interactRecordMessageBO.getMaterialId() + customerId; + this.getBizId() + this.getCustomerId();
return MD5.create().digestHex(key); return MD5.create().digestHex(key);
} }
...@@ -94,8 +116,8 @@ public class InteractRecordMessageContext { ...@@ -94,8 +116,8 @@ public class InteractRecordMessageContext {
temp.setEventType(this.interactRecordMessageBO.getEventType()); temp.setEventType(this.interactRecordMessageBO.getEventType());
Integer durationTime = Optional.ofNullable(this.interactRecordMessageBO.getDurationTime()).orElse(0); Integer durationTime = Optional.ofNullable(this.interactRecordMessageBO.getDurationTime()).orElse(0);
temp.setDurationTime(durationTime / 1000); temp.setDurationTime(durationTime / 1000);
temp.setBizType(ShareBizType.MATERIAL.getCode()); temp.setBizType(this.getBizType());
temp.setBizId(this.interactRecordMessageBO.getMaterialId() + ""); temp.setBizId(this.getBizId());
temp.setTimes(this.times); temp.setTimes(this.times);
temp.setTraceId(this.buildRecordKey()); temp.setTraceId(this.buildRecordKey());
temp.setDeleteFlag(0); temp.setDeleteFlag(0);
......
...@@ -45,7 +45,7 @@ public class InteractRecordMessageBO implements Serializable { ...@@ -45,7 +45,7 @@ public class InteractRecordMessageBO implements Serializable {
*/ */
private Integer channelSource; private Integer channelSource;
/** /**
* 事件类型 1浏览素材;2查看商品; 3购买商品 * 事件类型 1浏览素材;2查看商品; 3购买商品 4 加入购物车
*/ */
private Integer eventType; private Integer eventType;
/** /**
...@@ -80,4 +80,10 @@ public class InteractRecordMessageBO implements Serializable { ...@@ -80,4 +80,10 @@ public class InteractRecordMessageBO implements Serializable {
* 消息消费次数 * 消息消费次数
*/ */
private Integer times; private Integer times;
/**
* 业务类型
* @see com.gic.haoban.manage.api.enums.content.ShareBizType
*/
private Integer bizType;
} }
package com.gic.haoban.manage.service.service.content.adaptor;
import com.gic.api.base.commons.ServiceResponse;
import com.gic.store.goods.dto.goods.GoodsSpuInfoDTO;
import com.gic.store.goods.service.GoodsCenterApiService;
import org.apache.commons.collections.CollectionUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import java.util.function.Function;
import java.util.stream.Collectors;
/**
* @Author MUSI
* @Date 2023/8/15 9:28 AM
* @Description
* @Version
**/
@Component
public class GoodsInfoAdaptor {
@Autowired
private GoodsCenterApiService goodsCenterApiService;
public Map<String, GoodsSpuInfoDTO> queryGoodsMinPrice(String enterpriseId, List<String> goodsIds) {
ServiceResponse<List<GoodsSpuInfoDTO>> response = goodsCenterApiService.queryGoodsMinPrice(enterpriseId, goodsIds);
if (!response.isSuccess() || CollectionUtils.isEmpty(response.getResult())) {
return Collections.emptyMap();
}
return response.getResult()
.stream()
.collect(Collectors.toMap(GoodsSpuInfoDTO::getGoodsId, Function.identity(), (v1, v2) -> v1));
}
}
...@@ -2,18 +2,18 @@ package com.gic.haoban.manage.service.service.content.adaptor; ...@@ -2,18 +2,18 @@ package com.gic.haoban.manage.service.service.content.adaptor;
import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.TypeReference; import com.alibaba.fastjson.TypeReference;
import com.gic.api.base.commons.Page;
import com.gic.api.base.commons.ServiceResponse; import com.gic.api.base.commons.ServiceResponse;
import com.gic.haoban.manage.api.enums.content.MaterialInteractRecordEventType; import com.gic.haoban.manage.api.enums.content.MaterialInteractRecordEventType;
import com.gic.haoban.manage.api.enums.content.ShareBizType;
import com.gic.haoban.manage.api.enums.content.TriggerCustomerChannelType; import com.gic.haoban.manage.api.enums.content.TriggerCustomerChannelType;
import com.gic.haoban.manage.service.entity.content.TabHaobanInteractRecord; 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.InteractRecordBO;
import com.gic.haoban.manage.service.pojo.bo.content.InteractRecordExtendInfoBO; import com.gic.haoban.manage.service.pojo.bo.content.InteractRecordExtendInfoBO;
import com.gic.haoban.manage.service.pojo.bo.content.PotentialCustomerBO; import com.gic.haoban.manage.service.pojo.bo.content.PotentialCustomerBO;
import com.gic.haoban.manage.service.pojo.bo.content.context.InteractRecordMessageContext; import com.gic.haoban.manage.service.pojo.bo.content.context.InteractRecordMessageContext;
import com.gic.store.goods.dto.goods.GoodsInfoSimpleDTO;
import com.gic.store.goods.dto.goods.GoodsSpuInfoDTO; import com.gic.store.goods.dto.goods.GoodsSpuInfoDTO;
import com.gic.store.goods.dto.qdto.GoodsListQDTO; import com.gic.store.goods.service.GoodsInfoOutApiService;
import com.gic.store.goods.service.GoodsCenterApiService;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections.CollectionUtils; import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
...@@ -25,6 +25,7 @@ import java.util.Arrays; ...@@ -25,6 +25,7 @@ import java.util.Arrays;
import java.util.Collections; import java.util.Collections;
import java.util.Date; import java.util.Date;
import java.util.List; import java.util.List;
import java.util.Map;
import java.util.stream.Collectors; import java.util.stream.Collectors;
/** /**
...@@ -36,10 +37,13 @@ import java.util.stream.Collectors; ...@@ -36,10 +37,13 @@ import java.util.stream.Collectors;
@Slf4j @Slf4j
@Component @Component
public class InteractRecordBuilder { public class InteractRecordBuilder {
@Autowired
private GoodsCenterApiService goodsCenterApiService;
@Autowired @Autowired
private InteractRecordMessageBuilder interactRecordMessageBuilder; private InteractRecordMessageBuilder interactRecordMessageBuilder;
@Autowired
private GoodsInfoOutApiService goodsInfoOutApiService;
@Autowired
private GoodsInfoAdaptor goodsInfoAdaptor;
/** /**
* 互动记录描述 * 互动记录描述
...@@ -48,7 +52,7 @@ public class InteractRecordBuilder { ...@@ -48,7 +52,7 @@ public class InteractRecordBuilder {
* @return * @return
*/ */
public String buildDesc(TabHaobanInteractRecord interactRecord) { public String buildDesc(TabHaobanInteractRecord interactRecord) {
return this.buildDesc(interactRecord.getChannelSource(), interactRecord.getEventType()); return this.buildDesc(interactRecord.getChannelSource(), interactRecord.getEventType(), interactRecord.getBizType());
} }
/** /**
...@@ -58,7 +62,7 @@ public class InteractRecordBuilder { ...@@ -58,7 +62,7 @@ public class InteractRecordBuilder {
* @param eventType * @param eventType
* @return * @return
*/ */
public String buildDesc(Integer channelSource, Integer eventType) { public String buildDesc(Integer channelSource, Integer eventType, Integer bizType) {
StringBuilder stringBuilder = new StringBuilder(); StringBuilder stringBuilder = new StringBuilder();
if (TriggerCustomerChannelType.showDescChannel().contains(channelSource)) { if (TriggerCustomerChannelType.showDescChannel().contains(channelSource)) {
TriggerCustomerChannelType channelType = TriggerCustomerChannelType.getInstance(channelSource); TriggerCustomerChannelType channelType = TriggerCustomerChannelType.getInstance(channelSource);
...@@ -68,7 +72,11 @@ public class InteractRecordBuilder { ...@@ -68,7 +72,11 @@ public class InteractRecordBuilder {
} }
MaterialInteractRecordEventType instance = MaterialInteractRecordEventType.getInstance(eventType); MaterialInteractRecordEventType instance = MaterialInteractRecordEventType.getInstance(eventType);
if (instance != null) { if (instance != null) {
stringBuilder.append(instance.getDesc()); String text = String.format(instance.getDesc(), ShareBizType.getDescWithCode(bizType));
if (MaterialInteractRecordEventType.VISIT_PRODUCT.getCode().equals(eventType) && ShareBizType.GOODS.getCode().equals(bizType)) {
text = "浏览了你分享的商品";
}
stringBuilder.append(text);
} }
return stringBuilder.toString(); return stringBuilder.toString();
} }
...@@ -96,7 +104,8 @@ public class InteractRecordBuilder { ...@@ -96,7 +104,8 @@ public class InteractRecordBuilder {
} }
InteractRecordExtendInfoBO extendInfo = JSON.parseObject(interactRecord.getExtendInfo(), new TypeReference<InteractRecordExtendInfoBO>() { InteractRecordExtendInfoBO extendInfo = JSON.parseObject(interactRecord.getExtendInfo(), new TypeReference<InteractRecordExtendInfoBO>() {
}); });
if (MaterialInteractRecordEventType.VISIT_PRODUCT.getCode().equals(interactRecord.getEventType())) { if (MaterialInteractRecordEventType.VISIT_PRODUCT.getCode().equals(interactRecord.getEventType())
|| MaterialInteractRecordEventType.ADD_SHOPPING_CART.getCode().equals(interactRecord.getEventType())) {
// 浏览商品事件 // 浏览商品事件
List<String> visitGoodsIds = extendInfo.getGoodsIds(); List<String> visitGoodsIds = extendInfo.getGoodsIds();
if (CollectionUtils.isEmpty(visitGoodsIds)) { if (CollectionUtils.isEmpty(visitGoodsIds)) {
...@@ -117,33 +126,32 @@ public class InteractRecordBuilder { ...@@ -117,33 +126,32 @@ public class InteractRecordBuilder {
if (CollectionUtils.isEmpty(visitGoodsIds)) { if (CollectionUtils.isEmpty(visitGoodsIds)) {
return Collections.emptyList(); return Collections.emptyList();
} }
GoodsListQDTO goodsListQDTO = new GoodsListQDTO(); ServiceResponse<List<GoodsInfoSimpleDTO>> serviceResponse = goodsInfoOutApiService.queryGoodsSimpleInfo(visitGoodsIds);
goodsListQDTO.setEnterpriseId(enterpriseId);
goodsListQDTO.setIncludeGoodsIds(visitGoodsIds);
goodsListQDTO.setPageSize(visitGoodsIds.size() + 1);
ServiceResponse<Page<GoodsSpuInfoDTO>> serviceResponse =
goodsCenterApiService.queryStoreGoodsList(goodsListQDTO);
// 1:已上线,2:未上线,3:回收站 // 1:已上线,2:未上线,3:回收站
if (!serviceResponse.isSuccess()) { if (!serviceResponse.isSuccess()) {
log.info("查询商品异常 {}", JSON.toJSONString(serviceResponse)); log.info("查询商品异常 {}", JSON.toJSONString(serviceResponse));
return Collections.emptyList(); return Collections.emptyList();
} }
if (CollectionUtils.isEmpty(serviceResponse.getResult().getResult())) { if (CollectionUtils.isEmpty(serviceResponse.getResult())) {
log.info("查询商品为空 {}", JSON.toJSONString(serviceResponse)); log.info("查询商品为空 {}", JSON.toJSONString(serviceResponse));
return Collections.emptyList(); return Collections.emptyList();
} }
Map<String, GoodsSpuInfoDTO> goodsMinPriceMap = goodsInfoAdaptor.queryGoodsMinPrice(enterpriseId, visitGoodsIds);
List<Integer> excludeStatus = Arrays.asList(0, 3); List<Integer> excludeStatus = Arrays.asList(0, 3);
return serviceResponse.getResult() return serviceResponse.getResult()
.getResult()
.stream() .stream()
.filter(item -> !excludeStatus.contains(item.getStatus())) .filter(item -> !excludeStatus.contains(item.getStatus()))
.map(item -> { .map(item -> {
InteractRecordExtendInfoBO.ExtendGoodsInfo extendGoodsInfo = new InteractRecordExtendInfoBO.ExtendGoodsInfo(); InteractRecordExtendInfoBO.ExtendGoodsInfo extendGoodsInfo = new InteractRecordExtendInfoBO.ExtendGoodsInfo();
extendGoodsInfo.setGoodsName(item.getGoodsName()); extendGoodsInfo.setGoodsName(item.getGoodsName());
extendGoodsInfo.setGoodsCode(item.getGoodsCode()); extendGoodsInfo.setGoodsCode(item.getGoodsCode());
extendGoodsInfo.setGoodsImageUrl(item.getImageUrl()); extendGoodsInfo.setGoodsImageUrl(item.getGoodsImageUrl());
extendGoodsInfo.setSalePrice(item.getSalePrice()); extendGoodsInfo.setSalePrice(item.getSalePrice());
extendGoodsInfo.setSourceType(item.getSourceType()); extendGoodsInfo.setSourceType(item.getSourceType());
GoodsSpuInfoDTO goodsSpuInfoDTO = goodsMinPriceMap.get(item.getGoodsId());
if (goodsSpuInfoDTO != null && goodsSpuInfoDTO.getMinPrice() != null) {
extendGoodsInfo.setSalePrice(goodsSpuInfoDTO.getMinPrice());
}
return extendGoodsInfo; return extendGoodsInfo;
}) })
.collect(Collectors.toList()); .collect(Collectors.toList());
......
...@@ -190,7 +190,7 @@ public class InteractRecordMessageBuilder { ...@@ -190,7 +190,7 @@ public class InteractRecordMessageBuilder {
.map(ListOrderItemDTO::getMallProId) .map(ListOrderItemDTO::getMallProId)
.distinct() .distinct()
.collect(Collectors.toList()); .collect(Collectors.toList());
Map<String, Integer> goodsSourceTypeMap = queryGoodsSimpleInfo(enterpriseId, goodsIds); Map<String, Integer> goodsSourceTypeMap = this.queryGoodsSimpleInfo(enterpriseId, goodsIds);
OrderOutInfoDTO orderOutInfoDTO = serviceResponse.getResult(); OrderOutInfoDTO orderOutInfoDTO = serviceResponse.getResult();
InteractRecordExtendInfoBO.ExtendOrderInfo extendOrderInfo = new InteractRecordExtendInfoBO.ExtendOrderInfo(); InteractRecordExtendInfoBO.ExtendOrderInfo extendOrderInfo = new InteractRecordExtendInfoBO.ExtendOrderInfo();
......
...@@ -92,6 +92,9 @@ public class InteractRecordMessageService { ...@@ -92,6 +92,9 @@ public class InteractRecordMessageService {
if (interactRecordBO.getEventType() < interactRecordMessageBO.getEventType()) { if (interactRecordBO.getEventType() < interactRecordMessageBO.getEventType()) {
interactRecordBO.setEventType(interactRecordMessageBO.getEventType()); interactRecordBO.setEventType(interactRecordMessageBO.getEventType());
} }
if (MaterialInteractRecordEventType.ORDER.getCode().equals(interactRecordMessageBO.getEventType())) {
interactRecordBO.setEventType(interactRecordMessageBO.getEventType());
}
} }
// 更新互动记录的最新访问时间 // 更新互动记录的最新访问时间
if (interactRecordBO.getLastAccessTime().before(new Date(interactRecordMessageBO.getLastAccessTime()))) { if (interactRecordBO.getLastAccessTime().before(new Date(interactRecordMessageBO.getLastAccessTime()))) {
...@@ -100,15 +103,19 @@ public class InteractRecordMessageService { ...@@ -100,15 +103,19 @@ public class InteractRecordMessageService {
if (!MaterialInteractRecordEventType.VISIT_MATERIAL.getCode().equals(interactRecordMessageBO.getEventType()) if (!MaterialInteractRecordEventType.VISIT_MATERIAL.getCode().equals(interactRecordMessageBO.getEventType())
&& null == interactRecordBO.getExtendInfo()) { && null == interactRecordBO.getExtendInfo()) {
log.info("非素材浏览时间,初始化扩展字段"); log.info("非素材浏览事件,初始化扩展字段");
interactRecordBO.setExtendInfo(InteractRecordExtendInfoBO.empty()); interactRecordBO.setExtendInfo(InteractRecordExtendInfoBO.empty());
} }
// 组装扩展信息 // 组装扩展信息
if (MaterialInteractRecordEventType.VISIT_PRODUCT.getCode().equals(interactRecordMessageBO.getEventType())) { if (MaterialInteractRecordEventType.VISIT_PRODUCT.getCode()
.equals(interactRecordMessageBO.getEventType())
|| MaterialInteractRecordEventType.ADD_SHOPPING_CART.getCode().equals(interactRecordBO.getEventType())) {
// 浏览商品 // 浏览商品
if (StringUtils.isNotBlank(interactRecordMessageBO.getGoodsId()) if (StringUtils.isNotBlank(interactRecordMessageBO.getGoodsId())
&& !interactRecordBO.getExtendInfo().getGoodsIds().contains(interactRecordMessageBO.getGoodsId())) { && !interactRecordBO.getExtendInfo()
interactRecordBO.getExtendInfo().getGoodsIds().add(interactRecordMessageBO.getGoodsId()); .getGoodsIds().contains(interactRecordMessageBO.getGoodsId())) {
interactRecordBO.getExtendInfo().getGoodsIds()
.add(interactRecordMessageBO.getGoodsId());
} }
} }
......
...@@ -76,6 +76,7 @@ public class MallOrderStatusChangeApiServiceImpl implements MallOrderStatusChang ...@@ -76,6 +76,7 @@ public class MallOrderStatusChangeApiServiceImpl implements MallOrderStatusChang
JSONObject jsonObject = JSON.parseObject(extendJson, JSONObject.class); JSONObject jsonObject = JSON.parseObject(extendJson, JSONObject.class);
String clerkId = jsonObject.getString("clerkId"); String clerkId = jsonObject.getString("clerkId");
String contentMaterialId = jsonObject.getString("contentMaterialId"); String contentMaterialId = jsonObject.getString("contentMaterialId");
String goodsId = jsonObject.getString("goodsId");
String memberId = orderEventMqBO.getMemberId(); String memberId = orderEventMqBO.getMemberId();
InteractRecordMessageBO interactRecordMessageBO = new InteractRecordMessageBO(); InteractRecordMessageBO interactRecordMessageBO = new InteractRecordMessageBO();
...@@ -83,6 +84,7 @@ public class MallOrderStatusChangeApiServiceImpl implements MallOrderStatusChang ...@@ -83,6 +84,7 @@ public class MallOrderStatusChangeApiServiceImpl implements MallOrderStatusChang
interactRecordMessageBO.setMemberId(memberId); interactRecordMessageBO.setMemberId(memberId);
interactRecordMessageBO.setClerkId(clerkId); interactRecordMessageBO.setClerkId(clerkId);
interactRecordMessageBO.setMaterialId(contentMaterialId); interactRecordMessageBO.setMaterialId(contentMaterialId);
interactRecordMessageBO.setGoodsId(goodsId);
interactRecordMessageBO.setEventType(MaterialInteractRecordEventType.ORDER.getCode()); interactRecordMessageBO.setEventType(MaterialInteractRecordEventType.ORDER.getCode());
interactRecordMessageBO.setDurationTime(0); interactRecordMessageBO.setDurationTime(0);
interactRecordMessageBO.setLastAccessTime(orderInfo.getCreateTime().getTime()); interactRecordMessageBO.setLastAccessTime(orderInfo.getCreateTime().getTime());
......
...@@ -56,7 +56,7 @@ public class PotentialCustomerApiServiceImpl implements PotentialCustomerApiServ ...@@ -56,7 +56,7 @@ public class PotentialCustomerApiServiceImpl implements PotentialCustomerApiServ
PotentialCustomerDTO temp = new PotentialCustomerDTO(); PotentialCustomerDTO temp = new PotentialCustomerDTO();
BeanUtils.copyProperties(item, temp); BeanUtils.copyProperties(item, temp);
temp.setPotentialCustomerId(item.getId()); temp.setPotentialCustomerId(item.getId());
temp.setDesc(interactRecordBuilder.buildDesc(item.getChannelSource(), item.getEventType())); temp.setDesc(interactRecordBuilder.buildDesc(item.getChannelSource(), item.getEventType(), item.getBizType()));
return temp; return temp;
}) })
.collect(Collectors.toList()); .collect(Collectors.toList());
......
...@@ -12,10 +12,14 @@ import com.gic.haoban.manage.api.enums.content.ShareBizType; ...@@ -12,10 +12,14 @@ import com.gic.haoban.manage.api.enums.content.ShareBizType;
import com.gic.haoban.manage.api.service.content.PotentialCustomerApiService; import com.gic.haoban.manage.api.service.content.PotentialCustomerApiService;
import com.gic.haoban.manage.web.controller.content.adaptor.ContentMaterialAdaptor; import com.gic.haoban.manage.web.controller.content.adaptor.ContentMaterialAdaptor;
import com.gic.haoban.manage.web.controller.content.adaptor.MaterialDataAdaptor; import com.gic.haoban.manage.web.controller.content.adaptor.MaterialDataAdaptor;
import com.gic.haoban.manage.web.controller.goods.GoodsInfoAdaptor;
import com.gic.haoban.manage.web.qo.content.potential.PotentialCustomerMarkRecordVO; import com.gic.haoban.manage.web.qo.content.potential.PotentialCustomerMarkRecordVO;
import com.gic.haoban.manage.web.qo.content.potential.PotentialCustomerQO; import com.gic.haoban.manage.web.qo.content.potential.PotentialCustomerQO;
import com.gic.haoban.manage.web.vo.content.ContentMaterialInfoVO; import com.gic.haoban.manage.web.vo.content.ContentMaterialInfoVO;
import com.gic.haoban.manage.web.vo.content.SimpleGoodsInfoVO;
import com.gic.haoban.manage.web.vo.content.potential.PotentialCustomerVO; import com.gic.haoban.manage.web.vo.content.potential.PotentialCustomerVO;
import com.gic.store.goods.dto.goods.GoodsInfoSimpleDTO;
import com.gic.store.goods.dto.goods.GoodsSpuInfoDTO;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections.CollectionUtils; import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
...@@ -45,6 +49,8 @@ public class PotentialCustomerController { ...@@ -45,6 +49,8 @@ public class PotentialCustomerController {
ContentMaterialAdaptor contentMaterialAdaptor; ContentMaterialAdaptor contentMaterialAdaptor;
@Autowired @Autowired
MaterialDataAdaptor materialDataAdaptor; MaterialDataAdaptor materialDataAdaptor;
@Autowired
private GoodsInfoAdaptor goodsInfoAdaptor;
/** /**
...@@ -69,6 +75,18 @@ public class PotentialCustomerController { ...@@ -69,6 +75,18 @@ public class PotentialCustomerController {
return RestResponse.successResult(); return RestResponse.successResult();
} }
List<PotentialCustomerDTO> customerDTOS = serviceResponse.getResult().getResult(); List<PotentialCustomerDTO> customerDTOS = serviceResponse.getResult().getResult();
List<PotentialCustomerVO> customerVOS = this.buildContentInfo(potentialCustomerQO, customerDTOS);
this.buildGoodsInfo(searchQDTO.getEnterpriseId(), customerVOS);
Page<PotentialCustomerVO> result = new Page<>();
result.setTotalCount(serviceResponse.getResult().getTotalCount());
result.setResult(customerVOS);
result.setCurrentPage(potentialCustomerQO.getPageNum());
result.setPageSize(potentialCustomerQO.getPageSize());
return RestResponse.successResult(result);
}
private List<PotentialCustomerVO> buildContentInfo(PotentialCustomerQO potentialCustomerQO, List<PotentialCustomerDTO> customerDTOS) {
// 素材信息
List<Long> materialIds = customerDTOS List<Long> materialIds = customerDTOS
.stream() .stream()
.filter(item -> ShareBizType.MATERIAL.getCode().equals(item.getBizType())) .filter(item -> ShareBizType.MATERIAL.getCode().equals(item.getBizType()))
...@@ -76,6 +94,7 @@ public class PotentialCustomerController { ...@@ -76,6 +94,7 @@ public class PotentialCustomerController {
.collect(Collectors.toList()); .collect(Collectors.toList());
Map<Long, ContentMaterialBaseDTO> materialInfoMap = contentMaterialAdaptor.queryMaterialInfoMap(potentialCustomerQO.getEnterpriseId(), materialIds); Map<Long, ContentMaterialBaseDTO> materialInfoMap = contentMaterialAdaptor.queryMaterialInfoMap(potentialCustomerQO.getEnterpriseId(), materialIds);
// 会员最近30天访问
List<String> memberIds = customerDTOS List<String> memberIds = customerDTOS
.stream() .stream()
.filter(item -> ShareBizType.MATERIAL.getCode().equals(item.getBizType())) .filter(item -> ShareBizType.MATERIAL.getCode().equals(item.getBizType()))
...@@ -110,12 +129,40 @@ public class PotentialCustomerController { ...@@ -110,12 +129,40 @@ public class PotentialCustomerController {
return temp; return temp;
}) })
.collect(Collectors.toList()); .collect(Collectors.toList());
Page<PotentialCustomerVO> result = new Page<>(); return customerVOS;
result.setTotalCount(serviceResponse.getResult().getTotalCount()); }
result.setResult(customerVOS);
result.setCurrentPage(potentialCustomerQO.getPageNum()); private void buildGoodsInfo(String enterpriseId, List<PotentialCustomerVO> customerVos) {
result.setPageSize(potentialCustomerQO.getPageSize()); if (CollectionUtils.isEmpty(customerVos)) {
return RestResponse.successResult(result); return;
}
List<String> goodsIds = customerVos
.stream()
.filter(item -> ShareBizType.GOODS.getCode().equals(item.getBizType()))
.map(PotentialCustomerVO::getBizId)
.distinct()
.collect(Collectors.toList());
Map<String, GoodsInfoSimpleDTO> goodsInfoMap = goodsInfoAdaptor.queryGoodsInfo(enterpriseId, goodsIds);
Map<String, GoodsSpuInfoDTO> goodsSpuInfoMap = goodsInfoAdaptor.queryGoodsMinPrice(enterpriseId, goodsIds);
for (PotentialCustomerVO customerVo : customerVos) {
GoodsInfoSimpleDTO goodsInfoSimpleDTO = goodsInfoMap.get(customerVo.getBizId());
if (goodsInfoSimpleDTO == null) {
continue;
}
SimpleGoodsInfoVO simpleGoodsInfoVO = new SimpleGoodsInfoVO();
simpleGoodsInfoVO.setGoodsId(customerVo.getBizId());
simpleGoodsInfoVO.setGoodsCode(goodsInfoSimpleDTO.getGoodsCode());
simpleGoodsInfoVO.setGoodsName(goodsInfoSimpleDTO.getGoodsName());
simpleGoodsInfoVO.setSourceType(goodsInfoSimpleDTO.getSourceType());
simpleGoodsInfoVO.setGoodsImg(goodsInfoSimpleDTO.getGoodsImageUrl());
simpleGoodsInfoVO.setSalePrice(goodsInfoSimpleDTO.getSalePrice());
GoodsSpuInfoDTO goodsSpuInfoDTO = goodsSpuInfoMap.get(customerVo.getBizId());
if (goodsSpuInfoDTO != null && goodsSpuInfoDTO.getMinPrice() != null) {
simpleGoodsInfoVO.setSalePrice(goodsSpuInfoDTO.getMinPrice());
}
customerVo.setSimpleGoodsInfoVO(simpleGoodsInfoVO);
}
} }
......
...@@ -5,6 +5,7 @@ import com.gic.api.base.commons.Page; ...@@ -5,6 +5,7 @@ import com.gic.api.base.commons.Page;
import com.gic.api.base.commons.ServiceResponse; import com.gic.api.base.commons.ServiceResponse;
import com.gic.haoban.app.aggregation.api.dto.GoodsSettingDTO; import com.gic.haoban.app.aggregation.api.dto.GoodsSettingDTO;
import com.gic.haoban.app.aggregation.api.service.SettingApiService; import com.gic.haoban.app.aggregation.api.service.SettingApiService;
import com.gic.store.goods.dto.goods.GoodsInfoSimpleDTO;
import com.gic.store.goods.dto.goods.GoodsSpuInfoDTO; import com.gic.store.goods.dto.goods.GoodsSpuInfoDTO;
import com.gic.store.goods.dto.qdto.GoodsListQDTO; import com.gic.store.goods.dto.qdto.GoodsListQDTO;
import com.gic.store.goods.service.GoodsCenterApiService; import com.gic.store.goods.service.GoodsCenterApiService;
...@@ -125,4 +126,17 @@ public class GoodsInfoAdaptor { ...@@ -125,4 +126,17 @@ public class GoodsInfoAdaptor {
.stream() .stream()
.collect(Collectors.toMap(GoodsSpuInfoDTO::getGoodsId, Function.identity())); .collect(Collectors.toMap(GoodsSpuInfoDTO::getGoodsId, Function.identity()));
} }
public Map<String, GoodsInfoSimpleDTO> queryGoodsInfo(String enterpriseId, List<String> goodsIds) {
if (CollectionUtils.isEmpty(goodsIds)) {
return Collections.emptyMap();
}
ServiceResponse<List<GoodsInfoSimpleDTO>> serviceResponse = goodsInfoOutApiService.queryGoodsSimpleInfo(goodsIds);
if (!serviceResponse.isSuccess() || CollectionUtils.isEmpty(serviceResponse.getResult())) {
return Collections.emptyMap();
}
return serviceResponse.getResult()
.stream()
.collect(Collectors.toMap(GoodsInfoSimpleDTO::getGoodsId, Function.identity()));
}
} }
...@@ -19,12 +19,12 @@ public class InteractRecordExtendInfoVO implements Serializable { ...@@ -19,12 +19,12 @@ public class InteractRecordExtendInfoVO implements Serializable {
private static final long serialVersionUID = 799914036029100258L; private static final long serialVersionUID = 799914036029100258L;
/** /**
* 素材关联的商品信息商品信息 * 商品信息
*/ */
private List<ExtendGoodsInfo> extendGoodsInfos; private List<ExtendGoodsInfo> extendGoodsInfos;
/** /**
* 素材关联的订单信息 * 订单信息
*/ */
private List<ExtendOrderInfo> extendOrderInfos; private List<ExtendOrderInfo> extendOrderInfos;
......
...@@ -55,6 +55,12 @@ public class InteractRecordVO implements Serializable { ...@@ -55,6 +55,12 @@ public class InteractRecordVO implements Serializable {
private Integer eventType; private Integer eventType;
/** /**
* 业务类型
* @see com.gic.haoban.manage.api.enums.content.ShareBizType
*/
private Integer bizType;
/**
* 浏览的商品数量 * 浏览的商品数量
*/ */
private Integer visitGoodsNum; private Integer visitGoodsNum;
......
...@@ -3,6 +3,7 @@ package com.gic.haoban.manage.web.vo.content.potential; ...@@ -3,6 +3,7 @@ package com.gic.haoban.manage.web.vo.content.potential;
import com.fasterxml.jackson.databind.annotation.JsonSerialize; import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import com.gic.haoban.manage.web.vo.content.ContentMaterialInfoVO; import com.gic.haoban.manage.web.vo.content.ContentMaterialInfoVO;
import com.gic.haoban.manage.web.vo.content.SimpleGoodsInfoVO;
import lombok.Data; import lombok.Data;
import java.io.Serializable; import java.io.Serializable;
...@@ -90,11 +91,16 @@ public class PotentialCustomerVO implements Serializable { ...@@ -90,11 +91,16 @@ public class PotentialCustomerVO implements Serializable {
private Integer dealRecord; private Integer dealRecord;
/** /**
* 素材信息 * 素材信息 bizType == 1 读取
*/ */
private ContentMaterialInfoVO contentMaterialInfoVO; private ContentMaterialInfoVO contentMaterialInfoVO;
/** /**
* 商品信息 bizType == 2 时
*/
private SimpleGoodsInfoVO simpleGoodsInfoVO;
/**
* 第几次访问 * 第几次访问
*/ */
private Integer times; private Integer times;
...@@ -103,4 +109,15 @@ public class PotentialCustomerVO implements Serializable { ...@@ -103,4 +109,15 @@ public class PotentialCustomerVO implements Serializable {
* 停留时长 单位秒 * 停留时长 单位秒
*/ */
private Integer durationTime; private Integer durationTime;
/**
* 业务类型
* @see com.gic.haoban.manage.api.enums.content.ShareBizType
*/
private Integer bizType;
/**
* 业务id
*/
private String bizId;
} }
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