1. 项目背景与意义
随着我国人口老龄化进程的不断加快,社区老年人口数量持续增长,老年人对健康管理、慢性病随访和日常医疗服务的需求日益突出。传统的纸质健康档案存在信息分散、更新滞后、查询困难、共享不畅等问题,难以满足社区基层医疗机构对老年人群健康数据的动态管理和精准服务要求。
基于SpringBoot的社区老年健康档案系统,旨在利用信息化手段对社区老年人的基础信息、健康体检、慢性病管理、随访记录等进行统一采集、存储、查询和统计分析。系统的建设具有以下现实意义:
- 提升管理效率:将纸质档案电子化,实现健康数据的快速录入、检索和更新,减轻基层医护人员的工作负担。
- 支持精准服务:通过结构化的健康档案数据,为老年人提供个性化的健康评估、慢病随访和用药提醒服务。
- 促进数据共享:为社区医疗机构、上级医院和公共卫生管理部门之间的信息互通提供数据基础。
- 辅助决策分析:基于档案数据的统计分析,为社区健康干预和资源配置提供参考依据。
2. 系统技术栈
本系统采用前后端分离的开发模式,后端基于SpringBoot框架构建RESTful API服务,前端使用Vue.js和Element UI实现管理界面,数据存储采用MySQL关系型数据库。具体技术选型如下:
| 层次 | 技术选型 | 说明 |
|---|---|---|
| 后端框架 | Spring Boot 2.7 | 提供依赖注入、自动配置、嵌入式Web容器等能力,简化项目搭建与部署 |
| 持久层框架 | MyBatis-Plus | 简化数据库操作,支持通用Mapper、分页查询和条件构造器 |
| 数据库 | MySQL 8.0 | 存储老年人基础档案、体检记录、慢病随访等业务数据 |
| 安全认证 | Spring Security + JWT | 实现用户登录认证和接口访问鉴权 |
| 前端框架 | Vue.js 2.x + Element UI | 构建后台管理界面,提供表格、表单、弹窗等交互组件 |
| 构建工具 | Maven | 管理项目依赖和构建打包 |
| 接口文档 | Swagger / Knife4j | 自动生成在线接口文档,便于前后端联调 |
3. 系统功能模块设计
系统按照角色和业务场景划分为以下核心功能模块:
- 用户管理模块:支持管理员、医护人员等角色的账号管理、登录认证和权限控制。
- 老年人档案管理模块:实现老年人基本信息的录入、修改、查询和删除,包括姓名、性别、出生日期、联系方式、居住地址、紧急联系人等。
- 健康体检管理模块:记录老年人的定期体检数据,如身高、体重、血压、血糖、血脂、心电图等指标,支持历次体检数据的对比查看。
- 慢性病管理模块:对高血压、糖尿病等慢性病老年人建立专项档案,记录诊断信息、用药方案和病情变化。
- 随访管理模块:管理医护人员的随访计划与随访记录,支持按时间、对象和结果进行查询统计。
- 数据统计模块:对老年人口分布、慢病患病率、体检覆盖率等指标进行可视化统计展示。
4. 数据库设计
系统核心数据表包括用户表、老年人档案表、体检记录表、慢性病档案表和随访记录表。以下为主要表结构说明:
| 表名 | 主要字段 | 说明 |
|---|---|---|
| sys_user | id, username, password, real_name, role, status | 系统用户账号信息 |
| elder_info | id, name, gender, birth_date, phone, address, id_card, emergency_contact | 老年人基础档案 |
| health_check | id, elder_id, check_date, height, weight, blood_pressure, blood_sugar, blood_fat, ecg_result | 健康体检记录 |
| chronic_disease | id, elder_id, disease_name, diagnosis_date, medication, status | 慢性病档案 |
| follow_up | id, elder_id, follow_date, follow_type, content, result, doctor_id | 随访记录 |
5. 核心代码实现
5.1 项目基础配置
在pom.xml中引入SpringBoot、MyBatis-Plus、MySQL驱动、JWT等核心依赖:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>3.5.3</version> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <scope>runtime</scope> </dependency> <dependency> <groupId>io.jsonwebtoken</groupId> <artifactId>jjwt</artifactId> <version>0.9.1</version> </dependency>5.2 实体类定义
以老年人档案实体为例,使用MyBatis-Plus注解映射数据库表:
@Data @TableName("elder_info") public class ElderInfo { @TableId(type = IdType.AUTO) private Long id; private String name; private String gender; private LocalDate birthDate; private String phone; private String address; private String idCard; private String emergencyContact; private LocalDateTime createTime; private LocalDateTime updateTime; }5.3 Mapper接口
继承BaseMapper获得通用增删改查能力:
@Mapper public interface ElderInfoMapper extends BaseMapper<ElderInfo> { }5.4 Service业务层
实现老年人档案的分页查询和条件检索逻辑:
@Service public class ElderInfoServiceImpl implements ElderInfoService { @Resource private ElderInfoMapper elderInfoMapper; @Override public Page<ElderInfo> pageQuery(int pageNum, int pageSize, String keyword) { Page<ElderInfo> page = new Page<>(pageNum, pageSize); LambdaQueryWrapper<ElderInfo> wrapper = new LambdaQueryWrapper<>(); if (StringUtils.hasText(keyword)) { wrapper.like(ElderInfo::getName, keyword) .or().like(ElderInfo::getPhone, keyword); } wrapper.orderByDesc(ElderInfo::getCreateTime); return elderInfoMapper.selectPage(page, wrapper); } }5.5 Controller控制层
提供档案新增、分页查询、详情查看和删除的RESTful接口:
@RestController @RequestMapping("/api/elder") public class ElderInfoController { @Resource private ElderInfoService elderInfoService; @PostMapping public Result<Void> add(@RequestBody ElderInfo elderInfo) { elderInfoService.save(elderInfo); return Result.success(); } @GetMapping("/page") public Result<Page<ElderInfo>> page( @RequestParam(defaultValue = "1") int pageNum, @RequestParam(defaultValue = "10") int pageSize, @RequestParam(required = false) String keyword) { return Result.success(elderInfoService.pageQuery(pageNum, pageSize, keyword)); } @GetMapping("/{id}") public Result<ElderInfo> detail(@PathVariable Long id) { return Result.success(elderInfoService.getById(id)); } @DeleteMapping("/{id}") public Result<Void> delete(@PathVariable Long id) { elderInfoService.removeById(id); return Result.success(); } }5.6 JWT登录认证
登录成功后签发JWT令牌,用于后续接口的身份校验:
@Service public class AuthService { @Resource private SysUserMapper sysUserMapper; private static final String SECRET = "elder-health-secret"; private static final long EXPIRE = 24 * 60 * 60 * 1000L; public String login(String username, String password) { SysUser user = sysUserMapper.selectOne( new LambdaQueryWrapper<SysUser>() .eq(SysUser::getUsername, username) .eq(SysUser::getPassword, DigestUtils.md5DigestAsHex(password.getBytes()))); if (user == null) { throw new RuntimeException("用户名或密码错误"); } return Jwts.builder() .setSubject(user.getUsername()) .claim("role", user.getRole()) .setExpiration(new Date(System.currentTimeMillis() + EXPIRE)) .signWith(SignatureAlgorithm.HS256, SECRET) .compact(); } }6. 总结
本文围绕基于SpringBoot的社区老年健康档案系统,从项目背景、技术选型、功能模块、数据库设计和核心代码实现等方面进行了系统阐述。该系统通过信息化手段实现了老年人健康档案的电子化管理和动态维护,有效提升了社区基层医疗机构的服务效率和数据管理水平。后续可在现有基础上进一步扩展智能提醒、健康评估和区域数据共享等功能,为社区老年健康服务提供更有力的技术支撑。