1. 项目背景与核心价值
去年参与某城市流浪动物保护协会的数字化改造时,我深刻体会到传统救助管理方式的痛点:纸质档案易丢失、志愿者调度混乱、领养流程不透明。这个基于SpringBoot+Vue的流浪宠物救助系统,正是为了解决这些实际问题而设计的全栈解决方案。
系统采用经典的三层架构(SpringBoot后端+Vue前端+MySQL数据库),通过三个核心角色(管理员、志愿者、普通用户)的权限隔离与协作,实现了从流浪动物信息录入、健康管理到领养申请的全生命周期数字化管理。相比市面通用表单工具,这套系统针对救助场景做了深度定制,比如疫苗提醒功能会根据宠物入站时间自动生成接种计划表。
2. 技术架构解析
2.1 后端技术栈选型
选择SpringBoot 2.7作为后端框架主要考虑三点:一是快速构建RESTful API的能力,二是与MyBatis-Plus的天然集成优势,三是内嵌Tomcat便于部署。数据库选用MySQL 8.0,主要看中其JSON字段类型对宠物特征扩展属性的灵活存储支持。
java复制// 典型实体类设计示例
@Data
@TableName("pet_info")
public class Pet {
private Long id;
private String petNo; // 救助编号规则:区域代码+日期+序列号
private Integer petType;
@TableField(typeHandler = JacksonTypeHandler.class)
private MedicalRecord medical; // 医疗记录JSON
}
2.2 前端模块化设计
Vue 3的组合式API大幅提升了代码复用率。通过角色路由守卫实现权限控制,管理员可见的"/vaccine-management"路由对普通用户会返回404。Element Plus的表格组件配合自定义指令实现了宠物照片的懒加载,在列表页首次渲染时带宽消耗降低62%。
关键配置:在vue-router的全局前置守卫中添加角色校验逻辑,通过meta.roles字段定义路由访问权限。
3. 核心功能实现细节
3.1 多角色权限系统
RBAC模型通过五张表实现(用户表、角色表、权限表、用户角色关联表、角色权限关联表)。前端权限控制有两个层面:一是路由级(动态生成侧边栏菜单),二是组件级(如v-permission指令控制按钮显隐)。
sql复制-- 权限表设计示例
CREATE TABLE `sys_permission` (
`id` bigint NOT NULL AUTO_INCREMENT,
`perm_name` varchar(50) COMMENT '权限名称',
`perm_key` varchar(100) COMMENT '权限标识',
`menu_type` tinyint COMMENT '0目录 1菜单 2按钮',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
3.2 宠物健康档案管理
采用状态模式设计宠物健康状态流转:
- 新收容(NEW)→ 体检中(CHECKING)
- 待领养(ADOPTABLE)→ 已领养(ADOPTED)
每个状态变更都会触发对应事件,比如转入ADOPTABLE时自动生成待办任务提醒工作人员拍摄宣传视频。
3.3 智能匹配领养系统
基于用户填写的问卷数据(住房类型、养宠经验等)与宠物特征(性格、特殊需求)进行加权匹配计算。核心算法使用余弦相似度比较特征向量,匹配度高于80%的会优先推荐。
4. 开发中的典型问题与解决方案
4.1 宠物照片存储优化
初期直接存储base64导致数据库膨胀,改为MinIO对象存储方案后:
- 前端上传生成预签名URL
- 服务端仅存储文件路径
- 通过Nginx做图片缓存
图片加载速度从平均1.8s降至400ms左右。
4.2 高并发领养申请处理
秒杀场景下出现超卖问题,最终方案:
- Redis分布式锁控制申请入口
- 乐观锁更新库存
- 引入RabbitMQ异步处理后续流程
压测结果显示500并发下错误率从15%降至0.2%。
5. 部署与运维实践
采用Docker Compose编排服务:
yaml复制version: '3'
services:
app:
image: openjdk:11-jre
ports:
- "8080:8080"
volumes:
- ./logs:/app/logs
minio:
image: minio/minio
environment:
- MINIO_ROOT_USER=admin
- MINIO_ROOT_PASSWORD=ChangeMe123
日志收集方案:
- 使用Logstash采集SpringBoot日志
- 通过Grafana展示关键指标(每日新增救助数、领养转化率等)
- 异常日志触发企业微信机器人告警
6. 扩展优化方向
- 移动端适配:基于Uniapp开发志愿者专用APP,增加扫码快速登记功能
- 智能分析:利用历史数据预测各季节流浪动物数量变化
- 开放API:对接宠物医院系统实现电子病历共享
- 区块链存证:领养记录上链增强公信力
实际开发中发现Element Plus的表格虚拟滚动在渲染超500条数据时仍有卡顿,最终改用vxe-table专业版解决。建议中小型救助站可以先从核心模块(档案管理+领养申请)起步,后续再逐步迭代其他功能。