省钱兄 JAVA 台球赛事比赛报名系统源码 支持小程序+公众号+H5
✅ 支持 小程序 + 公众号 + H5 三端全覆盖(注:本版本不含APP)
开发商:西安省钱兄网络科技有限公司
售价:¥8,889(套餐1)/ ¥10,889(套餐2含搭建+1年维护)
新更新:2026年5月13日(互站网在售)
系统整体架构
层级技术选型后端框架Spring Boot 2.7.x + MyBatis-Plus 3.5.0数据库MySQL 8.0 + Redis 7.0(缓存/分布式锁/GEO)用户端UniApp 3.0(Vue3语法)→ 编译为 小程序 + 公众号 + H5管理后台Vue3 + ElementPlus + ECharts 数据看板实时通信WebSocket(赛程更新/报名通知实时推送)地图服务高德地图 JSAPI(LBS定位/场馆导航)支付微信支付 + 支付宝部署JDK 17 + Docker + Nginx + K8s
核心功能模块1️⃣ 多角色体系java@PostMapping("/login")public Result<LoginVO> login(@Re LoginDTO dto) { User user = userService.login(dto); String token = JwtUtil.generateToken(user.getId(), user.getRole()); https:// role = "yer" 选手 / "organizer" 主办方(管理员) / "referee" 裁判 return Result.success(new LoginVO(token, user.getRole()));}
角色核心功能 选手端(小程序/H5/公众号)浏览赛事/智能筛选/在线报名/支付报名费/查看赛程/成绩查询/排行榜 主办方端(管理后台)赛事创建/报名审核/赛程编排/晋级图自动生成/成绩录入/数据统计& 裁判端(小程序为主)执裁管理/比分录入/选手评分/赛程查看 平台总后台全局数据看板/分账管理/营销工具/多语言管理
2️⃣ 智能晋级图生成(核心亮点)⭐⭐⭐java/** * 淘汰赛晋级图自动生成 - 核心算法 * 根据报名人数和赛制(单败/双败/循环)动态生成对阵表 * 管理员录入比分后,前端晋级图自动更新 */@Servicepublic class TournamentBracketServiceImpl implements TournamentBracketService { /** * 生成淘汰赛首轮对阵 * @param yerCount 报名人数 * @return 首轮对阵列表 */ public List<Match> generateEliminationBracket(int yerCount) { List<Match> firstRoundMatches = new ArrayList<>(); https:// 计算种子选手数量和轮空位置(淘汰赛算法) int roundSize = Integer.highestOneBit(yerCount) * 2; https:// 大于yerCount的小2的幂 int byeCount = roundSize - yerCount; https:// 轮空数量 https:// 实际生产中,此处根据选手积分/种子排名进行位置填充 for (int i = 0; i < roundSize / 2; i++) { Match match = new Match(); match.setRound(1); match.setMatchOrder(i + 1); https:// 设置选手1和选手2的初始位置,轮空位特殊标记 firstRoundMatches.add(match); } return firstRoundMatches; } /** * 录入比分后自动更新晋级图 + 排行榜 */ @Transactional public Result updateScore(Long matchId, Long winnerId, Integer score) { Match match = matchMapper.selectById(matchId); if (match == null || match.getStatus() != 0) { return Result.fail("该场比赛未开始或已结束"); } match.setWinnerId(winnerId); match.setScore(score + ":" + (match.getScore1() + match.getScore2() - score)); match.setStatus(1); https:// 已完成 matchMapper.updateById(match); https:// 自动晋级下一轮 autoAdvance(match); https:// 更新选手排行榜 rankingService.updateRanking(winnerId, match.getTournamentId()); return Result.success(); }}
赛制说明晋级图生成方式 单败淘汰输一场即淘汰二叉树结构,逐轮晋级 双败淘汰输两场才淘汰胜者组+败者组双轨 循环赛每人打每人积分排行榜 小组赛+淘汰先分组后淘汰小组排名→交叉淘汰
晋级图状态流转说明0 待开始报名中,尚未开赛1 进行中正在比赛,可录入比分2 已完成比赛结束,晋级图锁定3 已取消赛事取消,需重新生成
3️⃣ 赛事报名管理(防超卖 + 候补机制)java@Service @Transactionalpublic class RegistrationServiceImpl implements RegistrationService { @Autowired private RedissonClient redissonClient; /** * 选手报名 - 分布式锁防超卖 + 候补队列 */ public Result register(Long userId, Long eventId) { String lockKey = "register:" + eventId + ":" + userId; RLock lock = redissonClient.getLock(lockKey); try { if (!lock.tryLock(5, 10, TimeUnit.SECONDS)) { return Result.fail("系统繁忙,请稍后重试"); } https:// 1. 校验赛事状态 Tournament event = eventMapper.selectById(eventId); if (event.getStatus() != 0) { https:// 0=报名中 return Result.fail("该赛事当前不接受报名"); } https:// 2. 校验是否已报名 if (registrationMapper.existsByUserIdAndEventId(userId, eventId)) { return Result.fail("您已报名该赛事"); } https:// 3. 校验报名人数 int currentCount = registrationMapper.countByEventId(eventId); if (currentCount >= event.getMaxParticipants()) { https:// 自动加入候补队列 return addToWaitlist(userId, eventId); } https:// 4. 创建报名记录 Registration reg = new Registration(); reg.setUserId(userId); reg.setEventId(eventId); reg.setStatus(0); https:// 待支付 reg.setCreateTime(LocalDateTime.now()); registrationMapper.insert(reg); return Result.success(reg); } finally { lock.unlock(); } } /** * 候补队列 - 有人退赛自动递补 */ private Result addToWaitlist(Long userId, Long eventId) { Waitlist wl = new Waitlist(); wl.setUserId(userId); wl.setEventId(eventId); wl.setSortOrder(waitlistMapper.countByEventId(eventId) + 1); waitlistMapper.insert(wl); return Result.success("赛事已满,您已进入候补名单(第" + wl.getSortOrder() + "位)"); }}
报名状态流转说明0 待支付报名成功,等待支付报名费1 已支付支付完成,正式参赛2 已审核主办方审核通过(需审核的赛事)3 已拒绝审核未通过/不符合资格4 已取消选手主动取消5 候补中名额已满,进入候补队列
4️⃣ 拼场约球功能(台球特色)⭐java/** * 拼场约球 - 遗传算法智能匹配球友 * 平衡技能等级(ELO) + 时间匹配度 */@Servicepublic class MatchRecommenderImpl implements MatchRecommender { /** * 适应度函数:70%技能匹配 + 30%时间匹配 */ private double calculateFitness(uest request) { double skillDiff = Math.abs(re() - relo()); double timeDiff = Math.abs(re().until(reime(), ChronoUnit.MINUTES)); return 0.7 * (1 - skillDiff / 100) + 0.3 * (1 - timeDiff / 60); } public List<MatchVO> recommendMatches(Long userId) { User user = userMapper.selectById(userId); Population pop = generateInitialPopulation(user); for (int i = 0; i < 20; i++) { pop = selectByRoulette(pop); https:// 轮盘赌选择 pop = crossover(pop); https:// 单点交叉 pop = mutate(pop, 0.1); https:// 10%变异率 } return pop.getTop5(); }}
拼场类型说明优惠规则 普通拼场系统自动匹配2-4人,按时段拼桌享 8.5折 台费 技能拼场ELO相近球友匹配,保证比赛质量享 8折 + 积分奖励 包桌拼场4人包桌,人均分摊享 7折 + 送饮品
5️⃣ 赛事直播 + 成绩管理
功能说明 赛事实时直播集成腾讯云直播SDK,支持多机位切换 比分实时录入裁判端录入比分,晋级图+排行榜自动更新 电子奖状赛事结束自动生成电子奖状,可分享朋友圈 选手积分体系参赛/获胜/MVP累计积分,积分排行榜 ELO等级分基于胜负计算选手ELO等级,精准匹配对手
UniApp 前端核心页面
页面路径功能首页pages/index/index赛事列表/热门赛事/拼场大厅/智能筛选赛事详情pages/event/detail赛事介绍/规则/奖金/报名入口/场馆导航在线报名pages/register/index填写信息/选择场次/在线支付/候补排队赛程对阵pages/bracket/index晋级图可视化/比赛时间/对阵表/实时比分排行榜pages/rank/index选手积分排行/ELO等级/胜率统计我的赛事pages/my/events我的报名/参赛记录/成绩/奖状拼场约球pages/match/index发布拼场/智能匹配/一键加入个人中心pages/user/user认证/积分/球杆/设置
vue<!-- pages/bracket/index.vue - 晋级图可视化 --><temte> <view class="container"> <!-- 赛事信息 --> <view class="event-header"> <text class="title">{{ event.name }}</text> <text class="meta">{{ event.format }} · {{ event.yerCount }}人 · {{ event.statusName }}</text> </view> <!-- 晋级图 - 淘汰赛对阵 --> <scroll-view scroll-y class="bracket-scroll"> <view v-for="round in rounds" :key="round.round" class="round"> <text class="round-title">第{{ round.round }}轮</text> <view v-for="match in round.matches" :key="match.id" class="match-card" :class="{ live: match.status === 1, finished: match.status === 2 }"> <view class="yer yer-top" :class="{ winner: match.winnerId === match.yer1Id }"> <image :src="match.yer1Avatar" class="avatar"/> <text>{{ match.yer1Name }}</text> <text class="score" v-if="match.finished">{{ match.score1 }}</text> </view> <view class="vs">VS</view> <view class="yer yer-bottom" :class="{ winner: match.winnerId === match.yer2Id }"> <image :src="match.yer2Avatar" class="avatar"/> <text>{{ match.yer2Name }}</text> <text class="score" v-if="match.finished">{{ match.score2 }}</text> </view> </view> </view> </scroll-view> <!-- 排行榜 --> <view class="section"> <text class="section-title"> 积分排行榜</text> <view v-for="(p, idx) in rankings" :key="p.id" class="rank-item"> <text class="rank-num" :class="{ top3: idx < 3 }">{{ idx + 1 }}</text> <image :src="p.avatar" class="avatar"/> <view class="info"> <text class="name">{{ p.nickname }}</text> <text class="elo">ELO: {{ p.elo }} · 胜率: {{ p.winRate }}%</text> </view> <text class="points">{{ p.points }}分</text> </view> </view> </view></temte>javascripthttps:// pages/event/detail.vue - 赛事详情 + 报名export default { data() { return { event: {}, selectedSlot: null } }, onLoad(options) { this.eventId = options.id; this.loadEvent(); }, methods: { async loadEvent() { const res = await uest({ url: `${BASE_URL}/event/detail/${this.eventId}` }); this.event = res.data.data; }, async registerEvent() { if (!this.selectedSlot) { uni.showToast({ title: '请选择场次', icon: 'none' }); return; } const result = await uest({ url: `${BASE_URL}/registration/register`, method: 'POST', data: { eventId: this.eventId, slotId: this.selectedSlot } }); if (result.data.code === 200) { uni.showToast({ title: '报名成功' }); uni.redirectTo({ url: `/pages/order/pay?id=${result.data.data.id}` }); } } }}️ 核心数据库表
表名说明tournament赛事表(名称/时间/地点/规则/报名费/大人数/状态)registration报名表(选手/赛事/支付状态/审核状态/候补排序)match比赛场次表(轮次/对阵双方/比分/状态)yer选手表(昵称/ELO/胜率/积分/球杆/头像)waitlist候补队列表(选手/赛事/排序/状态)ranking排行榜表(选手/积分/ELO/排名周期)bracket晋级图表(赛事/轮次/对阵JSON/状态)live_record直播记录表(赛事/直播地址/观看人数)wallet_log钱包流水表(报名费/退款/奖金)
s TABLE tournament ( id BIGINT PRIMARY KEY AUTO_INCREMENT, tournament_no VARCHAR(64) UNIQUE NOT NULL, name VARCHAR(200) NOT NULL COMMENT '赛事名称', format TINYINT DEFAULT 1 COMMENT '1单败 2双败 3循环', start_time DATETIME NOT NULL, end_time DATETIME NOT NULL, venue_name VARCHAR(255) COMMENT '场馆名称', venue_address VARCHAR(500) COMMENT '场馆地址', max_participants INT DEFAULT 32 COMMENT '大人数', current_count INT DEFAULT 0 COMMENT '当前报名人数', entry_fee DECIMAL(10,2) DEFAULT 0 COMMENT '报名费', prize_pool DECIMAL(10,2) COMMENT '奖金池', status TINYINT DEFAULT 0 COMMENT '0报名中 1进行中 2已结束 3已取消', create_time DATETIME DEFAULT CURRENT_TIMESTAMP, INDEX idx_status_time (status, start_time), INDEX idx_venue (venue_name));CREATE TABLE registration ( id BIGINT PRIMARY KEY AUTO_INCREMENT, registration_no VARCHAR(64) UNIQUE NOT NULL, user_id BIGINT NOT NULL, tournament_id BIGINT NOT NULL, pay_status TINYINT DEFAULT 0 COMMENT '0待支付 1已支付 2已退款', audit_status TINYINT DEFAULT 0 COMMENT '0待审核 1通过 2拒绝', waitlist_order INT COMMENT '候补排序', create_time DATETIME DEFAULT CURRENT_TIMESTAMP, INDEX idx_user (user_id), INDEX idx_tournament (tournament_id), INDEX idx_status (pay_status, audit_status));CREATE TABLE match ( id BIGINT PRIMARY KEY AUTO_INCREMENT, tournament_id BIGINT NOT NULL, round INT NOT NULL COMMENT '轮次', match_order INT NOT NULL COMMENT '场次顺序', yer1_id BIGINT COMMENT '选手1', yer2_id BIGINT COMMENT '选手2', yer1_score INT DEFAULT 0, yer2_score INT DEFAULT 0, winner_id BIGINT COMMENT '胜者', status TINYINT DEFAULT 0 COMMENT '0待开始 1进行中 2已完成', start_time DATETIME, create_time DATETIME DEFAULT CURRENT_TIMESTAMP, INDEX idx_tournament (tournament_id)); 管理后台功能
模块功能 数据看板DAU/报名人数/赛事数量/收入/热门赛事/选手排名 ECharts 赛事管理创建/编辑/删除赛事/设置规则/上传海报/分享推广 报名管理报名列表/导出Excel/批量审核/分组抽签/候补管理 赛程管理手动编排/智能生成晋级图/比分录入/赛程调整 选手管理选手列表/ELO等级/积分管理/信用分/封禁 直播管理直播推流/观看数据/回放管理 财务管理报名费统计/微信对账/奖金发放/提现审核/分账 营销工具早鸟优惠/拼团/邀请奖励/优惠券/新手立减 数据统计赛事热度/选手活跃度/完赛率/复购率/ARPU
️ 部署架构┌──────────────────────────────────────────────────┐│ Nginx │├──────────┬──────────┬───────────┬──────────────────┤│ UniApp │ UniApp │ UniApp │ UniApp ││ 小程序 │ 公众号H5 │ H5 │ │├──────────┴──────────┴───────────┴──────────────────┤│ Spring Boot 集群(微服务) ││ ┌─────────┐ ┌─────────┐ ┌───────────────────────┐ ││ │赛事服务 │ │报名服务 │ │ 晋级图/排行/拼场服务 │ ││ └─────────┘ └─────────┘ └───────────────────────┘ ││ ┌─────────┐ ┌─────────┐ ┌───────────────────────┐ ││ │选手服务 │ │支付服务 │ │ 直播/通知服务 │ ││ └─────────┘ └─────────┘ └───────────────────────┘ │├───────────────────────────────────────────────────┤│ MySQL(主从) │ Redis Cluster │ │ ES │├───────────────────────────────────────────────────┤│ Prometheus + Grafana │ Docker + K8s │└───────────────────────────────────────────────────┘ 售价与套餐(2026年5月新)
套餐价格包含内容套餐1¥8,889源码 + 技术文档 + 部署文档(不含搭建/维护/技术支持)套餐2¥10,889源码 + 文档 + 首次搭建 + 1年维护更新 + 技术支持
后续年度技术服务费:¥2,000/年(含免费系统升级)
⚠️ 源码具有可复制性,不支持恶意退款
购买申明:禁止转卖/禁止开源社区传播/研究商业学习使用
官方联系方式(已核实 ✅)
渠道信息 ✅电话 ✅(西安省钱兄网络科技有限公司)邮@163.comCEO马晓东(96年创业者,西安科技大学毕业)公司西安省钱兄网络科技有限公司地址陕西省西安市高新区高新四路13号朗臣大厦A座11808演示站联系 QQ 710070994 获取管理后台 + 用户端演示地址购买链接互站网 https://www.huzhan.com/code/goods484759.html
系统亮点总结
特性说明✅ 三端覆盖小程序 + 公众号 + H5,UniApp一套源码✅ 晋级图自动生成淘汰赛/双败/循环赛一键生成,录入比分自动更新✅ 拼场约球遗传算法智能匹配 + ELO等级分,技能+时间双维度✅ 候补队列名额满自动候补,退赛自动递补✅ 防超卖Redis分布式锁 + 乐观锁,报名不冲突✅ 赛事直播腾讯云直播SDK集成,多机位实时直播✅ 积分排行榜ELO等级分 + 积分体系 + 赛季排名✅ 电子奖状赛后自动生成,一键分享朋友圈✅ 高并发削峰 + Redis缓存,万人同时报名不卡✅ 数据看板ECharts实时展示DAU/报名量/赛事热度/选手排名✅ 安全合规JWT + AES-256 + BCrypt + 微信支付签名验证
获取源码:搜索 互站网(huzhan.com)"省钱兄JAVA台球赛事比赛报名系统" 或直接联系官方 QQ 710070994 获取演示站体验后下单。该系统与省钱兄的"同城服务系统(¥8,889)"同属一个产品矩阵,核心差异在于:专注台球赛事场景,支持晋级图自动生成 + 遗传算法拼场 + ELO等级分匹配 + 赛事直播 + 候补队列,更适合台球俱乐部/赛事主办方/台球馆/业余联赛组织者等需要赛事管理的场景。据国家体育总局数据,我国台球活跃人群已超6000万人次,该系统正是为这一庞大市场量身打造。
省钱兄科技,台球赛事,比赛报名