摘 要
本论文设计并实现了一个基于python的宠物医疗服务平台,旨在为宠物主人、兽医和管理员提供高效、安全的宠物医疗服务。系统采用Python编程语言和MySQL数据库,使用Flask作为后端开发框架,具备高度的可扩展性和易维护性。系统主要分为三个用户角色:普通用户、兽医用户和管理员,每个角色有不同的权限和操作模块。
普通用户可以实现注册、登录、浏览宠物资讯、查看医院公告、查询兽医信息、参与交流社区互动、管理个人中心等功能;兽医用户可以管理健康记录、推荐信息、兽医信息、预约信息、用户咨询和就诊信息;管理员则具备后台管理功能,包括用户管理、宠物档案管理、健康记录管理、推荐信息管理、兽医信息管理、预约信息管理、用户咨询管理、就诊信息管理、通知提醒管理、系统管理、医院公告管理、资源管理、交流管理、权限管理和操作日志等。
通过Flask框架的轻量化特点和Python强大的开发能力,本系统不仅提供了灵活的宠物医疗服务管理功能,还具备了较强的扩展性,能够适应未来不断变化的业务需求。该系统为宠物医疗行业提供了一种高效、便捷的解决方案,具有较高的实用价值。
关键词:Flask框架;宠物医疗服务平台;Python;MySQL
Abstract
This paper designs and implements a Python based pet medical service platform, aiming to provide efficient and safe pet medical services for pet owners, veterinarians, and administrators. The system adopts Python programming language and MySQL database, and uses Flask as the backend development framework, which has high scalability and maintainability. The system is mainly divided into three user roles: regular user, veterinary user, and administrator, each with different permissions and operation modules.
Ordinary users can achieve functions such as registration, login, browsing pet information, viewing hospital announcements, querying veterinary information, participating in community interaction, and managing personal centers; Veterinary users can manage health records, recommendation information, veterinary information, appointment information, user consultation, and medical information; Administrators have backend management functions, including user management, pet file management, health record management, recommendation information management, veterinary information management, appointment information management, user consultation management, medical information management, notification and reminder management, system management, hospital announcement management, resource management, communication management, permission management, and operation logs.
Through the lightweight features of the Flask framework and the powerful development capabilities of Python, this system not only provides flexible pet medical service management functions, but also has strong scalability to adapt to the constantly changing business needs in the future. This system provides an efficient and convenient solution for the pet medical industry, with high practical value.
Keywords: Flask framework; Pet medical service platform; Python;MySQL
目 录
第1章绪论
1.1研究背景与意义
随着人们生活水平的提高,养宠成为越来越多人的生活方式,宠物在人们生活中的地位逐渐提升,被视为家庭成员般的存在。这使得人们对宠物健康的重视程度与日俱增,对宠物医疗服务的需求也日益多样化和专业化。然而,传统的宠物医疗服务模式存在诸多不足。宠物医疗信息分散,宠主难以全面了解宠物医院的资质、医生水平、服务项目等关键信息,在选择医院和医生时面临困难。宠物健康档案管理不规范,缺乏系统的记录和跟踪,影响兽医对宠物病情的准确判断和治疗。同时,宠主之间缺乏便捷的交流平台,无法有效分享养宠经验和获取帮助。
开发宠物医疗服务平台具有重要意义。它能够整合各类宠物医疗资源,为宠主提供一站式服务,方便宠主查询宠物医院信息、了解兽医资质、预约就诊等,提升宠物医疗服务的便捷性和效率。规范宠物健康档案管理,实现档案的电子化和系统化,便于兽医跟踪宠物健康状况,提高诊断和治疗的准确性。为宠主搭建交流社区,促进宠主之间的互动,让宠主分享养宠经验、获取养宠知识,增强养宠群体的凝聚力。此外,也有助于推动宠物医疗行业的规范化和标准化发展,提升整个行业的服务质量。
1.2国内外研究现状
在国外,宠物医疗服务平台的发展已取得一定成果。许多发达国家的宠物医疗服务体系较为完善,线上平台与线下医疗资源紧密结合。比如瑞典的 FirstVet,自 2016 年成立以来,已在本土市场拥有 6 万名注册用户,提供远程宠物医疗咨询服务,当宠物出现咳嗽、打喷嚏等症状时,主人可通过远程视频咨询医生,其服务定价为传统宠物医院起步价的 30 - 40% 。该公司还通过与保险公司合作获取客户,计划拓展欧洲业务。还有类似 PawSquad 这样的公司,能提供兽医上门服务以及 24/7 的远程宠物医疗咨询,涵盖视频和文字方式,极大地便利了宠物主人,提升了宠物医疗服务的可及性和效率。
国内宠物医疗服务平台也在蓬勃发展。随着国内宠物饲养数量的快速增长,2024 年城镇宠物犬猫数量已突破 1.2 亿只,较 2023 年增长 2.1%,市场对宠物医疗服务的需求持续攀升。“宠医客” 作为宠物医疗、健康管理的综合型服务平台,其互联网宠物医院是国内首家此类医院,为宠主提供诊前在线咨询、诊疗方案分析、预约挂号、美容洗护预约、诊后跟踪随访以及宠物食品用品购买等一系列服务,实现了对宠物服务的一体化操作。“友宠” 宠物管理平台则专注于帮助主人记录宠物的疫苗接种、体检、服药、驱虫等健康信息,有助于主人及时掌握宠物健康状况,为宠物疾病预防、定期检查及应急处理提供有力支持 。
不过,国内外宠物医疗服务平台在发展中都面临一些挑战。在国内,宠物医疗市场存在诸多乱象,如部分宠物医院资质缺乏、过度医疗、价格混乱等问题。据不完全统计,截至 2025 年 1 月,国内动物诊疗机构数量达 3.4 万余家,与 2024 年同期相比上升 17%,但无证接种疫苗、资质不足进行复杂手术等医疗事故屡见不鲜。国外虽然体系相对完善,但也存在不同平台服务质量参差不齐,以及如何进一步整合医疗资源、提升服务效率等问题。
1.3本文的组织结构
第一章是绪论,本文的开头部分,对本题目的研究背景和研究意义等一些做文字性的描述。
第二章研究了宠物医疗服务平台的所采用的开发技术和开发工具。
第三章是系统分析部分,包括系统总体需求描述、功能性角度分析系统需求、非功能性等各个方面分析系统是否可以实现。
第四章是系统设计部分,本文的重要部分,提供了系统架构的详细设计和一些主要功能模块的设计说明。
第五章是系统的具体实现,介绍系统的各个模块的具体实现。
第六章在前几章的基础上对系统进行测试和运行。
最后对系统进行了认真的总结,以此对未来有一个新的展望。
第2章相关技术介绍
2.1B/S体系工作原理
B/S(Browser/Server)架构是一种基于浏览器和服务器的应用架构模式。它以Web浏览器作为客户端,服务器端通过Web技术提供应用服务。客户端通过浏览器与服务器进行交互,用户无需安装专门的客户端应用程序,只需要通过互联网连接即可访问应用程序[1]。在B/S架构中,客户端主要承担用户界面的呈现和基本的输入输出功能,而核心的业务处理、数据存储等操作则由服务器端完成。这种架构的核心优势在于无需在每个客户端机器上安装或更新软件,只要用户的浏览器符合要求,就可以使用系统。
B/S(Browser/Server)架构是一种网络架构模型,其主要特点是客户端通过浏览器与服务器进行通信,所有的业务逻辑和数据处理都在服务器端完成,客户端仅负责展示数据[2]。B/S架构本质上是一种客户端-服务器模式的变体,它通过将传统的C/S(Client/Server)架构中的客户端功能移到浏览器中,简化了客户端的开发和维护工作。在B/S架构中,用户通过浏览器发送请求,浏览器负责展示从服务器获取的数据,服务器则处理请求并返回响应。该架构避免了安装和配置客户端软件的麻烦,也减少了对客户端硬件的依赖,适合于需要大规模部署和跨平台支持的应用系统。
2.2Flask框架介绍
Flask是一个轻量级的可定制框架,使用Python语言编写,较其他同类型框架更为灵活、轻便、安全且容易上手。它可以很好地结合MVC模式进行开发,开发人员分工合作,小型团队在短时间内就可以完成功能丰富的中小型网站或Web服务的实现。另外,Flask还有很强的定制性,用户可以根据自己的需求来添加相应的功能,在保持核心功能简单的同时实现功能的丰富与扩展,其强大的插件库可以让用户实现个性化的网站定制,开发出功能强大的网站[3]。
Flask是目前十分流行的web框架,采用Python编程语言来实现相关功能。它被称为微框架(microframework),“微”并不是意味着把整个Web应用放入到一个Python文件,微框架中的“微”是指Flask旨在保持代码简洁且易于扩展,Flask框架的主要特征是核心构成比较简单,但具有很强的扩展性和兼容性,程序员可以使用Python语言快速实现一个网站或Web服务。一般情况下,它不会指定数据库和模板引擎等对象,用户可以根据需要自己选择各种数据库。Flask自身不会提供表单验证功能,在项目实施过程中可以自由配置,从而为应用程序开发提供数据库抽象层基础组件,支持进行表单数据合法性验证、文件上传处理、用户身份认证和数据库集成等功能。Flask主要包括Werkzeug和Jinja2两个核心函数库,它们分别负责业务处理和安全方面的功能,这些基础函数为web项目开发过程提供了丰富的基础组件。Werkzeug库十分强大,功能比较完善,支持URL路由请求集成,一次可以响应多个用户的访问请求;支持Cookie和会话管理,通过身份缓存数据建立长久连接关系,并提高用户访问速度;支持交互式Javascript调试,提高用户体验;可以处理HTTP基本事务,快速响应客户端推送过来的访问请求。Jinja2库支持自动HTML转移功能,能够很好控制外部黑客的脚本攻击。系统运行速度很快,页面加载过程会将源码进行编译形成Python字节码,从而实现模板的高效运行;模板继承机制可以对模板内容进行修改和维护,为不同需求的用户提供相应的模板。目前Python的web框架有很多。除了Flask,还有django、Web2py等。其中Django是目前Python的框架中使用度最高的。但是Django如同java EJB(EnterpriseJavaBeansJavaEE服务器端组件模型)多被用于大型网站的开发,但对于大多数的小型网站的开发,使用SSH(Struts+Spring+Hibernat的一个JavaEE集成框架)就可以满足,和其他的轻量级框架相比较,Flask框架有很好的扩展性,这是其他Web框架不可替代的[4]。
2.3Vue技术
Vue.js是一款用于构建用户界面的渐进式JavaScript框架,提供一种灵活而高效的方式来开发单页面应用(SPA)。Vue的设计理念是通过尽量简化开发过程,提供一种声明式的方式来构建用户界面[5]。Vue.js通过数据驱动的视图模型,允许开发者以声明式语法绑定数据与视图,使得应用的状态和界面表现更加简洁和可维护。它的核心思想是通过组件化开发将复杂的UI拆分为可重用的独立模块,从而提升了代码的模块化、可维护性和可扩展性。
Vue.js具备响应式数据绑定和虚拟DOM的特性。响应式数据绑定意味着当数据变化时,Vue会自动更新与之绑定的DOM元素,从而实现视图的实时更新。虚拟DOM则是Vue.js的一种优化手段,通过将对DOM的操作抽象为一个虚拟的DOM树来提高性能,减少实际DOM操作的开销[6]。Vue还提供了丰富的插件和工具,如Vue Router用于路由管理,Vuex用于状态管理,方便开发者构建复杂的前端应用。Vue的灵活性和简洁性使其成为现代Web开发中常用的前端框架之一。
2.4MySQL数据库
MySQL是一种开源的关系型数据库管理系统(RDBMS),基于SQL(结构化查询语言)进行数据操作。作为一个被广泛使用的数据库系统,MySQL具有高度的性能、可扩展性和可靠性。MySQL使用表格结构来存储数据,每个表由多个列和行组成,数据通过SQL查询语言进行操作[7]。MySQL支持多种数据类型,如整数、浮动小数、字符串、日期等,以满足不同应用场景对数据存储的需求。在实际应用中,MySQL通常用于存储和管理结构化数据,通过索引、视图、触发器等功能提升数据查询的效率和数据的完整性。
MySQL支持ACID事务特性(原子性、一致性、隔离性、持久性),确保数据库操作的可靠性和数据的一致性。它还支持多种存储引擎,其中InnoDB是最常用的存储引擎,具备事务支持、行级锁定和外键约束等特性,适用于高并发、高可靠性的数据存储需求。MySQL可以通过主从复制、分区和分库分表等技术实现横向扩展,以应对大规模数据存储和高负载的应用需求。MySQL还具有灵活的权限管理机制,支持用户角色管理、细粒度的权限控制等,保障数据的安全性。
第3章 系统分析
3.1可行性分析
开发任何一个系统,都要对其可行性进行分析,对其时间和资源上的限制进行考虑,这样可以减少系统开发的风险。同时,分析之后不仅能够合理的运用人力,还能在各方面资源的消耗上得到节省。下面就对技术、经济和社会三个方面来介绍。
3.1.1技术可行性
技术可行性主要考虑当前项目所用的技术是否能够符合,在设备上是否能够满足,及各种辅助工具是否提供帮助。本系统用的是python开发语言,调试相对简单,当前的计算机硬件配置也完全能满足开发的需求,因此在技术上是绝对可行的。软件方面:由于软件的开发平台成熟可行,它们速度快、容量大、可靠性能高、价格低,完全能满足系统的需求。采用python编程语言,已无技术上的问题。
3.1.2经济可行性
系统所采用的ZendStudio开发平台和Mysql后端数据库均为免费开发工具。故开发成本主要集中在后期的推广及系统维护上。相对于成本较高的C/S模式,也是选用了成本较低的B/S模式,所以经济上几乎没任何问题。
3.1.3操作可行性
采用Flask框架的宠物医疗服务平台在操作可行性方面具备显著优势。系统采用用户友好的界面设计,使得用户能够轻松地进行操作,无需具备专业的技术背景。同时,系统支持多种设备访问,包括电脑、手机和平板等,满足用户在不同场景下的使用需求。此外,系统还提供了详细的操作指南,帮助用户快速掌握使用技巧,解决在使用过程中遇到的问题。因此,不动产租赁业务管理系统在操作层面是完全可行的。
3.2功能需求分析
本论文设计并实现了一个基于python的宠物医疗服务平台,旨在为普通用户、兽医用户和管理员提供一站式服务。系统的核心功能涵盖了宠物医疗信息管理、普通用户与兽医的互动、预约管理以及后台管理等。下面是对系统功能的详细分析。
1.普通用户功能
首页:作为用户进入系统后的首个界面,集中展示系统的各项功能板块,包括医院公告、宠物资讯、兽医信息、交流社区等,为用户提供一站式的宠物医疗服务概览。
交流社区:用户可以与其他用户交流养宠心得、分享宠物故事、讨论宠物健康问题等,增强用户之间的互动性,营造活跃的社区氛围。社区支持发布帖子、回复评论、点赞等功能,帮助用户建立联系和分享经验。
医院公告:用户能够查看管理员发布的最新公告和通知,及时获取医院动态、政策变动、活动信息等重要信息,确保用户对平台动态的全面了解。
宠物资讯:提供丰富的宠物健康和护理知识,包括疾病预防、营养建议、训练技巧等。用户可以浏览最新的宠物资讯,提升自己的养宠知识和技能。
兽医信息:用户可以查看详细的兽医信息,包括专业资质、工作经验、用户评价等。系统支持搜索和筛选功能,帮助用户快速找到合适的兽医。
个人中心:用户可以在个人中心管理自己的宠物档案、健康记录、推荐信息、预约信息、用户咨询、就诊信息等。个人首页展示用户的基本信息和宠物档案,帮助用户更好地管理自己的宠物健康和医疗事务。
2.兽医用户功能
后台首页:兽医用户登录系统后,进入后台首页,可以快速了解系统的整体运行情况,包括预约信息、咨询信息、就诊信息等。
健康记录管理:兽医用户可以管理宠物的健康记录,包括病历、检查报告、治疗记录等。系统支持添加、编辑和删除健康记录,确保记录的准确性和完整性。
推荐信息管理:兽医用户可以管理推荐信息,根据宠物的健康状况和需求,为用户提供个性化的宠物护理和医疗建议。
兽医信息管理:兽医用户可以管理自己的兽医信息,包括个人资料、专业资质、工作经历等。系统支持上传详细的兽医信息,增强用户对兽医的信任和满意度。
预约信息管理:兽医用户可以查看和处理用户的预约信息,确认预约时间并安排就诊。
用户咨询管理:兽医用户可以查看和处理用户的咨询信息,及时回复用户的咨询,提供专业的医疗建议。
就诊信息管理:兽医用户可以管理就诊信息,包括就诊记录、治疗方案、用药记录等。系统支持添加、编辑和删除就诊信息,确保就诊记录的准确性和完整性。
3.管理员功能
后台首页:管理员登录系统后,进入后台首页,可以快速了解系统的整体运行情况,包括用户数据、预约数据、咨询数据等。
系统用户管理:管理员可以管理系统的用户,包括管理员账户、普通用户和兽医用户。管理员可以查看用户的注册信息、登录记录和操作历史,确保系统的安全性和规范性。
宠物档案管理:管理员可以管理宠物档案,包括宠物的基本信息、健康记录等。
健康记录管理:管理员可以管理宠物的健康记录,包括病历、检查报告、治疗记录等。
推荐信息管理:管理员可以管理推荐信息,根据宠物的健康状况和需求,为用户提供个性化的宠物护理和医疗建议。
兽医信息管理:管理员可以管理兽医信息,包括个人资料、专业资质、工作经历等。
预约信息管理:管理员可以查看和处理用户的预约信息,确认预约时间并安排就诊。
用户咨询管理:管理员可以查看和管理用户的咨询信息。
就诊信息管理:管理员可以管理就诊信息,包括就诊记录、治疗方案、用药记录等。
通知提醒管理:管理员可以管理通知提醒功能,设置提醒的时间和内容,确保用户能够及时收到重要的通知和提醒。
系统管理:管理员可以管理轮播图的内容,确保系统的界面美观和信息更新及时。
资源管理:管理员可以管理宠物资讯和资讯分类,发布和编辑宠物资讯,帮助用户获取更多的宠物健康和护理知识。
交流管理:管理员可以管理交流社区,包括社区分类和用户帖子。管理员可以审核用户发布的帖子,确保社区内容的真实性和合规性。
权限管理:管理员可以对不同用户角色进行权限分配和管理。通过设置详细的权限规则,确保每个用户在系统中只能执行符合其角色的操作,从而保障系统的安全性和数据的保密性。
操作日志管理:系统会自动记录所有用户和管理员的操作行为,包括登录、数据修改、权限变更等关键操作。管理员可以通过操作日志功能查看这些记录,以便进行问题追踪、安全审计和系统监控。
3.3非功能需求分析
非功能性需求主要关注的是系统如何运行,而不是它具体完成什么功能。这些需求包括性能、可用性、安全性、可维护性、可扩展性、易用性等方面。以下是一个关于宠物医疗服务平台非功能性需求分析的概要。
性能需求:系统需确保快速响应和高吞吐量,以支持大量用户同时访问,即使在高峰时段也能保持流畅的操作体验,避免因延迟或卡顿影响用户体验。
可用性:系统必须具备高可用性,采用冗余部署、负载均衡等策略,确保即使部分组件故障也能迅速恢复服务,减少服务中断时间,保障用户业务的连续性。
安全性:鉴于系统处理用户敏感信息,如个人信息等,必须实施严格的安全措施,包括数据加密、访问控制、防攻击机制等,以保护用户数据免受未授权访问或泄露。
可维护性:系统设计应注重可维护性,采用模块化、标准化的架构,提供详尽的开发文档和用户手册,确保系统易于理解和维护,降低长期运维成本。
可扩展性:随着业务的发展,系统可能需要扩展功能或提升性能。因此,系统需具备灵活的可扩展性,能够轻松添加新模块、优化性能,以应对未来增长的需求。
易用性:用户界面应直观易用,符合用户习惯,提供清晰的导航和友好的操作反馈,帮助用户快速上手并高效完成任务,提升整体用户满意度。
3.4系统用例分析
根据3.2功能需求,得出以下用例图
普通用户用例图如下所示。

图3-1 普通用户用例图
兽医用户用例图如下所示。

图3-2 兽医用户用例图
管理员用例图如下所示。

图3-3 管理员用例图
3.5系统流程分析
3.5.1程序操作流程
用户访问系统,可以选择进行注册或登录操作。注册成功后,用户可以使用注册的账号登录系统。登录后的用户可以进入系统功能界面,使用自己权限内的功能操作。程序操作流程图如图3-4所示。
图3-4 程序操作流程图
3.5.2登录流程
用户访问系统,进入登录页面页面,入其用户名和密码,后端服务接收登录请求,验证用户提供的用户名和密码是否匹配数据库中存储的信息,验证通过即可登录成功。登录流程图如图3-5所示。

图3-5 登录流程图
3.5.3注册流程
未有账号的用户可进入注册界面进行注册操作,填写注册表格,包括用户名、密码、电子邮件等必要信息。后台系统验证并保存用户提交的信息。分配唯一用户标识符。注册成功后,用户可以使用账号密码进行登录。用户注册流程图如图3-6所示。

图3-6 注册流程图
第4章系统设计
4.1系统架构设计
采用Flask框架的宠物医疗服务平台的架构设计主要分为可以3层,主要有Web层,业务层,Model层。其中web层还包括View层和Controller层,Model层包括元数据扩展层和数据访问层。
系统架构如下图所示。
图4-1 系统架构
4.2系统总体设计
采用Flask框架的宠物医疗服务平台总体分为前台用户模块和后台管理员模块。两个模块表现上是分别独立存在,但是访问的数据库是一样的。每一个模块的功能都是根据先前完成的需求分析,并查阅相关资料后整理制作的。系统功能结构图如下图所示。
图4-2 系统功能结构图
4.3数据库设计
4.3.1数据库实体设计
数据库实体设计是数据库设计的关键步骤,对实际业务逻辑中涉及的实体及其属性进行抽象建模,明确系统中的主要信息对象及其关系[8]。在实体设计中,根据需求分析确定系统的核心实体,如用户、角色、权限等,提取实体的主要属性,如用户的ID、姓名、联系方式,名称、类型等,同时定义各实体之间的关系,包括一对一、一对多、多对多等。在设计过程中,注重实体的完整性、规范性和唯一性,确保设计能够满足系统功能需求,并为后续的表设计提供清晰的结构框架。实体设计需遵循数据库设计的标准化要求,避免数据冗余和不必要的复杂度。
系统全局E-R图如下图所示。
图4-3 系统ER图
4.3.2数据库表设计
数据库表设计基于实体设计,将抽象的实体映射为具体的表结构。设计过程中,为每个实体定义表名、字段名及数据类型[9]。根据业务需求,合理定义主键、外键及约束条件,确保表之间的关联性,例如通过外键建立用户表和角色表之间的关系。表设计时注重数据存储的完整性、一致性,并通过索引优化查询效率,最终确保数据库结构能够支持系统的功能需求。以下是系统的数据库表设计展示。
表 4-1-access_token(登陆访问时长)
| 编号 | 字段名 | 类型 | 长度 | 是否非空 | 是否主键 | 注释 |
| 1 | token_id | int | 是 | 是 | 临时访问牌ID | |
| 2 | token | varchar | 64 | 否 | 否 | 临时访问牌 |
| 3 | info | text | 65535 | 否 | 否 | 信息 |
| 4 | maxage | int | 是 | 否 | 最大寿命:默认2小时 | |
| 5 | create_time | timestamp | 是 | 否 | 创建时间 | |
| 6 | update_time | timestamp | 是 | 否 | 更新时间 | |
| 7 | user_id | int | 是 | 否 | 用户编号 |
表 4-2-article(文章)
| 编号 | 字段名 | 类型 | 长度 | 是否非空 | 是否主键 | 注释 |
| 1 | article_id | mediumint | 是 | 是 | 文章id | |
| 2 | title | varchar | 125 | 是 | 是 | 标题 |
| 3 | type | varchar | 64 | 是 | 否 | 文章分类 |
| 4 | hits | int | 是 | 否 | 点击数 | |
| 5 | praise_len | int | 是 | 否 | 点赞数 | |
| 6 | create_time | timestamp | 是 | 否 | 创建时间 | |
| 7 | update_time | timestamp | 是 | 否 | 更新时间 | |
| 8 | source | varchar | 255 | 否 | 否 | 来源 |
| 9 | url | varchar | 255 | 否 | 否 | 来源地址 |
| 10 | tag | varchar | 255 | 否 | 否 | 标签 |
| 11 | content | longtext | 4294967295 | 否 | 否 | 正文 |
| 12 | img | varchar | 255 | 否 | 否 | 封面图 |
| 13 | description | text | 65535 | 否 | 否 | 文章描述 |
表 4-3-article_type(文章分类)
| 编号 | 字段名 | 类型 | 长度 | 是否非空 | 是否主键 | 注释 |
| 1 | type_id | smallint | 是 | 是 | 分类ID | |
| 2 | display | smallint | 是 | 否 | 显示顺序 | |
| 3 | name | varchar | 16 | 是 | 否 | 分类名称 |
| 4 | father_id | smallint | 是 | 否 | 上级分类ID | |
| 5 | description | varchar | 255 | 否 | 否 | 描述 |
| 6 | icon | text | 65535 | 否 | 否 | 分类图标 |
| 7 | url | varchar | 255 | 否 | 否 | 外链地址 |
| 8 | create_time | timestamp | 是 | 否 | 创建时间 | |
| 9 | update_time | timestamp | 是 | 否 | 更新时间 |
表 4-4-auth(用户权限管理)
| 编号 | 字段名 | 类型 | 长度 | 是否非空 | 是否主键 | 注释 |
| 1 | auth_id | int | 是 | 是 | 授权ID | |
| 2 | user_group | varchar | 64 | 否 | 否 | 用户组 |
| 3 | mod_name | varchar | 64 | 否 | 否 | 模块名 |
| 4 | table_name | varchar | 64 | 否 | 否 | 表名 |
| 5 | page_title | varchar | 255 | 否 | 否 | 页面标题 |
| 6 | path | varchar | 255 | 否 | 否 | 路由路径 |
| 7 | parent | varchar | 64 | 否 | 否 | 父级菜单 |
| 8 | parent_sort | int | 是 | 否 | 父级菜单排序 | |
| 9 | position | varchar | 32 | 否 | 否 | 位置 |
| 10 | mode | varchar | 32 | 是 | 否 | 跳转方式 |
| 11 | add | tinyint | 是 | 否 | 是否可增加 | |
| 12 | del | tinyint | 是 | 否 | 是否可删除 | |
| 13 | set | tinyint | 是 | 否 | 是否可修改 | |
| 14 | get | tinyint | 是 | 否 | 是否可查看 | |
| 15 | field_add | text | 65535 | 否 | 否 | 添加字段 |
| 16 | field_set | text | 65535 | 否 | 否 | 修改字段 |
| 17 | field_get | text | 65535 | 否 | 否 | 查询字段 |
| 18 | table_nav_name | varchar | 500 | 否 | 否 | 跨表导航名称 |
| 19 | table_nav | varchar | 500 | 否 | 否 | 跨表导航 |
| 20 | option | text | 65535 | 否 | 否 | 配置 |
| 21 | create_time | timestamp | 是 | 否 | 创建时间 | |
| 22 | update_time | timestamp | 是 | 否 | 更新时间 |
表 4-5-code_token(验证码)
| 编号 | 字段名 | 类型 | 长度 | 是否非空 | 是否主键 | 注释 |
| 1 | code_token_id | int | 是 | 是 | 验证码ID | |
| 2 | token | varchar | 255 | 否 | 否 | 令牌 |
| 3 | code | varchar | 255 | 否 | 否 | 验证码 |
| 4 | expire_time | timestamp | 是 | 否 | 失效时间 | |
| 5 | create_time | timestamp | 是 | 否 | 创建时间 | |
| 6 | update_time | timestamp | 是 | 否 | 更新时间 |
表 4-6-collect(收藏)
| 编号 | 字段名 | 类型 | 长度 | 是否非空 | 是否主键 | 注释 |
| 1 | collect_id | int | 是 | 是 | 收藏ID | |
| 2 | user_id | int | 是 | 是 | 收藏人ID | |
| 3 | source_table | varchar | 255 | 否 | 否 | 来源表 |
| 4 | source_field | varchar | 255 | 否 | 否 | 来源字段 |
| 5 | source_id | int | 是 | 否 | 来源ID | |
| 6 | title | varchar | 255 | 否 | 否 | 标题 |
| 7 | img | varchar | 255 | 否 | 否 | 封面 |
| 8 | create_time | timestamp | 是 | 否 | 创建时间 | |
| 9 | update_time | timestamp | 是 | 否 | 更新时间 |
表 4-7-comment(评论)
| 编号 | 字段名 | 类型 | 长度 | 是否非空 | 是否主键 | 注释 |
| 1 | comment_id | int | 是 | 是 | 评论ID | |
| 2 | user_id | int | 是 | 是 | 评论人ID | |
| 3 | reply_to_id | int | 是 | 否 | 回复评论ID | |
| 4 | content | longtext | 4294967295 | 否 | 否 | 内容 |
| 5 | nickname | varchar | 255 | 否 | 否 | 昵称 |
| 6 | avatar | varchar | 255 | 否 | 否 | 头像地址 |
| 7 | create_time | timestamp | 是 | 否 | 创建时间 | |
| 8 | update_time | timestamp | 是 | 否 | 更新时间 | |
| 9 | source_table | varchar | 255 | 否 | 否 | 来源表 |
| 10 | source_field | varchar | 255 | 否 | 否 | 来源字段 |
| 11 | source_id | int | 是 | 否 | 来源ID |
表 4-8-forum(论坛)
| 编号 | 字段名 | 类型 | 长度 | 是否非空 | 是否主键 | 注释 |
| 1 | forum_id | mediumint | 是 | 是 | 论坛ID | |
| 2 | display | smallint | 是 | 否 | 排序 | |
| 3 | user_id | mediumint | 是 | 否 | 用户ID | |
| 4 | nickname | varchar | 16 | 否 | 否 | 昵称 |
| 5 | praise_len | int | 否 | 否 | 点赞数 | |
| 6 | hits | int | 是 | 否 | 访问数 | |
| 7 | title | varchar | 125 | 是 | 否 | 标题 |
| 8 | keywords | varchar | 125 | 否 | 否 | 关键词 |
| 9 | description | varchar | 255 | 否 | 否 | 描述 |
| 10 | url | varchar | 255 | 否 | 否 | 来源地址 |
| 11 | tag | varchar | 255 | 否 | 否 | 标签 |
| 12 | img | text | 65535 | 否 | 否 | 封面图 |
| 13 | content | longtext | 4294967295 | 否 | 否 | 正文 |
| 14 | create_time | timestamp | 是 | 否 | 创建时间 | |
| 15 | update_time | timestamp | 是 | 否 | 更新时间 | |
| 16 | avatar | varchar | 255 | 否 | 否 | 发帖人头像 |
| 17 | type | varchar | 64 | 是 | 否 | 论坛分类 |
| 18 | istop | int | 是 | 否 | 是否置顶 |
表 4-9-forum_type(论坛分类)
| 编号 | 字段名 | 类型 | 长度 | 是否非空 | 是否主键 | 注释 |
| 1 | type_id | smallint | 是 | 是 | 分类ID | |
| 2 | name | varchar | 16 | 是 | 否 | 分类名称 |
| 3 | description | varchar | 255 | 否 | 否 | 描述 |
| 4 | url | varchar | 255 | 否 | 否 | 外链地址 |
| 5 | father_id | smallint | 是 | 否 | 上级分类ID | |
| 6 | icon | varchar | 255 | 否 | 否 | 分类图标 |
| 7 | create_time | timestamp | 是 | 否 | 创建时间 | |
| 8 | update_time | timestamp | 是 | 否 | 更新时间 |
表 4-10-health_records(健康记录)
| 编号 | 字段名 | 类型 | 长度 | 是否非空 | 是否主键 | 注释 |
| 1 | health_records_id | int | 是 | 是 | 健康记录ID | |
| 2 | ordinary_user | int | 否 | 否 | 普通用户 | |
| 3 | pet_name | varchar | 64 | 否 | 否 | 宠物名称 |
| 4 | pet_type | varchar | 64 | 否 | 否 | 宠物种类 |
| 5 | pet_age | varchar | 64 | 否 | 否 | 宠物年龄 |
| 6 | pet_weight | varchar | 64 | 否 | 否 | 宠物体重 |
| 7 | pet_gender | varchar | 64 | 否 | 否 | 宠物性别 |
| 8 | pet_hair_color | varchar | 64 | 否 | 否 | 宠物毛色 |
| 9 | vaccination | varchar | 64 | 否 | 否 | 疫苗接种 |
| 10 | physical_examination | varchar | 255 | 否 | 否 | 体检情况 |
| 11 | allergy_history | text | 65535 | 否 | 否 | 过敏史 |
| 12 | past_medical_history | text | 65535 | 否 | 否 | 既往病史 |
| 13 | recommend_information_limit_times | int | 是 | 否 | 推荐限制次数 | |
| 14 | create_time | datetime | 是 | 否 | 创建时间 | |
| 15 | update_time | timestamp | 是 | 否 | 更新时间 |
表 4-11-hits(用户点击)
| 编号 | 字段名 | 类型 | 长度 | 是否非空 | 是否主键 | 注释 |
| 1 | hits_id | int | 是 | 是 | 点赞ID | |
| 2 | user_id | int | 是 | 否 | 点赞人 | |
| 3 | create_time | timestamp | 是 | 否 | 创建时间 | |
| 4 | update_time | timestamp | 是 | 否 | 更新时间 | |
| 5 | source_table | varchar | 255 | 否 | 否 | 来源表 |
| 6 | source_field | varchar | 255 | 否 | 否 | 来源字段 |
| 7 | source_id | int | 是 | 否 | 来源ID |
表 4-12-notice(公告)
| 编号 | 字段名 | 类型 | 长度 | 是否非空 | 是否主键 | 注释 |
| 1 | notice_id | mediumint | 是 | 是 | 公告ID | |
| 2 | title | varchar | 125 | 是 | 否 | 标题 |
| 3 | content | longtext | 4294967295 | 否 | 否 | 正文 |
| 4 | create_time | timestamp | 是 | 否 | 创建时间 | |
| 5 | update_time | timestamp | 是 | 否 | 更新时间 |
表 4-13-notification_reminder(通知提醒)
| 编号 | 字段名 | 类型 | 长度 | 是否非空 | 是否主键 | 注释 |
| 1 | notification_reminder_id | int | 是 | 是 | 通知提醒ID | |
| 2 | ordinary_users | int | 否 | 否 | 普通用户 | |
| 3 | reminder_name | varchar | 64 | 否 | 否 | 提醒名称 |
| 4 | reminder_time | date | 否 | 否 | 提醒时间 | |
| 5 | reminder_content | varchar | 64 | 否 | 否 | 提醒内容 |
| 6 | create_time | datetime | 是 | 否 | 创建时间 | |
| 7 | update_time | timestamp | 是 | 否 | 更新时间 |
表 4-14-operation_log(操作日志表)
| 编号 | 字段名 | 类型 | 长度 | 是否非空 | 是否主键 | 注释 |
| 1 | operation_log_id | int | 是 | 是 | 操作日志ID | |
| 2 | user_group | varchar | 64 | 否 | 否 | 用户角色 |
| 3 | user_name | varchar | 64 | 否 | 否 | 用户账号 |
| 4 | routes | varchar | 64 | 否 | 否 | 模块名称 |
| 5 | create_time | datetime | 是 | 否 | 创建时间 | |
| 6 | update_time | timestamp | 是 | 否 | 更新时间 |
表 4-15-ordinary_user(普通用户)
| 编号 | 字段名 | 类型 | 长度 | 是否非空 | 是否主键 | 注释 |
| 1 | ordinary_user_id | int | 是 | 是 | 普通用户ID | |
| 2 | user_name | varchar | 64 | 否 | 否 | 用户姓名 |
| 3 | user_gender | varchar | 64 | 否 | 否 | 用户性别 |
| 4 | user_phone | varchar | 64 | 否 | 否 | 用户电话 |
| 5 | examine_state | varchar | 16 | 是 | 否 | 审核状态 |
| 6 | user_id | int | 是 | 否 | 用户ID | |
| 7 | create_time | datetime | 是 | 否 | 创建时间 | |
| 8 | update_time | timestamp | 是 | 否 | 更新时间 |
表 4-16-pet_archives(宠物档案)
| 编号 | 字段名 | 类型 | 长度 | 是否非空 | 是否主键 | 注释 |
| 1 | pet_archives_id | int | 是 | 是 | 宠物档案ID | |
| 2 | ordinary_user | int | 否 | 否 | 普通用户 | |
| 3 | user_name | varchar | 64 | 否 | 否 | 用户姓名 |
| 4 | user_gender | varchar | 64 | 否 | 否 | 用户性别 |
| 5 | user_phone | varchar | 16 | 否 | 否 | 用户电话 |
| 6 | pet_name | varchar | 64 | 否 | 否 | 宠物名称 |
| 7 | pet_type | varchar | 64 | 否 | 否 | 宠物种类 |
| 8 | pet_age | varchar | 64 | 否 | 否 | 宠物年龄 |
| 9 | pet_weight | varchar | 64 | 否 | 否 | 宠物体重 |
| 10 | pet_gender | varchar | 64 | 否 | 否 | 宠物性别 |
| 11 | pet_hair_color | varchar | 64 | 否 | 否 | 宠物毛色 |
| 12 | pet_photo | varchar | 255 | 否 | 否 | 宠物照片 |
| 13 | create_time | datetime | 是 | 否 | 创建时间 | |
| 14 | update_time | timestamp | 是 | 否 | 更新时间 |
表 4-17-praise(点赞)
| 编号 | 字段名 | 类型 | 长度 | 是否非空 | 是否主键 | 注释 |
| 1 | praise_id | int | 是 | 是 | 点赞ID | |
| 2 | user_id | int | 是 | 是 | 点赞人 | |
| 3 | create_time | timestamp | 是 | 否 | 创建时间 | |
| 4 | update_time | timestamp | 是 | 否 | 更新时间 | |
| 5 | source_table | varchar | 255 | 否 | 否 | 来源表 |
| 6 | source_field | varchar | 255 | 否 | 否 | 来源字段 |
| 7 | source_id | int | 是 | 否 | 来源ID | |
| 8 | status | tinyint | 是 | 否 | 点赞状态:1为点赞,0已取消 |
表 4-18-recommend_information(推荐信息)
| 编号 | 字段名 | 类型 | 长度 | 是否非空 | 是否主键 | 注释 |
| 1 | recommend_information_id | int | 是 | 是 | 推荐信息ID | |
| 2 | ordinary_user | int | 否 | 否 | 普通用户 | |
| 3 | pet_name | varchar | 64 | 否 | 否 | 宠物名称 |
| 4 | pet_type | varchar | 64 | 否 | 否 | 宠物种类 |
| 5 | recommend_service | varchar | 64 | 否 | 否 | 推荐服务 |
| 6 | recommend_products | varchar | 64 | 否 | 否 | 推荐产品 |
| 7 | create_time | datetime | 是 | 否 | 创建时间 | |
| 8 | update_time | timestamp | 是 | 否 | 更新时间 | |
| 9 | source_table | varchar | 255 | 否 | 否 | 来源表 |
| 10 | source_id | int | 否 | 否 | 来源ID | |
| 11 | source_user_id | int | 否 | 否 | 来源用户 |
表 4-19-reservation_information(预约信息)
| 编号 | 字段名 | 类型 | 长度 | 是否非空 | 是否主键 | 注释 |
| 1 | reservation_information_id | int | 是 | 是 | 预约信息ID | |
| 2 | veterinary_users | int | 否 | 否 | 兽医用户 | |
| 3 | veterinarians_name | varchar | 64 | 否 | 否 | 兽医姓名 |
| 4 | service_type | varchar | 64 | 否 | 否 | 服务类型 |
| 5 | reservation_price | double | 否 | 否 | 预约价格 | |
| 6 | ordinary_user | int | 否 | 否 | 普通用户 | |
| 7 | user_name | varchar | 64 | 否 | 否 | 用户姓名 |
| 8 | pet_name | varchar | 64 | 否 | 否 | 宠物名称 |
| 9 | pet_type | varchar | 64 | 否 | 否 | 宠物种类 |
| 10 | pet_age | varchar | 64 | 否 | 否 | 宠物年龄 |
| 11 | pet_weight | varchar | 64 | 否 | 否 | 宠物体重 |
| 12 | pet_gender | varchar | 64 | 否 | 否 | 宠物性别 |
| 13 | pet_hair_color | varchar | 64 | 否 | 否 | 宠物毛色 |
| 14 | description_of_illness | text | 65535 | 否 | 否 | 病情描述 |
| 15 | pay_state | varchar | 16 | 是 | 否 | 支付状态 |
| 16 | pay_type | varchar | 16 | 否 | 否 | 支付类型: 微信、支付宝、网银 |
| 17 | visit_information_limit_times | int | 是 | 否 | 就诊限制次数 | |
| 18 | create_time | datetime | 是 | 否 | 创建时间 | |
| 19 | update_time | timestamp | 是 | 否 | 更新时间 | |
| 20 | source_table | varchar | 255 | 否 | 否 | 来源表 |
| 21 | source_id | int | 否 | 否 | 来源ID | |
| 22 | source_user_id | int | 否 | 否 | 来源用户 |
表 4-20-score(评分)
| 编号 | 字段名 | 类型 | 长度 | 是否非空 | 是否主键 | 注释 |
| 1 | score_id | int | 是 | 是 | 评分ID | |
| 2 | user_id | int | 是 | 否 | 评分人 | |
| 3 | nickname | varchar | 64 | 否 | 否 | 昵称 |
| 4 | score_num | double | 是 | 否 | 评分 | |
| 5 | create_time | timestamp | 是 | 否 | 创建时间 | |
| 6 | update_time | timestamp | 是 | 否 | 更新时间 | |
| 7 | source_table | varchar | 255 | 否 | 否 | 来源表 |
| 8 | source_field | varchar | 255 | 否 | 否 | 来源字段 |
| 9 | source_id | int | 是 | 否 | 来源ID |
表 4-21-slides(轮播图)
| 编号 | 字段名 | 类型 | 长度 | 是否非空 | 是否主键 | 注释 |
| 1 | slides_id | int | 是 | 是 | 轮播图ID | |
| 2 | title | varchar | 64 | 否 | 否 | 标题 |
| 3 | content | varchar | 255 | 否 | 否 | 内容 |
| 4 | url | varchar | 255 | 否 | 否 | 链接 |
| 5 | img | varchar | 255 | 否 | 否 | 轮播图 |
| 6 | hits | int | 是 | 否 | 点击量 | |
| 7 | create_time | timestamp | 是 | 否 | 创建时间 | |
| 8 | update_time | timestamp | 是 | 否 | 更新时间 |
表 4-22-upload(文件上传)
| 编号 | 字段名 | 类型 | 长度 | 是否非空 | 是否主键 | 注释 |
| 1 | upload_id | int | 是 | 是 | 上传ID | |
| 2 | name | varchar | 64 | 否 | 否 | 文件名 |
| 3 | path | varchar | 255 | 否 | 否 | 访问路径 |
| 4 | file | varchar | 255 | 否 | 否 | 文件路径 |
| 5 | display | varchar | 255 | 否 | 否 | 显示顺序 |
| 6 | father_id | int | 否 | 否 | 父级ID | |
| 7 | dir | varchar | 255 | 否 | 否 | 文件夹 |
| 8 | type | varchar | 32 | 否 | 否 | 文件类型 |
表 4-23-user(用户账户)
| 编号 | 字段名 | 类型 | 长度 | 是否非空 | 是否主键 | 注释 |
| 1 | user_id | int | 是 | 是 | 用户ID | |
| 2 | state | smallint | 是 | 否 | 账户状态:(1可用|2异常|3已冻结|4已注销) | |
| 3 | user_group | varchar | 32 | 否 | 否 | 所在用户组 |
| 4 | login_time | timestamp | 是 | 否 | 上次登录时间 | |
| 5 | phone | varchar | 11 | 否 | 否 | 手机号码 |
| 6 | phone_state | smallint | 是 | 否 | 手机认证:(0未认证|1审核中|2已认证) | |
| 7 | username | varchar | 16 | 是 | 否 | 用户名 |
| 8 | nickname | varchar | 16 | 否 | 否 | 昵称 |
| 9 | password | varchar | 64 | 是 | 否 | 密码 |
| 10 | | varchar | 64 | 否 | 否 | 邮箱 |
| 11 | email_state | smallint | 是 | 否 | 邮箱认证:(0未认证|1审核中|2已认证) | |
| 12 | avatar | varchar | 255 | 否 | 否 | 头像地址 |
| 13 | open_id | varchar | 255 | 否 | 否 | 针对获取用户信息字段 |
| 14 | create_time | timestamp | 是 | 否 | 创建时间 |
表 4-24-user_consultation(用户咨询)
| 编号 | 字段名 | 类型 | 长度 | 是否非空 | 是否主键 | 注释 |
| 1 | user_consultation_id | int | 是 | 是 | 用户咨询ID | |
| 2 | veterinary_users | int | 否 | 否 | 兽医用户 | |
| 3 | veterinarians_name | varchar | 64 | 否 | 否 | 兽医姓名 |
| 4 | ordinary_user | int | 否 | 否 | 普通用户 | |
| 5 | user_consultation | text | 65535 | 否 | 否 | 用户咨询 |
| 6 | the_doctor_replied | text | 65535 | 否 | 否 | 医生回复 |
| 7 | create_time | datetime | 是 | 否 | 创建时间 | |
| 8 | update_time | timestamp | 是 | 否 | 更新时间 | |
| 9 | source_table | varchar | 255 | 否 | 否 | 来源表 |
| 10 | source_id | int | 否 | 否 | 来源ID | |
| 11 | source_user_id | int | 否 | 否 | 来源用户 |
表 4-25-user_group(用户组)
| 编号 | 字段名 | 类型 | 长度 | 是否非空 | 是否主键 | 注释 |
| 1 | group_id | mediumint | 是 | 是 | 用户组ID | |
| 2 | display | smallint | 是 | 否 | 显示顺序 | |
| 3 | name | varchar | 16 | 是 | 否 | 名称 |
| 4 | description | varchar | 255 | 否 | 否 | 描述 |
| 5 | source_table | varchar | 255 | 否 | 否 | 来源表 |
| 6 | source_field | varchar | 255 | 否 | 否 | 来源字段 |
| 7 | source_id | int | 是 | 否 | 来源ID | |
| 8 | register | smallint | 否 | 否 | 注册位置 | |
| 9 | create_time | timestamp | 是 | 否 | 创建时间 | |
| 10 | update_time | timestamp | 是 | 否 | 更新时间 |
表 4-26-veterinary_information(兽医信息)
| 编号 | 字段名 | 类型 | 长度 | 是否非空 | 是否主键 | 注释 |
| 1 | veterinary_information_id | int | 是 | 是 | 兽医信息ID | |
| 2 | veterinary_users | int | 否 | 否 | 兽医用户 | |
| 3 | veterinarians_name | varchar | 64 | 否 | 否 | 兽医姓名 |
| 4 | working_time | date | 否 | 否 | 上班时间 | |
| 5 | service_type | varchar | 64 | 否 | 否 | 服务类型 |
| 6 | reservation_price | double | 否 | 否 | 预约价格 | |
| 7 | veterinary_photos | varchar | 255 | 否 | 否 | 兽医照片 |
| 8 | veterinary_profile | text | 65535 | 否 | 否 | 兽医简介 |
| 9 | praise_len | int | 是 | 否 | 点赞数 | |
| 10 | collect_len | int | 是 | 否 | 收藏数 | |
| 11 | comment_len | int | 是 | 否 | 评论数 | |
| 12 | reservation_information_limit_times | int | 是 | 否 | 预约限制次数 | |
| 13 | user_consultation_limit_times | int | 是 | 否 | 咨询限制次数 | |
| 14 | create_time | datetime | 是 | 否 | 创建时间 | |
| 15 | update_time | timestamp | 是 | 否 | 更新时间 |
表 4-27-veterinary_users(兽医用户)
| 编号 | 字段名 | 类型 | 长度 | 是否非空 | 是否主键 | 注释 |
| 1 | veterinary_users_id | int | 是 | 是 | 兽医用户ID | |
| 2 | veterinarians_name | varchar | 64 | 否 | 否 | 兽医姓名 |
| 3 | veterinary_phone | varchar | 64 | 否 | 否 | 兽医电话 |
| 4 | examine_state | varchar | 16 | 是 | 否 | 审核状态 |
| 5 | user_id | int | 是 | 否 | 用户ID | |
| 6 | create_time | datetime | 是 | 否 | 创建时间 | |
| 7 | update_time | timestamp | 是 | 否 | 更新时间 |
表 4-28-visit_information(就诊信息)
| 编号 | 字段名 | 类型 | 长度 | 是否非空 | 是否主键 | 注释 |
| 1 | visit_information_id | int | 是 | 是 | 就诊信息ID | |
| 2 | veterinary_users | int | 否 | 否 | 兽医用户 | |
| 3 | veterinarians_name | varchar | 64 | 否 | 否 | 兽医姓名 |
| 4 | ordinary_user | int | 否 | 否 | 普通用户 | |
| 5 | user_name | varchar | 64 | 否 | 否 | 用户姓名 |
| 6 | pet_name | varchar | 64 | 否 | 否 | 宠物名称 |
| 7 | pet_type | varchar | 64 | 否 | 否 | 宠物种类 |
| 8 | description_of_illness | text | 65535 | 否 | 否 | 病情描述 |
| 9 | date_of_filing | date | 否 | 否 | 建档日期 | |
| 10 | diagnostic_results | varchar | 64 | 否 | 否 | 诊断结果 |
| 11 | treatment_plan | varchar | 64 | 否 | 否 | 治疗方案 |
| 12 | prescription_drugs | varchar | 64 | 否 | 否 | 开处方药 |
| 13 | drug_costs | double | 否 | 否 | 药品费用 | |
| 14 | inspection_fee | double | 否 | 否 | 检查费用 | |
| 15 | medical_examination_fee | double | 否 | 否 | 体检费用 | |
| 16 | vaccine_costs | double | 否 | 否 | 疫苗费用 | |
| 17 | operation_fee | double | 否 | 否 | 手术费 | |
| 18 | health_report | varchar | 255 | 否 | 否 | 健康报告 |
| 19 | total_expenses | double | 否 | 否 | 费用总计 | |
| 20 | pay_state | varchar | 16 | 是 | 否 | 支付状态 |
| 21 | pay_type | varchar | 16 | 否 | 否 | 支付类型: 微信、支付宝、网银 |
| 22 | create_time | datetime | 是 | 否 | 创建时间 | |
| 23 | update_time | timestamp | 是 | 否 | 更新时间 | |
| 24 | source_table | varchar | 255 | 否 | 否 | 来源表 |
| 25 | source_id | int | 否 | 否 | 来源ID | |
| 26 | source_user_id | int | 否 | 否 | 来源用户 |
第5章系统关键模块设计与实现
采用Flask框架的不动产租赁业务管理系统的详细设计与实现主要是根据前面的采用Flask框架的不动产租赁业务管理系统的需求分析和采用Flask框架的不动产租赁业务管理系统的总体设计来设计页面并实现业务逻辑。主要从采用Flask框架的不动产租赁业务管理系统界面实现、业务逻辑实现这两部分进行介绍。
5.1.1 前台首页界面
用户登录系统后,首先看到的是首页。首页集中展示了系统的各项功能板块,包括交流社区、医院公告、宠物资讯、兽医信息等。通过首页,用户可以快速了解平台提供的服务内容和最新动态。首页还提供便捷的导航,帮助用户快速访问其他功能模块,提升用户体验。其主界面展示如下图所示。
图5-1 前台首页界面图
5.1.2 用户注册界面
用户可以通过系统进行注册,创建个人账户。在注册页面,用户需要填写基本信息,如姓名、联系方式、邮箱等,并设置用户名和密码。系统会通过验证用户的身份信息来保证安全性。用户注册成功后,可以使用用户名和密码登录系统,享受平台提供的各项服务。普通用户注册界面展示如下图所示。
图5-2注册界面图
注册代码如下:
# 用户类
class User(controllerClass):
def __init__(self, config={}):
"""
构造函数
@param {Object} config 配置参数
"""
config_init = {
# 选择的模板那路径模板
"tpl": "./user/",
# 选择的服务
"services": "user",
# 注册API
"get_api": ["state", "quit"],
"post_api": ["login", "register", "change_password", "forget_password"],
# 唯一判断
"unique": ["username"]
}
config_temp = config
config_temp.update(config_init)
super(User, self).__init__(config_temp)
def Register(self, ctx):
"""
注册API
@param {Object} config 配置参数
"""
print("===================注册=====================")
userService = service_select("user")
body = ctx.body
# 判断必须信息
if "username" not in body and body["username"] == '':
return {"error": {
"code": 70000,
"message": "用户名不能为空",
}}
if "user_group" not in body and body["user_group"] == '':
return {
"error": {
"code": 70000,
"message": "用户组不能为空",
}
}
if "password" not in body and body["password"] == '':
return {
"error": {
"code": 70000,
"message": "密码不能为空",
}
}
# 取出表单
post_param = body
post_param['nickname'] = body["nickname"] or ""
post_param['password'] = md5hash(body["password"])
# 校验是否存在用户
obj = userService.Get_obj({"username": post_param['username']}, {"like": False})
if obj:
return {
"error": {
"code": 70000,
"message": "用户名已存在",
}
}
ret = {
"error": {
"code": 70000,
"message": "注册失败",
}
}
# 添加
bl = userService.Add(post_param)
if bl:
ret = {
"result": {
"bl": True,
"message": "注册成功"
}
}
return ret
5.1.3 用户登录界面
用户可以通过用户名和密码登录系统。登录页面提供简洁明了的输入框,用户输入正确的用户名和密码后,点击“登录”按钮即可进入系统。系统会验证用户的身份信息,确保登录的安全性。登录成功后,用户可以访问个人中心,管理自己的宠物档案、健康记录、预约信息等,享受个性化的服务体验。用户登录界面如下图所示。
图5-3用户登录界面图
登录代码如下:
def Login(self, ctx):
"""
登录API
@param {Object} ctx http请求上下文
"""
print("===================登录=====================")
ret = {
"error": {
"code": 70000,
"message": "账户不存在",
}
}
body = ctx.body
# 获取用户
password = md5hash(body["password"]) or ""
obj = service_select("user").Get_obj(
{"username": body["username"]}, {"like": False}
)
if obj:
# 检查用户所属用户组
user_group = service_select("user_group").Get_obj({'name': obj['user_group']}, {"like": False})
if user_group and user_group['source_table'] != '':
user_obj = service_select(user_group['source_table']).Get_obj({"user_id": obj['user_id']},
{"like": False})
if user_obj['examine_state'] == '未通过':
ret = {
"error": {
"code": 70000,
"message": "账户未通过审核",
}
}
return ret
if user_obj['examine_state'] == '未审核':
ret = {
"error": {
"code": 70000,
"message": "账户未审核",
}
}
return ret
# 校验用户状态
if obj["state"] == 1:
# 校验密码
if obj["password"] == password:
# 生成Token
timeout = datetime.now(tz=timezone.utc)
timestamp = int(time.mktime(timeout.timetuple())) * 1000
token = md5hash(str(obj["user_id"]) + "_" + str(timestamp))
# 存储Token
# session[token] = obj["user_id"]
session.setdefault(token, obj["user_id"])
session.permanent = True
service_select("access_token").Add(
{"token": token, "user_id": obj["user_id"]}
)
# 回传用户
obj["token"] = token
ret = {
"result": {"obj": obj}
}
else:
ret = {
"error": {
"code": 70000,
"message": "密码错误",
}
}
else:
ret = {
"error": {
"code": 70000,
"message": "用户账户不可用,请联系管理员",
}
}
return ret
5.1.4 查看兽医信息界面
普通用户在平台可查看兽医信息。这里详细展示每位兽医的专业背景,还有过往用户的评价,帮助普通用户了解兽医口碑。通过全面了解这些信息,用户能结合自家宠物情况,为其挑选更匹配、更专业的兽医,让宠物得到优质的医疗服务。查看兽医信息界面如下图所示。
图5-4查看兽医信息界面图
5.1.5 进行预约信息界面
用户可便捷地查看各宠物医院及兽医的可预约时段,根据自身时间安排选择合适的预约时间。预约成功后,系统自动生成预约详情,方便用户随时查看。进行预约信息界面如下图4-7所示。
图5-5 进行预约信息界面图
5.2兽医用户功能模块
5.2.1 管理健康记录界面
兽医用户可以管理宠物的健康记录,包括病历、检查报告、治疗记录等。通过这一功能,兽医可以快速查看宠物的健康历史,为诊断和治疗提供参考。管理健康记录界面如下图所示。
图5-6管理健康记录界面图
兽医用户可以查看和处理用户的预约信息,确认预约时间并安排就诊。系统提供预约提醒功能,确保兽医能够及时响应用户的预约需求。管理预约信息界面如下图所示。
图5-7管理预约信息界面图
当用户在平台咨询宠物健康问题,兽医及时查看并回复。依据用户描述的宠物症状,凭借专业知识给出初步诊断和建议,告知用户是否需带宠物到院进一步检查。管理用户咨询界面如下图所示。
图5-8管理用户咨询界面图
5.3.1 系统用户管理界面
管理员负责管理系统的用户,包括管理员账户、普通用户和兽医用户。通过这一功能,管理员可以创建、编辑和删除用户账户,分配不同的角色和权限,确保每个用户在平台上的操作符合其身份和职责。系统用户管理界面如下图所示。
图5-9系统用户管理界面图
管理员可以管理宠物档案,包括宠物的基本信息、健康记录等。系统支持添加、编辑和删除宠物档案,确保档案信息的准确性和完整性。宠物档案管理界面如下图所示。
图5-10宠物档案管理界面图
5.3.3 轮播图管理界面
管理员可以对系统前台展示的轮播图进行增删改查,方便用户进行查看。轮播图管理界面如下图所示。
图5-11轮播图管理界面图
添加信息代码:
def Add(self, ctx):
"""
增
@param {Object} ctx http请求上下文
@return {Object} 返回json-rpc格式结果
"""
body = ctx.body
unique = self.config.get("unique")
obj = None
if unique:
qy = {}
for i in range(len(unique)):
key = unique[i]
qy[key] = body.get(key)
obj = self.service.Get_obj(qy)
if not obj:
# 添加数据前
error = self.Add_before(ctx)
if error["code"]:
return {"error": error}
error = self.Events("add_before", ctx, None)
if error["code"]:
return {"error": error}
# 添加数据
result = self.service.Add(body, self.config)
# 添加数据发生错误
if self.service.error:
return {"error": self.service.error}
# 添加数据成功后
res = self.Add_after(ctx, result)
if res:
result = res
res = self.Events("add_after", ctx, result)
if res:
result = res
return {"result": result}
else:
return {"error": {"code": 10000, "message": "已存在"}}
删除代码:
# 删
def Del(self, ctx):
"""
删
@param {Object} ctx http请求上下文
@return {Object} 返回json-rpc格式结果
"""
if len(ctx.query) == 0:
errorMsg = {"code": 30000, "message": "删除条件不能为空!"}
return errorMsg
result = self.service.Del(ctx.query, self.config)
if self.service.error:
return {"error": self.service.error}
return {"result": result}
修改信息代码:
# 改
def Set(self, ctx):
"""
改
@param {Object} ctx http请求上下文
@return {Object} 返回json-rpc格式结果
"""
# 修改数据前
error = self.Set_before(ctx)
if error["code"]:
return {"error": error}
error = self.Events("set_before", ctx, None)
if error["code"]:
return {"error": error}
query = ctx.query
if 'page' in query.keys():
del ctx.query['page']
if 'size' in query.keys():
del ctx.query['size']
if 'orderby' in query.keys():
del ctx.query['orderby']
# 修改数据
result = self.service.Set(ctx.query, ctx.body, self.config)
# 修改数据发生错误
if self.service.error:
return {"error": self.service.error}
# 修改数据成功后
res = self.Set_after(ctx, result)
if res:
result = res
res = self.Events("set_after", ctx, result)
if res:
result = res
return {"result": result}
查询代码:
# 查多条
def Get_list(self, ctx):
"""
查多条
@param {Object} ctx http请求上下文
@return {Object} 返回json-rpc格式结果
"""
query = dict(ctx.query)
config_plus = {}
if "field" in query:
field = query.pop("field")
config_plus["field"] = field
if "page" in query:
config_plus["page"] = query.pop("page")
if "size" in query:
config_plus["size"] = query.pop("size")
if "orderby" in query:
config_plus["orderby"] = query.pop("orderby")
if "like" in query:
config_plus["like"] = query.pop("like")
if "groupby" in query:
config_plus["groupby"] = query.pop("groupby")
count = self.service.Count(query)
lst = []
if self.service.error:
return {"error": self.service.error}
elif count:
lst = self.service.Get_list(query,
obj_update(self.config, config_plus))
if self.service.error:
return {"error": self.service.error}
self.interact_list(ctx, lst)
return {"result": {"list": lst, "count": count}}
# 查一条
def Get_obj(self, ctx):
"""
查一条
@param {Object} ctx http请求上下文
@return {Object} 返回json-rpc格式结果
"""
query = dict(ctx.query)
config_plus = {}
if "field" in query:
field = query.pop("field")
config_plus["field"] = field
obj = self.service.Get_obj(query, obj_update(self.config, config_plus))
if self.service.error:
return {"error": self.service.error}
if obj:
self.interact_obj(ctx, obj)
return {"result": {"obj": obj}}
第6章系统测试
6.1测试目的
对任何系统而言,测试都是必不可少的环节,测试可以发现系统存在的很多问题,所有的软件上线之前,都应该进行充足的测试之后才能保证上线后不会Bug频发,或者是功能不满足需求等问题的发生。下面分别从单元测试,功能测试和用例测试来对系统进行测试以保证系统的稳定性和可靠性。
6.2功能测试
下表是系统登录功能测试用例,检测了用户名和密码的不同的输入情况,观察系统的响应情况。得出该功能达到了设计目标。
表6-1 系统登录功能测试用例
| 功能描述 | 用于系统登录 | |
| 测试目的 | 检测登录时的合法性检查 | |
| 测试数据以及操作 | 预期结果 | 实际结果 |
| 输入的用户名和密码带有非法字符 | 提示用户名或者密码错误 | 与预期结果一致 |
| 输入的用户名或者密码为空 | 提示用户名或者密码错误 | 与预期结果一致 |
| 输入的用户名和密码不存在 | 提示用户名或者密码错误 | 与预期结果一致 |
| 输入正确的用户名和密码 | 登录成功 | 与预期结果一致 |
下表是注册功能测试用例,检测了各种数据的输入情况,观察系统的响应情况。得出该功能达到了设计目标。
表6-2 注册功能测试用例
| 功能描述 | 用于用户注册 | |
| 测试目的 | 检测用户注册时的合法性检查 | |
| 测试数据以及操作 | 预期结果 | 实际结果 |
| 输入的手机号不合法 | 提示请输入正确的手机号码 | 与预期结果一致 |
| 输入的字段为空 | 提示必填项不能为空 | 与预期结果一致 |
| 输入的密码少于6位 | 提示密码必须为6-12位 | 与预期结果一致 |
| 输入的密码大于12位 | 提示密码必须为6-12位 | 与预期结果一致 |
下表是预约信息功能的测试用例,检测了预约信息的增加,删除,修改,查询操作是否成功运行。观察系统的响应情况,得出该功能也达到了设计目标,系统运行正确。
前置条件;用户登录系统。
表6-3 预约信息的测试用例
| 功能描述 | 用于预约信息 | |
| 测试目的 | 检测预约信息时的各种操作的运行情况 | |
| 测试数据以及操作 | 预期结果 | 实际结果 |
| 点击添加预约信息,必填项合法输入,点击保存 | 提示添加成功 | 与预期结果一致 |
| 点击添加预约信息,必填项输入不合法,点击保存 | 提示必填项不能为空 | 与预期结果一致 |
| 点击修改预约信息,必填项修改为空,点击保存 | 提示必填项不能为空 | 与预期结果一致 |
| 点击修改预约信息,必填项输入不合法,点击保存 | 提示必填项不能为空 | 与预期结果一致 |
| 点击删除预约信息,选择预约信息删除 | 提示删除成功 | 与预期结果一致 |
| 点击搜索预约信息,输入存在的预约编号 | 查找出预约信息 | 与预期结果一致 |
| 点击搜索预约信息,输入不存在的预约编号 | 不显示预约信息 | 与预期结果一致 |
6.3性能测试
使用阿里云PTS(Performance Testing Service)性能测试服务对线上系统进行压力测试。线上服务器环境为:1核心CPU,1G内存,1Mbps公网带宽,Centos7.0操作系统。
压测过程中使用了2台并发机器,每台机器20个用户并发,对系统主页,登录,数据查询和数据维护等模块进行并发访问,测试结果是有40个用户并发时,数据管理相关页面的响应时间甚至达到了7s,通过查看服务器出网流量发现已经达到1381kb/s,可以看出服务器的带宽已经达到峰值,如果系统使用5Mbps的带宽,系统的响应时间和TPS将会大大增加。在整个测试的过程中,CPU的使用率占用仅8%,也提现出带宽瓶颈对系统的影响非常严重。
第7章总结与展望
本论文设计并实现了一个基于python的宠物医疗服务平台,该系统通过Python编程语言和MySQL数据库的应用,成功地为宠物主人、兽医和管理员提供了高效、便捷的宠物医疗服务。系统功能涵盖了宠物医疗信息管理、用户互动、预约处理以及后台管理等方面,旨在提高宠物医疗服务的透明度、便捷性和安全性。
通过Flask框架的轻量化特性和Python的强大支持,系统具有灵活的功能扩展性和高效的开发周期,能够在短时间内满足业务需求并方便后期维护。MySQL数据库的使用保证了数据的稳定存储与高效访问,确保系统在处理大量数据时能够保持良好的性能。
系统的设计充分考虑了不同用户角色的需求,提供了相应的功能模块,以实现信息管理和操作的个性化与智能化。在安全性方面,系统采用了先进的身份验证机制(如JWT)和数据加密存储技术,确保了用户信息的安全性和隐私保护。
尽管系统在功能上已经具备了良好的完整性和实用性,但仍有进一步改进的空间。例如,未来可以加入智能推荐系统、移动端优化、更多的支付接口集成等功能,以更好地满足用户需求并提升系统的市场竞争力。
综上所述,本系统为宠物医疗行业提供了一种高效、安全、易于维护的管理平台,具有较高的实际应用价值,并为今后的业务拓展和功能升级提供了坚实的基础。
参考文献
- 郦昕昕.基于B/S模式的人事管理系统设计与实现[J].集成电路应用,2024,41(05):246-247.
- 赵惠.基于B/S模式的实验室管理系统设计和实现[J].中国新通信,2023,25(21):72-74.
- 王朝辉.基于Flask框架的测试集成系统设计与实现[J].科技创新与应用,2024,14(33):115-118.
- 王晓雷,王钱庆,王鲜芳.基于Flask数据可视化的网页端显示方法研究[J].无线互联科技,2024,21(15):10-13+20.
- 赵媛.基于Vue的Web系统前端性能优化分析[J].电脑编程技巧与维护,2024,(09):44-46.
- 秦冬.浅析Vue框架在前端开发中的应用[J].信息与电脑(理论版),2024,36(13):61-63.
- 李艳杰.MySQL数据库下存储过程的综合运用研究[J].现代信息科技,2023,7(11):80-82+88.
- 马艳艳,吴晓光.计算机软件与数据库的设计策略分析[J].电子技术,2024,53(05):104-105.
- 李俊萌.计算机软件测试技术与开发应用策略分析[J].信息记录材料,2023,24(03):50-52.
- 吴公莹.基于Python语言的数据处理与特征工程方法研究[J].现代计算机,2024,30(23):73-76.
- 欧阳武旻,杨静.在线医疗服务平台使用满意度影响因素研究[J].包装工程,2024,45(S1):30-37.
- 马葳岚,许文康,张嘉怡,陈海红,钱东福.基于网络爬虫的互联网医疗平台服务情况比较研究[J].江苏卫生事业管理,2024,35(04):469-471+481.
- 顾舟逸.基于“互联网+”微信医疗服务平台的设计与实现[J].信息系统工程,2023,(04):31-33.
- 涂文菲,甘甜,章花,黄静.“互联网+”居家医疗服务平台应用效果分析[J].护理学杂志,2022,37(21):82-85.
- Chan hee Park.Online Platform for Medical Services[J].대한외과학회 학술대회 초록집,2021,
- Wang Mingzhi,Wang Xueyi.Design of Information Medical Treatment Service Platform[J].IOP Conference Series: Materials Science and Engineering,2020,750012064-012064.
- 王璇,甘国君,王冠铮,罗宇航.新零售时代下的“宠爱一生”宠物医疗服务平台打造分析[J].品牌研究,2020,(02):67-68.
致谢
本次设计历时3个月。在这个毕业设计中,离不开指导教师的指导,使事情基本顺利。指导老师无论是在毕业设计历经中,还是在论文做完中都给了了我特别大的助益。另1个方面,教师认真负责的工作姿态,谨慎的教学精神厚重的理论水准都使我获益匪浅。他勤恳谨慎的教学育人学习姿态也给我留下了特别特别深的感觉。我从老师那里学到了很多东西。在理论和实践中,我的技能得到了特别大的提高。在此,特向教师表示由衷的感激。
经过对该毕业设计的全部研究和开发,我的系统研发经历了从需求分析到实现详细功能,再到最终测试和维护的特殊进展。让我对系统研发有了更深层次的认识。如今我的动手本领单独处理疑惑的本领也获取到了特别大的演练学习增多,这是这次毕业设计最好的收获。
最后,在整个系统开发过程中,我周围的同学和朋友给了我很多意见,所以我很快就确认了系统的商业思想。在次,我由衷的向他们表示感激。
免费领取项目源码,请关注❥点赞收藏并私信博主,谢谢~
Flask宠物医疗服务平台
1619

被折叠的 条评论
为什么被折叠?



