Commit f42f8d05 by songyinghui

feature: 内容账号

parent 3f0eccfc
......@@ -62,6 +62,13 @@ public class PotentialCustomerQDTO extends BasePageInfo {
*/
private Integer hasMemberPhone;
/**
* 1 按客户搜索
* 2 按素材搜索
* @see com.gic.haoban.manage.api.enums.content.InteractRecordSearchType
*/
private Integer searchType;
public String getEnterpriseId() {
return enterpriseId;
}
......@@ -133,4 +140,12 @@ public class PotentialCustomerQDTO extends BasePageInfo {
public void setHasMemberPhone(Integer 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 {
* @return
*/
ServiceResponse<Void> orderEventDelay(String params);
/**
* 处理微盟订单
* @param params
* @return
*/
ServiceResponse<Void> dealWeimoOrder(String params);
}
......@@ -33,10 +33,11 @@ public class InteractRecordExtendInfoBO implements Serializable {
private List<ExtendGoodsInfo> extendGoodsInfos;
/**
* 冗余的商品id
* 浏览商品事件冗余的商品id
*/
private List<String> goodsIds;
@Data
public static class ExtendGoodsInfo implements Serializable {
......
......@@ -21,6 +21,29 @@ public class MaterialMemberEOrderPojo extends BinlogBasePojo {
@JSONField(name = "enterprise_id")
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() {
return orderStatus;
}
......@@ -44,4 +67,36 @@ public class MaterialMemberEOrderPojo extends BinlogBasePojo {
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 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 {
@JSONField(name = "enterprise_id")
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() {
return orderStatus;
}
......@@ -43,4 +66,36 @@ public class MaterialMemberGicOrderPojo extends BinlogBasePojo {
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 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 {
* 购买商品时的 订单编号
*/
private String orderNumber;
/**
* 订单id
*/
private String orderId;
/**
* 查看商品时查看的商品id
*/
private String goodsId;
/**
* 是否是微盟商品
* true 是
* false 否
*/
private Boolean weimoGoodsFlag;
/**
* 货号
*/
private String goodsCode;
/**
* 商品名称
*/
private String goodsName;
/**
* 业务唯一标识
*/
......@@ -88,4 +112,12 @@ public class InteractRecordMessageBO implements Serializable {
private Integer bizType;
private String appKey;
/**
* 订单类型
* 1 微商城
* 2 基础线上单
* 3 基础线下单
*/
private Integer orderType;
}
......@@ -3,6 +3,8 @@ package com.gic.haoban.manage.service.pojo.qo.content;
import com.gic.api.base.commons.BasePageInfo;
import lombok.Data;
import java.util.List;
/**
* @Author MUSI
* @Date 2023/3/29 10:03 AM
......@@ -69,4 +71,16 @@ public class PotentialCustomerQO extends BasePageInfo {
* 1 会员有手机号
*/
private Integer hasMemberPhone;
/**
* 业务id
*/
private List<String> bizIds;
/**
* 1 按客户搜索
* 2 按素材搜索
* @see com.gic.haoban.manage.api.enums.content.InteractRecordSearchType
*/
private Integer searchType;
}
......@@ -2,6 +2,7 @@ package com.gic.haoban.manage.service.service.content.adaptor;
import com.alibaba.fastjson.JSON;
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 lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections.MapUtils;
......@@ -68,15 +69,21 @@ public class MessageConvertHelper {
String eventCode = jsonObject.getString("event_code");
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");
interactRecordMessageBO.setDurationTime(duration);
String orderNumber = cuspJson.getString("order_number");
interactRecordMessageBO.setOrderNumber(orderNumber);
String goodsId = cuspJson.getString("goods_id");
interactRecordMessageBO.setGoodsId(goodsId);
String runningUuid = jsonObject.getString("runningUuid");
interactRecordMessageBO.setBusinessUUId(runningUuid);
......@@ -115,15 +122,23 @@ public class MessageConvertHelper {
switch (eventCode) {
case "material_page":
case "material_page_duration":
return 1;
return MaterialInteractRecordEventType.VISIT_MATERIAL.getCode();
case "store_goods_detail":
return 2;
case "click_goods":
return MaterialInteractRecordEventType.VISIT_PRODUCT.getCode();
case "store_buy_sucess":
return 3;
case "store_add_cart":
return 4;
return MaterialInteractRecordEventType.ADD_SHOPPING_CART.getCode();
default:
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;
import com.gic.commons.util.UniqueIdUtils;
import com.gic.haoban.common.utils.PageUtil;
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.entity.TabHaobanExternalClerkRelated;
import com.gic.haoban.manage.service.entity.content.TabHaobanPotentialCustomer;
......@@ -85,6 +86,16 @@ public class PotentialCustomerServiceImpl implements PotentialCustomerService {
if (staffClerkRelationDTO == null) {
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());
PageHelper.startPage(potentialCustomerQO.getPageNum(), potentialCustomerQO.getPageSize());
com.github.pagehelper.Page<TabHaobanPotentialCustomer> pageResult =
......
......@@ -124,7 +124,10 @@ public class InteractRecordMessageService {
// 查询订单信息
String enterpriseId = context.getInteractRecordMessageBO().getEnterpriseId();
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) {
interactRecordBO.getExtendInfo().getExtendOrderInfos().add(extendOrderInfo);
}
......
package com.gic.haoban.manage.service.service.out.impl.content;
import cn.hutool.db.DaoTemplate;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.gic.api.base.commons.ServiceResponse;
......@@ -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.service.pojo.bo.content.InteractRecordBO;
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.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 org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
......@@ -35,6 +42,8 @@ public class MallOrderStatusChangeApiServiceImpl implements MallOrderStatusChang
@Autowired
InteractRecordMessageService interactRecordMessageService;
private static final String ORDER_EVENT_RETRY = "orderEventRetryMQ";
/***
......@@ -96,7 +105,7 @@ public class MallOrderStatusChangeApiServiceImpl implements MallOrderStatusChang
interactRecordMessageBO.setLastAccessTime(orderInfo.getCreateTime().getTime());
interactRecordMessageBO.setOrderNumber(orderEventMqBO.getOrderNumber());
interactRecordMessageBO.setTimes(orderEventMqBO.getTimes());
interactRecordMessageBO.setOrderType(1);
InteractRecordBO interactRecordBO = interactRecordMessageService.getInteractRecordBOWithOrderType(interactRecordMessageBO);
if (interactRecordBO == null) {
log.info("订单事件先到达,埋点事件延迟 >>> {}", JSON.toJSONString(interactRecordMessageBO));
......@@ -140,4 +149,41 @@ public class MallOrderStatusChangeApiServiceImpl implements MallOrderStatusChang
}
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;
import com.gic.binlog.base.entity.GicRecord;
import com.gic.binlog.base.entity.enums.GicRecordType;
import com.gic.commons.util.EntityUtil;
import com.gic.commons.util.GICMQClientUtil;
import com.gic.dubbo.entity.ProviderLocalTag;
import com.gic.haoban.manage.api.dto.FlushStoreMqDTO;
import com.gic.haoban.manage.api.enums.ChannelCodeEnum;
......@@ -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.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.MemberOrderBo;
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.PotentialCustomerService;
......@@ -48,8 +50,8 @@ public class KafkaMessageServiceImpl implements MessageListener<String, GicRecor
private final String GROUP = "tab_gic_store_group";
private final String tab_gic_eorder = "tab_gic_eorder";
private final String tab_gic_order = "tab_gic_order";
public static final String tab_gic_eorder = "tab_gic_eorder";
public static final String tab_gic_order = "tab_gic_order";
private final String tab_gic_member = "tab_gic_member";
......@@ -95,12 +97,19 @@ public class KafkaMessageServiceImpl implements MessageListener<String, GicRecor
logger.info("导购binlog无需监听");
}
else if (StringUtils.startsWith(record.value().getTableName(), tab_gic_eorder)) {
// 处理线上单微盟订单
MemberOrderBo memberOrderBo = EntityUtil.changeEntityByJSON(MemberOrderBo.class, pojo);
this.dealMemberOrder(memberOrderBo);
// 处理会员订单新增事件
dealMemberEOrder((MaterialMemberEOrderPojo) pojo);
}
else if (StringUtils.startsWith(record.value().getTableName(), tab_gic_order)) {
MemberOrderBo memberOrderBo = EntityUtil.changeEntityByJSON(MemberOrderBo.class, pojo);
this.dealMemberOrder(memberOrderBo);
// 处理会员订单新增事件
dealMemberGicOrder((MaterialMemberGicOrderPojo) pojo);
}else if (StringUtils.startsWith(record.value().getTableName(), tab_gic_member)) {
// 会员unionId新增事件
dealMemberUnionIdChange((MaterialMemberUnionIdPoJo) pojo);
......@@ -117,17 +126,25 @@ public class KafkaMessageServiceImpl implements MessageListener<String, GicRecor
} else if (record.getTableName().equals(GROUP)) {
return binlogMap(record.getFieldList(), record.getRecordType(), GroupSyncPojo.class);
}else if (StringUtils.startsWith(record.getTableName(), tab_gic_eorder)) {
Map<String, String> mid = new HashMap<>();
for (GicField gicField : record.getFieldList()) {
mid.put(gicField.getName(), gicField.getValue());
if (GicRecordType.INSERT.equals(record.getRecordType())) {
Map<String, String> mid = new HashMap<>();
for (GicField gicField : record.getFieldList()) {
mid.put(gicField.getName(), gicField.getValue());
}
MaterialMemberEOrderPojo materialMemberEOrderPojo = JSON.parseObject(JSON.toJSONString(mid), MaterialMemberEOrderPojo.class);
materialMemberEOrderPojo.setTableName(tab_gic_eorder);
return materialMemberEOrderPojo;
}
return JSON.parseObject(JSON.toJSONString(mid), MaterialMemberEOrderPojo.class);
}else if (StringUtils.startsWith(record.getTableName(), tab_gic_order)) {
Map<String, String> mid = new HashMap<>();
for (GicField gicField : record.getFieldList()) {
mid.put(gicField.getName(), gicField.getValue());
if (GicRecordType.INSERT.equals(record.getRecordType())) {
Map<String, String> mid = new HashMap<>();
for (GicField gicField : record.getFieldList()) {
mid.put(gicField.getName(), gicField.getValue());
}
MaterialMemberGicOrderPojo materialMemberGicOrderPojo = JSON.parseObject(JSON.toJSONString(mid), MaterialMemberGicOrderPojo.class);
materialMemberGicOrderPojo.setTableName(tab_gic_order);
return materialMemberGicOrderPojo;
}
return JSON.parseObject(JSON.toJSONString(mid), MaterialMemberGicOrderPojo.class);
} else if (StringUtils.startsWith(record.getTableName(), tab_gic_member)) {
GicRecordType recordType = record.getRecordType();
......@@ -287,4 +304,20 @@ public class KafkaMessageServiceImpl implements MessageListener<String, GicRecor
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 @@
<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
</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>
customer.clerk_id = #{clerkId} and customer.delete_flag = 0
<if test="enterpriseId != null and enterpriseId != ''">
......
......@@ -64,4 +64,11 @@ public class PotentialCustomerQO extends BasePageInfo {
*/
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