每年到这个时候,就会看到大量同学在找“基于springboot的xxx系统”的毕业设计,而“养老一站式服务系统”可以说是其中热度非常高的一个选题。原因也不复杂:选题方向贴近社会热点、业务场景好讲清楚、前后端功能扩展空间大,不管是做普通本科毕设还是专科实践项目,都能找到合适的落地深度。我在帮很多人开过题、看过代码、救过火之后,发现这个题目其实挺有意思的——它不像电商、图书管理系统那样纯“增删改查”,也不像AI、大数据项目那样对算法要求过高,它真正考的是你对业务流、角色权限、服务闭环的理解。
这篇内容我会以一个完整实操过的项目为蓝本,从技术选型、数据库设计、核心功能实现、论文文档组织、答辩避坑,到远程调试的经验,把整个“养老一站式服务系统”毕设的关键点全部拆开讲清楚。无论你是正在选题目、已经开了题准备动手,还是代码写到一半卡住了,这篇文章应该都能给你实实在在的参考。
1. 项目整体设计与技术选型思路
1.1 养老一站式服务系统到底做哪些事
很多人听到“一站式”这个词会有点懵,觉得是不是要把养老院的管理系统全做了?实际上,毕设层面的“一站式”不需要那么庞大,它的核心含义是:把原本零散的养老服务入口集中到一个平台上。
在真实场景中,老年人需要的服务是分散的——今天想找人打扫卫生,明天想要助餐服务,后天可能需要陪诊,还很需要家人随时了解自己的健康状况。传统做法是打电话联系不同服务机构,或者家属挨个找人,效率很低。这个系统要解决的就是把“服务申请、工单派发、服务执行、完成后评价、健康档案管理”整合成一条完整的业务链。
在毕业设计里,我建议把功能切到下面几个模块,既满足“一站式”的定位,又不会把自己坑进一个失控的大项目中:
- 老人端小程序或H5:服务项目浏览、在线预约、健康档案查看、用药提醒设置、紧急呼叫记录。
- 家属端(可以和老人在同一个用户端通过角色区分):绑定老人信息、查看服务进度、接收异常提醒、对服务进行评价。
- 服务人员端:查看待接单任务、确认执行、提交服务结果。
- 管理后台:服务项目管理、工单分配调度、老人档案管理、服务人员管理、订单统计报表、评价管理。
有几个模块是这类系统的“灵魂”,必须做扎实:
- 服务预约与工单流转:从用户下单到服务完成,状态必须清晰。
- 健康档案与异常提醒:这是养老服务区别于普通“家政预约系统”的关键点。
- 紧急求助闭环:哪怕只是做一个很简单的“一键求助 + 记录列表 + 发送通知给家属”,答辩时都是很强的加分项。
- 服务评价与反馈:形成“预约-执行-评价”的闭环,让你的系统在逻辑上完整。
1.2 为什么我建议选Spring Boot而不是SSH或SSM
这几年我见过很多同学的课程设计还停留在Spring MVC + Spring + MyBatis的SSM模式,甚至偶尔还能看到老掉牙的SSH(Struts2 + Spring + Hibernate)。不是说SSM不能做毕业设计,但时间成本和精神损耗真的不划算。
用Spring Boot做,一个最直接的好处是“约定大于配置”。以前搭一个SSM项目,要手写一堆XML配置——配置数据源、配置事务、配置MyBatis映射器、配置视图解析器,任何一个环节版本对不上,光是启动报错就能耗掉一下午。而Spring Boot通过自动配置把大部分工作都处理掉了,你只要引入起步依赖、写下application.yml里的几个配置,项目就能跑起来。
另外一个现实因素是这个题目就带springboot标签,说明市场上主流参考代码、文档模板、踩坑记录都以Spring Boot为主。你遇到问题能搜到的解决方案,大概率就是针对Spring Boot的。这对毕设来说是巨大的隐性收益。
还有一点是我带学生做项目时的经验之谈:Spring Boot生态和现代前端技术的配合很顺,比如Spring Boot天然适合做前后端分离的后端服务,配合Vue、UniApp或者微信小程序都很简单。你在后端写好接口,前端只需要通过HTTP调用,结构清晰,好演示好讲解,答辩老师问起架构时你有话可说。
1.3 技术栈组合与版本避坑
我建议的标配是这样的:
后端:Spring Boot 2.7.x + MyBatis-Plus + MySQL 8.x + Redis(用于Token缓存/验证码,可选)+ Spring Security 或 JWT拦截方案。
前端:Vue 3 + Element Plus(管理后台)+ Uniapp或Vue移动端H5(老人/家属端,如果不需要移动端也可以只做一个响应式页面)。
工具:Maven、Git、Postman/Apifox、IDEA。
这里重点说一下版本问题。Spring Boot 3.x已经发布很久了,很多同学新建项目时直接选了最新版,结果发现后面全是坑——比如Spring Boot 3要求JDK 17以上,还不兼容部分旧版MyBatis-Plus的写法,部分教程里还在用javax.servlet,而Spring Boot 3里换成了jakarta.servlet,你跟着老教程写代码,报错报得怀疑人生。
如果定位是“快速、平稳完成毕业设计”,我强烈建议用Spring Boot 2.7.x + JDK 1.8这个组合。这是目前网上教程覆盖度最高、找参考资料最容易的组合。当然,如果你对新技术有信心,用Spring Boot 3.x做也没有问题,但要做好准备:遇到的问题可能需要翻英文资料或者深度匹配版本。
Redis和Spring Security这两个组件,我建议按需引入。如果项目主要是展示CRUD和业务闭环,可以先用拦截器+JWT实现登录鉴权,把Spring Security留到论文的高可用性设计里提,这样实现简单、讲起来也说得通。如果个人基础比较好,想体现一下“安全设计”的深度,那加上Spring Security也是不错的复试面加分项。总之不要贪多,稳是第一位。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 功能设计、数据库模型与权限体系
2.1 核心业务模块怎么拆才能讲得清楚
做毕设时最怕的是一上来就“全都要”,结果写到一半发现代码量失控。养老一站式服务系统的合理做法,是把业务分成前台、后台、通用支撑三层:
前台面向老人/家属:登录注册、首页服务展示、服务详情、在线预约、我的预约、健康档案、用药提醒、紧急求助、消息通知。老人端界面的核心设计原则是:大字体、大按钮、少层级。答辩时你可以把这个作为用户体验设计的亮点讲出来,比你在代码里多加几个功能都管用。
后台面向运营管理人员:服务项目管理(上架、下架、推荐位)、订单/工单管理、服务人员管理、老人档案管理、分类管理、数据看板。管理端是毕设功能实现的主体部分,几乎每个页面都对应一套标准的CRUD+搜索+分页,也是工作量的大头。
支撑层:登录鉴权、角色权限、统一异常处理、日志记录、通用结果返回。这一层展示了工程化思维。很多同学的代码虽然能跑,但每个接口返回格式还不一样,前端联调时血压飙升。统一的Result返回体、全局异常处理,是你代码规范度的最好证明。
这样拆分的好处是:答辩时你讲功能边界很清楚,“老人能做什么、管理员能做什么”一句话就能说清,不会让评审老师觉得你系统功能混乱。
2.2 数据库表设计的核心细节
数据库设计的好坏,直接决定了你后面代码是哭着写还是笑着写。不要急着建表,先按业务划出这几张核心表:
用户相关的表:user(用户账号表,包含角色字段)、elder_info(老人档案表)、family_bind(家属与老人绑定关系表)。
服务相关的表:service_category(服务分类)、service_item(服务项目)、service_order(服务订单)、order_status_log(订单状态流转日志)。
健康与安全相关表:health_record(健康档案/体检记录)、medication_reminder(用药提醒)、help_call(紧急求助记录)。
评价与运营相关表:evaluation(服务评价)、notice(公告信息)。
下面我挑三张核心表把关键字段展开说一下,这三张表也是你论文的ER图里必须出现的内容。
service_order是系统里最复杂的一张表,它的关键字段包括:
- order_no(订单编号,要生成一个业务编号,比如yyyyMMdd+时间戳+随机数,不要直接用自增id给用户看)
- elder_id(老人ID)、user_id(下单用户ID)
- service_item_id(服务项目ID)
- status(订单状态:0待受理、1已派单、2服务中、3待评价、4已完成、5已取消、6已退款)
- address(服务地址)、service_time(预约服务时间)
- assign_user_id(服务人员ID)、finish_time(实际完成时间)
- create_by、create_time、update_time
health_record是体现养老业务特色的表:
- elder_id(老人ID)
- record_date(记录日期)
- blood_pressure(血压,字符串类型,例如"120/80")
- blood_sugar(血糖)、heart_rate(心率)
- height和weight(身高体重,可用于BMI计算)
- note(备注)
- record_type(记录来源:用户填写/服务人员录入/导入)
这里有个小技巧:像血压这种数据,存成字符串反而比存两个数值字段更好用,因为血压的表示天然是“收缩压/舒张压”这种格式,拆成两个字段会让前端展示很别扭。
help_call紧急求助表,在毕设里别做太复杂,核心就是:
- elder_id(老人ID)
- call_time(求助时间)
- address(定位地址,可以用模拟位置代替GPS)
- status(0未处理、1已处理)
- handle_user_id(处理人)、handle_time(处理时间)
- remark(备注)
三张表就足以支撑完整的故事线:老人发起预约,生成service_order,工单流转到服务人员;服务完成后,可以回填一条health_record;老人感觉不舒服时一键触发help_call,管理员后台看到记录并及时处理。
2.3 权限模型:三种角色一套代码怎么控制
养老系统里至少有三类角色:老人/家属(前台用户)、服务人员(接单执行)、管理员(后台运营)。当然你可以再细分运营人员和超级管理员,但毕设层面三层角色已经够了。
权限控制最简单可靠的方案是:一张user表里放role字段(1老人、2家属、3服务人员、4管理员),登录成功后把用户信息和角色塞进Token(我一般用JWT),前端根据角色渲染不同菜单,后端通过拦截器或AOP对接口做角色校验。
拦截器校验的核心代码大致是这样的思路:
java复制public class AuthInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
// 放行登录接口和静态资源
String uri = request.getRequestURI();
if (uri.contains("/login") || uri.contains("/register") || uri.contains("/doc.html")) {
return true;
}
// 从请求头拿token
String token = request.getHeader("Authorization");
if (StringUtils.isBlank(token)) {
throw new BusinessException(401, "未登录");
}
// 解析token,判断是否过期
Claims claims = JwtUtil.parseToken(token);
request.setAttribute("userId", claims.get("userId"));
request.setAttribute("userRole", claims.get("role"));
return true;
}
}
权限注解可以自己写一个@RequireRole("admin"),通过AOP拦截方法,检查当前用户角色是否匹配。不要觉得这是加分功能,它其实是系统健壮性的基础。答辩时老师一定会问:“普通用户能不能直接访问管理员接口?”如果你做了这套拦截,就有底气直接回答说“不能”。
3. 核心功能实现与关键代码细节
3.1 工程结构怎么组织才不像培训班作业
一个好的后端工程结构应该是见名知义的。我常用的推荐结构是这样的:
text复制com.example.eldercare
├── config // 配置类:CorsConfig、InterceptorConfig、RedisConfig
├── controller // 接口层:只做参数接收和结果返回
├── service // 业务层:核心逻辑都放这里
│ └── impl
├── mapper // MyBatis-Plus的Mapper接口
├── entity // 数据库实体类
├── dto // 传输对象:前端参数封装
├── vo // 视图对象:返回给前端的数据封装
├── common // 公共类:Result、ErrorCode、常量类
├── utils // 工具类:JwtUtil、DateUtil、ExcelUtil
├── exception // 自定义异常、全局异常处理器
└── interceptor // 拦截器
这个结构不乱、不花哨,但足够规范。注意不要学某些项目把所有代码堆在一个类里,一个Controller两三千行,刚写完可能爽,过一周你自己都看不懂。
Controller层要薄,只做参数接收、调用service、返回Result。业务逻辑放service里。这是最基本的“贫血模型”分层,也是答辩时能讲清楚的设计逻辑。
3.2 登录鉴权和统一返回体:决定开发体验的底座
登录模块是几乎所有系统的起点。我建议密码不要明文存储,用BCrypt或者MD5+盐都可以。BCrypt是Spring Security自带的加密算法,不需要额外实现,直接用就行:
java复制// 注册时加密
String encodedPassword = BCryptPasswordEncoder().encode(password);
// 登录校验
boolean matches = encoder.matches(rawPassword, user.getPassword());
JWT生成和解析可以封装成一个工具类,核心思路是:登录成功后生成token返回给前端,前端把token存到localStorage里,每次请求放到Authorization头,后端拦截器解析token拿到用户信息。
统一返回体的设计也很简单,但有非常多同学不重视。下面这个Result类是我一直在用的:
java复制@Data
public class Result<T> {
private Integer code;
private String message;
private T data;
public static <T> Result<T> ok(T data) {
Result<T> r = new Result<>();
r.setCode(200);
r.setMessage("success");
r.setData(data);
return r;
}
public static <T> Result<T> error(String message) {
Result<T> r = new Result<>();
r.setCode(500);
r.setMessage(message);
return r;
}
}
再加上一个@RestControllerAdvice全局异常处理器,这样代码里不需要到处写try-catch,业务异常直接抛出,全局处理器统一转成Result返回。这一套下来,你的代码会非常干净,前后端联调效率翻倍。
3.3 分页查询和条件搜索:写一个就够复用到爽
后台管理系统里大部分页面都是“搜索 + 表格 + 分页”,这个模式吃透了,你能省一半开发时间。我用MyBatis-Plus的Page分页,配合LambdaQueryWrapper条件构造器:
java复制public PageResult<ServiceOrderVO> queryOrderPage(OrderQueryDTO dto) {
// 1. 构建分页参数
Page<ServiceOrder> page = new Page<>(dto.getPageNum(), dto.getPageSize());
// 2. 构建查询条件
LambdaQueryWrapper<ServiceOrder> wrapper = new LambdaQueryWrapper<>();
// 订单号模糊查询
if (StringUtils.isNotBlank(dto.getOrderNo())) {
wrapper.like(ServiceOrder::getOrderNo, dto.getOrderNo());
}
// 状态精确查询
if (dto.getStatus() != null) {
wrapper.eq(ServiceOrder::getStatus, dto.getStatus());
}
// 按下单时间倒序
wrapper.orderByDesc(ServiceOrder::getCreateTime);
// 3. 执行查询
Page<ServiceOrder> result = orderMapper.selectPage(page, wrapper);
// 4. 将实体转成VO,并填充关联信息(比如老人姓名、服务项目名称)
List<ServiceOrderVO> voList = result.getRecords().stream().map(order -> {
ServiceOrderVO vo = new ServiceOrderVO();
BeanUtils.copyProperties(order, vo);
ElderInfo elder = elderMapper.selectById(order.getElderId());
if (elder != null) {
vo.setElderName(elder.getName());
}
ServiceItem item = serviceItemMapper.selectById(order.getServiceItemId());
if (item != null) {
vo.setServiceName(item.getName());
}
return vo;
}).collect(Collectors.toList());
// 5. 返回
return new PageResult<>(voList, result.getTotal());
}
这段代码里的关键动作是:先按条件分页查出订单,再循环补全关联字段。在数据量不大的毕设项目里,这种“简单粗暴”的补全方式完全没有问题。但如果数据量大,就要考虑用批量查询减少SQL次数,这个可以写进论文的优化章节作为亮点。
3.4 服务预约到工单闭环:订单状态机怎么设计
养老一站式服务系统的核心业务流,我建议设计成以下状态流转:
text复制老人/家属提交预约 → 待受理(0)
管理员审核受理 → 已派单(1)
服务人员接单并开始服务 → 服务中(2)
服务人员提交完成 → 待评价(3)
用户评价 → 已完成(4)
随时可走 → 已取消(5)
状态流转里最重要的一个细节是:不要让用户直接修改订单状态。所有状态变更都要通过业务操作触发。比如“服务人员接单”是一个独立的接口,里面先校验当前登录用户是服务人员,再校验订单状态是1,然后才更新为2,同时更新assign_user_id字段。
为了体现你的工程能力,可以加一张order_status_log表,每次状态变更都写入一条日志。答辩时老师问“订单状态是怎么流转的”,你不仅能口头讲清楚,还能打开数据库展示每个节点的记录,这就是很直观的加分项。
另外服务完成后的评价逻辑值得多说一句:不要做成“服务完成就万事大吉”,把评价和状态流转关联起来,订单在待评价(3)状态时,用户提交评价后自动变为已完成(4)。这个小小的设计,让你的业务闭环逻辑显得非常完整。
3.5 紧急求助和用药提醒:体现场景特色的功能
标题里的“养老”属性怎么凸显?关键就是做几个非通用系统的场景化功能。紧急求助模块可以做成一个简单的POST接口:老人在前端一键点击,后端起一条记录,同时给绑定的家属发送一条站内短信(毕设里用系统通知即可,不接真实短信通道)。
用药提醒在网页端做一个定时任务查询,然后在前端展示“今日待服药”清单。如果要做得更有深度,可以用Quartz或Spring自带的@Scheduled注解,写一个每天8点扫描当天用药提醒数据的定时任务,把超期未确认的记录生成提醒通知。
这两个功能实际代码量不大,但对选题契合度的提升是非常大的。如果论文里只写了“健康管理、订单管理”,听上去和普通服务预约系统没什么两样,但有了紧急求助和用药提醒,你的系统才是真正的“养老”系统。
4. 毕设文档组织与答辩准备重点
4.1 论文结构怎么排才能又快又稳
很多同学代码写得很快,一到写论文就卡壳。其实毕业论文是有固定套路的,养老一站式服务系统的论文,我建议按以下章节结构写:
第一章绪论:写背景(老龄化趋势)、国内外研究现状(国外的居家养老模式、国内的智慧养老平台)、研究意义和主要工作。这部分是文字活,注意逻辑通顺即可,不要过度夸大自己的系统。
第二章相关技术介绍:写Spring Boot、MyBatis-Plus、MySQL、Redis、Vue等。注意不要大段抄官方文档,要写“你在这个系统中用到它的哪个能力、为什么这么用”。
第三章需求分析:从功能性需求、非功能性需求、角色分析展开。用例图是必需的,可以用ProcessOn或draw.io画。
第四章系统设计:写总体架构图、功能模块设计、数据库ER图和数据表结构。数据库表结构用表格形式列出来,字段名、类型、说明都要写清楚。
第五章系统实现:按模块来写,每个模块配合截图和核心代码。这里的关键是不要贴大段无用代码,选几段核心逻辑代码配合讲解即可。
第六章系统测试:写功能测试用例表格、边界值测试、并发测试(如果你做了的话)。用表格列测试用例,测试结果全部写“通过”。
写论文最忌“虎头蛇尾”,前面的绪论和技术介绍写了几十页,到了核心实现章节反而一笔带过。老师重点看的就是系统实现章节,务必把服务预约流程、权限控制、状态流转这些核心点写透。
4.2 源码规范和演示环境准备
“源码+文档”是这类项目的标配交付物。不管你最后是自己用还是找人帮做,拿到源码后第一件事应该是理清目录、看README、初始化数据库、跑起来。很多同学卡在“项目跑不起来”这一步,其实就是环境依赖没有配置好。
我建议在项目里放一份README.md,写清楚这几件事:
- JDK、Maven、MySQL、Redis的版本要求
- 数据库初始化sql脚本的导入方式
- application.yml中数据库账号密码的修改位置
- 默认管理员账号密码(比如admin/123456)
- 前端项目的启动命令(npm install、npm run dev)
另外要准备一个展示用的数据集。后台统计页面、首页看板如果只有空数据,演示效果会惨不忍睹。我建议写一个数据初始化SQL,造一些老人档案、服务订单、评价记录,让列表页和统计图看起来像真实运营了一段时间的系统。这一步花20分钟,演示效果提升非常大。
4.3 答辩前一定要准备的八个高频问题
答辩是毕业设计最后一道关。这里分享几个我在帮同学们模拟答辩时常见的问题和应对思路,建议提前写进笔记里:
- 为什么选Spring Boot?回答从效率、生态、前后端分离适配性切入。
- 权限控制怎么做的?讲清楚JWT + 拦截器 + 角色字段。
- 订单状态是怎么避免并发重复操作的?答乐观锁/状态前置校验。
- 密码加密了吗?怎么防脱库?答BCrypt/加盐。
- 如果服务人员同时接两个单怎么办?答状态校验+事务。
- 系统的痛点是什么、怎么改进?可以答短信通知、地图定位、支付模块留作后期扩展。
- 数据库里哪张表最关键?答service_order表,字段设计展示了业务深度。
- 你的工作量主要在哪里?一定要能明确说出来,这直接决定了你的“工作量关”过不过。
5. 常见问题排查与远程调试经验实录
5.1 环境问题救火速查表
开发过程中有问题的代码大部分是环境引起的,而不是逻辑问题。这里我把这几年遇到的高频问题整理成一张速查表:
| 问题现象 | 常见原因 | 解决方案 |
|---|---|---|
| Spring Boot项目启动报错“Invalid bound statement” | Mapper接口扫描路径不对或XML没编译到classes | 检查@MapperScan、resources目录下xml的resource配置 |
| 数据库连接失败 | MySQL版本不兼容、时区问题、驱动版本太高 | MySQL8用com.mysql.cj.jdbc.Driver,连接串加serverTimezone=Asia/Shanghai |
| 前端访问后端接口跨域 | 没配CorsConfig,或端口对不上 | 编写CorsConfig放行本地端口,比如localhost:8080和localhost:5173 |
| 创建Spring Boot项目时报错“Cannot resolve symbol”且版本混乱 | 本地JDK版本和Maven配置不匹配 | 统一JDK1.8 + Spring Boot 2.7.x,Maven仓库重新reimport |
| 从JDK21回退到JDK1.8 | 新项目模板默认JDK21,教程都是老版本 | 在Project Structure和Maven Settings里把JDK改成1.8,pom.xml的java.version也改成1.8 |
| 图片上传后前端无法显示 | 上传路径和静态资源映射没对应 | 写一个WebMvcConfigurer将本地上传目录映射为/upload/**静态资源路径 |
| 统计数据怎么都对不上 | 数据库表里存在删除后的脏数据 | 统一使用逻辑删除字段,统计时也加del_flag条件 |
| 热门搜索词里提到的springboot heapdump泄露 | 监控端点暴露 | 生产环境关闭actuator的heapdump端点,基础环境里把敏感管理端接口加权限,不用大动 |
这里我要多说一句JDK版本回退的事。热词里“现在的版本是21,想回退到1.8”是新手群里经常出现的话,其实Spring Boot 2.7用JDK 8是优雅的,不要害怕老版本。JDK 8稳定、主流、各方面资料最多,做毕设完全够用。
5.2 远程调试的正确打开方式
标题里提到的“远程调试”其实是很多同学关心的点。这里我展开讲一下,因为我确实见过不少项目是在对方机器上能跑、自己这儿跑不起来的情况。远程调试一般有两种场景:
第一种是请有经验的人远程帮你看环境、调问题。这种情况下,最稳妥的方式是让对方通过远程桌面/在线会议共享屏幕,你在本地操作,对方指挥你修改。因为毕设项目的代码往往在你自己电脑上,别人远程到你的机器操作让你看着也没有问题。注意不要轻易把数据库连接串、服务器密码等敏感信息直接丢到公共平台,找一个可信的人来协助。
第二种是项目部署在云服务器上,本地IDEA要远程Debug。这个用Java天然的远程调试机制就可以:
先在服务器上启动Spring Boot应用时加上调试参数:
bash复制java -jar elder-care-system.jar --spring.profiles.active=prod \
-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:5005
然后本地IDEA里配置一个Remote JVM Debug运行项,Host填服务器IP,Port填5005,启动Debug模式点连接,断点就能命中了。这种方式适合“本地复现不出来、只有线上有bug”的场景。但要注意,远程调试端口一定不要开放到公网,否则会有安全风险,建议用防火墙限制来源IP。
5.3 我见过最容易翻车的几个细节
- 数据库和代码里表名字段名对不上。MyBatis-Plus里如果实体字段和表字段没有开启驼峰映射,查出来全是null。建议在application.yml里配置
map-underscore-to-camel-case: true。 - 时间格式返回给前端变成一串数字。Java 8的LocalDateTime如果没有加
@JsonFormat,默认序列化格式很抽象,在Redis里也会出现类型转换问题。建议全局配置Jackson的格式:
java复制spring.jackson.date-format=yyyy-MM-dd HH:mm:ss
spring.jackson.time-zone=GMT+8
-
前端代码和后端代码放一起,mvn package时把前端资源打不进去。前后端分离项目建议前端单独build,产物放到后端static目录下再说,或者直接在答辩演示时开两个服务。
-
只测了一个角色的路径。管理员登录后,手动在地址栏敲老人的接口路径,如果直接返回数据,说明权限拦截不完整。这个一定要自测一遍,几乎所有答辩的代码演示都会被问到这一点。
最后分享一点我个人的实操体会
带了好几届学生做这类系统之后,我有一个特别深的感受:养老一站式服务系统这套题,真正的难点不在于Spring Boot本身,而在于你能不能把“养老服务”的业务逻辑梳理清楚。订单状态怎么流转、老人与家属怎么绑定、服务人员怎么接单、紧急求助怎么闭环,这些梳理清楚了,用Spring Boot实现它就是体力活;反过来,如果业务逻辑都还没想明白,上来就写代码,后面一定会反复返工。
另外一个很实用的建议是:刚开始先做一个最小可用版本,不要一上来就追求功能大而全。先把“登录注册、服务列表、预约下单、后台管理、状态流转、评价”这条主线跑通,再往里加健康档案、用药提醒、紧急求助这些特色模块。主线稳定了,你的论文结构也就稳定了,剩下的都是锦上添花。
最后还有一个小技巧:准备一套固定的演示脚本,按照“老人端下单、管理员派单、服务人员接单、服务完成、老人评价”的顺序完整演一遍,每个节点配合展示数据库里对应表的数据变化。这套流程走下来行云流水,比你临时点来点去要有说服力得多。祝大家都能顺利搞定毕业设计,答完辩,顺利毕业。
