ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

基于 Java Spring Boot 的奇境剧本杀管理系统设计与实现

基于 Java Spring Boot 的奇境剧本杀管理系统设计与实现

温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片!

1. 引言

随着剧本杀行业的快速发展,线下门店在预约管理、剧本库存、场次安排和会员运营等方面面临越来越多的管理难题。传统的人工登记和表格管理方式效率低、易出错,难以支撑门店规模化运营。本文基于 Java Spring Boot 技术栈,设计并实现一套奇境剧本杀管理系统,覆盖剧本管理、场次预约、订单结算、会员管理和数据统计等核心业务,帮助门店实现数字化、规范化运营。

2. 系统需求分析

2.1 功能需求

系统面向门店管理员和玩家两类用户,主要功能模块包括:

  • 用户管理:管理员登录、玩家注册与登录、个人信息维护。
  • 剧本管理:剧本信息的增删改查,包括剧本名称、类型、难度、人数范围、时长和简介等。
  • 场次管理:门店可发布剧本场次,设置开本时间、主持人(DM)和可预约人数。
  • 预约管理:玩家选择场次进行预约,支持取消预约和查看预约记录。
  • 订单结算:预约成功后生成订单,支持在线支付模拟和订单状态管理。
  • 会员管理:玩家积分累计、会员等级划分和优惠折扣。
  • 数据统计:按剧本、场次、时间段统计预约量和营收情况。

2.2 非功能需求

  • 安全性:用户密码加密存储,接口权限校验。
  • 可靠性:预约和订单操作需保证数据一致性,避免超卖。
  • 易用性:界面简洁清晰,操作流程符合门店实际使用习惯。
  • 可维护性:采用分层架构,模块职责清晰,便于后续扩展。

3. 系统总体设计

3.1 系统架构设计

系统采用前后端分离架构,前端使用 Vue.js 构建管理后台和玩家端页面,后端基于 Spring Boot 提供 RESTful API 接口,数据存储使用 MySQL 数据库,缓存层使用 Redis 提升热点数据访问性能。整体架构分为表现层、业务逻辑层、数据访问层和基础设施层。

flowchart TD A[前端 Vue.js] -->|HTTP/JSON| B[Spring Boot 后端] B --> C[业务逻辑层 Service] C --> D[数据访问层 Mapper] D --> E[(MySQL 数据库)] C --> F[(Redis 缓存)] B --> G[统一认证与权限拦截]

3.2 功能模块划分

系统按业务职责划分为以下核心模块:用户模块、剧本模块、场次模块、预约模块、订单模块、会员模块和统计模块。各模块之间通过 Service 层进行解耦,模块内部遵循高内聚、低耦合的设计原则。

3.3 数据库设计

数据库共设计 8 张核心数据表,包括用户表、剧本表、场次表、预约表、订单表、会员等级表、积分流水表和系统配置表。下面给出主要表结构设计。

表名说明关键字段
user用户表id、username、password、phone、role、create_time
script剧本表id、name、type、difficulty、min_players、max_players、duration、intro
session场次表id、script_id、dm_name、start_time、total_slots、booked_slots、status
booking预约表id、user_id、session_id、booking_time、status
orders订单表id、booking_id、amount、pay_status、pay_time
member_level会员等级表id、level_name、min_points、discount
points_log积分流水表id、user_id、change_points、reason、create_time
sys_config系统配置表id、config_key、config_value

4. 系统详细设计与实现

4.1 项目结构

后端项目采用 Maven 构建,包结构按照分层架构组织,具体如下:

com.qijing.mystery ├── controller // 接口控制层 ├── service // 业务逻辑层 ├── mapper // 数据访问层 ├── entity // 实体类 ├── dto // 数据传输对象 ├── config // 配置类 ├── common // 通用工具与返回结果 └── exception // 全局异常处理

4.2 用户登录与权限控制

系统使用 Spring Security 结合 JWT 实现认证与授权。用户登录成功后签发 Token,前端在后续请求中携带 Token,后端通过拦截器校验身份并识别用户角色。密码使用 BCrypt 算法加密存储,保障账号安全。

@Configuration @EnableWebSecurity public class SecurityConfig { @Bean public SecurityFilterChain filterChain(HttpSecurity http) throws Exception { http.csrf().disable() .authorizeHttpRequests(auth -> auth .requestMatchers("/api/auth/login", "/api/auth/register").permitAll() .requestMatchers("/api/admin/**").hasRole("ADMIN") .anyRequest().authenticated() ) .addFilterBefore(jwtAuthFilter(), UsernamePasswordAuthenticationFilter.class); return http.build(); } }

4.3 剧本管理模块

剧本管理模块提供剧本信息的增删改查接口。管理员可以维护剧本类型、难度、人数范围和时长等信息,玩家端可浏览剧本列表并查看详情。查询接口支持按类型和难度进行筛选。

@Service public class ScriptService { @Resource private ScriptMapper scriptMapper; public PageResult<Script> pageQuery(ScriptQuery query) { return scriptMapper.selectPage(query); } public Script getById(Long id) { return scriptMapper.selectById(id); } @Transactional public void save(Script script) { scriptMapper.insert(script); } @Transactional public void update(Script script) { scriptMapper.updateById(script); } @Transactional public void delete(Long id) { scriptMapper.deleteById(id); } }

4.4 场次与预约模块

场次管理是系统的核心业务。管理员发布场次时需指定剧本、开本时间、主持人和可预约人数。玩家预约时,系统通过数据库行锁和事务机制保证并发场景下不会超卖。

@Service public class BookingService { @Resource private SessionMapper sessionMapper; @Resource private BookingMapper bookingMapper; @Transactional public Booking createBooking(Long userId, Long sessionId) { Session session = sessionMapper.selectByIdForUpdate(sessionId); if (session == null || session.getStatus() != 1) { throw new BusinessException("场次不存在或已关闭"); } if (session.getBookedSlots() >= session.getTotalSlots()) { throw new BusinessException("该场次已约满"); } session.setBookedSlots(session.getBookedSlots() + 1); sessionMapper.updateById(session); Booking booking = new Booking(); booking.setUserId(userId); booking.setSessionId(sessionId); booking.setStatus(1); bookingMapper.insert(booking); return booking; } }

4.5 订单与结算模块

预约成功后系统自动生成订单,记录应付金额和支付状态。玩家完成支付后,订单状态更新为已支付,同时根据消费金额累计会员积分。系统提供订单查询和退款接口,方便门店进行账务管理。

@Service public class OrderService { @Resource private OrderMapper orderMapper; @Resource private PointsLogMapper pointsLogMapper; @Transactional public void pay(Long orderId) { Order order = orderMapper.selectById(orderId); if (order == null || order.getPayStatus() != 0) { throw new BusinessException("订单不存在或已支付"); } order.setPayStatus(1); order.setPayTime(LocalDateTime.now()); orderMapper.updateById(order); // 累计积分 PointsLog log = new PointsLog(); log.setUserId(order.getUserId()); log.setChangePoints(order.getAmount().intValue()); log.setReason("消费积分"); pointsLogMapper.insert(log); } }

4.6 会员管理模块

会员模块根据玩家累计积分划分会员等级,不同等级享受不同折扣。玩家可在个人中心查看当前积分、等级和积分流水记录。管理员可配置等级门槛和对应折扣比例。

4.7 数据统计模块

统计模块基于预约和订单数据,按剧本、场次和时间维度汇总预约量与营收。管理员可通过图表直观了解门店经营状况,为排本和营销决策提供数据支撑。

@Service public class StatsService { @Resource private OrderMapper orderMapper; public List<Map<String, Object>> revenueByScript() { return orderMapper.sumRevenueGroupByScript(); } public List<Map<String, Object>> bookingTrend(String start, String end) { return orderMapper.countBookingByDate(start, end); } }

5. 系统测试

5.1 测试环境

系统测试在本地开发环境完成,后端使用 Spring Boot 内嵌 Tomcat 运行,数据库使用 MySQL 8.0,接口测试工具使用 Postman。

5.2 功能测试

针对核心业务流程编写了测试用例,覆盖用户注册登录、剧本管理、场次发布、预约下单、支付结算和会员积分等场景。测试结果表明各接口功能正常,预约并发场景下未出现超卖问题。

5.3 性能测试

使用 JMeter 对预约接口进行并发压测,在 100 个并发用户同时预约同一场次的场景下,系统响应正常,预约数量与场次余量保持一致,事务隔离机制有效保障了数据一致性。

6. 总结与展望

本文基于 Java Spring Boot 设计并实现了奇境剧本杀管理系统,覆盖剧本管理、场次预约、订单结算、会员管理和数据统计等核心业务。系统采用前后端分离架构,通过事务和行锁机制解决了预约并发超卖问题,整体满足门店日常运营需求。后续可在以下方向继续优化:引入消息队列提升高并发处理能力,增加剧本评分和玩家社区功能,以及对接真实第三方支付平台完善在线支付体验。

返回列表