1. 项目概述:SpringBoot二手车销售系统
最近在整理过往项目时,翻出了这个基于SpringBoot的二手车销售系统。这个系统最初是为本地一家二手车经销商开发的,后来经过多次迭代,现在已经成为一个功能完善的解决方案。系统采用典型的MVC架构,前端使用Thymeleaf模板引擎,后端基于SpringBoot 2.7.x构建,数据库选用MySQL 8.0。
这个系统最核心的价值在于它完整实现了二手车交易的全流程管理——从车辆信息录入、客户看车预约、线上估价到最终交易完成。相比市面上一些简单的CRUD示例,这个项目更贴近真实业务场景,包含了大量实际开发中会遇到的需求点和解决方案。
提示:源码获取方式见文末,项目采用MIT协议开源,可直接用于商业项目,但建议根据实际业务需求进行二次开发。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 系统核心功能模块解析
2.1 车辆信息管理模块
这是系统的基础模块,负责二手车信息的全生命周期管理。在设计时特别考虑了二手车行业的特殊性:
java复制// 车辆实体类核心字段示例
public class UsedCar {
private Long id;
private String vin; // 车辆识别号
private String brand;
private String model;
private Integer productionYear;
private BigDecimal mileage;
private BigDecimal price;
private String transmissionType; // 变速箱类型
private String fuelType; // 燃油类型
private String exteriorColor;
private String interiorColor;
private String vehicleCondition; // 车况评级
private List<String> images; // 车辆图片URL集合
// 省略getter/setter
}
实际开发中遇到的几个关键点:
- 车辆图片采用了阿里云OSS存储,通过Spring的MultipartFile处理上传
- VIN码校验使用了正则表达式+校验位算法
- 车况评级实现了自定义枚举类型,包含A/B/C/D四个等级
2.2 客户预约与跟进模块
二手车交易中客户跟进非常重要,这个模块实现了:
- 线上看车预约(集成日历组件)
- 客户意向度评级
- 销售跟进记录
- 试驾安排管理
java复制// 预约实体核心逻辑
public class Appointment {
private Long id;
private Long customerId;
private Long carId;
private LocalDateTime appointmentTime;
private String contactNumber;
private String status; // 预约状态
private String notes; // 备注信息
// 状态变更业务逻辑
public void confirm() {
if (!"PENDING".equals(this.status)) {
throw new IllegalStateException("只有待确认预约可以确认");
}
this.status = "CONFIRMED";
}
}
2.3 在线估价系统
这是项目的亮点功能,采用了机器学习算法(集成Python模型)进行初步估价,再结合人工调整:
- 前端收集车辆基本信息(品牌、型号、年限、里程等)
- 调用Python Flask微服务获取基准估价
- 根据本地市场情况调整系数
- 生成最终估价报告(PDF格式)
python复制# 估价模型核心逻辑(Python端)
@app.route('/api/estimate', methods=['POST'])
def estimate():
data = request.json
# 特征工程
features = preprocess(data)
# 加载预训练模型
model = joblib.load('car_price_model.pkl')
# 预测
prediction = model.predict([features])
return jsonify({'estimate': prediction[0]})
3. 技术架构与关键实现
3.1 SpringBoot相关配置
项目采用多环境配置,核心配置如下:
yaml复制# application-dev.yml
spring:
datasource:
url: jdbc:mysql://localhost:3306/used_car_system?useSSL=false
username: devuser
password: devpass
driver-class-name: com.mysql.cj.jdbc.Driver
jpa:
show-sql: true
hibernate:
ddl-auto: update
properties:
hibernate:
format_sql: true
app:
oos:
endpoint: oss-cn-hangzhou.aliyuncs.com
accessKeyId: your-key
accessKeySecret: your-secret
bucketName: used-car-images
3.2 安全与权限控制
系统采用Spring Security实现RBAC模型:
java复制@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.authorizeRequests()
.antMatchers("/", "/home", "/cars").permitAll()
.antMatchers("/admin/**").hasRole("ADMIN")
.antMatchers("/sales/**").hasRole("SALES")
.anyRequest().authenticated()
.and()
.formLogin()
.loginPage("/login")
.permitAll()
.and()
.logout()
.permitAll();
}
}
3.3 文件上传与PDF生成
二手车系统需要处理大量图片和文档,关键实现:
- 图片上传使用阿里云OSS SDK
- PDF生成使用Flying Saucer + Thymeleaf模板
- 大文件上传采用分片上传策略
java复制@Service
public class FileService {
@Value("${app.oos.endpoint}")
private String endpoint;
@Value("${app.oos.bucketName}")
private String bucketName;
public String uploadImage(MultipartFile file) {
// 生成唯一文件名
String fileName = UUID.randomUUID() +
getExtension(file.getOriginalFilename());
// 创建OSSClient实例
OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
try {
ossClient.putObject(bucketName, fileName, file.getInputStream());
return "https://" + bucketName + "." + endpoint + "/" + fileName;
} finally {
ossClient.shutdown();
}
}
}
4. 项目部署与运维
4.1 本地开发环境搭建
- 克隆仓库:
git clone https://github.com/xxx/used-car-system.git - 导入IDE(推荐IntelliJ IDEA)
- 创建MySQL数据库:
used_car_system - 修改application-dev.yml中的数据库配置
- 运行主类:
UsedCarApplication
注意:Python估价服务需要单独运行,位于项目中的
/python-estimator目录
4.2 生产环境部署
推荐使用Docker Compose部署:
dockerfile复制# Dockerfile示例
FROM openjdk:11-jre-slim
VOLUME /tmp
ARG JAR_FILE=target/*.jar
COPY ${JAR_FILE} app.jar
ENTRYPOINT ["java","-jar","/app.jar"]
yaml复制# docker-compose.yml
version: '3'
services:
app:
build: .
ports:
- "8080:8080"
environment:
- SPRING_PROFILES_ACTIVE=prod
depends_on:
- db
- redis
db:
image: mysql:8.0
environment:
MYSQL_ROOT_PASSWORD: rootpass
MYSQL_DATABASE: used_car_system
MYSQL_USER: caruser
MYSQL_PASSWORD: carpass
volumes:
- db_data:/var/lib/mysql
redis:
image: redis:alpine
volumes:
db_data:
4.3 性能优化实践
在实际运行中我们发现几个性能瓶颈及解决方案:
-
车辆列表页加载慢:
- 问题:N+1查询问题
- 解决方案:使用@EntityGraph优化JPA查询
- 效果:从2s降到200ms
-
估价服务响应时间长:
- 问题:Python服务启动慢
- 解决方案:使用gunicorn多worker模式
- 效果:从5s降到800ms
-
图片上传超时:
- 问题:大文件上传失败
- 解决方案:前端分片+后端并行上传
- 效果:支持100MB以上文件稳定上传
5. 项目扩展与二次开发建议
这个基础系统还可以在以下方向进行扩展:
-
移动端适配:
- 开发微信小程序版本
- 实现扫码看车功能
- 增加AR看车体验
-
数据分析看板:
- 集成Apache ECharts
- 展示销售趋势分析
- 车辆库存周转率统计
-
智能推荐系统:
- 基于用户浏览历史推荐车辆
- 相似车型推荐算法
- 价格变动提醒功能
-
区块链应用:
- 车辆历史记录上链
- 交易合同智能合约
- 去中心化身份验证
源码获取方式:访问GitHub仓库https://github.com/xxx/used-car-system,项目包含完整的前后端代码、数据库脚本和部署文档。对于企业用户,我们还提供商业支持服务,包括定制开发和系统维护。
