毕业设计实战:基于Spring Boot的公司资产网站设计与实现全攻略
在开发“基于Spring Boot的公司资产网站”毕业设计时,曾因“资产申请与报废流程状态混乱”踩过关键坑——初期未设计清晰的资产状态机和申请审核流程,导致员工提交资产申请后管理员审核通过但资产库存未同步扣减、报废资产无法追溯去向,耗费3天重构资产管理模块、引入审核状态机和资产关联机制才解决问题📝。基于此次实战经验,本文精简拆解核心开发流程,附避坑要点与实操细节,为同类毕设提供可落地的实施参考。
一、需求分析:聚焦资产+申请双核心,避免功能冗余
部分同学易陷入“功能堆砌”误区,比如我曾耗时2天开发“资产地图可视化”模块,最终因偏离“资产管理、资产申请、资产报废、公告管理”核心需求被导师要求删减。明确“资产入库→员工申请→管理员审核→资产发放→资产报废”的业务闭环,是降低返工率的关键。
1. 核心角色与功能(精简版)
| 角色 | 核心功能 |
|---|---|
| 管理员 | 员工管理、资产管理(增删改查)、资产报废审核、资产申请审核、公告发布、资料库管理、字典管理 |
| 员工 | 资产查看、资产申请(提交申请)、资产报废申请、个人申请记录查询、公告浏览、资料库下载 |
2. 需求避坑要点
- 拒绝空想调研:邀请8名同学模拟“员工提交资产申请→管理员审核→资产发放→员工申请报废→管理员确认报废”完整流程,基于“员工需要知道申请进度”需求,增设“申请状态跟踪”模块(记录申请审核进度),实用性远大于冗余的“资产地图”;
- 明确约束条件:提前规定“资产编号自动生成(格式:ZC+年月日+序号)”“资产申请需审核才能发放”“资产报废需关联原资产”“资产库存不能为负数”,为系统实现提供明确依据。
二、技术选型:稳定框架+事务控制,新手可上手
前期曾尝试引入Redis缓存资产数据,因数据一致性难保证且学习成本高,调试耗时3天。最终确定“成熟框架+数据库事务”组合:
| 技术工具 | 选型理由 | 避坑提醒 |
|---|---|---|
| Spring Boot 2.x + MyBatis-Plus | 快速开发,简化配置,高效实现CRUD和业务逻辑,声明式事务管理方便 | 事务注解@Transactional记得在Service层添加;资产申请和库存操作必须加事务 |
| Vue 2.x + ElementUI | 组件丰富,快速构建前后台界面,表格和表单组件好用 | 申请状态用标签展示;资产库存实时显示 |
| MySQL 5.7 | 存储员工、资产、申请、报废等核心业务数据 | 资产数量字段用Integer类型;事务要保证申请和库存一致性 |
| Thymeleaf(可选) | 服务端模板引擎,适合快速开发后台管理界面 | 毕设时间充裕可统一用Vue |
三、数据库设计:业务关联清晰,支撑资产-申请-报废闭环
数据库设计直接影响后续开发效率。前期因未设计“申请状态字段”和“资产库存关联机制”,导致员工申请资产后库存未同步更新。
1. 核心表结构(精选8张表)
- 管理员表(users):id、username、password(MD5加密)、role、addtime;
- 员工表(yuangong):id、yuangong_uuid_number(工号)、yuangong_name、yuangong_phone、yuangong_id_number、yuangong_photo、bumen_types(部门)、zhiwei_types(职位)、yuangong_email、jinyong_types(账户状态)、create_time;
- 资产表(zichan):id、zichan_uuid_number(资产编号)、zichan_name、zichan_photo、zichan_danwei(单位)、zichan_types(资产类型)、zichan_kucun_number(资产数量)、zichan_yuzhi(阈值)、zichan_content、insert_time、create_time;
- 资产申请表(zichan_shenqing):id、yuangong_id(申请人)、zichan_id(申请资产)、zichan_shenqing_uuid_number(申请编号)、zichan_shenqing_types(申请类型)、zichan_shenqing_kucun_number(申请数量)、zichan_shenqing_content(申请缘由)、insert_time(申请时间)、zichan_shenqing_yesno_types(申请状态:0待审核/1通过/2拒绝)、zichan_shenqing_yesno_text(审核意见)、zichan_shenqing_shenhe_time(审核时间)、create_time;
- 资产报废表(zichan_baofei):id、yuangong_id(申请人)、zichan_id(报废资产)、zichan_baofei_uuid_number(报废编号)、zichan_baofei_types(报废类型)、zichan_baofei_kucun_number(报废数量)、zichan_baofei_content(报废缘由)、insert_time(报废时间)、create_time;
- 资料库表(ziliaoku):id、ziliaoku_uuid_number(资料编号)、ziliaoku_name、ziliaoku_types(资料类型)、ziliaoku_file(资料文件)、ziliaoku_content、insert_time、create_time;
- 公告表(gonggao):id、gonggao_name、gonggao_photo、gonggao_types(公告类型)、insert_time(发布时间)、gonggao_content、create_time;
- 字典表(dictionary):id、dic_code、dic_name、code_index、index_name、super_id、beizhu、create_time。
2. 关键业务SQL示例
示例SQL(查询员工申请记录及当前状态):
-- 查询员工的资产申请记录,包含资产信息和审核状态
SELECT
s.*,
z.zichan_name,
z.zichan_danwei,
y.yuangong_name
FROM zichan_shenqing s
LEFT JOIN zichan z ON s.zichan_id = z.id
LEFT JOIN yuangong y ON s.yuangong_id = y.id
WHERE s.yuangong_id = #{yuangongId}
ORDER BY s.insert_time DESC
关键避坑:申请状态用整数表示(0待审核/1通过/2拒绝);资产申请审核通过时必须在事务中同时扣减资产库存;资产报废时需增加报废记录并更新资产状态。
四、核心功能实现:6大模块满足答辩需求
无需复杂功能,优先完成以下6个核心模块,其中资产申请审核与库存同步是答辩重点。
1. 资产管理(核心业务模块)
- 核心逻辑:管理员添加资产信息(名称、类型、数量、阈值)→员工可查看资产列表→库存低于阈值时预警;
- 页面设计:资产列表显示名称、类型、数量、单位;库存预警用红色标识;
- 代码要点(资产新增):
public void addZichan(Zichan zichan) {
// 生成资产编号:ZC+年月日+随机4位
String uuid = "ZC" + new SimpleDateFormat("yyyyMMdd").format(new Date())
+ String.format("%04d", new Random().nextInt(10000));
zichan.setZichanUuidNumber(uuid);
zichan.setInsertTime(new Date());
zichan.setCreateTime(new Date());
zichanMapper.insert(zichan);
}
2. 资产申请管理(核心业务流程)
- 核心逻辑:员工提交资产申请(选择资产、填写数量)→管理员审核→审核通过则扣减库存;
- 页面设计:申请列表显示申请编号、资产名称、数量、状态标签;审核弹窗带意见输入;
- 代码要点(审核核心):
@Transactional
public void auditShenqing(Long shenqingId, Integer status, String reply) {
// 1. 更新申请审核状态
ZichanShenqing shenqing = zichanShenqingMapper.selectById(shenqingId);
shenqing.setZichanShenqingYesnoTypes(status);
shenqing.setZichanShenqingYesnoText(reply);
shenqing.setZichanShenqingShenheTime(new Date());
zichanShenqingMapper.updateById(shenqing);
// 2. 如果审核通过,扣减资产库存
if (status == 1) { // 通过
Zichan zichan = zichanMapper.selectById(shenqing.getZichanId());
Integer applyCount = shenqing.getZichanShenqingKucunNumber();
// 校验库存是否充足
if (zichan.getZichanKucunNumber() < applyCount) {
throw new RuntimeException("资产库存不足");
}
// 扣减库存
zichan.setZichanKucunNumber(zichan.getZichanKucunNumber() - applyCount);
zichanMapper.updateById(zichan);
// 3. 记录操作日志(可选)
insertLog("资产发放", "员工 " + shenqing.getYuangongId() + " 申请资产 " +
zichan.getZichanName() + " " + applyCount + "个");
}
}
3. 资产报废管理(资产退出流程)
- 核心逻辑:员工提交资产报废申请(选择资产、填写报废数量和原因)→管理员确认报废;
- 页面设计:报废列表显示报废编号、资产名称、数量、原因;
- 代码要点:报废申请无需审核可直接记录,但需校验报废数量不超过持有量;报废后资产数量扣减。
4. 资料库管理(文档管理模块)
- 核心逻辑:管理员上传公司资料文件(制度文档、操作手册等)→员工可下载查看;
- 页面设计:资料列表显示名称、类型、上传时间;详情页可下载附件;
- 代码要点:文件上传使用MultipartFile;文件存储在服务器指定目录,数据库保存文件路径。
5. 公告信息管理(资讯模块)
- 核心逻辑:管理员发布公司公告(资产管理制度、通知等)→员工首页查看;
- 页面设计:后台富文本编辑器;前台列表展示;
- 代码要点:公告排序按发布时间倒序;首页轮播显示最新3条。
6. 员工管理(用户模块)
- 核心逻辑:管理员添加/编辑员工信息(工号、姓名、部门、职位)→员工可登录查看个人信息;
- 页面设计:员工列表显示工号、姓名、部门、职位、状态;
- 代码要点:工号自动生成;账户状态可启用/禁用。
五、资产特色功能设计(关键加分项)
公司资产管理系统的核心在于“资产流向清晰”,即资产入库→申请发放→使用→报废全流程可追溯,以下是实测有效的设计方案:
1. 资产-申请-报废全流程追溯
| 环节 | 记录内容 | 可追溯信息 |
|---|---|---|
| 资产入库 | 资产编号、名称、类型、初始数量 | 什么时间进了什么资产、多少数量 |
| 资产申请 | 申请编号、申请人、申请数量、审核状态 | 谁申请了什么资产、申请了多少、是否批准 |
| 资产发放 | 发放时间、发放数量、发放人 | 资产去了哪里、谁领用了 |
| 资产报废 | 报废编号、报废人、报废数量、报废原因 | 资产什么时间报废、为什么报废 |
2. 库存预警机制
// 定时任务扫描库存低于阈值的资产
@Component
public class KucunAlertTask {
@Scheduled(cron = "0 0 9 * * ?") // 每天上午9点执行
public void checkKucun() {
List<Zichan> list = zichanMapper.selectList(null);
for (Zichan z : list) {
if (z.getZichanKucunNumber() < z.getZichanYuzhi()) {
// 发送预警通知(可存数据库或发送邮件)
insertAlert(z.getZichanName(), z.getZichanKucunNumber(), z.getZichanYuzhi());
}
}
}
}
3. 资产申请数量校验
// 申请资产时校验库存
public void applyZichan(ZichanShenqing shenqing) {
Zichan zichan = zichanMapper.selectById(shenqing.getZichanId());
// 1. 校验资产是否存在
if (zichan == null) {
throw new RuntimeException("资产不存在");
}
// 2. 校验申请数量是否为正数
if (shenqing.getZichanShenqingKucunNumber() <= 0) {
throw new RuntimeException("申请数量必须大于0");
}
// 3. 校验库存是否充足
if (zichan.getZichanKucunNumber() < shenqing.getZichanShenqingKucunNumber()) {
throw new RuntimeException("资产库存不足,当前库存:" + zichan.getZichanKucunNumber());
}
// 4. 生成申请编号并保存
shenqing.setZichanShenqingUuidNumber("SQ" + System.currentTimeMillis());
shenqing.setInsertTime(new Date());
shenqing.setZichanShenqingYesnoTypes(0); // 待审核
shenqing.setCreateTime(new Date());
zichanShenqingMapper.insert(shenqing);
}
六、测试与答辩:流程演示为主,突出资产闭环
1. 核心测试用例
| 测试场景 | 操作步骤 | 预期结果 |
|---|---|---|
| 资产入库全流程 | 管理员新增资产→查看资产列表 | 资产信息正确显示;编号自动生成 |
| 员工申请全流程 | 员工提交申请→管理员审核通过 | 申请状态更新;资产库存扣减 |
| 库存不足校验 | 申请数量大于库存时提交 | 提示“资产库存不足” |
| 资产报废流程 | 员工提交报废申请→管理员确认 | 报废记录生成;资产数量扣减 |
| 资料下载功能 | 员工点击资料下载 | 文件正常下载 |
2. 答辩准备技巧
- 演示流程:分角色演示(管理员端 + 员工端)→ 管理员录入资产 → 员工查看资产 → 员工提交申请 → 管理员审核 → 员工查看申请状态 → 员工提交报废 → 管理员确认报废 → 展示完整的资产-申请-报废闭环;
- 业务讲解:准备一页PPT展示系统功能结构图(图4.3),说明每个模块的作用和角色定位;
- 技术亮点:重点讲解资产申请与库存扣减的事务一致性、库存预警定时任务、资产流向追溯机制;
- 突出问题解决:讲清“如何保证资产库存不超发”(事务+申请数量校验)、“资产去向如何追溯”(申请记录+报废记录)、“库存预警如何实现”(定时任务+阈值判断);提前预判“为什么要设计资产编号自动生成”,回答“保证每一笔资产都有唯一标识,便于追溯和管理”。
结语
本文核心是“聚焦资产-申请-报废核心业务、实现资产数量安全控制、设计完整的资产闭环”。毕设无需复杂系统,把资产管理+资产申请+资产报废的业务逻辑讲透、实现一个可运行的公司资产网站、展示完整的资产流向闭环,即可成为答辩亮点。
若需完整项目源码(带详细注释)、测试数据SQL脚本、资产申请表完整设计,可在评论区留言“SpringBoot公司资产网站”获取;开发中遇问题(如事务一致性、申请状态设计、库存并发控制),也可留言咨询~ 祝毕设顺利!🎉