1. 项目背景与核心需求
母婴护理中心作为专业服务于孕产妇和新生儿的机构,其信息化管理水平直接影响服务质量和运营效率。传统的手工记录方式存在数据易丢失、信息共享困难、统计效率低下等问题。基于Java技术栈开发的信息管理系统,能够有效解决以下核心痛点:
- 数据分散难整合:产妇档案、婴儿护理记录、房间管理、物资库存等数据分散在不同Excel表格中,跨部门协作效率低下
- 业务流程不规范:预约、入住、护理服务等环节缺乏标准化流程管控,容易出现人为差错
- 统计决策滞后:经营数据需要人工汇总,无法实时生成营收报表、入住率分析等关键指标
提示:系统设计时需要特别注意医疗健康数据的隐私保护,建议采用字段级加密存储方案,符合《个人信息保护法》对敏感信息的处理要求
2. 技术选型与架构设计
2.1 基础技术栈确定
基于毕业设计的教学目标和实际业务需求,采用以下技术组合:
- 后端框架:Spring Boot 2.7 + MyBatis Plus
- 选择理由:简化配置、内置Tomcat、丰富的starter依赖,适合快速开发毕业项目
- 版本说明:避免使用最新3.x版本,2.7系文档丰富且稳定性经过验证
- 数据库:MySQL 8.0
- 关键配置:需要开启INNODB引擎、设置utf8mb4字符集(支持emoji存储)
- 替代方案:如遇安装问题可降级到5.7,但需注意默认字符集差异
- 前端技术:Thymeleaf + Bootstrap 5
- 优势:服务端渲染适合管理系统类项目,减少前后端分离带来的复杂度
- 备选:若已掌握Vue.js,可采用前后端分离架构
2.2 系统架构设计
采用经典的三层架构,并针对母婴护理场景做特殊设计:
code复制表示层(Web)
├─ 权限拦截器(JWT验证)
├─ 异常统一处理器
业务逻辑层(Service)
├─ 预约业务模块
├─ 护理记录模块
├─ 库存管理模块
数据访问层(DAO)
├─ 实体关系映射
├─ 动态SQL生成
特殊考虑点:
- 护理记录模块需要支持富文本编辑(集成wangEditor)
- 预约系统需实现自动冲突检测(时间重叠校验算法)
- 婴儿信息变更需要留痕(采用审计日志表设计)
3. 核心功能模块实现
3.1 产妇-婴儿关联管理系统
这是区别于普通CRM系统的核心模块,实现逻辑需要特别注意:
java复制// 实体关系示例
@Entity
public class Mother {
@Id
private Long id;
private String name;
@OneToMany(mappedBy = "mother")
private List<Baby> babies;
}
@Entity
public class Baby {
@Id
private Long id;
private String name;
@ManyToOne
@JoinColumn(name = "mother_id")
private Mother mother;
@OneToMany(mappedBy = "baby")
private List<NursingRecord> records;
}
业务规则:
- 婴儿信息必须绑定到已存在的产妇档案
- 当产妇办理出院时,需要检查所有关联婴儿的状态
- 每日自动生成护理任务清单(基于婴儿年龄计算护理项目)
3.2 智能排房算法实现
解决传统人工排房容易出现的冲突问题:
java复制public List<Room> arrangeRoom(LocalDate checkInDate, int stayDays) {
// 步骤1:筛选可用房间(未维护且未预订)
List<Room> availableRooms = roomMapper.selectAvailableRooms();
// 步骤2:优先级排序(向阳房间优先)
availableRooms.sort(Comparator.comparing(Room::isSunny).reversed());
// 步骤3:冲突检测(伪代码)
for (Room room : availableRooms) {
if (!bookingMapper.hasConflict(room.getId(), checkInDate, stayDays)) {
return room;
}
}
throw new BusinessException("当前时段无可用房间");
}
3.3 护理记录电子签名方案
为满足医疗文书合规要求,采用以下技术方案:
- 前端生成签名图片:使用signature_pad.js库
- 服务端存储:
- 原始签名图片存入阿里云OSS
- 哈希值存入数据库(SHA-256算法)
- 防篡改验证:
java复制public boolean verifySignature(String recordId) { String currentHash = DigestUtils.sha256Hex(ossClient.getObject(recordId)); String storedHash = recordMapper.selectHashById(recordId); return currentHash.equals(storedHash); }
4. 数据库设计与优化
4.1 关键表结构设计
| 表名 | 字段 | 说明 |
|---|---|---|
| mother_info | id, name, id_card, phone, blood_type | 增加身份证加密存储 |
| baby_info | id, name, gender, birth_time, mother_id | 关联产妇表 |
| nursing_record | id, baby_id, nurse_id, content, sign_url | 包含护理详情 |
| room | id, number, type, status, price | 房间基础信息 |
| booking | id, mother_id, room_id, check_in_date, days | 预约记录 |
索引优化方案:
- 在mother_info.phone上建立普通索引(高频查询字段)
- 对booking表建立复合索引(room_id + check_in_date)
- 护理记录表按月份分表(baby_id + record_month)
4.2 数据安全方案
- 敏感字段加密:
java复制@ColumnTransformer( read = "AES_DECRYPT(id_card, '${aes.key}')", write = "AES_ENCRYPT(?, '${aes.key}')") private String idCard; - 操作日志审计:
- 使用Spring AOP记录关键数据变更
- 存储修改前后的差异(JSON格式)
5. 典型问题排查实录
5.1 日期格式导致的排房异常
问题现象:系统显示房间可用,但实际已被预订
排查过程:
- 检查数据库存储的日期值(发现check_in_date存为TIMESTAMP)
- 对比代码中的LocalDate传参
- 发现MySQL驱动在8.0.23+版本对日期转换更严格
解决方案:
yaml复制# application.yml配置
spring:
datasource:
hikari:
connection-init-sql: SET TIME_ZONE='+8:00'
5.2 护理记录提交缓慢
性能优化步骤:
- 使用Arthas监控方法耗时
bash复制
trace com.example.service.NursingService saveRecord - 发现签名图片上传阻塞主线程
- 改为异步处理:
java复制@Async public void uploadSignature(String recordId, MultipartFile file) { // OSS上传逻辑 }
6. 毕业设计扩展建议
-
移动端适配:
- 采用响应式布局(Bootstrap 5已内置)
- 关键功能开发微信小程序版本(可使用uni-app跨端方案)
-
数据分析增强:
sql复制/* 月度入住率分析 */ SELECT room_type, COUNT(*) as total_days, SUM(price) as revenue FROM booking WHERE YEAR(check_in_date)=2023 GROUP BY room_type; -
智能预警功能:
- 疫苗预约提醒(基于婴儿出生日期计算)
- 库存不足预警(设置安全库存阈值)
实际开发中发现,使用Lombok的@Builder注解时,如果实体类有继承关系需要特别处理。建议手动实现建造者模式,避免自动生成的代码导致父类字段无法初始化的问题。在母婴护理记录模块中,采用"状态模式"设计护理流程状态机,比简单的if-else判断更易于维护和扩展。
