毕业设计实战:基于Spring Boot的工作流程管理系统设计与实现,从需求到测试全流程拆解,新手也能轻松通关!

45 阅读16分钟

毕业设计实战:基于Spring Boot的工作流程管理系统设计与实现,从需求到测试全流程拆解,新手也能轻松通关!

谁懂啊!当初做工作流程管理系统毕设时,光用户表和项目表的关联就卡了3天——一开始没设外键,查某用户参与的项目时数据全乱套,导师看了直接让我“重画数据库E-R图”😫 后来踩遍无数坑才摸出一套高效落地流程,今天把需求分析、技术选型、功能实现到测试的细节全说透,宝子们不用再熬夜改代码,轻松搞定毕设!

一、先搞懂“工作流程管理系统要啥”!需求分析别瞎蒙

刚开始我跳过需求分析就写代码,花两周加了个“项目聊天功能”,结果导师一句“核心是项目管理与流程管控,不是社交互动”直接打回重改!后来才明白,需求分析得先抓准“谁用系统、要干啥”,这步做对,后面少走90%弯路。

1. 核心用户&功能拆解(踩坑后总结版)

工作流程管理系统就两类核心用户:管理员普通用户(别加“超级管理员角色”!我当初加了后,权限逻辑混乱,普通用户连基础项目查询都卡壳,最后砍掉才顺畅):

  • 管理员端(必做功能):
    • 用户管理:查看用户列表、新增用户、重置密码、模糊查询(支持按姓名/手机号搜,我当初没加,查用户要翻几十页)
    • 项目管理:审核项目信息、查看项目进度、作废违规项目(用不同颜色标“待审核/已通过/已拒绝”,直观清晰)
    • 公告管理:发布公告、修改公告类型、删除过期公告(加“公告类型”字段,比如“系统通知/项目提醒”,方便筛选)
    • 字典表管理:维护字段编码、更新字段名称(别让管理员手动输编码,用下拉框选,效率翻倍)
  • 普通用户端(核心功能):
    • 个人中心:修改个人信息(头像、联系方式)、查看参与项目(按“创建时间”排序,我当初没加,用户找旧项目要翻半天)
    • 项目操作:申请加入项目、提交项目进度、查看项目审核结果(提交进度时需上传佐证材料,避免虚假填报)
    • 公告查看:按类型筛选公告、查看公告详情(显示“公告时间”,方便用户追溯历史通知)

2. 需求分析避坑指南(血泪教训!)

  • 别光靠“空想”!找2个同学模拟管理员和普通用户提意见:比如有同学说“想快速查项目审核结果”,我才加了“项目状态提醒”,比瞎加“项目聊天功能”实用多了
  • 一定要画用例图!用DrawIO画简单版,标清“管理员-审核项目”“用户-申请加入项目”,跟导师汇报时,比光说“我要做XX功能”直观10倍(当初没画,导师听20分钟还没get到逻辑)
  • 写“需求规格说明书”!不用复杂,把“功能描述、约束条件”写清楚(比如“项目名称不能重复”“用户身份证号需唯一”),编码时对着做,不会跑偏

3. 可行性分析别敷衍!3点写清楚就能过

导师超爱问“你这系统可行吗”,别只说“我觉得可行”,从3个角度写,显得专业:

  • 技术可行性:Spring Boot、Vue、MySQL都是课堂学过的,图书馆有《Spring Boot实战》《Vue开发指南》,遇到问题能查资料(别选Vue3!我当初想试,环境配置卡了一周,换回Vue2才顺利)
  • 经济可行性:所有工具全免费!Eclipse(社区版)、MySQL、Tomcat官网直接下,不用花钱买版权,答辩时说“开发成本为0”,导师会觉得你懂成本控制
  • 操作可行性:界面用简洁布局,按钮位置参考同类管理系统,我找系里老师测试,3分钟就学会审核项目,导师直接认可

二、技术选型别跟风!这套组合稳到爆

刚开始我跟风用Spring Boot+Vue3+Redis,结果“项目进度缓存”卡了5天——Redis的key-value逻辑不熟,进度数据总加载失败😫 后来换成Spring Boot+Vue2+MySQL+Tomcat9,新手友好度拉满,调试效率翻两倍!

1. 技术栈详细对比(附避坑提醒)

宝子们别盲目选“最新技术”,稳定比炫酷重要!我整理了4个核心工具的选择理由和坑点,直接抄:

技术工具为啥选它避坑提醒!(重点!)
Spring Boot比SSM配置简单,自带依赖管理别用3.x版本!2.7.x就行,3.x和Vue2兼容性差,会报“接口请求错误”
MySQL 8.0占内存小,存用户、项目数据足够用安装时设“utf8mb4”编码!我当初用默认编码,用户姓名含特殊符号乱码,查2小时才解决
Tomcat 9.0稳定!和Spring Boot、Vue适配最好别用Tomcat 10!会出现“Servlet API包名变更”,答辩时崩了就完了
Vue 2文档丰富,新手易上手,组件生态成熟别用Vue CLI 5!用4.x版本,5.x创建项目时依赖加载慢,还容易报错

2. 开发环境搭建(step by step 实操)

很多宝子卡在“环境配置”,跟着步骤来超简单,我当初一次成功:

  1. 装JDK 1.8:记路径(比如D:\Java\jdk1.8.0_301),配置“JAVA_HOME”别错,不然Eclipse认不到
  2. 装Eclipse(社区版):选“Eclipse IDE for Enterprise Java Developers”,自带Spring Boot插件
  3. 装MySQL 8.0:用Navicat管理(可视化工具超方便,新建表直接选字段类型,比命令行快10倍)
  4. 配Vue项目:用Vue CLI 4创建项目,选“Manually select features”,勾“Router”“Vuex”“CSS Pre-processors”,启动看到“Compiled successfully”就是成功

3. 架构图一定要画!答辩加分项

用DrawIO画三层架构图(像论文里的“系统架构图”),标清“表现层-业务层-数据访问层”:比如用户点“申请加入项目”→Vue页面传请求→Spring Boot Controller接请求→Service校验权限→Mapper存数据。去年答辩时,评委特意夸这图“逻辑清晰”,比光说“我用了Spring Boot”专业多了!

三、数据库设计:别让表关联坑了你

这部分是毕设的“核心骨架”,我当初没关联“项目表”和“用户表”,查“某用户参与的项目”要写3层嵌套SQL,调试到凌晨1点😫 后来按“实体-属性-关系”设计,终于理清了。

1. 核心实体&属性(附ER图绘制技巧)

先确定“实体”(用户、项目、公告),再想“属性”,别漏关键字段!我整理了必做的7张表,直接照着画ER图:

  • 用户表(yonghu):id(主键)、yonghu_name(姓名)、yonghu_phone(手机号,唯一)、password(MD5加密!存明文会被导师说“不安全”)、yonghu_email(邮箱)
  • 项目表(xiangmu):id(主键)、xiangmu_name(项目名称)、xiangmu_types(项目类型)、yonghu_id(关联项目负责人)、xiangmu_yesno_types(审核状态)
  • 项目进度表(xiangmujindu):id(主键)、xiangmu_id(关联项目)、yonghu_id(关联用户)、xiangmujindu_text(进度详情)、insert_time(添加时间)
  • 公告表(news):id(主键)、news_name(公告标题)、news_types(公告类型)、news_photo(公告图片路径)、insert_time(公告时间)

画ER图用Visio或亿图,记住3个规则:

  1. 矩形代表“实体”(比如“用户”“项目”)
  2. 椭圆代表“属性”(比如用户的“姓名”“手机号”)
  3. 菱形代表“关系”(比如“用户-参与-项目”是多对多,一个用户能参与多个项目,一个项目能有多个用户参与) 避坑提醒:别把“公告图片、项目封面”存数据库!我当初存二进制导致数据库崩溃,改成存“文件路径”(比如/static/photo/news1.jpg)才对。

2. 数据库物理设计(附建表SQL示例)

ER图画好后,转成实际表,字段类型和约束别瞎设!比如“项目进度详情”用VARCHAR(500),别用TEXT,不然查询速度慢;“用户手机号”设UNIQUE约束,避免重复。

给宝子们贴“项目表”的建表SQL,复制到Navicat就能用:

CREATE TABLE `xiangmu` (
  `id` INT NOT NULL AUTO_INCREMENT COMMENT '项目ID',
  `xiangmu_name` VARCHAR(200) NOT NULL COMMENT '项目名称',
  `xiangmu_photo` VARCHAR(200) DEFAULT NULL COMMENT '项目封面路径',
  `xiangmu_types` INT DEFAULT NULL COMMENT '项目类型',
  `xiangmu_address` VARCHAR(200) DEFAULT NULL COMMENT '所属地点',
  `yonghu_id` INT DEFAULT NULL COMMENT '关联项目负责人ID',
  `xiangmu_content` VARCHAR(500) DEFAULT NULL COMMENT '项目简介',
  `xiangmu_yesno_types` INT DEFAULT 0 COMMENT '审核状态:0待审核/1已通过/2已拒绝',
  `xiangmu_yesno_text` VARCHAR(200) DEFAULT NULL COMMENT '审核结果',
  `insert_time` TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `create_time` TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '更新时间',
  PRIMARY KEY (`id`),
  KEY `fk_yonghu` (`yonghu_id`), -- 外键关联用户表
  UNIQUE KEY `uk_xiangmu_name` (`xiangmu_name`) -- 项目名称唯一
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='项目表';

3. 表关联测试!别等编码才发现错

建完表一定要测关联!比如在“项目进度表”插数据(用户ID=1,项目ID=1),用JOIN查询:

SELECT y.yonghu_name, x.xiangmu_name, j.xiangmujindu_text, j.insert_time
FROM xiangmujindu j
JOIN yonghu y ON j.yonghu_id = y.id
JOIN xiangmu x ON j.xiangmu_id = x.id
WHERE j.id = 1;

如果能查出“用户名+项目名+进度详情+添加时间”,说明关联没问题;如果报错“Unknown column”,大概率是外键没设对,赶紧检查表结构。

四、功能实现:核心模块代码+页面设计

不用做所有功能!先搞定4个核心模块,答辩时足够出彩。每个模块我都附了代码片段和页面设计要点,宝子们直接套就行。

1. 管理员端:项目审核模块(必做!)

这是管理员的核心功能,实现“审核项目、填写审核结果”,重点说“审核状态校验”——别漏“已审核项目不能重复审核”,我当初就是这里踩了大坑!

(1)核心代码片段(Spring Boot)

Controller层(处理项目审核):

@RestController
@RequestMapping("/admin/xiangmu")
public class AdminXiangmuController {
    @Autowired
    private XiangmuService xiangmuService;

    // 项目审核
    @PostMapping("/audit")
    public Result auditXiangmu(@RequestBody XiangmuAuditDTO auditDTO, HttpSession session) {
        // 1. 获取当前登录管理员
        Admin admin = (Admin) session.getAttribute("loginAdmin");
        if (admin == null) {
            return Result.error("未登录,请先登录!");
        }
        // 2. 校验项目是否存在
        Xiangmu xiangmu = xiangmuService.getById(auditDTO.getProjectId());
        if (xiangmu == null) {
            return Result.error("项目不存在!");
        }
        // 3. 校验项目是否已审核
        if (xiangmu.getXiangmu_yesno_types() != 0) {
            return Result.error("该项目已审核,无需重复操作!");
        }
        // 4. 更新审核状态和结果
        xiangmu.setXiangmu_yesno_types(auditDTO.getAuditStatus()); // 1通过/2拒绝
        xiangmu.setXiangmu_yesno_text(auditDTO.getAuditResult());
        xiangmuService.updateById(xiangmu);
        // 5. 返回结果
        return Result.success("审核成功!");
    }
}

// 审核DTO
@Data
public class XiangmuAuditDTO {
    private Integer projectId; // 项目ID
    private Integer auditStatus; // 审核状态:1通过/2拒绝
    private String auditResult; // 审核结果
}
(2)页面设计要点(Vue)

页面标题:管理员-项目审核页面
(插入图片位置:此处放“项目审核页面截图”,需包含以下元素)

  • 筛选条件:项目状态下拉(待审核/已通过/已拒绝/全部)、项目名称模糊查
  • 项目列表表格:列名“项目名称、负责人、所属地点、创建时间、审核状态、操作”,审核状态用颜色标(待审核黄/已通过绿/已拒绝红)
  • 审核弹窗:点“审核”弹出,含项目简介、项目封面预览、审核状态单选(通过/拒绝)、审核结果输入框(必填,拒绝时需说明原因)
  • 按钮:“查看详情”“审核”“作废项目”
(3)避坑提醒
  • 记录审核日志!方便追溯(需新增审核日志表):
    XiangmuAuditLog log = new XiangmuAuditLog();
    log.setProjectId(auditDTO.getProjectId());
    log.setAdminId(admin.getId());
    log.setAuditStatus(auditDTO.getAuditStatus());
    log.setAuditResult(auditDTO.getAuditResult());
    log.setAuditTime(new Date());
    auditLogService.save(log);
    
  • 作废项目需校验!已通过的项目不能直接作废:
    if (xiangmu.getXiangmu_yesno_types() == 1) {
        return Result.error("已通过项目需先驳回,才能作废!");
    }
    

2. 用户端:项目进度提交模块(核心需求!)

用户用系统的核心是“参与项目”,流程别复杂:选项目→填进度→传佐证材料→提交,我当初加“进度修改记录”,代码量翻倍,其实“基础提交+进度查看”更实用。

(1)核心代码片段(Vue+Spring Boot)

Vue页面(进度提交表单):

<template>
  <div class="progress-form">
    <el-form :model="progressForm" :rules="progressRules" ref="progressRef" label-width="120px">
      <el-form-item label="项目名称" prop="projectId">
        <el-select v-model="progressForm.projectId" placeholder="请选择项目">
          <el-option 
            v-for="project in projectList" 
            :key="project.id" 
            :label="project.xiangmu_name" 
            :value="project.id"
          ></el-option>
        </el-select>
      </el-form-item>
      <el-form-item label="进度详情" prop="progressText">
        <el-input 
          type="textarea" 
          v-model="progressForm.progressText" 
          placeholder="请描述项目进度" 
          rows="4"
        ></el-input>
      </el-form-item>
      <el-form-item label="佐证材料" prop="file">
        <el-upload
          action="/api/user/xiangmujindu/upload"
          :file-list="fileList"
          :on-success="handleFileSuccess"
          accept=".jpg,.png,.pdf"
          :limit="1"
        >
          <el-button type="primary">点击上传</el-button>
        </el-upload>
      </el-form-item>
      <el-form-item>
        <el-button type="primary" @click="submitProgress">提交进度</el-button>
        <el-button @click="resetForm">重置</el-button>
      </el-form-item>
    </el-form>
  </div>
</template>

<script>
export default {
  data() {
    return {
      progressForm: {
        projectId: '',
        progressText: '',
        fileUrl: ''
      },
      progressRules: {
        projectId: [{ required: true, message: '请选择项目', trigger: 'change' }],
        progressText: [{ required: true, message: '请描述进度详情', trigger: 'blur' }],
        file: [{ required: true, message: '请上传佐证材料', trigger: 'change' }]
      },
      projectList: [],
      fileList: []
    }
  },
  mounted() {
    // 获取用户参与的项目
    this.getProjectList();
  },
  methods: {
    getProjectList() {
      this.$axios.get('/api/user/xiangmu/list').then(res => {
        if (res.data.success) {
          this.projectList = res.data.data;
        }
      });
    },
    handleFileSuccess(res) {
      this.progressForm.fileUrl = res.data.fileUrl; // 保存文件路径
    },
    submitProgress() {
      this.$refs.progressRef.validate(valid => {
        if (valid) {
          this.$axios.post('/api/user/xiangmujindu/add', this.progressForm).then(res => {
            if (res.data.success) {
              this.$message.success('进度提交成功!');
              this.resetForm();
            } else {
              this.$message.error(res.data.msg);
            }
          });
        }
      });
    },
    resetForm() {
      this.$refs.progressRef.resetFields();
      this.fileList = [];
      this.progressForm.fileUrl = '';
    }
  }
}
</script>
(2)页面设计要点

页面标题:用户-项目进度提交页面
(插入图片位置:此处放“进度提交页面截图”,需包含以下元素)

  • 表单元素:
    • 项目名称(下拉框,仅显示用户参与的项目,必填)
    • 进度详情(文本域,必填,提示“请描述当前进度,如:完成需求分析”)
    • 佐证材料(上传框,支持JPG/PNG/PDF,必填,限制1个文件,最大5MB)
  • 按钮:“提交进度”(蓝色el-button--primary)和“重置”(灰色el-button)
  • 提示信息:红色显“校验失败”,绿色显“提交成功”
(3)避坑提醒
  • 限制文件大小!在Spring Boot配置:
    spring.servlet.multipart.max-file-size=5MB
    spring.servlet.multipart.max-request-size=10MB
    
  • 校验用户是否参与项目!避免提交非参与项目的进度:
    List<Integer> projectIds = xiangmuUserService.getProjectIdsByUserId(userId);
    if (!projectIds.contains(progressForm.getProjectId())) {
        return Result.error("您未参与该项目,无法提交进度!");
    }
    

3. 管理员端:公告管理模块(答辩亮点!)

这个功能最能体现“管理属性”,导师超爱问!核心是“发布公告、管理公告类型”,别漏“公告图片预览”,不然管理员没法确认公告展示效果。

页面设计要点

页面标题:管理员-公告管理页面
(插入图片位置:此处放“公告管理页面截图”,需包含以下元素)

  • 筛选条件:公告类型下拉(系统通知/项目提醒/全部)、公告标题模糊查
  • 公告列表表格:列名“公告标题、公告类型、公告时间、公告图片、操作”,公告类型用标签显(系统通知蓝/项目提醒绿)
  • 操作按钮:“查看详情”“修改公告”“删除公告”
  • 新增公告弹窗:含公告标题输入框、公告类型下拉、公告图片上传、公告详情富文本框(支持换行、加粗)

在这里插入图片描述 在这里插入图片描述 在这里插入图片描述

五、测试别敷衍!这3步让答辩不翻车

很多宝子觉得“功能能跑就行”,结果答辩时评委一测就出问题!我当初没测“重复提交项目进度”,导致用户能多次提交同一项目的相同进度,导师说“不符合流程管控逻辑”,当场扣分😫 测试一定要针对性做!

1. 功能测试(必测3个模块)

别全测!重点测“核心功能”,我整理了测试用例表,直接填结果:

(1)项目审核测试(表1:项目审核测试用例)
测试场景操作步骤预期结果实际结果测试结论
审核已通过项目选已通过的项目→点审核→选“通过”→提交提示“该项目已审核,无需重复操作!”
拒绝项目无理由选待审核项目→点审核→选“拒绝”→结果空→提交提示“请填写拒绝原因!”
正常审核项目选待审核项目→点审核→选“通过”→填“符合要求”→提交提示“审核成功!”,项目状态变“已通过”
(2)进度提交测试(表2:进度提交测试用例)
测试场景操作步骤预期结果实际结果测试结论
未选项目提交进度详情填“完成开发”→传文件→提交提示“请选择项目!”
传非支持格式文件选项目→填进度→传TXT文件→提交提示“仅支持JPG/PNG/PDF格式!”
正常提交进度选项目→填“完成测试”→传PNG截图→提交提示“进度提交成功!”,列表显该进度
(3)管理员登录测试(表3:管理员登录测试用例)
测试场景操作步骤预期结果实际结果测试结论
密码错误账号:admin→密码:123456(正确123)→登录提示“账号或密码不正确!”
未填账号账号:空→密码:123→登录提示“请输入账号!”
正常登录账号:admin→密码:123→登录登录成功,跳管理员首页

2. 兼容性测试(容易忽略的点)

别只在自己电脑测!答辩时评委可能用不同浏览器,我当初没测IE,结果公告列表错乱,赶紧改CSS才好:

  • 浏览器测试:Chrome、Firefox、Edge、IE11(重点测IE,兼容性最差)
  • 分辨率测试:1920×1080、1366×768(别让页面出现横向滚动条)

3. 测试报告要写好!答辩加分

把测试结果整理成“测试报告”,含“目的、范围、用例、结果、问题总结”,导师会觉得你“做事严谨”。比如:

  • 问题总结:“IE浏览器下公告表格错乱,用table-layout:fixed解决;未登录能访问进度提交页,加拦截器控制”
  • 测试结论:“核心功能(项目审核、进度提交、登录)均通过测试,无严重bug;兼容性问题已修复,系统可正常用”

六、答辩准备:3个加分小技巧

毕设不仅要做出来,还要说清楚!我当初准备了这3点,导师直接给“良好”:

  1. 演示流程要顺畅:提前录演示视频(怕系统崩),按“管理员审核项目→用户提交进度→管理员查看进度”的流程来,别跳步
  2. 重点讲“你解决了啥问题”:比如“一开始项目图片存数据库加载慢,改成存路径后,速度提升70%”,比光说“我用了Spring Boot”有亮点
  3. 准备常见问题:导师大概率问“为啥选MySQL不选Oracle”“用户变多怎么优化”,提前答:“MySQL轻量适合中小型管理系统;用户变多就加索引,优化查询速度”

最后:毕设通关的小私心

以上就是基于Spring Boot的工作流程管理系统从0到1的避坑干货!毕设没那么难,关键是找对方法,别瞎做复杂功能。

需要核心源码(带注释,直接能跑)、数据库脚本(含测试数据)、ER图模板的宝子,评论区扣“工作流程管理系统”,我私发你;卡在某个模块(比如项目审核、进度提交),也可以留言,我看到必回!

点赞收藏这篇,下次找流程不迷路~祝宝子们毕设顺利,轻松毕业!😘