一、项目背景:二手手机电商数字化的迫切需求
在移动互联网深度渗透消费领域的当下,传统二手手机交易模式正面临三大核心痛点:交易效率低(线下交易受地域限制,供需匹配耗时)、信息不透明(商品成色、售后保障缺乏统一展示渠道)、管理分散(商家靠Excel记录库存,用户订单追踪困难)。据行业调研显示,2023年国内二手手机线上交易渗透率虽达55%,但中小商家数字化管理覆盖率不足30%,大量交易仍依赖传统模式,制约业务增长。
为破解这一困境,基于Spring Boot的华强北商城二手手机管理系统应运而生。系统以“交易透明化、管理规范化、服务一体化”为核心目标,采用B/S架构构建适配二手手机交易场景的全流程管理平台,整合商品展示、在线下单、订单追踪、评价互动等功能,建立“管理员统筹-商家运营-用户消费”的三级应用模式,推动二手手机交易从“线下分散”向“线上系统化”转型。
二、技术架构:二手手机管理系统的全栈技术选型
项目围绕“稳定性、可扩展性、易用性”三大原则,选用成熟的Java技术栈,确保核心业务(如商品管理、订单流转)高效运转:
| 技术模块 | 具体工具/技术 | 核心作用 |
|---|---|---|
| 后端框架 | Spring Boot 2.x | 快速构建RESTful API,简化配置,支持事务管理与依赖注入 |
| 数据库 | MySQL 8.0 | 安全存储商品信息、用户数据、订单记录,支持高效查询与关联操作 |
| 前端技术 | Vue + Bootstrap + JavaScript | 构建响应式界面,实现商品预览、购物车交互等动态功能 |
| 架构模式 | B/S(Browser/Server) | 无需安装客户端,通过浏览器即可访问,降低用户使用门槛 |
| 开发工具 | IntelliJ IDEA | 提供代码提示、调试功能,提升开发效率 |
| 服务器 | Tomcat 9.0 | 部署Web应用,保障系统7×24小时稳定运行 |
三、项目全流程:6步完成二手手机管理系统开发
3.1 第一步:需求分析——明确核心价值与角色功能
针对传统二手手机交易的“效率低、不透明、管理散”痛点,系统聚焦“交易全流程线上化”,明确四大角色的核心需求:
3.1.1 角色与核心功能
| 角色 | 核心功能 |
|---|---|
| 游客 | 浏览商品列表、查看新闻资讯、了解商品详情(不含购买权限) |
| 注册用户 | 账号注册/登录、商品购买、购物车管理、订单查询、商品评价、个人信息修改 |
| 商家 | 商品上架/下架、库存管理、订单处理(接单/发货)、个人店铺信息维护 |
| 管理员 | 用户账号审核、商品分类管理、订单监控、新闻发布、轮播图配置、评价审核 |
3.1.2 非功能性需求
- 安全性:用户密码加密存储,角色权限严格隔离(如游客无法修改商品信息);
- 易用性:界面贴合电商使用习惯,关键操作(如下单、查订单)路径不超过3步;
- 稳定性:支持100+用户同时在线操作,订单提交响应时间<2秒;
- 可扩展性:预留支付接口、会员积分等扩展模块,后续可快速集成。
3.2 第二步:系统设计——构建架构与数据库
3.2.1 系统总体架构
采用分层设计,职责清晰,便于维护:
- 表现层:通过Vue + Bootstrap实现前端界面,区分“用户前台”“商家后台”“管理员后台”三大视图;
- 业务逻辑层:基于Spring Boot实现核心服务,如用户认证、商品管理、订单流转、评价审核;
- 数据持久层:通过MyBatis实现数据库交互,支持复杂查询(如按商品成色筛选)与事务控制。
3.2.2 核心数据库设计
系统设计12张核心数据表,覆盖“用户-商品-订单-评价”全链路,关键表结构如下:
| 表名 | 核心字段 | 作用 |
|---|---|---|
| yonghu(用户表) | id、username(用户名)、password(加密密码)、yonghu_phone(手机号) | 存储用户基本信息与登录凭证 |
| shangpin(商品表) | id、shangpin_name(商品名)、shangpin_old_money(原价)、shangpin_new_money(二手价)、shangpin_kucun_number(库存) | 记录二手手机商品信息(成色、配置、价格等) |
| shangpin_order(订单表) | id、shangpin_order_uuid_number(订单编号)、shangpin_id(商品ID)、yonghu_id(用户ID)、shangpin_order_types(订单状态) | 追踪订单从“待付款”到“已完成”的全状态 |
| shangpin_pingjia(评价表) | id、shangpin_id(商品ID)、yonghu_id(用户ID)、pingfen(评分)、pingjianeirong(评价内容) | 存储用户对商品的评价,支持管理员审核 |
| news(新闻表) | id、news_name(标题)、news_content(内容)、insert_time(发布时间) | 发布二手手机行业资讯、平台活动通知 |
3.3 第三步:后端核心功能实现——Spring Boot落地
以“商品管理”“订单流转”“评价审核”三大核心场景为例,展示后端代码实现:
3.3.1 商品管理(商家功能)
@RestController
@RequestMapping("/api/shangpin")
public class ShangpinController {
@Autowired
private ShangpinService shangpinService;
/**
* 商家上架二手手机商品
*/
@PostMapping("/add")
public ResponseEntity<?> addShangpin(@RequestBody ShangpinDTO shangpinDTO,
@RequestHeader("shangjiaId") Long shangjiaId) {
try {
// 1. 参数验证:商品名、价格、库存为必填项
if (StringUtils.isEmpty(shangpinDTO.getShangpinName())
|| shangpinDTO.getShangpinNewMoney() == null
|| shangpinDTO.getShangpinKucunNumber() == null) {
return ResponseEntity.badRequest().body("商品名、价格、库存不能为空");
}
// 2. 构建商品实体(关联商家ID)
Shangpin shangpin = new Shangpin();
shangpin.setShangjiaId(shangjiaId);
shangpin.setShangpinName(shangpinDTO.getShangpinName());
shangpin.setShangpinTypes(shangpinDTO.getShangpinTypes()); // 商品分类(如"苹果""安卓")
shangpin.setShangpinPhoto(shangpinDTO.getShangpinPhoto()); // 商品图片URL
shangpin.setShangpinOldMoney(shangpinDTO.getShangpinOldMoney()); // 原价
shangpin.setShangpinNewMoney(shangpinDTO.getShangpinNewMoney()); // 二手价
shangpin.setShangpinKucunNumber(shangpinDTO.getShangpinKucunNumber()); // 库存
shangpin.setShangxiaTypes(1); // 1-上架,0-下架
shangpin.setCreateTime(new Date());
// 3. 调用Service保存商品
Shangpin result = shangpinService.saveShangpin(shangpin);
return ResponseEntity.ok("商品上架成功,商品ID:" + result.getId());
} catch (Exception e) {
return ResponseEntity.internalServerError().body("商品上架失败:" + e.getMessage());
}
}
/**
* 商家修改商品库存
*/
@PostMapping("/updateStock")
public ResponseEntity<?> updateStock(@RequestParam Long shangpinId,
@RequestParam Integer newStock,
@RequestHeader("shangjiaId") Long shangjiaId) {
try {
// 1. 验证商品是否属于当前商家
Shangpin shangpin = shangpinService.getByIdAndShangjiaId(shangpinId, shangjiaId);
if (shangpin == null) {
return ResponseEntity.badRequest().body("您无权修改该商品库存");
}
// 2. 更新库存(库存不能为负数)
if (newStock < 0) {
return ResponseEntity.badRequest().body("库存不能为负数");
}
shangpin.setShangpinKucunNumber(newStock);
shangpinService.updateById(shangpin);
return ResponseEntity.ok("库存更新成功,当前库存:" + newStock);
} catch (Exception e) {
return ResponseEntity.internalServerError().body("库存更新失败:" + e.getMessage());
}
}
}
3.3.2 订单流转(用户-商家协同)
@RestController
@RequestMapping("/api/order")
public class OrderController {
@Autowired
private ShangpinOrderService orderService;
@Autowired
private ShangpinService shangpinService;
/**
* 用户提交订单(购买二手手机)
*/
@PostMapping("/create")
public ResponseEntity<?> createOrder(@RequestBody OrderDTO orderDTO,
@RequestHeader("yonghuId") Long yonghuId) {
// 开启事务,确保订单创建与库存扣减原子性
try {
// 1. 验证商品是否存在且上架
Shangpin shangpin = shangpinService.getById(orderDTO.getShangpinId());
if (shangpin == null || shangpin.getShangxiaTypes() == 0) {
return ResponseEntity.badRequest().body("商品不存在或已下架");
}
// 2. 验证库存是否充足
if (shangpin.getShangpinKucunNumber() < orderDTO.getBuyNumber()) {
return ResponseEntity.badRequest().body("库存不足,当前库存:" + shangpin.getShangpinKucunNumber());
}
// 3. 构建订单实体
ShangpinOrder order = new ShangpinOrder();
order.setShangpinOrderUuidNumber(UUID.randomUUID().toString().replace("-", "")); // 生成唯一订单号
order.setShangpinId(shangpin.getId());
order.setYonghuId(yonghuId);
order.setBuyNumber(orderDTO.getBuyNumber());
// 计算订单总价(二手价 × 购买数量)
BigDecimal totalPrice = shangpin.getShangpinNewMoney()
.multiply(new BigDecimal(orderDTO.getBuyNumber()));
order.setShangpinOrderTruePrice(totalPrice);
order.setShangpinOrderTypes(0); // 0-待付款,1-待发货,2-待收货,3-已完成
order.setCreateTime(new Date());
// 4. 保存订单 + 扣减库存
orderService.saveOrderAndReduceStock(order, shangpin);
return ResponseEntity.ok("订单创建成功,订单号:" + order.getShangpinOrderUuidNumber());
} catch (Exception e) {
return ResponseEntity.internalServerError().body("订单创建失败:" + e.getMessage());
}
}
/**
* 商家处理订单(发货)
*/
@PostMapping("/ship")
public ResponseEntity<?> shipOrder(@RequestParam String orderNumber,
@RequestHeader("shangjiaId") Long shangjiaId) {
try {
// 1. 查找订单(需属于当前商家的商品)
ShangpinOrder order = orderService.getByOrderNumberAndShangjiaId(orderNumber, shangjiaId);
if (order == null) {
return ResponseEntity.badRequest().body("订单不存在或无权处理");
}
// 2. 验证订单状态(仅待发货状态可处理)
if (order.getShangpinOrderTypes() != 1) {
return ResponseEntity.badRequest().body("订单状态错误,当前状态:" + getOrderStatusDesc(order.getShangpinOrderTypes()));
}
// 3. 更新订单状态为"待收货"
order.setShangpinOrderTypes(2);
order.setShipTime(new Date());
orderService.updateById(order);
return ResponseEntity.ok("订单发货成功,订单号:" + orderNumber);
} catch (Exception e) {
return ResponseEntity.internalServerError().body("订单发货失败:" + e.getMessage());
}
}
// 辅助方法:转换订单状态为文字描述
private String getOrderStatusDesc(Integer status) {
Map<Integer, String> descMap = new HashMap<>();
descMap.put(0, "待付款");
descMap.put(1, "待发货");
descMap.put(2, "待收货");
descMap.put(3, "已完成");
return descMap.getOrDefault(status, "未知状态");
}
}
3.3.3 评价审核(管理员功能)
@RestController
@RequestMapping("/api/admin/comment")
public class AdminCommentController {
@Autowired
private ShangpinPingjiaService pingjiaService;
/**
* 管理员审核用户评价
*/
@PostMapping("/audit")
public ResponseEntity<?> auditComment(@RequestParam Long commentId,
@RequestParam Integer auditResult, // 1-通过,0-拒绝
@RequestParam(required = false) String auditRemark) {
try {
// 1. 查找评价记录
ShangpinPingjia comment = pingjiaService.getById(commentId);
if (comment == null) {
return ResponseEntity.badRequest().body("评价记录不存在");
}
// 2. 更新审核状态
comment.setSfsh(auditResult == 1 ? "是" : "否"); // sfsh:是否审核(是/否)
comment.setShhf(auditRemark); // 审核回复(如拒绝原因)
comment.setAuditTime(new Date());
pingjiaService.updateById(comment);
return ResponseEntity.ok(auditResult == 1 ? "评价审核通过" : "评价审核拒绝");
} catch (Exception e) {
return ResponseEntity.internalServerError().body("审核失败:" + e.getMessage());
}
}
}
3.4 第四步:前端界面实现——电商化交互设计
基于Vue + Bootstrap构建“三端分离”界面,确保不同角色操作便捷、视觉统一:
3.4.1 核心界面设计
-
用户前台
- 首页:轮播图展示热门二手手机,分类导航(如“95新苹果”“9新安卓”),新品推荐区;
- 商品详情页:多图预览商品成色、配置参数、用户评价(审核通过后展示),“加入购物车”“立即购买”按钮;
- 订单中心:列表展示所有订单,标注状态(待付款/待收货),支持“取消订单”“确认收货”操作。
-
商家后台
- 商品管理页:表格展示已上架商品,操作列提供“编辑库存”“下架”按钮,支持按商品名搜索;
- 订单处理页:按状态筛选订单(待发货/已完成),操作列提供“发货”“查看详情”功能。
-
管理员后台
- 用户管理页:审核新注册用户账号,支持“启用/禁用”操作;
- 评价审核页:列表展示待审核评价,操作列提供“通过”“拒绝”按钮,可查看评价内容与商品关联信息。
3.4.2 设计亮点
- 二手特色适配:商品详情页增加“成色说明”“售后保障”模块,解决二手交易信息不透明问题;
- 操作便捷性:关键功能按钮固定位置(如“立即购买”在商品详情页底部),减少用户操作路径;
- 响应式适配:在手机、电脑端自动调整布局(如手机端商品列表单列展示,电脑端双列展示)。
3.5 第五步:系统测试——验证功能与性能
通过黑盒测试(聚焦功能正确性)与压力测试(验证稳定性),确保系统满足实际使用需求:
3.5.1 功能测试(关键场景)
| 测试场景 | 测试用例 | 预期结果 | 实际结果 |
|---|---|---|---|
| 用户下单 | 选择商品(库存10),购买2台,提交订单 | 订单创建成功,库存扣减为8 | 符合预期 |
| 商家发货 | 找到“待发货”订单,点击“发货” | 订单状态变为“待收货”,记录发货时间 | 符合预期 |
| 评价审核 | 管理员拒绝一条违规评价,填写理由 | 评价状态变为“拒绝”,用户可查看拒绝理由 | 符合预期 |
| 库存不足 | 用户购买商品(库存1),下单数量2 | 提示“库存不足”,订单创建失败 | 符合预期 |
3.5.2 性能测试
- 并发测试:模拟50名用户同时下单,系统响应时间<1.5秒,无订单重复或库存超卖;
- 稳定性测试:系统连续运行72小时,处理1000+订单,无内存泄漏或数据库连接异常。
3.6 第六步:问题排查与优化
开发过程中针对核心问题制定解决方案,提升系统体验:
-
问题1:订单创建时库存超卖
原因:高并发下未加锁,多个用户同时下单导致库存扣减异常。
解决方案:使用Spring事务 + 数据库行锁(SELECT ... FOR UPDATE),确保库存扣减原子性。 -
问题2:商品图片加载慢
原因:原图体积大,未做压缩处理。
解决方案:前端使用图片懒加载,后端对上传图片进行压缩(限制分辨率为1080p),提升加载速度。 -
问题3:用户忘记密码无法找回
原因:未设计密码重置功能。
解决方案:新增“手机验证码重置密码”模块,通过短信接口发送验证码,验证后允许修改密码。
四、项目复盘:经验总结与扩展方向
4.1 开发收获与挑战
- 核心挑战:二手商品“成色描述标准化”(通过设计下拉选择框,如“95新/90新”)、订单状态流转逻辑(需覆盖用户取消、商家拒单等异常场景);
- 关键经验:数据库设计阶段需提前规划表关联(如订单表关联商品ID与用户ID),避免后期频繁修改表结构。
4.2 系统扩展方向
- 支付功能集成:对接支付宝、微信支付接口,实现“下单-支付”闭环;
- 会员积分体系:用户购买商品获得积分,积分可抵扣部分金额,提升用户粘性;
- AI成色检测:接入图像识别接口,自动识别二手手机成色,减少人工描述误差;
- 移动端适配:开发微信小程序,支持用户在手机端快速下单、查订单。
五、项目资源
本项目提供完整开发资料,可直接用于毕业设计或二次开发:
- 源码:后端Spring Boot工程、前端Vue页面;
- 数据库:MySQL建表语句、初始测试数据(含示例商品、用户账号);
- 文档:部署教程(含环境配置步骤)、API接口说明、测试报告;
- 设计图:系统功能结构图、数据库ER图、界面原型图。
如果本文对您的Spring Boot学习、电商类毕业设计有帮助,欢迎点赞+收藏+关注,后续会分享更多二手电商系统开发细节与问题解决方案!