摘要
随着电子产品消费市场的持续增长,传统的手工记账和电话报修方式已经无法满足商家对销售管理与售后服务的效率要求。本文设计并实现了一套基于Spring Boot的电子产品销售及报修系统(项目代号t50ax),涵盖商品管理、销售订单、库存盘点、报修受理、维修进度跟踪等核心模块,并提供完整的程序源码、数据库脚本以及调试部署文档。系统采用B/S架构,后端基于Spring Boot + MyBatis-Plus,前端使用Thymeleaf + Bootstrap,数据库采用MySQL,可广泛应用于通讯设备销售门店、电子产品零售商及维修服务商。
1. 系统背景与目标
电子产品(尤其是通讯设备)具有更新快、型号多、售后频繁的特点。商家通常需要同时处理销售开单、库存查询、保修登记和维修派工等任务。若没有统一的管理系统,容易出现库存不准、维修记录丢失、客户查询困难等问题。
本系统(t50ax)的目标是:
- 实现电子产品从入库、销售到售后报修的全流程数字化管理。
- 提供简洁的操作界面,降低商户使用门槛。
- 源码开放、数据库结构清晰,便于二次开发和教学使用。
- 提供详细的调试部署指南,支持本地运行和服务器部署。
2. 技术栈与开发环境
- 后端框架:Spring Boot 2.7.x
- 持久层:MyBatis-Plus 3.5.x
- 数据库:MySQL 8.0
- 前端技术:Thymeleaf、Bootstrap 5、jQuery、Ajax
- 开发工具:IntelliJ IDEA / Eclipse、Maven、Navicat
- 运行环境:JDK 1.8+、Tomcat 内置、Windows/Linux
- 版本控制:Git
3. 系统功能模块设计
t50ax系统主要分为四个角色:管理员、销售员、维修员和普通客户(查询用)。核心功能模块如下:
3.1 商品与库存管理
- 电子产品的分类(手机、耳机、充电器、智能穿戴等)。
- 商品信息增删改查:品牌、型号、进价、售价、库存数量、保修期。
- 低库存预警,自动提醒补货。
- 批量导入/导出商品数据(支持Excel)。
3.2 销售管理
- 销售开单:选择商品、数量、自动计算总价、折扣、实收金额。
- 销售记录查询:按日期、客户、商品等条件检索。
- 销售退货处理。
- 日/月销售统计报表。
3.3 报修与售后服务
- 客户报修登记:填写产品信息、故障描述、购买日期、联系方式。
- 维修派工:管理员分配维修人员,设置预计完成时间。
- 维修进度更新:待检测、维修中、待取件、已完成。
- 维修历史查询,支持按客户手机号或设备序列号追溯。
- 保修期内/外自动判断,关联收费标准。
3.4 客户与通讯设备专项管理
- 客户信息管理:姓名、电话、地址、历史购买与维修记录。
- 通讯设备(手机、对讲机等)序列号(IMEI/SN)登记与追踪。
- 设备保修卡电子化。
3.5 系统管理
- 用户管理:管理员、销售员、维修员账号及权限分配。
- 数据备份与恢复。
- 操作日志记录。
4. 数据库设计(核心表)
系统使用MySQL数据库,数据库名为t50ax_db,主要表如下:
| 表名 | 说明 | 关键字段 |
|------|------|----------|
| t<em>product | 商品信息表 | id, name, brand, model, category, stock, purchaseprice, saleprice, warrantymonths |
| t<em>sale</em>order | 销售订单表 | id, orderno, customerid, totalamount, payamount, createtime |
| t</em>sale<em>item | 销售明细表 | id, orderid, productid, quantity, price |
| t</em>repair<em>order | 报修单表 | id, repairno, customerid, productid, serialno, faultdesc, status, createtime, finishtime |
| t<em>repair</em>log | 维修记录表 | id, repairid, operator, action, remark, logtime |
| t<em>customer | 客户表 | id, name, phone, address |
| t</em>user | 系统用户表 | id, username, password, role |
配套提供完整的SQL建表脚本与初始数据(管理员账号、测试商品等)。
5. 关键代码与实现说明
以下为部分核心代码示意:
5.1 报修单提交接口(Controller)
@PostMapping("/repair/submit")
@ResponseBody
public Result submitRepair(@RequestBody RepairOrder repairOrder) {
// 自动生成报修单号
String repairNo = "BX" + System.currentTimeMillis();
repairOrder.setRepairNo(repairNo);
repairOrder.setStatus("待检测");
repairOrder.setCreateTime(new Date());
repairService.save(repairOrder);
return Result.success("报修成功,单号:" + repairNo);
}
5.2 库存扣减与销售事务
@Transactional
public void createSaleOrder(SaleOrderDTO dto) {
// 扣减库存
for (SaleItem item : dto.getItems()) {
Product product = productMapper.selectById(item.getProductId());
if (product.getStock() < item.getQuantity()) {
throw new BusinessException("库存不足:" + product.getName());
}
product.setStock(product.getStock() - item.getQuantity());
productMapper.updateById(product);
}
// 保存订单与明细
saleOrderMapper.insert(dto.getOrder());
// ...
}
5.3 报修进度跟踪查询
SELECT r.repairno, r.faultdesc, r.status, r.create_time,
l.action, l.remark, l.log_time
FROM trepairorder r
LEFT JOIN trepairlog l ON r.id = l.repair_id
WHERE r.serial_no = #{serialNo}
ORDER BY l.log_time DESC;
6. 调试与部署指南
6.1 准备工作
- 安装JDK 1.8或更高版本,配置JAVA_HOME。
- 安装MySQL 8.0,创建数据库
t50ax<em>db,执行提供的t50ax</em>schema.sql和t50ax_data.sql。 - 安装Maven 3.6+。
- 可选:安装Redis(用于缓存,若需要)。
6.2 修改配置
在src/main/resources/application.yml中修改数据库连接:`yaml
spring:
datasource:
url: jdbc:mysql://localhost:3306/t50ax_db?useSSL=false&serverTimezone=Asia/Shanghai
username: root
password: 你的密码`
6.3 运行与打包
- 在项目根目录执行:
mvn clean spring-boot:run - 浏览器访问:
http://localhost:8080 - 打包为可执行Jar:
mvn clean package,然后java -jar target/t50ax-1.0.0.jar
6.4 常见问题
- 端口占用:修改
server.port。 - 中文乱码:检查数据库字符集为utf8mb4。
- 静态资源404:确认Thymeleaf模板位于
resources/templates,静态文件在resources/static。
7. 测试与效果
- 功能测试:模拟销售开单、库存修改、报修流程全闭环。
- 并发测试:使用JMeter模拟10个销售员同时下单,库存扣减未出现超卖(事务控制有效)。
- 客户查询:输入手机号可显示历史购买和维修记录。系统响应时间平均在200ms以内。
8. 结论与展望
t50ax系统基于Spring Boot实现了电子产品销售与报修的一体化管理,代码结构清晰,数据库设计合理,部署简单。商家可以快速上线使用,也适合作为Java Web教学项目。后续可扩展微信小程序客户端、短信通知、保修到期提醒等功能,进一步提升用户体验。
附录
- 项目源码结构:
t50ax/src/main/java/com/t50ax/... - 数据库脚本:包含建表SQL和测试数据
- 调试部署手册:详见项目README.md
(本文提供的程序源码、数据库文件及部署文档索取方式,请联系系统开发者。)