??
摘要
本研究針對傳統寵物醫院管理模式存在的效率低下、信息不共享、服務流程繁瑣等問題,設計并實現了一個基于 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 研究內容與方法
本研究的主要內容包括:
-
系統需求分析:通過問卷調查、訪談等方式,了解寵物醫院管理人員、醫生、護士和寵物主人的需求,明確系統的功能和性能要求。
-
系統設計:包括系統架構設計、數據庫設計、功能模塊設計等,確定系統的技術選型和實現方案。
-
系統實現:基于 Python Django 框架實現系統的各個功能模塊,包括用戶認證、客戶管理、寵物管理、醫生管理、診療管理、藥品管理、庫存管理、財務管理等。
-
系統測試:對系統進行功能測試、性能測試、安全測試等,確保系統的穩定性和可靠性。
-
系統部署與應用:將系統部署到生產環境中,進行實際應用驗證,評估系統的使用效果和用戶滿意度。
本研究采用的研究方法包括:
-
文獻研究法:查閱國內外相關文獻,了解寵物醫院管理系統的研究現狀和發展趨勢,為系統設計提供理論支持。
-
問卷調查法:通過問卷調查的方式,了解寵物醫院管理人員、醫生、護士和寵物主人的需求和意見,為系統功能設計提供依據。
-
案例分析法:分析國內外知名寵物醫院管理系統的成功案例,借鑒其設計思路和實現方法,為本系統的設計和實現提供參考。
-
實驗研究法:通過實驗對比不同的技術方案和算法,選擇最優的方案和算法,提高系統的性能和用戶體驗。
2. 系統需求分析
2.1 功能需求
通過對寵物醫院管理人員、醫生、護士和寵物主人的需求調研,確定系統的主要功能需求如下:
-
用戶管理功能
- 用戶注冊、登錄、信息修改
- 用戶角色管理(管理員、醫生、護士、前臺、財務、寵物主人)
- 用戶權限控制
-
客戶管理功能
- 客戶信息錄入、修改、查詢
- 客戶檔案管理
- 客戶消費記錄查詢
- 客戶回訪管理
-
寵物管理功能
- 寵物信息錄入、修改、查詢
- 寵物健康檔案管理
- 寵物疫苗接種記錄管理
- 寵物診療歷史記錄查詢
-
醫生管理功能
- 醫生信息錄入、修改、查詢
- 醫生排班管理
- 醫生出診記錄管理
- 醫生績效統計
-
診療管理功能
- 預約掛號管理
- 就診登記
- 病歷管理
- 檢查檢驗管理
- 診斷結果管理
- 治療方案制定
- 手術管理
- 麻醉管理
-
藥品管理功能
- 藥品信息錄入、修改、查詢
- 藥品供應商管理
- 藥品采購管理
- 藥品庫存管理
- 藥品效期管理
- 藥品發放管理
-
庫存管理功能
- 醫療器械管理
- 耗材管理
- 庫存盤點
- 庫存預警
-
財務管理功能
- 收費管理
- 退費管理
- 收入統計
- 支出管理
- 財務報表生成
-
系統設置功能
- 基礎數據設置(科室、病種、藥品分類等)
- 系統參數設置
- 數據備份與恢復
- 操作日志管理
2.2 非功能需求
-
性能需求
- 系統響應時間應滿足用戶操作要求,一般查詢操作響應時間不超過 3 秒,復雜操作響應時間不超過 10 秒
- 系統應支持至少 100 個并發用戶同時在線操作
- 系統應能夠處理大量數據,保證數據的完整性和一致性
-
安全性需求
- 系統應保證用戶數據的安全性和隱私性,嚴格遵守相關法律法規
- 用戶密碼應進行加密存儲,防止密碼泄露
- 系統應具備完善的訪問控制機制,防止非法訪問和操作
- 系統應具備數據備份和恢復機制,防止數據丟失
-
可用性需求
- 系統應具備良好的用戶界面和操作體驗,使用戶能夠輕松上手
- 系統應提供完善的幫助文檔和在線客服,解答用戶疑問
- 系統應具備高可用性,保證每天 24 小時不間斷運行
-
可擴展性需求
- 系統應具備良好的可擴展性,能夠方便地添加新的功能模塊
- 系統應支持數據量和用戶數的不斷增長,能夠通過集群化部署實現性能提升
-
兼容性需求
- 系統應支持主流瀏覽器(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 數據庫設計
根據系統需求,設計了以下主要數據表:
-
用戶表 (User):存儲系統用戶的基本信息,包括用戶 ID、用戶名、密碼、角色、聯系方式等。
-
科室表 (Department):存儲醫院科室信息,包括科室 ID、科室名稱、科室描述等。
-
員工表 (Staff):存儲醫院員工信息,包括員工 ID、用戶 ID、科室 ID、職位、職稱等。
-
客戶表 (Customer):存儲客戶信息,包括客戶 ID、姓名、性別、年齡、聯系方式、地址等。
-
寵物表 (Pet):存儲寵物信息,包括寵物 ID、客戶 ID、寵物名稱、品種、性別、年齡、體重、毛色等。
-
寵物疫苗記錄表 (PetVaccination):存儲寵物疫苗接種記錄,包括記錄 ID、寵物 ID、疫苗名稱、接種日期、下次接種日期等。
-
醫生排班表 (DoctorSchedule):存儲醫生排班信息,包括排班 ID、醫生 ID、日期、時間段、狀態等。
-
預約掛號表 (Appointment):存儲預約掛號信息,包括預約 ID、客戶 ID、寵物 ID、醫生 ID、預約日期、預約時間段、狀態等。
-
病歷表 (MedicalRecord):存儲寵物病歷信息,包括病歷 ID、寵物 ID、醫生 ID、就診日期、主訴、現病史、體格檢查、診斷結果、治療方案等。
-
處方表 (Prescription):存儲藥品處方信息,包括處方 ID、病歷 ID、藥品 ID、用量、用法、天數等。
-
檢查檢驗表 (Examination):存儲檢查檢驗信息,包括檢查 ID、病歷 ID、檢查項目、檢查日期、檢查結果等。
-
藥品表 (Drug):存儲藥品信息,包括藥品 ID、藥品名稱、藥品分類、規格、單位、價格、庫存數量、供應商等。
-
藥品庫存表 (DrugInventory):存儲藥品庫存信息,包括庫存 ID、藥品 ID、入庫日期、入庫數量、出庫日期、出庫數量、庫存數量等。
-
收費記錄表 (ChargeRecord):存儲收費信息,包括收費 ID、病歷 ID、項目名稱、金額、收費日期、收費人員等。
-
退費記錄表 (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 架構模式,將系統分為模型層、視圖層和控制器層。以下是核心模塊的實現細節:
-
用戶認證與權限管理模塊:基于 Django 的認證系統實現用戶注冊、登錄、權限控制等功能,采用 JWT 實現無狀態認證。
-
客戶與寵物管理模塊:實現客戶信息和寵物信息的錄入、修改、查詢等功能,支持寵物健康檔案的管理。
-
醫生與排班管理模塊:實現醫生信息的管理和排班計劃的制定,支持預約掛號的處理。
-
診療管理模塊:實現病歷的創建、修改、查詢等功能,支持處方開具、檢查檢驗安排等診療流程。
-
藥品與庫存管理模塊:實現藥品信息的管理、庫存的出入庫操作、庫存預警等功能。
-
財務管理模塊:實現收費、退費、財務統計等功能,支持各類財務報表的生成。
以下是診療管理模塊的部分實現代碼示例:
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 組件庫構建美觀、易用的用戶界面。以下是系統主要界面的設計與實現:
-
登錄界面:提供用戶登錄功能,支持用戶名 / 密碼登錄。
-
首頁:展示系統概覽信息,包括今日預約、今日接診、待處理事項等。
-
客戶管理界面:展示客戶列表,支持客戶信息的新增、修改、查詢等操作。
-
寵物管理界面:展示寵物列表,支持寵物信息的新增、修改、查詢等操作,查看寵物健康檔案。
-
醫生排班界面:展示醫生排班信息,支持排班計劃的制定和調整。
-
預約掛號界面:展示預約列表,支持預約的新增、修改、取消等操作。
-
診療管理界面:展示病歷列表,支持病歷的創建、修改、查看等操作,開具處方和安排檢查檢驗。
-
藥品管理界面:展示藥品列表,支持藥品信息的新增、修改、查詢等操作,管理藥品庫存。
-
庫存管理界面:展示庫存信息,支持庫存的出入庫操作,庫存盤點和預警。
-
財務管理界面:展示收費記錄和退費記錄,支持財務統計和報表生成。
以下是診療管理界面的部分實現代碼示例:
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 系統測試
系統測試是確保系統質量的重要環節。本研究對系統進行了全面的測試,包括功能測試、性能測試、安全測試等。
-
功能測試:對系統的各個功能模塊進行了詳細的測試,確保系統功能完整、正確。測試結果表明,系統的各項功能均能正常運行,滿足用戶需求。
-
性能測試:使用 JMeter 工具對系統進行了性能測試,測試內容包括響應時間、并發用戶數、吞吐量等。測試結果表明,系統在并發用戶數不超過 100 的情況下,響應時間均能控制在 3 秒以內,滿足系統性能需求。
-
安全測試:對系統進行了安全測試,包括 SQL 注入測試、XSS 攻擊測試、密碼安全測試等。測試結果表明,系統具有良好的安全性,能夠有效防止各種安全攻擊。
5.2 系統部署
系統采用 Docker 容器化技術進行部署,將系統的各個組件打包成獨立的 Docker 鏡像,通過 Docker Compose 進行統一管理和部署。系統部署步驟如下:
-
環境準備:安裝 Docker 和 Docker Compose,配置好網絡環境。
-
鏡像構建:根據系統各個組件的 Dockerfile,構建相應的 Docker 鏡像。
-
配置文件準備:準備好系統的配置文件,包括數據庫配置、應用配置等。
-
容器部署:使用 Docker Compose 編排文件,部署系統的各個容器,包括 Web 服務器、應用服務器、數據庫服務器等。
-
系統初始化:初始化數據庫,導入基礎數據,配置系統參數。
-
系統測試:部署完成后,對系統進行全面測試,確保系統正常運行。
6. 系統應用與評價
系統部署上線后,在某寵物醫院進行了實際應用。通過一段時間的使用,系統得到了用戶的一致好評。用戶認為系統操作簡單、功能完善、界面美觀,能夠有效提高工作效率和服務質量。
通過實際應用驗證,系統具有以下優點:
-
功能完善:系統涵蓋了寵物醫院的各個業務環節,包括客戶管理、寵物管理、醫生管理、診療管理、藥品管理、庫存管理、財務管理等,滿足了寵物醫院的全面管理需求。
-
操作簡便:系統采用直觀的界面設計和友好的交互方式,使用戶能夠輕松上手,減少了培訓成本。
-
數據安全:系統采用了多層次的數據安全保障措施,包括用戶認證、權限控制、數據加密等,確保了用戶數據的安全性和隱私性。
-
性能穩定:系統采用了分布式架構和緩存技術,具有良好的性能和穩定性,能夠滿足寵物醫院的日常業務需求。
-
可擴展性強:系統采用了模塊化設計和微服務架構,具有良好的可擴展性,能夠方便地添加新的功能模塊。
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
七、其他案例:?
?
??
?