基于SpringBoot的宠物医院日常业务管理系统 - 源码深度解析

JavaJavaScriptMavenHTMLCSSSSM框架MySQLSpringboot框架
2026-02-089 浏览

文章摘要

本系统是一款专为宠物医院设计的日常业务管理平台,基于SpringBoot框架构建,旨在解决传统宠物医院在宠物信息记录、医疗流程跟踪及日常运营中普遍存在的信息孤岛、流程繁琐与管理效率低下等核心痛点。系统通过将宠物档案、诊疗业务、收费等环节数字化整合,为医院提供标准化、一体化的运营支持,显著提升服务质量...

在现代宠物医疗行业快速发展的背景下,传统的手工记录和分散管理方式已难以满足日益增长的运营需求。信息孤岛、流程繁琐、管理效率低下成为制约宠物医院服务质量提升的关键因素。为此,我们设计并实现了一套专业级的宠物医疗运营管理平台,通过数字化手段整合宠物档案、诊疗业务、库存管理和财务收费等核心环节,为中小型宠物诊所和连锁医院提供全方位的运营支持。

系统架构与技术栈

该平台采用经典的SpringBoot全栈架构,充分发挥了SpringBoot在快速开发、简化配置和微服务部署方面的优势。后端基于SpringBoot 2.x构建,数据持久层使用MyBatis框架,数据库采用MySQL 8.0,前端结合Thymeleaf模板引擎和Vue.js实现动态页面渲染。

系统的三层架构设计清晰明确:

  • 控制层(Controller):负责请求转发、参数验证和权限控制
  • 业务逻辑层(Service):封装复杂的业务规则和业务流程
  • 数据持久层(Mapper):通过MyBatis实现数据库操作映射
@RestController
@RequestMapping("/admin/article")
public class ArticleAdminController {
    
    @Value("${articleImageFilePath}")
    private String articleImageFilePath;
    
    @Resource
    private ArticleService articleService;
    
    @Resource
    private ArticleTypeService articleTypeService;
    
    @Resource
    private LogService logService;
}

安全框架采用Apache Shiro实现细粒度的权限控制,通过注解方式对不同的业务操作进行权限验证:

@RequestMapping("/list")
@RequiresPermissions(value = "文章管理")
public Map<String, Object> list(Article searchArticle, 
                               @RequestParam(value = "page", required = false) Integer page,
                               @RequestParam(value = "rows", required = false) Integer rows) {
    // 分页查询实现
}

数据库设计亮点

1. 信息通知表(t_information)的设计优化

信息通知表作为系统内部通讯的核心,其设计充分考虑了性能和数据完整性:

CREATE TABLE `t_information` (
  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键ID',
  `content` varchar(1000) DEFAULT NULL COMMENT '内容',
  `sendDate` datetime DEFAULT NULL COMMENT '发送日期',
  `isRead` int(11) DEFAULT NULL COMMENT '是否已读',
  `customerId` int(11) DEFAULT NULL COMMENT '客户ID',
  `userId` int(11) DEFAULT NULL COMMENT '用户ID',
  PRIMARY KEY (`id`),
  KEY `customerId` (`customerId`),
  KEY `userId` (`userId`),
  CONSTRAINT `t_information_ibfk_1` FOREIGN KEY (`customerId`) 
    REFERENCES `t_customer` (`id`) ON DELETE CASCADE,
  CONSTRAINT `t_information_ibfk_2` FOREIGN KEY (`userId`) 
    REFERENCES `t_user` (`id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_general_ci COMMENT='信息表'

设计亮点分析

  • 字段优化content字段采用varchar(1000)而非text类型,既满足消息内容存储需求,又避免了text类型带来的性能开销
  • 索引策略:为customerIduserId分别建立索引,优化了按用户或客户查询消息的性能
  • 外键约束:使用ON DELETE CASCADE级联删除,确保数据一致性
  • 字符集选择:采用utf8_general_ci校对集,支持多语言内容存储

2. 设备使用日志表(t_equipmentuselog)的业务建模

设备管理是宠物医院运营的重要环节,该表的设计体现了对设备使用全生命周期的精细化管理:

CREATE TABLE `t_equipmentuselog` (
  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键ID',
  `beginDate` datetime DEFAULT NULL COMMENT '开始日期',
  `endDate` datetime DEFAULT NULL COMMENT '结束日期',
  `userId` int(11) DEFAULT NULL COMMENT '用户ID',
  `equipmentId` int(11) DEFAULT NULL COMMENT '设备ID',
  PRIMARY KEY (`id`),
  KEY `equipmentId` (`equipmentId`),
  KEY `userId` (`userId`),
  CONSTRAINT `t_equipmentuselog_ibfk_1` FOREIGN KEY (`equipmentId`) 
    REFERENCES `t_equipment` (`id`) ON DELETE CASCADE,
  CONSTRAINT `t_equipmentuselog_ibfk_2` FOREIGN KEY (`userId`) 
    REFERENCES `t_user` (`id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_general_ci COMMENT='设备使用日志表'

设备使用记录管理

业务价值体现

  • 时间维度管理beginDateendDate精确记录设备使用时段,支持使用率统计分析
  • 责任追溯:通过userId关联具体操作人员,实现责任明确化
  • 设备生命周期管理:为设备维护、报废决策提供数据支撑

3. 角色权限表(t_user_role)的安全架构

基于RBAC(基于角色的访问控制)模型,实现了灵活的权限管理体系:

CREATE TABLE `t_user_role` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `roleId` int(11) DEFAULT NULL,
  `userId` int(11) DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `FKa9c8iiy6ut0gnx491fqx4pxam` (`roleId`),
  KEY `FKq5un6x7ecoef5w1n39cop66kl` (`userId`),
  CONSTRAINT `FKa9c8iiy6ut0gnx491fqx4pxam` FOREIGN KEY (`roleId`) 
    REFERENCES `t_role` (`id`) ON DELETE CASCADE,
  CONSTRAINT `FKq5un6x7ecoef5w1n39cop66kl` FOREIGN KEY (`userId`) 
    REFERENCES `t_user` (`id`) ON DELETE CASCADE
) ENGINE=InnoDB AUTO_INCREMENT=122 DEFAULT CHARSET=utf8 COLLATE=utf8_general_ci

核心功能实现

1. 智能文章管理系统

文章管理模块不仅支持基本的CRUD操作,还集成了富文本编辑器和图片上传功能,满足医院知识库建设的需求:

/**
 * ckeditor上传图片
 */
@RequestMapping("/ckeditorUpload")
public String ckeditorUpload(@RequestParam("upload") MultipartFile file, 
                           String CKEditorFuncNum) throws Exception {
    // 获取文件名
    String fileName = file.getOriginalFilename();
    // 获取文件的后缀
    String suffixName = fileName.substring(fileName.lastIndexOf("."));
    String newFileName = DateUtil.getCurrentDateStr() + suffixName;
    
    // 图片保存到服务器
    FileUtils.copyInputStreamToFile(file.getInputStream(), 
        new File(articleImageFilePath + newFileName));
    
    // 组织返回的JSON数据
    String script = "<script type=\"text/javascript\">";
    script += "window.parent.CKEDITOR.tools.callFunction(" + CKEditorFuncNum 
            + ",'/image/article/" + newFileName + "','')";
    script += "</script>";
    
    return script;
}

文章管理界面

实体类设计采用JSR-303验证规范,确保数据的完整性:

public class Article {
    private Integer id;
    
    @NotEmpty(message = "请输入您要搜索的文章标题!")
    private String title;
    
    private Date releaseDate;
    private Integer click;
    private Integer typeId;
    private ArticleType articleType;
    private String content;
    
    // Getter和Setter方法
    public Integer getId() { return id; }
    public void setId(Integer id) { this.id = id; }
    
    public String getTitle() { return title; }
    public void setTitle(String title) { this.title = title; }
    
    // 其他getter/setter方法...
    
    @Override
    public String toString() {
        return "--{" +
                "编号=" + id +
                ", 标题='" + title + '\'' +
                ", 发布日期=" + releaseDate +
                ", 文章类型=" + typeId +
                '}';
    }
}

2. 多角色协同诊疗系统

系统支持宠物主人、医生、管理员等多角色协同工作。宠物主人可以通过系统预约诊疗服务:

宠物主人预约界面

医生端提供完整的诊疗工作台,包括待处理预约、进行中诊疗和已完成记录:

/**
 * 分页查询文章列表 - 支持条件搜索
 */
@RequestMapping("/list")
@RequiresPermissions(value = "文章管理")
public Map<String, Object> list(Article searchArticle, 
                               @RequestParam(value = "page", required = false) Integer page,
                               @RequestParam(value = "rows", required = false) Integer rows) {
    PageBean pageBean = new PageBean(page, rows);
    Map<String, Object> resultMap = new HashMap<>(16);
    Map<String, Object> map = new HashMap<>(16);
    
    // 构建查询条件
    map.put("title", StringUtil.formatLike(searchArticle.getTitle()));
    map.put("typeId", searchArticle.getTypeId());
    map.put("start", pageBean.getStart());
    map.put("size", pageBean.getPageSize());
    
    // 执行查询
    List<Article> articleList = articleService.list(map);
    
    // 关联文章类型信息
    for (Article article : articleList) {
        article.setArticleType(articleTypeService.findById(article.getTypeId()));
    }
    
    resultMap.put("rows", articleList);
    resultMap.put("total", articleService.getCount(map));
    return resultMap;
}

医生诊疗界面

3. 库存与设备精细化管理

仓库管理模块实现药品、耗材的入库、出库、盘点全流程管理:

库存管理界面

设备管理通过使用日志实现精细化管控:

-- 设备使用率统计查询示例
SELECT 
    e.name as equipment_name,
    COUNT(log.id) as usage_count,
    AVG(TIMESTAMPDIFF(MINUTE, log.beginDate, log.endDate)) as avg_usage_minutes
FROM t_equipmentuselog log
JOIN t_equipment e ON log.equipmentId = e.id
WHERE log.beginDate BETWEEN '2024-01-01' AND '2024-12-31'
GROUP BY e.id, e.name
ORDER BY usage_count DESC;

4. 数据统计分析看板

系统内置多维度数据分析功能,为管理层决策提供数据支持:

统计分析界面

实体模型设计

系统的实体模型设计严格遵循领域驱动设计(DDD)原则,每个实体都封装了相应的业务逻辑:

/**
 * 文章类型实体类
 */
public class ArticleType {
    private Integer id;
    private String name;
    private Integer sort;
    private Date createDate;
    private Date updateDate;
    
    // 关联文章集合
    private List<Article> articleList;
    
    // Getter和Setter方法
    public Integer getId() { return id; }
    public void setId(Integer id) { this.id = id; }
    
    public String getName() { return name; }
    public void setName(String name) { this.name = name; }
    
    public List<Article> getArticleList() { return articleList; }
    public void setArticleList(List<Article> articleList) { 
        this.articleList = articleList; 
    }
}

功能展望与优化

基于当前系统架构,未来可以从以下几个方向进行深度优化:

1. 引入Redis缓存层提升性能

# 应用配置示例
spring:
  redis:
    host: localhost
    port: 6379
    database: 0
    timeout: 3000ms
    lettuce:
      pool:
        max-active: 8
        max-wait: -1ms
        max-idle: 8
        min-idle: 0

实现思路:将热点数据如文章信息、用户权限、药品目录等缓存到Redis,减少数据库访问压力,预计可提升系统响应速度40%以上。

2. 微服务架构改造

将单体应用拆分为多个微服务:

  • 用户服务(user-service)
  • 诊疗服务(medical-service)
  • 库存服务(inventory-service)
  • 支付服务(payment-service)

技术选型:Spring Cloud Alibaba + Nacos + Sentinel + Seata

3. 移动端适配与PWA应用

开发响应式PWA(渐进式Web应用),支持移动设备离线访问:

// Service Worker示例
self.addEventListener('fetch', (event) => {
  event.respondWith(
    caches.match(event.request)
      .then((response) => {
        if (response) {
          return response;
        }
        return fetch(event.request);
      }
    )
  );
});

4. 智能预警与推荐引擎

基于历史数据构建机器学习模型:

  • 药品库存预警
  • 疾病趋势预测
  • 个性化服务推荐

5. 区块链电子病历存证

利用区块链技术确保病历数据的不可篡改性和可追溯性:

/**
 * 区块链病历存证服务
 */
@Service
public class BlockchainMedicalRecordService {
    
    public String saveToBlockchain(MedicalRecord record) {
        // 生成病历哈希
        String recordHash = HashUtil.sha256(record.toString());
        
        // 调用区块链智能合约
        return blockchainClient.saveMedicalRecord(recordHash, 
                 record.getPetId(), record.getCreateTime());
    }
}

总结

该宠物医疗运营管理平台通过现代化的技术架构和精心的数据库设计,成功解决了传统宠物医院面临的信息化管理难题。系统采用SpringBoot+MyBatis的技术组合,实现了高内聚低耦合的架构设计,具备良好的扩展性和维护性。

核心功能覆盖了宠物医院的全业务流程,包括诊疗管理、库存控制、设备管理、财务收费等关键环节。多角色权限体系确保了不同岗位人员的安全访问,而丰富的数据分析功能则为管理决策提供了有力支持。

未来通过引入缓存优化、微服务改造、移动端适配等进阶功能,系统将进一步提升性能表现和用户体验,为宠物医疗行业数字化转型提供更加完善的技术解决方案。该项目的成功实践也为类似行业的业务管理系统开发提供了有价值的参考范例。

本文关键词
SpringBoot宠物医院业务管理系统源码解析数据库设计

上下篇

上一篇
没有更多文章
下一篇
没有更多文章