电商带货功能架构:商品展示、营销联动与直播下单归因全链路解析
本文覆盖范围:聚焦久滴直播电商平台(JiuDi-LiveMall)的电商带货功能体系,包括直播间商品展示与购物车同步、单 SKU/多 SKU 购买策略、秒杀/优惠券营销联动推送、直播下单归因与订单溯源、购物车预占锁定机制、录制回放带货与商品时间线,以及佣金结算链路。适合对直播电商商业化实现感兴趣的后端和产品开发者阅读。
引言
直播带货是当前电商行业最具活力的商业模式。一个生产级直播电商平台的带货功能远不止"在直播间挂商品链接"那么简单——它需要解决商品与直播上下文的强绑定、限时优惠与弹幕流的实时联动、高并发下单的库存安全、订单来源的精准归因、以及直播结束后通过回放延续带货价值等一系列技术挑战。
本文以久滴直播电商平台(JiuDi-LiveMall)为蓝本,深入剖析电商带货功能的完整技术链路。平台后端基于 Spring Boot 3 + MyBatis-Plus,前端采用 uni-app 多端框架,商城模块复用成熟的电商交易引擎,并通过 order_relation、cart_sync 等关联表实现直播场景下的订单归因与购物车同步。
阅读本文前,建议先了解 《直播系统核心技术架构》,掌握推拉流、IM 弹幕通信、SPI 可插拔架构等直播基础设施。
一、直播间商品展示与购物车同步
1.1 商品管理数据模型
直播间商品通过 LiveProductBaseInfoDO 表管理,核心字段包括:
liveId:关联的直播 IDspuId:关联的商城 SPU 商品 IDspuName:直播专属商品名称(可覆盖原商品名)displayOrder:展示顺序(主播可调整商品排列)livePrice:直播专属价格startTime / endTime:可售时间窗口(支持定时上架/下架)
这种设计将直播商品与商城 SPU 解耦:同一件商品在不同直播间可以有不同的专属名称、价格和可售时间,互不干扰。
1.2 商品列表 API 与前端渲染
后端通过 LiveProductServiceApi 提供商品列表查询,前端调用 getLiveSpuListApi 获取并渲染:
// 前端 API
export const getLiveSpuListApi = (data = {}): Promise<ILiveSpuItem[]> => {
return get('product/spu/live-spu-list', data)
}
商品列表弹窗 popup-prods.vue 展示了完整的商品卡片:序号标签、商品图片、价格、"讲解中"动画、加购物车/抢购按钮。当主播在管理端点击"正在讲解"某件商品时,前端对应商品卡片会高亮展示并播放动画,引导观众关注。
1.3 购物车同步表(cart_sync)
直播场景下的购物车与普通商城购物车有本质区别——它需要与直播上下文、限时优惠、购买限制进行强绑定。cart_sync 表承担了这一职责:
| 字段 | 类型 | 说明 |
|---|---|---|
user_id |
bigint | 用户 ID |
live_id |
bigint | 关联的直播 ID(可为空) |
product_id |
bigint | 商品 ID |
sku_id |
bigint | SKU ID |
quantity |
int | 数量 |
status |
tinyint | 状态:待确认 / 已锁定 / 已失效 |
lock_time |
datetime | 下单预占锁定时间 |
expire_time |
datetime | 超时释放时间 |
coupon_id |
bigint | 关联优惠券 ID |
activity_id |
bigint | 关联营销活动 ID |
buy_limit |
int | 购买限制(0 = 不限购) |
used_limit |
int | 已使用限购次数 |
业务流程:
新增/更新购物车项
→ 校验 buy_limit / used_limit
→ 通过?→ 设置状态 = 待确认 → 持久化 cart_sync
→ 下单预占?→ 状态 = 已锁定,记录 lock_time / expire_time
→ 未通过?→ 拒绝并提示
关键设计点:
buy_limit > 0时,每次加购需校验used_limit是否已达上限,实现直播间限购coupon_id/activity_id将购物车项与直播限时优惠绑定lock_time+expire_time实现下单预占机制:锁定库存后超时未支付自动释放
二、单 SKU 与多 SKU 的购买策略
直播间购买需要兼顾"快速下单"和"规格选择"两种场景:
const addCartOrBuy = async (item: ILiveSpuItem, isAddCart = true) => {
if (!store.isLogin) {
return navigateTo('pkg-common/login') // 未登录跳登录页
}
await getSpuDetail(item.id)
// 单规格商品:直接加入购物车或购买
if (!item.specType) {
if (isAddCart) { onAddCart() }
else { onBuy() }
} else {
// 多规格商品:弹出 SKU 选择弹窗
popupSpecificationRef.value?.open()
}
}
2.1 加入购物车
const onAddCart = async () => {
await addCartApi({
skuId: settlementSku.value?.id,
count: prodCount.value,
})
showToast('已添加至购物车')
}
2.2 直接购买(跳过购物车)
直播场景中,限时秒杀类商品通常需要跳过购物车直接下单:
const onBuy = () => {
uni.setStorageSync(StorageKeyEnum.PROD_ORDER_INFO, {
prodInfoList: [{ picUrl, name, price, count, spuId: detail.value.id }],
items: [{ skuId, count }],
})
navigateTo('pkg-mall/submit-order')
}
商品信息存入本地存储后跳转到提交订单页,订单页读取本地存储还原商品快照,复用商城通用的订单创建和支付流程。
2.3 下单全链路时序
观众 → 选择商品下单
→ 商城服务:创建订单 + 库存预占
→ 支付服务:创建支付单
→ 支付成功回调
→ 商城服务:确认订单 + 扣减库存
→ 直播服务:更新订单状态/写入 order_relation
→ 观众:发货/物流信息
高并发场景下的关键保障:
- 削峰填谷:秒杀活动使用消息队列异步处理订单
- 幂等设计:支付回调通过订单号去重,防止重复处理
- 库存预占:下单时预扣库存,超时未支付自动回滚
三、营销联动:秒杀/优惠券推送到直播间群
这是直播系统中最具商业价值的部分——将营销活动实时推送到直播间弹幕流中,让观众在观看直播的同时收到优惠信息。
3.1 秒杀活动推送
LiveMarketingService 负责查询商品的营销状态并向直播间 IM 群推送:
@Override
public void pushSeckillToLiveGroup(Long liveId, Long seckillActivityId) {
// 1. 通过 liveId 找到对应的 streamName(即群 GroupId)
String groupId = getGroupIdByLiveId(liveId);
// 2. 查询秒杀活动详情
SeckillActivityRespApiDTO activity = seckillActivityApi.getSeckillActivity(seckillActivityId);
// 3. 构造消息文本
String content = String.format("【秒杀活动】%s 火热进行中!限时抢购,手慢无!", activity.getName());
// 4. 通过 IM Provider 推送到群
tencentService.sendGroupSystemMessage(groupId, content);
}
3.2 优惠券推送
优惠券推送逻辑类似,通过 ImProviderSPI 将优惠券信息以系统通知形式发送到直播间群:
@Override
public void pushCouponToLiveGroup(Long liveId, Long couponTemplateId) {
String groupId = getGroupIdByLiveId(liveId);
CouponTemplateRespApiDTO template = couponApi.getCouponTemplate(couponTemplateId);
String content = String.format("【优惠券福利】%s 已上线,快来领取吧!", template.getName());
tencentService.sendGroupSystemMessage(groupId, content);
}
3.3 完整调用链路
管理后台/主播端 → POST /txlive/marketing/push-activity
→ AppLiveMarketingController.pushActivityToLiveGroup()
→ LiveMarketingService.pushSeckillToLiveGroup()
→ ImProviderSPI.sendGroupSystemMessage(groupId, content)
→ 腾讯云 IM REST API → 客户端 MESSAGE_RECEIVED 事件
→ live-chat.vue 渲染系统通知
3.4 前端系统通知渲染
前端 live-chat.vue 中,系统通知(notification)与普通弹幕消息使用不同的样式,确保用户一眼就能区分营销信息和用户弹幕:
<!-- 系统通知:竖排展示"系统通知"四个字 + 消息内容 -->
<view class="msg-detail">
<text class="msg-detail-username" v-for="(i, idx) in '系统通知'" :key="idx">{{ i }}</text>
<text class="msg-detail-username">:</text>
<text class="msg-detail-content sys-content" v-for="(i, idx) in notification" :key="idx">{{ i }}</text>
</view>
这种设计让秒杀活动、优惠券发放等营销信息以醒目的"系统通知"样式出现在弹幕流中,有效提升转化率。
四、直播下单归因:从订单到直播间的精准溯源
4.1 订单关联表(order_relation)
直播下单归因是整个带货体系的数据基石。order_relation 表记录订单与直播、商品、SKU、营销、分佣等多维关系的明细:
| 字段 | 类型 | 说明 |
|---|---|---|
order_id |
bigint | 订单 ID |
order_item_id |
bigint | 订单行 ID |
live_id |
bigint | 关联直播 ID(来源为直播时必填) |
product_id |
bigint | 商品 ID |
sku_id |
bigint | SKU ID |
snapshot_json |
text | 商品快照(JSON,用于售后回溯) |
unit_price |
decimal(10,2) | 单价 |
quantity |
int | 数量 |
pay_amount |
decimal(10,2) | 实付金额 |
freight_amount |
decimal(10,2) | 运费 |
discount_amount |
decimal(10,2) | 优惠金额 |
source_type |
tinyint | 来源渠道(直播 / 普通 / 分享等) |
distributor_id |
bigint | 分销员 ID |
commission_rate |
decimal(5,4) | 佣金比例(0~1) |
commission_base |
decimal(10,2) | 佣金基数 |
settle_status |
tinyint | 结算状态:未结算 / 已结算 / 失败 |
settle_batch_no |
varchar | 结算批次号 |
settle_time |
datetime | 结算时间 |
核心业务规则:
source_type = 直播时,live_id必填,建立订单与直播间的强关联commission_rate/commission_base用于后续主播/分销员的佣金结算settle_status变更需幂等处理,settle_batch_no用于对账snapshot_json保存下单时的商品快照,用于售后与争议回溯
4.2 归因数据流
客户端提交订单(携带 liveId + source_type)
→ 订单服务:创建订单
→ 商品服务:校验库存、锁定
→ 营销服务:核销优惠券/活动
→ 写入 order_relation(live_id, product_id, sku_id, commission_*)
→ 支付成功 → 更新 settle_status
4.3 转化漏斗追踪
基于 order_relation 的数据,系统构建了完整的直播带货转化漏斗:
曝光 → 点击 → 加购 → 下单 → 支付
每个环节的数据指标:
- 观看人数:UV、PV、峰值并发、平均观看时长
- 互动数据:弹幕条数、点赞、分享、商品点击/加购/成交
- 收益报表:带货佣金、退款、净收益、分润结算
管理后台可按 live_id 聚合查询每场直播的 GMV(成交总额)、客单价、转化率等核心指标。
五、录制回放带货:直播结束后的持续变现
直播结束并不意味着带货终止。通过录制回放机制,直播内容可以转化为点播视频持续产生商业价值。
5.1 从直播到回放的生命周期
直播结束回调 → 匹配录制配置 → 创建回放记录(草稿)
→ 初始化转码任务(多清晰度)→ 转码完成 → 状态 = 可用
→ 前端展示回放入口 → 关联商品列表 → 继续带货
后端在直播状态为"已结束"时,自动关联录制记录:
if (LiveStatusEnum.LIVING_END.getStatus().equals(status)) {
// 获取该直播间所有的直播回放视频记录
VodLiveBaseRecordInfoPageReqVO recordInfoPageReqVO = new VodLiveBaseRecordInfoPageReqVO();
recordInfoPageReqVO.setStreamId(streamName);
PageResult<VodLiveBaseRecordInfoDO> pageResult = vodLiveBaseRecordInfoService
.getVodLiveBaseRecordInfoPage(recordInfoPageReqVO);
appLiveRoomLiveResVO.setBaseRecordInfoRespVOList(
BeanUtils.toBean(pageResult.getList(), VodLiveBaseRecordInfoRespVO.class)
);
}
5.2 回放视频数据模型
回放视频记录(VodLiveBaseRecordInfoDO)核心字段:
| 字段 | 说明 |
|---|---|
live_id |
关联直播会话 |
media_id |
云点播平台视频 ID |
source_file_url |
源文件地址 |
transcoded_urls |
转码后地址集合(多清晰度) |
duration |
播放时长 |
clarity |
清晰度(720p / 1080p / 原画) |
cover_url |
封面图 |
status |
状态:草稿 / 转码中 / 可用 / 不可用 |
5.3 回放播放与商品时间线
回放播放器支持点播、进度控制、清晰度切换和倍速播放:
前端播放器 → 后端回放接口:请求回放信息(视频 ID)
→ 云点播服务:获取媒体信息与播放地址
→ 返回播放 URL / 清晰度列表 / 封面
→ 播放器按清晰度/倍速加载片段
商品时间线是回放带货的核心能力:回放视频播放时,前端根据时间戳同步展示对应时间点的商品卡片。观众在观看回放时,可以看到"当前主播正在讲解的商品",并直接点击下单——就像在看直播一样。
实现思路:
- 直播过程中,每次主播切换"正在讲解"的商品时,记录
{ timestamp, productId }到商品时间线表 - 回放播放时,前端监听播放进度(
currentTime),匹配时间线中的商品记录 - 当播放进度越过某个商品时间点时,自动弹出对应商品卡片
这使得回放视频不仅是内容回顾,更是一个持续运转的"无人直播间"。
5.4 回放带货的订单归因
回放产生的订单同样通过 order_relation 归因,但 source_type 标记为回放来源,与实时直播订单区分。这让运营团队可以精确分析:
- 实时直播 GMV vs 回放带货 GMV
- 各场回放的转化率和客单价
- 回放带货的长尾效应衰减曲线
六、佣金结算与主播分润
直播带货的商业闭环最终落在结算环节。基于 order_relation 中的佣金信息,系统按周期进行结算:
定时任务/事件触发
→ 聚合订单明细(order_relation)
→ 计算佣金 / 平台抽成 / 分销奖励
→ 生成草稿结算单(commission_settle)
→ 审核确认 → 发起打款
→ 打款成功 → 状态 = 已打款,回填 transfer_no
→ 打款失败 → 状态 = 失败,记录 fail_reason
关键设计点:
batch_no幂等:每个结算批次号唯一,防止重复打款settle_status流转受风控与打款结果影响transfer_no记录打款流水号,用于对账period字段支持按周期汇总,便于报表与审计
七、营销接口总览
| 方法 | 路径 | 功能 |
|---|---|---|
| GET | /txlive/marketing/product-list |
获取直播间商品营销列表 |
| POST | /txlive/marketing/push-activity |
推送活动信息到直播群 |
八、高并发场景下的性能保障
8.1 高并发下单
直播秒杀场景下的瞬时并发可达数万 QPS,系统通过以下策略保障稳定性:
- 削峰填谷:秒杀订单通过消息队列异步处理,避免数据库瞬间过载
- 幂等设计:基于订单号的去重机制,防止网络重试导致重复扣款
- 库存预占:下单时通过 Redis 原子操作预扣库存,超时未支付自动回滚
8.2 商品列表缓存
直播间商品列表访问频率高,通过 Redis 缓存热点数据,商品变更时主动失效缓存。
8.3 购物车状态机
cart_sync 表通过状态机(待确认 → 已锁定 → 已失效)管理购物车项的生命周期,配合 expire_time 定时清理过期锁定,避免库存被长期占用。
总结
本文深入剖析了久滴直播电商平台的电商带货功能架构,涵盖以下关键主题:
- 商品展示与购物车:
LiveProductBaseInfoDO管理直播专属商品,cart_sync表实现直播上下文下的购物车同步、限购和预占锁定 - 购买策略:单 SKU 快速下单 + 多 SKU 规格选择,兼顾直播场景的即时性需求
- 营销联动:秒杀活动和优惠券通过
ImProviderSPI.sendGroupSystemMessage()实时推送到直播间弹幕流,以"系统通知"样式触达观众 - 下单归因:
order_relation表建立订单与直播间、商品、营销、分佣的多维关联,支撑精准归因和佣金结算 - 录制回放带货:直播结束后通过回放视频 + 商品时间线实现持续变现,回放订单独立归因
- 佣金结算:基于
order_relation的佣金字段,按周期聚合结算,支持幂等打款和对账
电商带货功能建立在坚实的直播基础设施之上——推拉流、IM 弹幕、SPI 可插拔架构等技术细节,请参阅 《直播系统核心技术架构》。
技术栈:Spring Boot 3 + MyBatis-Plus + Redis + 腾讯云 IM/VOD + uni-app
源码参考:本文所涉代码来自久滴直播电商平台(JiuDi-LiveMall)Pro 项目,久滴科技官网:https://kudi.net.cn/
延伸阅读:直播系统核心技术架构 — 推拉流鉴权、IM 弹幕通信、播放器集成、SPI 可插拔云服务设计
更多推荐


所有评论(0)