SpringBoot+MySQL实战:汽车企业ERP管理系统从需求分析到核心代码实现
01|SpringBoot+MySQL实战:汽车企业ERP管理系统从需求分析到核心代码实现
前言:这篇文章解决什么问题?
很多同学在做 Java 管理系统或毕业设计时,最容易卡在三个地方:业务模块怎么拆、数据库表怎么设计、登录和通用 CRUD 接口怎么写。本文以“马瑞利汽车企业 ERP 管理系统”为例,把原本偏论文式的系统设计整理成一篇项目实战复盘。
项目主要基于 SpringBoot + Java + MySQL 实现,围绕汽车企业常见的客户、供应商、仓库、采购、销售、生产、薪酬、考勤等业务进行模块化设计。你可以把它当作一个企业后台管理系统的完整拆解案例,用来参考需求分析、数据库设计、接口设计和页面展示。
|
适合阅读人群 Java/SpringBoot 初学者、正在做课程设计或毕业设计的同学、想快速了解 ERP 管理系统模块拆分方式的开发者。 |
1. 项目简介
本系统面向汽车企业内部管理场景,目标是把传统分散的人工记录、库存查询、订单跟进和员工信息维护,整合到一个统一的 Web 管理平台中。系统通过浏览器与服务器进行数据交互,管理员、员工用户和仓管用户可以根据权限进入不同模块,完成数据新增、查询、修改、删除、审核和详情查看等操作。
|
维度 |
内容 |
|
项目名称 |
马瑞利汽车企业 ERP 管理系统 |
|
开发模式 |
B/S 架构,浏览器访问后台管理系统 |
|
核心目标 |
提升企业内部信息管理效率,减少人工记录造成的数据遗漏和查询低效 |
|
主要角色 |
管理员、员工用户、仓管用户 |
|
核心业务 |
客户信息、供应商、仓库、采购计划、销售订单、生产计划、入库/出库、员工薪酬、考勤休假、收支项目 |
2. 技术栈选型
这个项目的技术栈不追求复杂,而是以“能跑通完整业务闭环、易维护、适合课程设计/毕业设计展示”为主。
|
层级 |
技术/工具 |
作用 |
|
后端 |
Java、SpringBoot |
实现业务接口、角色权限、数据处理和统一响应 |
|
数据库 |
MySQL 5.7 |
存储用户、仓库、订单、客户、薪酬等业务数据 |
|
前端 |
JavaScript、Ajax、jQuery |
完成页面交互、表单提交、数据查询和后台列表展示 |
|
开发环境 |
IDEA、Tomcat |
项目开发、运行与调试 |
|
安全相关 |
MD5密码加密、Token登录 |
完成基础身份认证和登录态保持 |
3. 系统架构设计
系统整体采用常见的三层结构:表现层负责页面展示与用户交互,业务逻辑层负责接口处理、权限判断和业务规则封装,数据层负责 MySQL 数据持久化。这样的结构对管理系统非常友好,后续要扩展新的业务模块时,只需要按“页面—接口—数据表”的路径逐步补充。
|
层级 |
职责 |
说明 |
|
表现层 UI |
页面展示、表单输入、列表查询、按钮操作 |
让用户完成登录、查询、添加、删除、详情查看等操作 |
|
业务逻辑层 BLL |
参数处理、业务校验、Token处理、统一响应 |
接收前端请求,调用服务层完成数据操作 |
|
数据层 DL |
MySQL 数据库存储 |
保存用户、客户、仓库、订单、薪酬、收支等数据 |
4. 功能模块拆分
ERP 系统最重要的不是页面数量,而是业务边界是否清晰。本项目按用户角色和业务对象进行模块拆分,基本覆盖了企业内部管理的常见数据流。
|
角色/模块 |
可操作内容 |
设计重点 |
|
管理员 |
系统用户、客户、供应商、仓库、采购计划、销售订单、薪酬、考勤、收支项目 |
拥有全局维护能力,负责基础数据和业务数据管理 |
|
员工用户 |
个人资料、仓库信息、采购计划、销售订单、生产计划、薪酬、考勤休假 |
以查询和业务填报为主,权限低于管理员 |
|
仓管用户 |
仓库信息、入库信息、出库信息、薪酬等 |
重点围绕库存数量变化和商品位置管理 |
|
库存模块 |
商品名称、编号、位置、数量、入库、出库 |
ERP 中最核心的数据资产,直接影响采购和销售 |
|
订单/计划模块 |
采购计划、销售订单、生产计划 |
用于串联业务需求、库存变化和生产安排 |
|
员工管理模块 |
薪酬、考勤、休假、用户审核 |
完成企业内部人员数据维护 |
5. 关键业务流程
5.1 登录流程
用户登录时,系统先根据用户名、邮箱或手机号查询用户,再判断用户组、审核状态、账号状态,最后对输入密码进行加密比对。验证通过后,系统会生成 Token 并返回给前端,用于后续接口访问。
- 输入账号、邮箱或手机号以及密码。
- 后端查询用户表,判断用户是否存在。
- 读取用户组,判断该用户是否需要审核以及审核是否通过。
- 判断账号状态是否可用。
- 密码加密后与数据库密码比对,成功后生成 Token。

图1 登录界面:包含账号、密码和验证码验证。
@PostMapping("login")
public Map<String, Object> login(@RequestBody Map<String, String> data,
HttpServletRequest request) {
String username = data.get("username");
String email = data.get("email");
String phone = data.get("phone");
String password = data.get("password");
Map<String, String> query = new HashMap<>();
if (username != null && !"".equals(username)) {
query.put("username", username);
} else if (email != null && !"".equals(email)) {
query.put("email", email);
} else if (phone != null && !"".equals(phone)) {
query.put("phone", phone);
} else {
return error(30000, "账号或密码不能为空");
}
List resultList = service.select(query, new HashMap<>()).getResultList();
if (resultList == null || resultList.size() <= 0) {
return error(30000, "用户不存在");
}
User user = (User) resultList.get(0);
String md5Password = service.encryption(password);
if (!user.getPassword().equals(md5Password)) {
return error(30000, "账号或密码不正确");
}
AccessToken token = new AccessToken();
token.setToken(UUID.randomUUID().toString().replaceAll("-", ""));
token.setUser_id(user.getUserId());
tokenService.save(token);
JSONObject ret = new JSONObject();
ret.put("obj", user);
ret.put("token", token.getToken());
return success(ret);
}
5.2 注册流程
注册模块主要解决新用户账号创建问题。系统会先检查用户名是否已经存在,再将密码加密后保存到数据库。

图2 注册界面:提交账号、密码、昵称、邮箱、手机号等基础信息。
@PostMapping("register")
public Map<String, Object> signUp(@RequestBody User user) {
Map<String, String> query = new HashMap<>();
query.put("username", user.getUsername());
List list = service.select(query, new HashMap<>()).getResultList();
if (list.size() > 0) {
return error(30000, "用户已存在");
}
user.setUserId(null);
user.setPassword(service.encryption(user.getPassword()));
service.save(user);
return success(1);
}
5.3 通用新增与更新接口
后台管理系统中,大量模块都具有相似的数据维护逻辑,例如客户信息、仓库信息、生产计划、薪酬信息、收支项目等。为了减少重复代码,可以抽象出通用的新增和更新逻辑。
@PostMapping("/add")
@Transactional
public Map<String, Object> add(HttpServletRequest request) throws IOException {
service.insert(service.readBody(request.getReader()));
return success(1);
}
@Transactional
public void update(Map<String, String> query,
Map<String, String> config,
Map<String, Object> body) {
StringBuffer sql = new StringBuffer("UPDATE `").append(table).append("` SET ");
for (Map.Entry<String, Object> entry : body.entrySet()) {
Object value = entry.getValue();
sql.append("`").append(humpToLine(entry.getKey())).append("`").append("=");
sql.append(value instanceof String ? "'" + value + "'" : value).append(",");
}
sql.deleteCharAt(sql.length() - 1);
sql.append(toWhereSql(query, "0".equals(config.get(FindConfig.LIKE))));
runCountSql(sql.toString()).executeUpdate();
}
|
代码优化提醒 原论文代码中存在字符串拼接 SQL 的写法,博客发布时建议主动补一句:生产环境更推荐使用 MyBatis/JPA 参数绑定、权限拦截器和统一异常处理,避免 SQL 注入与越权访问风险。 |
6. 数据库设计精简版
数据库设计围绕“角色用户 + ERP业务对象”展开。为了让博客读者快速理解,不建议把论文中的所有字段完整铺开,而是保留核心表与关键字段。
|
数据表 |
核心字段 |
业务含义 |
|
warehouse_information |
warehouse_information_id、trade_name、article_no、commodity_location、commodity_quantity |
仓库商品基础信息,记录商品编号、位置和库存数量 |
|
warehousing_information |
warehousing_information_id、trade_name、article_no、receipt_quantity、warehousing_date |
入库记录,记录商品入库数量和入库日期 |
|
delivery_information |
delivery_information_id、trade_name、article_no、delivery_quantity、issue_date |
出库记录,记录商品出库数量和出库日期 |
|
customer_information |
customer_information_id、customer_name、customer_gender、customer_address、contact_number |
客户资料,用于销售与售后信息维护 |
|
employee_users |
employee_users_id、employee_name、employee_gender、examine_state、user_id |
员工账号扩展信息,关联系统用户 |
|
warehouse_keeper_user |
warehouse_keeper_user_id、name、sex_of_warehouse_keeper、examine_state、user_id |
仓管用户信息,负责库存业务操作 |
|
employee_compensation |
employee_compensation_id、ordinary_employees、warehouse_keeper、salary_month、salary_of_this_month、issue_date |
员工薪酬记录,支持按月份和发放日期管理 |
7. 页面效果展示
CSDN 技术文章不要只贴文字。对于管理系统类项目,建议至少展示登录页、核心列表页、库存页和业务页,这样读者可以直观看到项目完成度。
图3 系统用户管理:支持员工姓名、性别筛选以及详情查看。
图4 客户信息管理:支持客户姓名搜索、详情查看和基础信息维护。
图5 仓库信息管理:展示商品名称、编号、位置、数量,并提供入库、出库操作入口。
图6 生产计划管理:围绕商品名称、生产数量、成本核算和生产进度进行管理。
图7 员工薪酬管理:按工资月份、本月工资和发放日期维护薪酬数据。
图8 收支项目管理:用于记录项目名称、收支类型、项目日期和收支金额。
8. 系统测试思路
测试部分不建议照搬论文中的大段描述,CSDN 读者更关心“测了什么、结果怎样”。可以用一张表快速说明。
|
测试项 |
测试流程 |
预期结果 |
|
用户登录 |
输入正确/错误账号密码进行登录 |
正确时进入后台,错误时提示账号或密码不正确 |
|
员工信息查看 |
登录后进入员工用户列表 |
能够正常展示员工数据 |
|
员工信息添加 |
点击添加,填写表单并提交 |
提交后列表出现新增记录 |
|
员工搜索 |
在搜索框输入关键字并点击查询 |
列表展示包含关键字的数据 |
|
密码修改 |
管理员修改密码后重新登录 |
旧密码失效,新密码可登录 |
9. 项目总结与可优化方向
从项目完整度来看,这个系统已经覆盖了汽车企业 ERP 的基础管理场景:用户角色、仓库管理、客户资料、采购销售、生产计划、薪酬考勤和收支项目。对于课程设计或毕业设计来说,它的优势是模块完整、业务线清晰、页面展示直观。
如果要继续提升项目质量,可以从以下几个方向优化:
- 权限控制升级:增加拦截器或 Spring Security,细化到按钮级权限。
- SQL 安全升级:使用 MyBatis/JPA 参数绑定,减少字符串拼接 SQL。
- 库存联动:入库自动增加库存,出库自动扣减库存,并校验库存不足。
- 数据统计:增加销售订单、库存预警、薪酬支出、收支趋势等图表。
- 部署优化:使用 Docker Compose 编排 SpringBoot + MySQL,方便一键部署。
- 接口文档:接入 Swagger/OpenAPI,便于前后端联调。
结尾
以上就是基于 SpringBoot 的汽车企业 ERP 管理系统项目复盘。相比直接发布完整论文,把内容改成“项目背景—技术栈—架构—模块—数据库—核心代码—页面效果—测试—优化”的结构,更适合 CSDN 读者阅读,也更容易被搜索到和收藏。
如果你也在做 SpringBoot 管理系统类项目,建议优先把角色权限、核心业务表和通用 CRUD 这三部分梳理清楚;只要这三块稳定,后续添加新模块会顺很多。
更多推荐
所有评论(0)