1. 项目背景与核心需求
宠物健康管理正在成为现代养宠人群的刚需。根据2023年宠物行业白皮书显示,83%的宠物主会定期关注宠物健康状态,但专业兽医资源分布不均导致线下咨询成本居高不下。这个背景下,我们设计了一套基于BS架构的宠物健康咨询管理系统,通过SpringBoot+Vue的技术组合实现以下核心功能:
- 多角色协同工作流(宠物主、兽医、管理员)
- 宠物电子健康档案的数字化管理
- 在线问诊与处方开具的完整闭环
- 健康数据可视化分析与预警
系统采用前后端分离架构,后端基于SpringBoot 2.7提供RESTful API,前端使用Vue 3组合式API开发,数据库选用MySQL 8.0。这种技术选型在保证系统性能的同时,也便于后续功能扩展。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 技术架构设计解析
2.1 整体架构设计
系统采用经典的三层架构:
code复制表现层:Vue 3 + Element Plus + Axios
业务层:SpringBoot 2.7 + MyBatis-Plus 3.5
数据层:MySQL 8.0 + Redis缓存
关键设计考量:
- 前后端完全解耦,通过JWT进行身份认证
- 采用Swagger 3.0实现API文档自动化
- 使用Hutool工具包处理通用工具类
- 集成Lombok减少样板代码
2.2 数据库设计要点
主要实体关系设计:
sql复制CREATE TABLE `pet` (
`id` bigint NOT NULL AUTO_INCREMENT,
`name` varchar(50) COLLATE utf8mb4_general_ci NOT NULL,
`type` enum('DOG','CAT','OTHER') COLLATE utf8mb4_general_ci NOT NULL,
`birth_date` date DEFAULT NULL,
`owner_id` bigint NOT NULL,
PRIMARY KEY (`id`),
KEY `idx_owner` (`owner_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
设计时特别注意:
- 使用utf8mb4字符集支持emoji表情
- 枚举类型替代字符串提高查询效率
- 为常用查询字段建立合适索引
- 采用逻辑删除而非物理删除
3. 核心功能实现细节
3.1 在线问诊模块
问诊流程的状态机设计:
java复制public enum ConsultStatus {
PENDING("待接诊"),
PROCESSING("进行中"),
COMPLETED("已完成"),
CANCELLED("已取消");
private final String desc;
// 省略构造方法和getter
}
关键技术实现:
- WebSocket实时消息通知
- 使用Redis存储会话状态
- 敏感词过滤(采用DFA算法)
- 咨询超时自动处理逻辑
3.2 健康档案管理
核心数据结构示例:
java复制@Data
public class HealthRecordVO {
private Long petId;
private List<Vaccination> vaccinations;
private List<MedicalHistory> medicalHistories;
private PhysicalExam latestExam;
@Data
public static class Vaccination {
private String vaccineName;
private LocalDate date;
private LocalDate nextDue;
}
}
关键技术点:
- 使用MyBatis的嵌套结果映射
- 采用Jackson自定义序列化规则
- 实现历史版本对比功能
- 集成PDF导出(使用Flying Saucer)
4. 典型问题与解决方案
4.1 文件上传性能优化
遇到问题:
- 同时上传多张宠物照片时系统响应变慢
- 大文件上传容易超时
解决方案:
- 前端采用分片上传(vue-upload-component)
- 后端使用异步处理(@Async)
- 集成MinIO作为文件存储
- 添加MD5校验避免重复上传
关键配置:
yaml复制spring:
servlet:
multipart:
max-file-size: 20MB
max-request-size: 100MB
4.2 事务管理踩坑记录
错误场景:
java复制@Transactional
public void createConsult(Consult consult) {
consultMapper.insert(consult); // 步骤1
sendNotification(consult); // 步骤2(包含网络IO)
}
问题分析:
- 默认事务传播级别REQUIRED导致长事务
- 网络IO可能引发事务超时
改进方案:
- 拆分为两个独立事务
- 对非核心操作使用REQUIRES_NEW
- 添加事务超时设置
5. 部署与性能调优
5.1 生产环境部署方案
推荐部署架构:
code复制Nginx(负载均衡+静态资源)
↑
SpringBoot集群(2-4节点)
↑
MySQL主从(1主2从)
↑
Redis哨兵集群
关键配置项:
- JVM参数:-Xms2g -Xmx2g -XX:+UseG1GC
- MySQL连接池:HikariCP maxPoolSize=20
- Redis缓存过期策略:热点数据24小时
5.2 性能优化指标
优化前后对比:
| 场景 | 优化前(QPS) | 优化后(QPS) |
|---|---|---|
| 健康档案查询 | 120 | 350 |
| 咨询创建 | 80 | 200 |
| 文件上传 | 30 | 150 |
主要优化手段:
- 添加二级缓存(Caffeine+Redis)
- 优化SQL查询(避免N+1问题)
- 静态资源CDN加速
- 启用HTTP/2协议
6. 扩展与演进方向
当前系统已实现基础功能,后续可考虑:
- 接入AI辅助诊断(TensorFlow.js前端推理)
- 增加宠物可穿戴设备数据接入
- 实现跨机构健康档案共享
- 开发微信小程序端
技术债处理清单:
- [ ] 迁移到SpringBoot 3.x
- [ ] 前端组件库按需加载
- [ ] 实现全链路灰度发布
- [ ] 引入Prometheus监控
实际开发中发现,宠物健康数据的结构化处理比预期复杂。我们最终采用了FHIR标准的部分设计理念,为每种宠物类型定义不同的健康指标模板。例如犬类的体温正常范围与猫科动物不同,系统需要根据宠物类型动态调整校验规则。这个设计决策虽然增加了初期开发成本,但大幅降低了后续维护难度。
