1. 项目背景与核心价值
去年帮本地一家汽车4S店做数字化升级时,他们最头疼的就是试驾预约的混乱管理。销售顾问用纸质登记本记录试驾信息,经常出现时间冲突、客户信息丢失的情况。这正是我们开发这套4S店试驾平台小程序的初衷——用SpringBoot+小程序技术栈重构传统汽车销售流程。
这个毕设项目完整实现了:
- 微信端小程序:客户自主预约试驾、查看车型库、获取电子优惠券
- 后台管理系统:销售顾问排班管理、试驾订单跟踪、客户画像分析
- 数据驾驶舱:实时展示到店率、转化率等核心经营指标
整套系统采用前后端分离架构,使用SpringBoot 2.7 + Vue3技术栈,包含完整的RBAC权限控制、微信支付对接、高德地图API集成等企业级功能。特别适合计算机专业同学作为毕业设计项目,因为:
- 业务场景真实:直接解决汽车零售行业痛点
- 技术栈全面:涵盖微服务、小程序、数据可视化等热点技术
- 文档完整:提供部署手册、API文档、数据库设计说明书
提示:系统预留了扩展接口,可以快速对接CRM系统或ERP系统,方便做二次开发
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 技术架构解析
2.1 后端技术选型
采用经典的SpringBoot全家桶方案:
java复制// 核心依赖示例
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-web'
implementation 'com.baomidou:mybatis-plus-boot-starter:3.5.3'
implementation 'org.springframework.boot:spring-boot-starter-data-redis'
implementation 'com.alibaba:fastjson:2.0.23'
}
关键设计考量:
- 用MyBatis-Plus替代原生MyBatis:减少35%的样板代码,内置分页插件简化开发
- Redis多级缓存:将热门车型数据缓存到Redis,QPS提升8倍
- 自定义注解实现分布式锁:防止并发场景下的试驾超订问题
2.2 前端技术方案
小程序端采用原生+组件化开发模式:
- 页面路由:配置app.json实现tabBar导航
- 数据通信:封装wx.request为Promise风格
- 组件库:使用Vant Weapp构建UI界面
后台管理系统采用Vue3+Element Plus:
javascript复制// 典型API调用示例
export const getDriveList = (params) => {
return request({
url: '/api/drive/list',
method: 'get',
params
})
}
2.3 数据库设计
核心表关系图(简化版):
code复制客户表(user) ← 试驾记录表(drive_record) → 车辆表(car)
↑
销售顾问表(sales)
关键字段设计技巧:
- 试驾表status字段使用TINYINT(1):0-待确认 1-已预约 2-已完成 3-已取消
- 车辆表添加tags字段:存储JSON格式的配置标签,便于筛选
- 建立复合索引:对(销售顾问ID,试驾时间)建立索引,提升查询效率40%
3. 核心功能实现细节
3.1 试驾预约流程
典型用户旅程:
- 小程序端选择心仪车型
- 调用高德地图API展示附近4S店
- 选择时间段后调用库存服务校验可用性
- 微信支付押金(可配置是否启用)
- 生成带二维码的电子凭证
关键代码片段:
java复制@Transactional
public Result bookDrive(DriveBookDTO dto) {
// 校验时间冲突
if (driveMapper.checkConflict(dto.getSalesId(), dto.getDriveTime()) > 0) {
throw new BusinessException("该时段已被预约");
}
// 生成试驾单
DriveRecord record = new DriveRecord();
BeanUtils.copyProperties(dto, record);
record.setDriveNo(IdUtil.getSnowflakeNextIdStr());
driveMapper.insert(record);
// 发送微信模板消息
wxPushService.sendDriveNotice(record);
return Result.success(record);
}
3.2 动态库存控制
采用令牌桶算法控制试驾时段容量:
- 每个销售顾问的时段设置为5个令牌(可配置)
- Redis原子操作保证并发安全
- 定时任务每日0点重置令牌
核心Redis命令:
bash复制# 尝试获取令牌
DECR sales:1:2023-08-20:14:00
# 获取当前剩余令牌
GET sales:1:2023-08-20:14:00
3.3 微信支付集成
支付流程中的关键处理:
- 预支付订单生成签名时注意排除空值字段
- 支付结果通知要做重复校验
- 使用策略模式处理不同支付场景(押金/尾款)
安全注意事项:
- 支付密钥必须配置在服务端
- 金额校验要同时检查前端传参和商品实际价格
- 异步通知要处理网络重试导致的重复通知
4. 部署与调优实践
4.1 生产环境部署
推荐使用Docker Compose部署:
yaml复制version: '3'
services:
mysql:
image: mysql:5.7
environment:
MYSQL_ROOT_PASSWORD: ${DB_PASSWORD}
redis:
image: redis:6-alpine
app:
build: .
ports:
- "8080:8080"
depends_on:
- mysql
- redis
性能调优参数:
- SpringBoot启用G1垃圾回收器:-XX:+UseG1GC
- Tomcat连接数配置:server.tomcat.max-threads=200
- MyBatis二级缓存大小:mybatis-plus.configuration.cache.size=1024
4.2 常见问题排查
-
小程序真机调试空白页:
- 检查域名是否加入微信白名单
- 确认nginx配置了跨域头
- 使用Charles抓包分析接口返回
-
高并发下超订问题:
- 添加@DistributedLock注解
- 数据库字段增加乐观锁版本号
- 引入RabbitMQ做异步削峰
-
微信支付签名失败:
- 检查时间戳是否在有效期内
- 确认商户密钥没有复制错位
- 使用官方签名校验工具验证
5. 二次开发建议
5.1 功能扩展方向
-
智能推荐引擎:
- 基于用户浏览记录推荐车型
- 使用协同过滤算法实现"猜你喜欢"
-
试驾路线规划:
- 集成高德导航SDK
- 预设精品试驾路线
-
VR看车功能:
- 使用Three.js实现3D展示
- 支持360度查看内饰
5.2 毕业设计加分项
-
添加压力测试报告:
- 使用JMeter模拟1000并发预约
- 生成TPS和响应时间曲线图
-
实现灰度发布:
- 基于Nginx+lua做AB测试
- 按用户ID分流新老版本
-
构建CI/CD流水线:
- GitHub Actions自动部署
- SonarQube代码质量检测
这套系统我在实际部署时发现,销售顾问最欣赏的是试驾日历的"拖拽调整"功能。通过集成FullCalendar库,他们可以直接在网页上拖动调整试驾时间,比传统表单操作效率提升60%。建议同学们在答辩时重点演示这个细节设计,能很好体现用户体验优化的思考。
