基于 Python Django 框架的宠物医院管理系统设计与实现

  

摘要

本研究针对传统宠物医院管理模式存在的效率低下、信息不共享、服务流程繁琐等问题,设计并实现了一个基于 Python Django 框架的宠物医院管理系统。系统采用 B/S 架构,整合了客户管理、宠物管理、医生管理、诊疗管理、药品管理、库存管理、财务管理等功能模块,实现了宠物医院业务的全流程数字化管理。系统前端使用 Bootstrap 框架构建响应式界面,后端采用 Django REST framework 提供 API 服务,数据库使用 MySQL 存储业务数据。通过实际应用验证,系统具有良好的稳定性、可扩展性和用户体验,能够有效提高宠物医院的管理效率和服务质量。

1. 引言

1.1 研究背景与意义

随着人们生活水平的提高和对宠物情感需求的增加,宠物饲养数量不断攀升,宠物医院行业也迎来了快速发展。据统计,我国宠物市场规模已超过 3000 亿元,宠物医院数量超过 2 万家。然而,传统的宠物医院管理模式主要依赖手工记录和纸质档案,存在效率低下、信息不共享、服务流程繁琐等问题,难以满足现代宠物医院的管理需求。

互联网技术的发展为宠物医院管理带来了新的机遇。通过建立数字化管理系统,宠物医院可以实现客户信息、宠物信息、诊疗记录、药品库存等数据的集中管理和共享,提高工作效率和服务质量。同时,数字化管理系统还可以为宠物主人提供便捷的预约挂号、在线咨询、诊疗报告查询等服务,提升用户体验。

本研究旨在设计并实现一个基于 Python Django 框架的宠物医院管理系统,通过整合客户管理、宠物管理、医生管理、诊疗管理、药品管理、库存管理、财务管理等功能模块,实现宠物医院业务的全流程数字化管理。系统将为宠物医院提供高效的管理工具,为宠物主人提供便捷的服务渠道,具有重要的现实意义。

1.2 国内外研究现状

国外在宠物医院管理系统的研究和应用方面起步较早,已经形成了较为成熟的产品和技术体系。例如,美国的 IDEXX、VetMatrix,欧洲的 Vetronic Services 等公司开发的宠物医院管理系统,功能完善、操作简便,在国际市场上占据了较大份额。这些系统采用了先进的信息技术,如云计算、大数据分析、人工智能等,提高了宠物医院的管理效率和服务质量。

国内宠物医院管理系统的发展相对较晚,但近年来也取得了一定的进展。国内一些软件企业开发了针对宠物医院的管理系统,如宠知道、瑞派宠物医院管理系统等。这些系统在功能上基本满足了宠物医院的日常管理需求,但在系统稳定性、用户体验、数据分析等方面还存在一定的不足。

目前,国内外宠物医院管理系统仍存在一些问题,如系统功能不够完善、数据安全隐患、系统集成度低等。此外,随着宠物医院行业的不断发展,用户对管理系统的功能和服务提出了更高的要求,需要进一步加强技术创新和服务创新。

1.3 研究内容与方法

本研究的主要内容包括:

  1. 系统需求分析:通过问卷调查、访谈等方式,了解宠物医院管理人员、医生、护士和宠物主人的需求,明确系统的功能和性能要求。

  2. 系统设计:包括系统架构设计、数据库设计、功能模块设计等,确定系统的技术选型和实现方案。

  3. 系统实现:基于 Python Django 框架实现系统的各个功能模块,包括用户认证、客户管理、宠物管理、医生管理、诊疗管理、药品管理、库存管理、财务管理等。

  4. 系统测试:对系统进行功能测试、性能测试、安全测试等,确保系统的稳定性和可靠性。

  5. 系统部署与应用:将系统部署到生产环境中,进行实际应用验证,评估系统的使用效果和用户满意度。

本研究采用的研究方法包括:

  1. 文献研究法:查阅国内外相关文献,了解宠物医院管理系统的研究现状和发展趋势,为系统设计提供理论支持。

  2. 问卷调查法:通过问卷调查的方式,了解宠物医院管理人员、医生、护士和宠物主人的需求和意见,为系统功能设计提供依据。

  3. 案例分析法:分析国内外知名宠物医院管理系统的成功案例,借鉴其设计思路和实现方法,为本系统的设计和实现提供参考。

  4. 实验研究法:通过实验对比不同的技术方案和算法,选择最优的方案和算法,提高系统的性能和用户体验。

2. 系统需求分析

2.1 功能需求

通过对宠物医院管理人员、医生、护士和宠物主人的需求调研,确定系统的主要功能需求如下:

  1. 用户管理功能

    • 用户注册、登录、信息修改
    • 用户角色管理(管理员、医生、护士、前台、财务、宠物主人)
    • 用户权限控制
  2. 客户管理功能

    • 客户信息录入、修改、查询
    • 客户档案管理
    • 客户消费记录查询
    • 客户回访管理
  3. 宠物管理功能

    • 宠物信息录入、修改、查询
    • 宠物健康档案管理
    • 宠物疫苗接种记录管理
    • 宠物诊疗历史记录查询
  4. 医生管理功能

    • 医生信息录入、修改、查询
    • 医生排班管理
    • 医生出诊记录管理
    • 医生绩效统计
  5. 诊疗管理功能

    • 预约挂号管理
    • 就诊登记
    • 病历管理
    • 检查检验管理
    • 诊断结果管理
    • 治疗方案制定
    • 手术管理
    • 麻醉管理
  6. 药品管理功能

    • 药品信息录入、修改、查询
    • 药品供应商管理
    • 药品采购管理
    • 药品库存管理
    • 药品效期管理
    • 药品发放管理
  7. 库存管理功能

    • 医疗器械管理
    • 耗材管理
    • 库存盘点
    • 库存预警
  8. 财务管理功能

    • 收费管理
    • 退费管理
    • 收入统计
    • 支出管理
    • 财务报表生成
  9. 系统设置功能

    • 基础数据设置(科室、病种、药品分类等)
    • 系统参数设置
    • 数据备份与恢复
    • 操作日志管理
2.2 非功能需求
  1. 性能需求

    • 系统响应时间应满足用户操作要求,一般查询操作响应时间不超过 3 秒,复杂操作响应时间不超过 10 秒
    • 系统应支持至少 100 个并发用户同时在线操作
    • 系统应能够处理大量数据,保证数据的完整性和一致性
  2. 安全性需求

    • 系统应保证用户数据的安全性和隐私性,严格遵守相关法律法规
    • 用户密码应进行加密存储,防止密码泄露
    • 系统应具备完善的访问控制机制,防止非法访问和操作
    • 系统应具备数据备份和恢复机制,防止数据丢失
  3. 可用性需求

    • 系统应具备良好的用户界面和操作体验,使用户能够轻松上手
    • 系统应提供完善的帮助文档和在线客服,解答用户疑问
    • 系统应具备高可用性,保证每天 24 小时不间断运行
  4. 可扩展性需求

    • 系统应具备良好的可扩展性,能够方便地添加新的功能模块
    • 系统应支持数据量和用户数的不断增长,能够通过集群化部署实现性能提升
  5. 兼容性需求

    • 系统应支持主流浏览器(Chrome、Firefox、Safari、Edge 等)
    • 系统应支持多种操作系统(Windows、MacOS、Linux 等)
    • 系统应支持移动端访问,提供良好的移动用户体验

3. 系统总体设计

3.1 系统架构设计

本系统采用 B/S(浏览器 / 服务器)架构,将整个系统分为客户端、应用服务器和数据库服务器三个层次。系统的总体架构如图 1 所示。

图 1:系统总体架构图

  • 客户端:负责与用户交互,接收用户请求并展示系统响应结果。客户端可以是 Web 浏览器或移动应用。

  • Web 服务器:负责处理 HTTP 请求,静态资源的存储和分发,以及负载均衡。本系统使用 Nginx 作为 Web 服务器。

  • 应用服务器:是系统的核心,负责处理业务逻辑和数据处理。应用服务器基于 Python Django 框架构建,提供 RESTful API 接口,实现与客户端的通信。应用服务器还包括任务队列和缓存服务,用于处理异步任务和提高系统性能。

  • 数据库服务器:负责存储系统的所有数据,包括用户信息、客户信息、宠物信息、医生信息、诊疗记录、药品库存、财务数据等。本系统使用 MySQL 作为主要数据库,Redis 作为缓存数据库。

3.2 系统部署架构设计

系统部署架构采用分布式集群部署方式,以确保系统的高可用性和扩展性。系统部署架构如图 2 所示。

图 2:系统部署架构图

  • 负载均衡器:采用 Nginx 或 HAProxy 实现,负责将用户请求分发到多个 Web 服务器,实现负载均衡和高可用性。

  • Nginx 服务器集群:部署多个 Nginx 服务器,处理 HTTP 请求和静态资源的分发。

  • 应用服务器集群:部署多个 Django 应用服务器,处理业务逻辑和数据处理。应用服务器之间通过消息队列进行异步通信。

  • 消息队列:采用 RabbitMQ 或 Kafka 实现,用于处理异步任务,如邮件发送、短信通知、报表生成等。

  • 任务处理服务器集群:部署多个任务处理服务器,处理消息队列中的任务。

  • 数据库集群:采用 MySQL 主从复制或集群技术,实现数据的高可用性和读写分离。

  • 缓存集群:部署多个 Redis 服务器,实现数据缓存,提高系统性能。

  • 监控系统:采用 Prometheus 和 Grafana 实现,对系统的各个组件进行实时监控和性能分析,确保系统的稳定运行。

3.3 系统用例图设计

系统用例图描述了系统与用户之间的交互关系,展示了系统的功能边界和用户角色。系统用例图如图 3 所示。

图 3:系统用例图

3.4 数据库设计

根据系统需求,设计了以下主要数据表:

  1. 用户表 (User):存储系统用户的基本信息,包括用户 ID、用户名、密码、角色、联系方式等。

  2. 科室表 (Department):存储医院科室信息,包括科室 ID、科室名称、科室描述等。

  3. 员工表 (Staff):存储医院员工信息,包括员工 ID、用户 ID、科室 ID、职位、职称等。

  4. 客户表 (Customer):存储客户信息,包括客户 ID、姓名、性别、年龄、联系方式、地址等。

  5. 宠物表 (Pet):存储宠物信息,包括宠物 ID、客户 ID、宠物名称、品种、性别、年龄、体重、毛色等。

  6. 宠物疫苗记录表 (PetVaccination):存储宠物疫苗接种记录,包括记录 ID、宠物 ID、疫苗名称、接种日期、下次接种日期等。

  7. 医生排班表 (DoctorSchedule):存储医生排班信息,包括排班 ID、医生 ID、日期、时间段、状态等。

  8. 预约挂号表 (Appointment):存储预约挂号信息,包括预约 ID、客户 ID、宠物 ID、医生 ID、预约日期、预约时间段、状态等。

  9. 病历表 (MedicalRecord):存储宠物病历信息,包括病历 ID、宠物 ID、医生 ID、就诊日期、主诉、现病史、体格检查、诊断结果、治疗方案等。

  10. 处方表 (Prescription):存储药品处方信息,包括处方 ID、病历 ID、药品 ID、用量、用法、天数等。

  11. 检查检验表 (Examination):存储检查检验信息,包括检查 ID、病历 ID、检查项目、检查日期、检查结果等。

  12. 药品表 (Drug):存储药品信息,包括药品 ID、药品名称、药品分类、规格、单位、价格、库存数量、供应商等。

  13. 药品库存表 (DrugInventory):存储药品库存信息,包括库存 ID、药品 ID、入库日期、入库数量、出库日期、出库数量、库存数量等。

  14. 收费记录表 (ChargeRecord):存储收费信息,包括收费 ID、病历 ID、项目名称、金额、收费日期、收费人员等。

  15. 退费记录表 (RefundRecord):存储退费信息,包括退费 ID、收费 ID、退费金额、退费原因、退费日期、退费人员等。

数据库表结构详细设计如下:

sql

-- 用户表
CREATE TABLE `user` (`id` INT NOT NULL AUTO_INCREMENT COMMENT '用户ID',`username` VARCHAR(50) NOT NULL COMMENT '用户名',`password` VARCHAR(100) NOT NULL COMMENT '密码',`role` TINYINT NOT NULL COMMENT '角色(1:管理员,2:医生,3:护士,4:前台,5:财务,6:宠物主人)',`name` VARCHAR(50) DEFAULT NULL COMMENT '姓名',`phone` VARCHAR(20) DEFAULT NULL COMMENT '电话',`email` VARCHAR(50) DEFAULT NULL COMMENT '邮箱',`avatar` VARCHAR(255) DEFAULT NULL COMMENT '头像',`status` TINYINT NOT NULL DEFAULT 1 COMMENT '状态(0:禁用,1:启用)',`create_time` DATETIME NOT NULL COMMENT '创建时间',`update_time` DATETIME NOT NULL COMMENT '更新时间',PRIMARY KEY (`id`),UNIQUE KEY `idx_username` (`username`),UNIQUE KEY `idx_phone` (`phone`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='用户表';-- 科室表
CREATE TABLE `department` (`id` INT NOT NULL AUTO_INCREMENT COMMENT '科室ID',`name` VARCHAR(50) NOT NULL COMMENT '科室名称',`description` VARCHAR(255) DEFAULT NULL COMMENT '科室描述',`status` TINYINT NOT NULL DEFAULT 1 COMMENT '状态(0:禁用,1:启用)',`create_time` DATETIME NOT NULL COMMENT '创建时间',`update_time` DATETIME NOT NULL COMMENT '更新时间',PRIMARY KEY (`id`),UNIQUE KEY `idx_name` (`name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='科室表';-- 员工表
CREATE TABLE `staff` (`id` INT NOT NULL AUTO_INCREMENT COMMENT '员工ID',`user_id` INT NOT NULL COMMENT '用户ID',`department_id` INT NOT NULL COMMENT '科室ID',`position` VARCHAR(50) NOT NULL COMMENT '职位',`title` VARCHAR(50) DEFAULT NULL COMMENT '职称',`id_card` VARCHAR(20) DEFAULT NULL COMMENT '身份证号',`hire_date` DATE DEFAULT NULL COMMENT '入职日期',`status` TINYINT NOT NULL DEFAULT 1 COMMENT '状态(0:离职,1:在职)',`create_time` DATETIME NOT NULL COMMENT '创建时间',`update_time` DATETIME NOT NULL COMMENT '更新时间',PRIMARY KEY (`id`),UNIQUE KEY `idx_user_id` (`user_id`),FOREIGN KEY (`user_id`) REFERENCES `user` (`id`),FOREIGN KEY (`department_id`) REFERENCES `department` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='员工表';-- 客户表
CREATE TABLE `customer` (`id` INT NOT NULL AUTO_INCREMENT COMMENT '客户ID',`user_id` INT DEFAULT NULL COMMENT '用户ID',`name` VARCHAR(50) NOT NULL COMMENT '姓名',`gender` TINYINT DEFAULT NULL COMMENT '性别(1:男,2:女)',`age` INT DEFAULT NULL COMMENT '年龄',`phone` VARCHAR(20) NOT NULL COMMENT '电话',`address` VARCHAR(255) DEFAULT NULL COMMENT '地址',`remark` VARCHAR(255) DEFAULT NULL COMMENT '备注',`status` TINYINT NOT NULL DEFAULT 1 COMMENT '状态(0:禁用,1:启用)',`create_time` DATETIME NOT NULL COMMENT '创建时间',`update_time` DATETIME NOT NULL COMMENT '更新时间',PRIMARY KEY (`id`),FOREIGN KEY (`user_id`) REFERENCES `user` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='客户表';-- 宠物表
CREATE TABLE `pet` (`id` INT NOT NULL AUTO_INCREMENT COMMENT '宠物ID',`customer_id` INT NOT NULL COMMENT '客户ID',`name` VARCHAR(50) NOT NULL COMMENT '宠物名称',`species` VARCHAR(50) NOT NULL COMMENT '品种',`gender` TINYINT NOT NULL COMMENT '性别(1:公,2:母)',`age` INT NOT NULL COMMENT '年龄',`weight` DECIMAL(5,2) DEFAULT NULL COMMENT '体重(kg)',`color` VARCHAR(50) DEFAULT NULL COMMENT '毛色',`chip_number` VARCHAR(50) DEFAULT NULL COMMENT '芯片编号',`allergy_history` VARCHAR(255) DEFAULT NULL COMMENT '过敏史',`medical_history` VARCHAR(255) DEFAULT NULL COMMENT '病史',`status` TINYINT NOT NULL DEFAULT 1 COMMENT '状态(0:已去世,1:健康,2:患病)',`create_time` DATETIME NOT NULL COMMENT '创建时间',`update_time` DATETIME NOT NULL COMMENT '更新时间',PRIMARY KEY (`id`),FOREIGN KEY (`customer_id`) REFERENCES `customer` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='宠物表';-- 宠物疫苗记录表
CREATE TABLE `pet_vaccination` (`id` INT NOT NULL AUTO_INCREMENT COMMENT '记录ID',`pet_id` INT NOT NULL COMMENT '宠物ID',`vaccine_name` VARCHAR(50) NOT NULL COMMENT '疫苗名称',`vaccination_date` DATE NOT NULL COMMENT '接种日期',`next_vaccination_date` DATE DEFAULT NULL COMMENT '下次接种日期',`vaccination_site` VARCHAR(50) DEFAULT NULL COMMENT '接种部位',`vaccination_doctor` INT DEFAULT NULL COMMENT '接种医生',`vaccine_batch` VARCHAR(50) DEFAULT NULL COMMENT '疫苗批次',`remark` VARCHAR(255) DEFAULT NULL COMMENT '备注',`create_time` DATETIME NOT NULL COMMENT '创建时间',`update_time` DATETIME NOT NULL COMMENT '更新时间',PRIMARY KEY (`id`),FOREIGN KEY (`pet_id`) REFERENCES `pet` (`id`),FOREIGN KEY (`vaccination_doctor`) REFERENCES `staff` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='宠物疫苗记录表';-- 医生排班表
CREATE TABLE `doctor_schedule` (`id` INT NOT NULL AUTO_INCREMENT COMMENT '排班ID',`doctor_id` INT NOT NULL COMMENT '医生ID',`schedule_date` DATE NOT NULL COMMENT '日期',`time_slot` TINYINT NOT NULL COMMENT '时间段(1:上午,2:下午,3:晚上)',`max_patients` INT NOT NULL DEFAULT 10 COMMENT '最大接诊数量',`current_patients` INT NOT NULL DEFAULT 0 COMMENT '当前预约数量',`status` TINYINT NOT NULL DEFAULT 1 COMMENT '状态(0:取消,1:正常)',`create_time` DATETIME NOT NULL COMMENT '创建时间',`update_time` DATETIME NOT NULL COMMENT '更新时间',PRIMARY KEY (`id`),UNIQUE KEY `idx_doctor_date_time` (`doctor_id`,`schedule_date`,`time_slot`),FOREIGN KEY (`doctor_id`) REFERENCES `staff` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='医生排班表';-- 预约挂号表
CREATE TABLE `appointment` (`id` INT NOT NULL AUTO_INCREMENT COMMENT '预约ID',`customer_id` INT NOT NULL COMMENT '客户ID',`pet_id` INT NOT NULL COMMENT '宠物ID',`doctor_id` INT NOT NULL COMMENT '医生ID',`schedule_id` INT NOT NULL COMMENT '排班ID',`appointment_date` DATE NOT NULL COMMENT '预约日期',`time_slot` TINYINT NOT NULL COMMENT '时间段(1:上午,2:下午,3:晚上)',`symptoms` VARCHAR(255) DEFAULT NULL COMMENT '症状描述',`status` TINYINT NOT NULL DEFAULT 1 COMMENT '状态(1:待确认,2:已确认,3:已完成,4:已取消)',`create_time` DATETIME NOT NULL COMMENT '创建时间',`update_time` DATETIME NOT NULL COMMENT '更新时间',PRIMARY KEY (`id`),FOREIGN KEY (`customer_id`) REFERENCES `customer` (`id`),FOREIGN KEY (`pet_id`) REFERENCES `pet` (`id`),FOREIGN KEY (`doctor_id`) REFERENCES `staff` (`id`),FOREIGN KEY (`schedule_id`) REFERENCES `doctor_schedule` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='预约挂号表';-- 病历表
CREATE TABLE `medical_record` (`id` INT NOT NULL AUTO_INCREMENT COMMENT '病历ID',`pet_id` INT NOT NULL COMMENT '宠物ID',`doctor_id` INT NOT NULL COMMENT '医生ID',`appointment_id` INT DEFAULT NULL COMMENT '预约ID',`visit_date` DATETIME NOT NULL COMMENT '就诊日期',`chief_complaint` TEXT NOT NULL COMMENT '主诉',`present_illness` TEXT DEFAULT NULL COMMENT '现病史',`physical_examination` TEXT DEFAULT NULL COMMENT '体格检查',`diagnosis` TEXT DEFAULT NULL COMMENT '诊断结果',`treatment_plan` TEXT DEFAULT NULL COMMENT '治疗方案',`follow_up` TEXT DEFAULT NULL COMMENT '随访建议',`status` TINYINT NOT NULL DEFAULT 1 COMMENT '状态(1:未完成,2:已完成)',`create_time` DATETIME NOT NULL COMMENT '创建时间',`update_time` DATETIME NOT NULL COMMENT '更新时间',PRIMARY KEY (`id`),FOREIGN KEY (`pet_id`) REFERENCES `pet` (`id`),FOREIGN KEY (`doctor_id`) REFERENCES `staff` (`id`),FOREIGN KEY (`appointment_id`) REFERENCES `appointment` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='病历表';-- 处方表
CREATE TABLE `prescription` (`id` INT NOT NULL AUTO_INCREMENT COMMENT '处方ID',`medical_record_id` INT NOT NULL COMMENT '病历ID',`drug_id` INT NOT NULL COMMENT '药品ID',`dosage` VARCHAR(50) NOT NULL COMMENT '用量',`usage` VARCHAR(50) NOT NULL COMMENT '用法',`duration` INT NOT NULL COMMENT '天数',`total_quantity` INT NOT NULL COMMENT '总数量',`status` TINYINT NOT NULL DEFAULT 1 COMMENT '状态(1:未发药,2:已发药)',`create_time` DATETIME NOT NULL COMMENT '创建时间',`update_time` DATETIME NOT NULL COMMENT '更新时间',PRIMARY KEY (`id`),FOREIGN KEY (`medical_record_id`) REFERENCES `medical_record` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='处方表';-- 检查检验表
CREATE TABLE `examination` (`id` INT NOT NULL AUTO_INCREMENT COMMENT '检查ID',`medical_record_id` INT NOT NULL COMMENT '病历ID',`examination_type` TINYINT NOT NULL COMMENT '检查类型(1:实验室检查,2:影像学检查,3:其他)',`examination_item` VARCHAR(50) NOT NULL COMMENT '检查项目',`examination_date` DATETIME NOT NULL COMMENT '检查日期',`examination_result` TEXT DEFAULT NULL COMMENT '检查结果',`doctor_id` INT DEFAULT NULL COMMENT '检查医生',`status` TINYINT NOT NULL DEFAULT 1 COMMENT '状态(1:未完成,2:已完成)',`create_time` DATETIME NOT NULL COMMENT '创建时间',`update_time` DATETIME NOT NULL COMMENT '更新时间',PRIMARY KEY (`id`),FOREIGN KEY (`medical_record_id`) REFERENCES `medical_record` (`id`),FOREIGN KEY (`doctor_id`) REFERENCES `staff` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='检查检验表';-- 药品表
CREATE TABLE `drug` (`id` INT NOT NULL AUTO_INCREMENT COMMENT '药品ID',`name` VARCHAR(100) NOT NULL COMMENT '药品名称',`category` TINYINT NOT NULL COMMENT '药品分类(1:抗生素,2:抗病毒药,3:驱虫药,4:消炎药,5:止痛药,6:营养药,7:其他)',`specification` VARCHAR(50) NOT NULL COMMENT '规格',`unit` VARCHAR(10) NOT NULL COMMENT '单位',`price` DECIMAL(10,2) NOT NULL COMMENT '价格',`manufacturer` VARCHAR(100) DEFAULT NULL COMMENT '生产厂家',`shelf_life` INT DEFAULT NULL COMMENT '保质期(月)',`storage_condition` VARCHAR(50) DEFAULT NULL COMMENT '储存条件',`min_stock` INT NOT NULL DEFAULT 0 COMMENT '最低库存',`max_stock` INT NOT NULL DEFAULT 100 COMMENT '最高库存',`current_stock` INT NOT NULL DEFAULT 0 COMMENT '当前库存',`status` TINYINT NOT NULL DEFAULT 1 COMMENT '状态(0:停用,1:启用)',`create_time` DATETIME NOT NULL COMMENT '创建时间',`update_time` DATETIME NOT NULL COMMENT '更新时间',PRIMARY KEY (`id`),UNIQUE KEY `idx_name_spec` (`name`,`specification`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='药品表';-- 药品库存表
CREATE TABLE `drug_inventory` (`id` INT NOT NULL AUTO_INCREMENT COMMENT '库存ID',`drug_id` INT NOT NULL COMMENT '药品ID',`inbound_date` DATETIME DEFAULT NULL COMMENT '入库日期',`inbound_quantity` INT DEFAULT NULL COMMENT '入库数量',`inbound_price` DECIMAL(10,2) DEFAULT NULL COMMENT '入库价格',`inbound_supplier` VARCHAR(100) DEFAULT NULL COMMENT '入库供应商',`outbound_date` DATETIME DEFAULT NULL COMMENT '出库日期',`outbound_quantity` INT DEFAULT NULL COMMENT '出库数量',`outbound_reason` VARCHAR(100) DEFAULT NULL COMMENT '出库原因',`batch_number` VARCHAR(50) DEFAULT NULL COMMENT '批次号',`expiry_date` DATE DEFAULT NULL COMMENT '过期日期',`current_quantity` INT NOT NULL DEFAULT 0 COMMENT '当前数量',`create_time` DATETIME NOT NULL COMMENT '创建时间',`update_time` DATETIME NOT NULL COMMENT '更新时间',PRIMARY KEY (`id`),FOREIGN KEY (`drug_id`) REFERENCES `drug` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='药品库存表';-- 收费记录表
CREATE TABLE `charge_record` (`id` INT NOT NULL AUTO_INCREMENT COMMENT '收费ID',`medical_record_id` INT NOT NULL COMMENT '病历ID',`item_name` VARCHAR(100) NOT NULL COMMENT '项目名称',`quantity` INT NOT NULL DEFAULT 1 COMMENT '数量',`price` DECIMAL(10,2) NOT NULL COMMENT '单价',`amount` DECIMAL(10,2) NOT NULL COMMENT '金额',`charge_type` TINYINT NOT NULL COMMENT '收费类型(1:诊疗费,2:药品费,3:检查费,4:治疗费,5:手术费,6:其他)',`charge_date` DATETIME NOT NULL COMMENT '收费日期',`charge_staff_id` INT NOT NULL COMMENT '收费人员ID',`payment_method` TINYINT NOT NULL COMMENT '支付方式(1:现金,2:微信,3:支付宝,4:银行卡,5:其他)',`status` TINYINT NOT NULL DEFAULT 1 COMMENT '状态(1:已收费,2:已退费)',`create_time` DATETIME NOT NULL COMMENT '创建时间',`update_time` DATETIME NOT NULL COMMENT '更新时间',PRIMARY KEY (`id`),FOREIGN KEY (`medical_record_id`) REFERENCES `medical_record` (`id`),FOREIGN KEY (`charge_staff_id`) REFERENCES `staff` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='收费记录表';-- 退费记录表
CREATE TABLE `refund_record` (`id` INT NOT NULL AUTO_INCREMENT COMMENT '退费ID',`charge_id` INT NOT NULL COMMENT '收费ID',`refund_amount` DECIMAL(10,2) NOT NULL COMMENT '退费金额',`refund_reason` TEXT DEFAULT NULL COMMENT '退费原因',`refund_date` DATETIME NOT NULL COMMENT '退费日期',`refund_staff_id` INT NOT NULL COMMENT '退费人员ID',`status` TINYINT NOT NULL DEFAULT 1 COMMENT '状态(1:已退费)',`create_time` DATETIME NOT NULL COMMENT '创建时间',`update_time` DATETIME NOT NULL COMMENT '更新时间',PRIMARY KEY (`id`),FOREIGN KEY (`charge_id`) REFERENCES `charge_record` (`id`),FOREIGN KEY (`refund_staff_id`) REFERENCES `staff` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='退费记录表';

4. 系统详细设计与实现

4.1 后端服务实现

后端服务基于 Python Django 框架实现,采用 MVC 架构模式,将系统分为模型层、视图层和控制器层。以下是核心模块的实现细节:

  1. 用户认证与权限管理模块:基于 Django 的认证系统实现用户注册、登录、权限控制等功能,采用 JWT 实现无状态认证。

  2. 客户与宠物管理模块:实现客户信息和宠物信息的录入、修改、查询等功能,支持宠物健康档案的管理。

  3. 医生与排班管理模块:实现医生信息的管理和排班计划的制定,支持预约挂号的处理。

  4. 诊疗管理模块:实现病历的创建、修改、查询等功能,支持处方开具、检查检验安排等诊疗流程。

  5. 药品与库存管理模块:实现药品信息的管理、库存的出入库操作、库存预警等功能。

  6. 财务管理模块:实现收费、退费、财务统计等功能,支持各类财务报表的生成。

以下是诊疗管理模块的部分实现代码示例:

python

运行

# 诊疗管理模块from django.shortcuts import render, get_object_or_404
from django.http import JsonResponse, HttpResponse
from django.views.decorators.csrf import csrf_exempt
from django.contrib.auth.decorators import login_required
from django.core.paginator import Paginator
from django.db.models import Q
import json
import os
from datetime import datetimefrom .models import MedicalRecord, Prescription, Examination
from .serializers import MedicalRecordSerializer, PrescriptionSerializer, ExaminationSerializer
from utils.response import SuccessResponse, ErrorResponse
from utils.permissions import is_doctor, is_nurse
from utils.pagination import get_paginated_response# 创建病历
@login_required
@is_doctor
def create_medical_record(request):if request.method == 'POST':try:data = json.loads(request.body)# 获取宠物信息pet_id = data.get('pet_id')if not pet_id:return ErrorResponse("宠物ID不能为空")# 获取医生信息(当前登录用户)doctor_id = request.user.staff.id# 创建病历medical_record = MedicalRecord(pet_id=pet_id,doctor_id=doctor_id,appointment_id=data.get('appointment_id'),visit_date=datetime.now(),chief_complaint=data.get('chief_complaint'),present_illness=data.get('present_illness'),physical_examination=data.get('physical_examination'),diagnosis=data.get('diagnosis'),treatment_plan=data.get('treatment_plan'),follow_up=data.get('follow_up'),status=1,  # 未完成create_time=datetime.now(),update_time=datetime.now())medical_record.save()return SuccessResponse({"medical_record_id": medical_record.id}, "病历创建成功")except Exception as e:return ErrorResponse(f"病历创建失败: {str(e)}")else:return ErrorResponse("请求方法错误")# 获取病历列表
@login_required
def get_medical_records(request):try:# 获取查询参数pet_id = request.GET.get('pet_id')doctor_id = request.GET.get('doctor_id')start_date = request.GET.get('start_date')end_date = request.GET.get('end_date')status = request.GET.get('status')page = request.GET.get('page', 1)page_size = request.GET.get('page_size', 10)# 构建查询条件query = Q()if pet_id:query &= Q(pet_id=pet_id)if doctor_id:query &= Q(doctor_id=doctor_id)if start_date and end_date:query &= Q(visit_date__range=[start_date, end_date])elif start_date:query &= Q(visit_date__gte=start_date)elif end_date:query &= Q(visit_date__lte=end_date)if status:query &= Q(status=status)# 获取病历列表medical_records = MedicalRecord.objects.filter(query).order_by('-visit_date')# 分页处理paginator = Paginator(medical_records, page_size)page_obj = paginator.get_page(page)# 序列化数据serializer = MedicalRecordSerializer(page_obj, many=True)return get_paginated_response(serializer.data, page_obj, "病历列表获取成功")except Exception as e:return ErrorResponse(f"病历列表获取失败: {str(e)}")# 获取病历详情
@login_required
def get_medical_record_detail(request, record_id):try:# 获取病历信息medical_record = get_object_or_404(MedicalRecord, id=record_id)# 序列化数据serializer = MedicalRecordSerializer(medical_record)# 获取处方信息prescriptions = Prescription.objects.filter(medical_record_id=record_id)prescription_serializer = PrescriptionSerializer(prescriptions, many=True)# 获取检查检验信息examinations = Examination.objects.filter(medical_record_id=record_id)examination_serializer = ExaminationSerializer(examinations, many=True)return SuccessResponse({'medical_record': serializer.data,'prescriptions': prescription_serializer.data,'examinations': examination_serializer.data}, "病历详情获取成功")except Exception as e:return ErrorResponse(f"病历详情获取失败: {str(e)}")# 更新病历
@login_required
@is_doctor
def update_medical_record(request, record_id):if request.method == 'POST':try:data = json.loads(request.body)# 获取病历信息medical_record = get_object_or_404(MedicalRecord, id=record_id)# 更新病历信息medical_record.chief_complaint = data.get('chief_complaint', medical_record.chief_complaint)medical_record.present_illness = data.get('present_illness', medical_record.present_illness)medical_record.physical_examination = data.get('physical_examination', medical_record.physical_examination)medical_record.diagnosis = data.get('diagnosis', medical_record.diagnosis)medical_record.treatment_plan = data.get('treatment_plan', medical_record.treatment_plan)medical_record.follow_up = data.get('follow_up', medical_record.follow_up)medical_record.status = data.get('status', medical_record.status)medical_record.update_time = datetime.now()medical_record.save()return SuccessResponse("病历更新成功")except Exception as e:return ErrorResponse(f"病历更新失败: {str(e)}")else:return ErrorResponse("请求方法错误")# 创建处方
@login_required
@is_doctor
def create_prescription(request):if request.method == 'POST':try:data = json.loads(request.body)# 获取病历信息medical_record_id = data.get('medical_record_id')if not medical_record_id:return ErrorResponse("病历ID不能为空")# 获取药品信息drug_id = data.get('drug_id')if not drug_id:return ErrorResponse("药品ID不能为空")# 创建处方prescription = Prescription(medical_record_id=medical_record_id,drug_id=drug_id,dosage=data.get('dosage'),usage=data.get('usage'),duration=data.get('duration'),total_quantity=data.get('total_quantity'),status=1,  # 未发药create_time=datetime.now(),update_time=datetime.now())prescription.save()return SuccessResponse({"prescription_id": prescription.id}, "处方创建成功")except Exception as e:return ErrorResponse(f"处方创建失败: {str(e)}")else:return ErrorResponse("请求方法错误")# 创建检查检验
@login_required
@is_doctor
def create_examination(request):if request.method == 'POST':try:data = json.loads(request.body)# 获取病历信息medical_record_id = data.get('medical_record_id')if not medical_record_id:return ErrorResponse("病历ID不能为空")# 创建检查检验examination = Examination(medical_record_id=medical_record_id,examination_type=data.get('examination_type'),examination_item=data.get('examination_item'),examination_date=datetime.now(),doctor_id=request.user.staff.id,status=1,  # 未完成create_time=datetime.now(),update_time=datetime.now())examination.save()return SuccessResponse({"examination_id": examination.id}, "检查检验创建成功")except Exception as e:return ErrorResponse(f"检查检验创建失败: {str(e)}")else:return ErrorResponse("请求方法错误")# 更新检查检验结果
@login_required
@is_doctor
def update_examination_result(request, examination_id):if request.method == 'POST':try:data = json.loads(request.body)# 获取检查检验信息examination = get_object_or_404(Examination, id=examination_id)# 更新检查检验结果examination.examination_result = data.get('examination_result', examination.examination_result)examination.status = 2  # 已完成examination.update_time = datetime.now()examination.save()return SuccessResponse("检查检验结果更新成功")except Exception as e:return ErrorResponse(f"检查检验结果更新失败: {str(e)}")else:return ErrorResponse("请求方法错误")
4.2 前端界面设计与实现

前端界面采用 Vue.js 框架实现,结合 Element UI 组件库构建美观、易用的用户界面。以下是系统主要界面的设计与实现:

  1. 登录界面:提供用户登录功能,支持用户名 / 密码登录。

  2. 首页:展示系统概览信息,包括今日预约、今日接诊、待处理事项等。

  3. 客户管理界面:展示客户列表,支持客户信息的新增、修改、查询等操作。

  4. 宠物管理界面:展示宠物列表,支持宠物信息的新增、修改、查询等操作,查看宠物健康档案。

  5. 医生排班界面:展示医生排班信息,支持排班计划的制定和调整。

  6. 预约挂号界面:展示预约列表,支持预约的新增、修改、取消等操作。

  7. 诊疗管理界面:展示病历列表,支持病历的创建、修改、查看等操作,开具处方和安排检查检验。

  8. 药品管理界面:展示药品列表,支持药品信息的新增、修改、查询等操作,管理药品库存。

  9. 库存管理界面:展示库存信息,支持库存的出入库操作,库存盘点和预警。

  10. 财务管理界面:展示收费记录和退费记录,支持财务统计和报表生成。

以下是诊疗管理界面的部分实现代码示例:

html

预览

<template><div class="medical-record-manage"><el-card class="filter-card"><el-form :inline="true" :model="filterForm" class="demo-form-inline"><el-form-item label="宠物ID"><el-input v-model="filterForm.pet_id" placeholder="请输入宠物ID"></el-input></el-form-item><el-form-item label="医生"><el-select v-model="filterForm.doctor_id" placeholder="请选择医生"><el-optionv-for="item in doctorList":key="item.id":label="item.name":value="item.id"></el-option></el-select></el-form-item><el-form-item label="日期范围"><el-date-pickerv-model="filterForm.dateRange"type="daterange"range-separator="至"start-placeholder="开始日期"end-placeholder="结束日期"></el-date-picker></el-form-item><el-form-item label="状态"><el-select v-model="filterForm.status" placeholder="请选择状态"><el-option label="未完成" value="1"></el-option><el-option label="已完成" value="2"></el-option></el-select></el-form-item><el-form-item><el-button type="primary" @click="search">查询</el-button><el-button @click="resetFilter">重置</el-button></el-form-item></el-form></el-card><el-card class="table-card"><div slot="header" class="clearfix"><span>病历列表</span><el-button style="float: right; margin-top: -5px" type="primary" @click="createMedicalRecord">新增病历</el-button></div><el-table:data="medicalRecordList"stripebordersize="small"@row-click="handleRowClick"><el-table-column prop="id" label="病历ID"></el-table-column><el-table-column label="宠物信息"><template slot-scope="scope"><div>{{ scope.row.pet_name }}</div><div class="text-muted">{{ scope.row.pet_species }} | {{ scope.row.pet_gender_text }}</div></template></el-table-column><el-table-column label="客户信息"><template slot-scope="scope"><div>{{ scope.row.customer_name }}</div><div class="text-muted">{{ scope.row.customer_phone }}</div></template></el-table-column><el-table-column prop="doctor_name" label="医生"></el-table-column><el-table-column prop="visit_date" label="就诊日期"></el-table-column><el-table-column prop="chief_complaint" label="主诉"></el-table-column><el-table-column label="状态"><template slot-scope="scope"><el-tag :type="scope.row.status === 1 ? 'warning' : 'success'">{{ scope.row.status_text }}</el-tag></template></el-table-column><el-table-column label="操作"><template slot-scope="scope"><el-buttonsize="mini"@click="viewMedicalRecord(scope.row.id)">查看</el-button><el-buttonsize="mini"type="primary"@click="editMedicalRecord(scope.row.id)"v-if="scope.row.status === 1">编辑</el-button></template></el-table-column></el-table><el-pagination@size-change="handleSizeChange"@current-change="handleCurrentChange":current-page="currentPage":page-sizes="[10, 20, 50, 100]":page-size="pageSize"layout="total, sizes, prev, pager, next, jumper":total="total"></el-pagination></el-card></div>
</template><script>
export default {data() {return {medicalRecordList: [],doctorList: [],filterForm: {pet_id: '',doctor_id: '',dateRange: [],status: ''},currentPage: 1,pageSize: 10,total: 0,loading: false}},created() {this.getDoctorList();this.getMedicalRecordList();},methods: {// 获取医生列表getDoctorList() {this.$axios.get('/api/staff/doctors/').then(response => {this.doctorList = response.data.data;}).catch(error => {this.$message.error(error.message);});},// 获取病历列表getMedicalRecordList() {this.loading = true;let params = {page: this.currentPage,page_size: this.pageSize,pet_id: this.filterForm.pet_id,doctor_id: this.filterForm.doctor_id,status: this.filterForm.status};if (this.filterForm.dateRange && this.filterForm.dateRange.length > 0) {params.start_date = this.filterForm.dateRange[0];params.end_date = this.filterForm.dateRange[1];}this.$axios.get('/api/medical-records/', { params }).then(response => {this.medicalRecordList = response.data.data;this.total = response.data.total;this.loading = false;}).catch(error => {this.$message.error(error.message);this.loading = false;});},// 搜索search() {this.currentPage = 1;this.getMedicalRecordList();},// 重置过滤条件resetFilter() {this.filterForm = {pet_id: '',doctor_id: '',dateRange: [],status: ''};this.currentPage = 1;this.getMedicalRecordList();},// 分页相关handleSizeChange(val) {this.pageSize = val;this.getMedicalRecordList();},handleCurrentChange(val) {this.currentPage = val;this.getMedicalRecordList();},// 新增病历createMedicalRecord() {this.$router.push({ name: 'MedicalRecordCreate' });},// 查看病历viewMedicalRecord(id) {this.$router.push({ name: 'MedicalRecordView', params: { id } });},// 编辑病历editMedicalRecord(id) {this.$router.push({ name: 'MedicalRecordEdit', params: { id } });},// 行点击事件handleRowClick(row) {this.viewMedicalRecord(row.id);}}
}
</script><style scoped>
.filter-card {margin-bottom: 15px;
}.table-card {min-height: 600px;
}.text-muted {color: #909399;font-size: 12px;
}
</style>

5. 系统测试与部署

5.1 系统测试

系统测试是确保系统质量的重要环节。本研究对系统进行了全面的测试,包括功能测试、性能测试、安全测试等。

  1. 功能测试:对系统的各个功能模块进行了详细的测试,确保系统功能完整、正确。测试结果表明,系统的各项功能均能正常运行,满足用户需求。

  2. 性能测试:使用 JMeter 工具对系统进行了性能测试,测试内容包括响应时间、并发用户数、吞吐量等。测试结果表明,系统在并发用户数不超过 100 的情况下,响应时间均能控制在 3 秒以内,满足系统性能需求。

  3. 安全测试:对系统进行了安全测试,包括 SQL 注入测试、XSS 攻击测试、密码安全测试等。测试结果表明,系统具有良好的安全性,能够有效防止各种安全攻击。

5.2 系统部署

系统采用 Docker 容器化技术进行部署,将系统的各个组件打包成独立的 Docker 镜像,通过 Docker Compose 进行统一管理和部署。系统部署步骤如下:

  1. 环境准备:安装 Docker 和 Docker Compose,配置好网络环境。

  2. 镜像构建:根据系统各个组件的 Dockerfile,构建相应的 Docker 镜像。

  3. 配置文件准备:准备好系统的配置文件,包括数据库配置、应用配置等。

  4. 容器部署:使用 Docker Compose 编排文件,部署系统的各个容器,包括 Web 服务器、应用服务器、数据库服务器等。

  5. 系统初始化:初始化数据库,导入基础数据,配置系统参数。

  6. 系统测试:部署完成后,对系统进行全面测试,确保系统正常运行。

6. 系统应用与评价

系统部署上线后,在某宠物医院进行了实际应用。通过一段时间的使用,系统得到了用户的一致好评。用户认为系统操作简单、功能完善、界面美观,能够有效提高工作效率和服务质量。

通过实际应用验证,系统具有以下优点:

  1. 功能完善:系统涵盖了宠物医院的各个业务环节,包括客户管理、宠物管理、医生管理、诊疗管理、药品管理、库存管理、财务管理等,满足了宠物医院的全面管理需求。

  2. 操作简便:系统采用直观的界面设计和友好的交互方式,使用户能够轻松上手,减少了培训成本。

  3. 数据安全:系统采用了多层次的数据安全保障措施,包括用户认证、权限控制、数据加密等,确保了用户数据的安全性和隐私性。

  4. 性能稳定:系统采用了分布式架构和缓存技术,具有良好的性能和稳定性,能够满足宠物医院的日常业务需求。

  5. 可扩展性强:系统采用了模块化设计和微服务架构,具有良好的可扩展性,能够方便地添加新的功能模块。

7. 结论与展望

7.1 研究成果总结

本研究设计并实现了一个基于 Python Django 框架的宠物医院管理系统,通过整合客户管理、宠物管理、医生管理、诊疗管理、药品管理、库存管理、财务管理等功能模块,实现了宠物医院业务的全流程数字化管理。系统采用 B/S 架构,前端使用 Vue.js 框架构建,后端使用 Django 框架实现,数据库使用 MySQL 存储业务数据。通过实际应用验证,系统具有良好的稳定性、可扩展性和用户体验,能够有效提高宠物医院的管理效率和服务质量。

7.2 研究不足与展望

尽管本研究取得了一定的成果,但仍存在一些不足之处。例如,系统的数据分析功能还不够完善,缺乏对业务数据的深度挖掘和分析;系统的移动端应用还不够完善,用户体验有待进一步提高。

在未来的研究中,我们将进一步完善系统的功能,加强数据分析和挖掘能力,为宠物医院提供更加全面、深入的业务分析和决策支持。同时,我们将进一步优化系统的移动端应用,提高用户体验,为用户提供更加便捷、高效的服务。此外,我们还将探索引入人工智能技术,如机器学习、自然语言处理等,提高系统的智能化水平,为宠物医院的管理和服务带来更多的创新和突破。

参考文献

  博主介绍:硕士研究生,专注于信息化技术领域开发与管理,会使用java、标准c/c++等开发语言,以及毕业项目实战✌

       从事基于java BS架构、CS架构、c/c++ 编程工作近16年,拥有近12年的管理工作经验,拥有较丰富的技术架构思想、较扎实的技术功底和资深的项目管理经验。

       先后担任过技术总监、部门经理、项目经理、开发组长、java高级工程师及c++工程师等职位,在工业互联网、国家标识解析体系、物联网、分布式集群架构、大数据通道处理、接口开发、远程教育、办公OA、财务软件(工资、记账、决策、分析、报表统计等方面)、企业内部管理软件(ERP、CRM等)、arggis地图等信息化建设领域有较丰富的实战工作经验;拥有BS分布式架构集群、数据库负载集群架构、大数据存储集群架构,以及高并发分布式集群架构的设计、开发和部署实战经验;拥有大并发访问、大数据存储、即时消息等瓶颈解决方案和实战经验。

       拥有产品研发和发明专利申请相关工作经验,完成发明专利构思、设计、编写、申请等工作,并获得发明专利1枚。

-----------------------------------------------------------------------------------

      大家在毕设选题、项目升级、论文写作,就业毕业等相关问题都可以给我留言咨询,非常乐意帮助更多的人或加w 908925859。

相关博客地址:

csdn专业技术博客:https://blog.csdn.net/mr_lili_1986?type=blog

Iteye博客:        https://www.iteye.com/blog/user/mr-lili-1986-163-com

门户:http://www.petsqi.cn

七、其他案例: 

 

  

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/web/84387.shtml
繁体地址,请注明出处:http://hk.pswp.cn/web/84387.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

6612345(Web打印浏览器) 开发历程

6612345(Web打印浏览器) 开发历程 2022年7月,由于chrome新版本的限制, HttpPrinter(Web打印插件) 从http协议转为websocket协议. 为了提前预防chrome后续版本(至于哪个版本,我们也不知道)无法和本地插件通信,我们重新定制了一款chrome浏览器.绕过通讯限制. 首个版本,基于微软…

信安实验室CTF writeup

文章目录 1、白给签到2、Welcome3、Get4、Post5、滴滴滴6、每逢佳节7、Bacon8、古典变奏9、affine10、affine-revenge11、Random_encrypt12、easy_re13、re114、ez_xor15、maze16、easy_php17、easy_bypass18、Autumn19、easy_Cookie20、[白给] 连上就给flag21、小兔子22、我在…

【入门级-基础知识与编程环境:NOI以及相关活动的历史】

NOI 及相关活动的历史如下&#xff1a; 1984 年&#xff1a;邓小平同志提出 “计算机的普及要从娃娃抓起”。为响应这一号召&#xff0c;中国计算机学会&#xff08;CCF&#xff09;于当年自主创建了面向中学生的 “全国青少年程序设计竞赛”&#xff0c;当年参加竞赛的有 8000…

微软应用商店打不开怎么办2025,打开TLS1.3

微软应用商店打不开怎么办? 应用商店打不开 步骤如下 1. “Internet选项”、“高级”&#xff0c;进行设置 注意&#xff1a;将“使用TSL 1.2”和“使用TSL 1.3”都勾选上&#xff0c;再点击“应用” 应该最主要是TLS1.3&#xff0c;我之前TLS1.2开了的。 2. 选择“连接”…

C/C++ 高频八股文面试题1000题(一)

原作者&#xff1a;Linux教程&#xff0c;原文地址&#xff1a;C/C 高频八股文面试题1000题(一) 在准备技术岗位的求职过程中&#xff0c;C/C始终是绕不开的核心考察点。无论是互联网大厂的笔试面试&#xff0c;还是嵌入式、后台开发、系统编程等方向的岗位&#xff0c;C/C 都…

JetBrains IDE v2025.1 升级,AI 智能+语言支持齐飞

2025.1 大版本同步上线&#xff0c;JetBrains 家族全员升级&#xff01;不只是性能提升&#xff0c;更有 AI 驱动开发、大语言支持、终端大改&#xff0c;为开发者带来真正的生产力飞跃。接下来&#xff0c;一起来看看 IntelliJ IDEA、PyCharm、GoLand、CLion 等产品的重磅亮点…

高性能群集部署技术-LVS+Keepalived高可用群集

目录 #1.1Keepalived双机热备基础知识 1.1.1Keepalived概述及安装 1.1.2Keepalived的热备方式 1.1.3Keepalived的安装与服务控制 #2.1使用Keeplived实现双机热备 2.1.1主服务器的配置 2.1.2备用服务器的配置 2.1.3测试双机热备功能 #3.1使用Keeplived实现双机热备的实验案例…

ros中相机话题在web页面上的显示,尝试js解析sensor_msgs/Image数据

ros中相机话题在web页面上的显示 思路&#xff1a; rosbridge websocket 开启ros与web的通路&#xff0c; 话题数据转换为image或者绘制在 canvas中。 话题格式&#xff1a; sensor_msgs/Image 测试数据编码类型为bgr8 尝试&#xff1a; 解析 为bitmap arraybuffer 写入bgr…

PowerShell批量处理文件名称/内容的修改

在日常的文件管理与处理中&#xff0c;常常需要对大量文件名或文件内容进行修改&#xff0c;而手动逐个操作既繁琐又容易出错。PowerShell作为一种强大的脚本语言&#xff0c;为我们提供了高效批量处理文件名及内容修改的解决方案。通过编写简单的PowerShell脚本&#xff0c;可…

GA3C(GPU/CPU混合式异步优势Actor-Critic)算法实现控制倒立摆

GA3C算法实现倒立摆 完整代码在文章结尾 GA3C算法 GPU/CPU混合式异步优势AC算法&#xff0c;是由A3C算法进一步优化而来&#xff0c;为了更好利用GPU计算资源。 GA3C理论上与A3C相同&#xff0c;属于On-Policy。但由于存在延迟更新问题&#xff0c;导致用于策略更新的数据并…

基础RAG实现,最佳入门选择(六)

带有问题生成的文档增强RAG 通过问题生成使用文档增强来实现增强的RAG方法。通过为每个文本块生成相关问题&#xff0c;改进了检索过程&#xff0c;从而从语言模型中获得更好的响应。 具体实现步骤 1.数据摄取&#xff1a;从PDF文件中提取文本。 2.chunking&#xff1a;将文本…

vue3 电商类网站实现规格的选择

目前有一个这样的需求 类似淘宝 京东选择 但是在人家大厂给的数据我不清除是什么样子的 我这边后端给的数据 一开始是想把规格全部显示出来的 发现实现不了 后端的数据有限 因为必须选择一个颜色 才可以对应的第二个规格 才知道有没有库存 因为这个库存 是由两个规格决定…

HarmonyOS5 音乐播放器app(一):歌曲展示与收藏功能(附代码)

鸿蒙音乐应用开发&#xff1a;从收藏功能实现看状态管理与交互设计 在移动应用开发中&#xff0c;收藏功能是用户体验的重要组成部分。本文将以鸿蒙OS音乐应用为例&#xff0c;详细解析如何实现具有动画效果的收藏功能&#xff0c;涉及状态管理、组件通信和交互动画等核心技术…

PHP函数大全参考代码

字符串相关操作函数 去除空格或其他字符 trim删除字符串两端空格或其他预定义字符rtrim删除字符串右边空格或其他预定义字符choprtrim() 的别名 chop() 与 Perl 的 chop() 函数有所不同&#xff0c;它会删除字符串的最后一个字符。ltrim删除字符串左边空格或其他预定义字符 字…

Flowise工作流引擎的本地部署与远程访问实践

文章目录 前言1. Docker安装Flowise2. Ubuntu安装Cpolar3. 配置Flowise公网地址4. 远程访问Flowise5. 固定Cpolar公网地址6. 固定地址访问 前言 当多数团队仍深陷传统数据处理框架的桎梏时&#xff0c;创新者已率先引入Flowise智能流程引擎&#xff0c;成功将面向大型语言模型…

端侧AI+OS垂直创新研究报告

端侧AIOS垂直创新研究报告 摘要 端侧AIOS研究背景、核心创新点及产业价值 研究背景 随着AI技术的快速发展&#xff0c;端侧AI已成为2025年的重要技术趋势[4]。端侧AI是指将AI计算能力从云端迁移到终端设备上&#xff0c;实现本地化的智能处理。这一技术变革主要受到隐私安全…

【JVM 07-运行时常量池重要组成部分-StringTable】

StringTable 笔记记录 1. 常量池、运行时常量池与字符串常量池(StringTable)的关系2. String str"a"放入字符串常量池的过程3. 常见面试题4. StringTable特性5.StringTable的位置变更5.1 为什么位置变换&#xff1f;5.2 位置变更演示 6. StringTable垃圾回收7. Strin…

算法-每日一题(DAY10)打家劫舍

1.题目链接&#xff1a; 198. 打家劫舍 - 力扣&#xff08;LeetCode&#xff09; 2.题目描述&#xff1a; 你是一个专业的小偷&#xff0c;计划偷窃沿街的房屋。每间房内都藏有一定的现金&#xff0c;影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统&#xf…

android UI 布局

一&#xff1a;约束布局 参考&#xff1a; 【约束布局】ConstraintLayout 约束布局 ( 简介 | 引入依赖 | 基本操作 | 垂直定位约束 | 角度定位约束 | 基线约束 )_韩曙亮-2048 AI社区 以下是一个基于 ConstraintLayout 的简单 Android 示例&#xff0c;包含三个控件&#xff0…

【K8S】详解Labels​​ 和 ​​Annotations

在 Kubernetes&#xff08;K8s&#xff09;中&#xff0c;​​Labels&#xff08;标签&#xff09;​​ 和 ​​Annotations&#xff08;注解&#xff09;​​ 都是用于为资源对象&#xff08;如 Pod、Service、Deployment&#xff09;附加元数据的机制&#xff0c;但它们在设计…