温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片!
1. 项目背景与意义
随着汽车保有量的持续增长和消费观念的转变,二手车交易市场呈现出快速发展的态势。传统的线下二手车交易存在信息不对称、车源分散、交易流程繁琐、价格不透明等问题,买卖双方往往需要耗费大量时间和精力进行线下比价、验车和过户。与此同时,互联网技术的普及为二手车交易提供了新的渠道,越来越多的用户倾向于通过线上平台浏览车源、对比价格、预约看车。
基于 Spring Boot 的二手车交易网站正是为了解决上述痛点而设计。该系统以 Web 应用的形式,为买家、卖家和平台管理员提供统一的线上交易入口,实现车源发布、车辆检索、在线询价、预约看车、订单管理等核心功能。通过信息化手段整合车源信息,规范交易流程,提升交易效率,降低信息获取成本,对促进二手车市场的健康发展具有积极的现实意义。
2. 系统技术栈
本系统采用前后端分离的开发模式,后端基于 Spring Boot 框架构建,前端使用主流的前端技术栈,整体技术选型如下:
| 层次 | 技术选型 | 说明 |
|---|---|---|
| 后端框架 | Spring Boot 2.x | 提供自动配置、内嵌容器、快速构建 RESTful 服务 |
| 持久层框架 | MyBatis-Plus | 简化数据库操作,提供通用 CRUD 和分页能力 |
| 数据库 | MySQL 8.0 | 存储用户、车辆、订单等核心业务数据 |
| 安全认证 | Spring Security + JWT | 实现用户登录认证与接口权限控制 |
| 前端框架 | Vue.js + Element UI | 构建单页应用,提供组件化的管理界面 |
| 构建工具 | Maven | 管理项目依赖与构建流程 |
| 缓存 | Redis | 缓存热点数据,提升系统响应速度 |
3. 系统功能模块设计
根据业务需求,系统划分为三个主要角色:买家、卖家和平台管理员,各角色对应的功能模块如下:
- 用户模块:用户注册、登录、个人信息维护、密码修改。
- 车辆管理模块:卖家发布车源、编辑车辆信息、上下架管理;买家浏览车辆列表、按品牌/价格/车龄等条件筛选。
- 车辆详情模块:展示车辆图片、配置参数、车况描述、卖家信息。
- 询价与预约模块:买家在线询价、预约看车,卖家查看并处理询价请求。
- 订单管理模块:买卖双方确认交易意向,生成订单,跟踪订单状态。
- 后台管理模块:管理员审核车辆信息、管理用户账号、处理举报、统计平台运营数据。
4. 数据库设计
系统核心数据表包括用户表、车辆信息表、车辆图片表、询价表、预约看车表和订单表。以下为车辆信息表的主要字段设计:
| 字段名 | 类型 | 说明 |
|---|---|---|
| id | bigint | 主键,自增 |
| seller_id | bigint | 卖家用户 ID |
| brand | varchar(50) | 车辆品牌 |
| model | varchar(100) | 车辆型号 |
| price | decimal(10,2) | 售价 |
| mileage | decimal(10,2) | 行驶里程(万公里) |
| reg_date | date | 首次上牌日期 |
| status | tinyint | 车辆状态:0 待审核,1 在售,2 已下架 |
| create_time | datetime | 发布时间 |
5. 核心代码实现
以下选取车辆发布、车辆列表查询和订单创建三个核心场景,给出后端关键代码实现。
5.1 车辆发布接口
卖家提交车辆信息后,后端进行参数校验并保存到数据库,车辆初始状态为待审核。
@RestController @RequestMapping("/api/car") public class CarController { @Resource private CarService carService; @PostMapping("/publish") public Result<Long> publish(@RequestBody @Valid CarPublishDTO dto, @RequestAttribute("userId") Long userId) { Car car = new Car(); BeanUtils.copyProperties(dto, car); car.setSellerId(userId); car.setStatus(CarStatus.PENDING); car.setCreateTime(LocalDateTime.now()); carService.save(car); return Result.success(car.getId()); } }5.2 车辆列表分页查询
买家通过品牌、价格区间和里程等条件组合筛选车辆,使用 MyBatis-Plus 的分页插件实现分页查询。
@Service public class CarServiceImpl implements CarService { @Resource private CarMapper carMapper; @Override public Page<CarVO> queryCarPage(CarQueryDTO query) { LambdaQueryWrapper<Car> wrapper = new LambdaQueryWrapper<>(); wrapper.eq(Car::getStatus, CarStatus.ON_SALE); if (StringUtils.hasText(query.getBrand())) { wrapper.like(Car::getBrand, query.getBrand()); } if (query.getMinPrice() != null) { wrapper.ge(Car::getPrice, query.getMinPrice()); } if (query.getMaxPrice() != null) { wrapper.le(Car::getPrice, query.getMaxPrice()); } wrapper.orderByDesc(Car::getCreateTime); Page<Car> page = carMapper.selectPage( new Page<>(query.getPageNum(), query.getPageSize()), wrapper); return page.convert(car -> { CarVO vo = new CarVO(); BeanUtils.copyProperties(car, vo); return vo; }); } }5.3 订单创建接口
买卖双方确认交易意向后,买家发起订单,系统校验车辆状态并生成待支付订单。
@Service public class OrderServiceImpl implements OrderService { @Resource private CarMapper carMapper; @Resource private OrderMapper orderMapper; @Transactional(rollbackFor = Exception.class) @Override public Long createOrder(OrderCreateDTO dto, Long buyerId) { Car car = carMapper.selectById(dto.getCarId()); if (car == null || !CarStatus.ON_SALE.equals(car.getStatus())) { throw new BizException("车辆不存在或已下架"); } Order order = new Order(); order.setOrderNo(generateOrderNo()); order.setCarId(car.getId()); order.setSellerId(car.getSellerId()); order.setBuyerId(buyerId); order.setAmount(car.getPrice()); order.setStatus(OrderStatus.PENDING_PAY); order.setCreateTime(LocalDateTime.now()); orderMapper.insert(order); return order.getId(); } private String generateOrderNo() { return "CAR" + System.currentTimeMillis() + RandomUtil.randomNumbers(4); } }6. 总结
本文围绕基于 Spring Boot 的二手车交易网站,从项目背景、技术选型、功能模块、数据库设计和核心代码实现等方面进行了系统阐述。系统采用 Spring Boot 作为后端基础框架,结合 MyBatis-Plus、MySQL、Redis 和 Vue.js 等主流技术,实现了车源发布、车辆检索、询价预约和订单管理等核心业务流程,能够有效提升二手车交易的线上化水平和交易效率。后续可在此基础上进一步扩展在线支付、车辆估值、信用评价等功能,持续完善平台能力。