Commit 3ed6a8ab by songyinghui

feat: 销售线索

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