1. 项目背景与核心需求
养老服务质量评估反馈系统是当前智慧养老领域的重要数字化解决方案。随着我国老龄化程度不断加深,截至2022年底,60岁及以上人口已达2.8亿,占总人口19.8%。传统纸质化评估方式存在数据采集效率低、统计分析困难、反馈周期长等痛点。
这个SpringBoot毕业设计项目需要实现的核心功能包括:
- 多维度评估指标体系管理(环境设施、医疗服务、文娱活动等)
- 在线评估表单动态生成与数据采集
- 评估结果自动计算与可视化展示
- 问题反馈闭环处理流程
- 数据统计分析与报告生成
关键设计考量:系统需要兼顾养老机构管理人员、评估人员、家属三类用户角色的不同需求,评估指标权重配置应支持灵活调整。
2. 技术架构设计
2.1 整体技术栈选型
采用经典的三层架构设计:
- 前端:Vue.js + ElementUI(响应式布局适配多端)
- 后端:SpringBoot 2.7 + MyBatis-Plus
- 数据库:MySQL 8.0(关系型)+ Redis(缓存)
- 安全框架:Spring Security + JWT
- 报表引擎:EasyExcel + ECharts
选择SpringBoot的核心优势:
- 约定优于配置:快速搭建项目基础框架
- 自动装配:简化第三方组件集成
- 内嵌Tomcat:简化部署流程
- Actuator端点:方便监控系统运行状态
2.2 数据库设计要点
主要实体关系设计:
sql复制CREATE TABLE `assessment_index` (
`id` BIGINT NOT NULL COMMENT '主键ID',
`parent_id` BIGINT DEFAULT 0 COMMENT '父级指标ID',
`index_name` VARCHAR(50) NOT NULL COMMENT '指标名称',
`weight` DECIMAL(5,2) DEFAULT 1.00 COMMENT '权重系数',
`scoring_standard` TEXT COMMENT '评分标准说明'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
CREATE TABLE `assessment_record` (
`id` BIGINT NOT NULL COMMENT '评估记录ID',
`institution_id` BIGINT NOT NULL COMMENT '养老机构ID',
`assessor_id` BIGINT NOT NULL COMMENT '评估员ID',
`total_score` DECIMAL(5,2) COMMENT '综合得分',
`assessment_date` DATETIME DEFAULT CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
特别注意:指标表采用树形结构设计,支持无限级指标分类,权重字段使用DECIMAL类型确保计算精度。
3. 核心功能实现
3.1 动态评估表单生成
关键技术实现:
- 递归加载指标树:
java复制public List<IndexTreeNode> buildIndexTree(Long parentId) {
List<AssessmentIndex> indexList = indexMapper.selectList(
new QueryWrapper<AssessmentIndex>().eq("parent_id", parentId));
return indexList.stream().map(index -> {
IndexTreeNode node = new IndexTreeNode();
BeanUtils.copyProperties(index, node);
node.setChildren(buildIndexTree(index.getId()));
return node;
}).collect(Collectors.toList());
}
- 前端动态渲染:
vue复制<template v-for="item in indexTree">
<el-card v-if="item.children.length > 0">
<div slot="header">{{item.indexName}}</div>
<index-form-item :data="item.children"/>
</el-card>
<el-form-item v-else :label="item.indexName">
<el-rate v-model="scores[item.id]" :max="5"/>
</el-form-item>
</template>
3.2 评估结果计算引擎
权重计算算法实现:
java复制public BigDecimal calculateTotalScore(Map<Long, Integer> scoreMap) {
return scoreMap.entrySet().stream()
.map(entry -> {
AssessmentIndex index = indexMapper.selectById(entry.getKey());
return index.getWeight()
.multiply(BigDecimal.valueOf(entry.getValue()));
})
.reduce(BigDecimal.ZERO, BigDecimal::add);
}
性能优化方案:
- 使用@Cacheable缓存指标数据
- 采用批量查询代替循环单条查询
- 异步计算后通过WebSocket推送结果
4. 特色功能实现
4.1 智能反馈建议生成
基于规则引擎的实现:
java复制public String generateSuggestion(BigDecimal score) {
if (score.compareTo(new BigDecimal("90")) >= 0) {
return "服务质量优秀,建议继续保持当前服务标准";
} else if (score.compareTo(new BigDecimal("70")) >= 0) {
return "服务质量良好,建议加强员工服务意识培训";
} else {
return "服务质量待改进,建议从环境设施、医疗护理等方面重点整改";
}
}
4.2 数据可视化分析
使用ECharts实现的关键代码:
javascript复制option = {
radar: {
indicator: indicators.map(item => {
return { name: item.name, max: 100 };
})
},
series: [{
type: 'radar',
data: [{
value: scores,
areaStyle: { color: 'rgba(64, 158, 255, 0.5)' }
}]
}]
};
5. 部署与测试
5.1 多环境配置
application-dev.yml关键配置:
yaml复制spring:
datasource:
url: jdbc:mysql://localhost:3306/elder_care?useSSL=false
username: dev_user
password: Dev@1234
redis:
host: localhost
port: 6379
5.2 压力测试方案
使用JMeter测试关键指标:
- 评估表单提交接口:模拟100并发持续5分钟
- 报告生成接口:测试大数据量下的PDF导出性能
- 结果查询接口:检查缓存命中率
测试结果优化:
- 添加Redis缓存后,查询性能提升8倍
- 采用HikariCP连接池,数据库连接等待时间减少75%
- 启用GZIP压缩,网络传输量降低60%
6. 项目扩展方向
- 移动端适配:开发微信小程序版本
- 智能分析:引入机器学习算法进行异常评估检测
- 物联网集成:对接智能床垫、手环等设备数据
- 多租户支持:SAAS化改造服务更多养老机构
我在开发过程中特别总结了几点经验:
- 树形指标结构建议设置level字段,可以显著优化递归查询性能
- 权重计算务必使用BigDecimal,避免float/double的精度问题
- 复杂报表建议先用Mock数据开发前端,再对接真实接口
- 评估历史数据归档策略需要提前设计,避免单表数据过大
