本文覆盖范围:聚焦久滴直播电商平台(JiuDi-LiveMall)的电商带货功能体系,包括直播间商品展示与购物车同步、单 SKU/多 SKU 购买策略、秒杀/优惠券营销联动推送、直播下单归因与订单溯源、购物车预占锁定机制、录制回放带货与商品时间线,以及佣金结算链路。适合对直播电商商业化实现感兴趣的后端和产品开发者阅读。


引言

直播带货是当前电商行业最具活力的商业模式。一个生产级直播电商平台的带货功能远不止"在直播间挂商品链接"那么简单——它需要解决商品与直播上下文的强绑定、限时优惠与弹幕流的实时联动、高并发下单的库存安全、订单来源的精准归因、以及直播结束后通过回放延续带货价值等一系列技术挑战。

本文以久滴直播电商平台(JiuDi-LiveMall)为蓝本,深入剖析电商带货功能的完整技术链路。平台后端基于 Spring Boot 3 + MyBatis-Plus,前端采用 uni-app 多端框架,商城模块复用成熟的电商交易引擎,并通过 order_relationcart_sync 等关联表实现直播场景下的订单归因与购物车同步。

阅读本文前,建议先了解 《直播系统核心技术架构》,掌握推拉流、IM 弹幕通信、SPI 可插拔架构等直播基础设施。


一、直播间商品展示与购物车同步

1.1 商品管理数据模型

直播间商品通过 LiveProductBaseInfoDO 表管理,核心字段包括:

  • liveId:关联的直播 ID
  • spuId:关联的商城 SPU 商品 ID
  • spuName:直播专属商品名称(可覆盖原商品名)
  • 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 / 清晰度列表 / 封面
            → 播放器按清晰度/倍速加载片段

商品时间线是回放带货的核心能力:回放视频播放时,前端根据时间戳同步展示对应时间点的商品卡片。观众在观看回放时,可以看到"当前主播正在讲解的商品",并直接点击下单——就像在看直播一样。

实现思路:

  1. 直播过程中,每次主播切换"正在讲解"的商品时,记录 { timestamp, productId } 到商品时间线表
  2. 回放播放时,前端监听播放进度(currentTime),匹配时间线中的商品记录
  3. 当播放进度越过某个商品时间点时,自动弹出对应商品卡片

这使得回放视频不仅是内容回顾,更是一个持续运转的"无人直播间"。

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 定时清理过期锁定,避免库存被长期占用。


总结

本文深入剖析了久滴直播电商平台的电商带货功能架构,涵盖以下关键主题:

  1. 商品展示与购物车LiveProductBaseInfoDO 管理直播专属商品,cart_sync 表实现直播上下文下的购物车同步、限购和预占锁定
  2. 购买策略:单 SKU 快速下单 + 多 SKU 规格选择,兼顾直播场景的即时性需求
  3. 营销联动:秒杀活动和优惠券通过 ImProviderSPI.sendGroupSystemMessage() 实时推送到直播间弹幕流,以"系统通知"样式触达观众
  4. 下单归因order_relation 表建立订单与直播间、商品、营销、分佣的多维关联,支撑精准归因和佣金结算
  5. 录制回放带货:直播结束后通过回放视频 + 商品时间线实现持续变现,回放订单独立归因
  6. 佣金结算:基于 order_relation 的佣金字段,按周期聚合结算,支持幂等打款和对账

电商带货功能建立在坚实的直播基础设施之上——推拉流、IM 弹幕、SPI 可插拔架构等技术细节,请参阅 《直播系统核心技术架构》


技术栈:Spring Boot 3 + MyBatis-Plus + Redis + 腾讯云 IM/VOD + uni-app

源码参考:本文所涉代码来自久滴直播电商平台(JiuDi-LiveMall)Pro 项目,久滴科技官网:https://kudi.net.cn/

延伸阅读直播系统核心技术架构 — 推拉流鉴权、IM 弹幕通信、播放器集成、SPI 可插拔云服务设计

Logo

电商企业物流数字化转型必备!快递鸟 API 接口,72 小时快速完成物流系统集成。全流程实战1V1指导,营造开放的API技术生态圈。

更多推荐