1. 项目概述
这个停车位租赁平台是我去年指导的一个本科毕业设计项目,采用SpringBoot后端+微信小程序前端的技术架构。整套系统从需求分析到上线部署共耗时3个月,目前已在校园内试运行半年,累计服务用户超过2000人次。作为典型的互联网+智慧停车解决方案,它主要解决了校园区域停车位信息不对称、周转率低的问题。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 技术架构解析
2.1 后端技术选型
SpringBoot 2.7.12作为基础框架,搭配以下技术栈:
- 持久层:MyBatis-Plus 3.5.3(简化CRUD操作)
- 数据库:MySQL 8.0(关系型)+ Redis 7.0(缓存)
- 安全框架:Spring Security + JWT
- 支付对接:微信支付V3 API
- 文件存储:阿里云OSS
特别注意:MySQL配置了连接池(HikariCP)和读写分离,实测QPS可达1200+
2.2 小程序端设计
采用微信原生框架+ColorUI组件库,主要功能模块:
- 用户认证:微信授权登录+手机号绑定
- 车位展示:基于GeoHash的附近车位检索
- 订单系统:包含预约、使用中、已完成三种状态
- 支付流程:预支付→车位解锁→完成扣款
- 评价体系:五星评分+文字评价
3. 核心功能实现
3.1 智能车位匹配算法
java复制// 基于用户位置和车位状态的过滤逻辑
public List<ParkingSpace> filterSpaces(double userLng, double userLat) {
String geoHash = GeoHashUtils.encode(userLat, userLng, 6);
return lambdaQuery()
.eq(ParkingSpace::getStatus, 0) // 0表示空闲
.likeRight(ParkingSpace::getGeoHash, geoHash.substring(0,4))
.orderByAsc(ParkingSpace::getPrice)
.last("LIMIT 50")
.list();
}
3.2 订单状态机设计
使用枚举实现订单状态流转:
java复制public enum OrderStatus {
CREATED(1) {
@Override
public boolean canChangeTo(OrderStatus next) {
return next == PAID || next == CANCELLED;
}
},
PAID(2) {...},
// 其他状态...
}
4. 开发避坑指南
4.1 微信支付回调处理
常见问题:
- 证书路径问题:建议将apiclient_cert.p12放在resources/cert目录
- 验签失败:确保使用V3版本的签名算法
- 重复通知:需要做幂等处理(Redis setnx)
解决方案:
java复制@PostMapping("/pay/notify")
public String payNotify(HttpServletRequest request) {
// 1. 验证签名
WxPayOrderNotifyV3Result result = wxPayService.parseOrderNotifyV3Result(
IOUtils.toString(request.getInputStream()),
request.getHeader("Wechatpay-Signature")
);
// 2. 处理业务逻辑
if(redisTemplate.opsForValue().setIfAbsent(
"pay:notify:"+result.getResult().getOutTradeNo(),
"1", 10, TimeUnit.MINUTES)) {
orderService.handlePaySuccess(result);
}
return "success";
}
4.2 高并发场景优化
实测发现车位状态更新是性能瓶颈,最终方案:
- 使用Redis分布式锁(Redisson实现)
- 数据库字段增加乐观锁version
- 热点数据缓存(车位信息TTL 5分钟)
java复制public boolean lockSpace(Long spaceId) {
RLock lock = redissonClient.getLock("space_lock:" + spaceId);
try {
if(lock.tryLock(3, 10, TimeUnit.SECONDS)) {
// 业务处理...
return true;
}
} finally {
lock.unlock();
}
return false;
}
5. 部署方案
5.1 服务器配置建议
最低配置:
- CPU:2核
- 内存:4GB
- 带宽:5Mbps
推荐生产环境配置:
- 阿里云ECS ecs.c6.large(2vCPU 4GB)
- RDS MySQL 基础版(1核2G)
- Redis 社区版(1G内存)
5.2 Docker部署示例
dockerfile复制FROM openjdk:11-jre
WORKDIR /app
COPY target/parking-0.0.1-SNAPSHOT.jar .
EXPOSE 8080
ENTRYPOINT ["java","-jar","parking-0.0.1-SNAPSHOT.jar"]
启动命令:
bash复制docker build -t parking .
docker run -d -p 8080:8080 \
-e SPRING_DATASOURCE_URL=jdbc:mysql://mysql:3306/parking \
-e SPRING_REDIS_HOST=redis \
--name parking-app parking
6. 毕业设计要点
6.1 论文写作建议
- 技术选型章节要说明对比过程(比如为什么选MyBatis-Plus而不是JPA)
- 系统架构图建议使用PlantUML绘制
- 性能测试部分至少包含:
- 并发预约测试(JMeter)
- 接口响应时间(Arthas监控)
- 数据库查询效率(Explain分析)
6.2 答辩常见问题
准备以下问题的回答:
- 如何保证车位状态的一致性?
- 系统如何处理高峰期并发?
- 微信小程序与后端如何通信加密?
- 如果支付成功但车位未释放怎么办?
7. 源码结构说明
项目采用标准Maven多模块结构:
code复制parking-parent
├── parking-common // 公共模块
├── parking-system // 后台管理
├── parking-api // 小程序接口
└── parking-mobile // 小程序源码
关键配置位置:
- 微信支付参数:application-pay.yml
- 数据库连接:application-druid.yml
- 跨域配置:WebMvcConfig.java
8. 扩展优化方向
- 智能推荐:基于用户历史行为推荐车位
- 预约排队:热门车位预约排队机制
- 车位共享:个人车位分时出租
- 无感支付:结合车牌识别自动扣费
我在实际部署时发现,Nginx配置gzip后接口响应体积减少了65%,建议在application.yml中添加:
yaml复制server:
compression:
enabled: true
mime-types: application/json,application/xml,text/html,text/xml,text/plain
min-response-size: 1024
