Commit f42f8d05 by songyinghui

feature: 内容账号

parent 3f0eccfc
...@@ -62,6 +62,13 @@ public class PotentialCustomerQDTO extends BasePageInfo { ...@@ -62,6 +62,13 @@ public class PotentialCustomerQDTO extends BasePageInfo {
*/ */
private Integer hasMemberPhone; private Integer hasMemberPhone;
/**
* 1 按客户搜索
* 2 按素材搜索
* @see com.gic.haoban.manage.api.enums.content.InteractRecordSearchType
*/
private Integer searchType;
public String getEnterpriseId() { public String getEnterpriseId() {
return enterpriseId; return enterpriseId;
} }
...@@ -133,4 +140,12 @@ public class PotentialCustomerQDTO extends BasePageInfo { ...@@ -133,4 +140,12 @@ public class PotentialCustomerQDTO extends BasePageInfo {
public void setHasMemberPhone(Integer hasMemberPhone) { public void setHasMemberPhone(Integer hasMemberPhone) {
this.hasMemberPhone = hasMemberPhone; this.hasMemberPhone = hasMemberPhone;
} }
public Integer getSearchType() {
return searchType;
}
public void setSearchType(Integer searchType) {
this.searchType = searchType;
}
} }
package com.gic.haoban.manage.api.enums.content;
/**
* @Author MUSI
* @Date 2023/11/24 4:07 PM
* @Description
* @Version
**/
public enum InteractRecordSearchType {
CUSTOMER(1, "按客户搜索"),
MATERIAL(2, "按素材搜索");
InteractRecordSearchType(Integer code, String desc){
this.code = code;
this.desc = desc;
}
private Integer code;
private String desc;
public Integer getCode() {
return code;
}
public String getDesc() {
return desc;
}
}
...@@ -25,4 +25,11 @@ public interface MallOrderStatusChangeApiService { ...@@ -25,4 +25,11 @@ public interface MallOrderStatusChangeApiService {
* @return * @return
*/ */
ServiceResponse<Void> orderEventDelay(String params); ServiceResponse<Void> orderEventDelay(String params);
/**
* 处理微盟订单
* @param params
* @return
*/
ServiceResponse<Void> dealWeimoOrder(String params);
} }
...@@ -33,10 +33,11 @@ public class InteractRecordExtendInfoBO implements Serializable { ...@@ -33,10 +33,11 @@ public class InteractRecordExtendInfoBO implements Serializable {
private List<ExtendGoodsInfo> extendGoodsInfos; private List<ExtendGoodsInfo> extendGoodsInfos;
/** /**
* 冗余的商品id * 浏览商品事件冗余的商品id
*/ */
private List<String> goodsIds; private List<String> goodsIds;
@Data @Data
public static class ExtendGoodsInfo implements Serializable { public static class ExtendGoodsInfo implements Serializable {
......
...@@ -21,6 +21,29 @@ public class MaterialMemberEOrderPojo extends BinlogBasePojo { ...@@ -21,6 +21,29 @@ public class MaterialMemberEOrderPojo extends BinlogBasePojo {
@JSONField(name = "enterprise_id") @JSONField(name = "enterprise_id")
private String enterpriseId; private String enterpriseId;
/**
* 订单编号
*/
@JSONField(name = "order_no")
private String orderNumber;
/**
* 订单id
*/
@JSONField(name = "eorder_id")
private String orderId;
/**
* 渠道code
*/
@JSONField(name = "channel_code")
private String channelCode;
/**
* 表名
*/
private String tableName;
public Integer getOrderStatus() { public Integer getOrderStatus() {
return orderStatus; return orderStatus;
} }
...@@ -44,4 +67,36 @@ public class MaterialMemberEOrderPojo extends BinlogBasePojo { ...@@ -44,4 +67,36 @@ public class MaterialMemberEOrderPojo extends BinlogBasePojo {
public void setEnterpriseId(String enterpriseId) { public void setEnterpriseId(String enterpriseId) {
this.enterpriseId = enterpriseId; this.enterpriseId = enterpriseId;
} }
public String getOrderNumber() {
return orderNumber;
}
public void setOrderNumber(String orderNumber) {
this.orderNumber = orderNumber;
}
public String getOrderId() {
return orderId;
}
public void setOrderId(String orderId) {
this.orderId = orderId;
}
public String getTableName() {
return tableName;
}
public void setTableName(String tableName) {
this.tableName = tableName;
}
public String getChannelCode() {
return channelCode;
}
public void setChannelCode(String channelCode) {
this.channelCode = channelCode;
}
} }
...@@ -20,6 +20,29 @@ public class MaterialMemberGicOrderPojo extends BinlogBasePojo { ...@@ -20,6 +20,29 @@ public class MaterialMemberGicOrderPojo extends BinlogBasePojo {
@JSONField(name = "enterprise_id") @JSONField(name = "enterprise_id")
private String enterpriseId; private String enterpriseId;
/**
* 订单编号
*/
@JSONField(name = "order_number")
private String orderNumber;
/**
* 订单id
*/
@JSONField(name = "order_id")
private String orderId;
/**
* 渠道code
*/
@JSONField(name = "channel_code")
private String channelCode;
/**
* 表名
*/
private String tableName;
public Integer getOrderStatus() { public Integer getOrderStatus() {
return orderStatus; return orderStatus;
} }
...@@ -43,4 +66,36 @@ public class MaterialMemberGicOrderPojo extends BinlogBasePojo { ...@@ -43,4 +66,36 @@ public class MaterialMemberGicOrderPojo extends BinlogBasePojo {
public void setEnterpriseId(String enterpriseId) { public void setEnterpriseId(String enterpriseId) {
this.enterpriseId = enterpriseId; this.enterpriseId = enterpriseId;
} }
public String getOrderNumber() {
return orderNumber;
}
public void setOrderNumber(String orderNumber) {
this.orderNumber = orderNumber;
}
public String getOrderId() {
return orderId;
}
public void setOrderId(String orderId) {
this.orderId = orderId;
}
public String getTableName() {
return tableName;
}
public void setTableName(String tableName) {
this.tableName = tableName;
}
public String getChannelCode() {
return channelCode;
}
public void setChannelCode(String channelCode) {
this.channelCode = channelCode;
}
} }
package com.gic.haoban.manage.service.pojo.bo.content.binlog;
import java.io.Serializable;
/**
* @Author MUSI
* @Date 2023/11/27 11:18 AM
* @Description
* @Version
**/
public class MemberOrderBo implements Serializable {
public static final String weimo = "weimob";
private Integer orderStatus;
private String memberId;
private String enterpriseId;
/**
* 订单编号
*/
private String orderNumber;
/**
* 订单id
*/
private String orderId;
/**
* 渠道code
*/
private String channelCode;
/**
* 表名
*/
private String tableName;
public Integer getOrderStatus() {
return orderStatus;
}
public void setOrderStatus(Integer orderStatus) {
this.orderStatus = orderStatus;
}
public String getMemberId() {
return memberId;
}
public void setMemberId(String memberId) {
this.memberId = memberId;
}
public String getEnterpriseId() {
return enterpriseId;
}
public void setEnterpriseId(String enterpriseId) {
this.enterpriseId = enterpriseId;
}
public String getOrderNumber() {
return orderNumber;
}
public void setOrderNumber(String orderNumber) {
this.orderNumber = orderNumber;
}
public String getOrderId() {
return orderId;
}
public void setOrderId(String orderId) {
this.orderId = orderId;
}
public String getChannelCode() {
return channelCode;
}
public void setChannelCode(String channelCode) {
this.channelCode = channelCode;
}
public String getTableName() {
return tableName;
}
public void setTableName(String tableName) {
this.tableName = tableName;
}
}
...@@ -57,10 +57,34 @@ public class InteractRecordMessageBO implements Serializable { ...@@ -57,10 +57,34 @@ public class InteractRecordMessageBO implements Serializable {
* 购买商品时的 订单编号 * 购买商品时的 订单编号
*/ */
private String orderNumber; private String orderNumber;
/**
* 订单id
*/
private String orderId;
/** /**
* 查看商品时查看的商品id * 查看商品时查看的商品id
*/ */
private String goodsId; private String goodsId;
/**
* 是否是微盟商品
* true 是
* false 否
*/
private Boolean weimoGoodsFlag;
/**
* 货号
*/
private String goodsCode;
/**
* 商品名称
*/
private String goodsName;
/** /**
* 业务唯一标识 * 业务唯一标识
*/ */
...@@ -88,4 +112,12 @@ public class InteractRecordMessageBO implements Serializable { ...@@ -88,4 +112,12 @@ public class InteractRecordMessageBO implements Serializable {
private Integer bizType; private Integer bizType;
private String appKey; private String appKey;
/**
* 订单类型
* 1 微商城
* 2 基础线上单
* 3 基础线下单
*/
private Integer orderType;
} }
...@@ -3,6 +3,8 @@ package com.gic.haoban.manage.service.pojo.qo.content; ...@@ -3,6 +3,8 @@ package com.gic.haoban.manage.service.pojo.qo.content;
import com.gic.api.base.commons.BasePageInfo; import com.gic.api.base.commons.BasePageInfo;
import lombok.Data; import lombok.Data;
import java.util.List;
/** /**
* @Author MUSI * @Author MUSI
* @Date 2023/3/29 10:03 AM * @Date 2023/3/29 10:03 AM
...@@ -69,4 +71,16 @@ public class PotentialCustomerQO extends BasePageInfo { ...@@ -69,4 +71,16 @@ public class PotentialCustomerQO extends BasePageInfo {
* 1 会员有手机号 * 1 会员有手机号
*/ */
private Integer hasMemberPhone; private Integer hasMemberPhone;
/**
* 业务id
*/
private List<String> bizIds;
/**
* 1 按客户搜索
* 2 按素材搜索
* @see com.gic.haoban.manage.api.enums.content.InteractRecordSearchType
*/
private Integer searchType;
} }
...@@ -8,8 +8,10 @@ import com.gic.business.order.dto.ordermanage.ListOrderItemDTO; ...@@ -8,8 +8,10 @@ import com.gic.business.order.dto.ordermanage.ListOrderItemDTO;
import com.gic.business.order.dto.ordermanage.OrderOutInfoDTO; import com.gic.business.order.dto.ordermanage.OrderOutInfoDTO;
import com.gic.business.order.qdto.ordermanage.OrderInfoQDTO; import com.gic.business.order.qdto.ordermanage.OrderInfoQDTO;
import com.gic.business.order.service.ordermanage.OrderInfoOutApiService; import com.gic.business.order.service.ordermanage.OrderInfoOutApiService;
import com.gic.haoban.manage.api.enums.content.MaterialInteractRecordEventType;
import com.gic.haoban.manage.service.pojo.bo.content.InteractRecordExtendInfoBO; import com.gic.haoban.manage.service.pojo.bo.content.InteractRecordExtendInfoBO;
import com.gic.haoban.manage.service.pojo.bo.content.context.InteractRecordMessageContext; import com.gic.haoban.manage.service.pojo.bo.content.context.InteractRecordMessageContext;
import com.gic.haoban.manage.service.pojo.bo.content.message.InteractRecordMessageBO;
import com.gic.haoban.manage.service.pojo.qo.content.InteractRecordQO; import com.gic.haoban.manage.service.pojo.qo.content.InteractRecordQO;
import com.gic.haoban.manage.service.service.content.InteractRecordService; import com.gic.haoban.manage.service.service.content.InteractRecordService;
import com.gic.member.api.dto.info.MemberBaseInfoDTO; import com.gic.member.api.dto.info.MemberBaseInfoDTO;
...@@ -17,8 +19,13 @@ import com.gic.member.api.dto.info.MemberPersonalInfoDTO; ...@@ -17,8 +19,13 @@ import com.gic.member.api.dto.info.MemberPersonalInfoDTO;
import com.gic.member.api.dto.info.MemberSummaryInfoDTO; import com.gic.member.api.dto.info.MemberSummaryInfoDTO;
import com.gic.member.api.dto.info.qo.QueryMemberInfoDTO; import com.gic.member.api.dto.info.qo.QueryMemberInfoDTO;
import com.gic.member.api.service.MemberOutApiService; import com.gic.member.api.service.MemberOutApiService;
import com.gic.order.api.dto.OrderDTO;
import com.gic.order.api.dto.OrderItemDTO;
import com.gic.order.api.dto.req.MemberOrderOptional;
import com.gic.order.api.service.member.MemberOrderReadApiService; import com.gic.order.api.service.member.MemberOrderReadApiService;
import com.gic.orderecommerce.api.constant.OrderChannelEnum; import com.gic.orderecommerce.api.constant.OrderChannelEnum;
import com.gic.orderecommerce.api.dto.EorderDTO;
import com.gic.orderecommerce.api.dto.EorderItemDTO;
import com.gic.orderecommerce.api.dto.MallEorderDTO; import com.gic.orderecommerce.api.dto.MallEorderDTO;
import com.gic.orderecommerce.api.service.EcommerceOrderOutputApiService; import com.gic.orderecommerce.api.service.EcommerceOrderOutputApiService;
import com.gic.store.goods.dto.goods.GoodsSpuInfoDTO; import com.gic.store.goods.dto.goods.GoodsSpuInfoDTO;
...@@ -31,6 +38,7 @@ import org.springframework.beans.factory.annotation.Autowired; ...@@ -31,6 +38,7 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Collections; import java.util.Collections;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
...@@ -172,8 +180,26 @@ public class InteractRecordMessageBuilder { ...@@ -172,8 +180,26 @@ public class InteractRecordMessageBuilder {
* @param * @param
* @return * @return
*/ */
public InteractRecordExtendInfoBO.ExtendOrderInfo buildMaterialOrderItemInfo(String enterpriseId, String orderNumber) { public InteractRecordExtendInfoBO.ExtendOrderInfo buildMaterialOrderItemInfo(String enterpriseId, String orderNumber,
String memberId,
String orderId,
Integer orderType) {
if (orderType == null) {
return null;
}
if (orderType == 1) {
return buildMallOrderItemInfo(enterpriseId, orderNumber);
}
if (orderType == 2) {
return this.buildOnlineOrderItemInfo(enterpriseId, memberId, orderId);
}
if (orderType == 3) {
return this.buildOfflineOrderItemInfo(enterpriseId, memberId, orderId);
}
return null;
}
private InteractRecordExtendInfoBO.ExtendOrderInfo buildMallOrderItemInfo(String enterpriseId, String orderNumber) {
OrderInfoQDTO orderInfoQDTO = new OrderInfoQDTO(); OrderInfoQDTO orderInfoQDTO = new OrderInfoQDTO();
orderInfoQDTO.setOrderNumber(orderNumber); orderInfoQDTO.setOrderNumber(orderNumber);
orderInfoQDTO.setEnterpriseId(enterpriseId); orderInfoQDTO.setEnterpriseId(enterpriseId);
...@@ -218,6 +244,106 @@ public class InteractRecordMessageBuilder { ...@@ -218,6 +244,106 @@ public class InteractRecordMessageBuilder {
return extendOrderInfo; return extendOrderInfo;
} }
private InteractRecordExtendInfoBO.ExtendOrderInfo buildOnlineOrderItemInfo(String enterpriseId, String memberId, String orderId) {
// 基础侧线上单
EorderDTO eorderDTO = ecommerceOrderOutputApiService.getEorderWholeByMemberIdAndOrderId(memberId, orderId);
if (eorderDTO == null) {
log.info("根据订单好查询订单异常 {}", JSON.toJSONString(eorderDTO));
return null;
}
InteractRecordExtendInfoBO.ExtendOrderInfo extendOrderInfo = new InteractRecordExtendInfoBO.ExtendOrderInfo();
extendOrderInfo.setOrderNumber(eorderDTO.getOrderNo());
extendOrderInfo.setOrderCreateTime(eorderDTO.getOrderCreateTime());
extendOrderInfo.setOrderPay(BigDecimal.valueOf(eorderDTO.getTotalAmount()));
extendOrderInfo.setRealPay(BigDecimal.valueOf(eorderDTO.getPaymentAmount()));
if (CollectionUtils.isNotEmpty(eorderDTO.getItem())) {
extendOrderInfo.setOrderTotalNum(eorderDTO.getItem().size());
List<String> goodsCodes = eorderDTO.getItem()
.stream()
.map(EorderItemDTO::getGoodsCode)
.distinct()
.collect(Collectors.toList());
Map<String, Integer> goodsInfoSourceTypeMap = this.queryGoodsSourceTypeWithCodes(enterpriseId, goodsCodes);
List<InteractRecordExtendInfoBO.ExtendGoodsInfo> extendGoodsInfos = new ArrayList<>();
for (EorderItemDTO eorderItemDTO : eorderDTO.getItem()) {
InteractRecordExtendInfoBO.ExtendGoodsInfo extendGoodsInfo = new InteractRecordExtendInfoBO.ExtendGoodsInfo();
extendGoodsInfo.setGoodsName(eorderItemDTO.getGoodsTitle());
extendGoodsInfo.setGoodsImageUrl(eorderItemDTO.getImageUrl());
extendGoodsInfo.setGoodsCode(eorderItemDTO.getGoodsCode());
extendGoodsInfo.setGoodsNorm(eorderItemDTO.getSkuValue());
extendGoodsInfo.setOrderNum(eorderItemDTO.getSkuNum());
extendGoodsInfo.setSalePrice(BigDecimal.valueOf(eorderItemDTO.getPrice()));
extendGoodsInfo.setSourceType(goodsInfoSourceTypeMap.get(eorderItemDTO.getGoodsCode()));
if (extendGoodsInfo.getSourceType() == null) {
extendGoodsInfo.setSourceType(2);
}
extendGoodsInfos.add(extendGoodsInfo);
}
extendOrderInfo.setOrderGoodsInfos(extendGoodsInfos);
}
return extendOrderInfo;
}
/**
* 构建线下订单数据
* @param enterpriseId
* @return
*/
private InteractRecordExtendInfoBO.ExtendOrderInfo buildOfflineOrderItemInfo(String enterpriseId, String memberId, String orderId) {
ServiceResponse<OrderDTO> serviceResponse = memberOrderReadApiService.queryById(enterpriseId, memberId, orderId, MemberOrderOptional.item());
if (!serviceResponse.isSuccess() || serviceResponse.getResult() == null) {
log.info("查询订单异常 {}", JSON.toJSONString(serviceResponse));
return null;
}
OrderDTO orderDTO = serviceResponse.getResult();
InteractRecordExtendInfoBO.ExtendOrderInfo extendOrderInfo = new InteractRecordExtendInfoBO.ExtendOrderInfo();
extendOrderInfo.setOrderNumber(orderDTO.getOrderNumber());
extendOrderInfo.setOrderCreateTime(orderDTO.getOrderTime());
extendOrderInfo.setOrderTotalNum(orderDTO.getItemNum());
extendOrderInfo.setOrderPay(BigDecimal.valueOf(orderDTO.getPaidAmount()));
extendOrderInfo.setRealPay(BigDecimal.valueOf(orderDTO.getPayAmount()));
if (CollectionUtils.isNotEmpty(orderDTO.getList())) {
extendOrderInfo.setOrderTotalNum(orderDTO.getList().size());
List<String> goodsCodes = orderDTO.getList()
.stream()
.map(OrderItemDTO::getProductCode)
.distinct()
.collect(Collectors.toList());
Map<String, Integer> goodsSourceTypeMap = this.queryGoodsSourceTypeWithCodes(enterpriseId, goodsCodes);
List<InteractRecordExtendInfoBO.ExtendGoodsInfo> extendGoodsInfos = new ArrayList<>();
for (OrderItemDTO orderItemDTO : orderDTO.getList()) {
InteractRecordExtendInfoBO.ExtendGoodsInfo extendGoodsInfo = new InteractRecordExtendInfoBO.ExtendGoodsInfo();
extendGoodsInfo.setGoodsName(orderItemDTO.getProductName());
extendGoodsInfo.setGoodsImageUrl(orderItemDTO.getQcloudImageUrl());
extendGoodsInfo.setGoodsCode(orderItemDTO.getProductCode());
if (StringUtils.isNotBlank(orderItemDTO.getAttrbute())) {
List<JSONObject> jsonObjects = JSON.parseArray(orderItemDTO.getAttrbute(), JSONObject.class);
if (CollectionUtils.isNotEmpty(jsonObjects)) {
List<String> norms = jsonObjects
.stream()
.map(item -> {
String key = item.getString("key");
String value = item.getString("value");
return key + "," + value;
})
.collect(Collectors.toList());
extendGoodsInfo.setGoodsNorm(StringUtils.join(norms, ";"));
}
}
extendGoodsInfo.setOrderNum(orderItemDTO.getNumber());
extendGoodsInfo.setSalePrice(Optional.ofNullable(orderItemDTO.getUnitPrice()).map(BigDecimal::new).orElse(null));
extendGoodsInfo.setSourceType(Optional.ofNullable(goodsSourceTypeMap.get(orderItemDTO.getProductCode())).orElse(2));
extendGoodsInfos.add(extendGoodsInfo);
}
extendOrderInfo.setOrderGoodsInfos(extendGoodsInfos);
}
return extendOrderInfo;
}
private Map<String, Integer> queryGoodsSimpleInfo(String enterpriseId, List<String> goodsIds) { private Map<String, Integer> queryGoodsSimpleInfo(String enterpriseId, List<String> goodsIds) {
GoodsListQDTO goodsListQDTO = new GoodsListQDTO(); GoodsListQDTO goodsListQDTO = new GoodsListQDTO();
goodsListQDTO.setEnterpriseId(enterpriseId); goodsListQDTO.setEnterpriseId(enterpriseId);
...@@ -234,6 +360,22 @@ public class InteractRecordMessageBuilder { ...@@ -234,6 +360,22 @@ public class InteractRecordMessageBuilder {
.collect(Collectors.toMap(GoodsSpuInfoDTO::getGoodsId, GoodsSpuInfoDTO::getSourceType, (v1, v2) -> v1)); .collect(Collectors.toMap(GoodsSpuInfoDTO::getGoodsId, GoodsSpuInfoDTO::getSourceType, (v1, v2) -> v1));
} }
private Map<String, Integer> queryGoodsSourceTypeWithCodes(String enterpriseId, List<String> goodsCodes) {
GoodsListQDTO goodsListQDTO = new GoodsListQDTO();
goodsListQDTO.setEnterpriseId(enterpriseId);
goodsListQDTO.setGoodsCodes(goodsCodes);
goodsListQDTO.setPageSize(goodsCodes.size() + 1);
ServiceResponse<Page<GoodsSpuInfoDTO>> serviceResponse =
goodsCenterApiService.queryStoreGoodsList(goodsListQDTO);
if (!serviceResponse.isSuccess() || CollectionUtils.isEmpty(serviceResponse.getResult().getResult())) {
return Collections.emptyMap();
}
return serviceResponse.getResult()
.getResult()
.stream()
.collect(Collectors.toMap(GoodsSpuInfoDTO::getGoodsCode, GoodsSpuInfoDTO::getSourceType, (v1, v2) -> v1));
}
private String convertSkuNorm(String skuAttr) { private String convertSkuNorm(String skuAttr) {
if (StringUtils.isBlank(skuAttr)) { if (StringUtils.isBlank(skuAttr)) {
return null; return null;
...@@ -250,4 +392,16 @@ public class InteractRecordMessageBuilder { ...@@ -250,4 +392,16 @@ public class InteractRecordMessageBuilder {
return StringUtils.join(norms, ","); return StringUtils.join(norms, ",");
} }
/**
* 组装浏览商品事件
* @param context
*/
private void buildVisitProduct(InteractRecordMessageContext context) {
InteractRecordMessageBO interactRecordMessageBO = context.getInteractRecordMessageBO();
if (!MaterialInteractRecordEventType.VISIT_PRODUCT.getCode().equals(interactRecordMessageBO.getEventType())) {
return;
}
}
} }
...@@ -2,6 +2,7 @@ package com.gic.haoban.manage.service.service.content.adaptor; ...@@ -2,6 +2,7 @@ package com.gic.haoban.manage.service.service.content.adaptor;
import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import com.gic.haoban.manage.api.enums.content.MaterialInteractRecordEventType;
import com.gic.haoban.manage.service.pojo.bo.content.message.InteractRecordMessageBO; import com.gic.haoban.manage.service.pojo.bo.content.message.InteractRecordMessageBO;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections.MapUtils; import org.apache.commons.collections.MapUtils;
...@@ -68,15 +69,21 @@ public class MessageConvertHelper { ...@@ -68,15 +69,21 @@ public class MessageConvertHelper {
String eventCode = jsonObject.getString("event_code"); String eventCode = jsonObject.getString("event_code");
interactRecordMessageBO.setEventType(this.convertEventType(eventCode)); interactRecordMessageBO.setEventType(this.convertEventType(eventCode));
String weimoFlag = cuspJson.getString("is_weiMob");
interactRecordMessageBO.setWeimoGoodsFlag(this.convertWeimoFlag(weimoFlag));
String goodsId = cuspJson.getString("goods_id");
interactRecordMessageBO.setGoodsId(goodsId);
String goodsCode = cuspJson.getString("goods_code");
interactRecordMessageBO.setGoodsCode(goodsCode);
String goodsName = cuspJson.getString("goods_name");
interactRecordMessageBO.setGoodsName(goodsName);
Integer duration = jsonObject.getInteger("duration"); Integer duration = jsonObject.getInteger("duration");
interactRecordMessageBO.setDurationTime(duration); interactRecordMessageBO.setDurationTime(duration);
String orderNumber = cuspJson.getString("order_number"); String orderNumber = cuspJson.getString("order_number");
interactRecordMessageBO.setOrderNumber(orderNumber); interactRecordMessageBO.setOrderNumber(orderNumber);
String goodsId = cuspJson.getString("goods_id");
interactRecordMessageBO.setGoodsId(goodsId);
String runningUuid = jsonObject.getString("runningUuid"); String runningUuid = jsonObject.getString("runningUuid");
interactRecordMessageBO.setBusinessUUId(runningUuid); interactRecordMessageBO.setBusinessUUId(runningUuid);
...@@ -115,15 +122,23 @@ public class MessageConvertHelper { ...@@ -115,15 +122,23 @@ public class MessageConvertHelper {
switch (eventCode) { switch (eventCode) {
case "material_page": case "material_page":
case "material_page_duration": case "material_page_duration":
return 1; return MaterialInteractRecordEventType.VISIT_MATERIAL.getCode();
case "store_goods_detail": case "store_goods_detail":
return 2; case "click_goods":
return MaterialInteractRecordEventType.VISIT_PRODUCT.getCode();
case "store_buy_sucess": case "store_buy_sucess":
return 3; return 3;
case "store_add_cart": case "store_add_cart":
return 4; return MaterialInteractRecordEventType.ADD_SHOPPING_CART.getCode();
default: default:
return null; return null;
} }
} }
public boolean convertWeimoFlag(String weimoFlag) {
if (StringUtils.isBlank(weimoFlag)) {
return false;
}
return StringUtils.equals(weimoFlag, "是");
}
} }
...@@ -5,6 +5,7 @@ import com.gic.api.base.commons.Page; ...@@ -5,6 +5,7 @@ import com.gic.api.base.commons.Page;
import com.gic.commons.util.UniqueIdUtils; import com.gic.commons.util.UniqueIdUtils;
import com.gic.haoban.common.utils.PageUtil; import com.gic.haoban.common.utils.PageUtil;
import com.gic.haoban.manage.api.dto.StaffClerkRelationDTO; import com.gic.haoban.manage.api.dto.StaffClerkRelationDTO;
import com.gic.haoban.manage.api.enums.content.InteractRecordSearchType;
import com.gic.haoban.manage.service.dao.mapper.content.TabHaobanPotentialCustomerMapper; import com.gic.haoban.manage.service.dao.mapper.content.TabHaobanPotentialCustomerMapper;
import com.gic.haoban.manage.service.entity.TabHaobanExternalClerkRelated; import com.gic.haoban.manage.service.entity.TabHaobanExternalClerkRelated;
import com.gic.haoban.manage.service.entity.content.TabHaobanPotentialCustomer; import com.gic.haoban.manage.service.entity.content.TabHaobanPotentialCustomer;
...@@ -85,6 +86,16 @@ public class PotentialCustomerServiceImpl implements PotentialCustomerService { ...@@ -85,6 +86,16 @@ public class PotentialCustomerServiceImpl implements PotentialCustomerService {
if (staffClerkRelationDTO == null) { if (staffClerkRelationDTO == null) {
return new Page<>(); return new Page<>();
} }
if (InteractRecordSearchType.MATERIAL.getCode().equals(potentialCustomerQO.getSearchType())) {
// 按素材搜索
//todo 查询1000个素材id
List<String> bizIds = Collections.emptyList();
if (CollectionUtils.isEmpty(bizIds)) {
log.info("按素材搜索, {} 搜索素材结果为空", potentialCustomerQO.getSearch());
return new Page<>();
}
potentialCustomerQO.setBizIds(bizIds);
}
potentialCustomerQO.setStaffId(staffClerkRelationDTO.getStaffId()); potentialCustomerQO.setStaffId(staffClerkRelationDTO.getStaffId());
PageHelper.startPage(potentialCustomerQO.getPageNum(), potentialCustomerQO.getPageSize()); PageHelper.startPage(potentialCustomerQO.getPageNum(), potentialCustomerQO.getPageSize());
com.github.pagehelper.Page<TabHaobanPotentialCustomer> pageResult = com.github.pagehelper.Page<TabHaobanPotentialCustomer> pageResult =
......
...@@ -124,7 +124,10 @@ public class InteractRecordMessageService { ...@@ -124,7 +124,10 @@ public class InteractRecordMessageService {
// 查询订单信息 // 查询订单信息
String enterpriseId = context.getInteractRecordMessageBO().getEnterpriseId(); String enterpriseId = context.getInteractRecordMessageBO().getEnterpriseId();
String orderNumber = context.getInteractRecordMessageBO().getOrderNumber(); String orderNumber = context.getInteractRecordMessageBO().getOrderNumber();
InteractRecordExtendInfoBO.ExtendOrderInfo extendOrderInfo = interactRecordMessageBuilder.buildMaterialOrderItemInfo(enterpriseId, orderNumber); String orderId = context.getInteractRecordMessageBO().getOrderId();
String memberId = context.getInteractRecordMessageBO().getMemberId();
InteractRecordExtendInfoBO.ExtendOrderInfo extendOrderInfo = interactRecordMessageBuilder.buildMaterialOrderItemInfo(enterpriseId, orderNumber,
memberId, orderId, interactRecordMessageBO.getOrderType());
if (extendOrderInfo != null) { if (extendOrderInfo != null) {
interactRecordBO.getExtendInfo().getExtendOrderInfos().add(extendOrderInfo); interactRecordBO.getExtendInfo().getExtendOrderInfos().add(extendOrderInfo);
} }
......
package com.gic.haoban.manage.service.service.out.impl.content; package com.gic.haoban.manage.service.service.out.impl.content;
import cn.hutool.db.DaoTemplate;
import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import com.gic.api.base.commons.ServiceResponse; import com.gic.api.base.commons.ServiceResponse;
...@@ -12,8 +13,14 @@ import com.gic.haoban.manage.api.enums.content.MaterialInteractRecordEventType; ...@@ -12,8 +13,14 @@ import com.gic.haoban.manage.api.enums.content.MaterialInteractRecordEventType;
import com.gic.haoban.manage.api.service.content.MallOrderStatusChangeApiService; import com.gic.haoban.manage.api.service.content.MallOrderStatusChangeApiService;
import com.gic.haoban.manage.service.pojo.bo.content.InteractRecordBO; import com.gic.haoban.manage.service.pojo.bo.content.InteractRecordBO;
import com.gic.haoban.manage.service.pojo.bo.content.OrderEventMqBO; import com.gic.haoban.manage.service.pojo.bo.content.OrderEventMqBO;
import com.gic.haoban.manage.service.pojo.bo.content.binlog.MemberOrderBo;
import com.gic.haoban.manage.service.pojo.bo.content.message.InteractRecordMessageBO; import com.gic.haoban.manage.service.pojo.bo.content.message.InteractRecordMessageBO;
import com.gic.haoban.manage.service.service.content.message.InteractRecordMessageService; import com.gic.haoban.manage.service.service.content.message.InteractRecordMessageService;
import com.gic.haoban.manage.service.task.KafkaMessageServiceImpl;
import com.gic.order.api.dto.OrderDTO;
import com.gic.order.api.dto.req.MemberOrderOptional;
import com.gic.order.api.service.member.MemberOrderReadApiService;
import com.gic.orderecommerce.api.service.EcommerceOrderOutputApiService;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
...@@ -35,6 +42,8 @@ public class MallOrderStatusChangeApiServiceImpl implements MallOrderStatusChang ...@@ -35,6 +42,8 @@ public class MallOrderStatusChangeApiServiceImpl implements MallOrderStatusChang
@Autowired @Autowired
InteractRecordMessageService interactRecordMessageService; InteractRecordMessageService interactRecordMessageService;
private static final String ORDER_EVENT_RETRY = "orderEventRetryMQ"; private static final String ORDER_EVENT_RETRY = "orderEventRetryMQ";
/*** /***
...@@ -96,7 +105,7 @@ public class MallOrderStatusChangeApiServiceImpl implements MallOrderStatusChang ...@@ -96,7 +105,7 @@ public class MallOrderStatusChangeApiServiceImpl implements MallOrderStatusChang
interactRecordMessageBO.setLastAccessTime(orderInfo.getCreateTime().getTime()); interactRecordMessageBO.setLastAccessTime(orderInfo.getCreateTime().getTime());
interactRecordMessageBO.setOrderNumber(orderEventMqBO.getOrderNumber()); interactRecordMessageBO.setOrderNumber(orderEventMqBO.getOrderNumber());
interactRecordMessageBO.setTimes(orderEventMqBO.getTimes()); interactRecordMessageBO.setTimes(orderEventMqBO.getTimes());
interactRecordMessageBO.setOrderType(1);
InteractRecordBO interactRecordBO = interactRecordMessageService.getInteractRecordBOWithOrderType(interactRecordMessageBO); InteractRecordBO interactRecordBO = interactRecordMessageService.getInteractRecordBOWithOrderType(interactRecordMessageBO);
if (interactRecordBO == null) { if (interactRecordBO == null) {
log.info("订单事件先到达,埋点事件延迟 >>> {}", JSON.toJSONString(interactRecordMessageBO)); log.info("订单事件先到达,埋点事件延迟 >>> {}", JSON.toJSONString(interactRecordMessageBO));
...@@ -140,4 +149,41 @@ public class MallOrderStatusChangeApiServiceImpl implements MallOrderStatusChang ...@@ -140,4 +149,41 @@ public class MallOrderStatusChangeApiServiceImpl implements MallOrderStatusChang
} }
return true; return true;
} }
/**
* 处理微盟订单
* MQ: dealWeimoOrder
* @param params
* @return
*/
@Override
public ServiceResponse<Void> dealWeimoOrder(String params) {
//订单分为tab_gic_eorder 和 tab_gic_ordeer
MemberOrderBo memberOrderBo = JSON.parseObject(params, MemberOrderBo.class);
if (memberOrderBo == null) {
return ServiceResponse.success();
}
String enterpriseId = memberOrderBo.getEnterpriseId();
String memberId = memberOrderBo.getMemberId();
String orderId = memberOrderBo.getOrderId();
String orderNumber = memberOrderBo.getOrderNumber();
InteractRecordMessageBO interactRecordMessageBO = new InteractRecordMessageBO();
interactRecordMessageBO.setEnterpriseId(enterpriseId);
interactRecordMessageBO.setMemberId(memberId);
// todo 根据会员商品信息查询数据组 获取导购id、素材id
interactRecordMessageBO.setEventType(MaterialInteractRecordEventType.ORDER.getCode());
interactRecordMessageBO.setDurationTime(0);
interactRecordMessageBO.setLastAccessTime(System.currentTimeMillis());
interactRecordMessageBO.setOrderNumber(orderNumber);
interactRecordMessageBO.setOrderId(orderId);
if (StringUtils.equalsIgnoreCase(memberOrderBo.getTableName(), KafkaMessageServiceImpl.tab_gic_eorder)) {
interactRecordMessageBO.setOrderType(2);
}else {
interactRecordMessageBO.setOrderType(3);
}
interactRecordMessageService.dealRecord(interactRecordMessageBO);
return ServiceResponse.success();
}
} }
...@@ -6,6 +6,7 @@ import com.gic.binlog.base.entity.GicField; ...@@ -6,6 +6,7 @@ import com.gic.binlog.base.entity.GicField;
import com.gic.binlog.base.entity.GicRecord; import com.gic.binlog.base.entity.GicRecord;
import com.gic.binlog.base.entity.enums.GicRecordType; import com.gic.binlog.base.entity.enums.GicRecordType;
import com.gic.commons.util.EntityUtil; import com.gic.commons.util.EntityUtil;
import com.gic.commons.util.GICMQClientUtil;
import com.gic.dubbo.entity.ProviderLocalTag; import com.gic.dubbo.entity.ProviderLocalTag;
import com.gic.haoban.manage.api.dto.FlushStoreMqDTO; import com.gic.haoban.manage.api.dto.FlushStoreMqDTO;
import com.gic.haoban.manage.api.enums.ChannelCodeEnum; import com.gic.haoban.manage.api.enums.ChannelCodeEnum;
...@@ -17,6 +18,7 @@ import com.gic.haoban.manage.service.pojo.bo.content.binlog.MaterialMemberEOrder ...@@ -17,6 +18,7 @@ import com.gic.haoban.manage.service.pojo.bo.content.binlog.MaterialMemberEOrder
import com.gic.haoban.manage.service.pojo.StoreSyncPojo; import com.gic.haoban.manage.service.pojo.StoreSyncPojo;
import com.gic.haoban.manage.service.pojo.bo.content.binlog.MaterialMemberGicOrderPojo; import com.gic.haoban.manage.service.pojo.bo.content.binlog.MaterialMemberGicOrderPojo;
import com.gic.haoban.manage.service.pojo.bo.content.binlog.MaterialMemberUnionIdPoJo; import com.gic.haoban.manage.service.pojo.bo.content.binlog.MaterialMemberUnionIdPoJo;
import com.gic.haoban.manage.service.pojo.bo.content.binlog.MemberOrderBo;
import com.gic.haoban.manage.service.service.StoreRangeService; import com.gic.haoban.manage.service.service.StoreRangeService;
import com.gic.haoban.manage.service.service.content.InteractRecordService; import com.gic.haoban.manage.service.service.content.InteractRecordService;
import com.gic.haoban.manage.service.service.content.PotentialCustomerService; import com.gic.haoban.manage.service.service.content.PotentialCustomerService;
...@@ -48,8 +50,8 @@ public class KafkaMessageServiceImpl implements MessageListener<String, GicRecor ...@@ -48,8 +50,8 @@ public class KafkaMessageServiceImpl implements MessageListener<String, GicRecor
private final String GROUP = "tab_gic_store_group"; private final String GROUP = "tab_gic_store_group";
private final String tab_gic_eorder = "tab_gic_eorder"; public static final String tab_gic_eorder = "tab_gic_eorder";
private final String tab_gic_order = "tab_gic_order"; public static final String tab_gic_order = "tab_gic_order";
private final String tab_gic_member = "tab_gic_member"; private final String tab_gic_member = "tab_gic_member";
...@@ -95,12 +97,19 @@ public class KafkaMessageServiceImpl implements MessageListener<String, GicRecor ...@@ -95,12 +97,19 @@ public class KafkaMessageServiceImpl implements MessageListener<String, GicRecor
logger.info("导购binlog无需监听"); logger.info("导购binlog无需监听");
} }
else if (StringUtils.startsWith(record.value().getTableName(), tab_gic_eorder)) { else if (StringUtils.startsWith(record.value().getTableName(), tab_gic_eorder)) {
// 处理线上单微盟订单
MemberOrderBo memberOrderBo = EntityUtil.changeEntityByJSON(MemberOrderBo.class, pojo);
this.dealMemberOrder(memberOrderBo);
// 处理会员订单新增事件 // 处理会员订单新增事件
dealMemberEOrder((MaterialMemberEOrderPojo) pojo); dealMemberEOrder((MaterialMemberEOrderPojo) pojo);
} }
else if (StringUtils.startsWith(record.value().getTableName(), tab_gic_order)) { else if (StringUtils.startsWith(record.value().getTableName(), tab_gic_order)) {
MemberOrderBo memberOrderBo = EntityUtil.changeEntityByJSON(MemberOrderBo.class, pojo);
this.dealMemberOrder(memberOrderBo);
// 处理会员订单新增事件 // 处理会员订单新增事件
dealMemberGicOrder((MaterialMemberGicOrderPojo) pojo); dealMemberGicOrder((MaterialMemberGicOrderPojo) pojo);
}else if (StringUtils.startsWith(record.value().getTableName(), tab_gic_member)) { }else if (StringUtils.startsWith(record.value().getTableName(), tab_gic_member)) {
// 会员unionId新增事件 // 会员unionId新增事件
dealMemberUnionIdChange((MaterialMemberUnionIdPoJo) pojo); dealMemberUnionIdChange((MaterialMemberUnionIdPoJo) pojo);
...@@ -117,17 +126,25 @@ public class KafkaMessageServiceImpl implements MessageListener<String, GicRecor ...@@ -117,17 +126,25 @@ public class KafkaMessageServiceImpl implements MessageListener<String, GicRecor
} else if (record.getTableName().equals(GROUP)) { } else if (record.getTableName().equals(GROUP)) {
return binlogMap(record.getFieldList(), record.getRecordType(), GroupSyncPojo.class); return binlogMap(record.getFieldList(), record.getRecordType(), GroupSyncPojo.class);
}else if (StringUtils.startsWith(record.getTableName(), tab_gic_eorder)) { }else if (StringUtils.startsWith(record.getTableName(), tab_gic_eorder)) {
if (GicRecordType.INSERT.equals(record.getRecordType())) {
Map<String, String> mid = new HashMap<>(); Map<String, String> mid = new HashMap<>();
for (GicField gicField : record.getFieldList()) { for (GicField gicField : record.getFieldList()) {
mid.put(gicField.getName(), gicField.getValue()); mid.put(gicField.getName(), gicField.getValue());
} }
return JSON.parseObject(JSON.toJSONString(mid), MaterialMemberEOrderPojo.class); MaterialMemberEOrderPojo materialMemberEOrderPojo = JSON.parseObject(JSON.toJSONString(mid), MaterialMemberEOrderPojo.class);
materialMemberEOrderPojo.setTableName(tab_gic_eorder);
return materialMemberEOrderPojo;
}
}else if (StringUtils.startsWith(record.getTableName(), tab_gic_order)) { }else if (StringUtils.startsWith(record.getTableName(), tab_gic_order)) {
if (GicRecordType.INSERT.equals(record.getRecordType())) {
Map<String, String> mid = new HashMap<>(); Map<String, String> mid = new HashMap<>();
for (GicField gicField : record.getFieldList()) { for (GicField gicField : record.getFieldList()) {
mid.put(gicField.getName(), gicField.getValue()); mid.put(gicField.getName(), gicField.getValue());
} }
return JSON.parseObject(JSON.toJSONString(mid), MaterialMemberGicOrderPojo.class); MaterialMemberGicOrderPojo materialMemberGicOrderPojo = JSON.parseObject(JSON.toJSONString(mid), MaterialMemberGicOrderPojo.class);
materialMemberGicOrderPojo.setTableName(tab_gic_order);
return materialMemberGicOrderPojo;
}
} else if (StringUtils.startsWith(record.getTableName(), tab_gic_member)) { } else if (StringUtils.startsWith(record.getTableName(), tab_gic_member)) {
GicRecordType recordType = record.getRecordType(); GicRecordType recordType = record.getRecordType();
...@@ -287,4 +304,20 @@ public class KafkaMessageServiceImpl implements MessageListener<String, GicRecor ...@@ -287,4 +304,20 @@ public class KafkaMessageServiceImpl implements MessageListener<String, GicRecor
interactRecordService.memberAuthorized(materialMemberUnionIdPoJo.getMemberId(), materialMemberUnionIdPoJo.getUnionId()); interactRecordService.memberAuthorized(materialMemberUnionIdPoJo.getMemberId(), materialMemberUnionIdPoJo.getUnionId());
} }
private void dealMemberOrder(MemberOrderBo memberOrderBo) {
try {
logger.info("会员订单数据 {}", JSON.toJSONString(memberOrderBo));
if (!StringUtils.equalsIgnoreCase(memberOrderBo.getChannelCode(), MemberOrderBo.weimo)) {
return;
}
logger.info("发送微盟订单处理消息 {}", "dealweimoOrder");
/**
* @see com.gic.haoban.manage.api.service.content.MallOrderStatusChangeApiService#dealWeimoOrder(String)
*/
GICMQClientUtil.getClientInstance().sendMessage("dealweimoOrder", JSON.toJSONString(memberOrderBo));
}catch (Exception ex) {
logger.info("处理会员订单异常 ", ex);
}
}
} }
...@@ -242,6 +242,25 @@ ...@@ -242,6 +242,25 @@
<if test="hasMemberRelation != null"> <if test="hasMemberRelation != null">
left join tab_haoban_external_clerk_related related on related.staff_id = #{staffId} and related.status_flag in (1, 3, 4) and customer.member_id = related.member_id left join tab_haoban_external_clerk_related related on related.staff_id = #{staffId} and related.status_flag in (1, 3, 4) and customer.member_id = related.member_id
</if> </if>
<if test="bizIds != null and bizIds.size > 0">
INNER JOIN (
SELECT `enterprise_id`,`clerk_id`,`member_id`
FROM tab_haoban_interact_record
<where>
clerk_id = #{clerkId} and delete_flag = 0 and biz_type = 1
<if test="enterpriseId != null and enterpriseId != ''">
and enterprise_id = #{enterpriseId}
</if>
and biz_id in
<foreach collection="bizIds" separator="," item="item" open="(" close=")">
#{item}
</foreach>
</where>
GROUP BY `enterprise_id`,`clerk_id`,`member_id`
ORDER BY NULL
) temp
on customer.enterprise_id = temp.enterprise_id and customer.clerk_id = temp.clerk_id and customer.member_id = temp.member_id
</if>
<where> <where>
customer.clerk_id = #{clerkId} and customer.delete_flag = 0 customer.clerk_id = #{clerkId} and customer.delete_flag = 0
<if test="enterpriseId != null and enterpriseId != ''"> <if test="enterpriseId != null and enterpriseId != ''">
......
...@@ -64,4 +64,11 @@ public class PotentialCustomerQO extends BasePageInfo { ...@@ -64,4 +64,11 @@ public class PotentialCustomerQO extends BasePageInfo {
*/ */
private Integer hasMemberPhone; private Integer hasMemberPhone;
/**
* 1 按客户搜索
* 2 按素材搜索
* @see com.gic.haoban.manage.api.enums.content.InteractRecordSearchType
*/
private Integer searchType;
} }
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