1. 项目背景与意义
随着城市汽车保有量的持续增长,停车难、找位难、管理难成为城市交通治理的突出问题。传统停车场依赖人工登记、现金收费和人工引导,存在效率低、易出错、数据不透明等弊端。建设一套基于SpringBoot的智能停车管理系统,能够实现车位实时监控、自动计费、线上支付和数据分析一体化管理,对提升停车场运营效率、改善车主停车体验具有重要的现实意义。
本系统面向停车场运营方和车主两类用户,覆盖车位管理、车辆进出、费用结算、订单查询等核心业务场景,是典型的Web端信息管理系统,适合作为毕业设计或课程实践项目。
2. 系统技术栈
本系统采用前后端分离架构,后端基于SpringBoot构建RESTful API服务,前端使用Vue.js配合Element UI组件库实现管理界面,数据库选用MySQL存储业务数据。
| 层次 | 技术选型 | 说明 |
|---|---|---|
| 后端框架 | SpringBoot 2.7 | 快速构建独立运行的Web服务 |
| 持久层框架 | MyBatis-Plus | 简化数据库操作,内置分页插件 |
| 数据库 | MySQL 8.0 | 存储用户、车位、订单等业务数据 |
| 权限认证 | Spring Security + JWT | 实现登录认证与接口鉴权 |
| 前端框架 | Vue.js 3 + Element UI | 构建后台管理界面 |
| 接口文档 | Swagger / Knife4j | 自动生成在线接口文档 |
| 构建工具 | Maven | 依赖管理与项目构建 |
3. 系统功能模块设计
系统按角色划分为管理员端和用户端两大功能集合,核心模块如下:
- 用户管理模块:管理员对系统用户进行增删改查,支持角色分配和账号启停用。
- 车位管理模块:维护车位编号、区域、类型(普通/新能源)和状态(空闲/占用/预约)。
- 车辆进出管理模块:记录车辆入场、出场时间,自动计算停车时长。
- 订单计费模块:根据停车时长和收费标准自动生成订单,支持线上支付和线下结算。
- 数据统计模块:按日、周、月统计车流量、收入、车位利用率等指标。
4. 数据库设计
系统核心数据表包括用户表、车位表、车辆记录表和订单表。以下为订单表的主要字段设计:
| 字段名 | 类型 | 说明 |
|---|---|---|
| id | bigint | 主键,自增 |
| plate_number | varchar(20) | 车牌号 |
| parking_id | bigint | 关联车位ID |
| entry_time | datetime | 入场时间 |
| exit_time | datetime | 出场时间 |
| total_amount | decimal(10,2) | 停车费用 |
| status | tinyint | 订单状态:0待支付,1已支付 |
5. 核心代码实现
5.1 项目依赖配置
在pom.xml中引入SpringBoot、MyBatis-Plus和MySQL驱动等核心依赖。
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>3.5.3</version> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <scope>runtime</scope> </dependency>5.2 实体类定义
以订单实体为例,使用MyBatis-Plus注解映射数据库表字段。
@Data @TableName("parking_order") public class ParkingOrder { @TableId(type = IdType.AUTO) private Long id; private String plateNumber; private Long parkingId; private LocalDateTime entryTime; private LocalDateTime exitTime; private BigDecimal totalAmount; private Integer status; }5.3 车辆入场接口
车辆入场时校验车位状态,空闲则更新为占用并生成入场记录。
@PostMapping("/entry") public Result entry(@RequestBody VehicleEntryDTO dto) { ParkingSpace space = parkingSpaceMapper.selectById(dto.getParkingId()); if (space == null || space.getStatus() != 0) { return Result.error("车位不存在或已被占用"); } space.setStatus(1); parkingSpaceMapper.updateById(space); VehicleRecord record = new VehicleRecord(); record.setPlateNumber(dto.getPlateNumber()); record.setParkingId(dto.getParkingId()); record.setEntryTime(LocalDateTime.now()); vehicleRecordMapper.insert(record); return Result.success("入场成功"); }5.4 停车费用计算
出场时根据入场时间和当前时间计算停车时长,并按小时费率生成订单金额。
public BigDecimal calculateAmount(LocalDateTime entryTime, LocalDateTime exitTime) { long minutes = Duration.between(entryTime, exitTime).toMinutes(); if (minutes <= 30) { return BigDecimal.ZERO; } long hours = (minutes + 59) / 60; return new BigDecimal(hours).multiply(new BigDecimal("5.00")); }6. 总结
本文围绕基于SpringBoot的智能停车管理系统,从项目背景、技术选型、功能模块、数据库设计和核心代码实现等方面进行了系统阐述。系统采用前后端分离架构,后端以SpringBoot为核心,结合MyBatis-Plus和MySQL实现业务数据的持久化管理,前端通过Vue.js提供友好的操作界面。整体方案结构清晰、易于扩展,能够满足中小型停车场日常运营管理需求,也为后续接入车牌识别、物联网设备等智能化能力预留了扩展空间。