ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

基于SpringBoot的智慧工厂安全生产监督管理系统设计与实现

基于SpringBoot的智慧工厂安全生产监督管理系统设计与实现 每年毕设季后台总有人问我Java方向的系统选题到底怎么选才能既避开图书管理、学生选课这些烂大街题目又不至于把自己坑到做不完我的建议一直很明确去看基于SpringBoot的智慧工厂安全生产监督管理系统。这个项目用Java和SpringBoot做后端配合Vue做前后端分离业务上覆盖隐患排查、安全巡检、设备管理、风险预警属于那种“看着有门槛做起来有套路答辩能出彩”的题目。更关键的是市面上能拿到的完整代码包基本都带说明文档和相关论文调试层面的坑也都有人替你踩过一遍你完全可以站在前人肩膀上把它变成自己的东西。我带学生做过几轮类似题目最大的感受是安全生产监督这套业务比普通管理系统“有骨头”得多。它不是几个表的增删改查而是真正有状态流转的闭环一条隐患从被发现、登记、派单整改、复查确认到最后闭环每一步都有责任人、时限、状态和痕迹。你学过的SpringBoot注解、MyBatis关联查询、定时任务、WebSocket实时通信全都能在这个项目里找到落点。这篇文章我会按自己实际做这套系统的思路从选题价值、功能地图、数据库设计、后端难点、前端联调、部署答辩六个维度完整拆一遍。哪怕你拿到的是一套现成的前后端代码和论文看完也能自己把系统讲明白不至于答辩时被问两句就发懵。1. 选题为什么选智慧工厂安全生产从答辩视角倒推需求1.1 为什么这个场景比常见的“管理系统”高级很多同学选毕设题目时习惯从“我会什么技术”出发而不是从“这个业务有没有故事可讲”出发。结果就是选了在线购物商城、社区二手交易平台这类题目功能做了整整一箩筐答辩时老师一句“你的难点是什么”就怼得人无话可说。安全生产监督管理系统恰好相反它从一开始就自带业务复杂度。你不需要刻意包装只要把隐患闭环讲清楚答辩老师就能看到你具备基本的业务建模能力。再说市场价值。工厂里天天要填的设备点检表、隐患排查表、安全培训记录过去基本靠纸质台账和Excel管理。信息滞后带来的问题非常具体隐患登记在纸上整改超时没人催同一个工位今天拍了照明天还是老样子领导想看一下全厂整改率得让安全员手动汇总半天。这套系统要解决的就是这类问题数据实时进库、任务自动派发、到期自动提醒、报表一键生成。这个场景有真实痛点不是拍脑袋想出来的“玩具项目”写在论文里、讲在答辩台上都站得住。1.2 SpringBoot是怎么帮你把复杂度压下来的我记得自己最早做JavaWeb时还是Struts加Hibernate那一套配置一个数据源要写半页XML启动报错能查一晚上。SpringBoot最爽的地方就是把这些工程化的痛苦基本消灭了内嵌Tomcat加上starter依赖一个application.yml可以把数据源、端口、文件上传大小全部配完启动类一跑服务就起来了。对毕设而言你不需要把自动配置的ConditionalOnClass原理啃透只要会用常规的依赖和配置就能把精力集中到业务功能上这件事本身就非常划算。但这里必须泼一盆冷水SpringBoot只是底座它不会替你完成“系统像样”。很多同学以为自己用上SpringBoot项目就自动高了一个档次最后交上来的东西仍然只是一堆没有任何业务逻辑的表单页面。真正区分高分和及格分的是隐患闭环怎么设计、状态怎么流转、超时提醒怎么触发、权限怎么控制。所以后面的内容我基本不讲SpringBoot基础语法重点全放在业务实现和坑位上。1.3 完整技术栈该怎么配我做这个题目时后端选了SpringBoot 2.7.18持久层用MyBatis-Plus数据库用MySQL 8.0再加上SpringTask定时任务、WebSocket、JWT做登录鉴权。前端用Vue2加Element UIAxios做请求ECharts画统计图表。整套技术栈没有任何一个冷门组件网上教程多得用不完出问题也很好搜索。我列一张选型对照表方便你照着自己的情况判断层次选型说明后端框架SpringBoot 2.7稳定、资料多、兼容JDK8持久层MyBatis-Plus单表CRUD不用写SQL分页方便数据库MySQL 8.0免费、主流、安装简单权限认证JWT无状态适合前后端分离实时推送WebSocket隐患告警、巡检超时提醒定时任务Spring Task比Quartz轻Scheduled够用前端Vue2 Element UI成熟稳定管理端组件丰富图表ECharts统计报表必备至于为什么不选微服务或者最新的SpringBoot 3.0微服务对单机毕设属于过度设计一个注册中心就能让你多写半个月没意义的代码SpringBoot 3要求JDK17起步很多电脑上的旧项目、依赖、教程都还停在2.x没必要给自己挖坑。技术选型最怕的不是“旧”而是“周围没人会”。2. 功能模块拆解安全系统不只是“上报隐患”那么简单2.1 基础数据管理先把业务底数理清楚做管理系统第一步永远是“基础数据”。这套系统里基础数据可以分为四类组织架构部门和车间、设备台账、员工信息、系统用户。组织架构比较简单一张部门表加一个树形排序就够了设备台账要包含设备编码、名称、所在车间、负责人、当前状态后面巡检和隐患登记都会引用设备ID。员工信息和系统用户我建议拆成两张表不要混在一起。员工是业务对象比如张三在一车间属于电工组系统用户是登录身份张三有一个账号角色是安全员。拆开的好处是以后就算员工离职他的历史巡检记录仍然归属于那个员工ID不会因为账号删除而丢失数据系统需要加人脸识别或者卡号登录直接扩展用户表就行业务表全程不动。这个设计等你做完所有功能后会非常带感因为关联查询时思路特别清晰。2.2 隐患排查与整改闭环系统最核心的业务流隐患排查整改是这个系统的灵魂。一个隐患从诞生到结束至少要经过六个状态待核实、待派发、整改中、待复查、已闭环、已关闭。具体流程是安全员在巡检现场发现异常后登记一条隐患记录可以先拍照上传再选择隐患类型和等级系统里生成一条待核实的记录安全主管看到后审核并确认等级然后派单给具体责任人责任人登录系统看到待办去现场整改提交整改说明和整改后照片安全员复查复查通过就打“已闭环”不通过就退回重新整改。这个闭环听着不复杂但实现时有很多细节决定你系统的完成度。比如隐患等级不同整改时限也不同重大隐患24小时内必须处理较大隐患三天一般隐患七天。整改人超过时限没有提交系统要能自动提醒和抄送主管。同一个隐患要保留多次整改历史不能新记录把旧记录覆盖了。正因为有这些细节这个模块才是你做毕设的“重点加分项”。答辩时你只要放一张状态流转图再演示一条隐患从登记到闭环的全过程老师对你的业务理解基本就没啥可质疑的了。2.3 安全巡检与值班管理把纸质台账变成在线任务工厂安全里最日常的工作就是巡检。传统做法是巡检员拿着一张打印好的表格绕着车间一个个点位打钩签字。这套系统要做的就是把这张表格变成线上任务管理员先配置巡检计划包括周期、负责人员、检查的设备和区域系统按计划在每天或者每周的指定时间自动生成巡检任务巡检人员登录后看到今日待检项逐项录入设备运行状态、温度、压力、有无异常声音还可以拍照片上传提交后生成一条巡检记录。比较加分的设计是巡检超时提醒。任务生成后如果到了截止时间还没有执行系统自动把任务状态从“待执行”改成“已超时”并给负责人和部门主管各生成一条待办。这个功能实现起来就是定时任务扫描巡检任务表再配合WebSocket推送给前端。虽然代码量不大但演示效果非常好因为你已经在用“系统主动找人”替代“人找系统”了这是答辩时拿得出手的亮点。2.4 风险预警与统计报表让数据替人盯现场安全管理最怕的是没有数据支撑。系统里数据积累起来以后必须要能回答三个问题全厂现在有哪些隐患没整改、整改超时了多少条、每个车间的整改率是多少。所以预警模块和统计报表模块是成对出现的。预警侧系统设置规则比如隐患超过整改时限、设备点检连续三次异常、某车间一周内新增隐患超过阈值一旦触发就给相关角色推送预警消息。报表侧用ECharts画隐患分类饼图、整改趋势折线图、各车间巡检完成率柱状图这些图表直接放在首页看板上用户一登录就能看到全厂安全态势。统计接口在后端实现时不要傻傻地把全表数据查出来再手工聚合。MyBatis-Plus的QueryWrapper配合selectCount、groupBy完全够用比如按隐患等级统计就SELECT danger_level, COUNT(*) FROM hidden_danger GROUP BY danger_level按月份统计整改趋势就按create_time的月份分组。后端直接把聚合结果返回给前端前端拿到数组直接渲染图表整个流程很干净也容易在论文里画流程图。2.5 角色权限让不同的人看到不同的世界安全生产系统天然是分角色使用的至少要有四类系统管理员负责基础数据和用户配置安全主管审核隐患、查看全厂统计安全员登记隐患、执行巡检和复查普通员工处理分派给自己的整改任务。如果所有角色打开页面看到的菜单完全一样系统就谈不上“监督管理”了。权限设计我强烈建议用RBAC模型也就是“用户-角色-菜单”三层结构不要自己在代码里写死if (user.getRole()1)。RBAC的好处是菜单可以动态配置不同角色登录后左侧边栏渲染不同的菜单项。后端每个接口都通过拦截器校验用户是否登录再在具体接口上用权限标识来控制谁能访问。你可以在答辩时说一句我的权限模型里前端控制“看得见什么菜单”后端控制“能调什么接口”两层校验彻底避免越权访问。这句话一出来效果立竿见影。3. 数据库表设计如何用10张表撑起整个系统3.1 核心表概览很多同学拿到代码第一时间就看Controller然后一头扎进前端页面。我建议反过来先打开数据库把表看一遍因为表结构就是业务的骨架。这套系统核心的表大概有10张左右我列表说明每张表的作用表名作用sys_user系统用户账号、密码、姓名、部门、角色sys_role角色管理员、安全主管、安全员、员工sys_menu菜单/按钮资源sys_user_role用户角色关联表sys_role_menu角色权限关联表factory_department车间/部门信息factory_device设备台账safety_check_task巡检任务表safety_check_record巡检记录明细表hidden_danger隐患主表danger_rectify_log隐患整改/复查记录表如果你还加了培训功能就再加一张safety_training_record加了通知公告就加一张sys_notice。毕设的体量控制在10到15张表是最舒服的太少看不出系统架构太多又会让论文工作量失衡。3.2 隐患主表的关键字段设计隐患主表是整个系统数据设计的中心它的字段直接决定后续状态流转和统计能不能做顺。我列一下最关键的字段id主键。danger_no隐患编号建议用日期加流水号比如YH20250315001表单上显示非自增ID可读性好。danger_source隐患来源区分巡检发现、员工上报、主管检查。danger_type隐患类型如设备故障、消防隐患、作业违章。danger_level隐患等级重大、较大、一般对应不同整改时限。status状态待核实、待派发、整改中、待复查、已闭环、已关闭。find_user_id与find_time发现人和发现时间。assign_user_id与rectify_deadline派单人、整改责任人、整改截止时间。rectify_time与reject_reason实际整改完成时间和复查不通过的驳回原因。check_user_id与check_time复查人和复查时间。photos现场照片URL多个URL用逗号分隔。created_by、create_time、update_time、deleted审计字段。这里有一个很容易被问到的设计取舍照片字段为什么不用单独的图片表而是用逗号分隔存在一个字段里我的回答是毕设场景下这是为了控制复杂度。隐患的记录粒度是一整条不是图片本身所以把图片清单跟着主记录走查询一次就能全部拿到。如果是生产级系统当然要拆文件表或者对象存储但做毕设保证每个查询都够快、够直接更重要。你只要在答辩时能把这个取舍讲清楚老师反而会觉得你有工程判断力。3.3 时间、状态与逻辑删除最容易翻车的三个细节表设计时有三个细节最容易翻车需要提前说。第一个是状态字段的存储类型我建议用int或者varchar古董枚举不要在数据库里直接存中文例如别把status做成“整改中”这种值否则查询排序很别扭代码里到处飘中文字符串也容易出错。用int加注释或者在Java里定义枚举常量页面展示时再转成中文这是最标准的做法。第二个是时间字段。所有时间字段统一datetimeJava实体里用LocalDateTime不要用Date避免很多时区和格式的坑。SpringBoot里要对Jackson做全局配置把LocalDateTime序列化为“yyyy-MM-dd HH:mm:ss”否则前端拿到一串带T的ISO字符串显示起来非常难看。第三个是逻辑删除。隐患和巡检记录属于业务留痕数据不能物理删除。MyBatis-Plus提供了TableLogic注解加在deleted字段上之后所有的select都会自动带deleted0delete操作变成update。这个机制很好用但要注意所有涉及到统计或定时任务的自定义SQL里也要手动加deleted条件否则就会出现把已删除数据统计进去的诡异bug。我自己就因为这个坑排查过很久。3.4 RBAC的表连接怎么查RBAC多张权限表最终怎么用核心是一句多表关联查询。假设你需要根据登录用户名查出他拥有的所有权限标识可以这样写SELECT DISTINCT m.perms FROM sys_menu m JOIN sys_role_menu rm ON m.id rm.menu_id JOIN sys_user_role ur ON rm.role_id ur.role_id JOIN sys_user u ON u.id ur.user_id WHERE u.username #{username} AND m.status 1拿到这个权限标识列表后后端在做接口鉴权时只需要判断当前用户权限集合里有没有对应标识比如换角色菜单前端动态路由也是同理。这个方案量级很轻不需要引入Shiro或者Spring Security的完整引擎适合毕设也足够论证你理解权限控制原理。4. 后端实现中的硬骨头认证、定时任务、文件上传与实时告警4.1 统一返回体和全局异常代码整洁的关键如果你打开一个Controller发现所有接口都返回Map每个方法里都try-catch一遍那这个系统的代码质量一定不高。正确做法是先定义一个统一返回体R包含code、message、data三个字段提供ok()和fail()静态方法所有Controller方法直接返回R。前端收到任何响应先看code是不是200是200再处理data不是就直接抛错误提示。这样接口层代码会非常干净。再配合一个全局异常处理器用RestControllerAdvice捕获业务异常和系统异常。业务异常比如“隐患不存在”“没有权限修改他人整改记录”可以直接throw new BusinessException(...)统一拦截器会把错误信息包装成R.fail返回给前端。这样你不需要在业务代码里反复写try-catch提交一条重复数据前端也能拿到清晰的中文错误。这个设计放到论文的系统实现章节里是很好的截图素材。4.2 基于JWT的登录鉴权前后端分离下不能依赖Session因为前端可能部署在另一个域名或者端口Session关联cookie非常麻烦。推荐的方案是用JWT来做无状态鉴权。登录成功后后端根据用户ID、角色、过期时间生成一个token前端保存到localStorage每次请求通过Authorization请求头发回后端。后端写一个拦截器在preHandle方法里解析token解析失败直接返回401解析成功就把用户信息放到ThreadLocal上下文里供后续接口使用。JWT依赖用jjwt比较省事核心依赖就一个dependency groupIdio.jsonwebtoken/groupId artifactIdjjwt-api/artifactId version0.11.5/version /dependency拦截器里要注意排除登录接口和文件预览映射否则没有token永远无法登录。还有一个特别容易被忽略的坑配置跨域CORS时allowedHeaders里面必须加上Authorization很多同学前端请求带token却被浏览器拦截报错信息里写的就是Response to preflight request doesnt pass access control check。这个问题不在后端逻辑而在CORS配置没放行请求头。4.3 隐患超时自动提醒Scheduled的正确用法隐患超时提醒是这个系统技术上的一个亮点实现其实不难。在SpringBoot启动类上加EnableScheduling然后在某个Service方法上写Scheduled(cron 0 0/30 * * * ?)意思是每半小时跑一次。方法里做这几件事查询所有状态为“待派发”或“整改中”、级别为重大、并且rectify_deadline小于当前时间、remind_status等于0的隐患记录遍历这些记录为每条记录生成一条待办消息并推送WebSocket通知给对应角色处理完后把remind_status改成1防止同一个隐患被反复提醒。这里最常踩的坑就是幂等性。我第一次写这个任务的时候忘了加remind_status标记结果每次定时任务跑完同一个超时隐患被提醒了四五次前端弹窗弹个不停。后来我重新设计了提醒状态字段才彻底解决。做这个功能时还要注意过滤deleted字段协调逻辑删除两个坑叠加起来就是真实的调试教训。4.4 文件上传与预览安全照片怎么处理隐患照片和巡检照片是系统里最常见的图片。实现方式不要太复杂后端接收MultipartFile用UUID重新生成文件名保存到本地磁盘一个upload目录然后把访问路径返回给前端。前端再用图片组件展示。保存路径和访问映射需要在配置文件里处理spring: servlet: multipart: max-file-size: 10MB max-request-size: 20MB file: upload-dir: ./upload然后在一个WebMvcConfigurer实现类里注册资源映射把本地upload目录映射到访问路径/upload/**这样前端就可以用http://localhost:8080/upload/xxx.jpg直接预览图片了。上传接口一定要加登录校验不然任何陌生人都可以往你服务器丢文件。文件名用UUID而不是原始中文名也是为了避开中文编码和路径越权的问题。4.5 WebSocket让隐患告警实时弹出来隐患超时提醒如果只存在于数据库里用户不刷新页面永远不知道那这个提醒的效果就打了折扣。所以要加WebSocket。后端引入spring-boot-starter-websocket实现一个WebSocketServer维护一个Map映射userId对应的WebSocket会话。用户登录后前端创建WebSocket连接路径里带userId。后端在隐患超时或者新隐患派单时调用sendToUser(userId, message)把消息推给对应人员。代码骨架大概是这样ServerEndpoint(/ws/{userId}) Component public class WebSocketServer { private static final MapLong, Session SESSION_MAP new ConcurrentHashMap(); OnOpen public void onOpen(PathParam(userId) Long userId, Session session) { SESSION_MAP.put(userId, session); } OnClose public void onClose(PathParam(userId) Long userId) { SESSION_MAP.remove(userId); } public static void sendToUser(Long userId, String message) { Session session SESSION_MAP.get(userId); if (session ! null session.isOpen()) { try { session.getBasicRemote().sendText(message); } catch (IOException e) { // log } } } }这里有个非常经典的坑在Spring中通过ServerEndpoint创建的WebSocket对象不受Spring容器管理所以直接在别人Service里调用WebSocketServer会拿不到Spring注入的属性。解决办法是定义一个静态的ApplicationContext工具类在启动时保存Spring上下文然后在WebSocketServer里从ApplicationContext获取Service实例。我在第一次整合时花了一晚上才搞清楚为什么Service永远是null。5. 前端Vue与联调那些你在Demo里看不到的真实问题5.1 页面结构与权限路由前端不是这套系统的重点但页面结构决定了演示效果。Vue2配合Element UI做管理端是最成熟的做法。views目录建议按模块拆login登录页、dashboard首页看板、danger隐患管理、check巡检管理、device设备台账、report统计报表、system用户权限。这样一眼就能看出系统覆盖了哪些业务。路由要加全局前置守卫。在router.beforeEach里做两件事判断有没有token没有token直接跳登录页判断当前路由的meta.roles里有没有当前用户的角色没有就跳转无权限页。这样做的好处是即使某个用户手动在地址栏输入一个没有权限的路径他看到的也不是空白页而是明确的提示。前端这一层叫“路由级权限”配合后端的接口鉴权就形成了双层防线。5.2 Axios封装与错误统一处理前端所有请求不要每次直接调axios.get而是封装一个request模块。在创建axios实例时配置baseURL和超时时间然后在请求拦截器里把token放到请求头service.interceptors.request.use(config { const token localStorage.getItem(token) if (token) { config.headers[Authorization] Bearer token } return config })响应拦截器里统一判断后端返回的code如果code是401说明登录过期清除本地token并跳转登录页其他错误直接用Element UI的Message.error弹后端返回的message。这样页面里每个接口都不需要单独写错误处理代码量大幅下降也不容易出现漏掉错误提示的情况。5.3 联调中最常见的三个坑前后端联调阶段几乎每个项目都会遇到同样的问题。第一个是跨域。开发时前端跑在8080之外的端口比如8082后端在8080浏览器会拦截跨域请求。解决方式有两个后端配置CORS或者前端用vue.config.js的devServer.proxy把/api开头的请求转发到后端。我更推荐前端代理因为开发环境不用动后端代码生产环境把前端打包后放到后端傻大静态目录里也没有跨域问题。第二个是时间格式显示不对。后端LocalDateTime默认被Jackson序列化成类似“2025-03-15T10:30:00”的格式前端直接展示很难看。正确做法是在application.yml里配spring: jackson: date-format: yyyy-MM-dd HH:mm:ss time-zone: Asia/Shanghai配置之后后端返回的就是“2025-03-15 10:30:00”前端不需要额外处理。第三个是Vue路由刷新404。如果用了history模式打包部署到服务器后用户访问某个深度链接再刷新服务器找不到对应路径就会报404。最简单的规避办法是改用hash模式url里会多一个#虽然不够美观但不会出现刷新404对毕设演示来说最稳妥。如果想要history模式就需要在nginx里配置try_files这不是必须的。6. 从部署到答辩把项目变成能拿到优秀毕设的完整闭环6.1 本地运行从零到一不管你是拿到别人的代码还是自己写的部署步骤基本一致。后端部分先确认本机装了JDK8或JDK11、Maven 3.6以上、MySQL 8.0。用Navicat新建一个数据库执行项目里携带的sql文件把表和初始数据建好。然后打开application.yml修改数据库连接地址、用户名密码。在项目根目录执行mvn spring-boot:run看到“Started Application in xx seconds”就说明后端启动成功。前端部分在代码目录下执行npm install安装依赖再npm run serve启动开发服务器。打开浏览器访问http://localhost:8082输入初始账号密码登录。如果页面能出来、接口能通整个项目就跑通了。这里最常见的失败原因有三个MySQL端口与本机已有服务冲突、数据库用户名密码没改、npm版本和项目依赖不兼容。建议按顺序排查先看后端控制台启动日志再看前端network面板里的具体报错状态码。6.2 说明文档和论文怎么组织一个完整的毕设项目除了代码之外还有两样东西说明文档和LW。LW在这里指毕业设计论文。论文组织其实有固定套路我一般建议按这样的目录写第一章绪论写背景与意义第二章需求分析写功能性需求和非功能性需求第三章系统设计写架构设计、功能模块第四章数据库设计写ER图和表结构第五章系统实现按模块贴核心代码和运行截图第六章系统测试写测试用例和结果最后是结论与展望。论文里最值得花时间的是三张图系统总体架构图、用例图、ER图。这三张图一放出来老师就能一眼看出你的系统边界和数据关系。另外系统实现的截图标了太多水分每个功能点都要有“操作前页面说明操作后结果说明”的完整段落。测试部分不要只写“测试通过”四个字而是做一个测试用例表格包含测试项、操作步骤、预期结果、实际结果这也是优秀论文和普通流水账稿件的重要差别。6.3 答辩时怎么讲才不翻车答辩时间通常只有五到十分钟讲的时候一定要有条理。我的经验是沿着一根主线讲业务痛点系统有哪些角色核心流程怎么流转关键技术怎么解决。大概讲五分钟剩下五分钟给老师提问。演示时优先展示三个功能点登录后不同角色看到不同菜单一条隐患从登记到闭环的完整流转隐患超时后WebSocket弹窗提醒。这三个功能点做完基本就能证明系统不是Demo而是能跑通完整业务的系统。关于老师的提问提前准备几个高频追问。比如“你的权限控制怎么做”你可以说JWT加RBAC两层控制比如“隐患整改超时提醒怎么实现”你可以说SpringTask定时扫描加WebSocket推送比如“如果用户量变大怎么优化”你可以先答数据库索引、Redis缓存再答水平拆分不要一上来就说微服务。回答逻辑是“先单体优化再架构升级”这样显得既有基础还有潜力比空吹微服务强很多。这套系统做完之后我个人最大的体会是不要把毕设当成单纯的编码练习而是要当成一次完整的软件交付过程。SpringBoot帮你解决了九成环境问题剩下真正考验人的是业务逻辑有没有闭环、状态流转是否经得起追问、界面和代码是否讲得清楚。我在调试时遇到过特别典型的案例隐患超时提醒的定时任务第一版写好了结果忘了在查询条件里过滤deleted字段把已删除的数据也查出来提醒员工收到一堆莫名其妙的待办查了一晚上才发现是逻辑删除和定时任务叠出来的组合坑。这种经验确实只有自己踩过才会长记性。如果你也准备用这套智慧工厂安全生产监督管理系统做毕设我建议按这个顺序走先把数据库表建出来接着用Postman把后端接口逐个调通然后开发前端页面最后再集中两天把论文图表和说明文档补齐。按这个顺序走下来项目完成度和心态都会稳很多。等主流程跑通以后时间还没用完的话可以挑一个方向继续加料把Redis缓存加进去或者做一屏统计大屏又或者补一个移动端H5巡检页面——每加一个点都是答辩时的加分项也是你真刀真枪理解Java和SpringBoot后端开发的过程。
返回列表