Commit 4371676f by 王祖波

Merge branch 'feature-content4' into 'master'

Feature content4

See merge request !1422
parents 74e5adda dc7b309e
......@@ -80,6 +80,8 @@ public enum NoticeMessageTypeEnum {
MATERIAL_REPORT_NOTIFY_MONTH(6004, "素材月报通知", NoticeMessageCategoryTypeEnum.MATERIAL.getType(), "material_month_notify", "/pages/route/index?pageType=", "hbapp_mate_report", "materialMonth", "clerkMaterialsReport"),
CLERK_COMMISSION_NOTIFY(6005, "客户下单通知", NoticeMessageCategoryTypeEnum.CUSTOMER.getType(), "clerk_commission_notify", "/pages/route/index?pageType=", "hbapp_withdraw_list", "clerkCommissionNotify", "haobanNotice"),
MATERIAL_AUDIT_NOTIFY(6006, "素材审核通知", NoticeMessageCategoryTypeEnum.MATERIAL.getType(), "material_audit_notify", "/pages/route/index?pageType=", "hbapp_create_center", "materialAuditNotify", "haobanNotice"),
CASH_APPLY_REFUSE_NOTIFY(7001,"提现通知", NoticeMessageCategoryTypeEnum.OTHER.getType(),"cash_apply_refuse_notify","/pages/route/index?pageType=","hbapp_withdraw_list","cashApplyRefuseNotify","haobanNotice"),
CASH_APPLY_FAIL_NOTIFY(7002,"提现通知", NoticeMessageCategoryTypeEnum.OTHER.getType(),"cash_apply_fail_notify","/pages/route/index?pageType=","hbapp_withdraw_list","cashApplyFailNotify","haobanNotice"),
......
......@@ -56,6 +56,13 @@ public class InteractRecordInfoDTO implements Serializable {
*/
private String bizId;
/**
* 业务类型
* @see com.gic.haoban.manage.api.enums.content.ShareBizType
*/
private Integer bizType;
/**
* 浏览的商品数量
*/
......@@ -158,4 +165,12 @@ public class InteractRecordInfoDTO implements Serializable {
public void setOrderGoodsNum(Integer orderGoodsNum) {
this.orderGoodsNum = orderGoodsNum;
}
public Integer getBizType() {
return bizType;
}
public void setBizType(Integer bizType) {
this.bizType = bizType;
}
}
......@@ -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 "";
}
}
......@@ -82,4 +82,12 @@ public interface HaobanRoleApiService {
* @return
*/
ServiceResponse<Void> contentMaterialRoleInit(ContentMaterialROleInitQDTO contentMaterialROleInitQDTO);
/**
* 刷新企业权限 单次
* @param params
* @return
*/
@Deprecated
ServiceResponse<Void> flushRightOneTime(String params);
}
......@@ -9,6 +9,7 @@ import com.gic.haoban.manage.service.pojo.bo.content.message.InteractRecordMessa
import lombok.AllArgsConstructor;
import lombok.Data;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.math.NumberUtils;
import org.springframework.beans.BeanUtils;
import java.util.Date;
......@@ -39,6 +40,30 @@ public class InteractRecordMessageContext {
*/
private Boolean hasDeal;
/**
* 业务类型
* @return
*/
public Integer getBizType() {
// 素材id不为空 且 素材id是数字类型
if (StringUtils.isNotBlank(interactRecordMessageBO.getMaterialId())
&& NumberUtils.isDigits(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 +76,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 +119,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;
}
......@@ -68,10 +68,10 @@ public interface InteractRecordService {
/**
* 查询最新的一条互动记录
* @param clerkId
* @param materialId
* @param bizId
* @param memberId
* @return
*/
InteractRecordBO queryLeastRecord(String enterpriseId, String clerkId, String materialId, String memberId);
InteractRecordBO queryLeastRecord(String enterpriseId, String clerkId, String bizId, String memberId);
}
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,9 @@ 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())
|| MaterialInteractRecordEventType.ORDER.getCode().equals(interactRecord.getEventType())) {
// 浏览商品事件
List<String> visitGoodsIds = extendInfo.getGoodsIds();
if (CollectionUtils.isEmpty(visitGoodsIds)) {
......@@ -110,6 +120,19 @@ public class InteractRecordBuilder {
extendInfo.setInvalidGoodsNum(visitGoodsIds.size() - extendGoodsInfos.size());
return extendInfo;
}
// if (MaterialInteractRecordEventType.ORDER.getCode().equals(interactRecord.getEventType())
// && ShareBizType.GOODS.getCode().equals(interactRecord.getBizType())) {
// InteractRecordExtendInfoBO.ExtendGoodsInfo extendGoodsInfo = new InteractRecordExtendInfoBO.ExtendGoodsInfo();
// extendGoodsInfo.setGoodsName();
// extendGoodsInfo.setGoodsCode(item.getGoodsCode());
// 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 extendInfo;
}
......@@ -117,33 +140,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();
......
......@@ -232,16 +232,16 @@ public class InteractRecordServiceImpl implements InteractRecordService {
* 查询最新的一条互动记录
*
* @param clerkId
* @param materialId
* @param bizId
* @param memberId
* @return
*/
@Override
public InteractRecordBO queryLeastRecord(String enterpriseId, String clerkId, String materialId, String memberId) {
public InteractRecordBO queryLeastRecord(String enterpriseId, String clerkId, String bizId, String memberId) {
InteractRecordQO interactRecordQO = new InteractRecordQO();
interactRecordQO.setEnterpriseId(enterpriseId);
interactRecordQO.setClerkId(clerkId);
interactRecordQO.setBizId(materialId);
interactRecordQO.setBizId(bizId);
interactRecordQO.setMemberId(memberId);
PageHelper.startPage(1, 1);
com.github.pagehelper.Page<TabHaobanInteractRecord> pageResult =
......
package com.gic.haoban.manage.service.service.content.message;
import com.alibaba.fastjson.JSON;
import com.gic.dubbo.entity.ProviderLocalTag;
import com.gic.haoban.manage.api.enums.content.MaterialInteractRecordEventType;
import com.gic.haoban.manage.service.pojo.bo.content.message.InteractRecordMessageBO;
import lombok.extern.slf4j.Slf4j;
......@@ -11,6 +12,7 @@ import org.springframework.kafka.listener.MessageListener;
import java.util.ArrayList;
import java.util.List;
import java.util.UUID;
/**
* @Author MUSI
......@@ -29,12 +31,14 @@ public class InteractRecordMessageListener implements MessageListener<String, St
static {
dealEventType.add(MaterialInteractRecordEventType.VISIT_PRODUCT.getCode());
dealEventType.add(MaterialInteractRecordEventType.VISIT_MATERIAL.getCode());
dealEventType.add(MaterialInteractRecordEventType.ADD_SHOPPING_CART.getCode());
}
@Override
public void onMessage(ConsumerRecord<String, String> consumerRecord) {
ProviderLocalTag providerLocalTag = ProviderLocalTag.tag.get();
providerLocalTag.traceId = UUID.randomUUID().toString();
String value = consumerRecord.value();
log.info("【InteractRecordMessageListener】处理埋点事件 {}", value);
InteractRecordMessageBO recordMessageBO = JSON.parseObject(value, InteractRecordMessageBO.class);
if (recordMessageBO == null) {
......@@ -42,7 +46,7 @@ public class InteractRecordMessageListener implements MessageListener<String, St
return;
}
if (recordMessageBO.getEventType() == null || !dealEventType.contains(recordMessageBO.getEventType())) {
log.info("素材埋点事件类型非素材相关类型 {}", recordMessageBO.getEventType());
log.info("埋点事件类型非相关类型 {}", recordMessageBO.getEventType());
return;
}
dataConvert(recordMessageBO);
......
......@@ -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());
}
}
......@@ -139,9 +146,9 @@ public class InteractRecordMessageService {
potentialCustomerBO.setSeeFlag(0);
potentialCustomerBO.setStoreId(interactRecordBO.getStoreId());
potentialCustomerBO.setBizId(interactRecordBO.getBizId());
potentialCustomerBO.setBizType(interactRecordBO.getBizType());
potentialCustomerBO.setEventType(interactRecordBO.getEventType());
potentialCustomerBO.setChannelSource(interactRecordBO.getChannelSource());
potentialCustomerBO.setEventType(interactRecordBO.getEventType());
potentialCustomerBO.setDurationTime(interactRecordBO.getDurationTime());
potentialCustomerBO.setTimes(interactRecordBO.getTimes());
potentialCustomerService.saveOrUpdatePotentialCustomer(potentialCustomerBO);
......@@ -157,9 +164,14 @@ public class InteractRecordMessageService {
* @return
*/
public InteractRecordBO getInteractRecordBOWithOrderType(InteractRecordMessageBO interactRecordMessageBO) {
InteractRecordBO interactRecordBO;
InteractRecordBO interactRecordBO = null;
String bizId = interactRecordMessageBO.getMaterialId();
if (StringUtils.isBlank(bizId)) {
bizId = interactRecordMessageBO.getGoodsId();
}
interactRecordBO = interactRecordService.queryLeastRecord(interactRecordMessageBO.getEnterpriseId(), interactRecordMessageBO.getClerkId(),
interactRecordMessageBO.getMaterialId(), interactRecordMessageBO.getMemberId());
bizId, interactRecordMessageBO.getMemberId());
return interactRecordBO;
}
}
......@@ -76,13 +76,21 @@ 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("proId");
String memberId = orderEventMqBO.getMemberId();
InteractRecordMessageBO interactRecordMessageBO = new InteractRecordMessageBO();
interactRecordMessageBO.setEnterpriseId(orderEventMqBO.getEnterpriseId());
interactRecordMessageBO.setMemberId(memberId);
interactRecordMessageBO.setClerkId(clerkId);
interactRecordMessageBO.setMaterialId(contentMaterialId);
if (StringUtils.isNotBlank(contentMaterialId) && StringUtils.isNumeric(contentMaterialId)) {
interactRecordMessageBO.setMaterialId(contentMaterialId);
}else if (StringUtils.isNotBlank(goodsId) && !StringUtils.isNumeric(goodsId)) {
interactRecordMessageBO.setGoodsId(goodsId);
}else {
log.info("订单扩展信息中无要处理的数据 {}", extendJson);
return ServiceResponse.success();
}
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());
......
......@@ -26,6 +26,7 @@ import com.gic.haoban.manage.service.pojo.bo.role.HaobanMenuBO;
import com.gic.haoban.manage.service.pojo.bo.role.HaobanRoleBO;
import com.gic.haoban.manage.service.service.TemplateEnterpriseRelatedService;
import com.gic.haoban.manage.service.service.WxEnterpriseRelatedService;
import com.gic.haoban.manage.service.service.content.adaptor.MaterialEnterpriseAdaptor;
import com.gic.haoban.manage.service.service.role.HaobanMenuService;
import com.gic.haoban.manage.service.service.role.HaobanRoleMenuService;
import com.gic.haoban.manage.service.service.role.HaobanRoleService;
......@@ -68,6 +69,8 @@ public class HaobanRoleApiServiceImpl implements HaobanRoleApiService {
private TabHaobanTemplateApplicationRelatedMapper tabHaobanTemplateApplicationRelatedMapper;
@Autowired
private TemplateEnterpriseRelatedService templateEnterpriseRelatedService;
@Autowired
private MaterialEnterpriseAdaptor materialEnterpriseAdaptor;
@Override
@Transactional(rollbackFor = Exception.class)
......@@ -575,16 +578,50 @@ public class HaobanRoleApiServiceImpl implements HaobanRoleApiService {
static {
// 导购
menuCodeMap.put("0" + ContentMaterialROleInitQDTO.Version.LOW.getCode(), Arrays.asList("materialMain", "commodityCenter", "commodityCenterTab", "materialCenterTab", "goodsDetail_material", "goodsCenter_Count", "salesClue", "customerDetail_interact"));
menuCodeMap.put("0" + ContentMaterialROleInitQDTO.Version.HIGH.getCode(), Arrays.asList("materialMain","commodityCenter", "commodityCenterTab", "materialCenterTab", "goodsDetail_material", "goodsCenter_Count", "salesClue", "customerDetail_interact"));
menuCodeMap.put("0" + ContentMaterialROleInitQDTO.Version.LOW.getCode(), Arrays.asList("materialMain", "commodityCenter", "commodityCenterTab", "materialCenterTab",
"goodsDetail_material", "goodsCenter_Count", "salesClue", "customerDetail_interact"));
menuCodeMap.put("0" + ContentMaterialROleInitQDTO.Version.HIGH.getCode(), Arrays.asList("materialMain","commodityCenter", "commodityCenterTab", "materialCenterTab",
"goodsDetail_material", "goodsCenter_Count", "salesClue", "customerDetail_interact", "publishMaterial", "userCenter_createCenter"));
// 店长
menuCodeMap.put("1" + ContentMaterialROleInitQDTO.Version.LOW.getCode(), Arrays.asList("materialMain", "commodityCenter", "commodityCenterTab", "materialCenterTab", "goodsDetail_material", "goodsCenter_Count", "materialManage", "salesClue", "customerDetail_interact"));
menuCodeMap.put("1" + ContentMaterialROleInitQDTO.Version.HIGH.getCode(), Arrays.asList("materialMain", "commodityCenter", "commodityCenterTab", "materialCenterTab", "goodsDetail_material", "goodsCenter_Count", "materialManage", "salesClue", "customerDetail_interact"));
menuCodeMap.put("1" + ContentMaterialROleInitQDTO.Version.HIGH.getCode(), Arrays.asList("materialMain", "commodityCenter", "commodityCenterTab", "materialCenterTab",
"goodsDetail_material", "goodsCenter_Count", "materialManage", "salesClue", "customerDetail_interact", "publishMaterial", "userCenter_createCenter"));
// 区经
menuCodeMap.put("2" + ContentMaterialROleInitQDTO.Version.LOW.getCode(), Arrays.asList("materialMain", "commodityCenter", "commodityCenterTab", "materialCenterTab", "goodsDetail_material", "goodsCenter_Count", "materialManage"));
menuCodeMap.put("2" + ContentMaterialROleInitQDTO.Version.HIGH.getCode(), Arrays.asList("materialMain", "commodityCenter", "commodityCenterTab", "materialCenterTab", "goodsDetail_material", "goodsCenter_Count", "materialManage"));
menuCodeMap.put("2" + ContentMaterialROleInitQDTO.Version.HIGH.getCode(), Arrays.asList("materialMain", "commodityCenter", "commodityCenterTab", "materialCenterTab",
"goodsDetail_material", "goodsCenter_Count", "materialManage", "publishMaterial", "userCenter_createCenter"));
}
/**
* 刷新企业权限
*
* @param params
* @return
*/
@Override
public ServiceResponse<Void> flushRightOneTime(String params) {
logger.info("flushRightOneTime 刷新企业内容权限:{}", params);
// 获取所有开通内容高级版的企业
List<String> enterpriseIds = materialEnterpriseAdaptor.queryHasRightEnterpriseIds(MaterialEnterpriseAdaptor.MaterialLevel.HIGH.getCode());
// 执行刷新权限
String enterpriseId = "";
if (StringUtils.isNotBlank(params) && !StringUtils.equals("-1", params)) {
enterpriseId = params;
}
for (String tempId : enterpriseIds) {
if (StringUtils.isNotBlank(enterpriseId) && !StringUtils.equalsIgnoreCase(enterpriseId, tempId)) {
logger.info("当前企业:{} 不是目标企业:{}, 忽略", tempId, enterpriseId);
continue;
}
ContentMaterialROleInitQDTO contentMaterialROleInitQDTO = new ContentMaterialROleInitQDTO();
contentMaterialROleInitQDTO.setEnterpriseId(tempId);
contentMaterialROleInitQDTO.setVersion(MaterialEnterpriseAdaptor.MaterialLevel.HIGH.getCode());
logger.info("添加企业素材纬度权限: {}", JSON.toJSONString(contentMaterialROleInitQDTO));
this.contentMaterialRoleInit(contentMaterialROleInitQDTO);
}
return ServiceResponse.success();
}
}
......@@ -323,6 +323,7 @@
update tab_haoban_interact_record
set member_id = #{memberId}
where union_id = #{unionId} and delete_flag = 0
and (member_id is null or member_id = '')
</update>
</mapper>
......
import com.alibaba.fastjson.JSONObject;
import com.gic.api.base.commons.Page;
import com.gic.api.base.commons.ServiceResponse;
import com.gic.haoban.manage.api.dto.content.PotentialCustomerDTO;
import com.gic.haoban.manage.api.dto.qdto.content.PotentialCustomerQDTO;
import com.gic.haoban.manage.api.service.content.MallOrderStatusChangeApiService;
import com.gic.haoban.manage.api.service.content.PotentialCustomerApiService;
import com.gic.haoban.manage.service.pojo.bo.content.OrderEventMqBO;
import com.gic.haoban.manage.service.pojo.bo.content.message.InteractRecordMessageBO;
import com.gic.haoban.manage.service.service.content.PotentialCustomerService;
import com.gic.haoban.manage.service.service.content.message.InteractRecordMessageService;
import com.gic.haoban.manage.service.service.out.impl.content.MallOrderStatusChangeApiServiceImpl;
import com.sun.org.apache.bcel.internal.generic.DADD;
import org.junit.Test;
import org.junit.runner.RunWith;
......@@ -26,6 +35,8 @@ public class InteractRecordMessageServiceTest {
InteractRecordMessageService interactRecordMessageService;
@Autowired
MallOrderStatusChangeApiService mallOrderStatusChangeApiService;
@Autowired
private PotentialCustomerApiService potentialCustomerApiService;
String eid = "ff8080815dacd3a2015dacd3ef5c0000";
String wxEid = "ca66a01b79474c40b3e7c7f93daf1a3b";
......@@ -60,4 +71,34 @@ public class InteractRecordMessageServiceTest {
String params ="{\"orderNumber\":\"6230408781099580\",\"toStatus\":2,\"fromStatus\":1,\"orderId\":\"c08691af8297480db3d25ef5ef19e863\",\"enterpriseId\":\"ff8080815dacd3a2015dacd3ef5c0000\",\"mqTraceId\":\"244806167-1-1680932807.425-/gic-thirdparty/wxmall_payment_result_notice\",\"memberId\":\"ff8080818147efc8018148d1759903c8\"}";
mallOrderStatusChangeApiService.mallOrderStatusChange(params);
}
@Test
public void dealGoodsRecord(){
String json = "{\"businessUUId\":\"IcB5ZMEvmzir1uvjgc6ohJFMmexraBak\",\"durationTime\":21990,\"enterpriseId\":\"ff8080815dacd3a2015dacd3ef5c0000\",\"eventType\":2,\"goodsId\":\"ff808081890a1b4201890a54b479001d\",\"lastAccessTime\":1692580759467,\"memberId\":\"ff80808189fd5ba6018a01ea3e070673\",\"refUrl\":\"pages/authorize/authorize\",\"unionId\":\"orXl9tyHOI4qP1QxwVcA7A3sB7zg\"}";
InteractRecordMessageBO interactRecordMessageBO = JSONObject.parseObject(json, InteractRecordMessageBO.class);
interactRecordMessageBO.setChannelSource(3);
interactRecordMessageBO.setClerkId("415b123576674913b365005b81037551");
interactRecordMessageService.dealRecord(interactRecordMessageBO);
}
@Test
public void queryPotentialCustomer() {
PotentialCustomerQDTO potentialCustomerQDTO = new PotentialCustomerQDTO();
potentialCustomerQDTO.setEnterpriseId("ff8080815dacd3a2015dacd3ef5c0000");
potentialCustomerQDTO.setClerkId("415b123576674913b365005b81037551");
potentialCustomerQDTO.setWxEnterpriseId("ca66a01b79474c40b3e7c7f93daf1a3b");
ServiceResponse<Page<PotentialCustomerDTO>> pageServiceResponse = potentialCustomerApiService.queryPotentialCustomer(potentialCustomerQDTO);
System.out.println(JSONObject.toJSONString(pageServiceResponse));
}
@Autowired
private MallOrderStatusChangeApiServiceImpl mallOrderStatusChangeApiServiceImpl;
@Test
public void orderTest() {
String json = "{\"orderNumber\":\"0230823781099580\",\"toStatus\":2,\"fromStatus\":1,\"orderId\":\"0a84ff17893046e49839fa3c3542bffa\",\"deliveryChannel\":1,\"eventTime\":1692794627733,\"enterpriseId\":\"8a809083802bbf5201804af08b0d0095\",\"businessType\":1,\"mqTraceId\":\"60157-1-1692794627.506-/gic-thirdparty/wxmall_payment_result_notice\",\"memberId\":\"8a808d838995476c0189b55f0ab807f7\"}";
mallOrderStatusChangeApiServiceImpl.sendDelayMessage(JSONObject.parseObject(json, OrderEventMqBO.class));
}
}
......@@ -3,6 +3,7 @@ package com.gic.haoban.manage.web.controller;
import com.alibaba.fastjson.JSON;
import com.gic.commons.webapi.reponse.RestResponse;
import com.gic.haoban.common.anno.IgnoreLogin;
import com.gic.haoban.manage.web.qo.logrecord.ErrorLogReportQO;
import com.gic.log.record.bean.WebErrorLogReport;
import com.gic.log.record.util.LogWebErrorLogReportUtil;
import org.apache.logging.log4j.LogManager;
......@@ -27,9 +28,13 @@ public class TabHaobanAppLogController {
@ResponseBody
@IgnoreLogin
@com.gic.web.common.ano.IgnoreLogin
public RestResponse<Boolean> insertLog(@RequestBody WebErrorLogReport qo) {
public RestResponse<Boolean> insertLog(@RequestBody ErrorLogReportQO qo) {
logger.info("插入日志的参数:{}", JSON.toJSONString(qo));
qo.setCreateTime(new Date());
if (qo.getType() != null && qo.getType() == 1) {
logger.info("TabHaobanAppLogController 日志内容:{}", JSON.toJSONString(qo));
return RestResponse.successResult();
}
LogWebErrorLogReportUtil.pushWebErrorLogReport(qo);
return RestResponse.successResult();
}
......
package com.gic.haoban.manage.web.qo.logrecord;
import com.gic.log.record.bean.WebErrorLogReport;
/**
* @Author MUSI
* @Date 2023/8/15 2:27 PM
* @Description
* @Version
**/
public class ErrorLogReportQO extends WebErrorLogReport {
private static final long serialVersionUID = -2657084366633675726L;
/**
* 0 获取null 正常记录
* 1 只记录log日志,不记录到ES
*/
private Integer type;
public Integer getType() {
return type;
}
public void setType(Integer type) {
this.type = type;
}
}
......@@ -243,6 +243,9 @@ public class WxStaffController extends WebBaseController {
vo.setClerkId(dto.getClerkId());
vo.setClerkType(dto.getClerkType());
vo.setClerkImg(dto.getImageUrl());
if (StringUtils.isBlank(vo.getClerkImg())) {
vo.setClerkImg(dto.getHeadImgUrl());
}
vo.setClerkName(dto.getClerkName());
StaffClerkRelationDTO related = bindCodeMap.get(dto.getClerkId());
if (related != null) {
......@@ -251,6 +254,8 @@ public class WxStaffController extends WebBaseController {
} else {
vo.setBindFlag(0);
}
long memberCount = customerApiService.countMember(enterpriseId, storeId, dto.getClerkId());
vo.setMemberCount(Convert.toInt(memberCount, 0));
resultList.add(vo);
}
Page<StoreClerkVO> page = new Page();
......@@ -1904,6 +1909,7 @@ public class WxStaffController extends WebBaseController {
}else {
vo.setStatus(2);
}
vo.setModuleVersion(dto.getModuleVersion());
return RestResponse.successResult(vo);
}
......
package com.gic.haoban.manage.web.controller.content;
import com.gic.commons.webapi.reponse.RestResponse;
import com.gic.enterprise.api.dto.EnterpriseDTO;
import com.gic.enterprise.api.service.AccountService;
import com.gic.enterprise.api.service.EnterpriseService;
import com.gic.thirdparty.cloudfile.CloudFileUtil;
import com.gic.thirdparty.cloudfile.enums.CloudFileBusinessOptEnum;
import com.gic.thirdparty.cloudfile.enums.CloudFileTypeEnum;
import com.gic.thirdparty.cloudfile.pojo.CloudFileInfo;
import org.apache.commons.lang3.StringUtils;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.multipart.MultipartHttpServletRequest;
import org.springframework.web.multipart.commons.CommonsMultipartFile;
import javax.servlet.http.HttpServletRequest;
import java.io.File;
/**
* 好办-通用
*/
@Controller
@RequestMapping("/content")
public class ContentImageController {
private static Logger logger = LogManager.getLogger(ContentImageController.class);
@Autowired
private AccountService accountService;
@Autowired
private EnterpriseService enterpriseService;
/**
* 获取桶名称
* @param fileType 文件后缀 mp4
* @return
*/
@RequestMapping("get-bucket")
@ResponseBody
public RestResponse<CloudFileInfo> getBucket(String fileType,String enterpriseId) {
//存储空间余额校验
if (!accountService.storageFeeCheck(enterpriseId)){
return RestResponse.failure("-1", "存储余额不足,暂不支持图片/视频上传,请充值");
}
EnterpriseDTO enterpriseDTO = enterpriseService.getEnterpriseById(enterpriseId);
CloudFileInfo cloudFileInfo = CloudFileUtil.getPreUploadFileInfo(fileType, CloudFileTypeEnum.VIDEO, enterpriseDTO.getFactoryCode(), CloudFileBusinessOptEnum.MATERIAL_CONTENT);
if (cloudFileInfo == null){
return RestResponse.failure("-1", "获取桶名称失败");
}
return RestResponse.successResult(cloudFileInfo);
}
/**
* 图片上传
*
* @param request
* @param videoPicFileId 上传视频首针图片时使用
* @param fileFlag = 1-普通图片 2-视频截取首针图片(需要与视频建立关联关系)
* @param bucketName 存储桶名称
* @return
*/
@RequestMapping("upload-image")
@ResponseBody
public RestResponse<CloudFileInfo> uploadCloudImage(HttpServletRequest request,
String enterpriseId,
Integer fileFlag,
String videoPicFileId,
String bucketName) {
//存储空间余额校验
if (!accountService.storageFeeCheck(enterpriseId)){
return RestResponse.failure("-1", "存储余额不足,暂不支持图片/视频上传,请充值");
}
if (fileFlag == null){
fileFlag = 1;
}
if (fileFlag == 2 && StringUtils.isBlank(videoPicFileId) || fileFlag ==2 && StringUtils.isBlank(bucketName)){
return RestResponse.failure("-1", "必传参数不能为空");
}
EnterpriseDTO enterpriseDTO = enterpriseService.getEnterpriseById(enterpriseId);
try {
MultipartHttpServletRequest multiRequest = (MultipartHttpServletRequest) request;
String fileName = multiRequest.getFileNames().next();
CommonsMultipartFile multiFile = (CommonsMultipartFile) multiRequest.getMultiFileMap().get(fileName).get(0);
long fileSize = multiFile.getSize();
Boolean compressFlag = false;
//大于10M压缩
if (fileSize / 1024 / 1024 > 10) {
compressFlag = true;
}
String originalFilename = multiFile.getOriginalFilename();
String fileType = originalFilename.substring(originalFilename.lastIndexOf(".")+1).toLowerCase();
logger.info("文件名称 originalFilename = {}", originalFilename);
logger.info("文件类型 fileType = {}", fileType);
if (!"JPG".equals(fileType) && !"jpg".equals(fileType) && !"PNG".equals(fileType) && !"png".equals(fileType) && !"JPEG".equals(fileType) && !"jpeg".equals(fileType)
&& !"blob".equals(fileType)) {//blob为了解决 前端截取的视频首针是blob,兼容
return RestResponse.failure("-1", "图片格式错误");
}
String prefix = ".jpg";
if (!"blob".equals(fileType)){
prefix = originalFilename.substring(originalFilename.lastIndexOf("."));
}else {
fileType = "png";
}
File file = File.createTempFile(fileName, prefix);
multiFile.transferTo(file);
if (fileFlag == 1) {
CloudFileInfo cloudFileInfo = CloudFileUtil.uploadFileNoRelation(file, fileType, CloudFileTypeEnum.IMAGE, enterpriseDTO.getFactoryCode(), CloudFileBusinessOptEnum.MATERIAL_CONTENT,compressFlag);
return RestResponse.successResult(cloudFileInfo);
}else if (fileFlag == 2){
// 若是前端截取的视频首针图片,则调用新接口
CloudFileUtil.uploadPreFileByFieldKey(file, bucketName, videoPicFileId);
}
return RestResponse.successResult();
} catch (Exception e) {
logger.warn("图片上传异常", e);
return RestResponse.failure("-1", "图片上传异常");
}
}
}
......@@ -6,21 +6,22 @@ import com.gic.api.base.commons.Page;
import com.gic.api.base.commons.ServiceResponse;
import com.gic.commons.webapi.reponse.RestResponse;
import com.gic.content.api.dto.column.ContentColumnListDTO;
import com.gic.content.api.dto.material.ContentMaterialFrontDTO;
import com.gic.content.api.dto.material.ContentMaterialDTO;
import com.gic.content.api.dto.material.ContentMaterialShareInfoDTO;
import com.gic.content.api.enums.ColumnEnum;
import com.gic.content.api.enums.MaterialSearchSceneEnum;
import com.gic.content.api.qdto.column.ContentColumnClerkQDTO;
import com.gic.content.api.qdto.material.ContentMaterialPageFrontQDTO;
import com.gic.content.api.qdto.material.ContentMaterialPageQDTO;
import com.gic.content.api.qdto.material.ContentMaterialShareQDTO;
import com.gic.content.api.service.ContentColumnApiService;
import com.gic.content.api.service.ContentMaterialApiService;
import com.gic.content.api.service.ContentMaterialShareApiService;
import com.gic.haoban.common.utils.EntityUtil;
import com.gic.haoban.manage.api.service.StaffApiService;
import com.gic.haoban.manage.web.controller.commission.CommissionManager;
import com.gic.haoban.manage.web.controller.content.adaptor.ClerkStoreAdaptor;
import com.gic.haoban.manage.web.controller.goods.GoodsInfoAdaptor;
import com.gic.haoban.manage.web.qo.content.ContentColumnClerkViewQO;
import com.gic.haoban.manage.web.qo.content.ContentMaterialListQO;
import com.gic.haoban.manage.web.qo.content.ContentMaterialQO;
import com.gic.haoban.manage.web.qo.content.ContentMaterialShareQO;
import com.gic.haoban.manage.web.vo.content.ContentColumnInfoVO;
......@@ -35,14 +36,11 @@ import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import java.util.*;
import java.util.stream.Collectors;
/**
......@@ -105,44 +103,45 @@ public class ContentMaterialController {
return RestResponse.failure("-777", "参数异常");
}
List<Integer> goodsShowStatus = goodsInfoAdaptor.getGoodsShowStatus(contentMaterialQO.getEnterpriseId());
ContentMaterialPageFrontQDTO contentMaterialPageFrontQDTO = new ContentMaterialPageFrontQDTO();
contentMaterialPageFrontQDTO.setEnterpriseId(contentMaterialQO.getEnterpriseId());
contentMaterialPageFrontQDTO.setKeyWord(contentMaterialQO.getSearch());
contentMaterialPageFrontQDTO.setContentColumnId(contentMaterialQO.getContentColumnId());
contentMaterialPageFrontQDTO.setMaterialType(contentMaterialQO.getMaterialType());
ContentMaterialPageQDTO pageQDTO = new ContentMaterialPageQDTO();
pageQDTO.setQueryScene(MaterialSearchSceneEnum.HAOBAN_MARKETING.value);
pageQDTO.setEnterpriseId(contentMaterialQO.getEnterpriseId());
pageQDTO.setSearch(contentMaterialQO.getSearch());
pageQDTO.setContentColumnId(contentMaterialQO.getContentColumnId());
pageQDTO.setMaterialType(contentMaterialQO.getMaterialType());
if (contentMaterialQO.getSortType() != null) {
if (contentMaterialQO.getSortType() == 2) {
contentMaterialPageFrontQDTO.setHotFlag(1);
pageQDTO.setHotFlag(1);
}
}
if (StringUtils.isBlank(contentMaterialQO.getStoreId())) {
// 区经 获取管辖的权限
List<String> storeIds = this.clerkStoreAdaptor.queryClerkStoreIds(contentMaterialQO.getClerkId(), contentMaterialQO.getWxEnterpriseId());
contentMaterialPageFrontQDTO.setStoreIdList(storeIds);
pageQDTO.setStoreIdList(storeIds);
} else {
contentMaterialPageFrontQDTO.setStoreIdList(Collections.singletonList(contentMaterialQO.getStoreId()));
pageQDTO.setStoreIdList(Collections.singletonList(contentMaterialQO.getStoreId()));
}
if (contentMaterialQO.getSearchType() != null && contentMaterialQO.getSearchType().equals(1)) {
if (StringUtils.isNotBlank(contentMaterialQO.getSearch())) {
// 搜索条件需要置为空
contentMaterialPageFrontQDTO.setKeyWord(null);
pageQDTO.setSearch(null);
List<String> goodsIds = goodsInfoAdaptor.queryGoodsIdWithSearch(contentMaterialQO.getEnterpriseId(), contentMaterialQO.getSearch());
if (CollectionUtils.isEmpty(goodsIds)) {
log.info("搜索商品不存在 {}", contentMaterialQO.getSearch());
return RestResponse.successResult(new Page<>());
}
contentMaterialPageFrontQDTO.setGoodsIdList(goodsIds);
pageQDTO.setGoodsIdList(goodsIds);
}
}
BasePageInfo pageInfo = new BasePageInfo();
pageInfo.setPageNum(contentMaterialQO.getPageNum());
pageInfo.setPageSize(contentMaterialQO.getPageSize());
ServiceResponse<Page<ContentMaterialFrontDTO>> serviceResponse = contentMaterialApiService.pageMaterialFront(contentMaterialPageFrontQDTO, pageInfo);
ServiceResponse<Page<ContentMaterialDTO>> serviceResponse = contentMaterialApiService.pageMaterial(pageQDTO, pageInfo);
if (!serviceResponse.isSuccess() || CollectionUtils.isEmpty(serviceResponse.getResult().getResult())) {
return RestResponse.successResult(new Page<>());
}
Page<ContentMaterialFrontDTO> responseResult = serviceResponse.getResult();
Page<ContentMaterialDTO> responseResult = serviceResponse.getResult();
Page<ContentMaterialInfoVO> result = new Page<>();
result.setTotalCount(responseResult.getTotalCount());
List<String> goodsIds = responseResult.getResult()
......@@ -168,7 +167,7 @@ public class ContentMaterialController {
* @param item
* @return
*/
private ContentMaterialInfoVO getContentMaterialInfoVO(List<Integer> goodsShowStatus, ContentMaterialFrontDTO item, Map<String, BigDecimal> commissionMap) {
private ContentMaterialInfoVO getContentMaterialInfoVO(List<Integer> goodsShowStatus, ContentMaterialDTO item, Map<String, BigDecimal> commissionMap) {
ContentMaterialInfoVO contentMaterialInfoVO = new ContentMaterialInfoVO();
BeanUtils.copyProperties(item, contentMaterialInfoVO);
if (CollectionUtils.isNotEmpty(item.getContentGoodsList())) {
......@@ -247,4 +246,19 @@ public class ContentMaterialController {
return RestResponse.successResult();
}
/**
* 素材数量查询
* @param search search
* @return
*/
@ResponseBody
@RequestMapping("/count-material")
public RestResponse<Long> countMaterial(@RequestBody ContentMaterialListQO search) {
ContentMaterialPageQDTO pageQDTO = EntityUtil.changeEntityByOrika(ContentMaterialPageQDTO.class, search);
ServiceResponse<Long> response = contentMaterialApiService.countMaterialBySearch(pageQDTO);
if (!response.isSuccess()) {
return RestResponse.failure(response.getCode(), response.getMessage());
}
return RestResponse.successResult(response.getResult());
}
}
......@@ -9,6 +9,7 @@ import com.gic.content.api.dto.material.ContentMaterialBaseDTO;
import com.gic.haoban.manage.api.dto.qdto.content.InteractRecordQDTO;
import com.gic.haoban.manage.api.enums.content.InteractRecordExtendInfoDTO;
import com.gic.haoban.manage.api.enums.content.InteractRecordInfoDTO;
import com.gic.haoban.manage.api.enums.content.ShareBizType;
import com.gic.haoban.manage.api.service.content.InteractRecordApiService;
import com.gic.haoban.manage.web.controller.content.adaptor.ContentMaterialAdaptor;
import com.gic.haoban.manage.web.qo.content.InteractRecordQO;
......@@ -59,6 +60,7 @@ public class InteractRecordController {
List<Long> materialIds = serviceResponse.getResult()
.getResult()
.stream()
.filter(item -> ShareBizType.MATERIAL.getCode().equals(item.getBizType()))
.map(item -> Long.parseLong(item.getBizId()))
.distinct()
.collect(Collectors.toList());
......@@ -74,17 +76,19 @@ public class InteractRecordController {
InteractRecordExtendInfoVO extendInfoVO = EntityUtil.changeEntityByJSON(InteractRecordExtendInfoVO.class, item.getExtendInfo());
interactRecordVO.setExtendInfo(extendInfoVO);
}
ContentMaterialBaseDTO materialBaseInfo = materialBaseMap.get(Long.parseLong(item.getBizId()));
if (materialBaseInfo != null) {
ContentMaterialInfoVO temp = new ContentMaterialInfoVO();
BeanUtils.copyProperties(materialBaseInfo, temp);
if (StringUtils.isNotBlank(materialBaseInfo.getMaterialThumbnailImageUrls())) {
temp.setMaterialThumbnailImageUrls(StrSpliter.split(materialBaseInfo.getMaterialThumbnailImageUrls(), ",", true, true));
if (ShareBizType.MATERIAL.getCode().equals(item.getBizType())) {
ContentMaterialBaseDTO materialBaseInfo = materialBaseMap.get(Long.parseLong(item.getBizId()));
if (materialBaseInfo != null) {
ContentMaterialInfoVO temp = new ContentMaterialInfoVO();
BeanUtils.copyProperties(materialBaseInfo, temp);
if (StringUtils.isNotBlank(materialBaseInfo.getMaterialThumbnailImageUrls())) {
temp.setMaterialThumbnailImageUrls(StrSpliter.split(materialBaseInfo.getMaterialThumbnailImageUrls(), ",", true, true));
}
if (StringUtils.isNotBlank(materialBaseInfo.getMaterialImageUrls())) {
temp.setMaterialImageUrls(StrSpliter.split(materialBaseInfo.getMaterialImageUrls(), ",", true, true));
}
interactRecordVO.setContentMaterialInfoVO(temp);
}
if (StringUtils.isNotBlank(materialBaseInfo.getMaterialImageUrls())) {
temp.setMaterialImageUrls(StrSpliter.split(materialBaseInfo.getMaterialImageUrls(), ",", true, true));
}
interactRecordVO.setContentMaterialInfoVO(temp);
}
return interactRecordVO;
})
......
......@@ -8,8 +8,11 @@ import com.gic.api.base.commons.ServiceResponse;
import com.gic.clerk.api.dto.ClerkDTO;
import com.gic.clerk.api.service.ClerkService;
import com.gic.commons.webapi.reponse.RestResponse;
import com.gic.content.api.dto.material.ContentMaterialDTO;
import com.gic.content.api.dto.material.ContentMaterialFrontDTO;
import com.gic.content.api.enums.MaterialSearchSceneEnum;
import com.gic.content.api.qdto.material.ContentMaterialPageFrontQDTO;
import com.gic.content.api.qdto.material.ContentMaterialPageQDTO;
import com.gic.content.api.service.ContentMaterialApiService;
import com.gic.enterprise.api.dto.StoreDTO;
import com.gic.enterprise.api.service.StoreService;
......@@ -71,7 +74,8 @@ public class MaterialDataStaticsController {
@RequestMapping(path = "/content/material/index/data")
public RestResponse<MaterialIndexDataVO> queryMaterialIndexData(@RequestBody ContentMaterialBaseQO contentMaterialBaseQO) {
ContentMaterialPageFrontQDTO search = new ContentMaterialPageFrontQDTO();
ContentMaterialPageQDTO search = new ContentMaterialPageQDTO();
search.setQueryScene(MaterialSearchSceneEnum.HAOBAN_MARKETING.value);
search.setEnterpriseId(contentMaterialBaseQO.getEnterpriseId());
search.setPublishBeginStartTime(DateUtil.beginOfDay(new Date()));
search.setPublishBeginEndTime(DateUtil.endOfDay(new Date()));
......@@ -88,7 +92,7 @@ public class MaterialDataStaticsController {
pageInfo.setPageNum(1);
pageInfo.setPageSize(1);
int totalMaterialNum = 0;
ServiceResponse<Page<ContentMaterialFrontDTO>> serviceResponse = this.contentMaterialApiService.pageMaterialFront(search, pageInfo);
ServiceResponse<Page<ContentMaterialDTO>> serviceResponse = this.contentMaterialApiService.pageMaterial(search, pageInfo);
if (serviceResponse.isSuccess() && serviceResponse.getResult() != null) {
totalMaterialNum = serviceResponse.getResult().getTotalCount();
}
......
......@@ -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()))
......@@ -89,33 +108,63 @@ public class PotentialCustomerController {
PotentialCustomerVO temp = new PotentialCustomerVO();
BeanUtils.copyProperties(item, temp);
temp.setPotentialCustomerId(item.getPotentialCustomerId());
ContentMaterialBaseDTO contentMaterialBaseDTO = materialInfoMap.get(Long.parseLong(item.getBizId()));
if (contentMaterialBaseDTO != null) {
ContentMaterialInfoVO contentMaterialInfoVO = new ContentMaterialInfoVO();
BeanUtils.copyProperties(contentMaterialBaseDTO, contentMaterialInfoVO);
if (StringUtils.isNotBlank(contentMaterialBaseDTO.getMaterialImageUrls())) {
String[] split = StringUtils.split(contentMaterialBaseDTO.getMaterialImageUrls(), ",");
List<String> imageUrls = Arrays.stream(split).collect(Collectors.toList());
contentMaterialInfoVO.setMaterialImageUrls(imageUrls);
if (ShareBizType.MATERIAL.getCode().equals(item.getBizType())) {
ContentMaterialBaseDTO contentMaterialBaseDTO = materialInfoMap.get(Long.parseLong(item.getBizId()));
if (contentMaterialBaseDTO != null) {
ContentMaterialInfoVO contentMaterialInfoVO = new ContentMaterialInfoVO();
BeanUtils.copyProperties(contentMaterialBaseDTO, contentMaterialInfoVO);
if (StringUtils.isNotBlank(contentMaterialBaseDTO.getMaterialImageUrls())) {
String[] split = StringUtils.split(contentMaterialBaseDTO.getMaterialImageUrls(), ",");
List<String> imageUrls = Arrays.stream(split).collect(Collectors.toList());
contentMaterialInfoVO.setMaterialImageUrls(imageUrls);
}
if (StringUtils.isNotBlank(contentMaterialBaseDTO.getMaterialThumbnailImageUrls())) {
String[] split = StringUtils.split(contentMaterialBaseDTO.getMaterialThumbnailImageUrls(), ",");
List<String> imageUrls = Arrays.stream(split).collect(Collectors.toList());
contentMaterialInfoVO.setMaterialThumbnailImageUrls(imageUrls);
}
temp.setContentMaterialInfoVO(contentMaterialInfoVO);
}
if (StringUtils.isNotBlank(contentMaterialBaseDTO.getMaterialThumbnailImageUrls())) {
String[] split = StringUtils.split(contentMaterialBaseDTO.getMaterialThumbnailImageUrls(), ",");
List<String> imageUrls = Arrays.stream(split).collect(Collectors.toList());
contentMaterialInfoVO.setMaterialThumbnailImageUrls(imageUrls);
}
temp.setContentMaterialInfoVO(contentMaterialInfoVO);
Integer visitNum = memberVisitMap.get(item.getMemberId());
temp.setVisitNum(Optional.ofNullable(visitNum).orElse(0));
}
Integer visitNum = memberVisitMap.get(item.getMemberId());
temp.setVisitNum(Optional.ofNullable(visitNum).orElse(0));
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);
}
}
......
package com.gic.haoban.manage.web.controller.content.adaptor;
import com.gic.haoban.manage.api.dto.StaffClerkRelationDTO;
import com.gic.haoban.manage.api.dto.StaffDTO;
import com.gic.haoban.manage.api.dto.role.StoreRoleDTO;
import com.gic.haoban.manage.api.service.StaffApiService;
import com.gic.haoban.manage.api.service.StaffClerkRelationApiService;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
......@@ -23,6 +26,8 @@ public class ClerkStoreAdaptor {
@Autowired
private StaffApiService staffApiService;
@Autowired
private StaffClerkRelationApiService staffClerkRelationApiService;
/**
* 查询区经角色下管辖的门店权限
......@@ -59,4 +64,13 @@ public class ClerkStoreAdaptor {
return storeRole.getStoreCount();
}
public StaffDTO queryStaff(String clerkId) {
StaffClerkRelationDTO clerkRelationDTO = staffClerkRelationApiService.getByClerkId(clerkId);
if (clerkRelationDTO != null) {
StaffDTO staffDTO = staffApiService.selectById(clerkRelationDTO.getStaffId());
return staffDTO;
}
return null;
}
}
......@@ -35,6 +35,9 @@ public class ContentMaterialAdaptor {
* @return
*/
public Map<Long, ContentMaterialBaseDTO> queryMaterialInfoMap(String enterpriseId, List<Long> materialIds) {
if (CollectionUtils.isEmpty(materialIds)) {
return Collections.emptyMap();
}
ServiceResponse<List<ContentMaterialBaseDTO>> serviceResponse = contentMaterialApiService.listMaterialIdByMaterialIdList(enterpriseId, materialIds, null);
if (!serviceResponse.isSuccess()) {
return Collections.emptyMap();
......
......@@ -5,9 +5,9 @@ import cn.hutool.core.date.DateTime;
import cn.hutool.core.date.DateUtil;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.gic.api.base.commons.BasePageInfo;
import com.gic.api.base.commons.Page;
import com.gic.commons.util.DataApiUtils;
import com.gic.commons.webapi.reponse.RestResponse;
import com.gic.enterprise.api.dto.EnterpriseDTO;
import com.gic.enterprise.api.service.EnterpriseService;
import com.gic.haoban.manage.api.enums.content.MaterialReportType;
......@@ -15,7 +15,7 @@ import com.gic.haoban.manage.web.qo.content.statistics.MaterialAnalyzeDataQO;
import com.gic.haoban.manage.web.qo.content.statistics.MaterialReportQO;
import com.gic.haoban.manage.web.qo.content.statistics.MaterialStoreAnalyzeDataQO;
import com.gic.haoban.manage.web.qo.content.statistics.MaterialStoreReportQO;
import com.gic.haoban.manage.web.utils.target.DataTargetHttpUtils;
import com.gic.haoban.manage.web.vo.content.creative.ContentMaterialConvsVO;
import com.gic.haoban.manage.web.vo.content.statistics.MaterialAreaUsedDataVO;
import com.gic.haoban.manage.web.vo.content.statistics.MaterialClerkUsedDataVO;
import com.gic.haoban.manage.web.vo.content.statistics.MaterialDataOverviewVO;
......@@ -95,6 +95,17 @@ public class MaterialDataAdaptor {
*/
private static final String MEMBER_RECENTLY_30_DAY_VISIT = "data_matl_haoban_user_30day_stats_real";
/**
* 创作中心素材审核转化数据
*/
private static final String MATERIAL_CREATIVE_CONVS_DATA = "data_cms_matl_examine_convs_list";
/**
* 创作中心转化数据汇总
*/
private static final String MATERIAL_CREATIVE_CONVS_TOTAL_DATA = "data_cms_matl_examine_convs_total";
@Autowired
private EnterpriseService enterpriseService;
......@@ -411,20 +422,103 @@ public class MaterialDataAdaptor {
*/
public Map<String, Integer> queryMemberVisitMap(String enterpriseId, String storeId, String clerkId, List<String> memberIds) {
try {
Map<String, Object> inlineParams = new HashMap<>();
if (StringUtils.isNotBlank(clerkId)) {
inlineParams.put("clerkId", clerkId);
}
inlineParams.put("enterpriseId", enterpriseId);
inlineParams.put("customerId", StringUtils.join(memberIds, ","));
Map<String, Object> result = DataApiUtils.http(JSON.toJSONString(inlineParams), MEMBER_RECENTLY_30_DAY_VISIT);
List<MemberVisitMaterialBO> memberVisitMaterialBos = DataApiUtils.parseDataList(result, MemberVisitMaterialBO.class);
if (CollectionUtils.isEmpty(memberVisitMaterialBos)) {
return Collections.emptyMap();
}
return memberVisitMaterialBos
.stream()
.collect(Collectors.toMap(MemberVisitMaterialBO::getCustomerId, item -> Optional.ofNullable(item.getMatlNum30Day())
.map(Integer::new).orElse(0), (v1, v2) -> v1));
}catch (Exception ex){
log.info("查询会员素材异常", ex);
}
return Collections.emptyMap();
}
/**
* 创作中心获取素材转化数
* @param enterpriseId 企业id
* @param materialIdList 素材id
* @param pageInfo 分页
* @return
*/
public Page<ContentMaterialConvsVO> queryCreativeConvs(String enterpriseId, List<Long> materialIdList, BasePageInfo pageInfo) {
Map<String, Object> inlineParams = new HashMap<>();
if (StringUtils.isNotBlank(clerkId)) {
inlineParams.put("clerkId", clerkId);
if (CollectionUtils.isEmpty(materialIdList)) {
return new Page();
}
inlineParams.put("enterpriseId", enterpriseId);
inlineParams.put("contentMaterialId", StringUtils.join(materialIdList, ","));
inlineParams.put("pageNum", pageInfo.getPageNum());
inlineParams.put("pageSize", pageInfo.getPageSize());
Map<String, Object> result = null;
try {
result = DataApiUtils.http(JSON.toJSONString(inlineParams), MATERIAL_CREATIVE_CONVS_DATA);
} catch (Exception e) {
log.error("创作中心获取素材转化数异常",e);
return new Page();
}
Page<ContentMaterialConvsVO> page = DataApiUtils.getPageData(result, ContentMaterialConvsVO.class);
return page;
}
/**
* 创作中心获取素材转化数组装成map
* @param enterpriseId 企业id
* @param materialIdList 素材id
* @param pageInfo 分页
* @return
*/
public Map<Long,ContentMaterialConvsVO> queryCreativeConvsMap(String enterpriseId, List<Long> materialIdList, BasePageInfo pageInfo) {
if (pageInfo == null) {
pageInfo = new BasePageInfo();
pageInfo.setPageNum(1);
pageInfo.setPageSize(1);
}
Page<ContentMaterialConvsVO> page = queryCreativeConvs(enterpriseId, materialIdList, pageInfo);
if (page != null && CollectionUtils.isNotEmpty(page.getResult())) {
List<ContentMaterialConvsVO> result = page.getResult();
Map<Long, ContentMaterialConvsVO> map = result.stream().collect(Collectors.toMap(ContentMaterialConvsVO::getContentMaterialId, t -> t));
return map;
}
return new HashMap<>();
}
/**
* 创作中心获取素材转化数总和(30天)
* @param enterpriseId 企业id
* @param materialIdList 素材id列表
* @return
*/
public ContentMaterialConvsVO queryCreativeConvsOverview(String enterpriseId, List<Long> materialIdList) {
Map<String, Object> inlineParams = new HashMap<>();
if (CollectionUtils.isEmpty(materialIdList)) {
return new ContentMaterialConvsVO();
}
inlineParams.put("enterpriseId", enterpriseId);
inlineParams.put("customerId", StringUtils.join(memberIds, ","));
Map<String, Object> result = DataApiUtils.http(JSON.toJSONString(inlineParams), MEMBER_RECENTLY_30_DAY_VISIT);
List<MemberVisitMaterialBO> memberVisitMaterialBos = DataApiUtils.parseDataList(result, MemberVisitMaterialBO.class);
if (CollectionUtils.isEmpty(memberVisitMaterialBos)) {
return Collections.emptyMap();
inlineParams.put("contentMaterialId", StringUtils.join(materialIdList, ","));
Map<String, Object> result = null;
try {
result = DataApiUtils.http(JSON.toJSONString(inlineParams), MATERIAL_CREATIVE_CONVS_TOTAL_DATA);
} catch (Exception e) {
log.error("创作中心获取素材转化数总和异常",e);
return new ContentMaterialConvsVO();
}
List<ContentMaterialConvsVO> list = DataApiUtils.parseDataList(result, ContentMaterialConvsVO.class);
if (CollectionUtils.isNotEmpty(list)) {
return list.get(0);
}
return memberVisitMaterialBos
.stream()
.collect(Collectors.toMap(MemberVisitMaterialBO::getCustomerId, item -> Optional.ofNullable(item.getMatlNum30Day())
.map(Integer::new).orElse(0), (v1, v2) -> v1));
return new ContentMaterialConvsVO();
}
}
......@@ -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()));
}
}
package com.gic.haoban.manage.web.qo.content;
public class ContentAuditMaterialDataQO {
/**
* 企业id
*/
private String enterpriseId;
/**
* 门店id
*/
private String storeId;
/**
* 导购id
*/
private String clerkId;
/**
* 是否仅查创建数
*/
private Integer createFlag;
public String getEnterpriseId() {
return enterpriseId;
}
public void setEnterpriseId(String enterpriseId) {
this.enterpriseId = enterpriseId;
}
public String getStoreId() {
return storeId;
}
public void setStoreId(String storeId) {
this.storeId = storeId;
}
public String getClerkId() {
return clerkId;
}
public void setClerkId(String clerkId) {
this.clerkId = clerkId;
}
public Integer getCreateFlag() {
return createFlag;
}
public void setCreateFlag(Integer createFlag) {
this.createFlag = createFlag;
}
}
package com.gic.haoban.manage.web.qo.content;
import com.gic.commons.web.qo.PageQo;
public class ContentAuditMaterialQO extends PageQo {
/**
* 企业id
*/
private String enterpriseId;
/**
* 门店id
*/
private String storeId;
/**
* 导购id
*/
private String clerkId;
/**
* 是否有转化 1是0否
*/
private Integer convsFlag;
public String getEnterpriseId() {
return enterpriseId;
}
public void setEnterpriseId(String enterpriseId) {
this.enterpriseId = enterpriseId;
}
public String getStoreId() {
return storeId;
}
public void setStoreId(String storeId) {
this.storeId = storeId;
}
public String getClerkId() {
return clerkId;
}
public void setClerkId(String clerkId) {
this.clerkId = clerkId;
}
public Integer getConvsFlag() {
return convsFlag;
}
public void setConvsFlag(Integer convsFlag) {
this.convsFlag = convsFlag;
}
}
package com.gic.haoban.manage.web.qo.content;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import com.gic.commons.web.qo.PageQo;
import com.gic.content.api.enums.MaterialSearchSceneEnum;
import java.util.List;
@JsonSerialize(using= ToStringSerializer.class)
public class ContentMaterialListQO extends PageQo {
/**
* 查询场景 1:gic后台营销素材 2:好办营销素材 3:gic后台社区素材 4:gic后台审核素材 5:好办审核素材 6:小程序社区素材
* @see MaterialSearchSceneEnum
*/
private Integer queryScene;
/**
* 栏目id
*/
private Long contentColumnId;
/**
* 搜索名称
*/
private String search;
/**
* 商品搜索
*/
private String goodsSearch;
/**
* 素材搜索
*/
private String materialSearch;
/**
* 素材类型1图文2纯文字3纯图片4视频
*/
private Integer materialType;
/**
* 企业ID
*/
private String enterpriseId;
/**
* 会员id
*/
private String memberId;
/**
* 排序字段
* createTime:创建时间
* publishBeginTime:发布时间
* topTime:置顶时间
* @see com.gic.content.api.enums.MaterialOrderFieldEnum
*/
private String orderField;
/**
* 排序 desc降序 asc升序
*/
private String order;
/**
* 商品id
*/
private List<String> goodsIdList;
public Integer getQueryScene() {
return queryScene;
}
public void setQueryScene(Integer queryScene) {
this.queryScene = queryScene;
}
public Long getContentColumnId() {
return contentColumnId;
}
public void setContentColumnId(Long contentColumnId) {
this.contentColumnId = contentColumnId;
}
public String getSearch() {
return search;
}
public void setSearch(String search) {
this.search = search;
}
public String getGoodsSearch() {
return goodsSearch;
}
public void setGoodsSearch(String goodsSearch) {
this.goodsSearch = goodsSearch;
}
public String getMaterialSearch() {
return materialSearch;
}
public void setMaterialSearch(String materialSearch) {
this.materialSearch = materialSearch;
}
public Integer getMaterialType() {
return materialType;
}
public void setMaterialType(Integer materialType) {
this.materialType = materialType;
}
public String getEnterpriseId() {
return enterpriseId;
}
public void setEnterpriseId(String enterpriseId) {
this.enterpriseId = enterpriseId;
}
public String getMemberId() {
return memberId;
}
public void setMemberId(String memberId) {
this.memberId = memberId;
}
public String getOrderField() {
return orderField;
}
public void setOrderField(String orderField) {
this.orderField = orderField;
}
public String getOrder() {
return order;
}
public void setOrder(String order) {
this.order = order;
}
public List<String> getGoodsIdList() {
return goodsIdList;
}
public void setGoodsIdList(List<String> goodsIdList) {
this.goodsIdList = goodsIdList;
}
}
package com.gic.haoban.manage.web.qo.content;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import org.hibernate.validator.constraints.Length;
import org.hibernate.validator.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import java.util.Date;
import java.util.List;
@JsonSerialize(using= ToStringSerializer.class)
public class ContentMaterialSaveQO {
/**
* 素材id
*/
private Long contentMaterialId;
/**
* 门店id
*/
private String storeId;
/**
* 导购id
*/
private String clerkId;
/**
* 素材名称
*/
private String materialTitle;
/**
* 素材类型1图文4视频
*/
@NotNull(message = "素材类型不能为空")
private Integer materialType;
/**
* 上架状态0未上架1已上架(默认1)
*/
private Integer shelfStatus = 1;
/**
* 素材内容
*/
private String materialContent;
/**
* 素材图片url列表
*/
private String materialImageUrls;
/**
* 素材压缩后的图片url列表
*/
private String materialThumbnailImageUrls;
/**
* 素材图片信息列表{width:px,height:px,size:Bytes}
*/
private String materialImageInfos;
/**
* 素材视频url
*/
private String materialVideoUrl;
/**
* 视频信息{width:px,height:px,size:Bytes}
*/
private String materialVideoInfo;
/**
* 素材视频封面url
*/
private String materialVideoImageUrl;
/**
* 视频封面信息{width:px,height:px,size:Bytes}
*/
private String materialVideoImageInfo;
/**
* 素材视频第一帧url
*/
private String materialVideoFirstImageUrl;
/**
* 视频第一帧信息{width:px,height:px,size:Bytes}
*/
private String materialVideoFirstImageInfo;
/**
* 视频时长
*/
private Integer duration;
/**
* 企业ID
*/
private String enterpriseId;
/**
* 企微id
*/
private String wxEnterpriseId;
/**
* 关联商品id列表
*/
private List<String> contentGoodsIdList;
public Long getContentMaterialId() {
return contentMaterialId;
}
public void setContentMaterialId(Long contentMaterialId) {
this.contentMaterialId = contentMaterialId;
}
public String getStoreId() {
return storeId;
}
public void setStoreId(String storeId) {
this.storeId = storeId;
}
public String getClerkId() {
return clerkId;
}
public void setClerkId(String clerkId) {
this.clerkId = clerkId;
}
public String getMaterialTitle() {
return materialTitle;
}
public void setMaterialTitle(String materialTitle) {
this.materialTitle = materialTitle;
}
public Integer getMaterialType() {
return materialType;
}
public void setMaterialType(Integer materialType) {
this.materialType = materialType;
}
public Integer getShelfStatus() {
return shelfStatus;
}
public void setShelfStatus(Integer shelfStatus) {
this.shelfStatus = shelfStatus;
}
public String getMaterialContent() {
return materialContent;
}
public void setMaterialContent(String materialContent) {
this.materialContent = materialContent;
}
public String getMaterialImageUrls() {
return materialImageUrls;
}
public void setMaterialImageUrls(String materialImageUrls) {
this.materialImageUrls = materialImageUrls;
}
public String getMaterialThumbnailImageUrls() {
return materialThumbnailImageUrls;
}
public void setMaterialThumbnailImageUrls(String materialThumbnailImageUrls) {
this.materialThumbnailImageUrls = materialThumbnailImageUrls;
}
public String getMaterialImageInfos() {
return materialImageInfos;
}
public void setMaterialImageInfos(String materialImageInfos) {
this.materialImageInfos = materialImageInfos;
}
public String getMaterialVideoUrl() {
return materialVideoUrl;
}
public void setMaterialVideoUrl(String materialVideoUrl) {
this.materialVideoUrl = materialVideoUrl;
}
public String getMaterialVideoInfo() {
return materialVideoInfo;
}
public void setMaterialVideoInfo(String materialVideoInfo) {
this.materialVideoInfo = materialVideoInfo;
}
public String getMaterialVideoImageUrl() {
return materialVideoImageUrl;
}
public void setMaterialVideoImageUrl(String materialVideoImageUrl) {
this.materialVideoImageUrl = materialVideoImageUrl;
}
public String getMaterialVideoImageInfo() {
return materialVideoImageInfo;
}
public void setMaterialVideoImageInfo(String materialVideoImageInfo) {
this.materialVideoImageInfo = materialVideoImageInfo;
}
public String getMaterialVideoFirstImageUrl() {
return materialVideoFirstImageUrl;
}
public void setMaterialVideoFirstImageUrl(String materialVideoFirstImageUrl) {
this.materialVideoFirstImageUrl = materialVideoFirstImageUrl;
}
public String getMaterialVideoFirstImageInfo() {
return materialVideoFirstImageInfo;
}
public void setMaterialVideoFirstImageInfo(String materialVideoFirstImageInfo) {
this.materialVideoFirstImageInfo = materialVideoFirstImageInfo;
}
public Integer getDuration() {
return duration;
}
public void setDuration(Integer duration) {
this.duration = duration;
}
public String getEnterpriseId() {
return enterpriseId;
}
public void setEnterpriseId(String enterpriseId) {
this.enterpriseId = enterpriseId;
}
public String getWxEnterpriseId() {
return wxEnterpriseId;
}
public void setWxEnterpriseId(String wxEnterpriseId) {
this.wxEnterpriseId = wxEnterpriseId;
}
public List<String> getContentGoodsIdList() {
return contentGoodsIdList;
}
public void setContentGoodsIdList(List<String> contentGoodsIdList) {
this.contentGoodsIdList = contentGoodsIdList;
}
}
......@@ -12,6 +12,11 @@ public class RightVO implements Serializable{
// 0未购买 1正常 2已过期
private int status ;
/**
* 版本 1基础版2高级版
*/
private Integer moduleVersion;
public int getStatus() {
return status;
}
......@@ -19,4 +24,12 @@ public class RightVO implements Serializable{
public void setStatus(int status) {
this.status = status;
}
public Integer getModuleVersion() {
return moduleVersion;
}
public void setModuleVersion(Integer moduleVersion) {
this.moduleVersion = moduleVersion;
}
}
......@@ -18,6 +18,8 @@ public class StoreClerkVO implements Serializable {
private String clerkImg;
private String clerkName;
private Integer memberCount;
public String getClerkName() {
return clerkName;
}
......@@ -60,7 +62,12 @@ public class StoreClerkVO implements Serializable {
public void setBindFlag(int bindFlag) {
this.bindFlag = bindFlag;
}
public Integer getMemberCount() {
return memberCount;
}
public void setMemberCount(Integer memberCount) {
this.memberCount = memberCount;
}
}
......@@ -53,21 +53,37 @@ public class ContentMaterialInfoVO implements Serializable {
private List<String> materialThumbnailImageUrls;
/**
* 素材视频链接
* 素材图片信息列表{width:px,height:px,size:Bytes}
*/
private String materialImageInfos;
/**
* 素材视频url
*/
private String materialVideoUrl;
/**
* 素材视频封面链接
* 视频信息{width:px,height:px,size:Bytes}
*/
private String materialVideoInfo;
/**
* 素材视频封面url
*/
private String materialVideoImageUrl;
/**
* 视频封面信息{width:px,height:px,size:Bytes}
*/
private String materialVideoImageInfo;
/**
* 素材视频第一帧url
*/
private String materialVideoFirstImageUrl;
/**
* 视频第一帧信息{width:px,height:px,size:Bytes}
*/
private String materialVideoFirstImageInfo;
/**
* 分享次数
*/
private Long shareCount;
......@@ -241,4 +257,36 @@ public class ContentMaterialInfoVO implements Serializable {
public void setSourceType(Integer sourceType) {
this.sourceType = sourceType;
}
public String getMaterialImageInfos() {
return materialImageInfos;
}
public void setMaterialImageInfos(String materialImageInfos) {
this.materialImageInfos = materialImageInfos;
}
public String getMaterialVideoInfo() {
return materialVideoInfo;
}
public void setMaterialVideoInfo(String materialVideoInfo) {
this.materialVideoInfo = materialVideoInfo;
}
public String getMaterialVideoImageInfo() {
return materialVideoImageInfo;
}
public void setMaterialVideoImageInfo(String materialVideoImageInfo) {
this.materialVideoImageInfo = materialVideoImageInfo;
}
public String getMaterialVideoFirstImageInfo() {
return materialVideoFirstImageInfo;
}
public void setMaterialVideoFirstImageInfo(String materialVideoFirstImageInfo) {
this.materialVideoFirstImageInfo = materialVideoFirstImageInfo;
}
}
......@@ -19,12 +19,12 @@ public class InteractRecordExtendInfoVO implements Serializable {
private static final long serialVersionUID = 799914036029100258L;
/**
* 素材关联的商品信息商品信息
* 商品信息
*/
private List<ExtendGoodsInfo> extendGoodsInfos;
/**
* 素材关联的订单信息
* 订单信息
*/
private List<ExtendOrderInfo> extendOrderInfos;
......
package com.gic.haoban.manage.web.vo.content;
import com.gic.haoban.manage.api.enums.content.MaterialInteractRecordEventType;
import lombok.Data;
import java.io.Serializable;
import java.util.Date;
import java.util.List;
/**
* @Author MUSI
......@@ -49,12 +49,19 @@ public class InteractRecordVO implements Serializable {
/**
* 记录事件类型
* 1浏览素材;2 查看商品; 3 购买商品
* 1浏览素材;2 查看商品; 3 购买商品; 4 加入购物车
* 通过此类型区分 弹窗提示
* @see MaterialInteractRecordEventType
*/
private Integer eventType;
/**
* 业务类型
* @see com.gic.haoban.manage.api.enums.content.ShareBizType
*/
private Integer bizType;
/**
* 浏览的商品数量
*/
private Integer visitGoodsNum;
......
package com.gic.haoban.manage.web.vo.content.creative;
import java.io.Serializable;
import java.util.Date;
public class ContentAuditorVO implements Serializable {
/**
* 审核人id
*/
private String auditorId;
/**
* 审核人名称
*/
private String auditorName;
/**
* 审核时间
*/
private Date auditorTime;
/**
* 审核备注
*/
private String remark;
public String getAuditorId() {
return auditorId;
}
public void setAuditorId(String auditorId) {
this.auditorId = auditorId;
}
public String getAuditorName() {
return auditorName;
}
public void setAuditorName(String auditorName) {
this.auditorName = auditorName;
}
public Date getAuditorTime() {
return auditorTime;
}
public void setAuditorTime(Date auditorTime) {
this.auditorTime = auditorTime;
}
public String getRemark() {
return remark;
}
public void setRemark(String remark) {
this.remark = remark;
}
}
package com.gic.haoban.manage.web.vo.content.creative;
import java.math.BigDecimal;
/**
* 内容分类表(TabContentCategory)表实体类
*
* @author makejava
* @since 2022-10-27 17:20:20
*/
@SuppressWarnings("serial")
public class ContentGoodsVO {
/**
* 商品id
*/
private String goodsId;
/**
* 商品Code
*/
private String goodsCode;
/**
* 商品名称
*/
private String goodsName;
/**
* 商品主图
*/
private String goodsImageUrl;
/**
* spu库存
*/
private Integer spuStock;
/**
* 商品状态
* @see com.gic.store.goods.enums.GoodsStatusEnum
*/
private Integer status;
/**
* 是否已完善1是0否
*/
private Integer isComplete;
/**
* 吊牌价 / 划线价
*/
private BigDecimal tagPrice;
/**
* 最小sku价格/一口价
*/
private BigDecimal minPrice;
public String getGoodsId() {
return goodsId;
}
public void setGoodsId(String goodsId) {
this.goodsId = goodsId;
}
public String getGoodsCode() {
return goodsCode;
}
public void setGoodsCode(String goodsCode) {
this.goodsCode = goodsCode;
}
public String getGoodsName() {
return goodsName;
}
public void setGoodsName(String goodsName) {
this.goodsName = goodsName;
}
public String getGoodsImageUrl() {
return goodsImageUrl;
}
public void setGoodsImageUrl(String goodsImageUrl) {
this.goodsImageUrl = goodsImageUrl;
}
public Integer getSpuStock() {
return spuStock;
}
public void setSpuStock(Integer spuStock) {
this.spuStock = spuStock;
}
public Integer getStatus() {
return status;
}
public void setStatus(Integer status) {
this.status = status;
}
public Integer getIsComplete() {
return isComplete;
}
public void setIsComplete(Integer isComplete) {
this.isComplete = isComplete;
}
public BigDecimal getTagPrice() {
return tagPrice;
}
public void setTagPrice(BigDecimal tagPrice) {
this.tagPrice = tagPrice;
}
public BigDecimal getMinPrice() {
return minPrice;
}
public void setMinPrice(BigDecimal minPrice) {
this.minPrice = minPrice;
}
}
package com.gic.haoban.manage.web.vo.content.creative;
import java.io.Serializable;
public class ContentMaterialConvsVO implements Serializable {
/**
* 素材id
*/
private Long contentMaterialId;
/**
* 转化人数
*/
private Integer convsNum = 0;
/**
* 转化金额
*/
private Double convsAmt = 0.0;
public Long getContentMaterialId() {
return contentMaterialId;
}
public void setContentMaterialId(Long contentMaterialId) {
this.contentMaterialId = contentMaterialId;
}
public Integer getConvsNum() {
return convsNum;
}
public void setConvsNum(Integer convsNum) {
this.convsNum = convsNum;
}
public Double getConvsAmt() {
return convsAmt;
}
public void setConvsAmt(Double convsAmt) {
this.convsAmt = convsAmt;
}
public void setConvs(ContentMaterialConvsVO convs) {
if (convs == null) {
this.setConvsNum(0);
this.setConvsAmt(0.0);
return;
}
this.setConvsNum(convs.getConvsNum());
this.setConvsAmt(convs.getConvsAmt());
}
}
package com.gic.haoban.manage.web.vo.content.creative;
import java.io.Serializable;
import java.util.Date;
public class ContentMaterialDataVO extends ContentMaterialConvsVO implements Serializable {
/**
* 创建数
*/
private Long createCount;
/**
* 待审核数
*/
private Long auditCount;
public Long getCreateCount() {
return createCount;
}
public void setCreateCount(Long createCount) {
this.createCount = createCount;
}
public Long getAuditCount() {
return auditCount;
}
public void setAuditCount(Long auditCount) {
this.auditCount = auditCount;
}
}
package com.gic.haoban.manage.web.vo.content.creative;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import java.util.Date;
import java.util.List;
public class ContentMaterialVO extends ContentMaterialConvsVO{
/**
* 素材id
*/
@JsonSerialize(using = ToStringSerializer.class)
private Long contentMaterialId;
/**
* 素材用途0无(未审核)1营销2社区
*/
private Integer materialPurpose;
/**
* 素材名称
*/
private String materialTitle;
/**
* 素材类型1图文4视频
*/
private Integer materialType;
/**
* 1企业/品牌方2导购
*/
private Integer materialSource;
/**
* 上架状态0未上架1已上架
*/
private Integer shelfStatus;
/**
* 素材内容
*/
private String materialContent;
/**
* 素材图片url列表
*/
private String materialImageUrls;
/**
* 素材压缩后的图片url列表
*/
private String materialThumbnailImageUrls;
/**
* 素材图片信息列表{width:px,height:px,size:Bytes}
*/
private String materialImageInfos;
/**
* 素材视频url
*/
private String materialVideoUrl;
/**
* 视频信息{width:px,height:px,size:Bytes}
*/
private String materialVideoInfo;
/**
* 素材视频封面url
*/
private String materialVideoImageUrl;
/**
* 视频封面信息{width:px,height:px,size:Bytes}
*/
private String materialVideoImageInfo;
/**
* 素材视频第一帧url
*/
private String materialVideoFirstImageUrl;
/**
* 视频第一帧信息{width:px,height:px,size:Bytes}
*/
private String materialVideoFirstImageInfo;
/**
* 视频时长
*/
private Integer duration;
/**
* 企业id
*/
private String enterpriseId;
/**
* 创建时间
*/
private Date createTime;
/**
* 更新时间
*/
private Date updateTime;
/**
* 关联商品列表
*/
private List<ContentGoodsVO> contentGoodsList;
/**
* 审核状态0待审核1未通过2已通过
*/
private Integer auditStatus;
/**
* 审核信息
*/
private ContentAuditorVO auditor;
public Long getContentMaterialId() {
return contentMaterialId;
}
public void setContentMaterialId(Long contentMaterialId) {
this.contentMaterialId = contentMaterialId;
}
public Integer getMaterialPurpose() {
return materialPurpose;
}
public void setMaterialPurpose(Integer materialPurpose) {
this.materialPurpose = materialPurpose;
}
public String getMaterialTitle() {
return materialTitle;
}
public void setMaterialTitle(String materialTitle) {
this.materialTitle = materialTitle;
}
public Integer getMaterialType() {
return materialType;
}
public void setMaterialType(Integer materialType) {
this.materialType = materialType;
}
public Integer getMaterialSource() {
return materialSource;
}
public void setMaterialSource(Integer materialSource) {
this.materialSource = materialSource;
}
public Integer getShelfStatus() {
return shelfStatus;
}
public void setShelfStatus(Integer shelfStatus) {
this.shelfStatus = shelfStatus;
}
public String getMaterialContent() {
return materialContent;
}
public void setMaterialContent(String materialContent) {
this.materialContent = materialContent;
}
public String getMaterialImageUrls() {
return materialImageUrls;
}
public void setMaterialImageUrls(String materialImageUrls) {
this.materialImageUrls = materialImageUrls;
}
public String getMaterialThumbnailImageUrls() {
return materialThumbnailImageUrls;
}
public void setMaterialThumbnailImageUrls(String materialThumbnailImageUrls) {
this.materialThumbnailImageUrls = materialThumbnailImageUrls;
}
public String getMaterialImageInfos() {
return materialImageInfos;
}
public void setMaterialImageInfos(String materialImageInfos) {
this.materialImageInfos = materialImageInfos;
}
public String getMaterialVideoUrl() {
return materialVideoUrl;
}
public void setMaterialVideoUrl(String materialVideoUrl) {
this.materialVideoUrl = materialVideoUrl;
}
public String getMaterialVideoInfo() {
return materialVideoInfo;
}
public void setMaterialVideoInfo(String materialVideoInfo) {
this.materialVideoInfo = materialVideoInfo;
}
public String getMaterialVideoImageUrl() {
return materialVideoImageUrl;
}
public void setMaterialVideoImageUrl(String materialVideoImageUrl) {
this.materialVideoImageUrl = materialVideoImageUrl;
}
public String getMaterialVideoImageInfo() {
return materialVideoImageInfo;
}
public void setMaterialVideoImageInfo(String materialVideoImageInfo) {
this.materialVideoImageInfo = materialVideoImageInfo;
}
public String getMaterialVideoFirstImageUrl() {
return materialVideoFirstImageUrl;
}
public void setMaterialVideoFirstImageUrl(String materialVideoFirstImageUrl) {
this.materialVideoFirstImageUrl = materialVideoFirstImageUrl;
}
public String getMaterialVideoFirstImageInfo() {
return materialVideoFirstImageInfo;
}
public void setMaterialVideoFirstImageInfo(String materialVideoFirstImageInfo) {
this.materialVideoFirstImageInfo = materialVideoFirstImageInfo;
}
public Integer getDuration() {
return duration;
}
public void setDuration(Integer duration) {
this.duration = duration;
}
public String getEnterpriseId() {
return enterpriseId;
}
public void setEnterpriseId(String enterpriseId) {
this.enterpriseId = enterpriseId;
}
public Date getCreateTime() {
return createTime;
}
public void setCreateTime(Date createTime) {
this.createTime = createTime;
}
public Date getUpdateTime() {
return updateTime;
}
public void setUpdateTime(Date updateTime) {
this.updateTime = updateTime;
}
public List<ContentGoodsVO> getContentGoodsList() {
return contentGoodsList;
}
public void setContentGoodsList(List<ContentGoodsVO> contentGoodsList) {
this.contentGoodsList = contentGoodsList;
}
public Integer getAuditStatus() {
return auditStatus;
}
public void setAuditStatus(Integer auditStatus) {
this.auditStatus = auditStatus;
}
public ContentAuditorVO getAuditor() {
return auditor;
}
public void setAuditor(ContentAuditorVO auditor) {
this.auditor = auditor;
}
}
......@@ -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;
}
......@@ -51,6 +51,17 @@ public class ContentMaterialLandingPageVO implements Serializable {
*/
private Integer shoppingCartNum;
/**
* 跳转穿搭社区开关
* 1 开启; 0关闭
*/
private Integer communityJumpFlag;
/**
* 同款搭配数量
*/
private Integer collocationNum;
public ContentMaterialInfoVO getContentMaterialInfo() {
return contentMaterialInfo;
......@@ -99,4 +110,20 @@ public class ContentMaterialLandingPageVO implements Serializable {
public void setShoppingCartNum(Integer shoppingCartNum) {
this.shoppingCartNum = shoppingCartNum;
}
public Integer getCollocationNum() {
return collocationNum;
}
public void setCollocationNum(Integer collocationNum) {
this.collocationNum = collocationNum;
}
public Integer getCommunityJumpFlag() {
return communityJumpFlag;
}
public void setCommunityJumpFlag(Integer communityJumpFlag) {
this.communityJumpFlag = communityJumpFlag;
}
}
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