Skip to content

Latest commit

 

History

77 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Live Auction System

面向抖音电商场景的独立全栈直播拍卖系统

双端体验 · DDD 六边形后端 · B' 高并发竞价链路 · Redis Lua + Kafka Decision Log · 实时房间恢复

Java 17 Spring Boot 3.3 React 18 TypeScript 5.7 pnpm 9

项目仓库:github.com/Yager-42/BD · 在线 Demo:买家 H5 / 拍卖运营端 PC · 技术报告:docs/live-auction-technical-report.md · API 健康检查:/api/health


比赛信息

项目 信息
赛事 2026 字节 AI 全栈挑战赛
场景 抖音电商直播拍卖
项目 Live Auction System
参赛者 阮睿
学校/组织 华南理工大学
GitHub Yager-42
邮箱 331382125@qq.com
个人主页 https://github.com/Yager-42
项目仓库 https://github.com/Yager-42/BD

项目简介

Live Auction System 是一个独立全栈直播拍卖平台,覆盖拍卖运营端、买家 H5、游客浏览、单品拍卖、实时竞价、虚拟币冻结/结算、房间实时事件和运营分析看板。

项目重点不只是把拍卖流程跑通,而是把高并发竞价里的确认边界做清楚:HTTP 提交成功只代表 Bid Attempt 进入权威处理链路,真正用户可见的接受/拒绝结果必须经过 Redis Lua 原子决策和 Kafka Decision Log。

解决的核心痛点

常见直播竞价问题 Live Auction System
多买家同时出价导致价格、排名、钱包冻结不一致 Redis Lua 统一处理价格、领先者、倒计时、热钱包和 Top30 排名
HTTP 成功容易被误当作出价成功 区分 Bid Attempt、Pending Confirmation 和 Accepted Bid
WebSocket 延迟或断线后房间状态不可恢复 WebSocket 只做通知,客户端重连后用 Auction Room Snapshot 恢复
竞价结果缺少确认前持久日志 Kafka decisions.v2 作为当前默认 Decision Log
运营端只能看到结果,难以定位链路问题 提供 Auction Operator Analytics 和 Auction Chain Observability
前后端类型容易漂移 packages/api-contracts 维护共享传输契约

核心特性

  • 拍卖运营端 PC - 产品管理、拍卖创建、规则配置、发布/开拍/结束/取消、结算订单和运营分析。
  • 买家 H5 - 公共拍卖列表、拍卖房间、实时排名、出价、提醒、钱包、拍卖历史和结算订单。
  • 游客浏览 - 未登录用户可浏览公开拍卖和拍卖房间,但不能出价、订阅提醒或查看钱包/历史。
  • B' 高并发竞价链路 - RocketMQ 有序命令输入、Redis Lua 原子决策、Kafka Decision Log、WebSocket 房间广播、MySQL 投影。
  • 实时房间恢复 - Snapshot + STOMP room events,WebSocket 事件延迟时仍可通过版本化快照修复状态。
  • 资金与结算闭环 - 虚拟币初始化、出价冻结、领先者切换释放、成交扣减、买家/运营端订单查询。
  • 可观测性与诊断 - 健康检查、链路诊断、请求关联、投影 checkpoint、运行态分析指标。

系统架构

┌──────────────────────────────────────────────────────────────────────────────┐
│ Frontend                                                                      │
│                                                                              │
│  Merchant PC (React + Vite)             Buyer H5 (React + Vite)              │
│  http://localhost:5173                  http://localhost:5174                │
│  Products / Auctions / Analytics        List / Room / Bid / Wallet / History │
└───────────────────────────────┬──────────────────────────────────────────────┘
                                │ HTTP API + STOMP WebSocket
┌───────────────────────────────▼──────────────────────────────────────────────┐
│ Spring Boot API Layer                                                         │
│                                                                              │
│  Auth / Product / Auction / Bidding / Wallet / Settlement / Analytics        │
│  Public Auction List / Auction Room Snapshot / Observability                 │
└───────────────────────────────┬──────────────────────────────────────────────┘
                                │
┌───────────────────────────────▼──────────────────────────────────────────────┐
│ DDD + Hexagonal Backend                                                       │
│                                                                              │
│  trigger -> api -> case -> domain <- infrastructure                          │
│  Controller/MQ/Job    DTO    Use Case    Domain Model      Repository/Port   │
└───────────────────────────────┬──────────────────────────────────────────────┘
                                │
┌───────────────────────────────▼──────────────────────────────────────────────┐
│ B' High-Concurrency Auction Path                                              │
│                                                                              │
│  HTTP Bid Attempt                                                             │
│    -> RocketMQ commands.v2 ordered input                                      │
│    -> Redis Lua authoritative decision                                        │
│    -> Kafka decisions.v2 Decision Log                                         │
│    -> Kafka fanout consumer -> WebSocket room events                          │
│    -> Kafka projection consumer -> MySQL facts/checkpoints                    │
└──────────────────────────────────────────────────────────────────────────────┘

关键边界

边界 当前实现
实时竞价状态权威 Redis Lua,维护当前价、领先者、倒计时、热钱包、Top30 和 command replay
用户可见确认边界 Kafka live-auction.auction-decisions.v2 Decision Log
通知通道 WebSocket/STOMP room events,可延迟,可由 snapshot 修复
长期业务事实 MySQL,存储产品、拍卖、出价事实、钱包、结算和投影 checkpoint
命令输入排序 RocketMQ live-auction.auction-commands.v2,按 auctionId 有序处理
前端传输契约 后端 API DTO + packages/api-contracts

快速开始

环境要求

  • JDK 17+
  • Maven 3.8+
  • Node.js 20+
  • pnpm 9+
  • Docker Engine 24+,Docker Compose v2+
  • screen,用于一键 Demo 脚本后台启动多进程

本地开发

# 1. 克隆项目
git clone https://github.com/Yager-42/BD.git
cd BD

# 2. 安装前端依赖
pnpm install

# 3. 启动中间件
cp .env.example .env
docker compose up -d mysql redis kafka rocketmq-namesrv rocketmq-broker

# 4. 编译后端
mvn -f backend/pom.xml -q install -DskipTests

# 5. 启动后端
mvn -f backend/pom.xml -pl live-auction-app spring-boot:run

# 6. 启动两个前端
pnpm dev:merchant
pnpm dev:buyer

访问地址:

服务 地址
后端健康检查 http://localhost:8080/api/health
拍卖运营端 PC http://localhost:5173
买家 H5 http://localhost:5174

在线演示

已部署的演示环境:

服务 地址
买家 H5 http://101.96.237.129/auctions
拍卖运营端 PC http://101.96.237.129/dashboard
后端健康检查 http://101.96.237.129/api/health

一键 Demo

pnpm install
bash scripts/start-live-auction-demo.sh

脚本会启动 MySQL、Redis、Kafka、RocketMQ、后端、两个前端和自动造数竞价流。日志默认写入:

/tmp/live-auction-demo-logs

查看后台会话:

screen -ls | grep live-auction

Demo 场景

场景 体验入口 说明
运营端拍卖管理 线上 PC / http://localhost:5173 创建产品、配置规则、发布/开拍/结束/取消拍卖
买家 H5 竞价 线上 H5 / http://localhost:5174 浏览拍卖、进入房间、提交出价、查看排名和钱包
自动竞价流 scripts/e2e-smoke/live-auction-demo-stream.mjs 自动创建运营者、买家、拍卖和周期性出价
API 冒烟链路 pnpm smoke:api 覆盖注册、登录、产品、拍卖、钱包、出价、结算、分析
资金闭环检查 scripts/e2e-smoke/live-auction-funds-chain.mjs 验证成交、钱包扣减和双方结算订单

技术栈

层级 技术 选型依据
后端 Java 17 + Spring Boot 3.3 稳定的企业级 Web、事务、调度和消息集成能力
架构 DDD + Hexagonal Architecture 区分 trigger/api/case/domain/infrastructure,控制依赖方向
数据库 MySQL 8.4 长期业务事实、查询模型、钱包、结算和 projection checkpoint
热状态 Redis 7.4 + Lua 单拍卖房间内原子竞价决策和热钱包占用
命令输入 RocketMQ 5.3 按拍卖维度有序处理 Bid Attempt command
决策日志 Kafka 3.8 当前默认 B' Decision Log,支持 fanout 和 MySQL projection
实时推送 STOMP WebSocket 房间加入、心跳、离开和竞价事件广播
前端 React 18 + Vite 6 + TypeScript 双端工程化、快速开发、共享 API 契约
契约 @live-auction/api-contracts 前端使用共享 DTO 类型,降低传输契约漂移
测试 JUnit 5 / Vitest / Node test / k6 scripts 覆盖领域、基础设施、触发器、前端状态和负载脚本
部署 Docker Compose + shell scripts 本地和云端演示环境可复现

项目结构

bytedance/
├── apps/
│   ├── merchant-pc/                 # 拍卖运营端 PC,React + Vite
│   └── buyer-h5/                    # 买家 H5,React + Vite
├── backend/
│   ├── live-auction-types/          # 通用响应、错误、认证、时间和事件基础类型
│   ├── live-auction-domain/         # 聚合、实体、值对象、领域服务和端口接口
│   ├── live-auction-api/            # 后端请求/响应 DTO 和外部 API 契约
│   ├── live-auction-case/           # 应用用例编排和事务边界
│   ├── live-auction-infrastructure/ # Repository、Port、DAO、Redis、Gateway、技术配置
│   ├── live-auction-trigger/        # HTTP Controller、MQ/Kafka Listener、Scheduler、WebSocket
│   └── live-auction-app/            # Spring Boot 启动模块
├── packages/
│   └── api-contracts/               # 前端共享 TypeScript 传输契约
├── docs/
│   ├── README.md                    # 当前实现和历史文档导航
│   ├── live-auction-technical-report.md
│   ├── auction-room-recovery-contract.md
│   ├── data-governance/
│   └── superpowers/                 # 设计与实现计划归档
├── scripts/
│   ├── e2e-smoke/                   # API、Demo、资金链路冒烟脚本
│   ├── loadtest/                    # k6 负载测试与夹具准备
│   └── start-live-auction-demo.sh   # 本地一键 Demo
├── docker-compose.yml               # MySQL / Redis / Kafka / RocketMQ
├── package.json                     # pnpm workspace 脚本
└── README.md

API 文档

当前仓库没有单独的 Swagger/OpenAPI 页面配置,核心接口可从 Controller 和冒烟脚本查看。

核心接口

方法 路径 说明
GET /api/health 后端健康检查
POST /api/auth/register 注册账号
POST /api/auth/login 登录并获取访问令牌
POST /api/auction-operators/activation 激活拍卖运营者身份
POST /api/auction-operators/products 创建拍卖产品
POST /api/auction-operators/products/{productId}/auctions 为产品创建拍卖
PUT /api/auction-operators/auctions/{auctionId}/rule 配置拍卖规则
POST /api/auction-operators/auctions/{auctionId}/publish 发布拍卖
POST /api/auction-operators/auctions/{auctionId}/start 开始拍卖
GET /api/public/auctions 游客/买家公开拍卖列表
GET /api/public/auction-rooms/{auctionId}/snapshot 拍卖房间快照
POST /api/buyer/auctions/{auctionId}/bid-attempts 买家提交出价尝试
POST /api/buyer/wallet/initialize 初始化买家虚拟币钱包
GET /api/buyer/wallet 查询买家钱包
GET /api/buyer/auction-history 查询买家拍卖历史
GET /api/auction-operators/analytics/overview 运营端分析总览
GET /api/auction-operators/analytics/rooms/{auctionId} 单场拍卖监控
GET /api/auction-operators/observability/auction-sessions/{auctionId}/chain 拍卖链路诊断

快速体验

# 健康检查
curl -s http://localhost:8080/api/health

# 运行端到端 API 冒烟
API_BASE_URL=http://localhost:8080 pnpm smoke:api

Honest Status

功能 状态 说明
账号注册、登录、JWT 认证 Built 支持买家和拍卖运营者身份边界
拍卖运营端 PC Built 产品、拍卖、规则、结算、分析和链路诊断
买家 H5 Built 拍卖列表、房间、出价、提醒、钱包、历史
游客浏览 Built 可浏览公开拍卖和房间快照
B' 高并发竞价链路 Built RocketMQ command、Redis Lua、Kafka Decision Log、MySQL projection
WebSocket 房间事件 Built STOMP join/heartbeat/leave 和竞价事件广播
Snapshot 恢复契约 Built 房间状态以 snapshot 修复通知延迟或断线
虚拟币钱包和结算订单 Built 冻结、释放、成交扣减和双方订单查询
Auction Operator Analytics Built V1 使用 MySQL-only 指标链路
Doris/Canal 分析增强 Planned 文档和 schema 存在,非 V1 默认核心链路
Swagger/OpenAPI 页面 Planned 当前以 Controller、DTO 和冒烟脚本作为 API 入口
在线 Demo 地址 Built 买家 H5、运营端 PC 和后端健康检查已部署在 101.96.237.129

关键文档

文档 用途
CONTEXT.md 领域语言、术语边界和容易混淆的概念
docs/README.md 当前实现快照、权威文档和历史文档导航
backend/ARCHITECTURE.md 后端 DDD/六边形模块边界
docs/live-auction-technical-report.md 比赛提交技术报告
docs/auction-room-recovery-contract.md Auction Room snapshot、STOMP、重连和版本恢复规则
docs/data-governance/metric-definitions.md 运营端看板和房间监控指标定义
docs/adr/0002-use-backend-api-dtos-as-frontend-transport-contract-authority.md 后端 API DTO 作为前后端传输契约权威
docs/adr/0003-use-mysql-only-for-v1-auction-operator-analytics.md V1 分析链路 MySQL-only 决策

常用命令

# 前端类型检查
pnpm typecheck

# 前端测试
pnpm test

# 后端全量测试
mvn -f backend/pom.xml test

# 后端打包
mvn -f backend/pom.xml -pl live-auction-app -am -DskipTests install

# API 冒烟
API_BASE_URL=http://localhost:8080 pnpm smoke:api

# 本地 Demo
bash scripts/start-live-auction-demo.sh

提交材料

材料 地址
GitHub 仓库 https://github.com/Yager-42/BD
在线买家 H5 http://101.96.237.129/auctions
在线拍卖运营端 PC http://101.96.237.129/dashboard
后端健康检查 http://101.96.237.129/api/health
技术报告 docs/live-auction-technical-report.md

本仓库按参赛提交要求暂不新增 License。

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages